一本手把手教你用Python刻出區塊鏈的技術書,想了解區塊鏈背後的原理?就從挽起袖子寫程式開始!
手把手教學:你也可以寫出跑得動的區塊鏈!
實用密碼學:Merkle Tree、非對稱加密、零知識證明是怎麼做的?
共識與分岔:暫時性分岔、軟分岔、硬分岔有甚麼區分?
礦工的世界:扣塊攻擊怎麼做?機槍池的原理是甚麼?
本書內容改編自第 11 屆iT 邦幫忙鐵人賽的Blockchain 組冠軍系列文章,也是第一本從技術角度出發,透過實地撰寫區塊鏈開始談背後所應用到的相關知識。在完整復刻出區塊鏈後,更能了解到區塊鏈世界裡常聽到的幾個專有名詞:女巫攻擊、共識演算法、軟分岔與硬分岔、工作量證明、非對稱加密的由來。
“What I cannot create, I do not understand” - Richard Feynman
五大重點:
1.用 Python 從頭打造區塊鏈
本書重點在於從復刻出區塊鏈開始,帶你逐步了解開設錢包、發起並簽署交易、節點廣播的功能是如何被實作出來的,並透過實作過程中的細節來了解到區塊鏈背後需要哪些知識。
2.密碼學初探
虛擬貨幣之所以常被稱為加密貨幣就是因為應用了大量的密碼學,也是因為密碼學我們才能夠在茫茫的網路世界中確認彼此的身分!
3.聊聊挖礦的兩三事
帶你實地加入礦工們的世界,來看看礦工與礦池間又有哪些鉤心鬥角的方式!
4.P2P網路入門
在去中心化的世界中,我們如何知道彼此的身分?又如何形塑出一樣的共識?在求取共識的過程中,分岔又是怎麼形成的?
5.淺談現實中的區塊鏈:BTC與Ethereum
現在最知名的兩大公鏈莫過於比特幣(BTC)與乙太坊(ETH)了!除了講述區塊鏈的原理之外,本書最後也會帶你解析與走過比特幣與乙太坊的發展歷程與架構。
本書範例檔下載網址:
https://github.com/lkm543/Blockchain_Survival_Guide
作者簡介:
李耕銘
電機所畢業後目前不務正業地在台大資工訓練班擔任講師,平時喜歡教學、寫文章、研究基礎科學,幾年前誤打誤撞地踏入區塊鏈的世界,從個人挖礦、開設礦場、寫智能合約都參與過。
現在養了五隻貓,努力過每一天掙罐頭錢。
本書也是作者在資工訓練班開設區塊鏈課程的參考教材。
https://bit.ly/2MINgA7
Email:lkm543@gmail.com
目錄
Chapter 01 前言:區塊鏈的誕生
1-1 用共識來信任
1-2 你的錢不是你的錢
1-3 Be your own bank
1-4 本書的架構
Chapter 02 打造一個簡易的區塊鏈
2-1 定義格式與架構
➔交易的組成
➔區塊鏈架構
2-2 產生創世塊與挖掘新區塊
➔產生雜湊值(Hash)
➔產生創世塊(genesis block)
➔放置交易紀錄至新區塊中
➔挖掘新區塊
➔現在遇到的問題
2-3 難度調整與確認雜湊鏈
➔調整挖掘難度
➔計算帳戶餘額
➔確認雜湊值是否正確
➔測試一下
➔目前的問題
2-4 公、私鑰與簽章
➔非對稱式加密
➔一個交易經過了哪些步驟?
➔利用 RSA 加密產生公、私鑰與地址
➔利用產生的公私鑰簽章後發送交易
➔試著跑起整個鏈並發起交易
➔目前的問題
2-5 節點與使用者的溝通
➔前置作業
➔Socket
➔Thread
➔Bitcoin 中的 Socket 與 Thread
➔節點與客戶端的功能
➔產生錢包地址與公私鑰
➔初始化交易
➔簽章交易
➔控制流程
➔實際操作
➔查詢餘額
➔發起交易
➔確認是否有收到
2-6 節點間的同步與廣播
➔節點的建置
➔接受並判別訊息
➔接收並驗證廣播的區塊
➔如果廣播的區塊驗證通過,改挖掘下一塊
➔挖掘到新區塊,廣播給其他節點
➔執行我們的區塊鏈與雙節點
➔現實中的網路
➔網路的延遲
➔節點不全然可信(reliable)
➔完成簡易的區塊鏈了!
Chapter 03 密碼學初探
3-1 名詞簡介
➔編碼
➔亂碼
➔Big5與UTF-8
➔編碼的其他應用
➔壓縮
➔無失真壓縮
➔失真壓縮
➔霍夫曼(Hoffman) 編碼
➔雜湊
➔雜湊在區塊鏈上的功能
➔雜湊的其他功能
➔雜湊表(Hash Table)
➔自製一個簡單的雜湊函數
➔加密
➔Kerckhoffs's principle(柯克霍夫原則)
3-2 古典加密
➔Caesar 加密
➔Monoalphabetic 加密
➔Vigenère Cipher aka Polyalphabetic 加密
➔One-Time Pad(一次性密碼本)
➔Rail-Fence Ciphers(柵欄加密法)
3-3 現代加密― XOR 與 SPN 加密
➔稍微現代一點的加密
➔XOR Cipher
➔Substitution-Permutation Network(SPN)
➔SPN 演算法實作
➔XOR Cipher
➔S-boxes(替換盒)
➔P-boxes(排列盒)
➔加密:重複 XOR Cipher → S-boxes → P-boxes 的步驟
➔解密:把加密的過程倒置過來
➔測試一下加解密
➔SPN 有滿足 Diffusion 跟 Confusion 嗎?
➔SPN 與區塊鏈
➔Feistel Cipher
➔串流加密 vs 區塊加密
➔串流加密
➔區塊加密
➔Electronic codebook(ECB)
➔重放攻擊
➔Cipher-block chaining(CBC)
➔區塊鏈上的重放攻擊
➔現代加密標準
➔Data Encryption Standard(DES)
➔Triple DES(3DES)
➔Advanced Encryption Standard 加密(AES)
➔Rijndael 演算法
➔編碼、壓縮、雜湊、加密的比較
3-4 Merkle Tree
➔為什麼不直接連接(concatenation)所有交易再 Hash?
➔Merkle Tree 如何驗證交易
➔Second preimage attack
➔Bitcoin 中的 Merkle Tree
➔Full Node
➔SPV(Simplified Payment Verification) Node
3-5 非對稱加密與數位簽章
➔對稱與非對稱加密
➔對稱式加密
➔非對稱式加密
➔RSA 加密
➔RSA 公私鑰的產生
➔RSA 加密
➔RSA 解密
➔要如何攻擊RSA ?
➔橢圓公式(Elliptic Curve Cryptography,ECC)
➔橢圓公式概論
➔橢圓公式的加法定理
➔橢圓公式的離散
➔橢圓公式的不可逆
3-6 零知識證明
➔沒有隱私的交易
➔零知識證明(Zero-Knowledge Proofs)
➔同態隱藏(Homomorphic Hidings)
➔zk-SNARKs
➔犯罪者的溫床
➔幾種匿蹤性貨幣
Chapter 04 關於挖礦的兩三事
4-1 原理應用與礦池
➔挖礦
➔原生的挖礦
➔挖礦方式演變
➔挖礦硬體
4-2 抗ASIC 演算法
➔Bitcoin 被 ASIC 攻陷
➔用CPU 挖能挖多少?
➔ASIC 帶來極度中心化的疑慮
➔Ethereum 如何對抗 ASIC
➔Dagger-Hashimoto 演算法
➔有向無環圖(Directed Acyclic Graph,DAG)
➔Hashimoto 演算法
➔Dagger-Hashimoto
➔其他種抗 ASIC 演算法
➔究竟有沒有必要對抗 ASIC?
4-3 挖礦實戰
➔如何開始挖礦
➔選擇幣種/ 演算法
➔ASIC 挖礦
➔GPU 挖礦
➔Nicehash 挖礦
➔Ethereum 的算力預估
➔選擇硬體
➔CPU、RAM、SSD、網路
➔主機板
➔電源供應器(PSU)
➔GPU
➔選擇作業系統
➔選擇挖礦軟體
➔實際畫面
4-4 礦工間的戰爭
➔壓低成本(電費)
➔硬體調校
➔契約用電與時間電價
➔增加挖礦期望值
➔挖空塊
➔跳跳池
➔跳跳池
➔扣塊攻擊
Chapter 05 P2P 網路
5-1 網路架構種類
➔傳統的網路架構
➔Peer to Peer(P2P)網路
➔P2P 網路的難題
➔工作的分配
➔P2P 網路的分類
➔P2P 與區塊鏈
5-2 共識―拜占庭將軍問題
➔拜占庭將軍問題
➔拜占庭將軍問題與區塊鏈
➔拜占庭容錯(BFT)演算法
➔證明拜占庭容錯機制
➔實用拜占庭容錯(PBFT)
➔共識的形成與岔開
5-3 共識未能形成的插曲:暫時性分岔
➔暫時性分岔(Temporary Fork)
➔Bitcoin 中的最長鏈機制
➔Ethereum 中的叔塊(Uncle block) 機制
➔叔塊如何被定義
➔如何計算叔塊獎勵
➔叔塊對整體礦工的利益是好的嗎?
➔51% 攻擊
5-4 共識未能形成的插曲:軟分岔與硬分岔
➔升級之路上的岔路口
➔從社群提案到接受
➔BIP(Bitcoin Improvement Proposals)
➔EIP(Ethereum Improvement Proposals)
➔軟分岔(Soft Fork)
➔硬分岔(Hard Fork)
➔IFO(Initail Fork Offering)
➔歷史上知名的硬分岔
➔ETC 的分岔
➔BCH 的分岔
Chapter 06 現實中的區塊鏈
6-1 區塊鏈與代幣的發展
➔區塊鏈10、20、30
➔區塊鏈10 ― Bitcoin
➔區塊鏈20 ― Ethereum
➔區塊鏈30 ― IOTA?
➔區塊鏈上代幣的實務發展
6-2 Bitcoin 與 Ethereum 的交易架構
➔Bitcoin 的 UTXO 架構
➔UTXO 如何預防雙花攻擊
➔UTXO 的優點
➔Ethereum 的 Account 架構
➔Account 架構如何預防雙花攻擊
➔Input Data
➔Account 架構的優點
6-3 Bitcoin 的發展與路線之爭
➔多重簽名
➔隔離驗證(Segregated Witness,Segwit)
➔閃電網路(Lightning Network)
6-4 用 Command Line 操作 Bitcoin
➔操作 Bitcoin
➔圖形化介面
➔Bitcoin-core
➔環境設定
➔啟動與停止
➔挖掘新區塊
➔發起交易
➔手動簽發一筆交易
➔查詢 UTXO
➔初始化一筆交易
➔簽署這筆交易
➔多重簽名
6-5 Ethereum 的 EVM 與智能合約
➔圖靈完備性
➔Ethereum Virtual Machine(EVM)
➔Ethereum 的 Gas 機制
➔智能合約(Smart Contract)
➔Decentralized Application(DAPP)
6-6 基礎智能合約語法
➔開發環境與使用
➔合約架構
➔變數型別
➔運算子
➔函式撰寫
➔常用 contract/library
➔智能合約範例
6-7 智能合約的使用與操作
➔智能合約
➔網頁與 Ethereum 的互動
➔Metamask
➔Web3js
➔初始化並連接節點
➔取得錢包餘額
➔匯款
➔使用智能合約
Chapter 07 踏入虛擬貨幣
7-1 相關媒體
➔區塊客
➔區塊勢
7-2 購置虛擬貨幣
➔代購商
➔國內交易所
➔國外交易所
➔冷錢包
7-3 常見交易方式
7-4 區塊鏈不可能三角
7-5 USDT 是泡沫嗎?
Chapter 01 前言:區塊鏈的誕生
1-1 用共識來信任
1-2 你的錢不是你的錢
1-3 Be your own bank
1-4 本書的架構
Chapter 02 打造一個簡易的區塊鏈
2-1 定義格式與架構
➔交易的組成
➔區塊鏈架構
2-2 產生創世塊與挖掘新區塊
➔產生雜湊值(Hash)
➔產生創世塊(genesis block)
➔放置交易紀錄至新區塊中
➔挖掘新區塊
➔現在遇到的問題
2-3 難度調整與確認雜湊鏈
➔調整挖掘難度
➔計算帳戶餘額
➔確認雜湊值是否正確
➔測試一下
➔目前的問題
2-4 公、私鑰與簽章
➔非對稱式加密
➔一個交易經過了哪些步驟?
➔利用 RSA 加密產生公、私鑰與地址
➔利用產生...