1.參考文獻
http://www.ruanyifeng.com/blog/2018/01/bitcoin-tutorial.html
http://www.ruanyifeng.com/blog/2017/12/blockchain-tutorial.html
2.比特幣的源頭論文
https://bitcoin.org/en/bitcoin-paper
3.非對稱式加密
加密和解密需要一對鑰匙:一把公開金鑰和一把私密金鑰。你有一對鑰匙,公開金鑰可以公開告訴任何人,私密金鑰不能告訴任何人,只能你自己知道,不能泄漏。
情境1:有一個人想給你發訊息,ta用你的公開金鑰對訊息加密,然後再發給你,然後你可以用私密金鑰解密,然後看訊息。
情境2:有人有你的名義給大家/任何人發了一個訊息,如何讓大家/任何人相信是你發的呢。ta們用你的公開金鑰對這個訊息進行解密,如果解密出來的結果是可讀的可用的符合預期的,就能確認是你發的。別人沒有你的私密金鑰,加密的訊息就無法用你的公開金鑰解密。
情境3:有人用比特幣給你一筆錢,用你的公開金鑰對這筆錢進行加密,你收到了,用私密金鑰解密,得到這筆錢。
4.比特幣錢包
位元別錢包就是一對鑰匙:私密金鑰和公開金鑰。公開金鑰長度是512位二進位,太長,又為它產生一個160位二進位的指紋,寫成16進位,就是26~35個字元,這個字串就是錢包的地址,是唯一的。你向別人收錢的時候,把地址給別人就行。私密金鑰,要保護好,不要丟掉。
5.比特幣交易
步驟如下:
一個人申報一筆交易,地址A向地址B支付10個比特幣。申報參數包括:地址A的上一筆交易的Hash; 本次交易雙方的地址; A地址的公開金鑰; A地址的私密金鑰產生的數位簽章。
服務端驗證交易:找到地址A的上一筆交易確認支付放的比特幣來源合理; 計算地址A的公開金鑰指紋,確認和支付方的地址一致,驗證公開金鑰屬實; 用地址A的公開金鑰解開數位簽章,保證私密金鑰屬實。經過這三步,驗證私密金鑰屬實。
6.交易確認與區塊鏈
交易確認後,要把交易資訊寫入資料庫,全網同步之後,地址B才能真正收到錢。這個資料庫就是區塊鏈blcokchain。
對比特幣全網而言,所有的交易資料都會發送到礦工那裡,礦工把交易資料寫入到區塊鏈。一個區塊鏈是1M,一筆交易500位元組,因此一個區塊最多寫2000筆交易。礦工把2000筆交易打包在一起,組成一個區塊,計算hash。計算Hash也叫採礦。誰第一個將新區塊進入區塊鏈,就享受採礦的收益。交易一旦寫入,就無法撤銷。
挖到一個新區塊,礦工會獲得鼓勵,一開始是50比特幣,每4年減半。
比特幣全網,每十分鐘產生一個區塊,也就是2000筆交易,也就是每秒3~5筆。慢。
有一種方案是把區塊加大到2M,提升2倍速度。一個方案是BCH方案,將區塊加大到8M,提升8倍。但本質上是沒用,提升到100M也沒啥用。提升區塊大小是無解的。
7.區塊鏈全網
p2p網路,無數個節點,每個節點包含真箇區塊鏈全部資料,目前是100g左右,還會繼續增加。
8.區塊鏈本質
區塊鏈是一種特殊的分散式資料庫,可以寫入資料,可以讀取資料。每個節點地位都是平等的。每個節點都儲存了整個鏈的全部資訊。
任何人都可以架設一個伺服器做一個新節點加入網路,所有節點都會同步,保證區塊鏈一致。
一個區塊block,是一個1M的資料。一個區塊包含兩個部分:區塊頭; 區塊體。區塊頭飽含當前區塊的多個參數:本區塊產生時間;區塊體儲存資料的資料Hash; 上一個區塊的Hash等等。也就是說,根據區塊頭,可以完整地追溯到整個區塊鏈的源頭和全鏈。在資料結構上,是一個從尾逐個指向頭的單鏈。