首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于块散列的彩票中奖号码

基于块散列的彩票中奖号码
EN

Ethereum用户
提问于 2020-02-19 14:44:00
回答 1查看 364关注 0票数 0

在这个论坛上阅读了很多关于这个主题的信息之后,我想问我是否可以使用公式winningNumber =uint256(块散(块号-1)% 100;例如,投注期结束后的10或20个街区)。在投注期间,任何人都不可能知道“未来”的封号,对吧?例如,稳健地实施可能与此类似?要求(block.number >(BettingEndBlock+20));

EN

回答 1

Ethereum用户

回答已采纳

发布于 2020-02-19 15:06:14

重要的是要把承诺和揭示分开,这样就没有人能从“这个”块中“猜出”“解决方案”。

我认为,使用block.number + 1就足够了,所以在未来的100个街区内不会增加很大的困难。矿工们总是有机会在一定程度上制造区块,但我认为可以忽略不计。

错误:

代码语言:javascript
复制
function claimPrize(bytes32 solution) public {
  bytes32 check = keccak256(abi.encodePacked(block.hash));
  require(solution == check, "Incorrect");
  // award prize
}

问题是,在当前块的上下文中计算“解决方案”,然后收集奖金是非常简单的。

提交/显示:

代码语言:javascript
复制
function commit(bytes32 committment) public {
  commitments[msg.sender] = commitment; // over-simplified
}

function claimPrize() public {
  require(block.number >= deadline, "lottery still open");
  bytes32 solution = // ... block hash at deadline
  require(committments[msg.sender] == solution, "You didn't win");
  // award prize
}

如果不清楚,未来的块哈希是不可知的。重要的是要确保竞赛是基于未来的块哈希,而不是现在(或过去)。

希望能帮上忙。

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

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

复制
相关文章

相似问题

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