---
title: "什麼是 Mempool？"
description: "用途與存取方式"
---

# 什麼是 Mempool？

在區塊鏈交易中，mempool（記憶體池）是一份等待節點驗證、尚未提交至區塊鏈上區塊的待處理交易清單。這類似於傳統軟體開發中使用「Staging」環境，在正式發布前進行測試與品質控管。

雖然傳統的「Staging」環境是集中式的，但每個節點都各自維護自己的 mempool。讓我們來看看交易流程，以了解 mempool 的作用，以及透過存取它可以得知哪些重要資訊：

## **Ethereum 交易流程**

Ethereum 交易可分為 3 種類別：

1\) 簡單轉帳 - 價值從一個公開位址傳送至另一個位址。這可能是購買 NFT 或服務的付款。

2\) 部署智能合約 - 每當有智能合約部署到區塊鏈上時，就會產生一筆交易。

3\) 執行智能合約 - 當某個位址想要傳送資金或資料至智能合約位址時。

你可以使用 Alchemy 的監控工具來[監控 Ethereum 交易](https://www.alchemy.com/monitor)，並使用 Alchemy Transfers API 等工具找出特定位址的交易歷史紀錄。

每種 Ethereum 交易類型都遵循相同的交易生命週期：

1\) 使用者建立交易並使用其私鑰進行簽署。

2\) 節點接收該交易並將其存入 mempool。

3\) 交易在 mempool 中時，節點會對其進行驗證測試。若通過 mempool 的測試，交易狀態會變更為「Pending」。

4\) 節點會將該待處理交易廣播給網路上所有其他節點，讓它們也將此交易加入各自的 mempool。

5\) 當新區塊產生時，區塊建構者會納入 gas 價格最高的交易。此時交易狀態會轉為「Successful」。

6\) 每當節點在該交易所在的區塊之後新增一個區塊，該交易就會獲得一次確認。隨著時間推移，區塊[重組](https://www.alchemy.com/overviews/what-is-a-reorg)的風險會逐漸降低，這也提供了交易已永久寫入區塊鏈的保證。

<ImageBlock
  src="https://media.alchemy.com/1703772601-ethereum-transaction-flow.jpeg"
  alt="Ethereum 交易生命週期示意圖，從簽署、進入 mempool 到確認完成"
  width={1335}
  height={1600}
  caption="Ethereum 交易流程"
/>

你可以在[這裡](https://www.alchemy.com/docs/how-to-send-transactions-on-ethereum)進一步了解如何傳送交易，並親自發送一筆交易。

## **mempool 的作用**

由於區塊鏈具有不可篡改的特性，確保寫入區塊鏈的交易有效且無誤就顯得格外重要。負責承載 mempool 的節點，在交易正式提交至區塊鏈之前的驗證過程中扮演著關鍵角色。

對開發者而言，了解這些驗證測試有助於理解交易為何會失敗，或卡在「Pending」狀態：

### 1. 資金可用性

節點會驗證發送方位址是否有足夠的資金，同時涵蓋所傳送的金額與完成交易所需的 gas。若此驗證失敗，該交易會被移出 mempool。務必使用正確的傳送金額與目的地位址參數，以確保能通過此項驗證。

### **2. 交易簽章的有效性**

每筆交易都需要由發送方位址進行簽署，以確認發送方確實是該位址的擁有者。節點會驗證該簽章是否與發送方位址正確對應。

<ImageBlock
  src="https://media.alchemy.com/1703772721-validity-of-transaction-signatures.png"
  alt="節點驗證交易簽章與發送方地址是否相符的示意圖"
  width={553}
  height={408}
  caption="交易簽章的有效性 [來源]"
/>

### 3. 正確的 nonce 值

nonce 值代表從該發送方位址發出的交易數量。每當發送方傳送一筆新交易，nonce 值就會加 1。nonce 值之所以重要，是因為它強制要求同一位址發出的每筆交易，必須依照發送順序依序執行。

<ImageBlock
  src="https://media.alchemy.com/1703772853-correct-nonce-value.png"
  alt="節點驗證交易 nonce 值的示意圖"
  width={849}
  height={498}
  caption="節點驗證 Nonce 值"
/>

當交易的 nonce 值不能重複或跳過時，就能防止雙重花費或超額支出可用資金的問題。節點會驗證該待處理交易是否附上正確的 nonce 值。若此測試未通過，該交易便無法繼續往下進行。

### **4. Gas 價格**

依 mempool 而定，同一時間內能存放的交易數量是有限制的。[Geth](https://www.alchemy.com/overviews/what-is-a-geth-node-and-how-to-run-one)，這款常見的 Ethereum 客戶端，預設限制為 4096 筆待處理交易與 1024 筆排隊交易。當達到此限制時，gas 價格最低的交易會被移出池外，以釋出空間。

## **存取 mempool**

mempool 結構的一大優勢在於，替代交易可以覆寫待處理交易，藉此修正、加速，或直接取消該筆交易。

除了修正卡在 mempool 中的待處理交易之外，存取 mempool 在以下情況也相當有用：

**1. 估算 Gas 費用**

查看目前的待處理交易清單及其對應的手續費，有助於避免支付過高的費用。

**2. NFT 挖礦**

**‍**透過使用 mempool 掃描工具，使用者可以掌握與 NFT 合約互動的待處理交易資訊，並以更高的 gas 費用出價超越這些交易。

**3. 效能洞察**‍

透過使用 [Notify API](https://www.alchemy.com/docs/reference/webhooks-overview) 等服務，智能合約開發者能夠從 mempool 中取得智能合約活動的相關洞察。待處理交易可以提供有關智能合約錯誤與漏洞的資訊。

## **結論**

mempool 在區塊鏈的運作與健康狀態中扮演著重要角色。讓節點得以驗證交易、讓礦工能依據 gas 費用來排定待處理交易的優先順序，這是交易流程中不可或缺的一環。

開發者也可以運用 mempool 所提供的資料，來降低智能合約中的成本與問題。mempool 常被形容為區塊鏈中的「黑暗森林」，但像 [Alchemy Monitoring](https://www.alchemy.com/blog/application-monitoring-tools) 這類平台工具，能讓使用者在這個關鍵環節中獲得更清晰的掌握。
