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

文章介绍了如何在以太坊网络上通过已知合约代码和地址调用其他合约的函数。内容包括如何创建合约引用,调用不同函数,如getBalance(),setX(),getX(),以及如何在调用payable函数时进行ETH转账,并通过事件和函数观察合约状态变化。
摘要由CSDN通过智能技术生成

调用已部署合约

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

目标合约

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

41fe49828b7e63f1237b0b7434fc65d9.jpeg

这个合约包含一个状态变量 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:

dcb7b85bced4b450b5e04846a4a771a7.jpeg

2. 传入合约变量

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

fd385f95c3601b22361ce8b631bcbc29.jpeg

3. 创建合约变量

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

1dd43c89cea9f1413d1d6c4ff8d3f179.jpeg

4. 调用合约并发送 ETH

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

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

3b38a272baee45c6bf52e6457c271f66.jpeg

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

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值