看啥推荐读物
专栏名称: 廖雪峰
业余马拉松选手廖雪峰的公众号,各种鸡汤混杂负能量,心理承受能力不强者慎重订阅。
今天看啥  ›  专栏  ›  廖雪峰

以太坊delegatecall详解

廖雪峰  · 公众号  ·  · 2024-03-27 08:22
在以太坊合约中,一个合约可以调用另一个合约,以实现功能模块化。除了普通的跨合约调用,以太坊还提供了delegatecall来跨合约调用。delegatecall跨合约调用与普通跨合约调用不同,它不会改变代码执行的上下文环境,而是基于当前合约的上下文来执行目标合约代码,就像这些代码是当前合约自己的代码一样。什么是合约上下文?我们以一个简单的示例来说,就可以正确理解delegatecall的调用方式。先编写两个合约:Target和Delegate,完整代码如下:pragma solidity ^0.8.25;contract Target { event Log(string msg, address thisAddr, address msgSender, uint256 msgValue, address txOrigin); string public name = "target"; uint256 public version = 1; function save(string memory _name, uint256 _version) public payable { name = _name; version = _version; emit Log("Target.save", address(this), msg.sender, msg.value, tx.origin); ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照