国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Bitcoin 區(qū)塊和交易數(shù)據(jù)結(jié)構(gòu)

Kaede / 1209人閱讀

摘要:區(qū)塊中存放著交易,區(qū)塊按照高度有序鏈接起來(lái)的這種數(shù)據(jù)結(jié)構(gòu)被稱為區(qū)塊鏈。區(qū)塊頭區(qū)塊頭的長(zhǎng)度是字節(jié),將區(qū)塊頭數(shù)據(jù)進(jìn)行兩次運(yùn)算將得到區(qū)塊哈希。比特幣白皮書中定義的交易結(jié)構(gòu)和新的隔離見證交易結(jié)構(gòu)。

區(qū)塊鏈?zhǔn)且环N賬本數(shù)據(jù)庫(kù),分布式,數(shù)據(jù)存儲(chǔ)的每個(gè)節(jié)點(diǎn)都會(huì)同步復(fù)制整個(gè)賬本,信息透明難以篡改。

區(qū)塊中存放著交易,區(qū)塊按照高度有序鏈接起來(lái)的這種數(shù)據(jù)結(jié)構(gòu)被稱為區(qū)塊鏈。每個(gè)區(qū)塊都指向前一個(gè)區(qū)塊,一個(gè)區(qū)塊由 區(qū)塊頭 和 交易 組成。

區(qū)塊

區(qū)塊由一個(gè)包含元數(shù)據(jù)的區(qū)塊頭和緊跟其后的構(gòu)成區(qū)塊主體的一長(zhǎng)串交易列表組成。區(qū)塊結(jié)構(gòu)如圖:

區(qū)塊頭中數(shù)據(jù)有:

區(qū)塊版本

前個(gè)區(qū)塊哈希

Merkle Root 哈希

時(shí)間戳

Bits 難度

Nonce “挖礦” 隨機(jī)數(shù)

Coinbase 交易:每個(gè)區(qū)塊中的第一條交易都是 Coinbase 交易,用于獎(jiǎng)勵(lì) “礦工” 將交易打包到區(qū)塊。獎(jiǎng)勵(lì)分為兩部分,一是區(qū)塊獎(jiǎng)勵(lì),一是區(qū)塊中除 Coinbase 交易外其它交易手續(xù)費(fèi)總和。

區(qū)塊頭

區(qū)塊頭的長(zhǎng)度是80字節(jié),將區(qū)塊頭數(shù)據(jù)進(jìn)行兩次 Sha256 運(yùn)算將得到區(qū)塊哈希

區(qū)塊頭結(jié)構(gòu)如下:

Field Size Data
Version 4 bytes Little-endian ?
Previous Block Hash 32 bytes Little-endian ?
MerkleRoot 32 bytes Little-endian ?
Timestamp 4 bytes Little-endian ?
Bits (Difficulty Target) 4 bytes Little-endian ?
Nonce 4 bytes Little-endian ?
Merkle Root

Merkle Tree 是一種哈希二叉樹,用于歸納一個(gè)區(qū)塊中的所有交易,同時(shí)生成整個(gè)交易集合的數(shù)字簽名,且提供了一種校驗(yàn)區(qū)塊是否存在某交易的高效途徑。

區(qū)塊鏈中的每個(gè)區(qū)塊都包含了產(chǎn)生于該區(qū)塊的所有交易,且以Merkle樹表示。那么如何獲得它呢?

從區(qū)塊交易列表中獲取每對(duì)Txid,并對(duì)它們進(jìn)行兩次 Sha256 運(yùn)算,得到哈希。

如果為奇數(shù),則復(fù)制一份湊成偶數(shù)再進(jìn)行兩次 Sha256 運(yùn)算,得到哈希。

遞歸1、2,直到最終獲得一個(gè)哈希,它就是Merkle Root。

為什么使用 Merkle Root 方式呢,為什么不對(duì)區(qū)塊內(nèi)所以交易一次性進(jìn)行哈希呢,那樣不是更快么?

使用 Merkle Root 原因有二:

完整性驗(yàn)證,任何一個(gè)節(jié)點(diǎn)的哈希發(fā)生變化,都會(huì)導(dǎo)致最終的 Root 節(jié)點(diǎn)哈希發(fā)生變化。這一特性也可用于快速定位問題節(jié)點(diǎn)。

零知識(shí)證明,如下圖,16 條交易的節(jié)點(diǎn)能夠通過生成一條僅有 4 個(gè) 32 字節(jié)哈希值長(zhǎng)度(總128字節(jié))的 Merkle 路徑,來(lái)證明區(qū)塊中存在一筆交易 K,該路徑有4個(gè)哈希值 HL、HIJ、HMNOP 和 HABCDEFGH。由這4個(gè)哈希值產(chǎn)生的認(rèn)證路徑,再通過計(jì)算另外四對(duì)哈希值 HKL、HIJKL、HIJKLMNOP 和 Merkle Root,任何節(jié)點(diǎn)都能證明 HK 包含在Merkle Root。

關(guān)于 Merkle 路徑,我們來(lái)看一張圖:

交易數(shù)量 區(qū)塊大小 路徑數(shù)量 路徑大小
16 4 KB 4 128 bytes
512 128 KB 9 288 bytes
2048 512 KB 11 352 bytes
4096 1 MB 12 384 bytes
65,535 16 MB 16 512 bytes

即使增長(zhǎng)到交易數(shù)量為 262144,區(qū)塊大小到 65M,路徑數(shù)也才 18。所以使用 Merkle Root 非常高效,如果是所有交易進(jìn)行一次哈希,雖然獲得 Hash 是快些,但對(duì)于要驗(yàn)證問題交易或節(jié)點(diǎn),將是個(gè)災(zāi)難。

Bits 和 Nonce

Bits 是挖礦目標(biāo)難度 Target 的緊湊格式。

Nonce 是挖礦遍歷時(shí)的隨機(jī)數(shù)。

關(guān)于 “挖礦” 的具體內(nèi)容,我會(huì)多帶帶總結(jié)一篇,感興趣可以關(guān)注后續(xù)文章。
這里有一個(gè)在線的模擬挖礦,各種數(shù)據(jù)顯示都很直觀,適合了解挖礦內(nèi)部運(yùn)作:點(diǎn)我前往模擬挖礦

交易

目前存在兩種交易結(jié)構(gòu)。比特幣白皮書中定義的交易結(jié)構(gòu)和新的隔離見證交易結(jié)構(gòu)。

BIP 141 定義一種新的交易結(jié)構(gòu),我們稱之為 “Segregated Witness (隔離見證)” 交易。舊交易結(jié)構(gòu)簽名數(shù)據(jù)放在交易輸入里,隔離見證交易則將簽名數(shù)據(jù) “分離” 出來(lái),放在交易的 Locktime 之前。

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

[nVersion] [n] [tx inputs] [n] [tx outputs] [nLockTime]
    |       |               |                    |
 4 bytes  varint          varint             4 bytes

隔離見證(Segregated Witness)交易結(jié)構(gòu):

[nVersion] [marker] [flag][n] [tx inputs] [n] [tx outputs] [witness][nLockTime]
    |           /     /  |               |                     /     |
 4 bytes     0x00    0x01 varint         varint            scriptSig  4 bytes
Field Size Data
Version 4 bytes Little-endian ?
* Marker 1 bytes 0x00
* Flag 1 bytes 0x01
Input Counter 1–9 bytes VarInt
Inputs Variable
Output Counter 1–9 bytes VarInt
Outputs Variable
* Witness Variable
Locktime 4 bytes Little-endian ?

* 為 Segregated Witness 交易字段。

我們解析一條 Segregated Witness (P2SH-P2WPKH)交易:

如果你對(duì) P2SH-P2WPKH 交易感興趣可以查看我之前寫的一篇介紹 Segregated Witness 的文章。

{
  "txid": "af0c4cdd2537ae367b0e03db0cd795fa37543bd672c9234b2c307009a9a8108f",
  "hash": "ff300093626745127aad29e8628ee4606b87cb660f7ff63817dd4857cd15a175",
  "version": 2,
  "size": 248,
  "vsize": 166,
  "locktime": 0,
  "vin": [],
  "vout": []
}

HEX 數(shù)據(jù):

Inputs

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

Field Size Data
TXID 32 bytes Little-endian ?
VOUT 4 bytes Little-endian ?
ScriptSig Size 1–9 bytes VarInt
ScriptSig Variable
Sequence 4 bytes Little-endian ?

輸入JSON:

{
  "txid": "6635d3f451478f0e1f88692d5cfb9194f133fbb314cb87fa9483f89bd296284b",
  "vout": 0,
  "scriptSig": {
    "asm": "0014db75523757a256579a197746568f331103417b85",
    "hex": "160014db75523757a256579a197746568f331103417b85"
  },
  "txinwitness": [
    "3045022100c8b2a6027f939bb964e395c94cd6f1d8ff9d1f406e41975b2ac979a6007c3ac4022019953dfe376d0152152955e02d72e7a7b9a61f8d5700642c97a2dc4ba13628b801",
    "02983f3687310bcfe2ad1ad55d011112c3f8d659950c10cab9ff43ae34d7b6280e"
  ],
  "sequence": 4294967293
}
outputs

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

Field Size Data
Value 8 bytes Little-endian ?
ScriptPubKey Size 1–9 bytes VarInt
ScriptPubKey Variable

輸出JSON:

{
  "value": 1.00000000,
  "n": 0,
  "scriptPubKey": {
    "asm": "OP_HASH160 2228cecac3c1fa3143ba2ac7d2525d8b9b05c87b OP_EQUAL",
    "hex": "a9142228cecac3c1fa3143ba2ac7d2525d8b9b05c87b87",
    "reqSigs": 1,
    "type": "scripthash",
    "addresses": [
      "2MvMqrBRct4F2zuyrpgrq2qqq61VZc1znPB"
    ]
  }
},
{
  "value": 48.99996680,
  "n": 1,
  "scriptPubKey": {
    "asm": "OP_HASH160 22e2f5339cdf0778935e8127dc51e4a0ae62d162 OP_EQUAL",
    "hex": "a91422e2f5339cdf0778935e8127dc51e4a0ae62d16287",
    "reqSigs": 1,
    "type": "scripthash",
    "addresses": [
      "2MvRgr7SeyTVutrUaJdmZ5ETVdoPp5eWoj5"
    ]
  }
}
VarInt

比特幣使用可變字節(jié)表示腳本長(zhǎng)度,當(dāng)一個(gè)字節(jié)不夠表示時(shí),如下規(guī)律:

Size Example Description
<= 0xfc 0x12 1 個(gè)字節(jié)
<= 0xffff 0xfd1234 前綴是fd,小端表示接下來(lái)的2個(gè)字節(jié)
<= 0xffffffff 0xfe12345678 前綴是fe,小端表示接下來(lái)的4個(gè)字節(jié)
<= 0xffffffffffffffff 0xff1234567890abcdef 前綴是ff,小端表示接下來(lái)的8個(gè)字節(jié)

如:0x48,沒有 fdfeff 前綴,所以我們知道它是2 bytes表示的。

VarInt: 0x48
        = 72 bytes

如:fd2606,因?yàn)槭?fd 前綴,我們讀取fd之后的 4 bytes,反轉(zhuǎn)小端再轉(zhuǎn)換為十進(jìn)制表示。

VarInt: 0xfd2606
        = 0x2602    (next 2 bytes)
        = 0x0226    (Little-Endian)
        = 550 bytes
Little-Endian

小端 (Little-endian) 字節(jié)序。如:0x12345678

大端類似于十六進(jìn)制字節(jié)從左到右的閱讀順序。小端最低位字節(jié)是 0x78 存儲(chǔ)在最低的內(nèi)存地址處,后面的字節(jié)依次往后存。

Big-Endian:    |12|34|56|78|
Little-Endian: |78|56|34|12|

比特幣在很多地方數(shù)據(jù)都是用小端序表示。

參考

https://github.com/bitcoinboo...

http://learnmeabitcoin.com/gl...

http://learnmeabitcoin.com/gl...

http://learnmeabitcoin.com/gl...

http://yogh.io

http://royalforkblog.github.i...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/24422.html

相關(guān)文章

  • 區(qū)塊鏈與狀態(tài)爆炸

    摘要:目前整個(gè)歷史的大小所有區(qū)塊加起來(lái)的大小大約是,而狀態(tài)的大小只有大約由約萬(wàn)個(gè)組成。通過每個(gè)區(qū)塊的,間接限制了歷史和狀態(tài)的增長(zhǎng)速度。常見的一個(gè)誤解是的區(qū)塊鏈大小已經(jīng)超過了。區(qū)塊鏈節(jié)點(diǎn)為保存歷史和狀態(tài)付出的存儲(chǔ),正是這樣一種共享資源。 showImg(https://segmentfault.com/img/bVbsfg9?w=1920&h=815); 如果 Layer 1 的關(guān)注點(diǎn)應(yīng)該是狀...

    bigdevil_s 評(píng)論0 收藏0
  • 區(qū)塊鏈無(wú)法解決的狀態(tài)爆炸問題

    摘要:在本次秘猿科技區(qū)塊鏈小課堂中,我們帶大家來(lái)了解一個(gè)全新的狀態(tài)爆炸問題。目前整個(gè)歷史的大小所有區(qū)塊加起來(lái)的大小大約是,而狀態(tài)的大小只有大約由約萬(wàn)個(gè)組成。通過每個(gè)區(qū)塊的,間接限制了歷史和狀態(tài)的增長(zhǎng)速度。常見的一個(gè)誤解是的區(qū)塊鏈大小已經(jīng)超過了。 在設(shè)計(jì)全新的區(qū)塊鏈經(jīng)濟(jì)模型之前,我們以 SoV(價(jià)值存儲(chǔ)) 和 MoE(交易媒介) 兩個(gè)框架分析了比特幣和以太坊經(jīng)濟(jì)模型,得出了上一篇中的問題。在本...

    Godtoy 評(píng)論0 收藏0
  • 區(qū)塊鏈筆記(2)直觀感受比特幣

    摘要:書接上回區(qū)塊鏈筆記基礎(chǔ)概念掃盲,我們討論了關(guān)于比特幣以及區(qū)塊鏈的許多基礎(chǔ)概念,可能通過我略帶類比的描述,讓你初步有了一些概念,但是對(duì)于一個(gè)比特幣到底長(zhǎng)什么樣以及如何使用比特幣進(jìn)行交易可能還不是很清楚,說(shuō)的直白點(diǎn)就是聽過豬叫,但沒吃過豬肉。 解惑是每個(gè)人都在走的一條路,可誰(shuí)又能解這漫漫無(wú)期呢?路上總是麻醉的人多,釋懷的人少。 書接上回區(qū)塊鏈筆記(1)基礎(chǔ)概念掃盲,我們討論了關(guān)于比特幣以及...

    DrizzleX 評(píng)論0 收藏0
  • 對(duì)比特幣的繼承與創(chuàng)新!深入理解公鏈 CKB 的 Cell 模型

    摘要:為了理解底層公鏈的模型,我們前置了幾篇概念性文章,講述了我們應(yīng)該以狀態(tài)為中心設(shè)計(jì)區(qū)塊鏈系統(tǒng)的,以及這么做帶來(lái)的好處。交易依然表示狀態(tài)的變化遷移。 為了理解底層公鏈 CKB 的 Cell 模型,我們前置了幾篇概念性文章,講述了我們應(yīng)該以狀態(tài)為中心設(shè)計(jì)區(qū)塊鏈系統(tǒng)的,以及這么做帶來(lái)的好處。并且在上一篇文章中,詳細(xì)分析了比特幣 UTXO 模型和以太坊的 Account 模型,以及進(jìn)行了對(duì)比分析...

    ruicbAndroid 評(píng)論0 收藏0
  • 理解CKB的Cell模型

    摘要:交易依然表示狀態(tài)的變化遷移。這樣一個(gè)模型的特點(diǎn)是狀態(tài)是第一性的所有者是狀態(tài)的屬性,每一份狀態(tài)只有一個(gè)所有者狀態(tài)不斷的被銷毀和創(chuàng)建。值得指出的是,的編程模型之所以強(qiáng)大,更多是因?yàn)樗袪顟B(tài),而不是因?yàn)樗挠邢迗D靈完備。 在設(shè)計(jì) CKB 的時(shí)候,我們想要解決三個(gè)方面的問題: 狀態(tài)爆炸引起的公地悲劇及去中心化的喪失;計(jì)算和驗(yàn)證耦合在了一起使得無(wú)論是計(jì)算還是驗(yàn)證都失去了靈活性,難以擴(kuò)展;交易與價(jià)...

    henry14 評(píng)論0 收藏0
  • 比特幣核心錢包 bitcoin core(bitcoin-Qt)的使用教程

    摘要:比特幣主網(wǎng)絡(luò)現(xiàn)在已經(jīng)有數(shù)百大小。加密錢包密碼應(yīng)該包括位以上,且不要使用生日名字證件號(hào)碼等易被猜測(cè)的密碼。警告遺忘密碼等于丟失所有比特幣。例如比特幣免費(fèi)領(lǐng)取測(cè)試比特幣。 showImg(https://upload-images.jianshu.io/upload_images/4834364-4db38e8ae57ed028.png?imageMogr2/auto-orient/str...

    BingqiChen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<