---
title: "如何計算 Solana 程式的 rent"
description: "了解 Solana 的 rent 運作機制，以及如何為你的下一個 Solana 程式計算 rent"
---

# 如何計算 Solana 程式的 rent

Solana 區塊鏈上的程式執行由一筆交易開始。此區塊鏈由一組電腦系統網路組成，在整個網路上複製並分散交易的數位帳本。鏈上的每個區塊皆包含數筆交易，而每位參與者的帳本都會收到區塊鏈上發生的每筆新交易的副本。

將所有這些資料儲存在各自獨立的帳戶中並非免費，會產生一些費用。本文將介紹 Solana 上 rent（租金）的概念，以及如何計算它。

## **什麼是 Solana 上的 rent？**

**Rent 是每個 Solana 帳戶為了在區塊鏈上儲存資料而支付的費用，以 Lamports（SOL 的最小單位，用於微支付）計價。** Rent 費用是根據帳戶儲存空間的大小計算的。儲存的資料量越大，rent 就越高。

由於 [Solana node clusters](https://www.alchemy.com/overviews/solana-nodes) 必須主動維護這些資料，因此需要一種基於時間與空間的費用機制，才能讓帳戶及其資料持續存在於區塊鏈上。所有 Solana 帳戶都必須維持足夠高的 Lamport 餘額，以符合 **rent exemption**（免租）資格，並保留在 Solana 區塊鏈上。若帳戶中的 Lamports 數量過低，將會被垃圾回收機制從網路中移除。

### **何時收取 rent 費用？**

Rent 費用通常在每個 epoch 結束時收取。Epoch 是指主導驗證者仍能產生交易區塊的時間段。[Solana Explorer](https://www.alchemy.com/dapps/solana-explorer) 中包含最近幾個及先前 epoch 的資料。當交易引用某帳戶時，也會收取 rent。

在每個 slot 結束時，帳戶所累積的部分 rent 會被銷毀，其餘則支付給投票帳戶。如果帳戶中的餘額不足以支付 rent，[該帳戶](https://www.alchemy.com/overviews/solana-account-model)將被解除配置，資料也會被刪除。同樣重要的是，全新建立的帳戶必須是免租的。

Rent 之所以重要，還因為網路上的驗證者必須在記憶體中保留此狀態的一份運作副本；網路會針對這種資源消耗收取基於時間與空間的費用。這是因為 Solana 上的帳戶可能擁有一個由擁有者控制的狀態（Account::data），此狀態與帳戶餘額（Account::lamports）是分開的。

## **如何計算 Solana 程式的 rent？**

使用 [Solana CLI](https://www.alchemy.com/docs/reference/solana-api-quickstart) 中的 Solana rent 指令，可以簡單地估算 rent 費用。只要輸入帳戶的大小（以位元組為單位），即可檢視每位元組、每個 epoch 的 rent，以及帳戶要免租所需的最低金額。

依照 rent 制度，帳戶的 **Account::rent epoch** 會是目前 epoch 或目前 epoch \+ 1，且欠繳的 rent 為一個 epoch 期間的費用。

若帳戶屬於免租制度，Account::rent epoch 只會直接調整為目前的 epoch。

若帳戶為非免租帳戶，則使用 **Rent::due\(\)** 來判斷此帳戶欠繳多少 rent。此計算是根據下一個 epoch 與 Account::rent epoch 之間的差值而定。以下步驟將說明如何計算 Solana 程式的 rent 費用。

### **步驟 1：建立新程式**

首先，前往終端機，使用 cargo 建立一個新資料夾，這裡將用來存放我們的主要檔案。

開啟 src/main，並替換為[這裡](https://gist.github.com/dharniel45/69bd889abd6179c9bfa94b00ab1247f6)的程式碼片段。

### 步驟 2：計算 rent 費用

該檔案大小應為 906 位元組，我們可以直接執行以下指令來計算 rent：

您應該會看到以下畫面：

<ImageBlock
  src="https://media.alchemy.com/1703690153-solana-rent-command-output.png"
  alt="終端機中 Solana Rent 指令的輸出結果"
  width={984}
  height={172}
  caption="終端機中 Solana Rent 指令的輸出結果"
/>

最後要說明的是，rent 扣款並沒有對應的交易，因為 rent 的收取是依協定層級的帳戶變動而發生的，例如將 rent 分配給驗證者。

因此，rent 的收取大多是不可見的，只能透過最近的一筆交易，或依帳戶位址前綴所指定的時間，間接觀察到。

## **如何領回 Solana 儲存費用**

開發者與一般 Solana 使用者可以透過關閉帳戶來取回其儲存費用。要領回 Solana rent 費用，最簡單的方式是使用像 **[Sol Incinerator](https://www.alchemy.com/dapps/sol-incinerator)** 這類方便的工具，來關閉錢包中未使用的程式帳戶。

## **結論**

目前的 rent 費用是在創世區塊時就設定好的，但未來計畫使其變為動態調整，以反映底層硬體儲存的當前成本。因此，普遍認為隨著技術進步及硬體成本下降，rent 費用也會隨之降低。
