假设我有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;燃气费看起来会有多糟糕?
发布于 2021-06-12 22:30:45
假定两个整数a和b是相互关联的,那么(a x + b) modulo n将访问从0到n - 1的所有整数一次。
您可以使用它来“随机”分配NFT,方法是选择一个固定的大素数a并从VRF中填充b。考虑到足够大的a,a和b很可能是相互作用的。
然后,您可以简单地迭代[0, x),分配nth NFT。
下面是一个用Python编写的玩具示例,以演示它的工作原理:
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}")输出:
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 1https://ethereum.stackexchange.com/questions/101803
复制相似问题