Cointime

Download App
iOS & Android

コードの観点から ERC-6551 を理解する: NFT はどのようにしてウォレットになるのでしょうか?

著者:ハビエル・カルデロン編集: Cointime.com 237

序章

ブロックチェーン空間で波を起こしているユニークなデジタル資産である非代替トークン (NFT) の世界へようこそ。 NFT の台頭により、ブロックチェーン ネットワークで実現できる可能性が大幅に拡大していることがわかります。エキサイティングな開発の 1 つは、ウォレットまたはアカウントとしての NFT の概念であり、これは多くの新しいユースケースやアプリケーションを開く強力なアイデアです。

ERC-721 はイーサリアムの NFT 標準であり、コミュニティに十分に貢献してきましたが、その制限により新しい拡張機能や概念が生まれました。その 1 つは、「バインドされたトークン アカウント」の概念を提案する ERC-6551 です。このドラフトペーパーでは、ERC-721 トークンごとに独自のスマート コントラクト アカウントを作成し、既存の ERC-721 スマート コントラクトや基盤となる機能を変更することなく、NFT が資産を所有し、アプリケーションと対話できるようにするという提案が示されています。

動作原理

このガイドでは、ERC-6551提案を使用してNFTをウォレットまたはアカウントに変換するプロセスについて説明します。まず、ERC-6551 の背後にある基本原理の概要を説明します。ERC-6551 は、結合されたトークン アカウントを作成するための標準インターフェイスと権限のないレジストリを提供します。次に、レジストリの createAccount とアカウント、IERC6551Account インターフェイスなど、特定の関数の実装について詳しく説明しました。

次に、Solidity に IERC6551Account を実装し、NFT をウォレットとして使用するスマート コントラクトを作成する方法を検討しました。このコントラクトには、ERC-20 トークンを受信、保持、送信する機能があり、基本的に各 NFT の個別のウォレットとして機能します。この機能を実装する単純化されたスマート コントラクトの例も共有しました。これは良い出発点となるはずです。

共有しているコードは説明のみを目的としており、この機能を運用環境に実装する予定がある場合は、コードを監査して徹底的にテストすることが重要であることに留意してください。

NFT をウォレットやアカウントに変える機能は、ブロックチェーンの世界に新たな可能性をもたらします。これにより、NFT 用の独自のデジタル ID が作成され、チェーン上の資産を所有および管理できます。ゲーム資産を蓄積するためにアバターをデジタル化する場合でも、ロイヤルティを保持するためにアートワークをデジタル化する場合でも、インタラクションを記録するためにロイヤルティ カードをデジタル化する場合でも、潜在的なアプリケーション シナリオは非常に興味深いものです。

埋め込む

ブロックチェーン技術は、資産の所有権と取引を理解する方法に革命をもたらしました。その 1 つは、ブロックチェーン上で表現され、多くの注目を集めている独自の資産である非代替トークン (NFT) です。ただし、これらの資産の個性にもかかわらず、従来の NFT には重要な制限があります。つまり、独立して資産を所有したり、アプリケーションと対話したりすることができません。したがって、ERC-6551は、NFTに固有のアカウントを与えることでNFTをウォレットまたはアカウントに変える新しい方法です。この記事では、ERC-6551 の実装方法について詳しく説明し、ERC-6551 がどのように NFT をより柔軟にするかを示し、コード スニペットとベスト プラクティスを提供します。

ERC-6551 を理解する

ERC-6551 を理解する

イーサリアム改善提案 (EIP) ERC-6551 は、ERC-721 非代替トークン (NFT) の機能を拡張するために最近導入された標準です。各 NFT に一意の決定論的なスマート コントラクト アカウントを割り当て、既存の ERC-721 スマート コントラクトやインフラストラクチャに変更を加えることなく、NFT が資産を所有し、アプリケーションと対話できるようにします。

ERC-6551 システムは、トークン バインド アカウントを展開するための権限のないレジストリと、トークン バインド アカウントを実装するための標準インターフェイスという 2 つの主要コンポーネントで構成されます。レジストリは、結合された各トークン アカウントを ERC-1167 最小限のプロキシ コントラクトとして展開し、不変の定数データをバイトコードに追加することによって実現されます。各アカウントのアドレスは決定的であり、実装アドレス、トークン コントラクト アドレス、トークン ID、EIP-155 チェーン ID、およびオプションのソルト値の一意の組み合わせから導出されます。

ERC-6551の実装方法

ERC-6551 は、パーミッションレス、不変、所有者のないレジストリ契約を通じて実装されます。レジストリは、アカウント バインド トークンの使用を希望するプロジェクトの単一のエントリ ポイントとして機能します。レジストリ コントラクトには 2 つの機能があります。

1. createAccount : 実装アドレスに従って、ERC-721 トークンのトークン アカウントを展開してバインドします。

2. account : 実装アドレスに基づいて ERC-721 トークン バインド トークンのアカウント アドレスを計算する読み取り専用関数。

以下はレジストリ コントラクトのインターフェイスです。

アカウント作成機能を使用して、新しい結合トークン アカウントを展開できます。アカウントがすでに作成されている場合は、create2 関数を呼び出さずにアカウント アドレスを返します。 initData が null でなく、アカウントが作成されていない場合は、作成後に指定された initData が呼び出されます。 account 関数は、計算されたバインドされたトークンのアカウント アドレスを返します。

保証されたトークンアカウントを作成する

スマート コントラクトをさらに開発するには、IERC6551Account によって実装された機能を拡張することから始めます。

まず、NFT によって受信される可能性のある ERC-20 トークンを処理する機能を追加しましょう。 NFT が別のアドレスに特定の ERC-20 トークンの一定量の使用を承認できるようにする関数を追加します。

インターフェイス IERC20 {

関数承認(アドレス消費者、uint256 金額) 外部戻り値 (ブール値);

}

契約 MyERC6551Account は IERC6551Account {

// 他の契約コード...

function acceptERC20(アドレストークンアドレス、アドレス消費者、uint256金額) 外部のみOwner {

IERC20 トークン = IERC20(トークンアドレス);

token.approve(支出者, 金額);

}

IERC20 トークン = IERC20(トークンアドレス);

token.approve(支出者, 金額);

}

}

ここで、onlyOwner は、NFT の所有者のみが関数を呼び出せるようにする修飾子です。 IERC20 は、ERC-20 トークンと対話するための簡素化されたインターフェイスです。

次に、NFT が融資プラットフォームなどの仮想の DeFi プロトコルと対話する機能を追加しましょう。わかりやすくするために、NFT が一定量の ERC-20 トークンをプラットフォームに入金できるようにする関数を追加します。

インターフェイス ILendingPlatform {

関数デポジット(アドレストークンアドレス、uint256 金額)外部;

}

契約 MyERC6551Account は IERC6551Account {

// 他の契約コード...

function destroyToLendingPlatform(address platformAddress, address tokenAddress, uint256 amount) externalonlyOwner {

// 指定された量のトークンをこのコントラクトに転送します

IERC20 トークン = IERC20(トークンアドレス);

require(token.transferFrom(msg.sender, address(this), amount), "トークン転送に失敗しました");

// 融資プラットフォームがトークンを使用することを承認する

token.approve(プラットフォームアドレス, 金額);

// トークンを融資プラットフォームに預けます

ILendingPlatform プラットフォーム = ILendingPlatform(プラットフォームアドレス);

platform.deposit(tokenAddress, amount);

}

}

このコード スニペットでは、ILendingPlatform は、仮想の融資プラットフォームと対話するための簡素化されたインターフェイスです。まず指定された量のトークンを NFT 所有者から契約に転送し、次に融資プラットフォームがそれらのトークンを使用することを承認し、最後にトークンを融資プラットフォームに預けます。

これらは、ERC-6551 を使用して実現できることのほんの一部の例です。プロジェクトの特定のニーズに応じて、可能性は事実上無限です。新しい機能をメインネットにデプロイする前に、必ず徹底的にテストして、期待どおりに機能し、セキュリティ ホールがないことを確認してください。

NFTをウォレットに変換

NFT がウォレットまたはアカウントとして機能するスマート コントラクトを作成するには、まず ERC-721 コントラクトをデプロイする必要があります。この契約は、NFT の鋳造と転送を処理します。

次に、ERC-721 コントラクトと対話する IERC6551Account コントラクトを実装します。このコントラクトには、ERC-20 トークンを受信、保持、送信する機能があり、基本的に各 NFT の個別のウォレットとして機能します。

次に、ERC-721 コントラクトと対話する IERC6551Account コントラクトを実装します。このコントラクトには、ERC-20 トークンを受信、保持、送信する機能があり、基本的に各 NFT の個別のウォレットとして機能します。

以下は IERC6551Account コントラクトの簡略化された例です。

プラグマ ソリッドティ ^0.8.0;

インポート "@openzeppelin/contracts/token/ERC721/ERC721.sol";

インポート "@openzeppelin/contracts/token/ERC20/IERC20.sol";

import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

インポート "@openzeppelin/contracts/access/Ownable.sol";

契約 NFTWallet は ERC721、ReentrancyGuard、所有可能 {

マッピング(uint256 => アドレス) private _wallets;

コンストラクタ(文字列メモリ名, 文字列メモリシンボル) ERC721(名前, シンボル) {}

function WalletOfToken(uint256 tokenId) public view returns (address) {

return _wallets[トークンID];

}

function mint(アドレス) publiconlyOwner {

uint256 newTokenId = totalSupply() + 1;

_mint(to, newTokenId);

_wallets[newTokenId] = に;

}

function transferERC20(uint256 tokenId, address token, address to, uint256 amount) public nonReentrant {

require(_wallets[tokenId] == msg.sender, "ウォレット所有者のみが転送できます");

IERC20(トークン).transferFrom(アドレス(この), 宛先, 金額);

}

function depositERC20(uint256 tokenId, address token, uint256 amount) public nonReentrant {

require(_wallets[tokenId] == msg.sender, "ウォレット所有者のみが入金できます");

IERC20(トークン).transferFrom(msg.sender, address(this), amount);

IERC20(トークン).transferFrom(msg.sender, address(this), amount);

}

function BalanceOfERC20(uint256 tokenId, address token) public view returns (uint256) {

require(_wallets[tokenId] == msg.sender || ownerOf(tokenId) == msg.sender, "ウォレットの所有者ではありません");

return IERC20(トークン).balanceOf(アドレス(この));

}

}

このコントラクトでは、各 NFT (tokenId によって識別される) はウォレット アドレス (_wallets[tokenId]) に関連付けられます。 mint 関数は、新しい NFT を生成し、そのウォレット アドレスを指定されたアドレスに設定します。 transferERC20 関数を使用すると、NFT 所有者は、NFT に関連付けられたウォレットから別のアドレスに ERC-20 トークンを転送できます。デポジットERC20機能を使用すると、NFT所有者は個人アドレスからNFTに関連付けられたウォレットにERC-20トークンを入金できます。 BalanceOfERC20 関数を使用すると、NFT 所有者は、NFT に関連付けられたウォレット内の ERC-20 トークンの残高を確認できます。

この契約はわかりやすくするために簡略化されており、ERC-6551 標準の完全な機能は含まれていないことに注意してください。このコードは完全に安全ではない、または最適化されていない可能性があるため、本番環境に導入する前に徹底的にテストおよび監査する必要があります。

最後に、これらのスマート コントラクトを実際に展開するには、ETH がガスの料金を支払う必要があることに注意してください。必要なガスの量は、契約の複雑さとイーサリアム ネットワーク上の現在のガス価格によって異なります。

ベストプラクティス

ERC-6551 を実装する場合は、セキュリティと効率を確保するためのベスト プラクティスに従うことが重要です。

1. 互換性の確保: ERC-6551 標準は、既存の ERC-721 トークンと下位互換性があるように設計されています。互換性は、既存の ERC-721 契約でテストすることによって常に確保されます。

2. セキュリティ: 他のスマート コントラクトと同様、セキュリティは最も重要です。実装が安全であり、一般的な攻撃ベクトルに対して耐性があることを確認してください。導入前にセキュリティ監査を実施することを検討してください。常に、ERC-721 トークンとそれに関連するアカウントに対する所有者の制御を優先してください。

3. ガス効率: 実装でガスが効率的に使用されていることを確認してください。イーサリアム ブロックチェーン上のすべての操作はガスを消費し、非効率な契約は不必要に高いコストにつながる可能性があることに注意してください。

4. 正しいアドレスを使用する: 結合トークン アカウントを作成するときは、必ず正しい実装アドレス、チェーン ID、トークン コントラクト アドレス、およびトークン ID を使用してください。間違ったアドレスまたは無効なアドレスを使用すると、予期しない動作が発生したり、アカウントの制御が失われたりする可能性があります。

5. ソルトを利用する: アカウント作成機能のオプションのソルトを使用すると、他のパラメーターが同じであっても、結合されたトークン アカウントごとに一意のアドレスを作成できます。この機能を使用すると、各アカウントの一意性とセキュリティが向上します。

結論は

ERC-6551 はイーサリアム エコシステムにとってエキサイティングな開発であり、ERC-721 トークンに固有のアカウントを提供することで機能を拡張します。この開発により、NFT が資産を所有し、アプリケーションと独立して対話するなど、新たな可能性が開かれます。このガイドでは、ERC-6551 とその実装の概要を説明します。ただし、他の新しいテクノロジーと同様に、契約の安全性と効率性を確保するために、ベスト プラクティスに従って慎重に使用する必要があります。

NFT
コメント

全てのコメント

Recommended for you

  • Fundstratのデジタル資産戦略責任者:現在のキムチプレミアムは約0%であり、BTCにはまだ上昇の余地があることを示している可能性がある

    ショーン氏、Fundstra デジタル資産戦略責任者ファレル氏は最新の顧客ノートで、「友人や家族」が再び仮想通貨について尋ね始めており、定量化可能な市場指標に基づくと、現在の状況は3月の上昇相場や2021年後半の景気循環のピークのようなバブルではないようだと述べた。現在の韓国市場のキムチプレミアム指標データは約0%であり、通常、市場がピークに達するとキムチプレミアムは10%以上に急騰し、韓国のトレーダーの間で過度の興奮がなくなっていることを示しています。過去 1 週間を単に性的繁栄とみなすべきではないが、ビットコインにはまだ上昇の余地があるかもしれない。

  • ソラナ・リアンチュアン氏はソラナは常にZKより速いと発言、Matter Labs CEOは反論

    Solana の共同創設者 toly 氏は Responded でネチズンへの返信で「ZK は常に Solana よりも優れています」と述べた。バリデーターではなく数学によって保護されるため高速です。つまり、(冗長性のため) 1 つまたは少数のバリデーターで十分であり、数千のノード間の合意を待つ必要がありません。」

  • マイク・フラッド米国下院議員:次期SEC議長と協力して反仮想通貨銀行政策SAB 121を撤回することを楽しみにしている

    米国下院のマイク・フラッド議員は最近、「広範な反対にもかかわらず、SAB 121は通常の行政手続法の手続きを経ていないにもかかわらず、法律として効果的に機能し続けている。フラッド議員と協力することを楽しみにしている」と述べた。ゲーリー・ゲンスラー委員長が自ら辞任するか、あるいはトランプ大統領が約束(ゲンスラー解任)を実行するかにかかわらず、新政権にはSAB 121の取り消しに向けて次期SEC委員長に協力する絶好の機会がある。ゲンスラー氏は退任する。」さらに、「今年初めに超党派で下院を通過したデジタル資産規制の枠組みに、民主党の指導者が上院が拒否したにもかかわらず、民主党議員71人が下院共和党に加わって反対したことは驚くべきことではない。それは受け入れられるが、これは仮想通貨にとって画期的な瞬間を表しており、来年1月に始まる次の議会の統一共和党政権の取り組みに影響を与える可能性がある。」

  • インドの億万長者アダニ氏、贈収賄事件での立場を説明するため米国証券取引委員会に呼び出される

    インドの億万長者ゴータム・アダニ氏とその甥のサーガル・アダニ氏は、太陽光発電契約を獲得するために2億5000万ドル以上の賄賂を支払った疑いで、米証券取引委員会(SEC)から召喚状を出され、説明を求められた。インド・プレス・トラスト(PTI)によると、インド西部の都市アーメダバードにあるアダニ一家の住居に召喚状が送達され、21日以内に返答するよう求められた。 PTIは、11月21日にニューヨーク東部地方裁判所を通じて出された通知文を引用し、アダニ一家が期限までに応答しなかった場合、彼らに対して不履行判決が下されると述べた。

  • 米国SEC: 2024会計年度には合計583件の執行措置が取られ、82億米ドルという史上最高額の財政救済が得られました。

    米国SECは最近、2024会計年度の執行努力が過去最高に達したと発表し、市場の健全性と投資家保護を維持するための取り組みを強調した。同庁は、「2024年度には合計583件の執行訴訟が提起され、82億ドルの金融救済が得られたが、これは2023年と比較してSEC史上最高額である14件の増加となった」と明らかにした。 %。 SEC のゲーリー・ゲンスラー委員長は、法執行機関の役割に感謝の意を表し、「法執行機関は事実と法に従い、どこへ行っても法違反者の責任を追及する断固とした警察組織である。今年の結果が示すように、同省は国家安全保障委員会の誠実性の促進に貢献している」と述べた。私たちの資本市場は投資家と発行者の両方に利益をもたらします。」

  • 米下院:ヘスター・パースSEC委員長が新たなSEC委員長代理に就任する可能性がある

    米国のフレンチ・ヒル下院議員は北米ブロックチェーンサミット(NABS)で、共和党のヘスター・パースSEC委員が米国証券取引委員会(SEC)の新しい委員長代理に「なる可能性が高い」と明らかにした。同氏は、ゲイリー・ゲンスラー現委員長が2025年1月20日に辞任した後、共和党がSECを引き継ぎ、パース氏がその地位を引き継ぐと予想されていると指摘した。

  • リップル最高法務責任者、仮想通貨ルールを改革する新たなリーダーシップについてSECに助言

    リップルの最高法務責任者であるスチュアート・アルデロティ氏は今週、Xに関する投稿で次期SEC指導部へのアドバイスを共有した。アルデロティ氏は、仮想通貨の規制問題に効果的に対処する移行チームの能力に自信を表明し、いくつかの行動を促した。アルデロティ氏は、「移行チームが仮想通貨のこうした基本的条件を考慮して正しい決定を下すことを確信している」と述べ、SEC委員のマーク・ウエダ氏とヘスター・パース氏の留任を確実にすることで、詐欺とは関係のない仮想通貨訴訟を即時停止するよう勧告した。協力を促進するため。同氏は、SECの管轄権に従うのではなく、議会や金融規制当局と協力して明確で直接的な仮想通貨ルールを策定する必要性を強調した。 さらに、2018年のヒンマン演説と2019年のデジタル資産分析フレームワークを放棄し、情報公開法(FOIA)プロセスの透明性を高め、過去のSECに対処するために監察総監室を通じて国民の信頼と疑問を回復するための措置を講じるよう求めた。責任の問題。

  • Bitwise CEO、ETHW はすべての投資家に適しているわけではなく、高いリスクと高いボラティリティを伴うことを思い出させる

    Bitwise の CEO、Hunter Horsley 氏は、ETHW は投資会社であるためこの法律で保護されていないため、すべての投資家に適しているわけではなく、より高いリスクと高いボラティリティを伴うと投稿しました。

  • Kinto は、金融機関と分散型プロトコルをサポートするために 500 万ドルの資金を確保しました。

    フロリダ州オーランドに拠点を置き、金融機関と分散型プロトコルをサポートするKYC認定の第2層ブロックチェーンを提供するKintoは、2回の資金調達ラウンドで合計500万ドルを調達した。このうち、150万米ドルはKyber Capital Cryptoが主導するシードラウンドから調達され、350万米ドルはKyber Capital Crypto、Spartan Group、Parafi、Skybridge、Kraynos、Soft Holdings、Deepが主導する第2回資金調達ラウンドから調達された。 Ventures、Modular、Tane、Robot Ventures、その他の投資家が参加しました。同社はこの資金をチーム拡大とネットワーク開発に活用する予定だ。 CEO の Ramon Recuero 氏が率いる Kinto は、現代の金融機関と分散型プロトコルをサポートできる KYC 認定の第 2 層ネットワークです。これは、DeFi と従来の金融の要件を満たす、低コストで安全なネットワークです。 Kinto はユーザーのプライバシーと資産を保護します。その KYC メカニズムはすべての個人情報を暗号化して第三者に保管し、ユーザーの要求があった場合にのみ共有します。さらに、すべてのアプリケーションに保険が適用され、追跡不可能な脆弱性や匿名の詐欺からユーザーを保護します。最後に、Kinto は開発者向けのインセンティブを提供しており、新しいアプリケーションを立ち上げるのに理想的な場所となっています。