位于这里的Github回购公司:https://github.com/supsam89/digiwear_nft_丢弃
我遇到问题的命令是brownie run scripts/deploy.py
我正在尝试部署一个投注/彩票合同,根据参赛者随机挑选多个中奖者(然后最终将NFT转让给他们)。
当我结束投注/抽奖功能时,它要么需要太长时间(气体密集),要么就不能工作。在执行time.sleep(60)之后,状态仍然是“计算胜利者”。
我认为这个函数导致了NFTDrop.sol中的问题:
function endDrop() public onlyOwner {
drop_state = DROP_STATE.CALCULATING_WINNERS;
bytes32 requestId = requestRandomness(keyhash, fee);
emit RequestedRandomness(requestId);
}
function fulfillRandomness(bytes32 _requestId, uint256 _randomness) internal override {
require(
drop_state == DROP_STATE.CALCULATING_WINNERS,
"Not calculating winners yet!"
);
require(_randomness > 0, "randomness-not-found");
uint256[] memory expandedValues = expand(_randomness, tokenAmount);
for (uint256 i = 0; i < tokenAmount; i++) {
uint256 indexOfWinner = expandedValues[i] % entrants.length;
recentWinner = entrants[indexOfWinner];
winners.push(recentWinner);
}
drop_state = DROP_STATE.CLOSED;
randomness = _randomness;
}
function expand(uint256 _randomness, uint256 _numberOfTokens) public pure returns (uint256[] memory expandedValues) {
expandedValues = new uint256[](_numberOfTokens);
for (uint256 i = 0; i < _numberOfTokens; i++) {
expandedValues[i] = uint256(keccak256(abi.encode(_randomness, i)));
}
return expandedValues;
}任何帮助问题或建议如何更好地编码这将是非常感谢!
提前谢谢。
发布于 2021-10-12 21:25:21
https://ethereum.stackexchange.com/questions/111465
复制相似问题