目錄
一毁靶、區(qū)塊
- 什么是區(qū)塊
- 區(qū)塊的結(jié)構(gòu)
- 產(chǎn)生一個(gè)區(qū)塊的過程
- 如何校驗(yàn)一個(gè)區(qū)塊的有效性
- 如何驗(yàn)證交易的有效性
二、區(qū)塊鏈
- 什么是區(qū)塊鏈
- 區(qū)塊鏈的特點(diǎn)
三幕与、智能合約
- 智能合約是什么
- 如何搭建一個(gè)智能合約
關(guān)鍵字
UTXO POW coinbase Markle Tree Nonce
正文
區(qū)塊
什么是區(qū)塊
在比特幣網(wǎng)絡(luò)中速兔,數(shù)據(jù)會(huì)以文件的形式被永久記錄,我們稱這些文件為區(qū)塊淤齐。同時(shí)也是一種記錄交易的數(shù)據(jù)結(jié)構(gòu)股囊。每個(gè)區(qū)塊由區(qū)塊頭和區(qū)塊主體組成,區(qū)塊主體只負(fù)責(zé)記錄前一段時(shí)間內(nèi)的交易信息更啄,區(qū)塊鏈的大部分功能都由區(qū)塊頭來實(shí)現(xiàn)稚疹。
區(qū)塊的結(jié)構(gòu)
區(qū)塊的結(jié)構(gòu)主要分為兩部分:區(qū)塊頭和區(qū)塊主體,如下:
區(qū)塊結(jié)構(gòu)
數(shù)據(jù)項(xiàng) | 描述 | 長(zhǎng)度 |
---|---|---|
Magic no(魔法數(shù)) | 總是0xD9B4BEF9 | 4字節(jié) |
Blocksize(區(qū)塊大小) | 到區(qū)塊結(jié)束的字節(jié)長(zhǎng)度 | 4字節(jié) |
Blockheader(區(qū)塊頭) | 包含8個(gè)數(shù)據(jù)項(xiàng) | 80字節(jié) |
Transaction counter(交易數(shù)量) | 正整數(shù)VI=VarInt | 1-9字節(jié) |
Transaction (交易) | 交易列表(非空) | <Transaction-counter>許多交易 |
Blockheader區(qū)塊頭表結(jié)構(gòu)
數(shù)據(jù)項(xiàng) | 目的 | 更新時(shí)間 | 大屑牢瘛(字節(jié)) |
---|---|---|---|
Version(版本) | 區(qū)塊版本號(hào) | 更新軟件后他指定了一個(gè)新的版本號(hào) | 4 |
hashPrevBlock(前一個(gè)區(qū)塊的hash值) | 前一個(gè)區(qū)塊的256位hash(父區(qū)塊的hash内狗,區(qū)塊與區(qū)塊之間就是靠次hash鏈接成鏈) | 新區(qū)塊進(jìn)來時(shí) | 32 |
hashMerkleRoot Merkle(根結(jié)點(diǎn)hash值) | 基于一個(gè)區(qū)塊中所有交易的256位hash | 接受一個(gè)交易時(shí) | 32 |
Time(時(shí)間戳) | 從1970-01-01 00:00 UTC開始到現(xiàn)在,一秒為單位的當(dāng)前時(shí)間戳 | 每幾秒更新 | 4 |
Bits(當(dāng)前目標(biāo)的hash) | 壓縮格式的當(dāng)前目標(biāo)hash值 | 挖礦難度調(diào)整時(shí) | 4 |
Nonce(隨機(jī)數(shù)) | 從0開始的32位隨機(jī)數(shù) | 產(chǎn)生hash時(shí)(每次產(chǎn)生hash隨機(jī)數(shù)時(shí)都要增加) | 4 |
產(chǎn)生一個(gè)區(qū)塊的過程
1.礦工在挖礦前要組建區(qū)塊
? 將coinbase交易打包進(jìn)區(qū)塊(coinbase交易必須放在交易列表的第一個(gè))
? 將交易池中優(yōu)先級(jí)的交易打包進(jìn)區(qū)塊
? (優(yōu)先級(jí) = 交易的額度 * UTXO的深度 / 交易的size)
2.創(chuàng)建區(qū)塊的頭部
? 版本號(hào) 父區(qū)塊哈希 Markle樹根 時(shí)間戳 難度值 Nonce
3.挖礦成功后义锥,將計(jì)算出來的隨機(jī)數(shù)Nonce填入?yún)^(qū)塊頭部柳沙,向臨近節(jié)點(diǎn)傳播
如何校驗(yàn)一個(gè)區(qū)塊的有效性
- 利用算出來的nonce和本區(qū)塊里面存儲(chǔ)的父區(qū)塊的hash值再做一次hash。
- 驗(yàn)證POW的nonce值是否符合難度值
- 檢查時(shí)間戳是否小于當(dāng)前時(shí)間2小時(shí)
- 檢查Merkle樹根是否正確
- 檢查區(qū)塊size要小于區(qū)塊size的上限
- 第一筆交易必須是coinbase(挖礦成功的那筆交易)交易
- 驗(yàn)證每個(gè)交易
如何驗(yàn)證交易的有效性
- 交易size不能大于區(qū)塊的size上限
- 交易輸入的UTXO是否存在
- 交易UTXO沒有被其他交易引用
- 輸入金額要大于輸出金額(交易中拌倍,礦工會(huì)收取費(fèi)用)
- 解鎖腳本進(jìn)行驗(yàn)證
區(qū)塊鏈
什么是區(qū)塊鏈
區(qū)塊鏈?zhǔn)且粋€(gè)分布式賬本赂鲤,一種通過去中心化噪径,去信任的方式集體維護(hù)的一個(gè)可靠數(shù)據(jù)的技術(shù)方案。是通過每相鄰的兩個(gè)區(qū)塊中區(qū)塊頭里面的父hash(hashPrevBlock)關(guān)聯(lián)在一起的一種鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)数初。
區(qū)塊鏈的特點(diǎn)
去中心化
由于使用分布式核算和存儲(chǔ)找爱,不存在中心化的硬件或管理機(jī)構(gòu),任意節(jié)點(diǎn)的權(quán)利和義務(wù)都是均等的泡孩,系統(tǒng)中的數(shù)據(jù)塊由整個(gè)系統(tǒng)中具有維護(hù)功能的節(jié)點(diǎn)來共同維護(hù)车摄。開放性(沒有限制,開源珍德,數(shù)據(jù)公開)
系統(tǒng)是開放的练般,除了交易各方的私有信息被加密外,區(qū)塊鏈的數(shù)據(jù)對(duì)所有人公開锈候,任何人都可以通過公開的接口查詢區(qū)塊鏈數(shù)據(jù)和開發(fā)相關(guān)應(yīng)用薄料,因此整個(gè)系統(tǒng)信息高度透明自治性,集體維護(hù)
區(qū)塊鏈采用基于協(xié)商一致的規(guī)范和協(xié)議(比如一套公開透明的算法)使得整個(gè)系統(tǒng)中的所有節(jié)點(diǎn)能夠在去信任的環(huán)境自由安全的交換數(shù)據(jù)泵琳,使得對(duì)“人”的信任改成了對(duì)機(jī)器的信任摄职,任何人為的干預(yù)不起作用。可靠的數(shù)據(jù)庫(不可更改获列,永遠(yuǎn)可訪問)
一旦信息經(jīng)過驗(yàn)證并添加至區(qū)塊鏈谷市,就會(huì)永久的存儲(chǔ)起來,除非能夠同時(shí)控制住系統(tǒng)中超過51%的節(jié)點(diǎn)击孩,否則單個(gè)節(jié)點(diǎn)上對(duì)數(shù)據(jù)庫的修改是無效的迫悠,因此區(qū)塊鏈的數(shù)據(jù)穩(wěn)定性和可靠性極高。匿名性巩梢,隱私保護(hù)
由于節(jié)點(diǎn)之間的交換遵循固定的算法创泄,其數(shù)據(jù)交互是無需信任的(區(qū)塊鏈中的程序規(guī)則會(huì)自行判斷活動(dòng)是否有效),因此交易對(duì)手無須通過公開身份的方式讓對(duì)方自己產(chǎn)生信任括蝠,對(duì)信用的累積非常有幫助鞠抑。
智能合約
智能合約是什么
“智能合約”(smart contract)這個(gè)術(shù)語至少可以追溯到1995年,是由多產(chǎn)的跨領(lǐng)域法律學(xué)者尼克·薩博(Nick Szabo)提出來的忌警。定義如下:
“一個(gè)智能合約是一套以數(shù)字形式定義的承諾(promises) 搁拙,包括合約參與方可以在上面執(zhí)行這些承諾的協(xié)議》啵”
個(gè)人理解就是:將一些約定好的條款箕速,用機(jī)器語言寫入機(jī)器中,在一定的條件下會(huì)自動(dòng)觸發(fā)礼烈;期間不需要人為參與弧满。
比如,通過淘寶下單付款后商家發(fā)貨此熬,確認(rèn)收貨后系統(tǒng)自動(dòng)轉(zhuǎn)錢給商家庭呜。
智能合約的部署
http://ethereum.github.io/browser-solidity //智能合約在線編輯器