首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确保NFT集的公平分配?

确保NFT集的公平分配?
EN

Ethereum用户
提问于 2021-06-12 19:50:11
回答 1查看 1.1K关注 0票数 2

假设我有1000个NFT,我想分发。用户可以预先看到任何NFT的样子,但他们不知道他们会得到什么,直到他们真正购买它。换句话说,由Chainlink VRF产生的随机数将决定它们得到什么。这确保了一个公平的发行,因此罕见的NFT不能被早期用户购买。

我所看到的与此最接近的项目是Hashmasks,但它们的质量甚至让用户事先不知道任何艺术品的外观。就我的项目而言,我不需要这个财产。

我所看到的哈希掩码的主要问题是没有tokenURI函数。他们将所有内容上传到IPFS上,因此拥有tokenURI的唯一方法似乎是预先知道每个NFT的散列,并将其存储在合同中,然后将其附加到IPFS前缀,但这将非常昂贵。

我想知道是否有一种方法可以保留拥有tokenURI的属性,同时也可以确保随机分布。

对于随机分布部分,我考虑从链式VRF中得到一个随机数r,然后执行:

I=兰德% maxSupply

然后我检查ownerOf(i),如果它被接受了,那么i+=1,如果没有被接受,那么就分配。我想知道,仅仅检查ownerOf(i)是否要收取煤气费?在最坏的情况下,这个循环需要maxSupply -1迭代来分配一个NFT;燃气费看起来会有多糟糕?

EN

回答 1

Ethereum用户

发布于 2021-06-12 22:30:45

假定两个整数ab是相互关联的,那么(a x + b) modulo n将访问从0n - 1的所有整数一次。

您可以使用它来“随机”分配NFT,方法是选择一个固定的大素数a并从VRF中填充b。考虑到足够大的aab很可能是相互作用的。

然后,您可以简单地迭代[0, x),分配nth NFT。

下面是一个用Python编写的玩具示例,以演示它的工作原理:

代码语言:javascript
复制
a = 97        # Random prime
b = 12345678  # VRF
n = 10        # Total NFTs

for x in range(0, n):
    nft = ((a * x) + b) % n
    print(f"Mint {x} will be NFT {nft}")

输出:

代码语言:javascript
复制
Mint 0 will be NFT 8
Mint 1 will be NFT 5
Mint 2 will be NFT 2
Mint 3 will be NFT 9
Mint 4 will be NFT 6
Mint 5 will be NFT 3
Mint 6 will be NFT 0
Mint 7 will be NFT 7
Mint 8 will be NFT 4
Mint 9 will be NFT 1
票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/101803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档