トークンは、多様なカテゴリの資産に対する所有権を表すデジタル資産です。トークン化により、財産権のデジタル化が可能になります。Solana上のトークンは、SPL(Solana Program Library)トークンと呼ばれます。
このセクションでは、Solana上でトークンがどのように表現されるかの基本概念について説明します。コード例については、SPLトークンの基礎セクションを参照してください。
重要なポイント
-
Token Programsには、ネットワーク上のToken(ファンジブルおよびノンファンジブルの両方)を操作するためのすべてのinstructionsロジックが含まれています。
-
mint accountは特定のトークンを表し、総供給量やミント権限(トークンの新しい単位を作成する権限を持つアドレス)などのトークンに関するグローバルメタデータを保存します。
-
token accountは、特定の所有者の特定のmint accountに対するトークンの個別所有権を追跡します。
-
associated token accountは、所有者とmint accountのアドレスから派生したアドレスで作成されたtoken accountです。
Token Programs
Solanaエコシステムには、2つの主要なToken Programsがあります。以下は両方のプログラムのソースコードです。
Token Program(オリジナル)
- 基本的なトークン機能(ミント、転送など)
- 不変で広く使用されている
Token Extension Program(Token 2022)
- オリジナルのToken Programのすべての機能を含む
- 「拡張機能」を通じて機能を追加
Token Programsには、ネットワーク上のToken(ファンジブルおよびノンファンジブルの両方)を操作するためのすべてのinstructionsロジックが含まれています。Solana上のすべてのTokenは、実質的にToken Programが所有するデータアカウントです。
Token Program
mint account
Solana上のトークンは、Token Programが所有するmint accountのアドレスによって一意に識別されます。このアカウントは特定のトークンのグローバルカウンターとして機能し、以下のようなデータを保存します:
- Supply: トークンの総供給量
- Decimals: トークンの小数点精度
- Mint authority: トークンの新しい単位を作成し、供給量を増やすことが許可されたアカウント
- Freeze authority: Token Account内のトークンを凍結し、転送や焼却を防ぐことが許可されたアカウント
mint authorityはmint accountの初期化時に設定されます。これにより将来のミントが承認されますが、mint accountを作成または支払いを行ったアカウントである必要はありません。
Mint Account
各mint accountに保存される詳細情報は以下の通りです。
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 initializedpub 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 Account
各token accountに保存される詳細情報は以下の通りです。
pub struct Account {/// The mint associated with this accountpub 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 delegatepub delegate: COption<Pubkey>,/// The account's statepub 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 delegatedpub 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 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 Account
各ウォレットは、同じミントからのトークンを保持するために、独自のtoken accountが必要であることに注意してください。
アカウント関係の拡張
Is this page helpful?