2 月 2 日、NFT の断片化に焦点を当てたプロジェクトである Pandora が開始されました。そのコア機能はERC404であり、ERC20とERC721を組み合わせたトークン標準であり、ネイティブ流動性とNFT断片化の特徴を備えています。新しく開始されたプロトコルとして、ERC404 はコミュニティでの広範な議論を引き起こしました。最初のプロジェクトである Pandora の 1 日の取引高も 5,000 万ドルを超えています。 ERC404 または同様のトークン標準に基づいたさらに多くのプロジェクトを立ち上げる準備ができています。
ERC404は、イーサリアム改善提案(EIP)やイーサリアムコメント要求(ERC)の議論やレビューを行わずに、実験のためにコミュニティに直接オープンソース化されているため、プロトコル自体には改善が必要な領域が多くあります。 Beosin セキュリティ チームは、暗号通貨ユーザーが ERC404 を理解できるように、ERC404 の設計メカニズムとコントラクト コードの詳細な分析を実施します。
ERC404とは何ですか?
ERC404 は、2 つのトークン標準、ERC20 と ERC721 を「融合」する新しい実験プロトコルです。簡単に言うと、ERC404 により、NFT を ERC20 トークンのように分割して取引できるようになります。 ERC404 トークンは、ERC20 トークンと NFT の両方です。つまり、1 つの ERC404 トークンは、1 つの ERC20 トークンまたは 1 つの NFT と見なされます。
ユーザーがERC404トークンを購入すると、ユーザーのウォレットは自動的にReplicant NFTを受け取ります。ユーザーがトークンを販売すると、対応する NFT は自動的に破棄されます。
ERC404の最初のプロジェクトであるPandoraを例に挙げてみましょう。このプロジェクトのERC404トークンはPANDORAで、対応するレプリカントNFTはPandora Replicantsです。PANDORAトークンの総供給量は10,000なので、対応するPandora NFTの総供給量も10,000です。
ユーザーが Uniswap で PANDORA トークンを購入すると、1 つの PANDORA トークンを保有することは、同時に 1 つの Pandora NFT を保有することと同等になります。その後、PANDORA トークンを売却するか、OpenSea などの NFT 取引市場で Pandora NFT を売却するかを選択できます。また、ユーザーが最初に Pandora NFT を購入してから、DEX で PANDORA トークンを売却することもできます。

ERC404にはERC20トークンとNFTの2つの特徴が含まれるため、以下はERC404の設計上の特徴であり、ユーザーが注意を払う必要があるものでもあります。
1.
ERC404 トークンが ERC20 トークンとして取引される場合、小数点が関与して考慮されます。 ERC404 では、トークンの数が対応する NFT の数に切り捨てられると規定しています。たとえば、ユーザーが 2.9 PANDORA トークンを保有している場合、NFT の観点からは 2 Pandora NFT のみを保有しています。
2.
ERC404 v1 では、ERC404 トークンが ERC20 トークンとして取引される場合、対応する NFT は破棄され、取引中に新しい NFT が生成されます。このようにして、新しいNFTが生成されるたびに、そのID番号が元のNFTの最も高いID番号から追加されます。 ERC404 v2 はこの書き込みメカニズムを変更します。これについては後で説明します。 Pandora NFT には希少性が設定されているため、ユーザーは Pandora トークンを取引して、裁定取引のために Pandora NFT の希少性を高め、元の NFT をより希少な Pandora NFT に置き換えます。
3.
ERC404 v1の場合、ユーザーが2.9のPANDORAトークンを保有し、1つのPANDORAトークンを販売した場合、トークンには希少性はありませんが、対応するNFTには異なる希少性があります。 1 つのトークンを販売する場合、ユーザーが最後に受け取った Pandora NFT が最初に破棄されるため、ユーザーは PANDORA トークンに対応する NFT の希少性に注意する必要があります。 1 つのアドレスには 1 つの Pandora NFT に対応する 1 つの PANDORA トークンのみが保存されるか、ユーザーが Pandora NFT を直接取引できることが推奨されます。
ERC404 コード分析
ERC404 v1 は、Coinbase の元ソフトウェア エンジニアである Acme によって Github でリリースされ、改善の余地が数多くあります。コミュニティの助けを借りて、ERC404 チームは現在 ERC404 の構築と改善を行っており、2 月 15 日に ERC404 v2 を発売しました。ERC404 v2 はガス消費量を大幅に削減し、ERC404 の売買メカニズムを最適化します。ケンス。最新のコード リポジトリは https://github.com/Pandora-Labs-Org/erc404 です。
今回は、Beosin VaaS ツールを使用して、ERC404 v2 スマート コントラクトをスキャンし、ERC404 v2 コードを分析し、Beosin のセキュリティ専門家とともに ERC404 プロジェクトのセキュリティに関する提案を行います。

ERC404 v2 の契約には、主に ERC404.sol、ERC721Receiver.sol、DoubleEndedQueue.sol が含まれます。 DoubleEndedQueueは、トークンの取引とNFTの書き込みのロジックを変更するためにERC404チームによって導入された新しいデータ構造です。
ERC404 v2 は、v1 と同様、ERC721 と ERC20 のハイブリッド実装であり、ERC721 トークンを ERC20 トークンとして表現できるようになります。その中で、各 ERC721 トークンは、固定数の ERC20 トークン(単位パラメータによって決定される)に対応します。 ERC721 トークンを転送する場合、対応する ERC20 トークンはユニット単位で転送されます。
v1と比較して、ERC404 v2には次の改善点があります。
1.
EIP-2612 をサポート
ERC404 v2 は EIP-2612 をサポートし、署名付きメッセージ(権限)を介したガスレス トランザクションを可能にします。 「DOMAIN_SEPARATOR」はコンストラクターで計算され、チェーン ID が変更された場合に再計算できるため、コントラクトの互換性が向上します。
コンストラクター(文字列メモリ名_, 文字列メモリ記号_, uint8 小数_) {
名前 = 名前_;
シンボル = シンボル_;
if (小数点_ < 18) {
revert DecimalsTooLow();
}
小数 = 小数_;
単位 = 10 ** 小数点以下;
// EIP-2612 初期化
INITIAL_CHAIN_ID = block.chainid;
INITIAL_DOMAIN_SEPARATOR = _computeDomainSeparator();
}
2.
安全な転送チェック
コントラクト内のsafeTransferFrom関数は、ERC721標準のonERC721Received()に従い、受信者をチェックして、受信者がERC721トークンを処理できることを確認します(たとえば、受信者はコントラクトです)。
関数safeTransferFrom(
住所 from_、
アドレスへ_、
uint256 id_、
バイトメモリデータ_
) パブリック バーチャル {
if (id_ > minted || id == 0) {
revert InvalidId();
}
transferFrom(from_, to_, id_);
もし (
to_.code.length != 0 &&
ERC721Receiver(to_).onERC721Received(msg.sender, from_, id_, data_) !=
ERC721Receiver.onERC721Received.selector
) {
revert UnsafeRecipient();
}
}
3. ミントおよび書き込みロジックの改善
v1とは異なり、ERC404 v2トークンを取引する場合、対応するNFTは破棄されません。代わりに、すべてのNFT IDは再利用のために両端キューに保存されます。このように、ERC404に対応するNFTは、一般的なERC721トークンと同じです。コインと同じです。このアプローチは、ガス消費を削減するだけでなく、ERC404の転送ロジックを簡素化します。

ERC404 v2 の改善により、ERC404 はよりスケーラブルで持続可能になりましたが、注意すべきセキュリティ リスクがまだいくつかあります。
1.
ホワイトリスト機能
ERC404 により、特定のホワイトリスト アドレスが ERC721 トークンを内部的に転送できるようになり、特定の契約またはアドレスのガス使用量を最適化するために使用できます。ただし、これにより集中化の問題や悪用の可能性が生じる可能性もあります。
要約契約書 ERC404 は IERC404 {
……
マッピング(アドレス => ブール) public erc721TransferExempt;
......
// ERC-721 の免除を処理します。
関数_transferERC20WithERC721(
//内部取引によりガスを節約します
}
}
2.
伝達関数の問題
transferFrom 関数は、ERC20 と ERC721 の転送を処理し、valueOrId_ パラメータに基づいて 2 つのトークン標準のロジックを区別します。開発者またはユーザーは、この関数を呼び出すときにエラーを起こす可能性があります。これは、この関数には、転送の値が鋳造カウントの値よりも大きい場合、転送は ERC20 トークンの転送であるという推定があるためです。
関数 transferFrom(
アドレス from_、
アドレスへ_、
uint256 値または ID_
) public virtual return (bool) {
……
if (valueOrId_ <= _minted) {
// 目的は ERC-721 トークン (id) として転送することです。
uint256 id = 値または ID_;
……
}
3.
ガスの最適化
ERC404 v2 では、v1 と比較してユーザー インタラクションに必要なガス料金が大幅に削減されましたが、改善の余地はまだ多くあります。たとえば、ERC404 v2 コントラクトでは、エラー メッセージを含む require ステートメントの代わりにカスタム エラー revert NotFound() を使用しており、これによりガス消費量が増加します。
4.
緊急停止機能がない
新しく生まれたプロトコルである ERC404 には、無視できない潜在的な契約上の脆弱性がある可能性があります。したがって、チームが契約を策定する際には、緊急一時停止機能を契約に設定することを検討し、リスクが発生した場合に迅速に対応して脆弱性を修正するためのリスク対応計画を策定する必要があります。
以前、Beosin は、ERC404 に基づく革新的なプロジェクトである Avatar の監査を完了する際に、プロジェクト チームに上記のセキュリティ提案を述べました。これにより、Avatar チームはスマート コントラクトのセキュリティを改善し、Avatar プロジェクトの安全な運用を確保できました。この監査には、コードに論理的な脆弱性がないことを確認するためのセキュリティ専門家による正式な検証と手動監査が含まれています。

全体として、ERC404は、NFTの分割不可能性と不十分な流動性の問題を新しい観点から解決しようとしています。以前のNFT断片化プロジェクトと比較して、ネイティブトークン標準から始まり、実装がより簡単かつ効果的であり、NFT取引のための新しい方法を提供します。ただし、ERC404はトークンコントラクトの中でも比較的複雑なコントラクトです。開発者は、ERC20 と ERC721 の特性と、新しい機能を追加することで生じる可能性のあるリスクに注意を払う必要があります。セキュリティ チームは、監査中に ERC20 と ERC721 の機能間の相互作用、ならびに ERC404 契約におけるさまざまなガスの最適化と集中化のリスクの影響を慎重に調査する必要があります。
Beosin は、世界をリードするブロックチェーン セキュリティ企業です。シンガポール、韓国、日本、その他 10 か国以上にオフィスを構えています。「ブロックチェーン エコシステムの保護」を使命とする Beosin は、スマート コントラクト監査、リスク監視とアラート、KYT/AML、暗号追跡をカバーする「オールインワン」ブロックチェーン セキュリティ ソリューションを提供しています。Beosin はすでに 3,000 件以上のスマート コントラクトを監査しており、ERC404 プロジェクトからのご相談や監査を歓迎します。