---
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 bytes 的大小限制。為了解決這個問題，開發者會將部分函式移到新的智能合約中，讓兩者都低於此位元組限制。

## **呼叫另一個智能合約範例**

我們建立了以下兩個範例智能合約，教你如何讓一個合約呼叫另一個智能合約。

### **呼叫合約並更新數值**

在第一個合約中，`CalledContract` 中的數值會由 `CallerContract` 更新。

### **呼叫時傳送 ETH**

在第二個合約中，不僅 `CalledContractReceivesEther` 中的 x 值會由 `CallerContractAndSendEther` 更新，呼叫時還會傳送 ETH。

## 如何進一步學習 Solidity

想要[學習更多 Solidity](https://www.alchemy.com/overviews/learn-solidity) 知識嗎？隨著近期收購 ChainShot（一個 [Solidity](https://www.alchemy.com/dapps/solidity) 教育平台），Alchemy University 現正提供一個為期 7 週的 [Ethereum developer crash course](https://university.alchemy.com/?a=bd8da13d63)，這原本是一個要價 3,000 美元的認證訓練營，現在免費開放給大眾參加。立即報名，把握機會！

如果你剛開始接觸開發，Alchemy 的**3 週 JavaScript crash course** 是開始 Ethereum 訓練營前很好的先修課程。
