首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >solidity (abi.encodeWithSignature)无效

solidity (abi.encodeWithSignature)无效
EN

Ethereum用户
提问于 2021-07-27 14:50:53
回答 1查看 693关注 0票数 0

我在使用“address.call(abi.encodeWithSignature(.)”时遇到了问题方法。下面是我正在Remix中测试的代码:

代码语言:javascript
复制
pragma solidity >=0.7.0 <0.9.0;


 library lib {
      event check(bool, bytes);

      function remoteCall(address c) internal
      {
           (bool success, bytes memory data) = c.call(abi.encodeWithSignature("callback(bool)", true));
            emit check(success, data);
      }
  }

  contract main{
     using lib for *;
     event test(bool);

     function useCallBack() external{
         lib.remoteCall(address(this));
     }

     function callback(bool b) internal {
         emit test(b);
     }

 }

我总是得到:成功=错误,而“测试”事件永远不会触发。

有人知道我的代码出了什么问题吗?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2021-07-27 18:18:28

函数回调的可见性应改为公共或外部。由于它是内部的,所以地址类型c不能通过低级调用访问此函数。

代码语言:javascript
复制
library lib {
  event check(bool, bytes);

  function remoteCall(address c) internal
  {
       (bool success, bytes memory data) = c.call(abi.encodeWithSignature("callback(bool)", true));
        emit check(success, data);
  }}

contract main{
 using lib for *;
 event test(bool);

 function useCallBack() external{
     lib.remoteCall(address(this));
 }

 function callback(bool b) public{
     emit test(b);
 }}
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/104167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档