读本好书 《Node.js区块链开发》

读本好书 《Node.js区块链开发》

从现在开始填涂,实现最初的构想

简介

  • 书名:Node.js 区块链开发
  • 作者:朱志文
  • ISBN:9787111566953

源码和本书都是开源的,再次为 Open Free Share 呐喊

本书链接 《Node.js区块链开发》

项目链接 ebookcoin

这本是实践入手,实现了自己的区块链项目,不再是单从理论出发。通过这本书,去开始实践。

这本书是国内的 区链相关的一大经典的书籍了,不过综合讲,这本的知识是比较散的,对于其源码的分析,知识粗略的部分章节,跟随书本的源码阅读,也做了粗浅的笔记,见笑

EbookCoin 系列


所以这篇就是对本书的一本总结了,对一些内容进行摘录.

正文

杂谈

这部分汇集每本书中精彩的小小的杂谈

每本书的作者都有自己的风格

价值传递网络的出现,可以使得万物互信,万物共享成为可能。

作为未来互联网ed基础协议知已,区块链将支撑新型的新人体系的构建,由此引发的 “信誉革命” 可能远远超乎我们的想象.

实际上,在比特币社区中,中本聪先生留下的代码的总量可能只有总规模的 2% 了.

加密货币,是一种基于点对点网络(P2P网络),没有发行机构,总量基本固定的加密电子通货.

  • 资料参考

亿书白皮书


经典的段落,这里做大量的引用.说的实在是有深度和道理 :

利益,主宰着人类行为

人活着到底是为了什么?我们每个人可能都问过自己这个问题。我们有时候踌躇满志,想要拥有一切。有时候又高尚地低下头,崇尚与世无争,无忧无虑。但在纷繁复杂的真实世界里,我们总会被某个力量牵引着,挣脱不开,欲罢不能。

这个力量,就是追求利益的欲望。利益,是什么?从网上查到的解释是:

利益是指人类用来满足自身欲望的一系列物质和精神需求,包括:金钱、权势、色欲、名声、地位等,但凡能满足人类欲望的事物, 均可称为 利益。利益依附欲望而生,而人的基因确定了欲望的存在,组成社会的基本元素是人,就不可避免地出现了:阶级、政治、 战争……利益冲突决定着一切。

人们对利益的追求来源于人的本性。人具有三种本性,即求生的第一本性,懒惰的第二本性和不满足的第三本性(这是人和动物的根本区别)。所以,人们的利益也可以分为三类,即求生的利益,懒惰的利益以及不满足的利益。总之,人类欲望无止境。

历史名人,对于利益的名言,也是值得学习和思考的。马克思说过:“人们奋斗所争取的一切,都同他们的利益有关”,列宁也说:“几何公理要是触犯了人们的利益,那也一定会被推翻的”,霍尔巴赫的话更加直白:“利益是人类行动的一切动力”。

所以,我们不仅不用避讳谈利益,而且最好把利益作为我们分析和思考产品开发设计的根本因素。如此以来,对于理解人们为何对加密货币趋之若鹜就自然轻松多了。


原文链接

利益,网络释义

区块链到底有哪些场景和市场前景


共识

PoS(Proof of Stake) 股权证明机制,的机制的缺点:IPO发布,其持有的人群是部分人,所以其信用基础是不够牢固的.很难保证其不会大量的抛售.引起价值崩盘和恐慌.

DPoS(Delegated Proof of Stake) 授权股权证明机制,通过投票选出主节点,不过事实的问题是投票的积极性并不高.


为什么PoS与PoW不具有可比性

“去中心化的比特币:从自组织到专业化分工”读后感

区链架构

区块链的概念最近很火,它来自于比特币等加密货币的实现,但是目前,这项技术已经逐步运用在各个领域。什么是区块链技术?为了感性认识这个问题,我们可以使用谷歌地球的例子做类比,ajax不是什么新技术,但组合在一起就成就了产品谷歌地球,与之类似,区块链也不是什么新技术,但与加密解密技术、P2P网络等组合在一起,就诞生了比特币。技术人员,特别是Web开发工程师,学习了解ajax技术最早是被谷歌地球酷炫的效果所吸引。而现在,历史再一次重演,很多人被比特币的疯狂发展所吸引,进而开始研究其背后的技术——区块链。

从架构设计上来说,区块链可以简单的分为三个层次,协议层、扩展层和应用层。其中,协议层又可以分为存储层和网络层,它们相互独立但又不可分割。

个人理解上讲,区块链的构成的确如此,协议层,实现了区块链的基本运行,其中的 加解密,共识,mining。都是他的运行过程。然后在其区块链的基础上进行拓展,最出名的就是ETH的智能合约,使得区块的数据不仅仅是代币的额度,同样的可以有编译成的EVM的机器码,在各个节点运行智能合约。

所以,区块链实际上是一个普适性的东西,可以实现了数据公开,透明,可追溯的产品架构设计方案。

在另一个层次上讲,区块链,可以是具体的技术实现,比如是BTC的数据存储形式,数据库设计形式,或者文件设计形式。

广义的区块链技术,必须包含点对点网络设计、加密技术应用、分布式算法的实现、数据存储技术的使用等4个方面,其他的可能涉及到分布式存储、机器学习、VR、物联网、大数据等。狭义的区块链仅仅涉及到数据存储技术,数据库或文件操作等。

(这里作为科普内容讲的是很好的。)


协议层,是维护着整个区块链的基本功能的层次,在其中的角色,可以分为客户端,和节点。节点节点之间,形成了去中心化的网络。客户端,拥有着最基本的功能。(建立地址,验证签名,转账支付,查看余额等)。节点拥有的功能包括(验证签名,区块记录,区块同步等)。这个层次,构成了我们的网络基础,交易通道,和节点奖励制度。实际上交易的内容是完全自选的。

区块链所涉及到的技术,协议层主要包括网络编程、分布式算法、加密签名、数据存储技术等4个方面。

比特币选择的是谷歌的LevelDB


拓展层,更像是我们操作系统的API,这一层次,把之前的区块链的系统封装起来。向用户暴露封装好的功能。这里最重要的功能,就是我们的智能合约了,这个概念其实早有了,实际上的实现还是在 Ethereum 的项目里,得到了很好的应用和演化。这样可以通过我们自己的编码,得到我们想要的效果,自动转账,自动付款等等。


应用层,相当于我们的应用程序了,现在很多Dapp的兴起,是的应用的;浪潮在汹涌,不过目前的确是没有一款杀手级的应用的出现。


知识图谱
知识图谱

Node.js 入门

GitHub 官方报告

  • 前10个应用简介(内容整理自原书)

我们使用github的搜索功能,并选择forks数量倒序排列,查询:

bitcoin language:JavaScript

注意:每一个fork背后可能就是一个全新的产品,forks代表了程序被二次开发的情况,个人觉得对于技术选型相对更有说服力。

前10个应用如下:

  1. bitpay/bitcore 1656颗星,429个分支

    源码网址: https://github.com/bitpay/bitcore

    第一位,这是bitpay团队的产品,号称下一代PayPal。这算是一个成功案例,足见Node.js开发加密货币的可行性。巴比特有专栏介绍。

  2. startup-class/bitstarter-leaderboard 295颗星,386个分支

    源码网址:https://github.com/startup-class/bitstarter-leaderboard

    第二位,这是一个基于比特币开发众筹网站的模板程序。巴比特在做众筹,很多人也想进入这个领域,可以参考学习。

  3. bitcoinjs/bitcoinjs-lib 980颗星,305个分支

    源码网址:https://github.com/bitcoinjs/bitcoinjs-lib

    第三位,这是个比特币web钱包开发包,几乎当前市面上所有的基于网站的钱包都在用,牛x吧。

  4. askmike/gekko 866颗星,300个分支

    源码网址:https://github.com/askmike/gekko

    第四位,你也想推出一个像时代、okcoin那样的基于网页的交易市场吗,这个代码不容错过。不过,我个人觉得交易市场不仅仅是技术问题,Gekko也提醒您要自担风险。

  5. bitpay/insight-ui 354颗星,267个分支

    源码网址:https://github.com/bitpay/insight-ui

    第五位,这是bitpay放出的一个开发web钱包的UI包(要基于bitcoin-node),看来当前开发钱包的需求还是比较大的。可以与排行第7位的bitpay/insight-api配合开发。

  6. kyledrake/coinpunk 733颗星,249个分支

    第六位,该项目是一个本地化的钱包服务程序,已经停止维护,取而代之的就是第3位的bitcoinjs-lib。

  7. bitpay/insight-api(略)

  8. cjb/GitTorrent 3065颗星,133个分支

    源码网址:https://github.com/cjb/GitTorrent

    第八位,不过它的好评3065颗星却是最高的。这是一个去中心化的Github,作者写了一篇博客详细解释了为什么Git也要去中心化。我本人觉得,这项目确实有意思,为我们开发去中心化的产品扩展了视野。基于这个项目思路,可以设想很多有价值的应用。

  9. bitcoinjs/bitcoinjs-server

    源码网址:https://github.com/bitcoinjs/bitcoinjs-server

    第九位,已经放弃维护了。

  10. untitled-dice/untitled-dice.github.io 26颗星,114个分支

    源码网址:https://github.com/untitled-dice/untitled-dice.github.io  

    第十位,一个基于比特币的赌博网站源码。有意思的是,用户评价26颗星,很低,说明人们的价值观还是不喜欢赌博的。但是拷贝的分支却很多,对于开发者来说,这也算是比特币的一个落地应用。


  • Why Node.js ?

答案很简单,它供了诸多方便实用的工具

  • 组织方便:js没有模块化组织代码的能力。一个项目,js代码通常会分割在不同的文件中,以往的方式,处理起来非常头疼,现在利用Node.js的模块管理,可以让您彻底解脱;
  • 资源广泛:Node.js的出现,让js第三方包像雨后春笋一样遍地开花。需要什么,一条命令,Node.js就帮您办了,这会带来极大便利;
  • 全栈处理:开发完,还有很多事情要做,比如:要对前端代码js或css文件进行合并、压缩、混淆,以及项目部署等。体验过ruby on rails一键部署功能的小伙伴,都会印象深刻。Node.js也很容易做到,而且更加自然、流畅。

在官方的描述里面

Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient.

翻译过来就是

Node.js® 是一个搭建在Chrome V8上的JavaScript即时运行平台,采用事件驱动、非阻塞I/O模型,既轻量又高效。


  • 后端代码示例

    使用了 express 的 web 服务框架

    var express = require('express');
    var app = express();
    
    app.get('/', function (req, res) {
      res.send('Hello World!');
    });
    
    var server = app.listen(3000, function () {
      var host = server.address().address;
      var port = server.address().port;
    
      console.log('Example app listening at http://%s:%s', host, port);
    });
    

  • Node.js 编码事项

您必须知道的几个Node.js编码习惯


亿书源码

EbookCoin 系列

开发

这一部分,收集了一些开发内容和技巧。由于实在缺少前端经验,所以值对自己了解的知识做总结。


  • 非对称体系下的 加密和解密

文中给出了一个很好的小栗子,阐明了PKI的加密,解密,签名及签名验证的细节和实现

三张图让你全面掌握加密解密技术

  • Commander 使用

这个是一个命令行参数解析的模块,在py里面也是有类似的

commander介绍

参考链接总汇

  • 本书链接 《Node.js区块链开发》
  • 项目链接 ebookcoin
  • EbookCoin 系列
  • 亿书白皮书
  • 区块链到底有哪些场景和市场前景
  • 为什么PoS与PoW不具有可比性
  • GitHub 官方报告
  • 三张图让你全面掌握加密解密技术
  • commander介绍

  • 精通比特币(英文)

  • 精通比特币(中文)

  • 《精通加密货币》作者Andreas问答

  • 区块链是什么

  • 比特币白皮书:一种点对点的电子现金系统 (ZH)

  • 尼克·萨博《比特金(BitGold)》白皮书

  • 拜占庭将军问题深入探讨

《Node.js区块链开发》 这本是,从源码级的知识,实现了一个 亿书区块链的项目,知识是比较综合的,不过美中不足的是对于源码的讲解时不够深入,不够实际上还是我自己太菜了。。。

总之,是一本好书,而且作者把书放在网上免费阅读,开源精神万岁!

一杯可乐~