我目前正在尝试了解区块链并了解基本原理。所以我试图实现一个简单的区块链
问题是我无法获得工作证明算法的功能。
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指南以完全相同的方式制作这样的算法时,您实际上将如何创建这些算法之一?
答案 0 :(得分:1)
您的工作量证明算法有问题。您的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)