La variable no se establece en msg.sender en el constructor

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 contractOwnerun 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 fromatributo durante la implementación?

Respuestas (1)

El problema es la falta de coincidencia entre el nombre del contrato, Testy el nombre de lo que probablemente iba a ser su constructor, TestContract.

Debido TestContracta que nunca se ejecutó, ownernunca 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.

Eliminé mi respuesta porque la tuya es correcta.