跳至內容
0%

如何計算 Solana 程式的 rent

發布於 2023年1月25日閱讀時間 1 分鐘

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

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

什麼是 Solana 上的 rent?

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

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

何時收取 rent 費用?

Rent 費用通常在每個 epoch 結束時收取。Epoch 是指主導驗證者仍能產生交易區塊的時間段。Solana Explorer 中包含最近幾個及先前 epoch 的資料。當交易引用某帳戶時,也會收取 rent。

在每個 slot 結束時,帳戶所累積的部分 rent 會被銷毀,其餘則支付給投票帳戶。如果帳戶中的餘額不足以支付 rent,該帳戶將被解除配置,資料也會被刪除。同樣重要的是,全新建立的帳戶必須是免租的。

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

如何計算 Solana 程式的 rent?

使用 Solana CLI 中的 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,並替換為這裡的程式碼片段。

步驟 2:計算 rent 費用

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

您應該會看到以下畫面:

終端機中 Solana Rent 指令的輸出結果
終端機中 Solana Rent 指令的輸出結果

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

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

如何領回 Solana 儲存費用

開發者與一般 Solana 使用者可以透過關閉帳戶來取回其儲存費用。要領回 Solana rent 費用,最簡單的方式是使用像 Sol Incinerator 這類方便的工具,來關閉錢包中未使用的程式帳戶。

結論

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

Background gradient

打造區塊鏈魔法

Alchemy 結合最強大的 Web3 開發者產品與工具,並提供資源、社群與卓越的支援。