Tengo un contrato inteligente, en el que estoy haciendo un mapeo de la identificación de la máquina y la identificación del usuario que se mencionan a continuación:
mapping(bytes32 => uint256) public machineAllocs;
machineAllocs[machineId] = userId;
Ahora, estoy asignando una identificación de usuario a una identificación de máquina y también la identificación de usuario se puede cambiar por la misma identificación de máquina. Entonces, si quiero saber que en una fecha particular cuál es el último estado (vamos a las 11:59 p. m.) de una identificación de máquina en particular, significa qué última identificación de usuario está asignada a esa identificación de máquina.
Entonces, ¿cómo obtener estos detalles?
Para acceder a estos detalles del historial en Solidity, tendría que almacenar cada mutación, ya que los contratos inteligentes solo pueden ver el estado actual de la cadena de bloques.
Para obtener la información desde fuera de la cadena de bloques con, por ejemplo, web3, debe hacer que su contrato inteligente registre un evento cada vez que ocurra una mutación machineAllocs
.
Echale un vistazo a éste ejemplo:
pragma solidity ^0.4.22;
contract MachineMapping {
mapping(bytes32 => uint256) public machineAllocs;
function setMachineUserId(bytes32 _machineId, uint256 _userId) {
emit MachineUserIdSet(_machineId, machineAllocs[_machineId], _userId);
machineAllocs[_machineId] = _userId;
}
event MachineUserIdSet(bytes32 indexed machineId, uint256 oldUserId, uint256 newUserId);
}
Ahora, cuando desee buscar cada mutación para un ID de máquina determinado, puede usar web3.eth.filter.get
para obtener todos MachineUserIdSet
los eventos registrados relacionados con su contrato y el ID de máquina.
Para ver cómo, echa un vistazo a esta respuesta . ¡Buena suerte!
Al call
enviar una view
función desde web3, puede especificar el número de bloque en el que desea evaluar la llamada.
Entonces su tarea se puede descomponer en dos pasos:
web3.eth.getBlock()
hasta que encuentre la marca de tiempo correcta, aunque podría hacerlo mejor haciendo una suposición inicial inteligente basada en aproximadamente 10-15 segundos por bloque.)contract.machineAllocs(x, blockNumber)
.machineAllocs[xyz]
en una marca de tiempo dada?" Si está preguntando algo diferente, por favor explique.
henk
Riya Soni
Riya Soni