当前位置: 首页 > 知识库问答 >
问题:

以太坊智能合约更新、交易和事件

卫弘图
2023-03-14

我有一个关于以太坊智能合约版本控制的问题。关于如何将逻辑和数据解耦,如何在引用其他契约时使用接口,如何使用通用键值存储来存储数据,以及如何以强类型方式通过库函数检索数据,已经写了很多文章。

从旧版本的智能合约中查询事务和事件日志怎么样?事务和发出的事件不能迁移。它们是不可变的。也许您需要在客户端应用程序中跟踪它们的历史记录。事件可以在不同的合约版本中添加、删除或更改其签名。您如何处理对多个版本的合约的事务输入和事件数据的查询和解码?

共有1个答案

时修贤
2023-03-14

Solity中的每个事件在内部都由其签名的哈希表示。函数也由哈希表示。

let encodedFunctionSignature = web3.eth.abi.encodeFunctionSignature('sendMessage(string,address)');
 console.log(encodedFunctionSignature);
 // => 0xc48d6d5e

signatuare是函数签名字符串接管的keccak256哈希的前32个字节,空格被删除。

如果事件签名更改,哈希也会更改,您可以为事件区分不同的ABI。

然后,您只需要拥有匹配版本的ABI文件,就可以将事件解码为人类可读的符号形式。

 类似资料:
  • 通过java打包以太坊智能合约 Web3j可以自动打包智能合同代码,以便在不脱离JVM的情况下进行以太坊智能合同部署和交互。 要打包代码,需要先编译智能合同: $ solc <contract>.sol --bin --abi --optimize -o <output-dir>/ 然后用web3j的命令行工具打包代码: web3j solidity generate /path/to/<sma

  • 与智能合约交易 要与现有的智能合约进行交易,需要提供以下属性: to:智能合同地址 value:在智能合约中你希望存放的以太币Ether量(如果智能合约接受以太币Ether的话) data: 已编码的函数选择器和自变量参数 web3j负责函数编码,有关实现的进一步细节,请参阅应用程序二进制接口部分Application Binary Interface。 Function function = n

  • EIP-20以太坊智能合约通证标准 有一个以太坊标准EIP-20,它是作为一个以太坊改进方案EIP开始的,它定义了提供通证token的智能合约应该执行的标准功能。 EIP-20标准提供函数定义,但不提供示例实现。然而,在codegen/src/test/resources/solidity/contracts中提供了一个实现,这已经从ConsenSys’ Tokens project获得。 开源的

  • 我能够使用和在以太坊进行交易。 现在我希望能够与互动。但是,由于构建

  • 签署以太坊交易 要使脱机签名交易得到签署,需要设定一个RawTransaction类型。RawTransaction类似于前面提到的Transaction类型,但是它不需要通过具体的账号地址来请求,因为可以从签名中推断出来。 为了创建和签署原生交易,交易的顺序如下: 1.确定交易发起者帐户的下一个可用随机数nonce 2.创建RawTransaction对象 3.使用递归长度前缀编码(RLP即Re

  • 本文翻译自zeppelin的 https://blog.zeppelin.solutions/onward-with-ethereum-smart-contract-security-97a827e47702 如果你是以太坊开发的新手,我们推荐你在继续本文前,先读一下我们的以太坊智能合约指南(基本概念及环境搭建):https://medium.com/bitcorps-blog/the-hitch