我想随机化不同级别的NFT是如何铸造的。如果总共有3333层,20层1层(最好),313层2层,1200层3层和1800层4层,下面的代码会起作用吗?这会导致1级NFTS每隔4张薄荷糖就被铸造一次吗?
function _genTier(uint256 seed) internal view returns (uint256) {
uint256 index = seed % probabilities.length;
uint256 rarity = seed.mul(100).div(MAX_SUPPLY);
if(rarity < probabilities[index]) {
rarity = index;
} else {
rarity = aliases[index];
}
return rarity;
}发布于 2022-05-23 16:45:35
博士,如果你已经在使用甲骨文,这种方法会奏效的。
文章中的代码片段中的方法将导致罕见,但是not不会被随机分配,而是根据所提供的种子顺序分配。我不知道种子是从哪里来的。
通常,我喜欢使用“随机盒”技术,在这里你可以创建特征盒,洗牌和循环它们。所以你可以生成特征,最后得到3333个条目的数组。如果你想保持精确的稀有性,比如
共3333层和20层1,313层2,1200层和1800层4层
这是一个很好的方式来表演的一代。相反,方法_genTier可能不会导致您所提供的确切数字,而可能会按照稀缺性中所述的方法来创建每个not。
然而,“随机盒”方法对于可靠性来说并不是最优的,因为存储这么多数据所需的内存量将产生冗余成本,可以通过使用随机性来避免。
另一方面,随机性也很难在链上获得.要获得加密安全的随机数,可以使用块哈希或oracle。
使用块哈希可能适用于此应用程序,但其核心是可预测的。这意味着,有人可以获得随机数,知道即将出现的块哈希,并计算出他们将要接收的NFT层。
因此,我建议研究像ChainLink这样的预言,得到无法预测的真正密码随机数。来自先知的RNG来自链外,符合安全标准.您可以使用这些数字并包含一个if-语句,该语句将检查当前从每个层生成的NFT的数量。然后,如果说从第一层20已经被分配,以确保最终3333完全按照计划。
https://stackoverflow.com/questions/72351730
复制相似问题