科普|NFTの鋳造および購入プロセスの技術詳細、科学者はどのようにNFTを購入しているのか?
著者:@iamcatcher
この記事は、最近の学びやグループメンバーとのディスカッションを基にまとめたもので、記録として残します。最後に、NFT業界の現状についての自分なりの考察も含まれています。ブロックチェーンやイーサリアムプログラミングに初めて触れると、間違いが避けられないこともありますので、皆さんの指摘や交流を歓迎します。
NFT 購入プロセス
簡単に言うと、購入プロセスはあなたのウォレットとNFTコントラクトとのインタラクションです。あなたのウォレットから0.176ETHをコントラクトに送金し、コントラクトのmintメソッドを呼び出すことで、2つのNFTトークンが生成され、トークンはあなたのウォレットに移動します。これであなたはこのNFTを取得します。
NFTコントラクトの内容については、以下の記事を参考にしてください:NFTとOpenSea取引の背後にある技術共有---Mirror
NFT 購入プロセスの詳細
プロジェクトの公式ウェブサイトでmintボタンをクリックし、ブラウザからイーサネットネットワークへのエンドツーエンドのインタラクションプロセスを詳細に開示します:
NFT 購入プロセス
1、Mintボタンをクリック
皆さんはプロジェクトのウェブサイトにログインし、Chromeで自分のウォレットを接続し、mintボタンをクリックします。ウェブページ上のJavaScriptコードは、プロジェクトのmint価格やコントラクトアドレスに基づいてraw transactionデータを生成します。主に以下のいくつかの重要なフィールドが含まれています。
2、TX署名
ウェブページのコードはMetamaskとインタラクションし、取引を確認するためのウィンドウがポップアップします。確認をクリックすると、Metamaskはあなたのウォレットの秘密鍵を使用して署名し、この取引があなた自身によって承認されたものであることを確認します。その後、イーサリアムネットワークが検証を行います。
3、TXをノードに送信して検証
取引TXはMetamaskからMetamaskのイーサリアムノード(デフォルト設定)に送信され、ノードはTXを検証し、取引が偽造されないことを確認します。
4、TXをイーサリアムネットワークにブロードキャスト
取引TXはイーサリアムネットワークの隣接ノードに送信され、その後、互いに隣接接点にブロードキャストされます。この時、あなたの取引はetherscan.ioで確認でき、状態はpendingです。
5、マイナーのノードがTXを受信
マイナーのノードは、同期されたTXをTxpool/Mempoolと呼ばれる場所に置きます。この場所は多くの事柄の鍵となるため、詳しく説明します:
Txpoolのコードフロー(イーサリアムのソースコード分析のtxpoolの図を借用)
Txpoolのデータソースは主に以下から来ます:
ローカル提出、つまり第三者アプリケーションがローカルイーサリアムノードのRPCサービスを呼び出して提出した取引;
リモート同期、これはブロードキャスト同期の形式で、他のイーサリアムノードの取引データをローカルノードに同期します。
TxpoolにはQueueとPendingの2つのキューが分かれており、まず新しく受信したTXはルールに基づいてQueueに置かれ、その後Pendingキューに追加されてマイニングに参加します。
主なルールは以下の通りです:
1)Gaspriceが高いTXを優先処理
2)ローカルTXを優先処理し、リモート同期は後回し
3)各ノードは最低Gaspriceを設定し、この値を下回るリモートTXは破棄されます
PendingのTXは、Minerモジュールによって取得され、検証され、マイニングに使用されます;マイニングが成功するとブロックに書き込まれ、ブロードキャストされます。Minerが取引を取得するのはコピーであり、TxpoolのTXは減少しません。TXがチェーンに書き込まれた後にのみTxpoolから削除されます。
Gasが低すぎるTXは、Txpoolで処理されずに留まることになります。処理されるためにはGasを上げる必要があります。
詳細なコード分析については、死磕イーサリアムソースコード分析のtxpoolを参照してください。
GasWar:人気の取引が発生した際、皆が自分のTXを優先的に処理してもらうためにGas費を上げるシーン。
6、マイナーがTXをパッケージ化
マイナーはTXを選択した後、マイニングを開始し、ブロックのソリューションを見つけた後、イーサリアムネットワークにブロードキャストします。
7、ブロックが検証される
他のマイナーノードによって検証された後、そのブロックは正式にチェーンに追加され、私たちのTX結果はetherscan.ioで確認できます。
8、TX状態の同期
関連する状態がローカルに返され、Metamaskで確認できます。
参考文献:
Life Cycle of an Ethereum Transaction
Transaction lifecycle on the Ethereum blockchain
The Influence Factors on Ethereum Transaction Fees
コントラクトはどのように実行されるか
簡単に言うと、私たちが送信した取引はMessageオブジェクトに変換されEVMに渡され、EVMはMessageに基づいてContractオブジェクトを生成し、後続の実行のために使用します。私たちが転送したDataはコントラクトのinputとしてmint関数を呼び出します。
EVMの紹介については、以下の文書を参照してください:
easy-evm
learnblockchain.cn
NFT プレセールと公開販売
プレセールは特定のユーザーのみが購入できるもので、公開販売は誰でも購入できるものです。
ここで主に2つの技術的な質問に答える必要があります:
1、特定のウォレットのみがmintできるように制限するには?
2、プレセールと公開販売の間でどのように状態が切り替わるのか?
ホワイトリストメカニズム
ホワイトリストは現在、一般的にメルクルツリーを使用して実現されています。簡単に言うと、すべてのホワイトリストウォレットアドレスをメルクルツリーの葉ノードとして使用し、ルートハッシュを生成します。コントラクト内ではルートハッシュ値を保存するだけで、mint関数を呼び出す際にウェブページのJSコードがウォレットアドレスに基づいてproof(アドレスの上位親ノードのハッシュ)を生成し、コントラクトはそのアドレスがホワイトリストに属するかどうかを検証できます。
C01のコントラクトを例にとると:
0x6fd053bff10512d743fa36c859e49351a4920df6
プレセールと公開販売の際にSetRootを通じてハッシュを更新します(C01の2回の販売はホワイトリスト方式を採用し、公開販売は資金検証の抽選方式を採用)。
詳細な原理とコードについては、以下の記事を参照してください:Using Merkle Trees for NFT Whitelists
販売状態の切り替え
一般的に使用される2つの方法:
1)コントラクト内で時間点を判断する、例えば2022-01-01 18:00 UTCから公開販売を開始する。
2)状態を判断し、コントラクト内で状態変数を設定する、例えばXRCのコントラクトを例に、Status.PublicSale状態を判断し、これはコントラクト内のSetStatusを呼び出して設定します。
科学者がNFTを購入する方法
科学者はプログラムを使用してNFTを購入し、さまざまな手段を使って自分の取引TXが他の人よりも先にマイナーによってパッケージ化され、売り切れる前にNFTをmintします。同時に、科学者は完璧を追求するため、最も完璧な結果は自分のTXが公開販売状態の最初のブロックに現れること、つまりBlock0を奪うことです。
2つのシーンのBlock0は以下の図の通りです。同時にBlock0を達成することで、後続の皆の購入によって発生するGaswarを回避し、購入コストを削減できます。しかし、現在はますます競争が激化しており、Block0でもGaswarが発生することがあります。例えば、XRCの公開販売では200個未満で、Block0に入る科学者のTX数が200を超え、Gasが低すぎて実行が遅れ、購入できなかったケースもあります。
2つのシーンでのBlock0
科学者が使用する手段は大きく以下の3点にまとめられます:
1、情報取得の遅延を低くする
金融の量的取引に似て、ファンドは自分のサーバーと取引所との通信の遅延を低くしたいと考えています。ブロックチェーンも同様です。例えばCEXでは、皆が近くの中央集権取引所のサーバーに接続します。NFTのmintやDeFiの取引はイーサリアムネットワーク内で発生し、皆がより速いイーサリアムノードや大規模マイニングプールのネットワークに接続し、Txpoolのpending TXを迅速に監視し、必要な情報を取得してプログラムをタイムリーに実行します。
2、取引の経路を短くする
1)上記のTXインタラクションプロセスを直接見た場合、科学者の選択は確実にプログラムを通じてNFTのコントラクトと直接インタラクションすることです。
2)チェーン上に自分のコントラクトをデプロイし、プライベートコントラクトとNFTコントラクトとインタラクションします。プライベートコントラクトは外部TXによってトリガーされる必要がありますが、コントラクトはバッチ購入が可能で、特にmint数に制限がないNFTに適しています。(現在、ますます多くのNFTが呼び出し元をコントラクトに制限しています)
3、取引をバッチ提出する
上記で述べたプライベートコントラクトによるmintの他に、プロジェクトが各アドレスのmint数を制限している場合、Flashbotsを通じて複数のTXをまとめて提出することができます。
コントラクトmint
YOKAIの公開販売後の一例として、科学者はプライベートコントラクトを利用して、合計750個をmintしました。詳細はTXを参照してください。
YOKAIコントラクトコードでは、1つのアドレスがmintできる数に制限はなく、1回のTXで2個のみmintできるように制限されています。したがって、科学者が全てを購入しました。
神器Flashbots
Flashbotsの詳細については、偉総のこの素晴らしい紹介と公式文書を参照してください:Flashbots:ETHのないウォレットから資産を取り出す方法またはコントラクトとインタラクションする---Mirror
Flashbotsを使用する利点は以下の通りです:
1)TXをバッチでまとめて提出でき、TXのパッケージ化の順序を自分で制御できます。
2)Flashbotsが提出したTXはTxpoolに現れず、チェーン上に現れた後に皆に見られます。これによりTXの秘匿性が提供されるため、多くのDeFi量的取引プラットフォームは自分たちがFlashbotsに接続していると宣伝しています。(個人的には、これは一時的なもので、Flashbotsが広く使用されるにつれて、Flashbotsが提出したTXも監視されるようになると思います)
3)Flashbotsを通じてmintが失敗した場合、Gas費は請求されません。
Flashbotsを使用した冷兔XRCの公売を例にとります:
易老板は公売では科学者が公売できないと言いましたが、結果的にblock=14020984のBlock0で戦闘が解決され、全ての科学者が購入しました。
プロジェクト側が送信したsetStatus TXは14020982でTXpoolにリスニングされました。
その後、科学者はsetStatus TXと自分のmint TXを一緒にFlashbotsでパッケージ化し、マイナーに送信しました。ここで科学者はsetStatus TXを最初に配置し、Gasが低くても、自分のmint TXを後ろに配置しました。最終的にTXは984ブロックでチェーンに入ります。
Flashbotsのパッケージ化クエリリンク
ブロックを焼く
簡単に言うと、TXを絶えず発信し続けることで、発信が多ければ多いほどmint成功の確率が高くなり、運が良ければBlock0に入ることもあります。この方法の問題は、Gas費を非常に消費するため、金持ちの気まぐれなプレイスタイルに属します。ブロックを焼く際には、開始時間、各TXの間隔、送信回数、Gas費用などを考慮する必要があります。これは通常、プロジェクトの時間、pending TXの監視、チェーン上のブロック生成速度などに基づいて考慮されます。
冷兔の公売での購入時には、多くの科学者が焼きブロックの方法を使用して成功しました。このウォレットを調査できます。
科学者を防ぐ方法
科学者の購入が現れるにつれて、ますます多くのプロジェクトが科学者の購入を防ぐためにさまざまな方法を使用し始めています。これらの方法の本質は、科学者が直接コントラクトのmintを呼び出すことを制限し、プロジェクト側が選定した人だけがmintできるようにすることです。
1、ホワイトリスト方式でのみ販売
プロジェクトの販売はすべてホワイトリストメカニズムを使用し、プロジェクト側がルールを通じて本当にプロジェクトを評価している人を選別します。
しかし、ルールがあれば対策もあります。レベル+招待人数が増えると、チャットボットやスタジオが招待者を売ることが出現します;創作アートでは、淘宝で人を探して代わりに描いてもらうことが出現します;現在は限られた時間でDiscordに招待することが発展し、皆が謎を解いたりタスクをこなしたりするなどのさまざまなプレイスタイルが出現しています。
プロジェクト側は白リストのスタジオとの知恵比べに苦しんでおり、普通のNFTプレイヤーもさまざまなルールに振り回されています。
2、公売で資金検証抽選方式を採用
NFTの公売時に、事前にウォレットが一定額のETHを持っていることを検証し、その後システムで抽選を行い当選者リストを出します。しかし、多くのプロジェクト側は手間を省くために1:1の抽選システムを作りたがらず、最終的に公売リストが大幅に超過し、結局は皆が購入することになります。
3、サーバー側で署名検証を行う
最近人気のHAPEのやり方に似て、公開のNFTコントラクトはプライベートなクローズドソースのコントラクトのみがmintできるように制限されています。クローズドコントラクトの後、プロジェクト側のバックエンドサーバーとインタラクションします。この方法は技術的にはWeb2の中央集権的な考え方とWeb3の非中央集権的な理念が少し矛盾しているように思えます。
NFTの未来の発展
ホワイトリストを通じてNFTを取得した人々は、現在のNFT業界が非常に健康的ではないと感じていますが、NFT業界はまだ初期段階にあり、問題があれば市場が必ず解決策を見出す人が出てくるでしょう。
NFTの販売は公開かつ公正で透明である必要があります。個人的には、解決策の考え方は現実生活で皆がよく知っている2つのシーンを参考にできると思います:
1、新株の発行、取引所がアカウントの取引時間、資金検証などのハードルを設け、その後抽選で販売します。
2、京東の茅台の購入、京東プラットフォームがアカウント認証、購入の公平性を保証するなどを行います。
これらの2つのシーンは、プラットフォームの権威性を通じて公平性を保証していますが、Web3ではブロックチェーンコントラクトに基づく新しいソリューションが類似の機能を実現することになるでしょう。現在のDeFi市場のさまざまな取引プロトコルのように、近い将来、NFT販売プロトコルが登場し、公正で公証された透明な販売モデルを提供する可能性があります。具体的にどうするかはまだ学び考えているところで、皆さんの指導や議論を歓迎します。
未来は、NFTプロジェクト側がNFT発射プラットフォームに接続し、プロジェクト側はアート制作やロードマップの進化に集中し、投資家はプロジェクトの内容や展望に集中し、発射プラットフォームが現在のNFT販売のさまざまな問題を技術的に解決することになるでしょう。