Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

bitcoin与工作量证明

卡扎菲偶遇拉登
74 0 0
挖矿的时候需要经常听到一个词 工作量证明 , 即Proof Of Work,简称POW.
; z7 T- o7 R7 J" z
: q  \7 m5 L3 |: J4 [9 M% [POW是个什么鬼, 我们先抛开这个概念, 玩个游戏.
! y0 o( V* G1 `- w5 }
7 K/ G% b9 S9 ]& V1 _4 G( h假如有很多人喜欢问我很八卦的问题, 但我只想答有限的几个,0 o5 X# P% k- |2 U) p! x
' D% I3 F# V& e' N' ?6 R/ ]8 `
那让谁答呢? 我出个游戏规则:6 l* ~0 t  W' z, _

  E5 [. l" b2 i+ N3 k+ `: ~. y1 先把问题列出来, 重复的问题我不回答啊; d( k& h  u+ q5 M

7 m( }7 v4 K% E' J9 ~你有异装癖么6 ~% K4 Y2 v# k/ ~0 [
4 e, y# R" X' T0 @
2 做hash运算, 就做sha256吧
  t2 K- P# ?" {4 ~6 G* O9 `5 z
0 r4 G- N! j' ]5 p$ crequire 'Digest'* ?/ R, F; O! E. {0 ~

9 ]8 m. v! D$ \7 J1 `. ODigest::SHA256.hexdigest("你有异装癖么")
& P: I# T; V# ~8 T) {$ M' T5 f+ D/ {+ c; k( D
得到4f65c9ca420e5f191d9f2730c4f99c7fe8f2301a431bade918de9d38f7401a4e
3 a8 S) |  U5 z" {: V) X0 V; ~
: }9 u* h! @. w! u% X: N; o3  计算hash值, 这个难度太低了, 身边的一堆程序猿都会算.
# |0 e' |) U5 z6 ]) P0 @! m; C9 H5 r( \  f
我希望 你的问题 加上一个自然数,合并成一个新的字符串,再做hash运算, 得到新的hash值, 使得新的hahs值前4个都是0, 并且这个自然数是最小的, 那好,我就回答你的问题.
9 Z0 k8 }6 P  Q5 [8 y6 z( z$ B; }# |, h" A4 {
一言不合就撸码# L0 P3 u+ g0 T. X% k5 }
% \* s: d& g7 ]& ?; t
require 'Digest'
! \2 h0 T' n' V! v
9 }8 B7 Z5 j% w, m, y10000.times do |n|
. u4 t: \, Z3 o- P; R; s; g: x+ p# W7 P& P$ U% r. x5 i
issue = "你有异装癖么"
. s2 ]# ~+ x7 g1 `' J: T0 ?! p7 T/ S9 B
val = issue + n.to_s: E+ p8 E: Y) h1 `
$ _  }  Y+ E" L
ret = Digest::SHA256.hexdigest(val)
% v# x! l, k7 }+ A6 s& o5 }' D# P( E7 T( Z  K: e, F9 S4 i
if ret[0..3] == "0000" #判断hash值的前4位是0么
# n7 o3 c  v- O! k
( V1 S. S5 ]# m; f9 O   puts val& k( v( C) Q+ ^/ `5 ^
; q0 ]. E% i! L1 j* h: ]7 S
   puts n
& w+ @4 }' }8 }( r1 D' S5 m
2 h+ |" v% \! O# c4 m3 ]6 m   puts ret
$ \1 T  x3 @5 g5 l% I
# @( I5 d5 y1 ^% q   break
) ~. \! A+ _$ x2 {* ^. q0 }* A! @0 \+ Q5 Q0 s# b, |
end/ T- W, c: F% X$ S9 t" G( J
! e, Q( C# b; [5 M9 Z" z
end# V8 _2 t# }3 I* D, Y+ B
& W1 Z  ?# `+ ?; f; W6 ^
#你有异装癖么3699
/ q0 w: e9 U" ~1 f/ E
" d7 C! K# H7 z  f#3699
- Y: i% M- P- s6 P9 j1 l' X1 X- i- d+ F7 q2 C4 {" F
#00007ed47ec0280ca933ed5dc9396892fee27c9dbec9c07f95f0247169df1bee$ ^. J0 q4 U: k) X5 l8 A

( A, B8 D& X% C( H得到 3699,- g* g" \  x* v9 c

% C% y, X4 ^' D: NDigest::SHA256.hexdigest("你有异装癖么3699")的结果符合前4位是0.( K6 S" y  P# v! O* o' H* [
2 }& |; b* V' @, t' j8 U* Z6 o
你把问题 你有异装癖么3699给我, 我通过验证, 就回答这个问题.% |& R% r: z% {8 K

4 p1 p/ g& {- U* {5 y# u+ C0 q2 w你有疑惑了, 为啥要从 [1,10000] 这个区间顺序计算呢?
8 o5 M* N+ K* s* ]9 g2 q9 W0 R7 ]9 k; c/ x6 U( g. R  k' ?
不能随便从一个数字算么?
. v( w1 ~7 W5 Q' m* ^% f- ^( ]7 {% F! l9 |) L+ C# Z
因为hash运算的结果是无序的, 而且不能进行逆运算, 顺序计算比较方便, 没有遗漏. 通过这个方式得到的自然数, 也是符合游戏规则的最小自然数, 因为是顺序计算的啊  }7 r5 m% ?/ U6 U

7 V* ~. ^  Z6 u1 C9 F' @. s嗯的, 在回到这个游戏, 大家都遵守这个规则, 我也在回答这个问题,* l) E/ g' Q" i8 o% X  A+ k1 C
" Y* N9 }9 {7 o0 r
又过了一段儿时间, 需要回答的八卦问题还是太多了, 我吃不消了,囧.
, Q9 i' k' F6 P
5 h3 e* X7 U- O: m) m我定个新规则, 其他的不变, hash值前5位是0的, 我才回答.8 W3 O! x# a! C) j" ?

& E9 F5 J% D: V3 `5 R3 Z: ?然后继续运行, 到了我又吃不消的时候, 继续改, 前6位, 前7位, 前8位,7 R. H" W1 E$ y% c& Y

. r  j1 s1 J+ p9 {0 `前n位是0.
+ O6 V4 a* W' s% X# [3 c! h6 U0 h7 v; m' j/ F, R6 o2 B* l
如果你继续算下去, 你会发现, 算的时间会越来越长,我们可以说难度增加了. 有这样直观的感觉, 前几位是0的个数越多, 这个难度越大, 计算时间越长.
) s+ x/ K0 z1 x$ _, z; c( b
( _! h' P  @' d( l8 I3 J& t难度到底有多大, 也就是时间到底有多长呢?
+ n% B9 M, Z" F) u' \1 N
- s' u, O, Y8 W5 m5 L; ]& W我拿自己的 2014年款的 mac pro中款粗略算了下,语言是ruby,' `" F! n6 s* ]5 o, U. s  _) u" n
( I" z7 P  d+ q% [; y5 o
时间就是金钱, 这个时间还是比较可观的.) S% o; }3 [1 h6 [* v

% }' n7 g  x3 iDigest::SHA256.hexdigest("shooter36")      #04b4ee0f1b56950f1f9880d076b7449c66705d5712a939a36a49d9973dd50ab3    2ms
& i" n+ x+ r2 j) o* c9 Z/ S
: D6 s, C2 [4 w/ }0 L+ \Digest::SHA256.hexdigest("shooter578")     #002bae033279e48835e9a3c8b71a6835bf171a202b700a10ba4bd63710bfcb49    15ms' N- U" E0 I1 ~/ y
" @1 ~5 J- Q3 b  Y/ g. F
Digest::SHA256.hexdigest("shooter4434")    #00072b50cc7963a310962af33efcd5109cdfb6ac633ce6bb275ce243f3ec247b    406ms
! c$ y' v' u* U/ A+ S; x: b5 {) R+ U
% U* x$ W: R) q( lDigest::SHA256.hexdigest("shooter35786")   #00002d8c31f6eb29d848cdf520b499cd9f729b1d4d037275d82935b7766eaa3e    4309ms7 F2 u+ y; C- V  \- \: u
! n8 `7 W. `2 K+ X: h! q. S
Digest::SHA256.hexdigest("shooter717095")  #00000178662b978d8d7cf930a1caceae70f097354b4fe6423eef2a45ccfb9ce7    82468ms
9 @) w; O5 t7 @/ R) g" ^8 H8 `5 R# h. H+ E
Digest::SHA256.hexdigest("shooter2038373") #0000001ef511d494ecdddcd2abfded0a34df87a9c76410452e01e0a2958bf0a5    272266ms
' j, E1 ^; d* w; W
* C% _+ P; Q' V4 a; {说了这么多, 这个游戏规则其实就是POW.: \  l: b+ b- \) Y- u
9 i5 ]  `2 P5 ?. W
用到bitcoin上,无非是要替换些东西, 八卦问题 => bitcoin需要的数据,% {6 d6 @% l6 g5 p( _2 O
4 n1 P- {/ ]1 c: l
替换bitcoin需要的难度. 理解这个思想很重要, 别的细节慢慢聊.
, N" y( Y$ ]( D. Z  ~
" p7 i6 U+ J! `5 jbitcoin系统的难度有多大呢?" S' ^" {5 i# f! h; j+ v! W
1 I' _7 e6 R- A% B) A; }2 M& i4 w. V1 u
块高度477,360 的hash 000000000000000000e8af89716e0ea8a2aa7c7b789935e98f0a32a4a319247f有18个0.
5 ~" x7 F2 y/ F6 R! ?1 C
" e5 A# e" ~7 w2 E2 }- gNonce 是十六进制的0x71eee8ca,即算了 1911482570次, 可以试试用一般的笔记本计算19亿次hash需要多长时间.! Z7 C& Z- h. I; c' D; u8 U

* B; G2 o9 Q$ u: |2 uPOW有什么特点呢?
7 W6 g# S5 w3 j" n8 q/ ~
* ?0 g& J  K- s" ?+ X8 Y6 |1 运算不可逆, 就代表谁也不可能偷懒
: P! n: W3 U: p. g5 p/ @1 F" v- S
9 l+ g, b9 {: ?* t- @; ~3 H2 每个值的hash都不一样, 意味着不同的问题都要算,  换个新问题, 就要重新算.
) E, M3 D4 ~' C. X7 B! j7 p+ L) {* O3 W5 n6 N+ y  t) B
3 你算起来很费劲, 花费时间长3 p* s' {9 n" T

9 ]: A" q  k3 [$ q9 b4 我验证起来很简单, 把结果hash一下, 符合规则的我就回答, 不符合的抛弃
+ x2 F! S* W+ H4 H3 O1 w- y5 O! L# o7 R6 }. h
5 这个规则实现还是比较简单的
; w$ u& w0 n  @8 b/ `: {7 _
: c- u: z+ T0 v" ^结果就是 遵守游戏规则的人很艰难的算出一个结果,会很珍惜,因为你付出了很多的计算资源跟时间, 你希望我能认可你的努力.
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

卡扎菲偶遇拉登 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    38