当前位置:   article > 正文

solidity合约调用合约方法的方式_solidity合约里调用合约

solidity合约里调用合约

1. 通过接口的形式

  1. pragma solidity >=0.7.0 <=0.8.0;
  2. // SPDX-License-Identifier: MIT
  3. interface IRC20 {
  4. function depositEther() external payable;
  5. function withdraw(uint256 amount) external;
  6. function getBalance(address addr) external view returns(uint256);
  7. }
  8. contract Attack {
  9. address constant private addr = 0x78E74b14512f2f9d3C26aeE24d902Fef10F46d72;
  10. IRC20 private tract;
  11. event withdrawEth(address sender,uint256 value);
  12. constructor(){
  13. tract = IRC20(addr);
  14. }
  15. function despoit() public payable{
  16. tract.depositEther{value:2 ether}();
  17. tract.withdraw(1 ether);
  18. }
  19. }

通过定义需要调用的接口,在合约构造函数里面实现加载,方法里面实现调用。以上列子在IRC20中匹配需要调用的合约接口方法。

2.通过签名的方式

  1. pragma solidity >=0.7.0 <=0.8.0;
  2. // SPDX-License-Identifier: MIT
  3. contract Test {
  4. address constant private addr = 0x78E74b14512f2f9d3C26aeE24d902Fef10F46d72;
  5. event balanceAmount(address sender,uint256 value);
  6. function getBalanceValue(address value) public view returns(uint256){
  7. bytes4 methodId = bytes4(keccak256("getBalance(address)"));
  8. (bool success,bytes memory data) = addr.staticcall(abi.encodeWithSelector(methodId,value));
  9. if(success){
  10. uint256 amount = abi.decode(data,(uint256));
  11. return amount;
  12. }else{
  13. return 0;
  14. }
  15. }
  16. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/369195
推荐阅读
  

闽ICP备14008679号