手册
BareNFTReserve:托管、RandomBuy 和弱 RNG (Barenftreserverandombuy Rng)
仅限所有者 createNewListing、buy 和 randomBuy — keccak256(revealNonce, block.difficulty, msg.sender) % 3. 所有者运营的市场 ADR 和紧急转移。
裸加密货币 Solidity 市场协议
部分 3 的 5
不带 Hardhat/Foundry 的 BareNFT,带有 Remix IDE 和 OpenZeppelin v4.1 GitHub 导入、储备、英国拍卖和 NFT 门控 BareToken 发行架构; ADR、弱 RNG 和紧急权力权衡。
托管信任,掷骰子不安全
BareNFTReserve 将 NFT 托管到合约中,并以所有者专用的 createNewListing 开价;购买通过付款关闭固定列表。 randomBuy keccak256(revealNonce, block.difficulty, msg.sender) 产生三个 3% 的“随机”候选索引——一个故意弱的链上熵。这是 Bare Crypto 的所有者运营市场 ADR 的核心:信任在于运营商,运气是运营商可以容忍的用户体验糖果。```text Owner ──transfer NFT──> BareNFTReserve (escrow) createNewListing(tokenId, price) | +── buy(tokenId) ──ETH──> seller, NFT──> buyer | +── randomBuy() ── keccak(nonce, difficulty, sender) % 3 | +── emergency: transferNft / transferFunds
## 第一次提到的概念```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.
```所有者运营的托管是一种与类似 OpenSea 的无许可市场不同的产品 ADR 形式; randomBuy 为这个模型增加了一层运气,它不会改变信任。
## ADR:所有者经营储备
决策:仅限 createNewListing 所有者; NFT 必须事先转移到合约中。理由:Bare Crypto 由单一运营商管理店面库存,通过避免卖家无需许可的模式来降低假货列表和地毯的风险。价格:中央运营商;上市开盘/收盘、价格设定、收盘完全归所有者所有。这是“运营商展示托管”ADR,而不是“协议市场”。
## buy、randomBuy 和熵图
buy 获取 tokenIdToListing 历史记录的最后一条记录,要求 msg.value >=price,执行 seller.transfer 和 safeTransferFrom。随机购买评论价格要求; randomId 将三个索引冻结在 3% 并尝试直到第一次成功销售。熵的来源是可预测的或受矿工影响的——不是公平的随机性,而是展示“神秘盒子”的用户体验。```text
revealNonce ++
keccak256(nonce, block.difficulty, msg.sender)
|
v
index = hash % 3
[i, i+1, i+2] mod 3
|
v
try listings until sold
```## 失败:RNG 弱、可重入和紧急情况
使用 seller.transfer msg.value 进行即时付款是 buy/randomBuy 中检查-效果-交互规则较弱的领域;恶意卖家可能会尝试重新签订合同。 RNG的弱点:在同一个区块中,调用者可以通过模拟看到自己属于哪一个3%切片。紧急转账 Nft/transferFunds 用于事件恢复,但在所有者密钥泄露的情况下,它会腾出所有托管。性能:随着 tokenIdToListing 数组的增长,getLastListingByTokenId 气体和历史复杂性也会增加。
## 本期最令人困惑的对决```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
您自己的系统清单
- createNewListing 可供谁使用——所有者还是卖家?
- randomBuy 价格检查在代码或注释中是否处于活动状态?
- 哪个钱包持有紧急转账Nft/transferFunds?它有多重签名吗?
- randomBuy结果可以被同一个区块中的调用者预测吗?
- 列表历史记录 (tokenIdToListing) UI 中哪条记录被视为“当前”?
本节中需要记住的事情
- BareNFTReserve 是所有者运营的托管展示 ADR;它不是一个无需许可的市场。
- randomBuy 熵故意变弱——用户体验糖果,不公平的机会。 3.紧急电源用同一把钥匙打开救援和地毯。
如果托管信任由运营商承担,那么掷骰子只是装饰,而不是协议。
FAQ
Frequently asked questions
什么是托管列表?
NFT首先转移到合约中;仅当ownerOf(contract)时才能打开列表。
什么是业主经营的市场?
挂牌开放和紧急出口均由单一业主控制;不是未经许可的卖家。
“随机公平的 NFT 分配是通过 block.difficulty 进行的”是真的吗?
这是可怜的RNG;可能是神秘的用户体验,而不是公平的薄荷/抽奖
本节修复了什么?
本节修复了储备托管模型、弱 RNG 和紧急权力的权衡。 BareNFTReserve 将 NFT 托管到合约中,并以所有者专用的 createNewListing 开价;购买通过付款关闭固定列表。 randomBuy keccak256(revealNonce, block.difficulty, msg.sender) 产生三个 3% 的“随机”候选索引——一个故意弱的链上熵。这是 Bare Crypto 的所有者运营市场 ADR 的核心:信任在于运营商,运气是运营商可以容忍的用户体验糖果。
学到的工程原理
- 市场 ADR 必须明确区分未经许可的卖家和运营商店面。
- 如果使用链上 RNG,则应明确记录“弱/不公平”。
- 如果没有多重签名或时间锁,紧急输出不应单独保留。
继续阅读
继续阅读
系列中的下一个
BareNFTAuction:索赔、退款和紧急权力
英国拍卖:投标、索赔、取消、保留下返回和所有者紧急转移Nft/transferFunds权衡。
系列中的下一个
BareNFT:角色、可暂停和令牌 URI
BareNFT 提供具有 ERC721 Enumerable/Burnable/Pausable 和 AccessControl 的角色门控铸币(to,id,uri)。每个令牌 URI 和暂停权衡。
同系列
Remix + OpenZeppelin:无需安全帽即可交付
在没有 Hardhat/Foundry 的情况下,如何使用 Remix IDE 和 OpenZeppelin v4.1 GitHub 导入来编译和部署 Bare Crypto 协议? ADR 和权衡。