Discuz! Board

 找回密碼
 立即註冊
搜索
熱搜: 活動 交友 discuz
查看: 1|回復: 0

Solidity 陷阱:以太坊的随机数生成

[複製鏈接]

1

主題

1

帖子

5

積分

新手上路

Rank: 1

積分
5
發表於 2024-1-23 18:17:23 | 顯示全部樓層 |閱讀模式
本文是与iOlite合作创建的。感谢您对合作伙伴的支持,使 SitePoint 成为可能。 Solidity 是一种相当新的语言,由于没有完美的代码,它包含与代码以及您想要用它完成的任务相关的问题。本文将指导您了解使用随机数作为以太坊智能合约的输入时的最佳实践和陷阱。 Solidity 随机数生成 Solidity 无法创建随机数。实际上,每种创建随机数的算法都是伪随机的——没有语言能够创建完全随机的数字。Solidity 的问题在于复杂的算法成本太高,因此使用了更基本的解决方案。除此之外,Solidity 代码应该是确定性的,因为它将在多个节点上运行。我们需要一种能够生成随机数一次并在多个节点上使用它的算法。像时钟时间这样的东西不能用于生成随机数,因此我们必须考虑其他选项。作为开发人员,您应该意识到这个问题,因为攻击者能够预测某些特定情况下的结果。

最常用的算法之一是“线性同余生成器”(LCG)。它是最古老的算法之一,速度快且易于理解。LCG 对于嵌入式系统来说是一个不错的选择,因为它们的内存量有限。然而,它不太适合加密安全应用程序。尽管如此,这仍在智能合约中使用,因为就天然气成本而言,实施快速算法 WhatsApp 号码数据 要便宜得多。 该算法本身执行以下步骤: 接受输入 对输入执行算法 取输出模数(除以您需要的范围内的最大数) 输出 0 到您需要的范围内的最大数字 让我们使用彩票智能合约示例来探索创建随机数的不同方法。用户可以通过向合约发送 0.1 以太币以及 0 到 250 之间的整数来参加抽奖。 1. 区块时间戳和区块难度 Ablock.timestamp是由矿工在确认交易时分配的。我们的彩票合同中没有任何球员能够控制它。让我们看一下这段用于创建随机数的代码。



在这里找到要点。 这段代码首先对块时间戳和难度进行哈希处理。接下来,我们将哈希值转换为整数,并将其除以 251,得到 0 到 250 之间的整数。但是,这段代码的问题是,我们不应该相信矿工会选出获胜者。 2. 彩票输入——任意数据 我们需要更多任意数据来挑选获胜者。我们可以使用已进入彩票智能合约的玩家的地址,但我们必须向其他玩家隐藏它,因为他们可能会滥用它。隐藏这些信息是不可能的,因为它全部记录在区块链上。 可以使用提交给我们的彩票智能合约的号码。用户必须将他们选择的数字与他们的以太坊地址一起进行哈希处理。这给了我们一个相当随机的数字。 3.Chainlink VRF 话虽如此,随机性是可以实现的,但你只需要使用预言机从区块链外部获取随机数。

回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

Archiver|手機版|自動贊助|GameHost抗攻擊論壇

GMT+8, 2025-4-20 11:45 , Processed in 0.033856 second(s), 18 queries .

抗攻擊 by GameHost X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回復 返回頂部 返回列表
一粒米 | 中興米 | 論壇美工 | 設計 抗ddos | 天堂私服 | ddos | ddos | 防ddos | 防禦ddos | 防ddos主機 | 天堂美工 | 設計 防ddos主機 | 抗ddos主機 | 抗ddos | 抗ddos主機 | 抗攻擊論壇 | 天堂自動贊助 | 免費論壇 | 天堂私服 | 天堂123 | 台南清潔 | 天堂 | 天堂私服 | 免費論壇申請 | 抗ddos | 虛擬主機 | 實體主機 | vps | 網域註冊 | 抗攻擊遊戲主機 | ddos |