首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外部函数调用坚固性

外部函数调用坚固性
EN

Ethereum用户
提问于 2020-03-31 16:06:18
回答 1查看 2.2K关注 0票数 0

假设我不知道合同A,我只知道它的地址,而且它有一个setNumber方法,我想从合同B调用它。

我想在合同A中调用函数setNumber,使用合同B中的callsetNumbercontractA方法。

如何复制:

  • 部署这两份合同
  • 复制合同A地址并使用合同B中的函数setcontract
  • 现在尝试使用合同B中的函数callsetNumbercontractA

它会失败的,我不明白为什么。

代码语言:javascript
复制
pragma solidity 0.5.12;
contract A {
    event lmao (string);
    uint public x;
    function hello () public {
        emit lmao ('YES');
    }
    function setNumber (uint n) public {
        x=n;
    }
} 

pragma solidity 0.5.12;
contract B{
    address public to;    
    function callcontractA () public {
       to.call(abi.encodeWithSignature("hello()"));
    }   
    function setcontract (address x) public{
        to = x;
    }   
    function callsetNumbercontractA () public {
        // I wanna set var x (in A) to 10
       to.call(abi.encodeWithSignature("setNumber(uint)",10));
    }
}

Ropsten交易:

EN

回答 1

Ethereum用户

发布于 2020-03-31 17:18:25

你的问题中没有理由不使用这一点:

代码语言:javascript
复制
contract IA {
    function setNumber(uint n) public;
}

contract B {
    IA public a;    
    function setContract(IA _a) public {
        a = _a;
    }   
    function setNumber() public {
        a.setNumber(10);
    }
}
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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