Playbook
BareNFTReserve: Escrow, RandomBuy und schwache RNG (Barenft Reserve Escrow Und Randombuy Entropie)
Owner-only createNewListing, buy und randomBuy mit keccak256(revealNonce, block.difficulty, msg.sender) % 3 — schwache RNG, Owner-Marketplace-ADR…
Bare Crypto Solidity Marketplace-Protokoll
Teil 3 von 5
BareNFT, Reserve-Escrow, englische Auktion und NFT-gated BareToken-Emissionen in Remix IDE mit OpenZeppelin-v4.1-GitHub-Imports — ohne Hardhat/Foundry — inkl. ADRs, schwacher RNG und Notfall-Trade-offs.
Escrow-Trust, Lotterie-Misstrauen
BareNFTReserve legt das NFT in den Vertrag und oeffnet Preise nur ueber owner-only createNewListing; buy settlet ein festes Listing. randomBuy baut aus keccak256(revealNonce, block.difficulty, msg.sender) % 3 ein 'zufaelliges' Index-Tripel — bewusst schwache On-Chain-Entropie. Das ist das Herz des Bare-Crypto-ADRs fuer einen owner-operated Marketplace: Trust liegt beim Operator; Chance ist UX-Zucker.
Owner ──transfer NFT──> BareNFTReserve (escrow)
createNewListing(tokenId, price)
|
+── buy(tokenId) ──ETH──> seller, NFT──> buyer
|
+── randomBuy() ── keccak(nonce, difficulty, sender) % 3
|
+── emergency: transferNft / transferFunds
Dieser Teil fixiert Reserve-Escrow, schwache RNG und den Trade-off der Notfallrechte.
Begriffe, dort definiert, wo sie zuerst auftauchen
📦 Escrow-Listing
NFT wird zuerst an den Vertrag transferiert; Listing oeffnet nur wenn ownerOf der Vertrag ist.
📦 Owner-operated Marketplace
Listing-Erstellung und Notfall-Exits an einen Owner gebunden — nicht permissionless.
📦 Schwache On-Chain-RNG
Pseudo-Zufall aus Difficulty + Nonce + Sender, beeinflussbar durch Miner/Caller.
📦 Emergency Exit
Owner-Bypass des Escrows via transferNft / transferFunds.
Owner-operated Escrow ist ein anderer Produkt-ADR als ein OpenSea-aehnlicher permissionless Markt; randomBuy addiert Chance, aendert Trust nicht.
ADR: owner-operated Reserve
Entscheidung: nur der Owner darf createNewListing; das NFT muss bereits im Vertrag liegen. Begruendung: Bare Crypto steuert Vitrinen-Bestand als Single Operator und vermeidet Fake-Listings eines permissionless Seller-Modells. Kosten: zentraler Operator — Open/Close, Preis, closeListing sind owner-gated. Das ist ein ADR 'Operator-Storefront-Escrow', kein Protokoll-Marketplace.
buy, randomBuy und Entropie-Diagramm
buy laedt den letzten tokenIdToListing-Eintrag, verlangt msg.value >= price, dann seller.transfer und safeTransferFrom. randomBuy kommentiert den Preis-Require aus; randomId liefert drei Indizes via % 3 und versucht bis zum ersten Verkauf. Die Entropie ist vorhersagbar oder miner-beeinflusst — kein fairer Zufall, sondern Vitrinen-Mystery-Box-UX.
revealNonce ++
keccak256(nonce, block.difficulty, msg.sender)
|
v
index = hash % 3
[i, i+1, i+2] mod 3
|
v
try listings until sold
Fehlerfall: schwache RNG, Reentrancy, Emergency
Sofortiges seller.transfer(msg.value) in buy/randomBuy ist eine schwache Checks-Effects-Interactions-Flaeche; ein boeswilliger Seller-Vertrag kann Reentrancy versuchen. RNG-Schwaeche: im selben Block kann der Caller simulieren, in welchen %3-Bucket er faellt. Emergency transferNft/transferFunds dienen der Incident-Rettung, leeren aber bei Owner-Key-Compromise das gesamte Escrow. Performance: waechst tokenIdToListing, steigen Gas und Historien-Komplexitaet von getLastListingByTokenId.
Die am häufigsten verwechselten Zuordnungen
❌ block.difficulty-Random macht faire NFT-Verteilung
✓ Das ist schwache RNG; Mystery-UX ja, faire Mint/Raffle nein
❌ NFT im Escrow bedeutet permissionless Markt
✓ Ist Listing-Erstellung owner-only, ist das Produkt eine Operator-Vitrine
❌ Emergency Transfer verbessert nur Sicherheit
✓ Dieselbe Tuer ist bei Compromise ein Rug-Vektor; ohne Timelock/Multisig Single-Point-Risk
Checkliste zur Prüfung des eigenen Systems
- Wer darf createNewListing — nur Owner oder jeder Seller?
- Ist die randomBuy-Preispruefung aktiv oder auskommentiert?
- Welche Wallet haelt transferNft/transferFunds, gibt es Multisig?
- Kann ein Caller randomBuy im selben Block vorhersagen?
- Welchen tokenIdToListing-Eintrag behandelt die UI als aktuell?
Was aus diesem Teil bleiben sollte
- BareNFTReserve ist ein Owner-Escrow-Storefront-ADR, kein permissionless Marketplace.
- randomBuy-Entropie ist bewusst schwach — UX-Zucker, keine faire Chance.
- Notfallrechte oeffnen Rettung und Rug mit demselben Schluessel.
Liegt Escrow-Trust beim Operator, ist Wuerfeln Dekoration, kein Protokoll.
FAQ
Häufige Fragen
Was ist Escrow-Listing?
NFT wird zuerst an den Vertrag transferiert; Listing oeffnet nur wenn ownerOf der Vertrag ist.
Was ist Owner-operated Marketplace?
Listing-Erstellung und Notfall-Exits an einen Owner gebunden — nicht permissionless.
Stimmt es, dass „block.difficulty-Random macht faire NFT-Verteilung“?
Das ist schwache RNG; Mystery-UX ja, faire Mint/Raffle nein
Was legt dieser Teil fest?
Dieser Teil fixiert Reserve-Escrow, schwache RNG und den Trade-off der Notfallrechte. BareNFTReserve legt das NFT in den Vertrag und oeffnet Preise nur ueber owner-only createNewListing; buy settlet ein festes Listing. randomBuy baut aus keccak256(revealNonce, block.difficulty, msg.sender) % 3 ein 'zufaelliges' Index-Tripel — bewusst schwache On-Chain-Entropie. Das ist das Herz des Bare-Crypto-ADRs fuer einen owner-operated Marketplace: Trust liegt beim Operator; Chance ist UX-Zucker.
Gelernte Engineering-Prinzipien
- Marketplace-ADR muss permissionless Seller und Operator-Vitrine klar trennen.
- Bei On-Chain-RNG 'schwach / nicht fair' explizit dokumentieren.
- Emergency-Exits nicht allein ohne Multisig oder Timelock halten.
Weiterlesen
Weiterlesen
Nachster Teil der Serie
BareNFTAuction: Claim, Rueckerstattung und Notfallrechte
Englische Auktion: Bid, Claim, Cancel, Reserve-Unterschreitung und Owner-Emergency transferNft/transferFunds Trade-offs.
Nachster Teil der Serie
BareNFT: Rollen, Pausable und Token-URI
BareNFT kombiniert ERC721 Enumerable/Burnable/Pausable mit AccessControl und role-gated mint(to, id, uri). Trade-offs von Per-Token-URI und Pause.
Aus derselben Serie
Remix + OpenZeppelin: Lieferung ohne Hardhat
Wie das Bare-Crypto-Protokoll in Remix IDE mit OpenZeppelin-v4.1-GitHub-Imports — ohne Hardhat/Foundry — gebaut wurde, inkl. ADR und Trade-offs.