我正在创建一个NFT游戏,我想为其他令牌持有者创建一个空投。我有持有者的地址,有两万多个地址。现在我的问题是,我如何使这些地址符合空投条件?
我想做的是,就像Uniswap做的那样,你点击索赔,它告诉你是否有空投,如果你有,你可以要求它。
所以在我的合同中,如果你有资格得到空投,你点击索赔,然后令牌被铸造并转移给你,所以所有的气体都在你身上。
但我的问题是如何告诉合同哪个地址符合空投的条件?我试过的是我创建了一个
mapping(address => uint) private _airdrop;
然后是一个函数
function registerAirdrop(address user, uint tokenId) public onlyOwner {
_airdrop[user] = tokenId;
}然后对每个地址调用这个函数2万次,但我很快意识到,这既不是时间也不是高效的。有更好的办法吗?我怎样才能告诉我的智能合同,哪个地址可以申请空投?
发布于 2021-05-19 03:04:31
您可以使用merkle树,并且只在合同中存储根,请参阅使用OpenZeppelin梅克尔证明库。
发布整个树,要赎回的用户必须计算分支,并从他们的地址发送。
https://ethereum.stackexchange.com/questions/99227
复制相似问题