Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

bitcoin与工作量证明

卡扎菲偶遇拉登
165 0 0
挖矿的时候需要经常听到一个词 工作量证明 , 即Proof Of Work,简称POW.) F$ v5 \/ P7 @) N) j0 i3 L

3 P- \: p; V) W/ aPOW是个什么鬼, 我们先抛开这个概念, 玩个游戏.
' ~- y1 z6 g2 X$ b( {/ H9 t
2 h/ F2 r6 }; d. o: P假如有很多人喜欢问我很八卦的问题, 但我只想答有限的几个,
1 @/ Z6 h- k, Q" P  d" }! `
0 H$ t9 x, p$ c3 L, B* s# ~: M那让谁答呢? 我出个游戏规则:$ n( Y+ O3 f' R$ R& t$ d

. C% Q( M5 E* Q  h4 a) \0 I+ X1 先把问题列出来, 重复的问题我不回答啊
4 a& O* u1 o" o! a6 Z, R2 o
9 X8 t  D/ [, H& P/ s3 U0 r你有异装癖么  v  a3 s: S2 T- D) r# h

: f; B& c/ s4 E6 C, y2 做hash运算, 就做sha256吧
1 T: P( D' t& z) q$ [5 l" J
# M; o3 D5 N+ L3 D. Vrequire 'Digest'# [# }2 k" z4 U6 x* {

" a5 w1 z: U. o& A$ NDigest::SHA256.hexdigest("你有异装癖么")  M! I8 |! s3 a( j& {: |* u
5 j4 v5 N1 o, _8 I7 Y- n8 x
得到4f65c9ca420e5f191d9f2730c4f99c7fe8f2301a431bade918de9d38f7401a4e; f! N$ V7 l4 D

% H2 F2 A# T3 U# K0 t3  计算hash值, 这个难度太低了, 身边的一堆程序猿都会算.
3 A* ]3 Y) ^  Y, e5 h, Q
5 x: m/ P- |3 E( N  E( h8 d( @我希望 你的问题 加上一个自然数,合并成一个新的字符串,再做hash运算, 得到新的hash值, 使得新的hahs值前4个都是0, 并且这个自然数是最小的, 那好,我就回答你的问题.* Z+ [% p  t+ F4 N) x6 W; K
) Z+ c2 @( r* g
一言不合就撸码; ?& i0 p8 ?1 n/ F
6 s  O0 N$ T* c0 N- C" T2 J
require 'Digest'
, u, ?, k; K0 V$ u& L3 B
- m  j. n$ k9 c* o, d, j3 D10000.times do |n|- Y3 |. A5 b& N
( ?8 W  l" w9 o  F; i2 T
issue = "你有异装癖么"
# r# Y. ?* C/ S  k  I& j. w, n$ V8 |( R' m) k* V
val = issue + n.to_s. z5 N/ f! ~* j' E

' y8 J: j" B6 X6 K3 Iret = Digest::SHA256.hexdigest(val)
* o$ Z* q! T! D8 P5 W! ^; X" H1 i
( j- X7 m9 ~7 B/ Sif ret[0..3] == "0000" #判断hash值的前4位是0么
! J  m  N; N7 Z0 U6 j& n  U. n/ V4 d! o, F, q6 B% {' |7 m
   puts val: x* R% V) x% ^: A% W5 z7 R/ O7 {
- R) g  ?3 ?0 ?  i1 ~% O# W$ u
   puts n: J# R$ N1 e% i! k3 V! R

& I( E1 y& A$ e" X: p' G" u- W- K   puts ret3 D+ K4 O3 @% z9 Z' |: k4 N# W
& W5 n! c! _6 X0 p1 C
   break
" V2 S5 G' [  t' _7 \2 e1 @; d* X( h5 k1 m% h/ l4 r
end( n! c' h1 q: a/ E

- c: B( ^: ?# k, T# o+ jend7 {* G% U! L# T
2 ?: G* T# ]9 z1 v* |
#你有异装癖么3699
' {! g+ ~" N% H$ R
3 i9 S$ U& _& v+ z) V# b#3699! `/ f1 ?4 S" P) b; C* _

$ j5 K6 k( {3 g! g  I$ \#00007ed47ec0280ca933ed5dc9396892fee27c9dbec9c07f95f0247169df1bee- c% R$ I  R$ s% }6 x/ T
( m# e% |& R6 u, Y+ ~
得到 3699,
2 @' c" O$ k  y1 K& Z( `
  i* c' ?8 C3 t0 w/ K, RDigest::SHA256.hexdigest("你有异装癖么3699")的结果符合前4位是0.
6 j+ ~/ p- t$ O3 x- s7 [7 v; _
% d  z. Y4 x  K) Z! F你把问题 你有异装癖么3699给我, 我通过验证, 就回答这个问题.
7 Y% T: P( C0 x& j! B' P- K5 Z" R7 O
你有疑惑了, 为啥要从 [1,10000] 这个区间顺序计算呢?
8 w9 O+ e4 \1 ?3 m+ g, u* D: O' X8 n$ F; g& i
不能随便从一个数字算么?
% L4 I- O. E' b& n$ P7 }! E. M; _* U6 Z9 X, g9 ~8 r
因为hash运算的结果是无序的, 而且不能进行逆运算, 顺序计算比较方便, 没有遗漏. 通过这个方式得到的自然数, 也是符合游戏规则的最小自然数, 因为是顺序计算的啊
2 Z3 }4 b) ~  r2 O/ z6 M; h- |% a/ t/ L7 }7 L6 E( w, X
嗯的, 在回到这个游戏, 大家都遵守这个规则, 我也在回答这个问题,
4 ^; X6 b; R) r& n( H6 Z% q
' ?! e- |4 d( s- Y; |又过了一段儿时间, 需要回答的八卦问题还是太多了, 我吃不消了,囧.
% u. b2 r# L  E; N+ Y
9 P3 {! Z* r- G) w: f4 u6 B我定个新规则, 其他的不变, hash值前5位是0的, 我才回答.$ p* X. _! F3 H4 U( ^
1 P7 V3 j/ n% c2 M! I4 w& k: Q) m! p
然后继续运行, 到了我又吃不消的时候, 继续改, 前6位, 前7位, 前8位,$ z0 Z2 T4 {5 j- z3 J( o

# @! q' }7 D$ L' f前n位是0.- |, n) V# j* u! y* w  E
; K' q$ L, T* Y% J9 \( V  r
如果你继续算下去, 你会发现, 算的时间会越来越长,我们可以说难度增加了. 有这样直观的感觉, 前几位是0的个数越多, 这个难度越大, 计算时间越长." }# R% }- {% \; p9 N4 h
9 N9 M/ ]- J: c9 s9 k- G
难度到底有多大, 也就是时间到底有多长呢?8 {4 k3 o' c; @' A

8 O8 R& u  U4 A& S. z) z我拿自己的 2014年款的 mac pro中款粗略算了下,语言是ruby,
, e: {$ |. C! t6 ], I% g1 C: {  y# A2 Z2 z  M8 t/ r* a: ?
时间就是金钱, 这个时间还是比较可观的.
/ A% h& Y, e! p* h8 R/ }
, u3 J1 _! u! c( U& rDigest::SHA256.hexdigest("shooter36")      #04b4ee0f1b56950f1f9880d076b7449c66705d5712a939a36a49d9973dd50ab3    2ms. }$ v' m3 ~& t: |& O

, S" _1 c5 C$ s1 aDigest::SHA256.hexdigest("shooter578")     #002bae033279e48835e9a3c8b71a6835bf171a202b700a10ba4bd63710bfcb49    15ms' f  U4 U. S2 T2 Q  b
! [# k6 G# D4 i( O) B' |% @
Digest::SHA256.hexdigest("shooter4434")    #00072b50cc7963a310962af33efcd5109cdfb6ac633ce6bb275ce243f3ec247b    406ms
- L9 [+ m& ~1 p. Q( z2 {6 W6 g) d3 @  C& i- f" Y
Digest::SHA256.hexdigest("shooter35786")   #00002d8c31f6eb29d848cdf520b499cd9f729b1d4d037275d82935b7766eaa3e    4309ms
( K  A) z. u+ K1 }( u8 L0 n# v2 T) B
$ j8 }5 G4 J0 q4 FDigest::SHA256.hexdigest("shooter717095")  #00000178662b978d8d7cf930a1caceae70f097354b4fe6423eef2a45ccfb9ce7    82468ms
5 v& ?# k# v! z/ [: w! H$ \* ?
" b0 @9 a4 N" q, KDigest::SHA256.hexdigest("shooter2038373") #0000001ef511d494ecdddcd2abfded0a34df87a9c76410452e01e0a2958bf0a5    272266ms
, s% X  U' b* W9 v" w4 a7 U" [  e1 h7 C9 d4 o
说了这么多, 这个游戏规则其实就是POW.  E/ G3 ~. A& y' Q

6 l9 h) t5 v+ b( s* e, E  _用到bitcoin上,无非是要替换些东西, 八卦问题 => bitcoin需要的数据,3 m4 T5 }8 ^5 l3 |; ]. ~% {& P
) @/ D2 w6 Q' g7 d$ ^0 R& T% U! A0 ^
替换bitcoin需要的难度. 理解这个思想很重要, 别的细节慢慢聊.
+ C1 t# W6 p( I/ J" S  r* M! A3 T
1 y) t$ ]2 S7 k) {; _, a$ dbitcoin系统的难度有多大呢?
0 e. q" l  y. F* \6 T. {
$ k3 F8 \+ I* Y% {块高度477,360 的hash 000000000000000000e8af89716e0ea8a2aa7c7b789935e98f0a32a4a319247f有18个0.
8 T5 ?) S3 _2 D. f3 I, n- R  g& w( g; ^! a) i) `0 ~/ c9 O: m( S
Nonce 是十六进制的0x71eee8ca,即算了 1911482570次, 可以试试用一般的笔记本计算19亿次hash需要多长时间.
6 a+ Y5 y; I4 g3 F1 M. f
% ?1 S$ @5 n+ v6 |% Q; ~" lPOW有什么特点呢?
0 y& T; a! F# |6 @- w; f% ~
7 U  Z* }( `; M1 运算不可逆, 就代表谁也不可能偷懒
- H& H2 }7 x  w6 I# M2 t" }5 c, P& r9 f7 }9 @% V) }6 B4 h4 {
2 每个值的hash都不一样, 意味着不同的问题都要算,  换个新问题, 就要重新算.
' \( X) R. o# M0 d6 Z# \
3 p( k  e+ k0 y4 L3 你算起来很费劲, 花费时间长2 e# z( E- E3 A4 j7 T. q/ T! o# I

  i* q3 g6 b) C, |3 h8 I  M. M5 p9 a4 我验证起来很简单, 把结果hash一下, 符合规则的我就回答, 不符合的抛弃4 V+ [( O3 k. e9 }& ^" f  k! o! g

. }8 _+ i+ v- ~/ p$ `) J& r5 这个规则实现还是比较简单的) k8 m, k/ x- b% [$ X/ V; @" _" N

' }/ U, A. N3 b# F  `" l" o' I结果就是 遵守游戏规则的人很艰难的算出一个结果,会很珍惜,因为你付出了很多的计算资源跟时间, 你希望我能认可你的努力.
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    38