新着:HeliusがLight Protocolを買収
Heliusで新規ミントされたトークンを取得する方法
ブログ/開発

Heliusで新規ミントされたトークンを取得する方法

デベロッパーエクスペリエンスエンジニアXのAnam AnsariLinkedInのAnam Ansari
読了時間:6分
目次

    はじめに

    最近、Solanaのミームコインが注目を集めています。$WIFは時価総額35億ドルを突破し、Bodenは3億ドルに到達しました。PopcatとWenも最近、3億5,000万ドルを超えました。Slerfはローンチ初日に、Ethereumベースのすべての取引所を上回る取引量を記録しました。昨年11月のBONKの急騰以降、Solanaではこれまで以上に多くの新しいトークンが作成されています。

    この記事では、Solana上でトークンが作成される仕組み、SPLトークンとは何か、Heliusを使用して新しいトークンを監視し、そのメタデータを取得する方法を解説します。

    Solanaではどのようにトークンが作成されますか?

    Solanaは、ネイティブのSOLとその他のトークンの両方をサポートしています。Solana Program Library(SPL)は、Solana上の代替可能トークンと非代替性トークン(NFT)に共通する標準を定義しています。非代替性トークン(ERC-721)と代替可能トークン(ERC-20)に異なる標準を設けているEthereumとは異なり、Solana Program Libraryにはトークンの種類ごとに特別に策定された標準はありません。 

    Token Program

    Solana上の代替可能トークンと非代替性トークン(NFT)の標準実装は、Token Programです。新しいトークンタイプやアカウントの作成、トークンの転送とバーンなど、さまざまな機能を提供します。Token Programは完成済みであり、新機能を追加する予定はありません。ただし、重大なバグや互換性を損なうバグを修正するために変更される可能性はあります。

    ただし、Token Programには制約があります。新しい機能を追加するには開発者がフォークする必要があり、トランザクションがより複雑でリスクの高いものになります。この問題に対処するため、Solanaは次のような追加機能と改良をまとめたToken-2022を導入しました。

    1.  ミント拡張機能:機密転送、転送手数料、ミントのクローズ、利息付きトークン、譲渡不可トークン、永続的デリゲート、転送フック、メタデータポインター、メタデータ。
    2. アカウント拡張機能:受信転送時のメモ必須化、不変の所有権、デフォルトのアカウント状態、CPIガード。 

    Token-2022について詳しくは、こちらの記事をご覧ください。

    SolanaのToken Programでは、ミントアカウントとトークンアカウントを作成できます。ミントアカウントにはトークンに関する全体的な情報が含まれ、トークンアカウントにはウォレットとミントアカウントの関係が保存されます。次のコードまたはspl-token-cliを使用してトークンを作成できます。たとえば、spl-token-cliがインストールされている場合、コマンドラインで次のコマンドを実行すると代替可能トークンを作成できます。

    コード
    spl-token create-token

    Token Metadata Program

    ミントアカウントには、現在のトークン供給量などのデータ属性が含まれています。ただし、名前やシンボルなどの標準化されたデータはありません。この問題を解決するため、MetaplexはToken Metadata Programを導入しました。このプログラムでは、ミントアドレスから導出されたPDA(Program Derived Address)を使用して、代替可能トークンと非代替性トークンに追加データを関連付けられます。

    Token Metadata Programは当初、Solana上でのNFT作成を簡素化するために作られました。ただし、半代替性トークンであるSFTにも対応しています。SFTは、代替可能トークンと非代替性トークンの両方の特性を兼ね備えています。最初は代替可能トークンのように機能し、どちらの当事者も価値を失うことなく同一のトークンと交換できます。使用後は交換価値を失い、収集可能な非代替性トークンとしての属性を持つようになります。SFTは、ゲームやメタバース環境の特性を表すメタデータが関連付けられた、固有のアカウントタイプとして機能します。効率性、コスト効率、柔軟性、トランザクションセキュリティの向上を理由に、特定の用途ではNFTよりもSFTが選ばれます。

    Token Metadata Programは、Programmable NFT(pNFT)にも対応しています。この新しいアセット標準により、クリエイターは特定の操作にカスタムルールを定義し、サードパーティの権限に対してより細かな単位で委任できます。pNFTが委任されているかどうかにかかわらず、そのトークンアカウントはSPL Token Program上で常に凍結されます。これにより、SPL Token Programを直接操作してToken Metadata Programを回避することはできません。

    新しいトークンの監視 

    新規ミントされたトークンを監視するため、webhookを設定します。webhookを使用すると、オンチェーンイベントをリッスンし、イベント発生時に特定のアクションを実行できます。Token Metadata ProgramのTOKEN_MINTトランザクションタイプをリッスンするよう、webhookを設定します。このトランザクションタイプで現在サポートされているソースは次のとおりです(その他のソースには**「UNKNOWN」**というタグが付けられます)。 

    コード
     "TOKEN_MINT": [   "CANDY_MACHINE_V1",   "ATADIA",   "SOLANA_PROGRAM_LIBRARY" ]

    webhookはHelius Dashboardから作成するか、APIリファレンスを使用してコードから作成できます。Dashboardから作成するには、左側のパネルでWebhooksセクションに移動し、New Webhookをクリックします。次に、以下の情報を指定してwebhookを設定します。

    1. ネットワーク: Mainnet/Devnet
    2. webhookタイプ:Enhanced、Raw、Discordのいずれかを選択できます。Discordを選択する場合はWebhook URLを送信する必要があり、通知はbotによって整形され、直接送信されます。Discord botのWebhook URLを取得する手順はこちらをご覧ください。Rawを選択すると、トランザクションタイプを指定できません。 
    3. トランザクションタイプ: 新規ミントされたトークンをリッスンするには、TOKEN_MINTを選択します*。* Programがサポートするその他のトランザクションタイプはこちらで確認できます。 
    4. Webhook URL: 通知をリッスンするエンドポイント(Discord Bot、Webサイトなど)を追加します。 
    5. 認証ヘッダー: webhookへのPOSTリクエストに渡す認証ヘッダーを入力します。この項目は任意です。
    6. アカウントアドレス: ここにToken Metadata ProgramのアドレスmetaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1sを追加します。その他のケースでは、必要に応じて複数のアカウントアドレスを追加できます。トランザクション内の特定のユーザーからの通知を受け取りたい場合は、そのユーザーのアドレスを含めることができます。

    確認が完了すると、webhookを使用できるようになります。Webhook URLに基づいて適切なフロントエンドを構築できます。ここでは、Webhook TypeとしてDiscordを選択し、Discord botのWebhook URLを指定しているため、Discord Botをコーディングする必要はありません。次のような通知を受信します。 

    トークンメタデータの取得

    トークンID(トークンのミントアドレス)を使用して、特定のトークンのメタデータを取得できます。Enhanced webhook経由で送信されたJSON通知を解析してください(webhookタイプがEnhancedに設定されている場合)。ミントアドレスは、transferTokens配列の最初のオブジェクト内にある「mint」フィールドで確認できます。トークンIDを取得したら、DAS APIが提供するgetAssetメソッドを使用して、トークンに関する追加情報を取得できます。 

    たとえば、getAssetメソッドを使用すると、Jito Staked SOL(JitoSOL)に関する情報を取得できます。

    コード
    const url = `https://mainnet.helius-rpc.com/?api-key=<api_key>`
    
    const getAsset = async () => {
      const response = await fetch(url, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          jsonrpc: '2.0',
          id: 'my-id',
          method: 'getAsset',
          params: {
            id: 'J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn',
            displayOptions: {
    	    showFungible: true //return details about a fungible token
    	}
          },
        }),
      });
      const { result } = await response.json();
      console.log("Asset: ", result);
    };
    getAsset();

    ドキュメントでは、その他のDAS APIの例と、このメソッドのリクエストおよびレスポンスの完全なスキーマを確認できます。

    まとめ

    この記事では、Solana上でトークンが作成される仕組み、SPLトークンとは何か、webhookを設定して新しいトークンを監視し、Helius経由でそのメタデータを取得する方法を学びました。ヘルプやサポートが必要な場合は、お気軽にDiscordでお問い合わせください。

    Solanaの最新情報を見逃さないよう、以下にメールアドレスをご入力ください。さらに詳しく知りたいですか?Heliusブログの最新記事を読み、今すぐSolanaの旅を続けましょう。

    リソース

    Heliusを購読

    Solana開発の最新情報や新しい記事の公開通知を受け取れます

    拡大画像