智能合约是在区块链中被执行的一段程序,因为它们在区块链上执行,所以不依赖于任何的中心化服务器。目前最主流的智能合约编程语言是 Solidity。
在以太坊区块链中,智能合约可以和其他已经部署的智能合约进行交互。除了以太坊,其他 EVM 兼容的区块链(使用以太坊虚拟机执行智能合约的区块链)也都有这个特点。
以下是需要在一个智能合约中调用其他合约的一些场景:
- 通证的铸造者和发行人,通过一个合约来调用通证的智能合约来发行它。
- 去中心化交易所(DEX)在进行通证交易的时候,一直都需要和其他智能合约相交互。
- 当你想通过 Chainlink Data Feed 获得一个通证价格的时候,你的智能合约也需要和资产的 aggregator 相交互,这里的 aggregator 也是一个智能合约。
- 当你使用 Chainlink VRF 的时候,你的合约需要给 VRF Coordinator 发送一个请求,Coordinator 才可以将随机数发送回你的智能合约。
- 在通过 Chainlink Keepers 自动化执行智能合约的时候,你需要创建 Keepers Upkeep,而 Upkeep 需要通过一个合约来查看和执行你部署的用户合约。
为什么要在一个合约中调用另外一个合约的函数?
有的时候,一个应用是由多个合约组成的。比如,我曾经创建过一个应用,它是由三个合约组成的并且彼此之间需要交互,但是我没法将它部署在以太坊的主网上,因为它们占的空间太大了,超出了区块限制。我不得不将这个应用重构为 5 个更小的智能合约,这样这个应用才可以被发布。
另一个有趣的应用场景是可升级的合约。区块链是不可更改的,这就意味着在智能合约部署以后,代码就不能被修改了。但是可以通过代理函数来指向其他合约来完成“升级”。
如果你想要改变逻辑,你可以给代理合约提供一个不同的目标合约地址,比如一个更新过的合约。还可以把逻辑和数据分到不同的智能合约中。这样,逻辑合约可以被代理合约升级或者替换,但是所有的数据还是存储在数据合约之中。
这个特性非常有用

本文介绍了在智能合约中调用其他合约函数的必要性和场景,特别是在以太坊区块链上的应用。通过Solidity编程语言,展示了如何创建并部署Counter合约,然后创建CounterCaller合约来调用Counter的函数。这种方式允许代码复用,减少部署成本,并为构建复杂的去中心化应用提供了基础。
最低0.47元/天 解锁文章
2221

被折叠的 条评论
为什么被折叠?



