05.22 區塊鏈導航——一文帶你入門比特幣

區塊鏈導航也是一個入門區塊鏈的入門學習路線。下圖是一個區塊鏈相關內容的整理分享,內容還是比較繁瑣,當然在學習區塊鏈的過程中並不需要那麼複雜。鑽研琢磨某些方面可能對這個學習過程更為深刻。

所有內容不需要科學上網,當然通過科學上網能獲取更多信息,這裡暫時只收錄了不通過科學上網能獲取的內容

磨鏈社區-區塊鏈導航目錄:

區塊鏈導航——一文帶你入門比特幣


比特幣內容

這裡先從比特幣說起。大致做了圖示:

區塊鏈導航——一文帶你入門比特幣

比特幣起源於中本聰的一篇論文,一般稱為創世論文

比特幣起源於中本聰的一篇論文,一般稱為**創世論文**:

**創世論文獲取**

* [Bitcoin:A Peer-to-Peer Electronic Cash System](https://bitcoin.org/bitcoin.pdf)

* [比特幣:一種點對點電子現金系統](https://wenku.baidu.com/view/c62c067cb307e87101f69642.html)

**bitcoin代碼獲取**

比特幣是代碼開源在github上,比特幣採用C++編寫,具體地址如下:

* [獲取bitcoin代碼](https://github.com/bitcoin/bitcoin)

**bitcoin社區**

[比特幣社區-中文](https://bitcoin.org/zh_CN/community)

**bitcoin-wallet**

* [bitcoin-wallet獲取代碼](https://github.com/bitcoin-wallet/bitcoin-wallet)

**bitcoin交易查詢**

* [Blockchain-info](https://blockchain.info/zh-cn/)

**BIP(比特幣改進協議)**

* [BIPs-github地址](https://github.com/bitcoin/bips/)

---

### 比特幣中相關學習資料

在學習比特幣過程中,《精通比特幣》無疑是最好的一本入門書籍。下列了中英文兩個版本地址。

**《Mastering Bitcoin》**

* [《Mastering Bitcoin》](https://github.com/bitcoinbook/bitcoinbook#mastering-bitcoin)

**《精通比特幣》第二版(中文)**

* [《精通比特幣》第二版-中文-巴比特讀書](http://book.8btc.com/masterbitcoin2cn)

那麼網絡上一些比特幣學習資料和相關網絡分享如下:

* [區塊鏈中文社區-比特幣板塊](https://bitshuo.com/?tab=btc)

* [詳解比特幣的原理和運行機制 視頻講解](http://open.163.com/movie/2016/7/I/S/MBQU8RAT9_MBQU9CUIS.html)

* [區塊鏈100問](http://tech.sina.com.cn/zt_d/blockchain_100/)

* [巴比特-比特幣](http://8btc.com/forum-2-1.html)

---

### 比特幣學習目錄

* 比特幣簡介

* 比特幣白皮書解讀

* 比特幣密鑰與地址

* 比特幣錢包

* 比特幣交易

* 比特幣網絡

* 比特幣區塊鏈結構

* 比特幣的挖礦與共識

* 比特幣安全

* 比特幣環境部署

* 比特幣應用開發

---

### 常見問題內容

#### 什麼是比特幣?

比特幣(英語:Bitcoin,簡寫:BTC,貨幣符號:฿),是一種用開源的 P2P 技術的軟件而產生的電子貨幣。虛擬貨幣“比特幣”的概念最初由中本聰(Satoshi Nakamoto,可能化名)在 2009 年提出。現在比特幣也指根據中本聰的思路設計發佈的開源軟件以及建構其上的整個 P2P 網絡。

與大多數現行貨幣不同的是,比特幣貨幣系統是獨立存在的,其運行不依賴於中央銀行、政府、大型企業的支持或者信用擔保。比特幣使用遍佈整個 P2P 網絡節點的分佈式數據庫來管理貨幣的發行、交易和賬戶餘額信息。中本聰採用密碼學的原理,確保各個比特幣節點按照既定的協議達成共識,從而確保貨幣流通各個環節的安全性。例如,比特幣只能被它的真實擁有者使用,而且僅僅能使用一次,支付完成之後原主人即失去對該份額比特幣的所有權。比特幣貨幣總量按照設計預定的速率逐步增加,增加速度逐步放緩,並最終在 2140 年達到2100 萬個的極限。P2P 的分佈式特性與去中心化的設計結構,確保了理論上任何機構都不可能操控比特幣的貨幣總量,或者製造通貨膨脹。在全球範圍內,比特幣可以通過多個線上的交易所和服務商進行兌換交易,也可以在線下找到兌換點,兌換為現鈔或金幣。

---

#### 比特幣的發行

平均大概每十分鐘發行一次。

新比特幣在每個網絡節點在解決了一定的數學計算(比如,創建新的 block)後生成。這個生成過程被認為是難以重現和 proof of work 的。解決問題後得到的回報是 automatically adjusted,因此在比特幣網絡的頭 4 年,將會產生總額為 10,500,000 BTC 的比特幣。這個數量每隔 4 年就自動減半,也就是說在第 4 至第 8 年會產生 5,250,000 BTC,第 8 至 12 年則只有 2,625,000 BTC,如此類推。到最後,總共產生的比特幣數量為接近21,000,000 BTC。

另外,伴隨著網絡一同建立的還有一個系統。平均每隔 10 分鐘,該系統就嘗試去收集網絡上產生的 block 裡面的新比特幣。創建新比特幣的難度係數是隨著參與嘗試產生新比特幣的人數而變化的。整個網絡一致認可基於產生最前面的 2016 個 block 所花的時間實現這些行為。因此,難度係數與產生這些最早的 block 所花的時間內投入到產生這些新的比特幣的平均計算資源有關。某個人“發現”一個 block 的可能性是他所用的計算資源和所有同時在網絡上生成 block 的計算資源的比值。

---

#### 比特幣和之前的網絡中虛擬幣的區別

兩者完全不同,主要區別有以下幾點。第一,之前的虛擬幣是由發行公司控制,他想發行多少都行,沒人能夠制約他,而比特幣的發行速度是恆定的,任何人無法改變。第二,發行公司的服務器如果被入侵,那麼你的虛擬幣就會被更改,但比特幣網絡節點不可能同時被入侵。第三,發行公司可以任意更改虛擬幣規則,但比特幣的規則無法改變。

---

#### **BIP是什麼?**

>比特幣改進協議(Bitcoin improvement proposals 簡稱BIP)是為比特幣社區提供規範,完善比特幣及其運行進程和外部環境特性的設計指導文件。 依據 BIP0001協議即比特幣改進協議的目的與指南,比特幣改進協議有以下三種類型:

>> * 標準協議(Standard BIP)

描述任何影響大多或全部比特幣應用的變化,比如網絡協議、交易有效性規則的變化,或者任何影響使用比特幣交互操作性的變化或補充。

* 信息補充協議(Informational BIP)

描述比特幣的設計事項而不是為其提供新特性,或者為比特幣社區提供一般性的指南或信息。信息補充型協議 不一定需要比特幣社區達成共識或推薦,因此用戶和開發人員可以選擇忽略或者接受信息補充型協議的建議。

* 開發指導協議(Process BIP)

描述比特幣進程,或者提議更改進程或事項。Process BIP與Standard BIP 相似,但是也可以應用於除比特幣協議以外的領域。在普遍達成共識的情況下,它可以向比特幣以外的代碼庫提出改進建議。與Informational BIP不同,Process BIP 是強制性的,用戶必須遵守。例如針對決策進程的過程、指南、改變,在比特幣開發過程中使用的工具、環境的改變。任何meta-BIP也應被認為是 Process BIP。 比特幣改進協議在 GitHub 中更新版本。

>

---

#### **bitcoin交易簡介**

bitcoin交易是bitcoin系統中最重要的部分,中本聰巧妙的設計了UTXO這種結構,來進行交易和驗證。使得系統中bitcoin得以傳播和驗證,並最終把交易記錄到區塊鏈上。

bitcoin交易的本質是一個數據結構,記錄並很好的驗證了bitcoin中每個節點之間的價值轉換關係。且整個bitcoin交易記錄在區塊鏈上公開,保證不可篡改。大致介紹下bitcoin的交易過程。參考[《精通比特幣》第二版](http://book.8btc.com/books/6/masterbitcoin2cn/_book/ch06.html)

> 首先說下UTXO:

> > * UTXO:Unspent Transaction Output,未消費的交易輸出(一個數據結構,包含了交易數據和執行腳本)。這個理解為現在的銀行支票比較合適。但是和現在傳統的銀行,信用卡,一些第三方支付機構不一樣,這些都是通過賬戶來控制。但是在bitcoin中沒有賬戶的一個概念。傳統中心化機構對賬戶進行驗證,通過中心化關係數據庫,查詢餘額,確保賬戶有足夠支出。bitcoin中沒有一箇中心化的機構來提供驗證查詢服務。

> > * 理解UTXO:在bitcoin中記錄的一筆筆的交易記錄,那麼也就是一個資金的流向,那麼記錄了一個bitcoin從產生到最新的一個流轉狀態。

>

> 說明其他幾個概念:

> >* bitcoin交易中基礎構建單元就是交易輸出。

> >* UTXO最小單位是“聰”。

> >* 錢包中所謂的bitcoin餘額是指UTXO可用的總和。這些分散在區塊中,錢包知識掃描區塊鏈並彙總該錢包密鑰掌握下的UTXO計算餘額。

> >* UTXO的集合稱為UTXO集,交易代表的是UTXO集的狀態變換。

> >* 每一筆的交易都會創造輸出,並被記錄。

>

---

**交易輸出**

交易的輸出創造一定數量的用於支付的bitcoin,也就是UTXO,這些創建後的UTXO在整個網絡中被識別。

> 交易的輸出包括兩個部分:

> >* bitcoin數量

> >* 確定花費輸出所需的條件:加密難題(cryptographic puzzle)= 鎖定腳本(locking>

>

在JSON編碼中,輸出vout數組,如下:

```

"vout": [

{

"value": 0.01500000,

"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY

OP_CHECKSIG"

},

{

"value": 0.08450000,

"scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",

}

]

```

* 可以發現,交易中兩個輸出,一筆0.015、一筆0.0845.每一個輸出都由一個值和一個加密難度來定義。value和scriptPubKey

**交易輸入**

交易輸入將UTXO標記為將被消費,並通過解鎖腳本提供所有權的證明。

錢包控制UTXO中需要執行請求的付款,這個時候使用多少UTXO根據需求來確定,那麼每一個付款的UTXO,錢包都會創建一個指向UTXO的輸入,並使用解鎖腳本。

> 交易輸入包含三部分:

> >* 指向UTXO的指針。通過指向UTXO被記錄在區塊鏈中的交易的hash值和序列號來實現。

> >* 解鎖腳本,錢包構建用於滿足設定在UTXO的支出條件,一般來說解鎖腳本就是證明bitcoin所有權的數字簽名和公鑰。

> >* 序列號。

輸出vout數組,如下:

```

"vin": [

{

"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",

"vout": 0,

"scriptSig" : "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",

"sequence": 4294967295

}

]

```

* 可以發現,交易中一個輸入,但是包含了4個要素(但是沒有交易的金額):

* * 一個交易的ID號,引用了包含正在使用的UTXO交易。

* * vout,一個輸出的索引,用於標識來自該交易是哪一個UTXO被引用。這個第一個是0.

* *>

* * sequence,序列號。

* 那麼理解到這個交易的ID是:

* * 7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18

**交易說明**

> 交易說明

> > * 首先你看上面交易的輸出和輸入,你只能在輸出看到金額,在輸入中沒有相關的金額信息和UTXO信息。那麼首先檢索引用的UTXO,檢查鎖定腳本,錢包來構建解鎖腳本。

> > * 檢索整個交易,具體就是檢索引用的UTXO,同時由於沒有金額,那麼還需要計算交易支付的費用。

>

* 通過檢索UTXO信息,那麼得到具體UTXO中相關內容:

```

"vout": [

{

"value": 0.10000000,

"scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG"

}

]

```

那麼在這裡就可以看到這個UTXO是0.1,然後有一個OP_DUP OP_HASH160...的鎖定腳本

**交易腳本**

上文中一直在說到的鎖定腳本和解鎖腳本,用於bitcoin交易驗證。

> **鎖定腳本**

> > * 鎖定腳本在交易輸出中的一個花費條件,作用就是後來需要來使用這筆輸出必須滿足的條件。在bitcoin中腳本公鑰(scriptPubKey)、鎖定腳本(locking>

>

> **解鎖腳本**

> > * 解鎖腳本滿足鎖定腳本在交易輸出上所設定的條件。一般含有由錢包私鑰生成的數字簽名。在bitcoin中常見為ScriptSig。

>

* 在bitcoin全網中,每一個節點通過同時來執行鎖定和解鎖腳本來驗證一筆交易。交易輸入中的解鎖腳本,應用之前存在的UTXO,驗證將複製解鎖腳本和引用的UTXO,並複製引用的這個UTXO的鎖定腳本。然後執行解鎖和鎖定腳本。那麼符合要求就驗證通過。全部輸入都是獨立驗證。

* 腳本執行堆棧,堆棧一種數據結構,兩個操作push和pop,那麼在堆棧頂添加,也在堆棧頂刪除,操作就在堆棧的頂端,所以就理解為“後進先出”

* bitcoin中解鎖和鎖定腳本隨著堆棧的傳遞依次分別執行。

* * 首先堆棧執行解鎖腳本,解鎖腳本執行過程中未報錯,那麼複製到主堆棧。

* * 執行鎖定腳本,和之前複製到主堆棧的解鎖腳本結果進行比較。結果為“true”。那麼說明解鎖腳本滿足鎖定腳本的條件。獲得UTXO的有效授權。

* * 如果上一步中,執行結果不是“true”,那麼交易輸入無效。

> **腳本執行過程**

> > bitcoin網絡中大多數交易都是P2PKH模式(付款到公鑰hash)。交易輸出有一個鎖定腳本,那麼它是將交易輸入鎖定為一個公鑰hash值,理解為是bitcoin中的地址。那麼解鎖腳本提供一個公鑰和對應的私鑰創建的數字簽名(錢包創建)來解鎖。

> > 使用Alice、Bob、Carol、Dave支付的案例,來說明下腳本的執行過程。

* 一系列交易(如下表):

| 交易 | 具體內容 | 說明 |

|:-------:|:-----------:|:-----------:|

|1.Alice-Bob|一個輸入交易(a)、一個輸出交易(b)|a是之前的一個輸出對應的輸入交易。|

|2.Bob-Carol|一個輸入交易(c)、一個輸出交易(d)|c是對應1交易中的b輸出交易|

|3.Carol-Dave|一個輸入交易(e)、一個輸出交易(f)|e是對應2交易中d輸出交易|

> * 三個交易說明:

> > * 三個交易都是單輸入單輸出。

> > * 輸出交易和輸入交易對應相應的腳本。

> > * 每一個輸入都對應其前一個輸出。

>

* 一對輸出和輸入腳本:(上表交易2為例)

* 輸出(鎖定)腳本

```OP_DUP OP_HASH160 <carol> OP_EQUALVERIFY OP_CHECKSIG```/<carol>

* 輸入(解鎖)腳本

```<carol> <carol>```/<carol>/<carol>

* 腳本組合後

```

<carol> <carol> OP_DUP OP_HASH160/<carol>/<carol>

<carol> OP_EQUALVERIFY OP_CHECKSIG/<carol>

```

* 腳本執行後,顯示結果為“true”說明交易通過。

> 具體執行過程:

> > * bitcoin中的堆棧有一個主堆棧和副堆棧。我們主要看主堆棧的一個執行過程。

> > * 一個輸入腳本(主要是相關腳本指令和接收方的公鑰hash),腳本從左到右執行,那麼最先入堆棧的是簽名,隨即公鑰。

> > * 一個輸出腳本(主要是簽名sig和公鑰pubkey),從左到右執行。

> > * 執行過程(如下表):

| 步驟 | 具體內容 | 說明 |

|:-------:|:-----------:|:-----------:|

|1.1|執行輸入腳本|sig入堆棧|

|1.2|執行輸入腳本|pubkey入堆棧|

|2.1|執行輸出腳本-複製pubkey|OP_DUP,複製堆棧內的pubkey|

|2.2|計算堆棧頂元素hash值|執行OP_HASH160,堆棧頂是pubkey,執行後得到pubkeyhash|

|2.3|輸出腳本中的sig入堆棧|sig入堆棧,區分目前堆棧頂的pubkeyhash,標記為pubkeyhash'|

|3.1|執行檢查|OP_EQUALVERIFY檢查兩個pubkeyhash時候相等。相等繼續執行,不相等則終止操作,返回結果失敗。|

|3.2|簽名校驗|OP_CHECKSIG檢查兩個簽名的校驗,相等返回成功,不相等返回失敗|

---

#### **比特幣的共識機制**

**POW機制簡介**

POW(Proof of Work),工作量證明機制。我們最直觀的理解就是,一份證明,這個證明確認你做了一定的工作量,類似於現代生活中一些檢測考試,通過檢測考試你就取得了一份證明,只不過這個證明是一個工作量的證明。

工作量證明一開始是以工作量證明系統提出,這個概念來自Cynthia Dwork 和Moni Naor 1993年在學術論文中,是一種拒絕服務攻擊和濫用服務的對策,要求發起者需要消耗一定量的計算機資源來進行計算。那麼POW這個詞彙在1999年 Markus Jakobsson 和Ari Juels的文章中正式提出。

提到工作量證明,一般都會說到hash現金,亞當·貝克(Adam Back)在1997年發明的,用於抵抗郵件的拒絕服務攻擊及垃圾郵件網關濫用。在比特幣之前,哈希現金被用於垃圾郵件的過濾。哈希現金也被哈爾·芬尼以可重複使用的工作量證明(RPOW)的形式用於一種比特幣之前的加密貨幣實驗中。另外,戴偉的B-money、尼克·薩博的比特金(Bit-Gold)這些比特幣的先行者,都是在哈希現金的框架下進行挖礦的。

**工作證明原理**

首先工作量證明需要客戶端做一個有難度的工作且得出一個結果,這個結果公佈後,驗證的一方需要很快能進行驗證。這是不對等的。比如我們在一個字符串後加一個隨機數(nonce),對這個字符串進行SHA256計算,然後得到的結果用16進制來表示,我們要求這個計算後的16進製表示的初始幾位為:0000,那麼才能算通過了驗證。這種規則就需要計算機去不斷的嘗試,當然你可以記得其中一些,但是這個概率畢竟是很小的。正常情況下需要不斷的輸出計算嘗試,直到出現正確的要求結果。

數學期望值,計算過程中會統計實際的計算次數,平均後得到的計算的次數,這個數學期望就是要求的“工作量”,當然這是一個符合數學統計學中的概率事件。

**bitcoin中的POW共識機制**

bitcoin的出現讓人們開始瞭解到POW共識機制,在bitcoin中,把挖礦生成一個新的區塊並把交易數據寫入區塊看做是一道 **工作量證明的數學難題**,那麼這道題目中有四個重點:

1.工作量證明函數:bitcoin中使用的就是SHA256算法,這個算法是輸出256位的hash函數(本文不對hash函數和SHA265函數做具體說明)。目前還未出現針對SHA256算法的有效攻擊方法,當然通過算法算法漏洞攻擊這裡不展開討論。

2.區塊頭:bitcoin中的一個區塊由區塊頭和區塊中包含的交易列表組成(大小為1M),這裡簡述下區塊頭的組成:

* 區塊頭大小為80字節。

* 4字節的版本號。

* 32字節的上一個區塊的散列值。

* 32字節的Merkle Root Hash,體現區塊頭和區塊中的交易的關係,區塊中包含的交易列表,通過Merkle Tree算法生成Merkle Root Hash。

* 4字節的當前的難度值。

* 4字節的隨機數(nonce)。

3.難度值:difficulty,這是一個指標,不恆定。它最為關鍵的作用就是決定了bitcoin網絡中,礦工需要經過多少次hash運算才能獲得記賬權生成區塊,進而獲得區塊獎勵(12.5bitcoin)。bitcoin中區塊產生的平均速率是10分鐘一個,每經過2016個區塊後,節點按照公式:新難度值 = 舊難度值 * ( 過去2016個區塊花費時長 / 20160 分鐘 )調整難度值。控制區塊的平均產生時間,如果產生區塊速率比10分鐘快,那麼增加難度值,比10分鐘慢就降低難度。

4.目標值:target,目標值公式:目標值 = 最大目標值 / 難度值

最大目標值是一個恆定值:

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF。目標值的大小和難度值是一個反比的關係。在bitcoin中礦工計算出來的區塊的hash值必須小於這個目標值。換個說法方便理解:工作量證明過程中不斷嘗試變換nonce進行SHA256的計算,那麼嘗試的目的是為了找到一個指定前面有一定數量000的值,這個時候前面要求的0越多,那麼表示你的難度越大。

(為什麼0越多難度越大?你嘗試下用不斷扔一對骰子以得到小於一個特定點數的遊戲。第一局,目標是12。只要你不扔出兩個6, 你就會贏。然後下一局目標為11。玩家只能扔10或更小的點數才能贏,假如目標降低為了2,那就難度可想而知。)

**工作量證明過程**

整個工作量證明過程其實不復雜。

* 生成幣基交易coinbase。

* 打包交易,組成一個交易列表。

* 通過Merkle Tree算法生成Merkle Root Hash。

* 組裝區塊頭。

* 區塊頭作為工作量證明的輸入,不斷變換nonce值,通過公式:SHA256(SHA256(Block_Header))雙重SHA256計算。結果不斷和當前網絡的目標值進行比對,一旦發現小於了目標值(target),那麼工作量證明完成。

* 廣播區塊到網絡中,網絡中節點驗證。

* 驗證後等待後續區塊生成確認(一般6個)。

---

#### **比特幣全球挖礦電力分佈圖**

![z1.png-1433.2kB][3]

![21.png-229.6kB][4]

---

#### 比特幣環境安裝

學習區塊鏈的一般都從比特幣開始,之前沒有搭建過比特幣的環境,今天就測試了下。比較簡單,有耐心的同學大概1-2小時就能完成(我只測試了linux上,據說windows很坑)

比特幣的基本環境安裝,筆者使用vmware workstations+ubuntu16.04

首先安裝ubuntu16.04操作系統。

安裝完成後更新:

Ubuntu更新:(這一步有時候比較慢,耐心)

更新完成後安裝bitcoin安裝必要的軟件包:

```

sudo apt-get install build-essential libtool autotools-dev autoconf pkg-config libssl-dev

sudo apt-get install libboost-all-dev

sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler

sudo apt-get install libqrencode-dev

sudo apt-get install libminiupnpc-dev

Sudo apt-get install libevent-dev (這個有些教程沒有寫,但是編譯時候會報錯,建議早點安裝上去)

```

打包完成後,選擇一個目錄下載源碼:git clone https://github.com/bitcoin/bitcoin.git

如果發現命令不可用(apt-get install git 可以提前安裝好 git很常用)

下載完成後下載Berkley DB 4.8

```

wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'

tar -xzvf db-4.8.30.NC.tar.gz

cd db-4.8.30.NC/build_unix/

../dist/configure --enable-cxx --disable-shared --with-pic --prefix=/bitcoin/db4/

make install

Compile Bitcoin with Berkley DB 4.8

cd ~/bitcoin/

./autogen.sh

./configure LDFLAGS="-L/bitcoin/db4/lib/" CPPFLAGS="-I/bitcoin/db4/include/"

make -s -j5(這一步也很慢、耐心)

```

完成後:

```

Run Bitcoin Daemon/QT/Client

./src/bitcoind

./src/qt/bitcoin-qt

./src/bitcoin-cli

```

之前代碼編譯完成後,可以選擇NetBeansIDE 或者VIM

這裡用VIM:

首先下載依賴:

```

sudo apt-get install python vim exuberant-ctags git

sudo pip install dbgp pep8 flake8 pyflakes isort

```

下載vimrv:

```

Wget https://raw.githubusercontent.com/tao12345666333/vim/master/vimrc -O $HOME/.vimrc

```

打開安裝插件:

```

vim -E -u $HOME/.vimrc +qall

```

vim編輯參考:https://github.com/tao12345666333/vim/blob/master/README-zh.md


分享到:


相關文章: