---
title: "如何在 Ethereum 上调用另一个智能合约"
description: "调用另一个智能合约的原因及示例"
---

# 如何在 Ethereum 上调用另一个智能合约

在[Solidity](https://www.alchemy.com/overviews/solidity)中，可以创建借用[其他合约函数](https://www.alchemy.com/overviews/solidity-functions)的智能合约。我们把执行借用的智能合约称为**调用方智能合约（caller smart contract）**，把函数被借用的智能合约称为**被调用方智能合约（called smart contract）**。

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

## **为什么要调用另一个合约**

Ethereum 为区块链带来的最大进步之一，就是能够在链上上传和执行代码。这些程序，也就是[所谓的智能合约](https://www.alchemy.com/overviews/solidity-smart-contract)，一旦上传到区块链上就无法修改。任何人都可以查看它们，如果代码编写得当，其他智能合约也可以与之交互，即使双方的所有者互不相识——这实际上使智能合约成为可复用的库。某个所有者本来只打算用于某一用途的智能合约，可以通过调用被成千上万的其他人用于自己的应用场景。

人们调用其他智能合约的另一个原因是，在编写过程中，原本的智能合约在完成之前就达到了 24,577 字节的大小限制。为了解决这个问题，开发者会把足够多的函数移到一个新的智能合约中，使原合约的大小降到字节限制以下。

## **调用另一个智能合约的示例**

我们下面创建了两个示例智能合约，用来说明一个合约如何调用另一个智能合约。

### **调用合约并更新数值**

在第一个合约中，`CalledContract` 中的数值由 `CallerContract` 更新。

### **在调用中发送 ETH**

在第二个合约中，不仅 `CalledContractReceivesEther` 中的 x 值会被 `CallerContractAndSendEther` 更新，调用时还会发送 ETH。

## 如何进一步学习 Solidity

想要[进一步学习 Solidity](https://www.alchemy.com/overviews/learn-solidity)吗？随着近期收购 Solidity 教育平台 [ChainShot](https://www.alchemy.com/dapps/solidity)，Alchemy University 现在向公众免费提供为期 7 周的[Ethereum 开发者速成课程](https://university.alchemy.com/?a=bd8da13d63)——该课程原本是一个价值 3,000 美元的认证训练营。快来锁定名额吧！

如果你刚开始接触开发，Alchemy 的**3 周 JavaScript 速成课程**是开始 Ethereum 训练营之前很好的预备课程。
