当前位置: 首页 > 知识库问答 >
问题:

简单区块链实施的工作证明算法(F#)

左劲
2023-03-14

我目前正在努力学习区块链,并且已经理解了基本原则。因此,我尝试实施一个简单的区块链

问题是我无法得到一个工作证明算法。

let sha256 = System.Security.Cryptography.SHA256.Create()
let hash (n : int) =
    sha256.ComputeHash (BitConverter.GetBytes n)
    |> BitConverter.ToString
    |> fun x -> x.Replace ("-", "")

let verify x = hash x |> fun p1 -> p1.EndsWith "0000"

let rec proofOfWork p0 x =
  if verify (p0 + x) then
     x
  else
     proofOfWork p0 (x + 1)

[<EntryPoint>]
let main argv =

   let s = proofOfWork 100 1
   let s' = proofOfWork s 1 
   let s'' = proofOfWork s' 1

   0 

这将返回一个“10312”的闭环-

共有1个答案

金英华
2023-03-14

您的工作证明算法存在问题。PoW算法应该获取一些数据X并找到一个数字Y,这样附加到X的Y散列将得到一个数字,在本例中,该数字以4个尾随零结尾。

可能的解决办法

let rec proofOfWork p0 x =
  let pow' = (string x) + (string p0) |> int
  if verify (pow') then
     x
  else
     proofOfWork p0 (x + 1)
 类似资料:
  • 工作证明(PoW)是区块链网络中的原始一致性算法。该算法用于确认事务并为链创建新块。在该算法中,minor(一群人)相互竞争以完成网络上的交易。相互竞争的过程称为挖掘。一旦矿工成功创建了一个有效的区块,他们就会获得奖励。PoW最着名的应用是比特币。 制作工作证明可能是一个概率很低的随机过程。在此过程中,在生成有效的工作证明之前,需要进行大量的试验和错误。工作证明的主要工作原理是一个数学难题,很容易

  • 我正在通过一些在线示例学习区块链。我有一个高级代码,我用前面的散列创建一个新的块,然后向其中添加一个事务,然后生成一个困难的块散列(有8个前导零) 这很有效。但我有一个问题,在向区块链添加区块之前,如何验证该工作证明。 即。假设生成了一个包含8个前导零的散列

  • 我正在开发一个基于区块链的身份识别系统。而且,由于每个项目都将永远在链中,消耗空间,因此我正在考虑添加一个工作证明需求,以便将项目添加到链中。 起初我想到的是比特币,因为这是一种经过尝试和测试的方式来证明这项工作已经完成,但这样做会阻止用户加入,因为比特币还没有被广泛应用。此外,在分布式系统中,不清楚谁应该得到这笔钱。 因此,我正在寻找一种工作证明算法,其复杂性可以根据区块链的增长速度轻松调整,并

  • 我对比特币和区块链技术相当陌生,最近开始阅读相关文章。所以我的理解和下面的问题可能不是很准确。 据我所知,到目前为止,工作证明是比特币区块链的基本构建块,正因为如此,攻击者必须产生超过50%的总计算能力(即控制超过50%的节点)才能通过能够一致地产生最长的区块链来操纵区块链。 现在比特币的人有点幸运,因为他们是第一个,早期没有人注意到。一旦比特币势头增强,诚实节点的数量就占主导地位,系统就变得内在

  • 本文向大家介绍如何实施区块链项目?相关面试题,主要包含被问及如何实施区块链项目?时的应答技巧和注意事项,需要的朋友参考一下 回答:**请按照以下步骤实施区块链项目。 选择你的平台 初始化区块链 选择正确的共识协议 执行您的第一个智能合约 调试和扩展

  • 以太坊智能合约是否有可能实现身份证明和电子邮件检查? 是否需要进行外部呼叫,或者一切都可以在区块链中实现。如何添加新身份到区块链,以便以后检查? 我搜索这个话题有一段时间没有成功。