Llamada que no funciona en variable declarada en un contrato con trufa

Creé un contrato simple con Truffle para probar las cosas. Estoy usando testrpc con esto.

pragma solidity ^0.4.11;

contract HelloSystem {

    address owner;

    function HelloSystem() {
        owner = msg.sender;
    }

    function remove() {
        if (msg.sender == owner) {
            selfdestruct(owner);
        }
    }
}

Después de implementar este contrato, aunque puedo llamar removedesde la consola truffle, no puedo llamar al propietario que se estableció al inicio del contrato.

He intentado:

truffle(development)> HelloSystem.deployed().then(function(instance){HS = HelloSystem.at(instance.address)})
HS.owner.call().then(console.log)
HS.owner
HS.owner.call()

Puedo muy bien llamar a la función de eliminación en mi contrato y eliminarla. Pero el dueño no está trabajando. Estoy seguro de que me estoy perdiendo algo simple, si alguien puede señalarlo, sería mucho, muchas gracias.

Creé otro contrato simple con un saldo numérico y lo hice público.

contract helloWorld {    
    uint public balance;    

    function helloWorld() {
        balance = 1000;
    }
} 

Ahora, mi llamada al equilibrio funciona bien.

truffle(development)> helloWorld.deployed().then(function(instance){HW = helloWorld.at(instance.address)})
truffle(development)> HW.balance
{ [Function]
  call: [Function],
  sendTransaction: [Function],
  request: [Function: bound ],
  estimateGas: [Function] }
truffle(development)>

¿Será esto por la declaración público/privado?

Actualizar En línea con mi argumento de declaración pública, intenté declarar que address public ownertodavía no funciona. Por lo tanto, abierto a sus muchachos. Por favor ayuda.

Respuestas (1)

En su contrato, la variable ownerno es pública, por lo que HS.propietario no estará definido.

Para superar este problema, puede declarar la variable de propietario como pública o crear una función de obtención para obtener el propietario como se muestra a continuación:

address public owner;

o

function getOwner() returns (address owner) {
    return owner;
}

Según tengo entendido, esto debería ser un retorno constante para evitar el uso de gas. como abajo:

function getOwner() constant returns (address owner) {
    return owner;
}

Espero que esto ayude..!

Si, funciona. Extrañamente, declaré la dirección como pública más tarde cuando me di cuenta de que la razón que señalaste debe ser la razón. De alguna manera, es posible porque no guardé el código, no se compiló el nuevo cambio :)
probablemente el archivo no se haya guardado, compilado o migrado. :)