首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多名中奖者彩票不起作用

多名中奖者彩票不起作用
EN

Ethereum用户
提问于 2021-10-12 19:32:16
回答 1查看 261关注 0票数 2

位于这里的Github回购公司:https://github.com/supsam89/digiwear_nft_丢弃

我遇到问题的命令是brownie run scripts/deploy.py

我正在尝试部署一个投注/彩票合同,根据参赛者随机挑选多个中奖者(然后最终将NFT转让给他们)。

当我结束投注/抽奖功能时,它要么需要太长时间(气体密集),要么就不能工作。在执行time.sleep(60)之后,状态仍然是“计算胜利者”。

我认为这个函数导致了NFTDrop.sol中的问题:

代码语言:javascript
复制
    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;
    }

任何帮助问题或建议如何更好地编码这将是非常感谢!

提前谢谢。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2021-10-12 21:25:21

根据链式文档

如果您的fulfillRandomness函数使用200 K以上的gas,则事务将失败。

您的fulfillRandomness函数消耗了太多的气体,您必须缩短它。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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