Digamos que tengo un uint public myvar
en mi contrato que se inicializa a algún valor.
Luego, myvar
se establece 3
en el siguiente bloque.
¿Cómo puedo recuperar el valor anterior? ¿Es esto posible con web3?
Supongamos que no hay eventos que se emitan cuando myvar
se cambia.
Si la función que cambia el valor de myvar activa un evento, puede recuperar el registro de eventos de web3 para obtener los datos.
event MyEvent(uint indexed dateModified, uint prevValue, uint newValue);
function changeValue(uint newValue){
uint prevValue = myvar;
myVar = newValue;
MyEvent(now, prevValue, newValue);
}
(La indexación de dateModified le permitirá filtrar por fecha, por ejemplo)
Cada vez que se llama a la función, el
Luego, en web3, vería (obtendría nuevos eventos a medida que ocurren) o los obtendría (obtendría todos los eventos pasados).
var MyContract = web3.eth.contract(abi);
var myContractInstance = MyContract.at('0x78e97bcc5b5dd9ed228fed7a4887c0d7287344a9');
// watch for an event with {some: 'args'}
var myEvent = myContractInstance.MyEvent({some: 'args'}, {fromBlock: 0, toBlock: 'latest'});
myEvent.watch(function(error, result){
...
});
// would get all past logs again.
var myResults = myEvent.get(function(error, logs){ ... });
...
// would stop and uninstall the filter
myEvent.stopWatching();
Una cosa más: solo se puede acceder a los registros de eventos desde fuera de Solidity, por lo que si desea obtener los valores anteriores de su variable desde dentro de Solidity, probablemente necesitará codificar su propia lógica que almacene los valores anteriores en una matriz.
will_durant
pabloruiz55