區塊鏈原始碼學習筆記1 前期知識庫準備

2021-08-20 02:40:23 字數 2747 閱讀 6800

step2:了解核心資料結構

step3:分析可執行程式的**(編譯後7個可執行程式)

為什麼學

優點

例程

// example1-signals2.cpp

#include

#include

"boost/signals2.hpp"

using

namespace

std;

void

slot1

()void

slot2

()int

main

()/*

mac下安裝完boost後,執行** g++ example1-signals2.cpp

編譯後執行 ./a.out

列印結果

slot1 call

slot2 call

*/

cout

<< boost::bind(f, x, y)() << endl; //等價於 cout << f(x, y) << endl;

cout

<< boost::bind(f, _1, _2, _3)(x, y, z) << endl; //等價於 cout << f(x, y, z) << endl;

cout

<< boost::bind(f, y, _3, _2)(x, y, z) << endl; //等價於 cout << f(y, z, y) << endl;

// durations 表示一段時間間隔

typedef boost::chrono::hours hours;

typedef boost::chrono::minutes minutes;

typedef boost::chrono::seconds seconds;

typedef boost::chrono::milliseconds milliseconds;

typedef boost::chrono::microseconds microseconds;

typedef boost::chrono::nanoseconds nanoseconds;

// clock 表示當前時間,是在不斷的變化

typedef boost::chrono::system_clock system_clock;

typedef boost::chrono::steady_clock steady_clock;

typedef boost::chrono::high_resolution_clock high_resolution_clock;

// time point 表示某乙個具體的時間點

typedef system_clock::time_point sys_tp;

boost_auto_test_suite(boost_test_module)

功能:openssl可以實現:秘鑰證書管理、對稱秘鑰和非對稱秘鑰。直接呼叫庫函式即可。

詳細用法參考這篇部落格,主要包括:

詳細說明和例程可以看這篇部落格。

以上就是bitcoin原始碼閱讀前需要了解的技術基礎,不需要深究,知道怎麼用,有什麼樣的表現形式即可,後面閱讀原始碼的時候可以返回來,知道再**檢視。

區塊鏈是由許多技術組成的,比如p2p,rpc,密碼學,共識等等,用到了第三方庫如leveldb,libevent,boost,zeromq,berkeley db,openssl等,然後除了第三方庫,核心**就近10萬行,是比較大的專案,如果能把裡面的東西搞明白,對自己能力的提公升非常大。

目前在這邊主要做了一些工作,按照時間來:

0)環境搭建及專案的安裝,git bitcoin core源**,各種第三方庫安裝編譯,然後編譯bitcoin core,遇到一些問題記錄下來,啟動看日誌檔案有沒有問題什麼的,同步區塊資料,gdb看一些關鍵資料。

1)研究bitcoin core的整個架構,即單程序多執行緒,每個執行緒各司其職,有只管收發資料的執行緒,監聽埠連線的執行緒,dns種子節點發現的執行緒,處理rpc請求的執行緒等,程式啟動時每個step做了什麼工作,比如初始化全域性變數,日誌,系統環境等,**中加鎖的地方較多,畢竟整個bitcoin core重點不是效能,只要能保證區塊資料正確同步,沒bug,穩定健壯,安全即可。

2)分析rpc實現原理,**中直接使用httpsvr,而httpsvr是由libevent實現,後者是個網路庫,比較重,基於事件驅動的,效能比較好,不是很難,主要是序列化格式要注意,後期會專門介紹rpc的通用架構和實現,這裡使用的比較簡單,沒有負載均衡,可用性等一說。

3)pow的實現原理及**分析,pow主要是共識機制,全稱是proof of work,即工作量證明。就是根據全網難度目標值,你需要計算乙個hash值,使得這個hash小於給定的目標值,輸入是乙個區塊的頭部,主要包括前乙個區塊的hash值,難度值,時間,nonce,merkle root hash等,一共80位元組,然後hash,如果不滿足就對nonce++,整個頭部就只能更新nonce,是uint32_t的,如果乙個輪循結束後,還沒有找到合適nonce使得value < targetvalue,那麼更新merkle root hash值,然後nonce從0開始再計算。這個計算過程要消耗電力,這個誰來計算會在下面介紹。找到合適的value後就會全網廣播,怎麼廣播的也會在下面介紹,節點收到區塊頭部即做簡單的難證就行。其它的一些也很重要就不展開說明了,裡面會涉及交易的打包計算等等。除了pow還有其他共識如pos,dbft等,相關原理說明也可以在網上找到。

區塊鏈原始碼大全

區塊鏈專案原始碼大全 位元幣btc原始碼 以太坊eth原始碼 以太經典etc原始碼 project 小蟻neo原始碼 標準鏈czr原始碼 柚子eos原始碼 量子鏈qtum原始碼 比原鏈btm原始碼 萊特幣ltc原始碼 公信寶gxs原始碼 project 位元股bts原始碼 ada原始碼 ae原始碼 ...

區塊鏈學習筆記1

1.什麼是區塊鏈?區塊鏈是通過去中心,化去信任的方式集體維護乙個可靠資料庫的技術方案。參與系統中的任意多個節點把系統一段時間內的全部的資訊,資料通過密碼學演算法計算和記錄到乙個資料塊 區塊block 並且生成該區塊的指紋用於鏈結下乙個區塊和校驗。2.主要特點。1 去中心化 所有節點的權利和義務均等,...

區塊鏈知識講解(1)

這個系列不談投資,只從技術角度為大家通俗地講解一下區塊鏈技術的基本知識。到底什麼是區塊鏈呢?一般人都是通過位元幣,以太坊等數字火幣知道了區塊鏈這個名詞,也都知道區塊鏈是這些數字貨幣的一項關鍵底層技術,通俗些說,它就像是乙個資料庫賬本,安全記錄所有的交易資訊。更為專業的說法,所有參與者成為節點,不同的...