Oyun Kitabı
BareNFTReserve : Escrow, RandomBuy et RNG faible (Barenftreserve Escrow Randombuy Et Rng Faible)
CreateNewListing, buy et randomBuy réservés au propriétaire — keccak256 (revealNonce, block.difficulty, msg.sender) % 3. ADR et transfert d'urgence du marché géré par le propriétaire.
Protocole de marché Bare Crypto Solidity
Partie 3 de 5
BareNFT sans Hardhat/Foundry avec Remix IDE et OpenZeppelin v4.1 Importations GitHub, réserve, enchères au Royaume-Uni et architecture d'émission BareToken contrôlée par NFT ; ADR, faible RNG et compromis entre les autorités d’urgence.
Escrow trust, insécurité des lancers de dés
BareNFTReserve engage le NFT dans le contrat et ouvre le prix avec createNewListing réservé au propriétaire ; buy ferme la liste fixe avec paiement. randomBuy keccak256 (revealNonce, block.difficulty, msg.sender) produit trois index candidats « aléatoires » à 3 % – une entropie en chaîne délibérément faible. C'est le cœur de l'ADR du marché géré par le propriétaire de Bare Crypto : la confiance est dans l'opérateur, la chance est un bonbon UX que l'opérateur tolère.```text Owner ──transfer NFT──> BareNFTReserve (escrow) createNewListing(tokenId, price) | +── buy(tokenId) ──ETH──> seller, NFT──> buyer | +── randomBuy() ── keccak(nonce, difficulty, sender) % 3 | +── emergency: transferNft / transferFunds
## Concepts à la première mention```text
📦 Escrow listing
NFT once kontrata transfer edilir; listing ancak ownerOf(contract) iken acilir.
📦 Owner-operated marketplace
Listing acma ve acil cikislar tek owner'a bagli; permissionless seller degil.
📦 Weak on-chain RNG
block.difficulty + nonce + sender ile uretilen, miner/caller etkisine acik 'rastgelelik'.
📦 Emergency exit
transferNft / transferFunds ile owner'in escrow'u bypass etmesi.
```Le dépôt géré par le propriétaire est une forme d'ADR de produits différente du marché sans autorisation de type OpenSea ; randomBuy ajoute une couche de chance à ce modèle, cela ne change pas la confiance.
## ADR : réserve exploitée par le propriétaire
Décision : propriétaire de createNewListing uniquement ; Le NFT doit avoir été transféré au contrat au préalable. Justification : Bare Crypto gère le stock de la vitrine par un seul opérateur, réduisant ainsi le risque de fausses annonces et de faux tapis en évitant le modèle sans autorisation du vendeur. Prix : opérateur central ; annonce ouverte/fermée, prix fixé, fermetureL'annonce est entièrement propriétaire. Il s'agit d'un ADR de « dépôt de vitrine d'opérateur », et non d'un « marché de protocoles ».
## buy, randomBuy et diagramme d'entropie
buy obtient le dernier enregistrement de l'historique tokenIdToListing, demande msg.value >= price, fait seller.transfer et safeTransferFrom. randomBuy commente le prix requis ; randomId gèle trois index à 3% et essaie jusqu'à la première vente réussie. La source d'entropie est prévisible ou influencée par les mineurs – ce n'est pas un hasard, mais une vitrine UX de « boîte mystère ».```text
revealNonce ++
keccak256(nonce, block.difficulty, msg.sender)
|
v
index = hash % 3
[i, i+1, i+2] mod 3
|
v
try listings until sold
```## Échec : RNG faible, réentrance et urgence
Le paiement instantané avec seller.transfer msg.value est un domaine dans lequel la discipline contrôles-effets-interactions dans buy/randomBuy est faible ; Des vendeurs malveillants peuvent tenter de réintégrer le contrat. Faiblesse du RNG : dans le même bloc, l'appelant peut voir grâce à la simulation dans quelle tranche de 3 % il tombe. Le transfert d'urgence Nft/transferFunds est là pour la récupération après incident, mais il libère tout dépôt en cas de compromission de la clé du propriétaire. Performances : à mesure que le tableau tokenIdToListing se développe, la complexité du gaz et de l'historique getLastListingByTokenId augmente.
## Les confrontations les plus déroutantes de cet épisode```text
❌ block.difficulty ile random adil NFT dagitimi yapar
✓ Bu zayif RNG'dir; mystery UX olabilir, adil mint/raffle olamaz
❌ Escrow'da NFT varsa pazar permissionless'tir
✓ Listing yaratma owner-only ise urun operator vitrinidir
❌ Emergency transfer sadece guvenlik artirir
✓ Ayni kapı, compromise'te rug vektorudur; timelock/multisig olmadan tek nokta riskidir
Liste de contrôle de votre propre système
- À qui createNewListing est-il disponible : propriétaires ou vendeurs ?
- La vérification des prix randomBuy est-elle active dans le code ou dans le commentaire ?
- Quel portefeuille contient les transferts d'urgence/transferFunds ? Est-ce qu'il a multisig ?
- Le résultat randomBuy peut-il être prédit par l'appelant dans le même bloc ?
- Quel enregistrement est considéré comme « actuel » dans l'interface utilisateur de l'historique des annonces (tokenIdToListing) ?
Choses à retenir de cette section
- BareNFTReserve est une vitrine de dépôt fiduciaire ADR exploitée par le propriétaire ; Ce n'est pas un marché sans autorisation.
- L'entropie randomBuy est délibérément faible – des bonbons UX, pas de chance équitable.
- Les pouvoirs d'urgence ouvrent le secours et le tapis avec la même clé.
Si la confiance Escrow appartient à l'opérateur, le fait de lancer les dés est une décoration et non un protocole.
FAQ
Frequently asked questions
Qu'est-ce qu'une liste Escrow ?
Le NFT est d’abord transféré au contrat ; La liste ne peut être ouverte que lorsque OwnerOf (contrat).
Qu’est-ce qu’une place de marché gérée par son propriétaire ?
L'ouverture du gîte et les sorties de secours sont soumises à un seul propriétaire ; Pas de vendeurs sans autorisation.
Est-il vrai que « la distribution aléatoire et équitable de NFT se fait avec block.difficulty » ?
C'est un mauvais RNG ; Peut être une UX mystérieuse, pas juste un tirage au sort/un tirage au sort
Que corrige cette section ?
Cette section corrige le modèle de dépôt de réserve, le RNG faible et le compromis entre les pouvoirs d'urgence. BareNFTReserve engage le NFT dans le contrat et ouvre le prix avec createNewListing réservé au propriétaire ; buy ferme la liste fixe avec paiement. randomBuy keccak256 (revealNonce, block.difficulty, msg.sender) produit trois index candidats « aléatoires » à 3 % – une entropie en chaîne délibérément faible. C'est le cœur de l'ADR du marché géré par le propriétaire de Bare Crypto : la confiance est dans l'opérateur, la chance est un bonbon UX que l'opérateur tolère.
Principes d'ingénierie appris
- L'ADR Marketplace doit clairement faire la distinction entre les vendeurs sans autorisation et les vitrines des opérateurs.
- Si le RNG en chaîne est utilisé, « faible/injuste » doit être clairement documenté.
- Les sorties d'urgence ne doivent pas être conservées seules sans multisig ou timelock.
Continuer la lecture
Continuer la lecture
Suivant en série
BareNFTAucure : réclamation, remboursement et pouvoirs d'urgence
Enchères britanniques : offre, réclamation, annulation, retour sous réserve et compromis de transfert d'urgence du propriétaire/transferFunds.
Suivant en série
BareNFT : Rôles, Pausable et URI de jeton
BareNFT propose un mint (to, id, uri) contrôlé par rôle avec ERC721 Enumerable/Burnable/Pausable et AccessControl. URI par jeton et compromis de pause.
Même série
Remix + OpenZeppelin : Livraison sans casque
Comment le protocole Bare Crypto a-t-il été compilé et déployé sans Hardhat/Foundry avec les importations Remix IDE et OpenZeppelin v4.…