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 remove
desde 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 owner
todavía no funciona. Por lo tanto, abierto a sus muchachos. Por favor ayuda.
En su contrato, la variable owner
no 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..!
Manganeso
Abhishek