Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

bitcoin与工作量证明

卡扎菲偶遇拉登
72 0 0
挖矿的时候需要经常听到一个词 工作量证明 , 即Proof Of Work,简称POW.2 X  i, G. J3 |2 h' @3 ]

% B. a: z6 N/ S' p7 O5 D" q% O5 O' ePOW是个什么鬼, 我们先抛开这个概念, 玩个游戏.% z8 p) }8 g/ T5 N# @7 }

2 ^9 v' e9 G  T% H1 E+ b假如有很多人喜欢问我很八卦的问题, 但我只想答有限的几个,1 d' k& v# o" `6 c4 K0 E1 w1 f; C

, l7 c3 I/ a% O8 N+ D: J# \那让谁答呢? 我出个游戏规则:7 L5 f5 n& Z. ?4 R) w/ K0 ~

, ?5 E4 `) z* M, w& m# b9 e! N4 n1 先把问题列出来, 重复的问题我不回答啊
) Q- g) P! ~- ?+ s" y  f' T* ~" S9 S; {
你有异装癖么7 g8 o+ X: x# I5 {0 Y9 _( l0 G4 J( d
) u0 W# O5 Z. P
2 做hash运算, 就做sha256吧
5 z) l! D/ _7 s( I* L; O
- C3 M; L: O9 A7 d' z2 Z+ qrequire 'Digest'
! c% n. `, x* J! W7 o
; G, d! S- [8 X! `7 J. RDigest::SHA256.hexdigest("你有异装癖么")/ C- L0 {* O0 {/ B: Y4 h  [
9 X) T% |% L/ p, R: q
得到4f65c9ca420e5f191d9f2730c4f99c7fe8f2301a431bade918de9d38f7401a4e
+ h9 D3 `* L: h" a/ c7 E- Y- H  Y" c$ A. ~6 L4 K
3  计算hash值, 这个难度太低了, 身边的一堆程序猿都会算.
1 l0 U! e% P6 I1 Q+ @5 k) {) J3 `6 s% x7 _0 t8 @# A/ C+ U
我希望 你的问题 加上一个自然数,合并成一个新的字符串,再做hash运算, 得到新的hash值, 使得新的hahs值前4个都是0, 并且这个自然数是最小的, 那好,我就回答你的问题.
; g9 g/ {4 x5 j' X8 y4 z$ z8 Y& u# T( a/ F2 [
一言不合就撸码4 E3 V# U) O* v8 r2 b- c! K3 j
& c) O; T5 D2 H
require 'Digest'( B  K0 P3 d6 I; R/ U$ J/ P" p7 c

! P+ T; D8 [& x7 a" t& Z% P$ f; E10000.times do |n|
, P+ B) V5 j+ P. O6 A& n% D( v# B( |0 T! J( q' \% H% w1 z
issue = "你有异装癖么"
6 U4 }5 h' B, T2 C4 t: R$ h+ ]3 @, l5 Y8 b: j" i
val = issue + n.to_s2 e- ?- Y' R% |, n5 z
/ \! v4 J+ ~, `/ c2 i! b) M, q
ret = Digest::SHA256.hexdigest(val)
: h+ U8 w! w+ m5 g, k8 J& r# L/ }" s1 z
if ret[0..3] == "0000" #判断hash值的前4位是0么( q! }' X3 {! v( V- L7 V
  Z9 h5 Y* w+ v$ M6 p' a$ i
   puts val
. @# b6 R& J* Q9 J/ I- E3 o
5 _1 A: z2 Q* d0 B5 K2 r   puts n
" j! C9 ]- U: Q  u1 I# x' t0 O7 E+ ?- ?; f9 c
   puts ret
- A1 i9 D9 @0 r  D3 N# t# r7 G  T' P2 A- _
   break
" r: l/ Q' T0 g1 |2 i( m- w
/ F3 U1 h! i  zend5 y. G6 p3 K" c  K* I9 F8 b
/ w4 i8 v* M3 t. z8 _
end
8 M1 v: I1 Y: z, _3 x& E6 E6 ~  @+ D" u+ v/ h2 t
#你有异装癖么36998 [. `: f1 `& q% W2 d  ~6 ?
* b6 U5 y% K2 g. g
#3699% C  h9 j3 n( Q5 |% `9 R5 S, u

' \* F& `) l( \/ `/ m0 b#00007ed47ec0280ca933ed5dc9396892fee27c9dbec9c07f95f0247169df1bee
3 ]0 {/ S$ X# N
* _8 B% S7 {' N4 b/ u( N得到 3699,
# G9 ~8 k1 V8 M# t# l6 s
2 d) T0 A8 ]9 ]1 v7 l! t8 x2 UDigest::SHA256.hexdigest("你有异装癖么3699")的结果符合前4位是0.! v8 B! Z% k) h- e) N! L

$ _4 Z- S2 f3 l' P1 B& ]你把问题 你有异装癖么3699给我, 我通过验证, 就回答这个问题.
( T9 a4 i# r8 p3 t" f7 [! j
% m- e/ `: H: U. ]你有疑惑了, 为啥要从 [1,10000] 这个区间顺序计算呢?
+ T. a3 m( j! Q4 M8 N' L* l1 [0 V. U2 `; E
不能随便从一个数字算么?
$ {: Y( n1 Q5 o! [! M* T, Z& s; ^8 V% t* X! M% g& x3 ~* f- k
因为hash运算的结果是无序的, 而且不能进行逆运算, 顺序计算比较方便, 没有遗漏. 通过这个方式得到的自然数, 也是符合游戏规则的最小自然数, 因为是顺序计算的啊
6 V' L- f9 @) e+ A' w
3 d1 p* Y5 m) s3 [) O, {嗯的, 在回到这个游戏, 大家都遵守这个规则, 我也在回答这个问题,7 k0 e+ M/ O/ z

) b# f4 X9 X: ^  p9 y; B0 E: W又过了一段儿时间, 需要回答的八卦问题还是太多了, 我吃不消了,囧.# k: v3 ^# t& [
. k/ _! [1 w  B3 C& A, ~
我定个新规则, 其他的不变, hash值前5位是0的, 我才回答.+ g- P6 _  @" f( _0 r, O$ d
! G. `( ^  C. b) D9 r
然后继续运行, 到了我又吃不消的时候, 继续改, 前6位, 前7位, 前8位,
8 U1 r6 ~4 {1 T4 K
! w4 `0 p" ~* O/ d2 ^& O前n位是0.
) x1 [# b5 }0 _) h
' W- B* V4 w1 \. l9 {% i- F如果你继续算下去, 你会发现, 算的时间会越来越长,我们可以说难度增加了. 有这样直观的感觉, 前几位是0的个数越多, 这个难度越大, 计算时间越长.' T8 C, {( F) c
; E; S  ]- s5 L
难度到底有多大, 也就是时间到底有多长呢?
: `6 D' B+ T$ U% m+ L" E
4 s2 r' v* y+ m" X8 o$ V# c我拿自己的 2014年款的 mac pro中款粗略算了下,语言是ruby,
6 j0 d! D' ^' U7 p9 D2 v0 z' V3 D0 a  [# S
时间就是金钱, 这个时间还是比较可观的.
# a% ], r4 c7 G" R/ V: L! z" f% M0 p+ ^2 R* z$ l8 L: i
Digest::SHA256.hexdigest("shooter36")      #04b4ee0f1b56950f1f9880d076b7449c66705d5712a939a36a49d9973dd50ab3    2ms
# H  Z1 `+ o* y" n
+ v2 n4 k6 K" ]  _2 tDigest::SHA256.hexdigest("shooter578")     #002bae033279e48835e9a3c8b71a6835bf171a202b700a10ba4bd63710bfcb49    15ms0 k( z/ v$ `2 Q
6 w) U1 E2 [, E
Digest::SHA256.hexdigest("shooter4434")    #00072b50cc7963a310962af33efcd5109cdfb6ac633ce6bb275ce243f3ec247b    406ms: f9 Z" t  D& ]/ @( a
' v* O8 U! E  |! G6 X
Digest::SHA256.hexdigest("shooter35786")   #00002d8c31f6eb29d848cdf520b499cd9f729b1d4d037275d82935b7766eaa3e    4309ms' m, M- D  J2 c
" R7 g: U% Y, C7 c% l
Digest::SHA256.hexdigest("shooter717095")  #00000178662b978d8d7cf930a1caceae70f097354b4fe6423eef2a45ccfb9ce7    82468ms' h$ i/ y3 k  A* B6 V  }; }3 q: I

! E* N% k) D1 s: vDigest::SHA256.hexdigest("shooter2038373") #0000001ef511d494ecdddcd2abfded0a34df87a9c76410452e01e0a2958bf0a5    272266ms
2 U- F0 m$ U5 M7 w9 o, e# e9 E
4 @( {% y2 w8 ~" [: i  A( h; O说了这么多, 这个游戏规则其实就是POW.
. o$ R8 l$ s6 }! @: o. n) h0 E0 T, S- I% }1 ]2 ?  B* s; t
用到bitcoin上,无非是要替换些东西, 八卦问题 => bitcoin需要的数据," c$ W8 P0 H5 {

3 }) m. z! @( K+ U替换bitcoin需要的难度. 理解这个思想很重要, 别的细节慢慢聊.
/ H0 w0 F$ C/ g+ a, t6 h# I+ V4 f
, D2 I0 ?! }+ L# h# vbitcoin系统的难度有多大呢?% F% V. F7 z: @5 P+ i, t7 d+ D
. g: X. k/ \2 [$ m" \2 i
块高度477,360 的hash 000000000000000000e8af89716e0ea8a2aa7c7b789935e98f0a32a4a319247f有18个0.
' `3 n- w  ^2 u7 `" S0 o6 {, k+ n7 U- a! t
Nonce 是十六进制的0x71eee8ca,即算了 1911482570次, 可以试试用一般的笔记本计算19亿次hash需要多长时间.2 a3 H8 A+ u7 m, x

: D: Q" a8 J* N- w3 d* h& @POW有什么特点呢?
" A% W* f2 u0 }6 g) ]! t7 W& W8 z" Y: p( `1 J7 {9 r
1 运算不可逆, 就代表谁也不可能偷懒
6 e* L: N% E! w) t/ Y" S1 M
' W! I7 i0 j6 m* o" o" Q& D  u2 每个值的hash都不一样, 意味着不同的问题都要算,  换个新问题, 就要重新算.
; V( |, I$ p5 L3 s* \7 y' C* N
0 z2 D) ?! u& O2 }/ j9 ~! t6 E5 Q& C3 你算起来很费劲, 花费时间长
. B2 Y/ ?4 ~, ]  W4 x" a" R' L2 F. j  R$ P7 k0 t
4 我验证起来很简单, 把结果hash一下, 符合规则的我就回答, 不符合的抛弃
5 d* Z/ q# p$ H
# w' `& J7 C( v' F% B$ S5 这个规则实现还是比较简单的
+ e' J5 }, m3 e: `" ]' r; c2 n0 Y" {* }# v4 _* E
结果就是 遵守游戏规则的人很艰难的算出一个结果,会很珍惜,因为你付出了很多的计算资源跟时间, 你希望我能认可你的努力.
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    38