機能
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());
