我有一个关于Ethereum中智能合约版本控制的问题。关于如何解耦您的逻辑和数据,如何在引用其他契约时使用接口,如何使用泛型键值存储来存储数据,以及如何通过库函数以强类型的方式检索数据,已经写了很多文章。
如何从旧版本的智能合约中查询交易和事件日志?不能迁移事务和发出的事件。它们是不可变的。也许你需要在客户端应用程序中记录他们的历史。可以在不同的合同版本中添加、删除或更改事件的签名。如何处理合同的多个版本的事务输入和事件数据的查询和解码?
发布于 2020-12-07 17:41:59
固态中的每个事件都由其签名的散列在内部表示。函数也是由散列表示的。
let encodedFunctionSignature = web3.eth.abi.encodeFunctionSignature('sendMessage(string,address)');
console.log(encodedFunctionSignature);
// => 0xc48d6d5e
签名是函数签名字符串接管的keccak256散列的前32个字节,删除了空格。
如果事件签名更改,散列也会更改,您可以区分事件的不同ABI。
然后,您只需拥有匹配版本的ABI文件,即可将事件解码为人类可读的符号形式。
https://stackoverflow.com/questions/54472575
复制相似问题