目錄
一、區塊
- 什么是區塊
- 區塊的結構
- 產生一個區塊的過程
- 如何校驗一個區塊的有效性
- 如何驗證交易的有效性
二、區塊鏈
- 什么是區塊鏈
- 區塊鏈的特點
三、智能合約
- 智能合約是什么
- 如何搭建一個智能合約
關鍵字
UTXO POW coinbase Markle Tree Nonce
正文
區塊
什么是區塊
在比特幣網絡中,數據會以文件的形式被永久記錄,我們稱這些文件為區塊。同時也是一種記錄交易的數據結構。每個區塊由區塊頭和區塊主體組成,區塊主體只負責記錄前一段時間內的交易信息,區塊鏈的大部分功能都由區塊頭來實現。
區塊的結構
區塊的結構主要分為兩部分:區塊頭和區塊主體,如下:
區塊結構
數據項 | 描述 | 長度 |
---|---|---|
Magic no(魔法數) | 總是0xD9B4BEF9 | 4字節 |
Blocksize(區塊大小) | 到區塊結束的字節長度 | 4字節 |
Blockheader(區塊頭) | 包含8個數據項 | 80字節 |
Transaction counter(交易數量) | 正整數VI=VarInt | 1-9字節 |
Transaction (交易) | 交易列表(非空) | <Transaction-counter>許多交易 |
Blockheader區塊頭表結構
數據項 | 目的 | 更新時間 | 大小(字節) |
---|---|---|---|
Version(版本) | 區塊版本號 | 更新軟件后他指定了一個新的版本號 | 4 |
hashPrevBlock(前一個區塊的hash值) | 前一個區塊的256位hash(父區塊的hash,區塊與區塊之間就是靠次hash鏈接成鏈) | 新區塊進來時 | 32 |
hashMerkleRoot Merkle(根結點hash值) | 基于一個區塊中所有交易的256位hash | 接受一個交易時 | 32 |
Time(時間戳) | 從1970-01-01 00:00 UTC開始到現在,一秒為單位的當前時間戳 | 每幾秒更新 | 4 |
Bits(當前目標的hash) | 壓縮格式的當前目標hash值 | 挖礦難度調整時 | 4 |
Nonce(隨機數) | 從0開始的32位隨機數 | 產生hash時(每次產生hash隨機數時都要增加) | 4 |
產生一個區塊的過程
1.礦工在挖礦前要組建區塊
? 將coinbase交易打包進區塊(coinbase交易必須放在交易列表的第一個)
? 將交易池中優先級的交易打包進區塊
? (優先級 = 交易的額度 * UTXO的深度 / 交易的size)
2.創建區塊的頭部
? 版本號 父區塊哈希 Markle樹根 時間戳 難度值 Nonce
3.挖礦成功后,將計算出來的隨機數Nonce填入區塊頭部,向臨近節點傳播
如何校驗一個區塊的有效性
- 利用算出來的nonce和本區塊里面存儲的父區塊的hash值再做一次hash。
- 驗證POW的nonce值是否符合難度值
- 檢查時間戳是否小于當前時間2小時
- 檢查Merkle樹根是否正確
- 檢查區塊size要小于區塊size的上限
- 第一筆交易必須是coinbase(挖礦成功的那筆交易)交易
- 驗證每個交易
如何驗證交易的有效性
- 交易size不能大于區塊的size上限
- 交易輸入的UTXO是否存在
- 交易UTXO沒有被其他交易引用
- 輸入金額要大于輸出金額(交易中,礦工會收取費用)
- 解鎖腳本進行驗證
區塊鏈
什么是區塊鏈
區塊鏈是一個分布式賬本,一種通過去中心化,去信任的方式集體維護的一個可靠數據的技術方案。是通過每相鄰的兩個區塊中區塊頭里面的父hash(hashPrevBlock)關聯在一起的一種鏈式數據結構。
區塊鏈的特點
去中心化
由于使用分布式核算和存儲,不存在中心化的硬件或管理機構,任意節點的權利和義務都是均等的,系統中的數據塊由整個系統中具有維護功能的節點來共同維護。開放性(沒有限制,開源,數據公開)
系統是開放的,除了交易各方的私有信息被加密外,區塊鏈的數據對所有人公開,任何人都可以通過公開的接口查詢區塊鏈數據和開發相關應用,因此整個系統信息高度透明自治性,集體維護
區塊鏈采用基于協商一致的規范和協議(比如一套公開透明的算法)使得整個系統中的所有節點能夠在去信任的環境自由安全的交換數據,使得對“人”的信任改成了對機器的信任,任何人為的干預不起作用。可靠的數據庫(不可更改,永遠可訪問)
一旦信息經過驗證并添加至區塊鏈,就會永久的存儲起來,除非能夠同時控制住系統中超過51%的節點,否則單個節點上對數據庫的修改是無效的,因此區塊鏈的數據穩定性和可靠性極高。匿名性,隱私保護
由于節點之間的交換遵循固定的算法,其數據交互是無需信任的(區塊鏈中的程序規則會自行判斷活動是否有效),因此交易對手無須通過公開身份的方式讓對方自己產生信任,對信用的累積非常有幫助。
智能合約
智能合約是什么
“智能合約”(smart contract)這個術語至少可以追溯到1995年,是由多產的跨領域法律學者尼克·薩博(Nick Szabo)提出來的。定義如下:
“一個智能合約是一套以數字形式定義的承諾(promises) ,包括合約參與方可以在上面執行這些承諾的協議。”
個人理解就是:將一些約定好的條款,用機器語言寫入機器中,在一定的條件下會自動觸發;期間不需要人為參與。
比如,通過淘寶下單付款后商家發貨,確認收貨后系統自動轉錢給商家。
智能合約的部署
http://ethereum.github.io/browser-solidity //智能合約在線編輯器