プレイブック
BareNFT: ロール、一時停止可能、およびトークン URI (Barenft Uri)
BareNFT は、ERC721 Enumerable/Burnable/Pausable および AccessControl を備えたロールゲート型 mint(to,id,uri) を提供します。トークンごとの URI と一時停止のトレードオフ。
Bare Crypto Solidity マーケットプレイス プロトコル
一部 2 の 5
Remix IDE および OpenZeppelin v4.1 を使用した Hardhat/Foundry なしの BareNFT GitHub インポート、リザーブ、英国オークション、および NFT ゲートの BareToken エミッション アーキテクチャ。 ADR、弱い RNG、緊急権限のトレードオフ。
プリセットからその先へ: 誰が鋳造し、誰が止めるのか
BareNFT は OpenZeppelin ERC721PresetMinterPauserAutoId フレームワークから派生していますが、mint(to, tokenId, tokenURI) に AutoId の代わりに外部から提供された tokenId を提供します。 MINTER_ROLE と PAUSER_ROLE は AccessControlEnumerable によって分離されます。各トークンのカスタム URI は、baseURI と結合され、メタデータの柔軟性を提供するだけでなく、造幣局のみがコレクションを形成する信頼モデルも提供します。```text Deployer ├─ DEFAULT_ADMIN_ROLE ├─ MINTER_ROLE ──> mint(to, id, uri) └─ PAUSER_ROLE ──> pause / unpause | v ERC721Enumerable + Burnable + Pausable | v tokenURI = baseURI + per-token path
## 最初に説明した概念```text
📦 AccessControl
Rol bazli izin modeli; Ownable'dan daha ince taneli mint/pause ayrimi.
📦 ERC721Pausable
Transferleri durduran acil fren; listing ve auction escrow'unu da kilitler.
📦 Per-token URI
Her tokenId icin ayri metadata yolu; baseURI ile birlestirilir.
📦 Role-gated mint
Yalniz MINTER_ROLE sahibinin mint(to, id, uri) cagirabilmesi.
```役割の分離により安全性が向上します。ただし、DEFAULT_ADMIN_ROLE が片手にある場合、MINTER/PAUSER の区別は表面的なものであり、機能しません。
## ADR: AutoId の代わりに tokenId を開きます
決定: mint 署名を mint(address to、uint256 tokenId、string tokenURI) にします。カウンタの代わりにオペレータ ID を選択します。理由: コレクションのカタログ番号、予備リスト、オークション履歴は tokenId によってインデックス化されます。コスト: 競合する ID の場合は _mint を元に戻します。オフチェーンのミント調整が必須になります。これは、「オンチェーン自動インクリメント」ではなく、「オペレーター・カタログ権限」ADR です。
## ロール、一時停止、転送フック
stop() は PAUSER_ROLE をリクエストします。 _beforeTokenTransfer は、Enumerable + Pausable チェーンを呼び出します。一時停止がオンの場合、BareNFTReserve または BareNFTAuction のsafeTransferFrom も停止します。緊急ブレーキはすべてのエスクロー出力を同時にロックします。これは強力なインシデント ツールであり、オペレーターが市場全体を凍結できることも意味します。```text
PAUSER_ROLE
pause()
|
v
_beforeTokenTransfer
|
+-- marketplace escrow transfer BLOCKED
+-- peer-to-peer transfer BLOCKED
```## 失敗: 承認されていないミント サーフェスと URI オフセット
setMintingCurrency はパブリックに呼び出すことができるようです。 mintingPrice は決して設定されず、価格設定面が不完全です。パフォーマンス シナリオ: 転送ごとに Enumerable + _beforeTokenTransfer を使用すると、忙しい二次市場でのガス コストが増加します。 URI 側では、IPFS ゲートウェイが変更されると、baseURI + パスの組み合わせによってコレクション全体が壊れます。トークンごとの柔軟性は、baseURI の運用規律によって決まります。 MINTER_ROLE の侵入により、偽の ID mint を使用して予約リスト履歴が汚染されます。
## このエピソードで最も混乱を招く対戦```text
❌ AccessControl = Ownable'in sadesi
✓ AccessControl mint ve pause'u ayirir; Ownable tek sahip ile her seyi birlestirir
❌ Pause sadece transferleri durdurur, marketplace etkilenmez
✓ Escrow safeTransferFrom de pause altinda revert eder; tum pazar kilitlenir
❌ Per-token URI merkeziyetsiz metadata demektir
✓ URI hala minter ve baseURI operatorune guvenir; pin ve gateway politikasi ayridir
独自のシステムのチェックリスト
- DEFAULT_ADMIN、MINTER、PAUSER は同じウォレット内にありますか? それとも別々ですか?
- 一時停止中に出品/オークションを開始できるのはどの TX ですか?
- tokenURI の組み合わせがbaseURI に変更されると、古いトークンは壊れますか?
- 同じ tokenId を 2 回作成しようとすると、UI はどのように動作しますか?
- setMintingCurrency のようなハーフフェイスを呼び出せるのは誰ですか?
このセクションで覚えておくべきこと
- BareNFT は、ロールゲート型 mint(to,id,uri) を使用してカタログ権限をオンチェーンにもたらします。
- 一時停止可能は、エスクロー マーケットプレイスにおけるグローバルなキル スイッチです。トレードオフは明確に記述される必要があります。
- トークンごとの URI の柔軟性は、baseURI 操作の負債に依存します。
役割の分離はロック方式です。管理者が片手に持つ場合、それは単なるラベルです。
FAQ
よくある質問
アクセスコントロールとは何ですか?
役割ベースの権限モデル。 Ownable よりもきめ細かいミント/ポーズの分離。
ERC721一時停止可能とは何ですか?
トランスファーを停止する非常ブレーキ。また、出品やオークションのエスクローもロックされます。
「AccessControl = Ownable」は正しいですか?
AccessControl はミントとポーズを分離します。 Ownable は 1 人の所有者ですべてを組み合わせる
このセクションでは何を修正しますか?
このセクションでは、BareNFT のロール制限、トークンごとの URI 決定、一時停止によるマーケットプレイスの副作用を修正します。 BareNFT は OpenZeppelin ERC721PresetMinterPauserAutoId フレームワークから派生していますが、mint(to, tokenId, tokenURI) に AutoId の代わりに外部から提供された tokenId を提供します。 MINTER_ROLE と PAUSER_ROLE は AccessControlEnumerable によって分離されます。各トークンのカスタム URI は、baseURI と結合され、メタデータの柔軟性を提供するだけでなく、造幣局のみがコレクションを形成する信頼モデルも提供します。
学んだエンジニアリング原則
- ミント署名 (自動 ID とオープン ID) は、カタログおよびマーケットプレイスのインデックス モデルとともに選択する必要があります。
- 一時停止は、エスクロー プロトコルにおけるグローバルな一時停止として設計され、伝達される必要があります。
- メタデータ ADR には、baseURI、トークンごとのパス、およびゲートウェイ ピンを一緒に含める必要があります。
続きを読む
続きを読む
シリーズの次のシリーズ
BareNFTReserve: エスクロー、RandomBuy、弱い RNG
オーナー専用の createNewListing、buy および randomBuy — keccak256(revealNonce, block.difficulty, msg.sender) % 3. オーナー運営のマーケットプレイス ADR および緊急送金。
シリーズの次のシリーズ
リミックス + OpenZeppelin: ヘルメットなしでの配信
Bare Crypto プロトコルは、Hardhat/Foundry を使用せずに、Remix IDE と OpenZeppelin v4.1 GitHub インポートを使用してどのようにコンパイルおよびデプロイされましたか? ADR とトレードオフ。
同じシリーズ
BareNFTAuction: 請求、返金および緊急権限
英国のオークション: 入札、請求、キャンセル、保留中の返品、および所有者の緊急送金Nft/transferFundsのトレードオフ。