
Token Extensionsとは?
この1年、Solanaエコシステムの開発は急速に進み、多くの新しく魅力的な技術が登場しています。Solanaは超高速な処理速度と低いトランザクション手数料で知られていますが、これほど優れた特長があっても、改善の余地は常にあります。そこで登場したのがToken Extensionsです。これは、Solanaの既存のトークン機能を強化するために設計された新しいトークンプログラムです。Token Extensions規格がSolanaエコシステムにもたらすものを見ていきましょう。
Solanaの現在のトークンプログラム
Solana上のトークンのうち、ネイティブの$SOLトークンではないものはすべてspl-tokenとみなされます。これには、代替可能トークン($BONKなど)と非代替性トークン(NFT)の両方が含まれます。トークンプログラムは、代替可能トークンと非代替性トークンの作成および操作に共通する機能を定義するプログラムです。開発者やエンドユーザーが使い慣れた機能をいくつか提供しています。具体的には、トークンのミント、転送、バーンなどです。さらに、トークンの更新や凍結といった機能もあり、トークンアカウントを凍結して、解除されるまでアカウントの状態が変更されないようにできます。
Token Extensionsとは何か、なぜ必要なのか?
Token Extensionsは、Solanaのトークンプログラムを改良した新バージョンと考えられます。代替可能トークンと非代替性トークンの両方を扱えます。この新しいプログラムは従来のトークンプログラムの全機能を維持しながら、Solana上のトークン機能を改善するための便利な新機能を備えています。Token2022の真価であるこれらの新機能は、拡張機能という形で提供されます。
では、なぜToken Extensionsが必要なのでしょうか。Solanaの進化に伴い、より複雑で柔軟なトークン機能への需要が高まっています。Solanaの現在のトークンプログラムは、シンプルな機能セットを通じて代替可能トークンと非代替性トークンの基本的なニーズを満たしてきましたが、そのシンプルさがイノベーションを妨げる制約にもなっています。新しいアイデアを持つ開発者は、必要な機能を追加するためにトークンプログラムをフォークしなければならないことが多く、広く普及させるうえで課題となっていました。Solanaのプログラミングモデルでは、トランザクションにプログラムとアカウントの両方を含める必要があるため、複数のトークンプログラムを伴うトランザクションの作成が複雑になります。さらに、ウォレットやオンチェーンプログラムは、サポートする各トークンプログラムを信頼しなければならず、リスクを伴う可能性があります。こうした状況の変化に対応するため、SolanaはToken2022を提供します。これは、エコシステム内のトークン機能を拡張するために設計された追加機能と改善の一式です。
拡張機能の導入:進化への一歩
この新規格の革新的な能力は、さまざまなニーズに応えるために導入された新しいフィールド群である拡張機能にあります。簡単に言えば、Token Extensionsにおける拡張機能とは、トークンの能力と有用性を高めるために追加できる機能のことです。拡張機能により、トークン作成者は特定のニーズや目標に合わせて、トークンの挙動や特性をカスタマイズできます。トークンを作成するときは、任意の数の拡張機能を利用できます。主要な拡張機能と、それらがSolanaエコシステムにもたらす可能性のある影響を詳しく見ていきましょう。なお、これらの拡張機能がすべて現在利用可能なわけではありません。
ミント拡張機能
各ミント拡張機能について説明します。
1. 転送手数料
既存のトークンプログラムでは転送時に手数料を課せませんが、Token Extensions規格では、プロトコルレベルで転送手数料を設定できます。この仕組みにより、トランザクションに対する新たな財務管理が可能になります。
2. 転送フック
転送フック拡張機能により、トークン作成者はトークンの転送をさらに細かく制御できます。これは、NFTロイヤリティに関連する課題を管理するうえで特に重要です。転送フック拡張機能では、トークンが転送されるたびに使用するカスタムプログラムを、トークン作成者が作成できます。トークンの転送が開始されると、そのトークンがカスタムプログラムと通信し、後続のあらゆる処理を実行できるようになります。
3. ミントのクローズ
Token Extensionsは、指定したアドレスがミントアカウントをクローズできるようにすることで、従来のトークンプログラムにあった大きな機能不足を解消します。これは以前は不可能でした。ミントを初期化する前にMintCloseAuthority拡張機能を初期化することで実現します。これにより、権限を持つウォレット以外のユーザーもトークンのミントをクローズできます。
4. 利息付きトークン
Token ExtensionsにはInterestBearingMint拡張機能が導入されており、累積した利息を反映して、トークンのUI上の数量を異なる形で表示できます。この機能により、トークンは実質的に「利息を獲得」でき、保有期間が長いほど価値が高まります。
5. 譲渡不可トークン(ソウルバウンドトークン)
NonTransferableミント拡張機能により、ウォレットから移動できない「ソウルバウンド」トークンを作成できます。固有の実績や報酬に最適で、他人に送信できないため、イベントチケットにも適しています。
6. 機密転送
Token Extensionsには、Confidential Transfersと呼ばれる新しい機密トークン拡張機能が導入されています。これは、ゼロ知識証明を使用してSPLトークンの残高と転送額を暗号化し、プライバシーを実現する機能です。
この拡張機能の全体的な目的は、匿名性ではなく機密性を重視してユーザーのプライバシーを向上させることです。残高には加算や減算が行われるため、Token Extensions規格には、このような秘匿された数学的演算を可能にする暗号化方式が必要です。つまり、暗号化は準同型でなければなりません。準同型暗号は、データを実際に復号することなく、暗号化されたデータに対して特定の種類の計算を実行できる特殊な暗号化方式です。そのため、これらの秘匿計算から得られる暗号化結果を復号すると、平文に同じ数学的演算を適用した結果と同じになります。Confidential Transfersでは「Twisted ElGamal Encryption」を使用し、暗号文に対する秘匿された数学的演算を可能にしています。
さらに詳しく知りたい方のために説明すると、Twisted ElGamal Encryptionは、標準的なElGamal暗号方式の単純な変種です。暗号文は、暗号化されたメッセージのPedersenコミットメントと復号ハンドルに分割され、暗号文に対する秘匿された数学的演算を可能にします。
Confidential TransfersはSigma Protocolsを使用して検証されます。これはゼロ知識証明の一種で、一方の当事者(証明者)が秘密そのものを明かさずに、その秘密を知っていることを別の当事者(検証者)に証明できます。これらのSigma Protocolsは、この拡張機能で提供される複数の命令に必要です。それぞれの証明を詳しく見ていきましょう。
(公開鍵)有効性証明
- Twisted ElGamal公開鍵が正しい形式であることを検証します
- 安全なチャットを始める前に、相手の「デジタル身分証明書」を検証するようなものです
- ConfigureAccount命令に必要です
(暗号文)有効性証明
- 暗号化されたメッセージが正しい形式であることを確認します
- 密封された箱を受け取るようなものです。箱がまだ密封されているため、改ざんされていないと分かります
Withdraw、Transfer、TransferWithFee命令に必要です
ゼロ残高証明
- Twisted ElGamal暗号文が数値ゼロを暗号化したものであることを証明します
- 銀行アプリを開いて確認することなく、口座残高がゼロであると確かめる方法のようなものです
EmptyAccount命令に必要です
等価性証明
- 2種類の等価性を確認します。2つのElGamal暗号文の間、またはElGamal暗号文とPedersenコミットメントの間の等価性です
- 工具でいっぱいの鍵付き物置が2つあり、実際に物置を開けずに、両方にまったく同じ工具が入っていることを証明するようなものです
Transfer、TransferWithFee、WithdrawWithheldTokensFromMint、WithdrawWithheldTokensFromAccounts命令に必要です
手数料Sigma証明
- コミットされた転送手数料が正しいことを証明します
- 実際に支払った金額を見せることなく、荷物の関税を支払ったとFedExに確認してもらうようなものです
TransferWithFee命令に必要です
範囲証明
- 暗号化された数値が特定の範囲内にあることを確認します
- ある人の身長を推測し、実際の身長を明かさずに、その推測が正しい一定の範囲内にあることを証明するようなものです
- Solanaでは、これらの証明にBulletproofsを使用しています。詳細については、この学術論文と、そのdalek実装を参照してください
要点:これらのゼロ知識証明は、一方の当事者が秘密を知っており、別の当事者がその秘密を明かさせることなく検証できると証明するために使用されます。さまざまな種類の証明により、トークンの残高と転送が数学的に意図どおり機能することを、暗号化によって完全に非公開のまま保証できます。
この機密システムでは、復号鍵を持つアカウント所有者だけが残高を確認できます。ただし、監査やコンプライアンス上の理由から、外部の第三者が残高を確認する必要がある場合もあります。機密トークン拡張機能では、Global Auditorシステムによってこれを実現します。このシステムでは、アカウントごとに個別の復号鍵を設定できるため、所有者は特定のアカウントへの読み取りアクセスを選択的に提供できます。ミント、つまり資産を発行する主体には、グローバルな「監査者暗号鍵」を任意で含められる特別なデータ構造があります。コードは次のとおりです。
Transfer {
amount_sender: PKE::encrypt(pke_pubkey_sender, 10),
amount_receiver: PKE::encrypt(pke_pubkey_receiver, 10),
amount_auditor: PKE::encrypt(pke_pubkey_auditor, 10),
range_proof: RangeProof,
equality_proof: EqualityProof,
...
}amount_auditorパラメーターは、監査者の公開暗号鍵で暗号化された転送額です。監査者の秘密鍵を持つユーザーはamount_auditorを復号できるため、特定のミントのトランザクション額を監査できます。
セキュリティに詳しい方は、この設計に潜在的な欠陥があることに気づいたかもしれません。Aliceが自身の暗号化残高に基づいて証明を生成するとします。しかし同時に、BobがAliceにトークンを送信し、Bobのトランザクションが先に処理された場合、生成された証明には新しく更新されたアカウント状態が反映されないため、Aliceのトランザクションは拒否されます。フロントランニングと呼ばれるこの種の攻撃では、BobがAliceのアカウントへの転送でネットワークを継続的にあふれさせると、Aliceのアカウントが使用不能になる可能性があります。この種の攻撃を防ぐため、アカウントの暗号化残高はpending残高とavailable残高に分割されます。
let ct_pending = PKE::encrypt(pke_pubkey, 10);
let ct_available = PKE::encryption(pke_pubkey, 50);
Account {
mint: Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB,
owner: 5vBrLAPeMjJr9UfssGbjUaBmWtrXTg2vZuMN6L4c8HE6,
encryption_key: mpbpvs1LksLmdMhCEzyu5UEWEb3dsRPbB5,
pending_balance: ct_pending,
account_balance: ct_available,
...
}送金される資金は利用可能残高から差し引かれ、受け取る資金は保留残高に加算されます。
Confidential Transfersはまだ利用できません。また、Solanaドキュメントの「Introduction」と「Quick Start Guide」の各項目も、引き続き開発中です。ただし、Confidential Transfersの残りのタスクは、solana-program-libraryリポジトリにあるこのGitHub Issueで確認できます。ドキュメントにはプロトコルの詳細解説もありますが、この拡張機能を使用するために、その内容を理解する必要はありません。上記の段落で紹介したConfidential Transfersの分かりやすい概要だけでも、すべての機能が利用可能になった際に使い始めるには十分です。
アカウント拡張機能
各アカウント拡張機能について説明します。
1. 受信転送でのメモ必須化
Token Extensionsには、すべての受信転送にメモを必須とする機能が含まれています。メモは基本的に、オンチェーン上の短いメッセージです。贈り物にメモが添えられていて、誰から、なぜ贈られたのかが分かるような機能です。
2. 変更不可能な所有権
ImmutableOwner拡張機能は、アカウントの所有権を再割り当てできなくすることで、セキュリティを強化します。この仕組みにより、トークントランザクションの安全性が向上します。これをよく理解するには、標準トークンプログラムでトークンがどのように保管されるかを確認する必要があります。通常、ウォレットにトークンを送信するときは、まず受信者のウォレット内にそのトークンを保持するためのトークンアカウントを作成します。このアカウントは、トークンのミントアドレスと受信者のウォレットアドレスを組み合わせて作られます。ここまでは問題ありませんが、アカウントの作成後、その所有権を別のユーザーに移転できてしまいます。Token2022のImmutable Owner拡張機能を使用すると、これは不可能になります。
3. デフォルトのアカウント状態
DefaultAccountState拡張機能により、ミント作成者はすべての新規トークンアカウントをデフォルトで凍結状態に設定し、トークンの使用を制限できます。これにより、トークンの配布と使用をさらに細かく制御できます。つまり、トークンを受け取ることはできますが、トークン作成者が許可するまで何もできません。
4. 永続デリゲート
Token Extensionsでは、トークンに永続的なアカウントデリゲートを指定できます。これは基本的に、特定のミントのトークンを管理する権限を常に持つユーザー(デリゲート)を任命できる機能です。デリゲートは、トークンの転送やバーンなどを実行できます。この拡張機能を使用すると、権限者はそのミントのあらゆるアカウントに対して無制限のデリゲート権限を持ちます。デリゲートまたは担当者が、誰のウォレットにあるトークンでも転送またはバーンできるため、非常に危険な場合があります。
Token ExtensionsとEthereum、Binance Smart Chain(BSC)の比較
EthereumとBinance Smart Chain(BSC)はすでにDeFi分野で大きく前進しており、Token Extensionsの一部機能と同様のものが、これらのチェーン上のトークンで使われています。
一例として、BSC上のSafeMoonは各トランザクションに10%の手数料を導入し、そのうち5%を他のSafeMoon保有者に再分配しています。これにより、保有者にHODLを促します。ゼロ知識証明を利用した機密転送の概念も新しいものではありません。Ethereumでは、Aztec Protocolなどのプロジェクトがプライベートトランザクションを検討してきました。
Solanaはこれらの機能の提供がやや遅れたものの、優れた速度と低いトランザクションコストにより、Token Extensionsが発展しやすい環境を提供します。そのため、EthereumやBSCに対して競争優位性を確立できます。
Token Extensionsの早期導入事例
Token Extensionsの特長を最大限に活用するには、開発者、dApp、ウォレットがこれらの新機能に対応する必要があります。新しいプログラムの早期導入事例をいくつか紹介します。
$BERN / BonkEarn
$BONKコミュニティが作成した$BERNは、Token Extensionsプログラム上に構築された最初期のトークンの1つです。現在、$BERNは転送手数料拡張機能を使用し、すべての転送に6.9%の手数料を課しています。$BERNチームは、この手数料を$BERNと$BONKの両方の保有者への報酬に使用しています。
詳細な内訳:
- 5%は「Bernzy Bonus Fee」に充てられ、$BERN保有者への報酬に使用されます
- 1%は$BONKの購入とバーンに使用されます
- 0.5%は$BERNのバーンに使用されます
- 0.3%は追加手数料の支払いとトークンの流動性プールへの追加に使用する開発者ファンドに充てられます。
- 0.1%は$BONK DAOに充てられます
分散型取引所
FluxBeam はSolana上のDEXで、現在Token Extensionsプログラムで作成されたトークンをサポートしています。
ウォレット
人気のウォレット拡張機能であるBackpackは、すでにToken Extensions に対応しており、Phantomも近日中に対応する予定です。
ツール
Token Extensionsプログラムを使用して独自のトークンをミントするツールが、FluxBeamで公開されています。
Solanaのトークン市場や各種トークンを調査するツールであるRugCheck では、すでにToken 2022で構築されたトークンを確認できます。
未来を受け入れる
Token Extensionsの導入は、Solanaのweb3への取り組みにおける大きな飛躍です。既存機能の能力を高めながら、さまざまな新機能をもたらします。画期的な拡張機能により、トークン作成者はより高度な制御と柔軟性を得られるだけでなく、DeFi分野に新たな可能性が生まれます。他のブロックチェーンがすでに同様の機能を提供しているとはいえ、Solanaの速度と手頃なコストという強みにToken2022の機能が加わることで、暗号資産の世界における強力な競争相手となります。初期ユーザーや広範なコミュニティからの支持が拡大し続けるなか、Token2022はSolanaエコシステムをさらに強化し、その価値を高める準備が整っています。
関連記事
Heliusを購読
Solana開発の最新情報や新しい記事の公開通知を受け取れます


