Tener un problema extraño con Solidity y web3.js 1.0. Cualquier ayuda sería muy apreciada.
Aquí está mi código de solidez:
pragma solidity ^0.4.16;
contract Test {
address public contractOwner;
function TestContract() public {
contractOwner = msg.sender;
}
function foo() constant returns(address) {
return msg.sender;
}
}
Sin embargo, llamar al método getter generado automáticamente para produce address public contractOwner
un resultado inesperado.
> var deployed;
undefined
> var contract = new web3.eth.Contract(abi)
undefined
> accounts[0]
'0x78924d231848a2d37781e42A2Fe30737F19b6c5E'
> contract.deploy({data: bytecode}).send({
... from: accounts[0],
... gas: 3000000
... }).then((_deployed) => { deployed = _deployed })
Promise {
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_promise0: undefined,
_receiver0: undefined }
> deployed.setProvider(provider)
true
> deployed.methods.foo().call().then(console.log)
Promise {
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_promise0: undefined,
_receiver0: undefined }
> 0x78924d231848a2d37781e02A2Fe30v37F19b6c5E
> deployed.methods.contractOwner().call().then(console.log)
Promise {
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_promise0: undefined,
_receiver0: undefined }
> 0x0000000000000000000000000000000000000000
Como puede ver, foo()
funciona perfectamente, pero contractOwner()
devuelve una dirección vacía. ¿No debería ser 0x78924d231848a2d37781e42A2Fe30737F19b6c5E
, que es lo que se pasa como from
atributo durante la implementación?
El problema es la falta de coincidencia entre el nombre del contrato, Test
y el nombre de lo que probablemente iba a ser su constructor, TestContract
.
Debido TestContract
a que nunca se ejecutó, owner
nunca se le asignó un valor, por lo que conserva su valor cero ( address(0)
). Cambie el nombre del contrato o de la función para que funcione como un constructor.
Iteración 122442