关于EVM若干问题建议
【产品名称/功能模块】
在当前的区块链生态系统中,以太坊虚拟机(EVM)作为智能合约执行环境的主导标准,被广泛应用于各类工具和开发平台。为了更好地满足开发者需求,建议加强对EVM引擎的支持与优化。
【问题描述】
- 1.工厂合约创建合约的问题,当前通过工厂合约部署新的合约,通过SDK没有办法监听得到新的合约事件。
function createAssetsToken(bytes32 txid,string memory metadata,string memory name, string memory symbol) public restricted returns (address) {
AssetsToken assetsToken = new AssetsToken(name,symbol);
}
例如上面代码,new的 AssetsToken合约,然后在浏览器中没有办法发现new的新合约,并且也没有办法监听的到该合约的事件。(因为当前的监听只能通过合约名称来监听,而不是合约地址,但通过工厂合约部署的合约没有合约名称)
- 2.既然合约名称和合约地址对应的是相同的逻辑,那么需要保持无论调用哪个都能正常使用。 当前不能通用的地方:1.事件监听,只能通过合约名称才能监听得到消息。2.solidity里面的合约调用,只能通过合约地址才能跨合约调用,例如以下示例
constructor(address initialAuthority)
AccessManaged(initialAuthority)
{}
AccessManaged 这个是openzeppelin 的 AccessManage合约,在初始化的时候initialAuthority 传入合约地址是可以正常调用的,但如果换成合约名称编译成的地址,却不能正常调用。这个逻辑导致,我在使用类似合约的时候,必须用合约名称+合约地址才能正常的处理逻辑,例如监听使用合约名称,合约里面的调用使用合约地址。
-
- EVM合约的错误返回基本没有,这个需要重点优化,特别是类似require 语句,至少需要把错误编码返回来,而不是笼统的failed to execute evm contract, execution reverted。这个问题以及有很多同学提交了,希望得到重视,当前可以通过日志里面查询到error的编码,然后通过ABI还原回来错误信息,但只能手动去日志里面捞日志,希望SDK本身就能把错误信息给返回来。例如:EVM合约require语句报错信息丢失
【期望内容/功能改进】
- 1.支持通过工厂合约部署的合约与直接部署的结果一样,浏览器能够看到新部署的合约。
- 2.完全兼容合约名称和合约地址,能够通过合约地址监听的到合约事件。
- 3.增强EVM的调试错误返回信息,保障require revert assert 这些错误的信息能正确返回到客户端。
【联系方式】(选填)
可填写微信号,或者手机号,方便联系
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information