Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

bitcoin与工作量证明

卡扎菲偶遇拉登
115 0 0
挖矿的时候需要经常听到一个词 工作量证明 , 即Proof Of Work,简称POW.
, `8 D% O2 n" X+ \" i$ K8 k* D' E: A( V3 K7 O
POW是个什么鬼, 我们先抛开这个概念, 玩个游戏.6 U" Y9 d- L& P' g

  ^2 I; m) O2 u假如有很多人喜欢问我很八卦的问题, 但我只想答有限的几个,
6 P, S! M/ P) q8 H4 @  R0 t- q' I4 s1 |8 g5 K$ ?$ d3 f3 h# E" Q. K
那让谁答呢? 我出个游戏规则:! f; ~: U1 o% M! j
" V. ^' l) X* P: P. H+ J# X: R
1 先把问题列出来, 重复的问题我不回答啊
# p/ F2 e/ a1 L
- t2 s  W$ q9 _4 F# ^你有异装癖么, w: v" `, k" \

4 I9 P3 G& x' z4 U0 F) t1 p9 k" ^2 做hash运算, 就做sha256吧6 m8 N' l4 y7 r* a, |" B2 C  l3 Q
* A! [7 C( z( t+ l& _
require 'Digest'% H/ T) V7 D" X" n& k& }1 w6 e6 R

8 y* s3 C5 @" M# pDigest::SHA256.hexdigest("你有异装癖么")
. `0 G. Q5 b8 m* j8 `) r6 P/ s) E* ?. t+ f" b9 F
得到4f65c9ca420e5f191d9f2730c4f99c7fe8f2301a431bade918de9d38f7401a4e
3 N2 o' Y# q4 R/ p* k. v
& n5 c/ ]. W( W! j8 U; [8 ]( p3  计算hash值, 这个难度太低了, 身边的一堆程序猿都会算.
5 _0 Z9 z% u  b2 Z6 @0 a4 h, c/ m0 y" C5 k6 e
我希望 你的问题 加上一个自然数,合并成一个新的字符串,再做hash运算, 得到新的hash值, 使得新的hahs值前4个都是0, 并且这个自然数是最小的, 那好,我就回答你的问题.8 l* w# L+ k8 X9 D/ [. {

- s5 u: W; j  m% b. q& p, j+ y0 Q一言不合就撸码
7 ]0 @& A) C! d( o* @2 j
+ {6 n  w  O% Q+ y/ \, T; ~. m# q: Crequire 'Digest'* I% V5 I$ E0 d

$ F8 c& J, y, U3 I6 I- h& t10000.times do |n|
# N( s% Y3 r0 G7 o* i4 H
$ Y" {; ~9 _, A$ M3 wissue = "你有异装癖么") @9 f6 r5 ?9 e5 T. y
+ ?3 ~5 J, \1 `6 n. z8 Q9 e
val = issue + n.to_s
/ T$ k) K4 q' C, w) L, k  i2 E
# j7 |3 W+ T& Mret = Digest::SHA256.hexdigest(val)7 ?1 Q6 I/ a1 c- Q" t. L5 C

" o/ q4 f# E8 Z8 X0 n7 P8 zif ret[0..3] == "0000" #判断hash值的前4位是0么. Z2 D5 G7 F# J& |' `/ g

: E9 i* h7 O8 H4 C   puts val( T& m$ M$ F4 z
+ A' |8 r: c! D' S, h2 ^  ^0 n6 K
   puts n
- k! R+ G% R# [& Q7 k( n7 V
9 I, r% F6 d4 f5 r1 H  \+ k7 j) d   puts ret) u+ H* L& p2 m0 Z% l' u1 t

( H9 ~* T9 i& E% _7 n) O( ?   break% D2 e) S+ t7 k
! w+ Z! u$ T  z5 F* ?, w7 L
end
! b( I1 A# b5 L/ T( o, w
4 Q/ ~* w8 g" }; Y8 N2 h) kend
. v/ q: S& \9 p$ t- j
1 @7 p* K  H  V8 T' P#你有异装癖么3699
9 B7 I8 M0 I0 H/ R% s0 |
9 m5 v' v" ?2 [6 S5 S3 a$ u- b#3699
* A4 B1 f. p3 d1 t$ |
; v( }4 A- u  F4 ^5 V  c8 k#00007ed47ec0280ca933ed5dc9396892fee27c9dbec9c07f95f0247169df1bee
' I" [! o8 ~9 j5 r( t# J" h3 M; x& }# x$ q2 |  ^
得到 3699,/ S# m6 e" D- F+ o8 F1 B5 c% l& w
+ L' g8 F# f2 ~
Digest::SHA256.hexdigest("你有异装癖么3699")的结果符合前4位是0.
3 r! ]4 F! j7 t0 @" J+ T3 ^8 _$ C. E1 P- j+ |( w6 O$ p
你把问题 你有异装癖么3699给我, 我通过验证, 就回答这个问题.
2 e) Y' y$ C' F( q
% t" Z% }* C# G2 I你有疑惑了, 为啥要从 [1,10000] 这个区间顺序计算呢?
( j9 `1 w- M7 `6 S4 ~* s! c( o) w
不能随便从一个数字算么?; C( p  J+ Q; y, T! S4 ~0 p

7 K8 j  s7 _0 L因为hash运算的结果是无序的, 而且不能进行逆运算, 顺序计算比较方便, 没有遗漏. 通过这个方式得到的自然数, 也是符合游戏规则的最小自然数, 因为是顺序计算的啊; }! ^2 Z2 L7 }0 S0 J  z& L1 c

  k9 [2 {9 Q; u& E嗯的, 在回到这个游戏, 大家都遵守这个规则, 我也在回答这个问题,; k' X2 I  Y3 s! B0 l8 m( K
( S) z4 G  R& ]7 b9 ?! i3 H# V
又过了一段儿时间, 需要回答的八卦问题还是太多了, 我吃不消了,囧.
: f3 Q! }0 X& W" \  S! r
- p6 h3 \& {  C! ]4 E我定个新规则, 其他的不变, hash值前5位是0的, 我才回答.% A  N0 V" {+ T1 A+ L! E6 N/ U

5 v; o& N+ E4 |( \+ G& P, A然后继续运行, 到了我又吃不消的时候, 继续改, 前6位, 前7位, 前8位,, ~# A/ M! A( [( v- y- F0 H7 J3 O
) p; M% F8 O1 ^, w4 Y8 U3 Z
前n位是0.3 k; M8 ^% R; m. D& G) r
  L7 W) j( @6 v* H- A# q
如果你继续算下去, 你会发现, 算的时间会越来越长,我们可以说难度增加了. 有这样直观的感觉, 前几位是0的个数越多, 这个难度越大, 计算时间越长.1 E' u" S+ P' m" m" K# g/ s

  j' d# T( e4 t0 O难度到底有多大, 也就是时间到底有多长呢?  X3 B, ^! h3 d
: Q0 m" z* o) G* d% w( p- o' R+ c
我拿自己的 2014年款的 mac pro中款粗略算了下,语言是ruby,
# k" i* |2 R* l: g# u" U, G' y- l2 `$ z! T7 g  }8 j5 D# R3 F. D8 s) c
时间就是金钱, 这个时间还是比较可观的.% z5 e8 a0 n) }" y: D/ ~; [( K
$ |# ]: x1 S& \2 O" L8 N5 }
Digest::SHA256.hexdigest("shooter36")      #04b4ee0f1b56950f1f9880d076b7449c66705d5712a939a36a49d9973dd50ab3    2ms4 e8 A# t2 s9 Q! A- X- I* q

( G6 L1 V3 P" r( \" _Digest::SHA256.hexdigest("shooter578")     #002bae033279e48835e9a3c8b71a6835bf171a202b700a10ba4bd63710bfcb49    15ms( Z8 Z* g! P+ a1 i
- y' Y+ O; P5 s, k
Digest::SHA256.hexdigest("shooter4434")    #00072b50cc7963a310962af33efcd5109cdfb6ac633ce6bb275ce243f3ec247b    406ms9 o, u% m1 G% T& C" I  L) ]& ~

+ c' g  s, j, S$ p( dDigest::SHA256.hexdigest("shooter35786")   #00002d8c31f6eb29d848cdf520b499cd9f729b1d4d037275d82935b7766eaa3e    4309ms& k' H$ ]* k5 h2 D: R
+ K" ^0 z) r* v; }  I3 J, Q3 e2 W
Digest::SHA256.hexdigest("shooter717095")  #00000178662b978d8d7cf930a1caceae70f097354b4fe6423eef2a45ccfb9ce7    82468ms
* B3 t% V4 \7 [8 a% e% k) S
5 H+ E6 u3 K) J0 V1 A9 pDigest::SHA256.hexdigest("shooter2038373") #0000001ef511d494ecdddcd2abfded0a34df87a9c76410452e01e0a2958bf0a5    272266ms
' r+ m" v( v: q6 x
8 s: f3 b6 @4 y3 S. X, ]! \+ ?: ?) l, o说了这么多, 这个游戏规则其实就是POW.: q, K, W) v- @' c- X, m3 H
+ a) J3 s7 Y5 M; L
用到bitcoin上,无非是要替换些东西, 八卦问题 => bitcoin需要的数据,4 R1 y1 u+ @! B. O5 U) F/ I0 G
8 ?2 S8 ]1 @4 q% Z* g: m
替换bitcoin需要的难度. 理解这个思想很重要, 别的细节慢慢聊.9 O; t0 V' ]5 y7 A2 W
# Q6 r- X; e, a2 r$ M5 p. j7 v3 p
bitcoin系统的难度有多大呢?
# J& f; i' O3 F+ O4 z
* o" ]" o( a/ o块高度477,360 的hash 000000000000000000e8af89716e0ea8a2aa7c7b789935e98f0a32a4a319247f有18个0.
2 j( f# J5 g; N1 o2 {7 v
( a# {0 X4 ~3 P- e6 a$ gNonce 是十六进制的0x71eee8ca,即算了 1911482570次, 可以试试用一般的笔记本计算19亿次hash需要多长时间.
3 D' w$ I7 P) r2 e9 p) c: b* ], A+ ^% O1 o# Q
POW有什么特点呢?; g/ o% L8 C; Q; ?' }3 w

6 o2 ~: y  M' L, U3 C  K1 运算不可逆, 就代表谁也不可能偷懒
# X& K" Q6 o' Y8 c4 D+ T$ b' b% T( s  y9 L  Q. T; \' L3 U+ |; x
2 每个值的hash都不一样, 意味着不同的问题都要算,  换个新问题, 就要重新算.7 M) n& }$ c" }4 ]* w, g

4 I8 [3 n" S; p( e4 H1 D& I( Z& K3 你算起来很费劲, 花费时间长! O, n% l2 Q- f" p- O  s
7 ~( H' j, J+ V  F7 S
4 我验证起来很简单, 把结果hash一下, 符合规则的我就回答, 不符合的抛弃7 m- {  a8 X. Z6 }8 L& Q
3 ~' T" H5 s- x  Y) F1 t
5 这个规则实现还是比较简单的$ C# j3 K) N* `
  ?. [8 Q& g- K$ b/ Q$ B
结果就是 遵守游戏规则的人很艰难的算出一个结果,会很珍惜,因为你付出了很多的计算资源跟时间, 你希望我能认可你的努力.
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    38