建议和反馈

请填写你的反馈内容

问答 > 区块链 > 问答详情
已解决

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

我目前正在尝试了解区块链,并了解基本原则。所以我试图实现一个简单的区块链

问题是我无法获得工作证明算法的功能。

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 - > 100 - > 10312”,这似乎是相当不正确的,如果您考虑它是有道理的。那么你如何实际创建其中一种算法,因为我遵循python中的指南,以完全相同的方式制作这样的算法?

2019-05-16
0
请先登陆或注册

胖shy2019-05-16

您的工作证明算法存在问题。你的PoW算法应该取一些数据X并找到一个数字Y,这样Y的哈希值就会产生一个数字,在你的情况下会产生4个尾随零。

可能的解决方案

let rec proofOfWork p0 x =
  let pow' = (string x) + (string p0) |> int
  if verify (pow') then
     x
  else
     proofOfWork p0 (x + 1)
投一票
评论(0)
赞赏(0)
邀请

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励