
朱志文
亿书是完全开放开源的项目,是一个完整的类比特币的区块链产品。本书基于该项目,完全以实用为目的,将开发实践贯穿始终,内容涉及开发区块链产品前端、后台和桌面应用的全过程。本书用开发的思维进行反复迭代,由浅入深,详细介绍了区块链技术相关理论知识、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开发的内容,关注区块链部分太少,而且不深
走马观花似地看了一遍,感谢作者的付出。