合约ABI探秘

EOA使用ABI调用
合约之间使用接口调用
自己写ABI,自己写接口

ABI探秘

  • EOA使用的ABI数据与合约间调用时调用者持有的接口时等价的,都是对合约函数签名的完整描述
  • 调用者使用ABI数据生成message中的calldata
    在这里插入图片描述

message上下文的变化

  • 合约之间的调用也模拟transaction的结构,并且叫message,变量名msg
  • 直接被外部账号调用使用的message可以认为是transaction的一个拷贝
  • Message在合约间调用时新产生。调用链条中,合约内部调用看到的是一个message,不同合约看到不同的message
    在这里插入图片描述
    举例
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.8.2 <0.9.0;


contract Callee {
    uint public x;
    address public caller;
    address public eoaaddress;
    function setX(uint _x)public{
        
        caller = msg.sender;
        eoaaddress = tx.origin;
        x = _x;
    }
}
contract Caller{
     
    address public caller;
    address public eoaaddress;
    address calleeAddress;
    constructor(address _calleeAddress){
        calleeAddress = _calleeAddress;
    }
    function setCalleeX(uint _x)public{
         caller = msg.sender;
          eoaaddress = tx.origin;
        Callee callee = Callee(calleeAddress);
        callee.setX(_x);

    }

}
// 外部测试合约地址:0x5B38Da6a701c568545dCfcB03FcB875f56beddC4

// Caller合约地址: 0xd8b934580fcE35a11B58C6D73aDeE468a2833fa8

运行结果
在这里插入图片描述

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值