Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

bitcoin与工作量证明

卡扎菲偶遇拉登
48 0 0
挖矿的时候需要经常听到一个词 工作量证明 , 即Proof Of Work,简称POW.0 a# E' ~! D6 r6 J* E" X7 N

/ r6 m8 X7 ]9 S* SPOW是个什么鬼, 我们先抛开这个概念, 玩个游戏.+ }( f  s9 K7 Y$ S/ C* N. W
' r! K& B- Q& C/ H4 L% H
假如有很多人喜欢问我很八卦的问题, 但我只想答有限的几个,1 u# p9 [5 |/ A, w! Q9 E6 k

$ Z4 J) F( p. \1 w9 i2 k那让谁答呢? 我出个游戏规则:
% o' a9 e& _3 D% o8 O3 D0 U* v6 j1 X; p) y
1 先把问题列出来, 重复的问题我不回答啊. T2 c# }- h! o2 h! I  ~
/ u2 k# U) i* ?/ @6 h1 F
你有异装癖么
! I2 t; I8 n; o" k5 n: Z- {* [
$ m4 v! N6 y/ s2 做hash运算, 就做sha256吧2 F% h3 x- s  T* @& h3 f# X$ y! N

- ^. W  R& C  m8 _' s. lrequire 'Digest'
3 F$ c* @9 f# d/ @
8 ?2 @6 B% V7 T- EDigest::SHA256.hexdigest("你有异装癖么")8 z! l: }) Y$ o9 G0 j: `# [

$ s5 M6 I6 i) ^3 W/ I得到4f65c9ca420e5f191d9f2730c4f99c7fe8f2301a431bade918de9d38f7401a4e+ f3 l& I) _+ D. k0 b0 u  _

. p9 h; T- U  @* Y3 A( d* j: D6 o4 D3  计算hash值, 这个难度太低了, 身边的一堆程序猿都会算.
2 y" K4 y- x' d" o! l, `- e2 f, f! [; f6 j6 ^- C
我希望 你的问题 加上一个自然数,合并成一个新的字符串,再做hash运算, 得到新的hash值, 使得新的hahs值前4个都是0, 并且这个自然数是最小的, 那好,我就回答你的问题.4 M" ^( _1 ?: ?7 o
% L( R& B/ O& Y+ ^
一言不合就撸码
& u6 i! E2 z' b% U% E
" _: z4 z% Y- g& w  V5 mrequire 'Digest'
8 i1 A$ U6 d5 ]5 d
( w$ r4 |2 ?( w- K( Y& b8 C1 V10000.times do |n|/ ?9 N) |2 `0 Z& K5 W# G* f6 d
* k" z4 C. S* b- @
issue = "你有异装癖么"+ b2 b# ]5 Z! C/ `

# B7 l% a. y! k0 b6 d" N8 `val = issue + n.to_s6 z) |' \  q4 ?$ B  D) i

/ ?! m8 v. H3 B$ ]' o$ Cret = Digest::SHA256.hexdigest(val)' F3 t' e4 r# B' s1 K, B2 |1 {

/ d+ R0 ^8 B% r: x6 X1 eif ret[0..3] == "0000" #判断hash值的前4位是0么
- x6 C) x7 l% w- r$ n+ P% |* b5 K# }
5 c/ \4 ^" a3 L; S0 E. c- \   puts val5 z" \& j. l3 ~( M, q* h+ r
4 {3 _# h( k: N1 `( C* q# @( t, [
   puts n7 G! Y' d3 ~9 w

, |& ?0 |& L" u. N( x   puts ret8 |( i  ^! y$ E9 V1 `8 S8 x
- o! D( ]8 O4 m# V. g# d( ~, D) w
   break: D+ E: C7 ~7 B
- t  q1 {4 N6 _+ M# v
end
- e2 t0 t* v. P5 i' C
4 D. I; V8 L) h" V5 `end, c3 V2 Y" ]- Y- H
% T$ ?# N, v; A( Y1 ?
#你有异装癖么3699' r3 M+ U# k; D3 N3 B  T% \

" E1 e& X7 F( y4 N#3699
' R0 _$ Q# l, Q: F$ C9 i$ _) G8 z" _6 v' |" m3 R8 s" `
#00007ed47ec0280ca933ed5dc9396892fee27c9dbec9c07f95f0247169df1bee
( E; x6 A" X" z+ f& P1 C; f. Z% |1 v1 @+ O3 ~, ~
得到 3699,
. |4 n  n6 Y: H+ R  {+ i4 l9 e8 |1 |# \) l! b/ O* I4 V0 d
Digest::SHA256.hexdigest("你有异装癖么3699")的结果符合前4位是0.
8 g" A6 T! R# E0 x) [5 T3 ^
9 H" k2 _9 Q: X( j( L8 X8 c你把问题 你有异装癖么3699给我, 我通过验证, 就回答这个问题.. Y; L3 g; p3 W: u0 t9 T! ?' R; }
, P; B) `1 x( ~* n+ l
你有疑惑了, 为啥要从 [1,10000] 这个区间顺序计算呢?
5 ^5 y' c8 e. @9 V7 I1 ~6 ?# L  Q0 J8 M8 N6 g) q
不能随便从一个数字算么?
( p  M, s5 L% R* _' U& {. T9 {
+ N" b( R! U2 u1 X* y  t2 o; i因为hash运算的结果是无序的, 而且不能进行逆运算, 顺序计算比较方便, 没有遗漏. 通过这个方式得到的自然数, 也是符合游戏规则的最小自然数, 因为是顺序计算的啊' [; z# Z1 j! @9 x0 m

% W# q/ e* U4 i! s嗯的, 在回到这个游戏, 大家都遵守这个规则, 我也在回答这个问题,- ^/ w; a, R( j0 s( r6 d

: \9 y; n* J  l+ |* J0 \+ ?又过了一段儿时间, 需要回答的八卦问题还是太多了, 我吃不消了,囧.
: K# @0 n$ Z" o. U0 S* r; b% h9 V: ?( O: u7 u4 A
我定个新规则, 其他的不变, hash值前5位是0的, 我才回答.' v8 J8 ^$ n- G. b* a& N

) q# g* e: R. z然后继续运行, 到了我又吃不消的时候, 继续改, 前6位, 前7位, 前8位,
, Z3 G. h5 u! M) K2 r, k1 u) y) P% H& a6 R, g
前n位是0.
% b1 M5 l; O2 O- `3 v- o) r9 L; f: _0 z. z+ Q
如果你继续算下去, 你会发现, 算的时间会越来越长,我们可以说难度增加了. 有这样直观的感觉, 前几位是0的个数越多, 这个难度越大, 计算时间越长.# {) {9 H$ M3 ~
! c4 d6 f) K" l/ j5 x* ~! \
难度到底有多大, 也就是时间到底有多长呢?
1 b7 n* u5 H, l2 T$ _; R" p* g; c# N( k) K
我拿自己的 2014年款的 mac pro中款粗略算了下,语言是ruby,
. S! E8 h/ i1 x3 B. r: v" ]2 R. S5 e  D0 W4 r
时间就是金钱, 这个时间还是比较可观的.' E% q  K; z4 W% L4 w. t

+ a* U0 E, c* `7 t# dDigest::SHA256.hexdigest("shooter36")      #04b4ee0f1b56950f1f9880d076b7449c66705d5712a939a36a49d9973dd50ab3    2ms/ H2 _( m. u& q- L

$ ^4 y4 z. U. eDigest::SHA256.hexdigest("shooter578")     #002bae033279e48835e9a3c8b71a6835bf171a202b700a10ba4bd63710bfcb49    15ms
% G& h$ J9 T! r  {) W& [' k
3 X* e2 H% H3 H& P; m6 u( aDigest::SHA256.hexdigest("shooter4434")    #00072b50cc7963a310962af33efcd5109cdfb6ac633ce6bb275ce243f3ec247b    406ms
& s$ q3 u7 x' G% X" Y$ k; J& g& n8 U9 Z  Z/ E3 w
Digest::SHA256.hexdigest("shooter35786")   #00002d8c31f6eb29d848cdf520b499cd9f729b1d4d037275d82935b7766eaa3e    4309ms
; }$ Z( {, |3 w9 y( a0 P
2 F' S* _. W+ A' `3 oDigest::SHA256.hexdigest("shooter717095")  #00000178662b978d8d7cf930a1caceae70f097354b4fe6423eef2a45ccfb9ce7    82468ms
- b2 ~! q' Z0 H/ e% [$ W3 v+ A3 k+ J! t; c! t- K
Digest::SHA256.hexdigest("shooter2038373") #0000001ef511d494ecdddcd2abfded0a34df87a9c76410452e01e0a2958bf0a5    272266ms
$ ?# E, l; n. p2 M
+ I+ G; z- L* p% {- D说了这么多, 这个游戏规则其实就是POW.
8 X7 S1 h. A' N0 }0 F
: p; q# Q/ ~. _" i/ k) l. R用到bitcoin上,无非是要替换些东西, 八卦问题 => bitcoin需要的数据,
! g! ], u; ?/ k# p/ [
, f% E! ^$ E( r! }替换bitcoin需要的难度. 理解这个思想很重要, 别的细节慢慢聊.
8 N+ v* Y" t: n6 r. o: _0 i; S/ }8 g
+ Y) G& e  q& B! [4 ybitcoin系统的难度有多大呢?
8 h) U# D# |6 Q3 E: {# [* m% F. g( v& x% [7 m8 J
块高度477,360 的hash 000000000000000000e8af89716e0ea8a2aa7c7b789935e98f0a32a4a319247f有18个0.% }) Z8 c' }0 k; X5 o1 p
( n* J5 j2 U! [' ^
Nonce 是十六进制的0x71eee8ca,即算了 1911482570次, 可以试试用一般的笔记本计算19亿次hash需要多长时间.
6 A/ |* _, o' j2 k7 G- ?" j. d2 o( w% p* G3 a7 r: A
POW有什么特点呢?
/ Q: V6 V/ O. d/ l: F$ E" N3 t& Z0 [& ~  B; w3 u7 G; z
1 运算不可逆, 就代表谁也不可能偷懒1 y3 y$ S. O( [) z5 R

% p/ x; R+ ]" b# o' b9 k2 每个值的hash都不一样, 意味着不同的问题都要算,  换个新问题, 就要重新算.8 o8 n: g8 f2 K% i' J, h5 g" b
( D2 {5 R. ]' a$ Y* d
3 你算起来很费劲, 花费时间长2 ?2 |/ r4 `1 b
5 j9 \' y9 E; E6 x7 B& h  [& @
4 我验证起来很简单, 把结果hash一下, 符合规则的我就回答, 不符合的抛弃
. o; I4 \2 a5 [1 R9 N, ?
* v  ^; f) E/ m' F9 v# s5 这个规则实现还是比较简单的
' |( }1 j2 Q# B$ D7 k
* w( U8 }( b" K, n& E+ A结果就是 遵守游戏规则的人很艰难的算出一个结果,会很珍惜,因为你付出了很多的计算资源跟时间, 你希望我能认可你的努力.
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    38