如何在以太坊上调用另一个智能合约

  • Alchemy
  • 发布于 2022-10-05 10:24
  • 阅读 10

本文介绍了Solidity中智能合约如何调用其他合约的函数,解释了调用其他合约的原因,例如代码复用和规避合约大小限制,并通过示例代码展示了如何在调用合约时更新值以及发送以太币。

Alchemy 编写

Brady Werkheiser headshot

Brady Werkheiser 审核

发布于 2022 年 10 月 4 日,阅读时长 2 分钟


在 Solidity 中,可以创建借用其他合约的函数的智能合约。我们将执行借用操作的智能合约称为 caller smart contract,将被借用函数的智能合约称为 called smart contract

本文将解释开发者何时应该调用另一个合约,并通过示例代码进行讲解。

为什么调用另一个合约

以太坊带给区块链的最大进步之一是能够链上上传和计算代码。一旦这些程序(被称为智能合约)上传到区块链,它们就无法被编辑。任何人都可以查看它们,而且如果编码正确,智能合约可以与之交互,即使它们的拥有者互不认识,从而有效地将智能合约转变为可重用的库。所有者希望其代码用于某种目的的智能合约,可以通过调用被成千上万的其他人重复使用,以实现他们自己的用例。

人们调用其他智能合约的另一个原因是,在编程时,他们最初的智能合约在完成之前达到了 24,577 字节的大小限制。为了解决这个问题,开发者将足够多的函数移动到一个新的智能合约中,使其低于字节限制。

调用另一个智能合约示例

我们在下面创建了两个示例智能合约,以教你一个合约如何调用另一个智能合约。

调用合约并更新值

在第一个合约中,CallerContract 会更新 CalledContract 中包含的值。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;
contract CallerContract{
function setX(address _address, uint_ x) external{
CalledContract(_address).setX(_x);
     }
}
contract CalledContract{
uint public x
unit public value = 123;
function setX(uint _x) external {
x = _x;
      }
}

通过调用发送 ETH

在第二个合约中,CallerContractAndSendEther 不仅更新了 CalledContractReceivesEther 中的 x 值,而且还将在调用时发送 ETH。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;
contract CallerContractAndSendEther{
function setXAndReceiveEther(address _address, uint_ x) external     payable {
CalledContractReceivesEther(_address).receiveXandreceiveEther{value: _value}(_x);
}
contract CalledContractReceivesEther{
Uint public x
Unit public value = 123;
function receiveXandreceiveEther(uint _x) external payable {
        x = _x;
        value = msg.value;
        }
}

如何了解更多关于 Solidity 的信息

想要了解更多 Solidity 吗?随着最近对 Solidity 教育平台 ChainShot 的收购,Alchemy University 正在免费向公众提供为期 7 周的 以太坊开发者速成课程,该课程最初是一个价值 3,000 美元的认证训练营。立即锁定你的名额!

如果你是开发新手,Alchemy 的 为期 3 周的 JavaScript 速成课程 是开始以太坊训练营之前的一个很好的先决条件。

Supercharged | Alchemy | Substack

注册 Alchemy University 并开始免费学习 Solidity 开发 立即注册

📚 目录


  • 为什么调用另一个合约
  • 调用另一个智能合约示例
  • 如何了解更多关于 Solidity 的信息

分享:

Overview cards background graphic

相关概述

Featured content card overlay\ \ 学习 Solidity\ \ Solidity 中的 selfdestruct 是什么?\ \ 它是什么,如何工作,以及如何开始 Featured content card overlay\ \ 学习 Solidity\ \ 学习 Solidity 开发的 7 门最佳课程 (2025)\ \ 探索学习 Solidity 开发的最佳免费和付费课程 Featured content card overlay\ \ 学习 Solidity\ \ 什么是 Solidity 数组?\ \ 你的 Solidity 数组入门指南——函数、声明和故障排除

Desktop section background image

构建区块链魔法

Alchemy 将最强大的 web3 开发者产品和工具与资源、社区和传奇支持相结合。

获取你的 API 密钥

  • 原文链接: alchemy.com/overviews/so...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Alchemy
Alchemy
江湖只有他的大名,没有他的介绍。