Tengo un contrato que se ve así:
contract MainContract is usingOraclize {
...
address minter;
uint public returnRate;
...
function MainContract(uint _returnRate) {
minter = msg.sender;
returnRate = returnRate;
oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS);
}
modifier onlyMinter {
if (msg.sender != minter) throw;
_;
}
function updateReturnRate(uint newReturnRate) onlyMinter {
returnRate = newReturnRate;
}
...
}
Lo he implementado en la red de prueba: https://testnet.etherscan.io/address/0x5cad3cbdbf64b65174b36269f5201d3265569f2b
Sin embargo, cuando intento obtener el valor de la variable 'returnRate', obtengo que no está definida, aunque debería haberse establecido en la creación del contrato. Entonces traté de actualizarlo a través de la función updateReturnRate y aún no está definido. Y no puedo explicar por qué...
¿Tengo que especificar la función como pública? Aun así, ¿por qué no se estableció el valor al momento de la creación del contrato?
Estoy usando el compilador de solidez del navegador para realizar pruebas.
Después de un vistazo rápido, su contrato funciona bien. Creo que definitivamente hay algo mal con Browser Solidity
Normalmente estoy desarrollando con Truffle , así que rápidamente hice un proyecto de Truffle de su contrato (abajo)
pragma solidity ^0.4.4;
contract MainContract {
address minter;
uint public returnRate;
function MainContract(uint _returnRate) {
minter = msg.sender;
returnRate = _returnRate;
}
modifier onlyMinter {
if (msg.sender != minter) throw;
_;
}
function updateReturnRate(uint newReturnRate) onlyMinter {
returnRate = newReturnRate;
}
}
Compilé el contrato y lo implementé:
Y lo probé en la consola. Aquí está el resultado:
truffle(default)> var c = MainContract.deployed()
truffle(default)> c.returnRate.call()
{ [String: '20'] s: 1, e: 1, c: [ 20 ] }
truffle(default)> c.updateReturnRate(30)
'0x642d24031f582730000c37dd254173944840e5e771fbb0b74c032bd74f7294ba'
truffle(default)> c.returnRate.call()
{ [String: '30'] s: 1, e: 1, c: [ 30 ] }
El contrato inicializa la tarifa a 20. Y la cambié a 30 llamando a la función updateRate.
De todos modos, no soy un experto en Browser Solidity pero recomiendo herramientas como Truffle para industrializar tu desarrollo y ser más eficiente.
todo esta ahi
greg jeanmart
returnRate=_returnRate;
pabi
greg jeanmart
updateReturnRate
función. debería funcionar, no hay nada malo en su código. La única razón por la que podría ser si la transacción es enviada por otra persona que no seaminter
(el propietario del contrato). De lo contrario, ¿alguna excepción? También para el método de escritura, aconsejo devolver una bandera exitosafunction updateReturnRate(uint newReturnRate) onlyMinter returns(bool successful){ returnRate = newReturnRate; return true; }
pabi
pabi