Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Sign in
issue
issue
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 21
    • Issues 21
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar

新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!

  • chainmaker
  • issueissue
  • Issues
  • #1297

Closed
Open
Opened Jan 08, 2025 by zhou qg@zhouqg

关于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 传入合约地址是可以正常调用的,但如果换成合约名称编译成的地址,却不能正常调用。这个逻辑导致,我在使用类似合约的时候,必须用合约名称+合约地址才能正常的处理逻辑,例如监听使用合约名称,合约里面的调用使用合约地址。

    1. 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
Assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking
None
Due date
None
Reference: chainmaker/issue#1297

Copyright © 2021 ChainMaker Org. All Rights Reserved. 长安链 版权所有。