- 01-課程簡介
- 02-BTC-密碼學原理
- 03-BTC-數(shù)據(jù)結(jié)構(gòu)
- 04-BTC-協(xié)議
- 05-BTC-實現(xiàn)
- 06-BTC-網(wǎng)絡(luò)
- 07-BTC-挖礦難度
- 08-BTC-挖礦
- 09-BTC-比特幣腳本
- 10-BTC-分叉
- 11-BTC-問答
- 12-BTC-匿名性
- 13-BTC-思考
- 14-ETH-以太坊概述
- 15-ETH-賬戶
- 16-ETH-狀態(tài)樹
- 17-ETH-交易樹和收據(jù)樹
- 18-ETH-GHOST
- 19-ETH-挖礦算法
- 20-ETH-難度調(diào)整
- 21權(quán)益證明
- 22-ETH-智能合約
- 23-ETH-TheDAO
- 24-ETH-反思
- 25-ETH-美鏈
- 26-總結(jié)
北京大學公開課《區(qū)塊鏈技術(shù)與應用》由肖臻老師講授,主要講解區(qū)塊鏈的基本概念和實現(xiàn)原理,面向廣大對區(qū)塊鏈技術(shù)和應用感興趣的同學。通過這門課的學習,能夠掌握比特幣、以太坊等區(qū)塊鏈技術(shù)的設(shè)計思路并有效解決實際問題。了解更多北京大學區(qū)塊鏈課程的信息, 獲取課程相關(guān)資料請訪問肖臻老師的homepage:http://zhenxiao.com/

北京大學肖臻老師《區(qū)塊鏈技術(shù)與應用》公開課
第一節(jié):緒論
第二節(jié):密碼學原理
crypto-currency
一、 cryptographic hash function
性質(zhì) ;1 collision resistance(hash
碰撞 ) 指 H(x)=H(y) ,而 x≠y 對于哈希函數(shù),哈希碰撞是
常見的,但是要人為的制造哈希碰撞幾乎是不可能的
例子: H(m) ,m 為 message ,如果 m 被人篡改,那么
H(m) 會發(fā)生改變。
ps: 哈希弱碰撞目前是無法被數(shù)學證明的,但與此同時,我們還沒有很好的辦法人為制造哈希碰撞。

可是對于不同類型的哈希函數(shù)其安全性隨著計算機科學和數(shù)學方法的進步,
也是有可能被破
解的,例如 MD5
性質(zhì) 2 hiding 指哈希函數(shù)的計算不可逆,對于給定
x 可以計算 H(x) ,可是我們幾乎不可能
從 H(x) 反推出 x.
digital commitment/digital equivalment of a sealed envelope
由于預測本身可能會影響結(jié)
果,需要一種方法在預測結(jié)果不能提前公開的情況下,保證預測結(jié)果的真實性。
將預測 x 的哈希值公開,待到結(jié)果出現(xiàn)時再公開預測以檢驗預測與實際是否相符。在實際操作中,也有將
x 和隨機數(shù)一起做
HASH 以保證取值的分布足夠離散。
比特幣中的哈希函數(shù)所需性質(zhì):
性質(zhì) 3 puzzle friendly
指除了遍歷以外, 沒有任何辦法可以做出哈希碰撞,
這樣才可以作為
挖礦證明, 然而想驗證一個人的挖礦證明卻是非常快捷的,
因為只需要計算一次哈希函數(shù)值
就可以了。
比特幣中所使用的哈希函數(shù)為:
SHA256 —— Secure Hash Algorithm
二、數(shù)字簽證
1.public key private key
asymmetric encryption algorithm
非對稱加密算法
由于區(qū)塊鏈系統(tǒng)是完全公開的,所以并不需要公私鑰對進行保密通信,而是進行數(shù)字簽名,
以驗證自己的身份,即私鑰加密,公鑰解密
對于 256 位的公私鑰對,很難有兩個賬戶擁有完全相同的公私鑰對,所以很難通過產(chǎn)生公
私鑰對再比對的方法來冒名他人。
第三節(jié) 數(shù)據(jù)結(jié)構(gòu)一、
hash pointers
區(qū)塊鏈 (block chain) 是最基本的數(shù)據(jù)結(jié)構(gòu),
他和普通的鏈表的區(qū)別在于,
使用 hash pointers
取代了普通的指針
genesis block: 創(chuàng)世紀塊,指第一個區(qū)塊
most recent block
指最后一個產(chǎn)生的區(qū)塊
在區(qū)塊鏈中,每一個
block 都含有一個 Hash pointer 指向前一個塊,而最后一個塊的指針
就保存在系統(tǒng)中!
Hash pointer 的值是前一個塊的所有數(shù)據(jù)的
hash 函數(shù)的取值!
所以無論區(qū)塊鏈中的哪一個塊發(fā)生了改變,
都會導致之后所有的
Hash 全部改變, 因此只需
要檢驗最后一個
Hash ,即系統(tǒng)中的
Hash 來檢驗區(qū)塊鏈中數(shù)據(jù)是否被修改。在實際操作過
程當中, 也不需要將整條區(qū)塊鏈完整的保存下來,
而只需要將最后的若干長度的區(qū)塊鏈緩存
下來,實時更新,進行驗證。
二、
Merkle tree
Merkle tree 是另外一種給基本的數(shù)據(jù)類型,他與普通的樹的區(qū)別在于,使用
Hash pointers
取代了普通的指針
Merkle tree 的指針從葉節(jié)點指向根節(jié)點,將左
(右)節(jié)點的 Hash 值保存在當前節(jié)點的左
(右)Hash 指針,最后將根節(jié)點的
Hash 值保存在系統(tǒng)中!對于 Merkle tree 而言,其最原本的數(shù)據(jù)是保存在整棵樹的葉節(jié)點上的,而根莖部分都是保
存了上一級的哈希值。
Merkle proof:
全節(jié)點保存了交易的全部信息,而輕節(jié)點只保存
block header ,為了向輕節(jié)
點證明一個新的交易已經(jīng)被寫入
Merkle tree 了!那么需要在樹中找到這個交易葉子,并且
從葉子出發(fā)回到根節(jié)點,
在這個過程中, 輕節(jié)點所在的本地主機需要不斷計算出當前節(jié)點的
Hash 值,如果沿途的
Hash 值正確,那么交易正常√。這樣一條路徑就是
Merkle proof
如果對交易按時間順序進行排序,
然后布置成 Merkle tree(sorted Merkle tree)
,那么就可以
用一種簡單的方法證明非法交易并不存在于區(qū)塊鏈中
ps:Hash 指針必須要先確立一個節(jié)點的值,
才能去計算與之相關(guān)的區(qū)塊的值,
因此這個類型
的指針是不可以應用在環(huán)形數(shù)據(jù)結(jié)構(gòu)當中的。第四節(jié) 協(xié)議
帶權(quán)力中心的數(shù)字貨幣需要一個權(quán)力中心,
權(quán)力中心發(fā)行貨幣的公鑰公開,
用私鑰加密數(shù)字
貨幣, 這樣每個人都可以用公鑰驗證貨幣來自于權(quán)力中心。
但是數(shù)字貨幣的本質(zhì)是文件,
如
果用戶大量復制數(shù)字貨幣,
每個貨幣都擁有被權(quán)力中心認可的數(shù)字簽名,
這樣就可以用偽造
的數(shù)字貨幣進行交易,也叫做
double spending attack(
雙花交易 )
處理方法: 在數(shù)字貨幣上再額外添加唯一編號,
這樣就可以區(qū)別每一張貨幣,
防范雙花交易,
但是這種方法必須由中央權(quán)力機構(gòu)來維護一個數(shù)據(jù)庫來實時存儲貨幣編號和持有人信息,
即
每一筆數(shù)字交易都必須由中心權(quán)力機構(gòu)確認合法性。
在去數(shù)據(jù)中心的數(shù)字貨幣系統(tǒng)中,需要使用區(qū)塊鏈技術(shù)來避免雙花交易。
1. 鑄幣
鑄幣交易是每個用戶都擁有的權(quán)力,即鑄幣權(quán),可以記作:→
A(10)
2. 轉(zhuǎn)賬
由某個用戶交易個某組用戶貨幣的行為,可以記作
:A→B(5),A →C(5) 此時區(qū)塊鏈中有兩種哈希指針
1).鏈接交易的指針; 2).說明貨幣來源的指針
轉(zhuǎn)賬行為需要:轉(zhuǎn)賬方的簽名;收賬人的地址
在驗證交易合法性的時候, 需要上一筆交易的輸出和下一筆交易的輸入合起來來測試能否正
常運行—— BitCoin Script
區(qū)塊鏈的組成:
1.
Block header
version
hash of previous block header
只算前一個區(qū)塊的塊頭
Merkle root hash
target
nonce
2.
Block body
transaction list( 交易列表 ) 節(jié)點的分類
1.
full mode 全節(jié)點,也叫做
fully validating node
2.
light node 只保存 block header ,因此輕節(jié)點不能獨立做驗證。
distributed consensus
分布式共識,即共享賬本可以被所有用戶承認
FLP impossibility result :在一個異步的系統(tǒng)中,即使只有一個成員出錯,那么也不可能取
得分布式共識。
CAP Theorem(C: consistency
一致性 ,A: Availability
可用性 ,P: Partition tolerance
容錯
性)CAP 三條性質(zhì)只能同時滿足兩條
我們需要找到這樣一個
nonce 使得 H(block header) ≤target 成立,這樣該賬戶才能擁有往區(qū)
塊鏈中寫入交易的權(quán)力。
分叉攻擊: 通過往區(qū)塊鏈中間插入合法交易來進行回滾,
因此區(qū)塊鏈應當只接受能延拓最長
合法鏈的交易
coinbase transaction
是唯一鑄幣的方法。每產(chǎn)生一個新的交易,那么擁有投票權(quán)的賬戶可以擁有 block reward ,即使用 coinbase transaction
去鑄造 bitcoin 。協(xié)議中規(guī)定初始鑄造數(shù)
量為 50BTC ,但是每當區(qū)塊鏈延長
21W ,鑄造數(shù)量減半,目前
block reward 為 12.5BTC.
只有通過計算求解
nonce 才能獲得記賬權(quán),獲得記賬權(quán)就能得到
block reward ,利用
coinbase transaction
鑄造新的貨幣。
因為區(qū)塊鏈的特殊性質(zhì),計算
nonce 是沒有任何捷徑的。
因此尋找 nonce 的過程就被稱作挖礦,獲得記賬權(quán)的節(jié)點就被稱為礦工第五節(jié) 實現(xiàn)
Block chain 是一個去中心化的共享賬本
以 Bitcoin 為例, Bitcoin 是一個基于交易的賬本模式
transaction-based ledger
UTXO: Unspent Transaction Output
未被花掉的交易的集合
通過查詢 UTXO 來確認新的交易中使用的貨幣是否在
UTXO 中,若在,則合法,否則不合
法。因此全節(jié)點內(nèi)存中需要頻繁使用
UTXO 來確認交易的合法性。
交易會不斷的更新
UTXO 。
UTXO 中被交易使用掉的貨幣
=UTXO 中因交易產(chǎn)生的未使用的貨幣。
total inputs= total outputs
transaction fee 交易費
交易費的金額較小,但是隨著減半效應的存在,最終會轉(zhuǎn)變成以
transaction fee 為主體的
挖礦行為。
以太坊是一個基于賬戶的賬本模式
account-based leger
