機能

Umiのインターフェース

コアインターフェース

Umiは、Solanaブロックチェーンとの相互作用を簡単にするコアインターフェースのセットを定義します。具体的には、以下の通りです:

  • Signer: トランザクションとメッセージに署名できるウォレットを表すインターフェース。
  • EddsaInterface: EdDSAアルゴリズムを使用してキーペアの作成、PDAの検索、メッセージの署名/検証を行うインターフェース。
  • RpcInterface: Solana RPCクライアントを表すインターフェース。
  • TransactionFactoryInterface: トランザクションの作成とシリアライゼーションを可能にするインターフェース。
  • UploaderInterface: ファイルをアップロードし、それらにアクセスするためのURIを取得するインターフェース。
  • DownloaderInterface: 指定されたURIからファイルをダウンロードするインターフェース。
  • HttpInterface: HTTPリクエストを送信するインターフェース。
  • ProgramRepositoryInterface: プログラムの登録と取得のためのインターフェース。

Contextインターフェース

上記のインターフェースはすべて、コード内でそれらを注入するために使用できるContextインターフェースで定義されています。Contextタイプは次のように定義されています:

interface Context {
downloader: DownloaderInterface;
eddsa: EddsaInterface;
http: HttpInterface;
identity: Signer;
payer: Signer;
programs: ProgramRepositoryInterface;
rpc: RpcInterface;
transactions: TransactionFactoryInterface;
uploader: UploaderInterface;
};

ご覧のように、Signerインターフェースはコンテキスト内で2回使用されています:

  • identityとして1回:あなたのアプリを使用する署名者。
  • payerとして1回:トランザクション手数料やストレージ手数料などの費用を支払う署名者。通常、これはidentityと同じ署名者になりますが、それらを分離することで、アプリにより多くの柔軟性を提供します(例:ユーザーエクスペリエンスを向上させるためにユーザーからいくつかのコストを抽象化したい場合)。

Umiインターフェース

UmiインターフェースはこのContextインターフェースの上に構築され、エンドユーザーがプラグインを登録できるuseメソッドを追加するだけです。次のように定義されています:

interface Umi extends Context {
use(plugin: UmiPlugin): Umi;
}

したがって、エンドユーザーは次のようにUmiインスタンスにプラグインを追加できます:

import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
import { walletAdapterIdentity } from '@metaplex-foundation/umi-signer-wallet-adapters';
import { awsUploader } from '@metaplex-foundation/umi-uploader-aws';
import { myProgramRepository } from '../plugins';
const umi = createUmi('https://api.mainnet-beta.solana.com')
.use(walletAdapterIdentity(...))
.use(awsUploader(...))
.use(myProgramRepository());