很早就想寫點(diǎn)長(zhǎng)一點(diǎn)的源代碼分析的文章。平時(shí)總是在網(wǎng)上學(xué)習(xí)別人的文章,也希望自己寫點(diǎn)文章幫助到別人。技術(shù)開發(fā)者可能都有這么個(gè)壞習(xí)慣,看不懂的東西不會(huì)寫,看懂的東西不想寫。寫文章是個(gè)細(xì)水長(zhǎng)流的活,希望以后能多寫點(diǎn)好文章。
最近把之前看星云鏈代碼的分析總結(jié)在一起,寫了一篇比較長(zhǎng),相對(duì)完整的介紹文章。?
整個(gè)文章太大,放在百度云盤上:https://pan.baidu.com/s/1WpfSsbZkl6kCJGVLxTeeIQ。感興趣的小伙伴,直接點(diǎn)擊下載吧。
文章詳細(xì)分析了星云鏈的整體結(jié)構(gòu)以及各種功能模塊。比如說,虛擬機(jī)部分。NVM是星云鏈的虛擬機(jī)。NVM是Nebulas Virtual Machine的縮寫。從源代碼的目錄來看,Nebulas支持兩種虛擬機(jī):1)V8(Chrome V8)2)LLVM。邏輯上,Nebulas目前只支持V8虛擬機(jī)。NebulasV8Engine是個(gè)核心模塊,承上啟下,連接區(qū)塊鏈和V8沙盒(V8 Engine)。NebulasV8Engine建立go函數(shù)和C++函數(shù)(Nebulas Native Library)之間的聯(lián)系。Nebulas Native Libaray調(diào)用Native V8引擎執(zhí)行JS代碼。在V8沙盒中,預(yù)先提供了一些js庫(blockchain.js,crypto.js,event.js,storage.js等等)。這些js庫最后依賴go函數(shù)實(shí)現(xiàn)和區(qū)塊鏈進(jìn)行交互。
文章的目錄如下: