Solanaのトークン

トークンは、多様なカテゴリの資産に対する所有権を表すデジタル資産です。トークン化により、財産権のデジタル化が可能になります。Solana上のトークンは、SPL(Solana Program Library)トークンと呼ばれます。

このセクションでは、Solana上でトークンがどのように表現されるかの基本概念について説明します。コード例については、SPLトークンの基礎セクションを参照してください。

重要なポイント

  • Token Programsには、ネットワーク上のトークン(代替性トークンと非代替性トークンの両方)とやり取りするためのすべての命令ロジックが含まれています。

  • mint accountは特定のトークンを表し、総供給量やミント権限(トークンの新しい単位を作成する権限を持つアドレス)などのトークンに関するグローバルメタデータを保存します。

  • token accountは、特定の所有者の特定のmint accountに対するトークンの個別所有権を追跡します。

  • associated token accountは、所有者とmint accountのアドレスから派生したアドレスで作成されたtoken accountです。

Token Programs

Solanaエコシステムには、2つの主要なToken Programsがあります。以下は両方のプログラムのソースコードです。

Token Programsには、ネットワーク上のトークン(代替性トークンと非代替性トークンの両方)とやり取りするためのすべての命令ロジックが含まれています。Solana上のすべてのトークンは、実質的にToken Programが所有するデータアカウントです。

Token ProgramToken Program

mint account

Solana上のトークンは、Token Programが所有するmint accountのアドレスによって一意に識別されます。このアカウントは特定のトークンのグローバルカウンターとして機能し、以下のようなデータを保存します:

  • Supply: トークンの総供給量
  • Decimals: トークンの小数点精度
  • Mint authority: トークンの新しい単位を作成し、供給量を増やすことが許可されたアカウント
  • Freeze authority: Token Account内のトークンを凍結し、転送や焼却を防ぐことが許可されたアカウント

Mint AccountMint Account

各mint accountに保存される詳細情報は以下の通りです。

Mint Account State
pub struct Mint {
/// Optional authority used to mint new tokens. The mint authority may only
/// be provided during mint creation. If no mint authority is present
/// then the mint has a fixed supply and no further tokens may be
/// minted.
pub mint_authority: COption<Pubkey>,
/// Total supply of tokens.
pub supply: u64,
/// Number of base 10 digits to the right of the decimal place.
pub decimals: u8,
/// Is `true` if this structure has been initialized
pub is_initialized: bool,
/// Optional authority to freeze token accounts.
pub freeze_authority: COption<Pubkey>,
}

参考として、USDC Mint AccountへのSolana Explorerリンクを示します。

Token Account

Token Programは、各トークン単位の個別の所有権を追跡するためにtoken accountを作成します。token accountには以下のようなデータが保存されます。

  • Mint: token accountが保持するトークンの単位
  • Owner: token accountからトークンを転送することが許可されたアカウント
  • Amount: token accountが現在保持しているトークンの数量

Token AccountToken Account

各token accountに保存される詳細情報は以下の通りです。

Token Account State
pub struct Account {
/// The mint associated with this account
pub mint: Pubkey,
/// The owner of this account.
pub owner: Pubkey,
/// The amount of tokens this account holds.
pub amount: u64,
/// If `delegate` is `Some` then `delegated_amount` represents
/// the amount authorized by the delegate
pub delegate: COption<Pubkey>,
/// The account's state
pub state: AccountState,
/// If is_native.is_some, this is a native token, and the value logs the
/// rent-exempt reserve. An Account is required to be rent-exempt, so
/// the value is used by the Processor to ensure that wrapped SOL
/// accounts do not drop below this threshold.
pub is_native: COption<u64>,
/// The amount delegated
pub delegated_amount: u64,
/// Optional authority to close the account.
pub close_authority: COption<Pubkey>,
}

ウォレットが保持したいトークン(mint)ごとにtoken accountが必要であり、ウォレットアドレスがtoken accountのオーナーとして設定されます。各ウォレットは同じトークン(mint)に対して複数のtoken accountを所有できますが、token accountは1つのオーナーのみを持ち、1つのトークン(mint)の単位のみを保持できます。

Account RelationshipAccount Relationship

各token accountのデータには、token accountに対する権限を持つ者を識別するownerフィールドが含まれていることに注意してください。これは、すべてのtoken accountに対してToken Programである基本的なAccountタイプで指定されるプログラムオーナーとは異なります。

Associated Token Account

Associated Token Accountは、特定のミントと所有者に対するtoken accountのアドレスを見つけるプロセスを簡素化します。Associated Token Accountは、特定のミントと所有者に対する「デフォルト」のtoken accountと考えてください。

Associated Token Accountは、所有者のアドレスとmint accountのアドレスから派生したアドレスで作成されます。Associated Token Accountは、特定のアドレスを持つtoken accountに過ぎないことを理解することが重要です。

これにより、Solana開発における重要な概念であるProgram Derived Address (PDA)が導入されます。PDAは、事前定義された入力を使用してアドレスを決定論的に導出するため、アカウントのアドレスを簡単に見つけることができます。

Associated Token AccountAssociated Token Account

各ウォレットは、同じミントからのトークンを保持するために、独自のtoken accountが必要であることに注意してください。

アカウント関係の拡張アカウント関係の拡張

Token CLIの例

spl-token CLIは、SPLトークンを試すのに役立ちます。以下の例では、Solana Playgroundのターミナルを使用して、ローカルインストールなしでブラウザ内で直接CLIコマンドを実行します。

トークンとアカウントの作成には、アカウントのrentデポジットとトランザクション手数料のためのSOLが必要です。Solana Playgroundを初めて使用する場合は、Playgroundウォレットを作成し、Playgroundターミナルで*shsolana airdrop*コマンドを実行してください。また、公開webファウセットからdevnet SOLを取得することもできます。

Terminal
$
solana airdrop 2

*shspl-token --help*を実行すると、利用可能なすべてのコマンドが表示されます。

Terminal
$
spl-token --help

spl-token CLIをローカルにインストールするには、次のコマンドを実行します。

Terminal
$
cargo install spl-token-cli

*shspl-token*のドキュメントで、さらに多くの例を見つけることができます。

ターミナル出力に表示されるアカウントアドレスは、以下の例とは異なります。操作を進める際は、Playgroundターミナルのアドレスを使用してください。例えば、*shcreate-token*コマンドは、Playgroundウォレットをミント権限として持つmint accountアドレスを出力します。

新しいトークンを作成する

新しいトークン(mint account)を作成するには、次のコマンドを実行します:

Terminal
$
spl-token create-token

出力は次のようになります:

Terminal Output
Creating token 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Address: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Decimals: 9
Signature: 44fvKfT1ezBUwdzrCys3fvCdFxbLMnNvBstds76QZyE6cXag5NupBprSXwxPTzzjrC3cA6nvUZaLFTvmcKyzxrm1

新しいmint accountは供給量ゼロで開始されます。現在の供給量を確認するには:

Terminal
$
spl-token supply <TOKEN_ADDRESS>

新しいトークンの*shsupply*コマンドは0を返します:

Example
spl-token supply 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

新しいMint Accountの作成には、2つのinstructionsを含むトランザクションが必要です。以下はSolana PlaygroundでのJavascriptの例です。

  1. System ProgramがMint Accountデータ用のスペースを持つ新しいアカウントを作成し、所有権をToken Programに転送します。

  2. Token Programが新しいアカウントのデータをMint Accountとして初期化します

Token Accountを作成する

特定のmintのトークンを保持するには、token accountを作成します:

Terminal
$
spl-token create-account <TOKEN_ADDRESS>

コマンド例:

Example
spl-token create-account 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

出力:

Terminal Output
Creating account AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Signature: 2BtrynuCLX9CNofFiaw6Yzbx6hit66pup9Sk7aFjwU2NEbFz7NCHD9w9sWhrCfEd73XveAGK1DxFpJoQZPXU9tS1

*shcreate-account*コマンドは、ウォレットアドレスを所有者とするassociated token accountを作成します。

異なる所有者でtoken accountを作成するには:

Terminal
$
spl-token create-account --owner <OWNER_ADDRESS> <TOKEN_ADDRESS>

注:<TOKEN_ADDRESS>はtoken accountのmint accountを指定します。

コマンド例:

Example
spl-token create-account --owner 2i3KvjDCZWxBsqcxBHpdEaZYQwQSYE6LXUMx5VjY5XrR 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

出力:

Terminal Output
Creating account Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 44vqKdfzspT592REDPY4goaRJH3uJ3Ce13G4BCuUHg35dVUbHuGTHvqn4ZjYF9BGe9QrjMfe9GmuLkQhSZCBQuEt

associated token accountの作成には、Associated Token Programを呼び出す1つのinstructionが必要です。Solana PlaygroundのJavaScriptの例を参照してください。

Associated Token ProgramはCross Program Invocationsを使用して以下を実行します:

associated token accountアドレスではなく新しいkeypairでtoken accountを作成するには、2つのinstructionsを含むトランザクションを送信します。Solana PlaygroundのJavaScriptの例を参照してください。

  1. System Programがtoken accountデータ用のスペースを持つ新しいアカウントを作成し、所有権をToken Programに転送します。

  2. Token Programがデータをtoken accountとして初期化します

トークンのミント

トークンの新しい単位を作成するには、token accountにトークンをミントします:

Terminal
$
spl-token mint [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> [--] [RECIPIENT_TOKEN_ACCOUNT_ADDRESS]

コマンド例:

Example
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100

出力:

Terminal Output
Minting 100 tokens
Token: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Recipient: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Signature: 2NJ1m7qCraPSBAVxbr2ssmWZmBU9Jc8pDtJAnyZsZJRcaYCYMqq1oRY1gqA4ddQno3g3xcnny5fzr1dvsnFKMEqG

別のtoken accountにトークンをミントするには:

Example
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 -- Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt

出力:

Terminal Output
Minting 100 tokens
Token: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Recipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 3SQvNM3o9DsTiLwcEkSPT1Edr14RgE2wC54TEjonEP2swyVCp2jPWYWdD6RwXUGpvDNUkKWzVBZVFShn5yntxVd7

Token ProgramのMintTo instructionは新しいトークンを作成します。ミント権限者がトランザクションに署名する必要があります。このinstructionはtoken accountにトークンをミントし、mint accountの総供給量を増加させます。Solana PlaygroundのJavaScriptの例を参照してください。

トークンの転送

token accounts間でトークンを転送するには:

Terminal
spl-token transfer [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> <RECIPIENT_ADDRESS or RECIPIENT_TOKEN_ACCOUNT_ADDRESS>

コマンド例:

Example
spl-token transfer 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt

出力:

Terminal Output
Transfer 100 tokens
Sender: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Recipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 5y6HVwV8V2hHGLTVmTmdySRiEUCZnWmkasAvJ7J6m7JR46obbGKCBqUFgLpZu5zQGwM4Xy6GZ4M5LKd1h6Padx3o

Token ProgramのTransfer instructionはトークン転送を処理します。送信者のToken Accountの所有者がトランザクションに署名する必要があります。このinstructionはToken Account間でトークンを移動します。Solana PlaygroundのJavaScriptの例をご覧ください。

送信者と受信者の両方が、特定のトークン(mint)用のtoken accountを必要とします。送信者は、同じトランザクション内で受信者のtoken accountを作成するinstructionsを含めることができます。

トークンメタデータの作成

Token Extensions Programを使用すると、メタデータ(名前、シンボル、画像リンク)をMint Accountに直接保存できます。

メタデータ拡張機能を持つトークンを作成するには:

Example
spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb --enable-metadata

出力:

Terminal Output
Creating token BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP under program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
To initialize metadata inside the mint, please run `spl-token initialize-metadata BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP <YOUR_TOKEN_NAME> <YOUR_TOKEN_SYMBOL> <YOUR_TOKEN_URI>`, and sign with the mint authority.
Address: BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP
Decimals: 9
Signature: 5iQofFeXdYhMi9uTzZghcq8stAaa6CY6saUwcdnELST13eNSifiuLbvR5DnRt311frkCTUh5oecj8YEvZSB3wfai

メタデータを初期化するには:

Terminal
spl-token initialize-metadata <TOKEN_MINT_ADDRESS> <YOUR_TOKEN_NAME> <YOUR_TOKEN_SYMBOL> <YOUR_TOKEN_URI>

トークンURIはオフチェーンメタデータにリンクします。JSONフォーマットの例はこちらをご覧ください。

コマンド例:

Example
spl-token initialize-metadata BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP "TokenName" "TokenSymbol" "https://raw.githubusercontent.com/solana-developers/opos-asset/main/assets/DeveloperPortal/metadata.json"

メタデータはSolana Explorerで確認できます。

詳細については、Metadata Extension Guideをご覧ください。Token Extensionsの詳細については、Token ExtensionsのGetting Started GuideおよびSPLドキュメントをご覧ください。

Is this page helpful?

目次

ページを編集

管理運営

© 2026 Solana Foundation.
無断転載を禁じます。
つながろう