Auction House
概要
このプログラムは非推奨とマークされており、Metaplex Foundationチームによって積極的にメンテナンスされていないことにご注意ください。新機能、セキュリティ修正、下位互換性は保証されません。ご使用の際は十分ご注意ください。
はじめに
Auction Houseは、Solanaブロックチェーン内でアセットを交換できるプログラムです。
Solana上でアセットを交換する方法はたくさんありますが、なぜこの問題の解決に焦点を当てた別のプログラムがあるのでしょうか?詳しく見ていきましょう。
このプログラムの理念は、誰でも独自のマーケットプレイスを作成・設定でき、アセットの交換方法に関するカスタムロジックを提供できるようにすることです。Auction Houseプロトコルの動機は、異なるユースケースに焦点を当てたマーケットプレイスの健全なエコシステムを作成し、さらに重要なことに、それぞれがユーザーのアセット取引を可能にする方法に独自の特色をもたらすことです。
Auction Houseプログラムの最も重要な側面は、アセットの所有権をユーザーに提供することです。
従来、ユーザーがマーケットプレイスにアセットをリストすると、アセットはユーザーのウォレットから、マーケットプレイスが所有するエスクローとして知られるウォレットに移動され、アセットがデリストまたは売却されるまでそこに保管、つまりエスクローされます。これにはいくつかの懸念があります:
- ユーザーは同じアセットを複数のマーケットプレイスにリストできない
- ユーザーはマーケットプレイスのエスクロー契約に頼ってアセットを安全に保持する必要がある
ここでAuction Houseがその力を発揮します。これは、マーケットプレイスがエスクローレスの販売契約を実装できるようにするトランザクションプロトコルであり、アセットの所有権をユーザーに提供します。
オークションハウスの作成
Auction Houseプログラムを使用して、新しいAuction Houseアカウントをインスタンス化することで、新しいマーケットプレイスを作成できます。Auction Houseアカウントは、特定の公開鍵と、オプションで通貨として使用するSPLトークン(詳細は後述)から派生したプログラム派生アドレス(PDA)です。

アカウントはユーザーが望む方法で設定できます。これらの設定については専用ページで詳しく説明しますが、以下は興味深い設定可能なパラメータの一部です:
requireSignOff: これにより、マーケットプレイスはリストできるアセットと入札できるビッドをゲートできます。すべての関連する命令で、Auction Houseの権限がトランザクションに署名する必要があります。canChangeSalePrice: このパラメータは、requireSignOffがtrueに設定されているAuction Houseでのみ使用することを目的としています。これにより、Auction Houseはカスタムオーダーマッチングを実行して、出品者に最適な価格を見つけることができます。sellerFeeBasisPoints: これは、マーケットプレイスがすべての取引で受け取るシェアを表します。たとえば、これが200、つまり2%に設定されている場合、マーケットプレイスはプラットフォームで発生するすべての取引の2%を受け取ります。
リスティングと入札
アクティブなAuction Houseができたら、ユーザーはマーケットプレイスでアセットのリストとアセットへの入札を開始できます。
リスティング
ユーザーがアセットをリストすると、Auction Houseは2つのことを行います:
- Auction Houseは売却注文を作成します:つまり、アセットのリスティングを表す
SellerTradeStateとして知られるPDAを作成します。トレードステートは、他のPDA/アカウントと比較して非常に安価な特別なPDAです。これは、これらのPDAが1バイトのデータのみを格納するためです。これはPDAのバンプです。リスト価格、トークン数、ミントアカウントなどのリスティングに関連する他のすべての情報は、PDA内に格納する代わりに、PDAのシードにハッシュされます。したがって、PDAは非常にコスト効率的でありながら、そのリスティングの「存在証明」として機能します。

- Auction Houseはまた、別のPDA:
programAsSignerPDAをデリゲートとして割り当てます。デリゲートはSolana SPL-tokenプログラムの機能であり、こちらで詳しく説明されています。委任により、Auction Houseは後で販売が行われたときにトークンアカウントからアセットを引き出すことができます。このように、アセットはエスクローする必要がなく、販売が行われるまでユーザーのウォレットに留まることができます。

入札
リスティングの場合と同様に、ユーザーがビッドを配置すると、Auction Houseは購入注文を作成します。つまり、ビッドを表すBuyerTradeState PDAを作成します。ビッド額(ネイティブまたはSPLトークン)は、マーケットプレイスによって手動でBuyerEscrowAccount PDAに転送する必要があり、販売が行われるまでこの額を保持します。
例:
- AliceはアセットAを5 SOLでリストします。そうすることで、Auction Houseはビッドを表す
SellerTradeStatePDAを作成します。Auction Houseはまた、programAsSignerPDAをデリゲートとして割り当て、販売が行われたときにAliceのウォレットからアセットを引き出す権限を与えます。- BobはアセットAに5 SOLのビッドを配置します。そうすることで、マーケットプレイスはBobのウォレットから5 SOLを
BuyerEscrowAccountPDAに引き出します。この額は販売が行われるまでここに留まります。
販売の実行
特定のアセットに対してリスティングと少なくとも1つのビッドがある場合、executeSale命令を呼び出すことで取引を完了できます。
executeSale命令はパーミッションレスクランクです:つまり、手数料や報酬なしで誰でも実行できます。executeSale命令の実行時に、2つのことが起こります:
- Auction Houseは
BuyerEscrowAccountに保存されているビッド額を引き出し、この額をリスト者に転送します(Auction House手数料を差し引いて)。 - Auction Houseがデリゲートとして割り当てた
programAsSignerPDAは、リスト者のウォレット(より具体的には、リスト者のウォレット内のトークンアカウント)からアセットを引き出し、アセットを入札者のウォレットに転送し、取引を完了します。
executeSale命令がどのように機能するかがわかったので、executeSale命令がさまざまな方法で実行される3つの取引シナリオについて説明しましょう:
- リスト価格での「購入」: これは、ユーザーがリストされたアセットに対して、リストされた金額自体でビッドを配置する場合です。このような場合、
bidとexecuteSale命令が同じトランザクションで実行されるため、入札者は事実上アセットを「購入」します。
例:
- AliceはアセットAを5 SOLでリストします。これにより、アセットAの売却注文が作成されます。
- Bobはリスティングに気づき、アセットAに5 SOLのビッドを配置します。これにより、アセットAの購入注文が作成されます。
- これにより、マーケットプレイスはアセットにビッドを配置し、同じトランザクションで販売を実行できるようになり、実際にはBobがアセットAを「購入」できるようになります。
- ビッド価格での「販売」: これは、リストされていないアセットに興味を持ったユーザーがビッドを配置する場合です。アセット所有者がビッド額でアセットをリストすると、
listとexecuteSale命令が同じ命令で実行されるため、リスト者は事実上要求された価格でアセットを「販売」します。
例:
- Bobは、リストされていないアセットAに5 SOLのビッドを配置します。これにより、アセットAの購入注文が作成されます。
- Aliceはビッドに気づき、アセットAを5 SOLでリストします。これにより、アセットAの売却注文が作成されます。
- これにより、マーケットプレイスはアセットをリストし、同じトランザクションで販売を実行できるようになり、実際にはAliceがアセットAを「販売」できるようになります。
- リスト者がビッドに同意: これは、特定のアセットに対して購入注文と売却注文が存在した後、
executeSale命令が独立して実行される場合です。
例:
- AliceはアセットAを5 SOLでリストします。これにより、アセットAの売却注文が作成されます。
- BobはAliceのリスティングを知らずに、アセットAに5 SOLのビッドを配置します。これにより、アセットAの購入注文が作成されます。
- Aliceは一致するビッドに気づき、販売を実行します。
代替可能なアセットのオークション
これまで、Auction Houseアカウントを使用してアセットを交換することについて話してきましたが、どのタイプのアセットをこの方法で交換できるかについては掘り下げていません。Auction Houseでリストできる最も人気のあるアセットは、非代替性トークン(NFT)です。
ただし、これらがAuction Houseプログラムから恩恵を受けることができる唯一のアセットではありません。実際、アセットはミントアカウントにメタデータアカウントが添付されている限り、任意のSPLトークンにすることができます。SPLトークンとメタデータアカウントについて詳しく知りたい場合は、Token Metadataプログラムの概要で詳細を読むことができます。
カスタムSPLトークンを使用してアセットを購入
上記の例では、Auction Houseプログラムがどのように機能するかを説明するために、交換通貨としてSOLを使用しました。しかし、SOLはアセットを交換するために設定できる唯一の通貨ではありません。Auction Houseプログラムにより、マーケットプレイスは任意のSPL-tokenを通貨として機能するように設定できます。
これは、Auction HouseアカウントのtreasuryMintパラメータを、お好みのSPL-tokenのミントアカウントに設定することで実現できます。
カスタムオーダーマッチング
トレードステートについて説明したとき、トレードステート図に示されていた3番目のトレードステートがありました:FreeSellerTradeState。このトレードステートの有用性は何でしょうか?
Auction Houseプログラムの紹介中に、Auction Houseがマーケットプレイスでアセットの交換方法に独自のカスタムロジックを提供するために使用できる方法について簡単に説明しました。ここでFreeSellerTradeStateが登場します。
購入者が意図的にアセットを0 SOL / SPL-tokenの価格でリストすると、FreeSellerTradeStateが生成されます。その後、Auction Houseは販売価格を変更して、0より大きい一致するビッドと一致させることができます。これにより、Auction Houseは複雑なオーダーマッチングを行い、出品者に最適な価格を見つけることができ、マーケットプレイスはこのオーダーマッチングを行うための独自のカスタムロジックを作成できます。
オークショニア
これまで見てきたすべてのオークションには共通点が1つあります。それらはダブルオークションと呼ばれるものです。つまり、購入者と出品者が共通の基盤を見つけるまで入札とリストを行う、時間制限のないオークションです。 ただし、Solanaエコシステムで人気を博している英国式オークションやオランダ式オークションなど、他の形式のオークションがいくつかあります。 Auction Houseの実装は、即時販売を念頭に置いて意図的に設計されており、他のオークションタイプはすぐには提供していません。
オークショニアは、ユーザーが作成したカスタマイズされた契約タイプで、Auction Houseの組み合わせパターンを使用して個別のAuction Houseアカウントを制御します。
Auction Houseでオークショニアインスタンスを有効にするには、最初に明示的に委任する必要があります。このオークショニアインスタンスは、ほとんどのAuction House命令をインターセプトして、独自のカスタムロジックを注入できるようになります。Metaplexは、タイムドオークションのようないくつかのオークショニア実装も提供しています。これについては、このドキュメントの後のページで詳しく説明します。

次のステップ
このページでは、Auction Houseプロトコルの基本とそれが持つ力について説明しました。Auction Houseができることはまだまだたくさんあります。
まず、このプログラムの使用を開始するために使用できるさまざまなライブラリをリストします:
Auction Houseの設定と、Auction Houseインスタンスの管理方法について詳しく掘り下げます:
Auction Houseの基本を理解したら、Auction House対応マーケットプレイスでアセットを取引する方法を学び始めることができます:
また、Auction Houseでのリスティング、ビッド、販売を追跡する方法と、それらを取得する方法についても調査します:
