Fixed Price Sale

技術的説明

クリエーターが何かを販売するには:

  1. ストアを作成

    • マーケットを何らかの方法でフィルタリングする必要があるため、これは必要です

    • 名前、管理者キー、説明が含まれます

  2. 販売リソースを初期化します。作成されたものか、プラットフォームが作成します。

    • ユーザーが販売リソースを初期化すると、販売できるリソースを持つオブジェクトができます
  3. マーケットを作成

    • 販売するアイテムに関する情報を含むオブジェクトを作成します。販売リソースで定義した最大供給量以外のすべて

ユーザーがトークンを購入するには:

  1. ストアに移動します。

  2. トークンを選択して「購入」をクリック

    • 内部的に次のことが起こります:

      • TradeHistoryアカウントが作成され、このユーザーがすでに購入したトークンの数を追跡します

      • デビットとクレジット操作

      • 新しいNFTが作成されます(ミントの作成、トークンのミント、メタデータの作成、MasterEditionの作成)

  3. トークンがウォレットに表示されます

アカウント

Store

フィールドタイプ説明
adminPubkey特定のストアで販売リソースとマーケットを作成できる管理者キー
nameString
descriptionString

Selling resource

フィールドタイプ説明
storePubkey
ownerPubkeyリソースの所有者。このアカウントは、販売が終了したらリソースを取り戻すことができます
resourcePubkeyメタデータが添付されているミントアカウント。ミントキーがわかればPDAを計算できるため、メタデータキーを保存する必要はありません
vaultPubkeyMasterEditionを保持するトークンアカウント
vault_ownerPubkeyシードが["mt_vault", resource.key(), store.key()]のPDA
supplyu64すでに販売されたトークンの量
max_supplyOption<u64>販売できるトークンの最大量
stateEnum{Uninitialised, Created, InUse, Exhausted, Stoped,}リソースの状態

Market

フィールドタイプ説明
storePubkey
selling_resourcePubkey
treasury_mintPubkeyマーケットが支払いとして受け入れるトークンのミントアカウント
treasury_holderPubkey購入者がトークンを送信するトークンアカウント。マーケット所有者のみがアセットを引き出すことができます
treasury_ownerPubkeyPDA["holder", treasury_mint.key(), selling_resource.key()]
ownerPubkeyマーケット所有者
nameString
descriptionString
mutablebool
priceu64
pieces_in_one_walletOption<u64>1つのウォレットに販売できるトークンの数
start_dateu64
end_dateOption<u64>
stateEnum {Uninitialised, Created, Active, Ended,}
funds_collectedu64

TradeHistory

PDA ["history", wallet.key(), market.key()]

フィールドタイプ説明
marketPubkey
walletPubkey
already_boughtu64ユーザーが特定のマーケットからすでに購入したトークンの数

PrimaryMetadataCreators

PDA ["primary_creators", metadata.key()]

フィールドタイプ説明
creatorsVec<mpl_token_metadata::state::Creator>プライマリセールスロイヤリティを受け取るクリエーターのリスト

命令

CreateStore

新しいStoreアカウントを作成します。

パラメータタイプ説明
adminKey, Signer, Writable
storeKey, Signer, Writable初期化されていないアカウント
nameString
descriptionString

InitSellingResource

マーケットで使用されるSellingResourceアカウントを初期化します。

パラメータタイプ説明
storeKey
store_adminKey, Signer, Writableresource_tokenを保持し、selling_resourceアカウント作成の支払いを行います
selling_resourceKey, Signer, Writable初期化されていないアカウント
selling_resource_ownerKey販売が終了したらMasterEditionを引き出すことができるキー
resource_mintKeyメタデータが添付されているミントアカウント
master_editionKeyシードが["metadata", tokenMetadataProgramID, resource_mint, "edition"]のPDA
metadataKeyマスターエディションのメタデータ
vaultKey, Writableリソースを保持するトークンアカウント
vault_ownerPDA ["mt_vault", resource_mint.key(), store.key()]vaultトークンアカウントの所有者
resource_tokenKey, Writableresource_mintからのトークンを保持するユーザーのトークンアカウント
max_supplyOption<u64>販売するトークンの最大量

CreateMarket

Marketアカウントを初期化します。状態をCreatedに設定します。これは、所有者がアクティブ化される前にデータを変更できることを意味します。もちろん、Marketがmutableとマークされている場合。

:::warning

ユーザーがtreasury_mintとしてネイティブSOLでアートを販売したい場合、11111111111111111111111111111111を設定する必要があります。また、treasury_holderとtreasury_ownerは同じアカウントPDAである必要があります。これはセキュリティ上の理由から必要であり、プログラムのみがそのSOLを使用できるようにするためです。

:::

パラメータタイプ説明
marketKey, Signer, Writable初期化されていないアカウント
storeKey
selling_resource_ownerKey, Signer, Writable
selling_resourceKey, Writable
treasury_mintKey支払いとして受け取るアセットのミント
treasury_holderKeyトークンアカウント
treasury_ownerPDA ["holder", treasury_mint.key(), selling_resource.key()]
nameString
descriptionString
mutablebool
priceu64
pieces_in_one_walletOption<u64>
start_dateu64
end_dateOption<u64>
gating_configOption<GatingConfig{collection: Pubkey, expire_on_use: bool, gating_time: Option<u64>}>ゲーティングトークン。この値が設定されている場合、指定されたコレクションのNFTを持つユーザーのみがマーケットから新しいNFTを購入できます。

ChangeMarket

Market::mutable == trueの場合にのみ利用可能。変更可能:name、description、mutable、price、pieces_in_one_wallet。

パラメータタイプ説明
marketKey, Writable
market_ownerKey, Signer
new_nameOption<String>
new_descriptionOption<String>
mutableOption<bool>
new_priceOption<u64>
new_pieces_in_one_walletOption<u64>

Buy

現在の日付 > Market::start_dateの場合にのみユーザーが呼び出すことができます。

:::warning

ユーザーがネイティブSOLでアートを購入する場合、user_token_accとuser_walletアカウントは同じである必要があります。

:::

パラメータタイプ説明
marketKey, Writable
selling_resourceKey, Writable
user_token_accKey, Writableメンバートークンの支払いに使用するトークンアカウント。このトークンaccのミントはtreasury_mintと同じである必要があります
user_walletKey, Signer, Writable
trade_historyKey, Writableユーザーがすでに購入したNFTの数を追跡するアカウント
treasury_holderKey, Writable
new_metadata_accKey, Writable
new_edition_accKey, Writable
master_edition_accKey, Writable
new_mintKey, Writable
edition_markerKey, WritablePDA、シードはtoken-metadataプログラムで見つけることができます
vaultKey
vault_ownerPDA ["mt_vault", resource.key(), store.key()]
master_edition_metadataKey
以下のアカウントはオプションであり、ゲート機能が有効な場合にのみ渡す必要があります ↓
user_collection_token_accountKey, Writableコレクションからのユーザーのトークンアカウント
token_account_mintKey, Writableトークンのミントアカウント
metadata_accountKey上記のミントのメタデータアカウント

SuspendMarket

誰もアイテムを購入できず、マーケット所有者がデータを変更できるようにマーケットを一時停止します。命令は、Market::mutable == trueの場合にのみ利用可能である必要があります。他の場合は、それを一時停止する理由がないためです。

パラメータタイプ説明
marketKey, Writable
market_ownerKey, Signer
clockKey

ResumeMarket

一時停止されたマーケットを再開する命令。マーケットが一時停止状態にある場合にのみ呼び出すことができます。

パラメータタイプ説明
marketKey, Writable
market_ownerKey, Signer
clockKey

CloseMarket

この命令は、マーケットが無制限の期間で作成された場合にのみ呼び出すことができます。

パラメータタイプ説明
marketKey, Writable
market_ownerKey, Signer
clockKey

Withdraw

マーケット所有者が収集された財務資金を引き出すために呼び出します。Market::state == Endedの場合にのみ利用可能。

パラメータタイプ説明
marketKey
selling_resourceKey
metadataKey
treasury_holderKey, WritableMarket::treasury_holder。販売中にユーザーから受け取ったすべてのトークンを保持するトークンアカウント
treasury_mintKey
funderKey
payerKey, Signer
payout_ticketKey, WritablePDA["payout_ticket", market.key(), funder.key()]
treasury_ownerKeyPDA["holder", treasury_mint.key(), selling_resource.key()]
destinationKey, Writableトークンを転送するトークンアカウント
以下のアカウントはオプションであり、プライマリセール中にのみ渡す必要があります ↓
primary_metadata_creators_dataKeyプライマリセールからロイヤリティを受け取るべきクリエーターのリスト

ClaimResource

リソース所有者によって呼び出されます。SellingResource::state == ExhaustedまたはMarket::state == Endedの場合にのみ利用可能。

パラメータタイプ説明
marketKey
treasury_holderKey
selling_resourceKey
selling_resource_ownerKey, Signer
sourceKey, WritableSellingResource::vault。マスターエディションを保持するトークンアカウント
metadataKey販売されたトークンのメタデータ
vault_ownerKeyシードが["mt_vault", resource.key(), store.key()]のPDA
secondary_metadata_creatorsKey
destinationKey, Writableマスターエディションを転送するトークンアカウント

SavePrimaryMetadataCreators

マーケットが作成される前に呼び出されます。このクリエーターのリストは、ロイヤリティを配分するためにwithdraw命令で使用されます。primary_sale_happen = trueのマスターエディションからNFTを販売する場合は、この命令を呼び出す必要がないことに注意してください。

パラメータタイプ説明
adminKey, Signer, Writableメタデータの更新権限
metadataKey, Writable
primary_metadata_creatorsKey, Writableシードが["primary_creators", metadata.key()]のPDA
system_programKey
primary_metadata_creatorsu8primary_metadata_creatorsキーのバンプ
creatorsVec<mpl_token_metadata::state::Creator>プライマリロイヤリティを受け取るクリエーターのリスト
Previous
紹介