---
title: "Solanaプログラムのレント計算方法"
description: "Solanaのレントの仕組みと、次のSolanaプログラムでのレント計算方法を解説"
---

# Solanaプログラムのレント計算方法

Solanaブロックチェーン上でのプログラム実行は、トランザクションから始まります。ブロックチェーンは、トランザクションのデジタル台帳をネットワーク全体に複製・分散するコンピュータシステムのネットワークで構成されています。チェーン上の各ブロックは複数のトランザクションで構成されており、ブロックチェーン上で新しいトランザクションが発生するたびに、各参加者の台帳にそのコピーが配布されます。

これらのデータをそれぞれ個別のアカウントに保存するには費用がかかり、無料ではありません。この記事では、Solanaにおけるrentの概念と、その計算方法について解説します。

## **Solanaにおけるrentとは何か**

**rentとは、すべてのSolanaアカウントがブロックチェーン上にデータを保存するために支払う手数料であり、SOLの最小単位でマイクロペイメントに使われるLamportsで表されます。** rent手数料は、アカウントのストレージサイズに基づいて計算されます。rentが高いほど、保存されているデータ量も多くなります。

[Solanaのノードクラスタ](https://www.alchemy.com/overviews/solana-nodes)はこのデータを常時維持する必要があるため、アカウント、ひいてはそのデータをブロックチェーン上で存続させるには、時間とスペースに基づいた手数料が必要になります。すべてのSolanaアカウントは、**rent免除**の対象となり、Solanaブロックチェーン上に存続し続けるために、十分なLamports残高を維持しなければなりません。Lamports残高が低いことが判明したアカウントは、ガベージコレクタによってネットワークから削除されます。

### **rent手数料はいつ徴収されるのか**

rent手数料は通常、各エポックの終わりに徴収されます。エポックとは、リーダーバリデータがトランザクションのブロックを生成し続けられる期間のことです。[Solana Explorer](https://www.alchemy.com/dapps/solana-explorer)には、直近および前のエポックのデータが含まれています。rentは、トランザクションによってアカウントが参照された際にも支払われます。

各スロットの終了時に、アカウントが徴収したrentの一部は焼却され、残りはvoteアカウントに支払われます。[アカウント](https://www.alchemy.com/overviews/solana-account-model)がrentを支払うのに十分な残高を持っていない場合、そのアカウントは解放され、データは削除されます。また、新規作成されたアカウントはrent免除である必要がある点も重要です。

ネットワーク上のバリデータはこの状態のワーキングコピーをメモリ上に保持し続ける必要があるため、rentは非常に重要です。ネットワークはこのリソース消費に対して、時間とスペースに基づいた手数料を課します。これは、Solana上のアカウントが、アカウント残高（Account::lamports）とは別に、所有者が制御する状態（Account::data）を持つ場合があるためです。

## **Solanaプログラムのrentを計算する方法**

[Solana CLI](https://www.alchemy.com/docs/reference/solana-api-quickstart)のsolana rentコマンドを使えば、簡単にrentコストを見積もることができます。アカウントのサイズ（バイト単位）を入力することで、バイトあたり、エポックあたりのrentや、アカウントがrent免除となるために必要な最低金額を確認できます。

rentの規定により、アカウントの**Account::rent epoch**は現在のエポック、または現在のエポック+1となり、rentは1エポック分の期間について発生します。

アカウントがrent免除の対象である場合、Account::rent epochは単純に現在のエポックに調整されます。

アカウントがrent免除の対象でない場合、**Rent::due()**を用いて、そのアカウントがどれだけのrentを支払うべきかが決定されます。この計算は、次のエポックと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ユーザーはアカウントをクローズすることで、ストレージ手数料を返金してもらうことができます。Solanaのrent手数料を払い戻す最も簡単な方法は、**[Sol Incinerator](https://www.alchemy.com/dapps/sol-incinerator)**のような使いやすいツールを使い、ウォレット内の未使用のプログラムアカウントをクローズすることです。

## **まとめ**

rentコストは現在、ジェネシス時点で固定されていますが、将来的には基盤となるハードウェアストレージの現在のコストを反映して動的に変化するようになる予定です。したがって、技術が進歩しハードウェアコストが下がるにつれて、rent手数料のコストも下がっていくだろうと広く考えられています。
