第一章區(qū)塊鏈基本原理

區(qū)塊鏈的起源

創(chuàng)始者介紹

姓名:中本聰(英語(yǔ):SatoshiNakamoto)篡腌,自稱日裔美國(guó)人,日本媒體常譯為中本哲史聋袋,此名是比特幣協(xié)議及其相關(guān)軟件Bitcoin-Qt的創(chuàng)造者盗痒,但真實(shí)身份未知抠艾。

中本聰于2008年發(fā)表了一篇名為《比特幣:一種點(diǎn)對(duì)點(diǎn)式的電子現(xiàn)金系統(tǒng)》(Bitcoin: A Peer-to-Peer Electronic Cash System)的論文纫塌,描述了一種被他稱為“比特幣”的電子貨幣及其算法诊县。2009年,他發(fā)布了首個(gè)比特幣軟件措左,并正式啟動(dòng)了比特幣金融系統(tǒng)依痊。

2009年1月3日,比特幣的創(chuàng)始人中本聰在創(chuàng)世區(qū)塊里留下一句永不可修改的話:
“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks(2009年1月3日怎披,財(cái)政大臣正處于實(shí)施第二輪銀行緊急援助的邊緣)胸嘁。

2010年,他逐漸淡出并將項(xiàng)目移交給比特幣社區(qū)的其他成員.

中本聰生日八卦

注冊(cè)生日:1975年4月5日

4月5號(hào)在貨幣史上是具有重要意義的一天凉逛。在1933年的這一天缴渊,美國(guó)總統(tǒng)弗蘭克林·羅斯福簽署了政府法令6102,法令規(guī)定所有美國(guó)公民持有黃金是非法的鱼炒。

1975年,福特總統(tǒng)簽署“黃金合法化”法案蝌借,美國(guó)人可以再一次合法地?fù)碛悬S金昔瞧。

先有區(qū)塊鏈還是先有比特幣?

比特幣面世之初是沒(méi)有區(qū)塊鏈的概念的菩佑,但比特幣確確實(shí)實(shí)是基于底層區(qū)塊鏈實(shí)現(xiàn)的自晰。區(qū)塊鏈?zhǔn)呛髞?lái)人們對(duì)于比特幣底層的認(rèn)可而提取出來(lái)的概念。

從技術(shù)上看區(qū)塊鏈

  • 任何人都可以看到所有的源碼稍坯。tips:比特幣源碼Github地址
  • 任何人都可以下載完整的賬本酬荞。
  • 整套系統(tǒng)沒(méi)有任何防火墻。
  • 即使全世界大部分的網(wǎng)絡(luò)出現(xiàn)了故障瞧哟,仍然可以運(yùn)行混巧。

區(qū)塊鏈運(yùn)行機(jī)制(未總結(jié))

tips:1字節(jié)=8位二進(jìn)制=2位16進(jìn)制

哈希算法

特點(diǎn)

  • 輸入長(zhǎng)度不固定,輸出出長(zhǎng)度固定:任意長(zhǎng)度的輸入勤揩,都將會(huì)得到固定長(zhǎng)度咧党。
  • 輸入敏感:原始輸入信息修改一點(diǎn)信息,產(chǎn)生的 hash 值看起來(lái)應(yīng)該都有很大不同陨亡。
  • 逆向困難:給定(若干) hash 值傍衡,基本不可能逆推出明文。
  • 沖突避免:很難找到兩段內(nèi)容不同的明文负蠕,使得它們的 hash 值一致(發(fā)生沖突)蛙埂。
  • 用于信息壓縮,并判斷信息是否變化

常用哈希算法

  • MD4, MD5.
  • SHA-1, SHA-2.
  • RIPEMD-160.

SHA256

SHA256簡(jiǎn)介

SHA256算法中SHA256是SHA-2下細(xì)分出的一種算法

SHA-2遮糖,名稱來(lái)自于安全散列算法2(英語(yǔ):Secure Hash Algorithm 2)的縮寫绣的,一種密碼散列函數(shù)算法標(biāo)準(zhǔn),由美國(guó)國(guó)家安全局研發(fā),屬于SHA算法之一被辑,是SHA-1的后繼者燎悍。

SHA-2下又可再分為六個(gè)不同的算法標(biāo)準(zhǔn)

包括了:SHA-224冶匹、SHA-256耕突、SHA-384符喝、SHA-512够掠、SHA-512/224延柠、SHA-512/256坊谁。

這些變體除了生成摘要的長(zhǎng)度爱榕、循環(huán)運(yùn)行的次數(shù)等一些微小差異外弃舒,算法的基本結(jié)構(gòu)是一致的臊诊。

回到SHA256上鸽粉,說(shuō)白了,它就是一個(gè)哈希函數(shù)抓艳。

哈希函數(shù)触机,又稱散列算法,是一種從任何一種數(shù)據(jù)中創(chuàng)建小的數(shù)字“指紋”的方法玷或。散列函數(shù)把消息或數(shù)據(jù)壓縮成摘要儡首,使得數(shù)據(jù)量變小,將數(shù)據(jù)的格式固定下來(lái)偏友。該函數(shù)將數(shù)據(jù)打亂混合蔬胯,重新創(chuàng)建一個(gè)叫做散列值(或哈希值)的指紋。散列值通常用一個(gè)短的隨機(jī)字母和數(shù)字組成的字符串來(lái)代表位他。

對(duì)于任意長(zhǎng)度的消息氛濒,SHA256都會(huì)產(chǎn)生一個(gè)256bit長(zhǎng)的哈希值,稱作消息摘要鹅髓。

這個(gè)摘要相當(dāng)于是個(gè)長(zhǎng)度為32個(gè)字節(jié)的數(shù)組舞竿,通常用一個(gè)長(zhǎng)度為64的十六進(jìn)制字符串來(lái)表示

比如:掙錢養(yǎng)家,改變世界這句話窿冯,經(jīng)過(guò)sha256加密后就是醬紫:2aa26a143a7ac201a7358eb089a91372a626031d17abe19af52d41d8c249e3f1

查看加解密網(wǎng)站點(diǎn)我

原理詳解

為了更好的理解SHA256的原理炬灭,這里首先將算法中可以單獨(dú)抽出的模塊,包括常量的初始化靡菇、信息預(yù)處理重归、使用到的邏輯運(yùn)算分別進(jìn)行介紹,甩開這些理解上的障礙后厦凤,一起來(lái)探索SHA256算法的主體部分鼻吮,即消息摘要是如何計(jì)算的。

常量初始化

SHA256算法中用到了8個(gè)哈希初值以及64個(gè)哈希常量

其中较鼓,SHA256算法的8個(gè)哈希初值如下:

h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19

這些初值是對(duì)自然數(shù)中前8個(gè)質(zhì)數(shù)(2,3,5,7,11,13,17,19)的平方根的小數(shù)部分取前32bit而來(lái)

舉個(gè)例子來(lái)說(shuō)椎木,√2小數(shù)部分約為0.414213562373095048违柏,而

0.414213562373095048≈6?16?1+a?16?2+0?16?3+...

于是,質(zhì)數(shù)2的平方根的小數(shù)部分取前32bit就對(duì)應(yīng)出了0x6a09e667

在SHA256算法中香椎,用到的64個(gè)常量如下:

428a2f98 71374491 b5c0fbcf e9b5dba5
3956c25b 59f111f1 923f82a4 ab1c5ed5
d807aa98 12835b01 243185be 550c7dc3
72be5d74 80deb1fe 9bdc06a7 c19bf174
e49b69c1 efbe4786 0fc19dc6 240ca1cc
2de92c6f 4a7484aa 5cb0a9dc 76f988da
983e5152 a831c66d b00327c8 bf597fc7
c6e00bf3 d5a79147 06ca6351 14292967
27b70a85 2e1b2138 4d2c6dfc 53380d13
650a7354 766a0abb 81c2c92e 92722c85
a2bfe8a1 a81a664b c24b8b70 c76c51a3
d192e819 d6990624 f40e3585 106aa070
19a4c116 1e376c08 2748774c 34b0bcb5
391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3
748f82ee 78a5636f 84c87814 8cc70208
90befffa a4506ceb bef9a3f7 c67178f2

和8個(gè)哈希初值類似漱竖,這些常量是對(duì)自然數(shù)中前64個(gè)質(zhì)數(shù)(2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97…)的立方根的小數(shù)部分取前32bit而來(lái)。

信息預(yù)處理

SHA256算法中的預(yù)處理就是在想要Hash的消息后面補(bǔ)充需要的信息畜伐,使整個(gè)消息滿足指定的結(jié)構(gòu)馍惹。

信息的預(yù)處理分為兩個(gè)步驟:附加填充比特附加長(zhǎng)度

假定原始數(shù)據(jù)為:01100001 01100010 01100011

tips:1字節(jié)=8位二進(jìn)制=2位16進(jìn)制

附加填充比特

補(bǔ)位第一步:01100001 01100010 01100011 1 在原始數(shù)據(jù)后面直接補(bǔ)一個(gè)“1”

補(bǔ)位第二步:0110000101100010 01100011 10…..0然后補(bǔ)423個(gè)“0”

注:

  1. 信息必須進(jìn)行填充,故填充是至少補(bǔ)一位玛界,最多補(bǔ)512位万矾。
  2. 補(bǔ)0的數(shù)量記為K,K的取值需要滿足下述表達(dá)式的最小非負(fù)整數(shù)值慎框。( 原始長(zhǎng)度L + 1 + K ) mod 512 = 448(512-448=64良狈,保證后面留有64bit存放記錄原始信息的長(zhǎng)度)

我們可以把最后補(bǔ)位完成后的數(shù)據(jù)用16進(jìn)制寫成下面的樣子

61626380 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 00000000

附加長(zhǎng)度值

附加長(zhǎng)度值就是將原始數(shù)據(jù)(第一步填充前的消息)的長(zhǎng)度信息補(bǔ)到已經(jīng)進(jìn)行了填充操作的消息后面。
因?yàn)镾HA256用一個(gè)64位的數(shù)據(jù)來(lái)表示原始消息的長(zhǎng)度笨枯,所以通過(guò)SHA256計(jì)算的消息長(zhǎng)度必須要小于2^64薪丁,當(dāng)然絕大多數(shù)情況這足夠大了。

61626380 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 0000000000000000 00000018

注意:原始信息長(zhǎng)度是24(十進(jìn)制)馅精,24轉(zhuǎn)化成十六進(jìn)制就是18

需要使用的函數(shù)

SHA256散列函數(shù)中涉及的操作全部是邏輯的位運(yùn)算


CH(x, y, z) = (x AND y) XOR ( (NOT x) AND z)
MAJ( x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)
BSIG0(x) = ROTR^2(x) XOR ROTR^13(x) XOR ROTR^22(x)
BSIG1(x) = ROTR^6(x) XOR ROTR^11(x) XOR ROTR^25(x)
SSIG0(x) = ROTR^7(x) XOR ROTR^18(x) XOR SHR^3(x)
SSIG1(x) = ROTR^17(x) XOR ROTR^19(x) XOR SHR^10(x)
其中x窥突、y、z皆為32bit的字硫嘶。
ROTR^2(x)是對(duì)x進(jìn)行循環(huán)右移2位。
SHR^3(x)是對(duì)x進(jìn)行右移3位梧税。
XORshi是異或 

注:

循環(huán)移位:比如我們有個(gè)1字節(jié)的數(shù): x =10111110÷偌玻現(xiàn)在需要對(duì)其循環(huán)右移4位。也就是最后結(jié)果為x = 11101011

右移:空缺部分直接補(bǔ)零

計(jì)算消息摘要

將消息分成N個(gè)512bit的數(shù)據(jù)塊第队,于是整個(gè)算法需要做的就是完成N次迭代哮塞,N次迭代的結(jié)果就是最終的哈希值,即256bit的數(shù)字摘要凳谦。

一個(gè)256-bit的摘要的初始值H0忆畅,經(jīng)過(guò)第一個(gè)數(shù)據(jù)塊進(jìn)行運(yùn)算,得到H1尸执,即完成了第一次迭代

H1經(jīng)過(guò)第二個(gè)數(shù)據(jù)塊得到H2家凯,……,依次處理如失,最后得到Hn绊诲,Hn即為最終的256-bit消息摘要

256-bit的Hi被描述8個(gè)小塊,這是因?yàn)镾HA256算法中的最小運(yùn)算單元稱為“字”(Word)褪贵,一個(gè)字是32位掂之。

此外抗俄,第一次迭代中,映射的初值設(shè)置為前面介紹的8個(gè)哈希初值世舰,如下:

        h0 := 0x6a09e667
        h1 := 0xbb67ae85
        h2 := 0x3c6ef372
H0=     h3 := 0xa54ff53a
        h4 := 0x510e527f
        h5 := 0x9b05688c
        h6 := 0x1f83d9ab
        h7 := 0x5be0cd19

迭代的內(nèi)容

  1. 構(gòu)造64個(gè)字(word):對(duì)于每一塊动雹,將塊分解為16個(gè)32-bit的big-endian的字,記為w[0], …, w[15]跟压,也就是說(shuō)胰蝠,前16個(gè)字直接由消息的第i個(gè)塊分解得到。其余的字由如下迭代公式得到:Wt=σ1(Wt?2)+Wt?7+σ0(Wt?15)+Wt?16
  2. 進(jìn)行64次循環(huán):即進(jìn)行64次加密循環(huán)即可完成一次迭代
For i=1 to N
     1) For t = 0 to 15
            Wt = M(i)t
         For t = 16 to 63
            Wt = SSIG1(W(t-2)) + W(t-7) + SSIG0(t-15) + W(t-16)
    2)a = H(i-1)0
       b = H(i-1)1
       c = H(i-1)2
       d = H(i-1)3
       e = H(i-1)4
       f = H(i-1)5
       g = H(i-1)6
       h = H(i-1)7
    3)For t = 0 to 63
            T1 = h + BSIG1(e) + CH(e,f,g) + Kt + Wt
            T2 = BSIG0(a) + MAJ(a,b,c)
            h = g
            g = f
            f = e
            e = d + T1
            d = c
            c = b
            b = a
            a = T1 + T2
    4) H(i)0 = a + H(i-1)0
        H(i)1 = b + H(i-1)1
        H(i)2 = c + H(i-1)2
        H(i)3 = d + H(i-1)3
        H(i)4 = e + H(i-1)4
        H(i)5 = f + H(i-1)5
        H(i)6 = g + H(i-1)6
        H(i)7 = h + H(i-1)7

注:

  1. 在“4)”中裆馒,兩個(gè)數(shù)字加在一起姊氓,如果結(jié)果大于2^32 ,則用兩數(shù)之和對(duì)2^32 取模找到余數(shù)對(duì)其重新賦值
  2. abcdefgh初始值是8個(gè)哈希初值
  3. Kt是第t個(gè)密鑰喷好,對(duì)應(yīng)我們上文提到的64個(gè)常量
  4. 最后一次循環(huán)所產(chǎn)生的八個(gè)字合起來(lái)即是第i個(gè)塊對(duì)應(yīng)到的散列字符串H{i}

PKI 公鑰體系的一些基本概念

tips:PKI(Public Key Infrastructure)

  • 對(duì)稱加密算法翔横,典型算法:DES、AES梗搅,...
    • 加解密方共用一個(gè)密鑰
    • 加解密速度快禾唁,但密鑰分發(fā)比較困難
  • 非對(duì)稱密碼算法(公鑰體系),典型算法:RSA无切、ECC
    • 加解密時(shí)荡短,通訊一方有一對(duì)密鑰(公鑰和私鑰)
    • 公鑰可以公開,分發(fā)給任何人
    • 私鑰不可以公開哆键,嚴(yán)格持有掘托,例如U盾中存放私鑰等
    • 公鑰加密,只能用私鑰解密籍嘹,反之亦然
    • 加解密速度較慢闪盔,但無(wú)密鑰分發(fā)問(wèn)題
    • 區(qū)塊鏈主要使用ECC橢圓曲線算法
  • 公鑰體系與對(duì)稱密鑰相結(jié)合的加密方式
    • 公鑰體系通常運(yùn)算性能低,做大量數(shù)據(jù)加解密力不從心
    • 通常利用公鑰體系實(shí)現(xiàn)對(duì)稱密鑰的安全交換

共識(shí)算法

POW:proof of work 工作量證明

區(qū)塊頭如下:

大小 字段 描述
4字節(jié) 版本 版本號(hào)辱士,用于跟蹤軟件/協(xié)議的更新
32字節(jié) 父區(qū)塊的哈希 引用區(qū)塊鏈中父區(qū)塊的哈希值
32字節(jié) Merkle根 該區(qū)塊交易中Merkle樹根的哈希值
4字節(jié) 時(shí)間戳 該區(qū)塊產(chǎn)生的近似時(shí)間(精確到秒的Unix時(shí)間戳)
4字節(jié) 難度目標(biāo) 該區(qū)塊工作量證明算法的難度目標(biāo)
4字節(jié) Nonce 用于工作量證明算法的計(jì)數(shù)器

SHA256(version+prev_hash+merkle_root+ntime+nbits+Nonce)< target

  1. 比特幣區(qū)塊的版本號(hào):version
  2. 上一個(gè)區(qū)塊的散列值:prev_hash
  3. 需要寫入交易記錄散列數(shù)的值:merkle_root
  4. 更新的時(shí)間:ntime
  5. 當(dāng)前的難度:nbits

根據(jù)比特幣相關(guān)算法的定義泪掀,Nonce的值存在于0到2的32次方之間,target是已經(jīng)給定的颂碘、根據(jù)當(dāng)前難度求得的數(shù)值异赫。比特幣算法的特點(diǎn)在于:由于散列的性質(zhì),比特幣需要的那個(gè)x只能通過(guò)計(jì)算得出头岔,而沒(méi)有任何的捷徑可走.

例如當(dāng)前難度為0x1903a30c

target=coefficient*2^(8*(exponent-3))
target=0x03a30c*2^(8*(0x19-0x03)) //0x19 和 0x03a30c 來(lái)自難度的拆分
target=0x03a30c*2^(8*0x16)
target=我不想計(jì)算了

只要你算出的SHA256<target則工作量證明成功

POS:Proof of Stake塔拳,股權(quán)證明

POS是一類共識(shí)算法,各個(gè)區(qū)塊鏈項(xiàng)目的POS差別很大

POW通過(guò)改變Nonce值來(lái)不斷改變Hash值去和Target比較

POW的公式可簡(jiǎn)化為:F(Nonce)<Target

而POS的公式簡(jiǎn)化為:F(TimeStamp)<Target*Banlance

tips:Target越大峡竣,挖礦難度越低

image

幣齡:每個(gè)幣每天產(chǎn)生1幣齡蝙斜,比如你持有100個(gè)幣,總共持有了30天澎胡,那么孕荠,此時(shí)你的幣齡就為3000娩鹉。

proofhash < 幣齡x目標(biāo)值 展開如下:

hash(nStakeModifier + txPrev.block.nTime + txPrev.offset + txPrev.nTime + txPrev.vout.n + nTime) < bnTarget x bnCoinDayWeight
  • 其中proofhash,對(duì)應(yīng)一組數(shù)據(jù)的哈希值稚伍,即hash(nStakeModifier + txPrev.block.nTime + txPrev.offset + txPrev.nTime + txPrev.vout.n + nTime)弯予。
  • 幣齡即bnCoinDayWeight,即幣天个曙,即持有的幣數(shù)乘以持有幣的天數(shù)锈嫩,此處天數(shù)最大值為90天。
  • 目標(biāo)值垦搬,即bnTarget呼寸,用于衡量PoS挖礦難度。目標(biāo)值與難度成反比猴贰,目標(biāo)值越大对雪、難度越小米绕;反之亦然瑟捣。

由公式可見,持有的幣天越大栅干,挖到區(qū)塊的機(jī)會(huì)越大迈套。

點(diǎn)點(diǎn)幣使用目標(biāo)值來(lái)衡量挖礦難度,目標(biāo)值與難度成反比碱鳞,目標(biāo)值越大桑李、難度越小窿给;反之亦然贵白。
當(dāng)前區(qū)塊的目標(biāo)值與前一個(gè)區(qū)塊目標(biāo)值、前兩個(gè)區(qū)塊的時(shí)間間隔有關(guān)填大。

計(jì)算公式如下:

當(dāng)前區(qū)塊目標(biāo)值 = 前一個(gè)區(qū)塊目標(biāo)值 x (1007x10x60 + 2x前兩個(gè)區(qū)塊時(shí)間間隔) / (1009x10x60)

由公式可見,兩個(gè)區(qū)塊目標(biāo)間隔時(shí)間即為10分鐘俏橘。
如果前兩個(gè)區(qū)塊時(shí)間間隔大于10分鐘允华,目標(biāo)值會(huì)提高,即當(dāng)前區(qū)塊難度會(huì)降低寥掐。
反之靴寂,如果前兩個(gè)區(qū)塊時(shí)間間隔小于10分鐘,目標(biāo)值會(huì)降低召耘,即當(dāng)前區(qū)塊難度會(huì)提高百炬。

POS2.0

為了進(jìn)一步鞏固PoS的安全,2014年rat4(Pavel Vasin)提出了PoS 2.0污它,并發(fā)布了黑幣剖踊。

黑幣前5000個(gè)塊庶弃,為純PoW階段;第5001個(gè)塊到第10000個(gè)塊為PoW與PoS并存階段德澈,從第10001個(gè)塊及以后為純PoS階段歇攻。

黑幣首創(chuàng)快速挖礦+低股息發(fā)行模式,發(fā)行階段采用POW方式梆造,通過(guò)算法改進(jìn)在短時(shí)間內(nèi)無(wú)法制造出專用的GPU和AISC礦機(jī)缴守,解決分配不公平的問(wèn)題。

PoS2.0相比PoS的改進(jìn):

  1. 將幣齡從等式中拿掉镇辉。新系統(tǒng)采用如下公式計(jì)算權(quán)益證明:proofhash < 幣數(shù)x目標(biāo)值

點(diǎn)點(diǎn)幣中屡穗,部分節(jié)點(diǎn)平時(shí)保持離線,只在積累了可觀的幣齡以后才連線獲取利息忽肛,然后再次離線村砂。

PoS 2.0中拿掉幣齡,使得積攢幣齡的方法不再有效麻裁,所有節(jié)點(diǎn)必須更多的保持在線箍镜,以進(jìn)行權(quán)益累積。

越多的節(jié)點(diǎn)在線進(jìn)行權(quán)益累積煎源,系統(tǒng)遭遇51%攻擊的可能性就越低色迂。

黑幣的PoS證明計(jì)算公式為:
proofhash < 幣數(shù)x目標(biāo)值
展開如下:

hash(nStakeModifier + txPrev.block.nTime + txPrev.nTime + txPrev.vout.hash + txPrev.vout.n + nTime) < bnTarget * nWeight

幣數(shù)即nWeight,目標(biāo)值即bnTarget手销。

DPOS

正常操作

在正常操作模式下歇僧,塊生產(chǎn)者每3秒鐘輪流生成一個(gè)塊。假設(shè)沒(méi)有人錯(cuò)過(guò)自己的輪次锋拖,那么這將產(chǎn)生最長(zhǎng)鏈诈悍。塊生產(chǎn)者在被調(diào)度輪次之外的任何時(shí)間段出塊都是無(wú)效的。

image

為了便于理解兽埃,生成塊的順序?yàn)锳BC侥钳,實(shí)際環(huán)境下,會(huì)根據(jù)算法不斷調(diào)節(jié)順序

少數(shù)分叉

不超過(guò)節(jié)點(diǎn)總數(shù)三分之一的惡意或故障節(jié)點(diǎn)可能創(chuàng)建少數(shù)分叉柄错。在這種情況下舷夺,少數(shù)分叉每9秒只能產(chǎn)生一個(gè)塊,而多數(shù)分叉每9秒可以產(chǎn)生兩個(gè)塊售貌。這樣给猾,誠(chéng)實(shí)的2/3多數(shù)將永遠(yuǎn)比少數(shù)(的鏈)更長(zhǎng)。

image

離線少數(shù)的多重生產(chǎn)

(離線的)少數(shù)人可以試圖產(chǎn)生無(wú)限數(shù)量的分叉颂跨,但是他們的所有分叉都將比多數(shù)人的那條鏈短敢伸,因?yàn)樯贁?shù)人在出塊速度上注定比多數(shù)人來(lái)的更慢。

image

網(wǎng)絡(luò)碎片化

網(wǎng)絡(luò)完全有可能碎片化恒削,導(dǎo)致沒(méi)有任何分叉擁有多數(shù)塊生成者池颈。在這種情況下尾序,最長(zhǎng)的鏈將倒向最大的那個(gè)少數(shù)群體。當(dāng)網(wǎng)絡(luò)連通性恢復(fù)時(shí)饶辙,較小的少數(shù)群體會(huì)自然切換到最長(zhǎng)的那條鏈蹲诀,明確的共識(shí)將恢復(fù)。

image

多數(shù)生產(chǎn)者舞弊

image

tips:如果節(jié)點(diǎn)C也作弊呢弃揽?那這個(gè)幣就廢了

在線少數(shù)的多重生產(chǎn)

在這種場(chǎng)景下脯爪,少數(shù)節(jié)點(diǎn)B在其時(shí)間段內(nèi)產(chǎn)生了兩個(gè)或更多可供選擇的塊。下一個(gè)計(jì)劃生產(chǎn)者(C)可以選擇基于B產(chǎn)生的任何一種方案繼續(xù)構(gòu)建鏈條矿微。一旦如此痕慢,這個(gè)選擇就成為最長(zhǎng)的鏈,而所有選擇B1的節(jié)點(diǎn)都將切換分叉涌矢。少數(shù)不良生產(chǎn)者企圖廣播再多的替代塊也無(wú)關(guān)緊要掖举,它們作為最長(zhǎng)鏈的一部分永遠(yuǎn)不會(huì)超過(guò)一輪。

image

網(wǎng)絡(luò)分片

假定段1有11個(gè)節(jié)點(diǎn)娜庇,段2有10個(gè)節(jié)點(diǎn)塔次,出塊順序是A-U

image

33秒后:段1產(chǎn)生11塊,段2產(chǎn)生0塊

63秒后:段1產(chǎn)生11塊名秀,段2產(chǎn)生10塊

66秒后:段1產(chǎn)生12塊励负,段2產(chǎn)生10塊

99秒后:段1產(chǎn)生22塊,段2產(chǎn)生10塊

比特幣交易的生命周期

創(chuàng)建比特幣交易

image
  • 擁有多少比特幣由手里擁有的的UTXO決定

  • 通過(guò)手里的私鑰解鎖UTXO匕得,來(lái)證明對(duì)比特幣(UTXO)的使用權(quán)

  • 使用比特幣時(shí)继榆,需要用自己手里的私鑰做數(shù)字簽名,然后由比特幣系統(tǒng)驗(yàn)證你對(duì)該比特幣的擁有權(quán)

  • 數(shù)字簽名只能由私鑰來(lái)創(chuàng)建

  • 數(shù)字簽名中并不包括私鑰汁掠,所以在網(wǎng)絡(luò)中傳輸很安全略吨,

廣播交易至比特幣網(wǎng)絡(luò)

比特幣交易在比特幣網(wǎng)絡(luò)中的傳播如下圖

image
  • 當(dāng)所做的轉(zhuǎn)賬交易傳播到一個(gè)節(jié)點(diǎn)時(shí),該網(wǎng)絡(luò)節(jié)點(diǎn)做的第一件事情就是驗(yàn)證該交易的合法性(交易的數(shù)據(jù)結(jié)構(gòu)考阱,數(shù)據(jù)簽名是否有效翠忠,UTXO是否屬于簽名的私鑰),若該交易不合法乞榨,則直接被拋棄秽之,若該交易合法,則該網(wǎng)絡(luò)節(jié)點(diǎn)把交易信息發(fā)給和它相連的其他節(jié)點(diǎn)

  • 每當(dāng)一個(gè)交易剛到一個(gè)節(jié)點(diǎn)時(shí)姜凄,該節(jié)點(diǎn)都會(huì)驗(yàn)證交易的合法性

比特幣交易在比特幣網(wǎng)絡(luò)中的傳播

image
  • 所有節(jié)點(diǎn)都是對(duì)等的政溃,每一個(gè)節(jié)點(diǎn)都會(huì)記錄一些常用的節(jié)點(diǎn)

  • 任何一個(gè)節(jié)點(diǎn)宕機(jī)或者退出網(wǎng)絡(luò)趾访,都不影響整個(gè)系統(tǒng)

  • 任何一個(gè)節(jié)點(diǎn)加進(jìn)來(lái)時(shí)也是非常容易的事情态秧,對(duì)整個(gè)網(wǎng)絡(luò)也沒(méi)有影響

比特幣交易結(jié)構(gòu)

交易結(jié)構(gòu)

image

tips:

  • 如果時(shí)鐘時(shí)間被設(shè)置為0,則意味著該交易立即執(zhí)行扼鞋。如果不是0并且該數(shù)值小于5億申鱼,則認(rèn)定是區(qū)塊的高度愤诱,該交易在此高度的區(qū)塊之后執(zhí)行
  • 可以先有輸出,后有輸入:在coinbase捐友,礦工挖到礦之后淫半,系統(tǒng)會(huì)給礦工獎(jiǎng)勵(lì)

交易輸出結(jié)構(gòu)

image

交易輸入的結(jié)構(gòu)

image

tips:解鎖腳本通常是私鑰的簽名

交易費(fèi)

交易費(fèi)=求和(所有輸入)-求和(所有輸出)

交易腳本和腳本語(yǔ)言

在比特幣中,每一個(gè)交易輸出中都有一個(gè)鎖定腳本匣砖,想要花費(fèi)這個(gè)UTXO科吭,必須用解鎖腳本解決“阻礙”

image
image

P2PKH(Pay-to-Public-Key-Hash)

鎖定腳本:
OP_DUP OP_HASH160 <Cafe Public Key Hash> OP_EQUAL OP_CHECKSIG

解鎖版腳本是:
<Cafe Signature> <Cafe Public Key>

兩個(gè)腳本結(jié)合起來(lái)可以形成如下有效組合腳本:

<Cafe Signature> <Cafe Public Key> OP_DUP OP_HASH160<Cafe Public Key Hash> OP_EQUAL OP_CHECKSIG‘
image
image

P2PK(Pay-to-Public-Key)

P2PK鎖定版腳本形式如下:
<Public Key A> OP_CHECKSIG

用于解鎖的腳本是一個(gè)簡(jiǎn)單簽名:
<Signature from Private Key A>

經(jīng)由交易驗(yàn)證軟件確認(rèn)的組合腳本為:
<Signature from Private Key A> <Public Key A> OP_CHECKSIG

該腳本只是CHECKSIG操作符的簡(jiǎn)單調(diào)用,該操作主要是為了驗(yàn)證簽名是否正確猴鲫,如果正確对人,則返回為真(Ture)。

多重簽名

M <Public Key 1> <Public Key 2> ... <Public Key N> N OP_CHECKMULTISIG
2 <Public Key A> <Public Key B> <Public Key C> 3 OP_CHECKMULTISIG
<Signature B> <Signature C> 2 <Public Key A> <Public Key B> <Public Key C> 3 OP_CHECKMULTISIG

P2SH(Pay-to-Script-Hash)

2 <Mohammed's Public Key> <Partner1 Public Key> <Partner2 Public Key> <Partner3 Public Key> <Attorney Public Key> 5 OP_CHECKMULTISIG
2
04C16B8698A9ABF84250A7C3EA7EE-
DEF9897D1C8C6ADF47F06CF73370D74DCCA01CDCA79DCC5C395D7EEC6984D83F1F50C900A24DD47F569FD4193AF5DE762C58704A2192968D8655D6A935BEAF2CA23E3FB87A3495E7AF308EDF08DAC3C1FCBFC2C75B4B0F4D0B1B70CD2423657738C0C2B1D5CE65C97D78D0E34224858008E8B49047E63248B75DB7379BE9CDA8CE5751D16485F431E46117B9D0C1837C9D5737812F393DA7D4420D7E1A9162F0279CFC10F1E8E8F3020DECDBC3C0DD389D99779650421D65CBD7149B255382ED7F78E946580657EE6FDA162A187543A9D85BAAA93A4AB3A8F044DA-
DA618D087227440645ABE8A35DA8C5B73997AD343BE5C2AFD94A5043752580AFA1EC-
ED3C68D446BCAB69AC0A7DF50D56231BE0AABF1FDEEC78A6A45E394BA29A1EDF518C022DD618DA774D207D137AAB59E0B000EB7ED238F4D800 5 OP_CHECKMULTISIG
54c557e07dde5bb6cb791c7a540e0a4796f5e97
OP_HASH160 54c557e07dde5bb6cb791c7a540e0a4796f5e97e OP_EQUAL

P2SH(Pay-to-Script-Hash)

不含P2SH的復(fù)雜腳本

image

P2SH復(fù)雜腳本

image

P2SH(Pay-to-Script-Hash)

OP_HASH160 54c557e07dde5bb6cb791c7a540e0a4796f5e97e OP_EQUA
<Sig1> <Sig2> <2 PK1 PK2 PK3 PK4 PK5 5 OP_CHECKMULTISIG>

兩個(gè)腳本經(jīng)由兩步實(shí)現(xiàn)組合拂共。首先牺弄,將贖回腳本與鎖定腳本比對(duì)以確認(rèn)其與哈希是否匹配:

<2 PK1 PK2 PK3 PK4 PK5 5 OP_CHECKMULTISIG> OP_HASH160 <redeem scriptHash> OP_EQUAL

假如贖回腳本與哈希匹配,解鎖腳本會(huì)被執(zhí)行以釋放贖回腳本:

<Sig1> <Sig2> 2 PK1 PK2 PK3 PK4 PK5 5 OP_CHECKMULTISIG

UTXO詳解

在比特幣中并沒(méi)有賬戶的概念宜狐,也沒(méi)有賬戶余額集中存儲(chǔ)的一個(gè)地方

UTXO — Unspent Transaction Output

在比特幣里势告,Transaction 被簡(jiǎn)稱為 TX,所以上面這個(gè)短語(yǔ)縮寫為 UTXO抚恒。

比特幣的基本單位咱台,不可分割,被所有者鎖住柑爸,記錄于區(qū)塊鏈中被整個(gè)網(wǎng)絡(luò)識(shí)別成貨幣單位吵护。

image

經(jīng)過(guò)三筆交易,Alice一共有3個(gè)UTXO表鳍。加一起一共是2.6個(gè)比特幣馅而,這個(gè)2.6的數(shù)字在比特幣系統(tǒng)中是不存在的,沒(méi)有地方存儲(chǔ)這個(gè)2.6譬圣,只是分成3個(gè)UTXO瓮恭,記錄在區(qū)塊鏈當(dāng)中,不一定在一個(gè)區(qū)塊厘熟,和發(fā)生交易的時(shí)間以及被打包進(jìn)區(qū)塊的時(shí)間有關(guān)系屯蹦。

image

tips:圖中第三筆交易找零數(shù)據(jù)錯(cuò)誤,未來(lái)得及更改...

image
image

密鑰&地址

image
image

一個(gè)隨機(jī)生成的私鑰(k)绳姨,以十六進(jìn)制格式表示(256位的二進(jìn)制數(shù)登澜,以64位十六進(jìn)制數(shù)顯示,每個(gè)十六進(jìn)制數(shù)占4位):

1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD
K = G * 1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD 

K = (x, y)

x=F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A
y=07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB
image
image
x=F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A
y=07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB
//K是對(duì)x,y的拼接

K = 04F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB
image

P2P網(wǎng)絡(luò)架構(gòu)&節(jié)點(diǎn)類型及分工

image
  • 錢包:通常是桌面版錢包飘庄,移動(dòng)端手機(jī)錢包

  • 礦工:維護(hù)整個(gè)區(qū)塊鏈數(shù)據(jù)打包的節(jié)點(diǎn)

  • 完整區(qū)塊鏈:包括完整的區(qū)塊鏈交易數(shù)據(jù)的節(jié)點(diǎn)(數(shù)據(jù)量比較大)

  • 網(wǎng)絡(luò)路由節(jié)點(diǎn):P2P的網(wǎng)絡(luò)路由節(jié)點(diǎn)脑蠕、stratum、移動(dòng)錢包和P2P網(wǎng)絡(luò)的交互,還有礦池的pool節(jié)點(diǎn)

節(jié)點(diǎn)類型

  1. 核心客戶端:包含全部類型的節(jié)點(diǎn)
image
  1. 完整區(qū)塊鏈節(jié)點(diǎn):需要用到區(qū)塊鏈所有數(shù)據(jù)的服務(wù)谴仙,比如查詢地址上有多少錢
image
  1. 獨(dú)立礦工:自己挖礦迂求,存儲(chǔ)完整區(qū)塊鏈節(jié)點(diǎn)。如果不包含完整區(qū)塊鏈晃跺,則需要訪問(wèn)完整區(qū)塊鏈節(jié)點(diǎn)才可以挖礦(參考第6條)
image
  1. 輕量(SPV)錢包:
image
  1. 礦池協(xié)議服務(wù)器:比特幣網(wǎng)絡(luò)基本上是基于P2P的揩局,但是礦池協(xié)議服務(wù)用的是Stratum協(xié)議還有Pool協(xié)議,通過(guò)Stratum和P2P做連接
image

6.挖礦節(jié)點(diǎn):

image

7.輕量Stratum錢包:針對(duì)于移動(dòng)端特性掀虎,一般不會(huì)將手機(jī)作為網(wǎng)絡(luò)路由節(jié)點(diǎn)來(lái)使用凌盯,然后又需要訪問(wèn)整個(gè)比特幣網(wǎng)絡(luò),故以Stratum協(xié)議和P2P網(wǎng)絡(luò)進(jìn)行交互獲取信息

image
image
  • 每臺(tái)計(jì)算機(jī)都彼此對(duì)等烹玉,各個(gè)節(jié)點(diǎn)共同提供網(wǎng)絡(luò)服務(wù)十气,不存在任何“特殊”節(jié)點(diǎn)。
  • 每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)以“扁平(flat)”的拓?fù)浣Y(jié)構(gòu)相互連通
  • P2P網(wǎng)絡(luò)的節(jié)點(diǎn)之間交互運(yùn)作春霍、協(xié)同處理:
    每個(gè)節(jié)點(diǎn)在對(duì)外提供服務(wù)的同時(shí)也使用網(wǎng)絡(luò)中
    其他節(jié)點(diǎn)所提供的服務(wù)

P2P網(wǎng)絡(luò)技術(shù)的特點(diǎn)

  • 去中心化
  • 擴(kuò)展性強(qiáng)
  • 健壯性高
  • 高性價(jià)比
  • 負(fù)載均衡

網(wǎng)絡(luò)發(fā)現(xiàn)砸西,區(qū)塊同步

1. 對(duì)等節(jié)點(diǎn)之間的初始“握手”通信

tips:假定節(jié)點(diǎn)A是新節(jié)點(diǎn),節(jié)點(diǎn)B是常駐節(jié)點(diǎn)

image

新節(jié)點(diǎn)加入之初要和對(duì)等節(jié)點(diǎn)握手通訊址儒,

  • 新節(jié)點(diǎn)怎么和其他對(duì)等節(jié)點(diǎn)聯(lián)系到的呢芹枷?

答:客戶端軟件會(huì)包含常駐節(jié)點(diǎn)信息,如專門提供比特幣服務(wù)的網(wǎng)站莲趣,獨(dú)立礦工鸳慈、礦池,他們的地址信息長(zhǎng)期都是固定的喧伞。

  • 新節(jié)點(diǎn)會(huì)包含不止一個(gè)常駐節(jié)點(diǎn)信息

version信息

  • PROTOCOL_VERSION:常量走芋,定義了客戶端所“說(shuō)出”的比特幣P2P協(xié)議所采用的版本(例如:70002)。
  • nLocalServices:一組該節(jié)點(diǎn)支持的本地服務(wù)列表潘鲫,當(dāng)前僅支持NODE_NETWORK
  • nTime:當(dāng)前時(shí)間
  • addrYou:當(dāng)前節(jié)點(diǎn)可見的遠(yuǎn)程節(jié)點(diǎn)的IP地址
  • addrMe:本地節(jié)點(diǎn)所發(fā)現(xiàn)的本機(jī)IP地址
  • subver:指示當(dāng)前節(jié)點(diǎn)運(yùn)行的軟件類型的子版本號(hào)(例如:”/Satoshi:0.9.2.1/”)
  • BaseHeight:當(dāng)前節(jié)點(diǎn)區(qū)塊鏈的區(qū)塊高度

2. 地址廣播及發(fā)現(xiàn)

image
  1. 節(jié)點(diǎn)A會(huì)把自己所有記錄的對(duì)等節(jié)點(diǎn)信息發(fā)送給B
  2. 節(jié)點(diǎn)B拿到節(jié)點(diǎn)信息后(包含節(jié)點(diǎn)A的信息)廣播給節(jié)點(diǎn)B已經(jīng)連接的節(jié)點(diǎn)翁逞,讓大家都知道節(jié)點(diǎn)A已經(jīng)進(jìn)來(lái)了。
  3. 節(jié)點(diǎn)A可以向節(jié)點(diǎn)B發(fā)送getaddr請(qǐng)求節(jié)點(diǎn)B的對(duì)等節(jié)點(diǎn)(節(jié)點(diǎn)A獲得越多地址信息越穩(wěn)固)溉仑,但并不是拿到的節(jié)點(diǎn)信息越多越好挖函,因?yàn)楣?jié)點(diǎn)之間會(huì)發(fā)送請(qǐng)求,會(huì)增加自己的負(fù)擔(dān)浊竟。

3. 節(jié)點(diǎn)通過(guò)從對(duì)等節(jié)點(diǎn)讀取區(qū)塊來(lái)同步區(qū)塊鏈

image

inv(inventory):存儲(chǔ)列表

tips:節(jié)點(diǎn)A拿到存儲(chǔ)列表后怨喘,并不會(huì)只向節(jié)點(diǎn)B發(fā)送請(qǐng)求數(shù)據(jù)信息(getdata),因?yàn)樵谌绻麛?shù)據(jù)量很大的話(或與此同時(shí)很多節(jié)點(diǎn)都像節(jié)點(diǎn)B請(qǐng)求數(shù)據(jù))振定,節(jié)點(diǎn)B就不堪重負(fù)了必怜。因?yàn)楣?jié)點(diǎn)A節(jié)點(diǎn)B已經(jīng)交換過(guò)對(duì)等節(jié)點(diǎn)信息了,所以就同時(shí)像其他對(duì)等節(jié)點(diǎn)請(qǐng)求數(shù)據(jù)后频。

SPV節(jié)點(diǎn)同步區(qū)塊頭

image

SPV:Simplified Payment Verification”(簡(jiǎn)單支付驗(yàn)證)

因?yàn)槭謾C(jī)端硬盤容量有限梳庆,不可能下載整個(gè)block鏈,所以只下載區(qū)塊頭,區(qū)塊頭雖然不包含交易流水靠益,但可以定義一個(gè)區(qū)塊,因?yàn)槔锩娲鎯?chǔ)了merkle樹根還有其他信息残揉。所以區(qū)塊頭可以作為驗(yàn)證數(shù)據(jù)胧后。

tips:整個(gè)區(qū)塊頭的大小約是整個(gè)鏈的千分之一。

區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)

區(qū)塊數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單分為:區(qū)塊頭抱环、區(qū)塊體

image

區(qū)塊結(jié)構(gòu)

image

區(qū)塊頭

image

區(qū)塊標(biāo)識(shí)符

  • 區(qū)塊頭哈希值:對(duì)區(qū)塊頭求得的Hash
  • 區(qū)塊高度
image

因?yàn)樵谀骋桓叨瓤强欤瑓^(qū)塊鏈可能存在分叉的情況,所以镇草,一個(gè)高度可能代表好多個(gè)區(qū)塊眶痰。

我們認(rèn)為,在一個(gè)區(qū)塊后有六個(gè)區(qū)塊時(shí)梯啤,可以唯一確定這個(gè)區(qū)塊

創(chuàng)世區(qū)塊

創(chuàng)世區(qū)塊的哈希值為:

0000000000 19d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

https://blockchain.info/block/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

https://blockexplorer.com/block/

區(qū)塊的連接

image

Merkle樹和簡(jiǎn)單支付驗(yàn)證(SPV)

Merkle樹

image

tips:

  1. 紅色方框就是Merkle樹
  2. Merkle樹不一定是二叉樹竖伯,根據(jù)需要而定,可以是三叉樹... 但比特幣中用的是二叉樹
  3. Transakce兩兩一組因宇,如果有奇數(shù)個(gè)Transakce七婴,怎double自己一下完成組隊(duì)。每組的TransakceHash各自hash后拼接在一起繼續(xù)hash察滑,循序漸進(jìn)...
  4. Merkle在P2P中很常用打厘,可以做數(shù)據(jù)完整性校驗(yàn)和補(bǔ)充下載
image
image
image

SPV:簡(jiǎn)單支付驗(yàn)證

從網(wǎng)絡(luò)上獲取并保存最長(zhǎng)鏈的所有block header至本地;

SPV client在相連Peer注冊(cè)感興趣的地址:讓相連的Peer在收到和我相關(guān)的交易時(shí)贺辰,通知我一下

  1. 相連Peer主動(dòng)通知可能相關(guān)的Transaction:為什么是可能相關(guān)户盯,因?yàn)镻eer注冊(cè)了很多的地址,用過(guò)濾的方法來(lái)判斷饲化,讓收到消息的節(jié)點(diǎn)莽鸭,只會(huì)多不會(huì)少,保證和Transaction相關(guān)的節(jié)點(diǎn)一定能收到吃靠。
  2. 計(jì)算該交易的hash值tx_hash蒋川;
  3. 定位到包含該tx_hash所在的區(qū)塊,驗(yàn)證block header是否
    包含在已知的最長(zhǎng)鏈中撩笆;
  4. SPV client下載包含該Transaction的Merkle Tree捺球;
  5. 根據(jù)這些hash值計(jì)算merkle_root_hash;
  6. 若計(jì)算結(jié)果與block header中的merkle_root_hash相等夕冲,則
    交易真實(shí)存在氮兵;
  7. 根據(jù)該block header所處的位置,確定該交易已經(jīng)得到多少個(gè)確認(rèn)歹鱼。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泣栈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌南片,老刑警劉巖掺涛,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異疼进,居然都是意外死亡薪缆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門伞广,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拣帽,“玉大人,你說(shuō)我怎么就攤上這事嚼锄〖跏茫” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵区丑,是天一觀的道長(zhǎng)拧粪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)沧侥,這世上最難降的妖魔是什么既们? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮正什,結(jié)果婚禮上啥纸,老公的妹妹穿的比我還像新娘。我一直安慰自己婴氮,他們只是感情好斯棒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著主经,像睡著了一般荣暮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上罩驻,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天穗酥,我揣著相機(jī)與錄音,去河邊找鬼惠遏。 笑死砾跃,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的节吮。 我是一名探鬼主播抽高,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼透绩!你這毒婦竟也來(lái)了翘骂?” 一聲冷哼從身側(cè)響起壁熄,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碳竟,沒(méi)想到半個(gè)月后草丧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體不瓶,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咕娄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了藏澳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片统翩。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖此洲,靈堂內(nèi)的尸體忽然破棺而出厂汗,到底是詐尸還是另有隱情,我是刑警寧澤呜师,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布娶桦,位于F島的核電站,受9級(jí)特大地震影響汁汗,放射性物質(zhì)發(fā)生泄漏衷畦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一知牌、第九天 我趴在偏房一處隱蔽的房頂上張望祈争。 院中可真熱鬧,春花似錦角寸、人聲如沸菩混。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沮峡。三九已至,卻和暖如春亿柑,著一層夾襖步出監(jiān)牢的瞬間邢疙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工望薄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疟游,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓痕支,卻偏偏與公主長(zhǎng)得像乡摹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子采转,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355