モバイルSDK
Android SDK
Metaplex Android SDKは、次のことを可能にするライブラリです:
- アカウントの読み込みと逆シリアル化
- トランザクションの作成
- アクション実行(NFTのミント、オークションの作成など)
Androidおよびkotlinをサポートする他のプラットフォームで動作します。
安定性
このプロジェクトは開発中です。すべてのインターフェースは非常に頻繁に変更される可能性があります。このライブラリを使用する際は注意してください。実験的なAPI変更が発生すると、バグや動作の変更がユーザーを驚かせる可能性があります。
リファレンス
はじめに
インストール
要件 {#requirements}
- Android 21+
GitHubが推奨するアーティファクトの読み込み方法を使用することをお勧めします。まず、アカウント設定からGitHubトークンを取得します。
settings.gradle内にmavenリポジトリを追加します:
repositories {
...
maven {
name = "GitHubPackages"
url = "https://github.com/metaplex-foundation/metaplex-android"
credentials {
username = "<YOUR_GITHUB_USERNAME>"
password = "<YOUR_GITHUB_TOKENS>"
}
}
}
次にbuild.gradleで:
dependencies {
...
implementation 'com.metaplex:metaplex:+' // バージョンを設定
}
その後、gradleを同期します。
JitPackリリース
ライブラリはJitPack.ioを通じて利用可能になりました。
まず、JitPackリポジトリをビルドに追加します:
repositories {
...
maven { url 'https://jitpack.io' }
}
次に、アプリ/モジュールの'build.gradle'ファイルに依存関係を追加します:
dependencies {
...
implementation 'com.github.metaplex-foundation:metaplex-android:{version}'
}
セットアップ
Android SDKへのエントリーポイントは、APIにアクセスできるMetaplexインスタンスです。
SolanaConnectionDriverを設定し、環境を設定します。StorageDriverとIdentityDriverを提供します。OKHttp用のOkHttpSharedStorageDriverと読み取り専用Identity Driver用のReadOnlyIdentityDriverの具体的な実装も使用できます。
SDKが誰の代わりに対話するべきか、およびアセットをアップロードするときにどのストレージプロバイダーを使用するかをカスタマイズできます。将来的にはデフォルトで簡単な実装を提供する可能性があります。
val ownerPublicKey = PublicKey("<Any PublicKey>")
val solanaConnection = SolanaConnectionDriver(RPCEndpoint.mainnetBetaSolana)
val solanaIdentityDriver = ReadOnlyIdentityDriver(ownerPublicKey, solanaConnection.solanaRPC)
val storageDriver = OkHttpSharedStorageDriver()
val metaplex = Metaplex(solanaConnection, solanaIdentityDriver, storageDriver)
使用方法
適切に設定されると、そのMetaplexインスタンスを使用して、さまざまな機能セットを提供するモジュールにアクセスできます。現在、nftプロパティを介してアクセスできるNFTモジュールが1つだけあります。そのモジュールから、NFTの検索、作成、更新ができ、さらに多くの機能が追加される予定です。
NFT
NFTモジュールはMetaplex.nftを介してアクセスでき、以下のメソッドを提供します。現在、読み取りメソッドのみをサポートしています。NFTの作成と更新は将来サポートされる予定です。
- findByMint(mint, callback)
- findAllByMintList(mints, callback)
- findAllByOwner(owner, callback)
- findAllByCreator(creator, position = 1, callback)
- findAllByCandyMachine(candyMachine, version = 2, callback)
すべてのメソッドはコールバックを返します。RXまたはAsync Result内にラップすることもできます。特定のフレームワークを強制せずに最も互換性があるため、このインターフェースのみを提供します。
最初のリクエスト
以下のコードスニペットは、publicKeyからNFTを取得するために使用できる基本的なものです。このユースケースはウォレットにとって非常に一般的です:
metaplex.nft.findByMint(mintPublicKey){
it.onSuccess {
...
}.onFailure {
...
}
}
これにより、その特定の公開鍵が所有するNFTの配列が返されます。
Nftモデル
上記のすべてのメソッドは、Nftオブジェクトを返すか、対話します。Nftオブジェクトは、トップレベルで必要なすべての情報を含むNFTの読み取り専用データ表現です。
コードをチェックすることで完全なデータ表現を確認できますが、Nftオブジェクトで利用可能なプロパティの概要を以下に示します。
class NFT(
val metadataAccount: MetadataAccount,
val masterEditionAccount: MasterEditionAccount?
) {
val updateAuthority: PublicKey = metadataAccount.update_authority
val mint: PublicKey = metadataAccount.mint
val name: String = metadataAccount.data.name
val symbol: String = metadataAccount.data.symbol
val uri: String = metadataAccount.data.uri
val sellerFeeBasisPoints: Int = metadataAccount.data.sellerFeeBasisPoints
val creators: Array<MetaplexCreator> = metadataAccount.data.creators
val primarySaleHappened: Boolean = metadataAccount.primarySaleHappened
val isMutable: Boolean = metadataAccount.isMutable
val editionNonce: Int? = metadataAccount.editionNonce
val tokenStandard: MetaplexTokenStandard? = metadataAccount.tokenStandard
val collection: MetaplexCollection? = metadataAccount.collection
...
}
ご覧のとおり、一部のプロパティはオンデマンドで読み込まれます。これは、常に必要とは限らず、読み込むのにコストがかかる可能性があるためです。
これらのプロパティを読み込むには、Nftオブジェクトのmetadataプロパティを実行する必要があります。
nft..metadata(metaplex) { result ->
it.onSuccess {
...
}.onFailure {
...
}
}
オークション
Metaplex Auction Houseプロトコルにより、誰でも分散型販売契約を実装し、希望するSPLトークンを受け入れることができます。
オークションモジュールはMetaplex.auctionsを介してアクセスでき、以下のメソッドを提供します。現在、読み取りメソッドのみをサポートしています。Auction Houseの作成、およびビッドとリスティングの対話と作成は、将来サポートされる予定です。
すべてのメソッドは、アプリケーションでより柔軟性と互換性を提供するために、構成可能なサスペンド関数として提供されます。
注意: Auctions APIが提供するこれらのサスペンド関数は、ライブラリのアーキテクチャの変更です。以前は非同期コールバックメソッドのみを提供していました。すべてのユーザーが新しいサスペンド関数に移行することを強くお勧めしますが、利用可能なメソッドの非同期コールバック実装も提供しています。これらのメソッドは暫定的に提供されており、将来的に非推奨になる可能性があることに注意してください:
findAuctionHouseByAddress(address, callback)findAuctionHouseByCreatorAndMint(creator, treasuryMint, callback)
findAuctionHouseByAddress
findAuctionHouseByAddressメソッドは公開鍵を受け入れ、AuctionHouseオブジェクトを返すか、指定されたアドレスにAuctionHouseが見つからなかった場合はエラーを返します。
val theAuctionHouse: AuctionHouse? = metaplex.auctions.findAuctionHouseByAddress(addressPublicKey).getOrNull()
findAuctionHouseByCreatorAndMint
findAuctionHouseByCreatorAndMintメソッドは公開鍵を受け入れ、AuctionHouseオブジェクトを返すか、指定されたアドレスにAuctionHouseが見つからなかった場合はエラーを返します。
val theAuctionHouse: AuctionHouse? = metaplex.auctions.findAuctionHouseByCreatorAndMint(creatorPublicKey, mintPublicKey).getOrNull()
返されるAuctionHouseモデルには、チェーン上のAuction Houseアカウントに関する詳細が含まれます。将来的には、このモデルを使用してオークションと対話し、取引を実行するAuctionHouseClientインスタンスを構築します。
アイデンティティ
Metaplexインスタンスの現在のアイデンティティはmetaplex.identity()を介してアクセスでき、SDKと対話するときに誰の代わりに行動しているかについての情報を提供します。
このメソッドは、以下のインターフェースを持つアイデンティティオブジェクトを返します。すべてのメソッドにはsolana apiインスタンスが必要です
interface IdentityDriver {
val publicKey: PublicKey
fun sendTransaction(transaction: Transaction, recentBlockHash: String? = null, onComplete: ((Result<String>) -> Unit))
fun signTransaction(transaction: Transaction, onComplete: (Result<Transaction>) -> Unit)
fun signAllTransactions(transactions: List<Transaction>, onComplete: (Result<List<Transaction?>>) -> Unit)
}
これらのメソッドの実装は、使用されている具体的なアイデンティティドライバーに依存します。たとえば、KeypairIdentityまたはGuest(公開鍵が追加されていない)を使用します
利用可能な具体的なアイデンティティドライバーを簡単に見てみましょう。
GuestIdentityDriver
GuestIdentityDriverドライバーは最もシンプルなアイデンティティドライバーです。これは本質的にnullドライバーであり、署名されたトランザクションを送信する必要がない場合に便利です。signTransactionメソッドを使用すると失敗を返します。
KeypairIdentityDriver
KeypairIdentityDriverドライバーは、パラメーターとしてAccountオブジェクトを受け入れます。
ReadOnlyIdentityDriver
KeypairIdentityDriverドライバーは、パラメーターとしてPublicKeyオブジェクトを受け入れます。GuestIdentityに似た読み取り専用ですが、提供されたPublicKeyがあります。signTransactionメソッドを使用すると失敗を返します。
ストレージ
metaplex.storage()を使用して現在のストレージドライバーにアクセスでき、次のインターフェースにアクセスできます。
interface StorageDriver {
fun download(url: URL, onComplete: (ResultWithCustomError<NetworkingResponse, StorageDriverError>) -> Unit)
}
現在、オフチェーンでjsonデータを取得するためにのみ使用されています。
OkHttpSharedStorageDriver
これはOkHttpネットワーキングを使用します。これは最も人気のあるAndroidネットワーキング実装ライブラリです。これが最も便利な実装かもしれません。
MemoryStorageDriver
これは、サイズが0の空のDataオブジェクトを返します。
サンプルアプリ
SDKにはサンプルアプリが付属しています。クローンして電話で実行し、役立つものを取ってください。
