WTF Solidity极简入门第二十一讲:调用其他合约

本文介绍了在Solidity中如何通过目标合约的代码(或接口)和地址创建合约引用,从而调用目标合约的函数。主要内容包括:

  • 目标合约示例:展示了一个简单的合约OtherContract,包含状态变量x、事件Log以及三个函数(getBalance、setX、getX),其中setX是external payable函数,允许设置x值并接收ETH。

  • 调用合约的四种方法

    • 传入合约地址:在函数中通过地址生成合约引用,调用目标函数(如setX)。
    • 传入合约变量:直接传入合约引用(类型为目标合约名),调用函数(如getX)。
    • 创建合约变量:存储目标合约引用后通过变量调用函数。
    • 调用并发送ETH:若目标函数为payable,可通过调用时附加value参数转账ETH(如setX),并通过事件和余额函数验证。
  • 核心意义:通过合约复用增强以太坊生态,适用于收益农场等场景。教程代码开源,适合开发者学习。

总结

原文:《Solidity 极简入门: 21. 调用其他合约》

我最近在重新学 solidity,巩固一下细节,也写一个「Solidity 极简入门」,供小白们使用(编程大佬可以另找教程),每周更新 1-3 讲。

所有代码和教程开源在 github:github.com/AmazingAng/WTFSolidity

调用已部署合约

开发者写智能合约来调用其他合约,这让以太坊网络上的程序可以复用,从而建立繁荣的生态。很多 web3 项目依赖于调用其他合约,比如收益农场(yield farming)。这一讲,我们介绍如何在已知合约代码(或接口)和地址情况下调用目标合约的函数。

目标合约

我们先写一个简单的合约 OtherContract 来调用。

WTF Solidity极简入门第二十一讲:调用其他合约

这个合约包含一个状态变量 x,一个事件 Log 在收到 ETH 时触发,三个函数:

getBalance(): 返回合约 ETH 余额。

setX():external payable 函数,可以设置 x 的值,并向合约发送 ETH。

getX(): 读取 x 的值。

调用 OtherContract 合约

我们可以利用合约的地址和合约代码(或接口)来创建合约的引用:_Name(_Address),其中_Name 是合约名,_Address 是合约地址。然后用合约的引用来调用它的函数:_Name(_Address).f(),其中 f() 是要调用的函数。

下面我们介绍 4 个调用合约的例子:

1. 传入合约地址

我们可以在函数里传入目标合约地址,生成目标合约的引用,然后调用目标函数。以调用 OtherContract 合约的 setX 函数为例,我们在新合约中写一个 callSetX 函数,传入已部署好的 OtherContract 合约地址_Address 和 setX 的参数 x:

WTF Solidity极简入门第二十一讲:调用其他合约

2. 传入合约变量

我们可以直接在函数里传入合约的引用,只需要把上面参数的 address 类型改为目标合约名,比 OtherContract。下面例子实现了调用目标合约的 getX() 函数。

WTF Solidity极简入门第二十一讲:调用其他合约

3. 创建合约变量

我们可以创建合约变量,然后通过它来调用目标函数。下面例子,我们给变量 oc 存储了 OtherContract 合约的引用:

WTF Solidity极简入门第二十一讲:调用其他合约

4. 调用合约并发送 ETH

如果目标合约的函数是 payable 的,那么我们可以通过调用它来给合约转账:_Name(_Address).f{value: _Value}(),其中_Name 是合约名,_Address 是合约地址,f 是目标函数名,_Value 是要转的 ETH 数额(以 wei 为单位)。

OtherContract 合约的 setX 函数是 payable 的,在下面这个例子中我们通过调用 setX 来往目标合约转账。

WTF Solidity极简入门第二十一讲:调用其他合约

转账后,我们可以通过 Log 事件和 getBalance() 函数观察目标合约 ETH 余额的变化。

总结

这一讲,我们介绍如何在通过目标合约代码(或接口)和地址来创建合约的引用,从而调用目标合约的函数。

推特:@0xAA_Science

社区:Discord微信群官网 wtf.academy

所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity

分享至:

作者:0xAA

本文为PANews入驻专栏作者的观点,不代表PANews立场,不承担法律责任。

文章及观点也不构成投资意见

图片来源:0xAA如有侵权,请联系作者删除。

关注PANews官方账号,一起穿越牛熊
推荐阅读
1小时前
2小时前
4小时前
5小时前
6小时前
2025-12-13 09:23

热门文章

行业要闻
市场热点
精选读物

精选专题

App内阅读