Доказательство работы Алгоритм простой реализации блокчейна (F #) - PullRequest
1 голос
/ 07 мая 2019

Я сейчас пытаюсь узнать о блокчейнах и понял основные принципы.Поэтому я пытаюсь реализовать простой блокчейн

. Проблема в том, что я не могу заставить работать алгоритм доказательства работы.

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, в котором алгоритм был таким же, как этот?

1 Ответ

1 голос
/ 13 мая 2019

Возникла проблема с вашим алгоритмом доказательства работы.Ваш алгоритм PoW должен взять некоторые данные X и найти число Y, такое, что хэш Y, добавленный к X, приведет к числу, которое в вашем случае заканчивается четырьмя конечными нулями.

Возможное решение

let rec proofOfWork p0 x =
  let pow' = (string x) + (string p0) |> int
  if verify (pow') then
     x
  else
     proofOfWork p0 (x + 1)
...