He seguido la conferencia en Udemy. pero tengo un error
aquí está mi 'Bandeja de entrada/contratos/Bandeja de entrada.sol'
pragma solidity ^0.4.17;
contract Inbox {
string public message;
function Inbox(string initialMessage) public {
message = initialMessage;
}
function setMessage(string newMessage) public {
message = newMessage;
}
}
y aquí hay un archivo 'Inbox/compile.js'
const path = require('path');
const fs = require('fs');
const solc = require('solc');
const inboxPath = path.resolve(__dirname, 'contracts','Inbox.sol');
const source = fs.readFileSync(inboxPath, 'utf8');
console.log(solc.compile(source, 1));
y después compilo este archivo en la terminal
nodo compilar.js
obtuve un error como el siguiente
errors:
[ ':6:5: Warning: Defining constructors as functions with the same name
as the contract is deprecated. Use "constructor(...) { ... }"
instead.\n function Inbox(string initialMessage) public {\n ^
(Relevant source part starts here and spans across multiple lines).\n' ],
Yo uso mac. Una cosa que hice de manera diferente a la conferencia fue 'npm init' en otra carpeta en lugar de la Bandeja de entrada y copié y pegué todos los archivos creados en la carpeta de la bandeja de entrada.
Debería ser una advertencia, no un error. De todos modos usando esta sintaxis
function Inbox(string initialMessage) public {
message = initialMessage;
}
está obsoleto en la versión más nueva de Solidity. Tienes que usar constructor
en lugar del nombre del contrato
constructor(string initialMessage) public {
message = initialMessage;
}
esto se compilará sin advertencias
pragma solidity ^0.4.22;
, de lo contrario, si alguien intenta compilar su contrato con un compilador antiguo, no funcionará según lo previsto.new
Solo use constructor() debería ser bueno.
constructor(string initialMessage) public {
message = initialMessage;
}
Si usa el constructor de funciones (...)... , creo que recibirá la siguiente advertencia:
Advertencia: esta función se llama "constructor" pero no es el constructor del contrato. Si pretende que sea un constructor, use "constructor(...) { ... }" sin la palabra clave "función" para definirlo.
Personalmente, acabo de cambiar el compilador para resolver el problema. En lugar de un compilador v4.17+, use el compilador v4.17. Espero que esto haya ayudado:
No olvide agregar memory
o storage
cuando declare parámetros como una cadena en el constructor
constructor(string memory initialMessage) {
message = initialMessage;
}
Don Crumley
mirg