
朱志文
億書是完全開放開源的項目,是一個完整的類比特幣的區塊鏈產品。本書基於該項目,完全以實用爲目的,將開發實踐貫穿始終,內容涉及開發區塊鏈產品前端、後臺和桌面應用的全過程。本書用開發的思維進行反覆迭代,由淺入深,詳細介紹了區塊鏈技術相關理論知識、Node.js前後臺開發基礎知識、加密簽名技術、P2P網絡實現、共識算法等,能幫助初學者快速學習入門區塊鏈技術,深入掌握Node.js編程開發技術,幫助區塊鏈技術從業者、Web開發者更深刻地理解相關概念和技術實現。
《Node.js區塊鏈開發》拆解 作者:朱志文 一、一句話概括 理解區塊鏈最有效的方法之一,是親手實現賬戶、簽名、交易、區塊、P2P傳播和共識流程;Node.js只是開發工具,真正的核心是密碼學、狀態一致性和經濟激勵如何共同維護分佈式賬本。 二、核心邏輯 全書以開源項目“億書”爲實踐載體,按照五部分展開: 1. 區塊鏈基礎:加密貨幣、信用、共識和整體架構。2. Node.js入門:前後端開發、異步編程和數據流。3. 源碼解讀:P2P網絡、加密驗證、地址、簽名、交易、區塊鏈與DPoS。4. 開發實踐:函數式編程、AST、命令行、異步控制、前端組件、密碼學、時間和測試。5. 附錄:區塊鏈術語與項目資料。 核心路徑可以概括爲: 用戶用私鑰簽名交易 → 節點驗證並傳播 → 共識節點選擇交易打包 → 新區塊連接舊區塊 → 網絡驗證並更新共同狀態 三、核心內容 1. 區塊鏈是一種多方共同維護的狀態記錄 傳統數據庫通常由一個組織控制,區塊鏈則讓多個節點按照共同協議保存和驗證賬本。 其基本特徵包括: 多節點複製;交易以密碼學方式驗證;區塊按順序連接;歷史修改需要付出高成本;節點通過共識決定有效狀態;協議規則由軟件執行。 區塊鏈不是“數據絕對不能修改”,而是讓未授權篡改容易被發現,並在特定共識和經濟條件下變得困難。 2. 加密貨幣是區塊鏈上的價值記賬單位 加密貨幣通過賬本記錄資產歸屬和轉移。 用戶真正控制的通常不是某個實體“幣”,而是能夠授權地址資產支出的私鑰。 一種資產能否成爲可靠貨幣,還取決於: 價值是否穩定;是否被廣泛接受;交易成本和速度;法律地位;網絡安全;治理與供給機制。 “加密貨幣就是貨幣”屬於作者的觀點,不是對所有項目都成立的事實。 3. 區塊鏈把部分信用轉化爲協議信任 傳統交易依賴銀行、平臺或政府機構維護賬本和解決爭議。 區塊鏈嘗試讓參與者通過公開規則、密碼學證明和分佈式驗證達成一致。 但這不等於完全消除信任。用戶仍需信任: 軟件實現;密碼學算法;共識參與者;錢包和交易平臺;數據輸入;治理和升級機制。 區塊鏈改變了信任的分佈方式,並沒有讓所有信任消失。 4. 共識機制解決節點對賬本狀態的分歧 在開放網絡中,不同節點可能收到不同交易,甚至有人蓄意欺騙。 共識機制需要決定: 誰可以產生區塊;哪個區塊有效;網絡分叉時選擇哪條鏈;作惡需要付出什麼成本;誠實參與者獲得什麼獎勵。 共識不僅是技術算法,也是權力與利益分配規則。 5. PoW用計算成本約束作惡 工作量證明要求區塊生產者完成計算競爭。 攻擊者如果想重寫歷史,需要掌握足夠算力並持續付出能源和硬件成本。 其優點是規則相對開放,並經過比特幣長期驗證。 主要問題包括: 能耗較高;算力可能集中;交易確認較慢;礦池產生治理影響;高算力攻擊風險。 PoW安全依賴經濟成本,而不是假設參與者誠實。 6. PoS和DPoS用權益約束參與者 PoS根據參與者持有或鎖定的權益選擇區塊生產者,試圖減少PoW能耗。 DPoS則由持幣者投票選出數量有限的受託人或代表,負責輪流生產區塊。 DPoS可以提高吞吐量和確認速度,但會引入: 代表數量有限;投票參與率低;大戶影響力較強;拉票和利益交換;節點聯合;治理中心化。 效率提高往往伴隨去中心化程度的權衡。 7. 協議層、擴展層和應用層形成區塊鏈架構 協議層負責: 網絡通信;密碼學;交易;區塊;共識;狀態驗證。 擴展層可以提供資產、合約、存儲和行業能力。 應用層則面向錢包、交易、出版、金融或其他場景。 分層設計可以降低耦合,但各層安全相互影響。應用漏洞可能讓底層鏈安全也無法保護用戶資產。 8. Node.js適合事件驅動的網絡服務 Node.js使用JavaScript和事件循環處理大量I/O任務,適合Web接口和P2P通信。 其特點包括: 單線程事件循環;非阻塞I/O;回調、Promise和異步函數;豐富的包生態;前後端語言統一;快速原型開發。 但CPU密集計算會阻塞事件循環,需要使用工作線程、獨立服務或原生模塊。 9. 異步編程必須管理錯誤和流程 書中強調數據流、回調和異常處理。 早期Node.js代碼大量使用回調,複雜邏輯容易出現“回調地獄”。 async等流程控制庫曾用於串行、並行和隊列任務。今天更常使用Promise與async/await。 無論語法怎樣變化,異步系統都必須處理: 超時;錯誤傳播;重試;併發限制;任務順序;資源釋放;部分失敗。 10. P2P網絡負責節點發現和數據傳播 區塊鏈節點不依賴單一中心服務器,而是通過點對點連接交換消息。 P2P模塊需要處理: 節點發現;連接建立;消息協議;交易和區塊廣播;重複消息去除;節點狀態同步;斷線重連;惡意節點隔離。 網絡延遲會讓不同節點暫時看到不同狀態,因此共識必須容忍消息亂序和傳播時間。 11. 密碼學哈希保證數據完整性 哈希函數把任意長度輸入映射爲固定長度摘要。 重要性質包括: 相同輸入得到相同輸出;輸入微小變化會顯著改變摘要;很難從摘要恢復原文;很難找到具有相同摘要的兩個不同輸入。 區塊通常包含前一區塊哈希,因此修改歷史內容會改變後續哈希鏈。 哈希保證可驗證完整性,不負責隱藏數據內容。 12. 公私鑰和數字簽名證明授權 用戶生成一對密鑰: 私鑰用於簽名,必須保密;公鑰用於驗證,可以公開。 簽名流程大致是: 1)對交易內容計算摘要;2)用私鑰生成簽名;3)網絡使用公鑰驗證;4)驗證交易未被修改,並由對應私鑰持有者授權。 簽名證明控制權,不證明交易內容合法或現實信息真實。 13. 地址是公鑰或相關數據的編碼標識 區塊鏈地址通常由公鑰經過哈希、校驗和編碼產生。 校驗位可以幫助發現輸入錯誤,前綴則可區分網絡或地址類型。 地址不是個人真實身份,也不等於完全匿名。交易關係和外部數據可以把多個地址與個人關聯。 生成地址、校驗地址和管理密鑰,是錢包系統的基礎功能。 14. 多重簽名降低單個私鑰失效風險 多籤賬戶需要多個私鑰中的若干個共同授權,例如2/3簽名。 它適合: 企業資金;團隊賬戶;託管;家庭資產;高價值操作。 多籤能夠降低單點失竊風險,卻增加協調、恢復和權限管理複雜度。 簽名閾值與參與者選擇,應根據安全和可用性平衡。 15. 交易是區塊鏈狀態變化的基本指令 一筆交易通常包含: 發送方;接收方;金額或操作;時間或序號;手續費;業務數據;數字簽名。 節點驗證交易時需要檢查簽名、餘額、格式、重複消費和其他協議規則。 不同區塊鏈使用UTXO或賬戶模型等不同狀態結構。 交易一旦記錄也不代表現實商品已經正確交付,鏈上與鏈下責任仍需制度解決。 16. 區塊把多筆交易與歷史鏈接起來 區塊通常包含區塊頭、交易列表、前一區塊哈希、時間信息和生產者證明。 節點收到新區塊後,需要驗證: 結構和大小;前一區塊關係;每筆交易;區塊生產資格;共識規則;狀態轉換結果。 只有通過驗證,節點纔會把新區塊加入本地賬本。 17. DPoS實現包含技術與治理兩部分 DPoS不僅需要輪流出塊,還要維護候選人、投票、受託人排序、獎勵和異常處理等數據。 如果受託人未按計劃出塊,系統需要跳過或更換;如果節點產生衝突區塊,則要有分叉處理規則。 代碼實現再正確,也無法自動保證治理公平。投票激勵、代表集中和社區監督同樣重要。 18. 函數式編程有助於降低狀態副作用 區塊鏈系統需要確定性:同樣輸入在不同節點上應產生相同結果。 函數式編程強調: 純函數;不可變數據;明確輸入輸出;減少共享狀態;函數組合;副作用隔離。 這些原則有助於測試和推理,但JavaScript應用仍需要數據庫、網絡和時間等副作用,應把它們集中管理。 19. AST可以分析和轉換JavaScript代碼 抽象語法樹把源代碼轉換爲樹結構,節點代表變量、函數、調用和表達式。 AST可以用於: 代碼檢查;自動生成文檔;重構;轉譯;依賴分析;UML類圖生成。 從JavaScript生成類圖的案例,展示如何把代碼結構轉化爲可視化信息。 但動態語言中的運行時行爲,未必能完全從靜態AST恢復。 20. 命令行工具適合節點管理和自動化 CLI可以用於: 啓動節點;創建賬戶;查詢區塊;廣播交易;導入配置;運行測試;管理網絡。 commander等庫可以解析命令、參數和幫助信息。 命令行接口應重視輸入驗證、錯誤碼、敏感信息保護和腳本兼容性。 21. 時間和數值計算是區塊鏈常見陷阱 分佈式節點的本地時間可能不同,時間戳不能被無條件信任。 金額計算也不能直接使用普通浮點數,因爲二進制浮點會產生精度誤差。 應採用: 整數最小單位;大整數或高精度庫;明確舍入規則;統一時間基準;合理允許時鐘偏差;確定性序列化。 共識系統中的微小計算差異,可能導致節點狀態分叉。 22. 測試是區塊鏈開發的安全底線 區塊鏈涉及不可逆交易和多節點一致性,錯誤成本很高。 測試應覆蓋: 哈希和簽名;地址編碼;交易驗證;重複消費;區塊驗證;共識輪次;網絡同步;分叉恢復;數據庫異常;邊界與攻擊輸入。 除了單元測試,還需要集成測試、多節點測試、屬性測試和安全審計。 23. 前端和桌面應用也是完整產品的一部分 用戶需要通過錢包、網站或桌面客戶端管理賬戶和交易。 界面必須處理: 私鑰備份;地址確認;交易金額與費用;網絡狀態;等待確認;錯誤提示;釣魚和僞造界面;升級兼容。 底層密碼學安全,並不能彌補危險的用戶界面和密鑰管理。 24. 本書的項目與技術棧具有明顯年代感 本書圍繞“億書”項目,使用早期Node.js回調、async庫、Ember.js和特定DPoS實現。 今天Node.js、前端框架、區塊鏈工程和安全實踐已經發生明顯變化,具體代碼不宜直接用於生產。 此外,書中關於加密貨幣、信用和未來趨勢的部分表達帶有作者立場,不能替代法律、金融和安全評估。 其長期價值主要在於通過源碼串聯區塊鏈的核心組件。 四、本書最值得關注的核心觀點 本書最值得關注的觀點是: 區塊鏈不是某個加密算法,而是一組相互約束的系統機制。 哈希保證數據完整性,簽名證明授權,P2P負責傳播,共識決定有效歷史,經濟激勵約束參與者,數據庫保存狀態,測試和治理處理異常。 任何一環薄弱,整體都可能失敗: 私鑰泄露會繞過鏈上安全;共識集中會削弱抗審查;P2P漏洞會隔離節點;代碼錯誤會錯誤轉移資產;治理失敗會讓協議無法升級;前端欺騙會誘導用戶簽署惡意交易。 真正理解區塊鏈,需要觀察完整系統,而不是隻看“不可篡改”這個標籤。 五、一段話總結 《Node.js區塊鏈開發》以開源項目“億書”爲案例,從加密貨幣、區塊鏈架構和PoW、PoS、DPoS共識開始,逐步拆解Node.js異步編程、P2P網絡、哈希與加密、地址、數字簽名、多重簽名、交易、區塊和受託人出塊機制,並延伸到函數式編程、AST、命令行、前端組件、時間數值處理和測試。全書展示了一筆交易怎樣由私鑰簽名,經P2P傳播和節點驗證,被共識節點寫入區塊並同步爲全網狀態。書中的項目、框架和代碼風格具有明顯年代感,部分貨幣與行業判斷也帶有作者立場,但通過源碼理解“密碼學+網絡+共識+激勵+治理”的完整機制,仍是本書最有價值的部分。
記得幾年前o2o進行得如火如荼,Nodejs也隨之成了香餑餑,市面上出現了大量全棧工程師的職位,高薪誠聘,nodejs爲全棧開發打開了極爲便捷之門,一人身兼多職,從前端、後端到存儲,一套語法全搞定,其事件驅動、非阻塞的特性也非常利於互聯網應用開發,成爲傳統企業轉型,互聯網創業之不二選擇。 好景不長,O2O偃旗息鼓,nodejs卻在一直髮展,各種開源應用,框架應有盡有,成爲快速開發互聯網應用的不錯選擇。本書作者正是選用nodejs開發了一個基於區塊鏈技術的應用-億書。 區塊鏈不是什麼新技術,而是幾種技術的組合,也是最近幾年最熱的話題之一,被寄以厚望的區塊鏈除了數字貨幣外(還被諸多國家禁止),還真沒有什麼實質的應用,市面上缺少像基於互聯網技術而形成的豐富多彩的應用而被蒙上一層神祕面紗,因爲數字貨幣的原因讓身邊一些金融從業者更是對區塊鏈這一技術充滿好奇,甚至是恐慌,生怕這一技術帶來顛覆性的後果,作爲一名互聯網從業者也是似懂非懂,所以打開了這本書,希望從代碼層面多些瞭解。 本書作者通過一個實際項目講解區塊鏈,p2p網絡,密碼,分佈式存儲在代碼上的實現,以及結合區塊鏈的規則記錄存儲信息等。坦白說,這是一本源碼解讀書冊,看完全書對nodejs和區塊鏈都沒有太多幫助,加上粘貼了大量代碼非常不適合微信閱讀,作者介紹的項目本身開源的原因,可以很方便在電腦上獲取代碼,從代碼層面學習和理解更爲合適,儘管如此不可否認作者還是花費很多心思,每個章節都配備了大量參考資料,爲延展閱讀提供了便利。 翻完本書,算是完成第二本跟區塊鏈相關的書,仍是一團迷霧,究竟會怎樣,時間會給出答案。
二零一九年讀完的第五十一本書,整體評價一顆星,看書名用Node.js來開發區塊鏈項目本來就不靠譜,抱着好奇心我讀完了整本書發現只有五分之一講區塊鏈的知識都木有。其它都是作者這些年所接觸到的一些零散知識點,而且我覺得很多知識點作者還是瞭解得比較淺的。算了我還是不要寫太對了,至少作者也是個出書了的人,而我的公糉號也只能保持年更。相比之下還是有值得我們學習的地方的。
以前看過紙質版,現在略翻電子書。億書是區塊鏈早期認落地實踐的項目,從技術實現角度,是本務實低調的書。
量子力學纔是正道,區塊鏈只能是滾滾歷史中的一個插曲,而且還是走彎了路的插曲。 本書沒有什麼乾貨,但是可以看出,作者肯定是個ppt高手。寫的書根ppt是一個套路的。 本着不要半途而廢的精神,花半小時翻完了本書。失望😞
我是這本書和火幣網出的那本同時看的,這本書相比較來說,邏輯上會亂一點,入門科普還是推薦火幣網那本~
把區塊鏈的概念結合億書的實踐和代碼段重新梳理了一遍講地很清楚,此外後半篇幅把Node Js和函數編程的重要技術特性和主要技術概念也都舉例講了下 非常適合入門閱讀
講課太多node.js開發的內容,關注區塊鏈部分太少,而且不深
走馬觀花似地看了一遍,感謝作者的付出。