dado es:
pragma solidity ^0.4.24;
contract changeSomVal{
address owner;
bool test;
event showBool(bool showBool);
constructor() public {
owner = msg.sender;
}
modifier onlyOwner() {
if(msg.sender == owner)
_;
}
function () public payable{
emit showBool(test);
}
function changeBoolTrue () public onlyOwner { // returns (bool)
test = true;
emit showBool(test);
}
function changeBoolFalse () public onlyOwner {
test = false;
emit showBool(test);
}
}
En etherscan, siempre devuelve un eventLog de 64 caracteres de longitud 0...0. No importa a qué función se haya llamado. También lo probé con uint8 (1,2)
for changeBoolTrue() -> test = 1
y changeBoolFalse() -> test = 2
. Lo cansé con una vuelta también : function changeBoolTrue () public onlyOwner returns (bool)
. El eventLog arroja siempre lo mismo.
En remix se ve bien. Pero en la realidad no funciona. ¿Qué ocurre?
Realmente no puedo ver nada malo en lo que has escrito. Pero, la convención dicta que debe comenzar los nombres de los eventos con caracteres en mayúsculas.
Otro punto de pellizco podría ser que haya nombrado el parámetro bool del mismo modo que el evento. Dado que no necesita hacer referencia al argumento, ajustaría su evento para que se vea como el siguiente;
event ShowBool(bool);
y ajuste sus emit
llamadas en consecuencia.
Editar0:
Desplegué su contrato fijo en Rinkeby, aquí . Puede ver que EtherScan ha verificado que la fuente coincide con los códigos de bytes aquí .
El motivo de todas las transacciones es que he llamado al respaldo— function ()
—entre llamadas a changeBoolTrue()
y changeBoolFalse()
, que muestran que el estado de test
se conserva en el contrato entre llamadas.
changeBoolTrue()
. Lo mismo otra vez (etherscan eventLog): 00000000000000000000000000000000000000000000000000000000000000000Run
pestaña, en Remix, la lista de funciones a las que se puede llamar es visible en la parte inferior derecha, en el Deployed Contracts
panel (puede hacer clic en el cuadro rojo y verificar la transacción). Alternativamente, si envía una pequeña cantidad de ETH al contrato, se llamará a la función de reserva.
Edmundo Edgar
soham lawar
MargaritaPato