bitcore是bitpay开发的比特币node.js库,支持用node.js开发区块浏览器,钱包等功能库,该库需要包含一个具有地址索引功能的bitcoin全节点库。
实际上该库只是一个集成库,没有实际的代码,都是依赖其他库实现其功能的,本文会简要说明其构成部分。
bitcore使用较为简单,通过全局安装就可以使用。在使用过程中,在linux系统中采用cnpm安装成功, 在苹果系统上下载苹果版本的全节点失败。不过还是不建议在个人电脑上安装该库(需要大约500G的空间)。
安装好后,就可以启动一个实例,缺省启动insight-ui和insight-api服务,区块浏览器可以通过http://locahost:3001/insight访问。
如果是通过nginx代理,需要配置如下路径:
# insight angularjs服务路径
location /insight {
proxy_pass http://localhost:3001/insight;
}
# insight-api路径
location /insight-api {
proxy_pass http://localhost:3001/insight-api;
}
# WebSocket
location /socket.io {
proxy_pass http://localhost:3001/socket.io;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
通过查看bitcore项目路径下的package.json就知道该项目依赖的库了:
以上四个库分别是:bitcore核心库,bitcode-node js的全节点库(提供node.js版本的全节点封装),insight-api库提供insight-ui的API接口,insight-ui是用angularjs实现的前端界面。
bitcore采用服务方式把各组件构建在一起,bitcode-node,insight-api, insight-ui都是一个服务,通过一个Web服务器(Express)构建
需要注意的是,目前(2018.3.15),采用npm安装的节点是4.1.1的版本,采用0.12.0版本的比特币,该版本比bitcoin官方的源代码增加了地址索引功能。而github上的代码是5.0.0版本。
看源代码是学习架构的一个很好方法。该项目用javascript语言编写,基于node.js平台,是学习node.js开发和javascript的好地方。
5.0.0在4.1.1版本上做了更细的拆分,总体架构没有太多变化。
bitcore的源码只有bin目录下的两个文件,是用于启动比特币node.js全节点的,他依赖于bitcore-node模块。
bitcore-node模块依赖于bitcore-lib库,还包括bitcored-rpc, socket.io, zmp等库。
bitcore-node采用服务架构实现,4.1.1版本具有四个服务:bitcoind, web, insight-api, insight-ui,web依赖于bitcoind服务,insight-api, insightui依赖于bitcoind和web服务。
服务就是bitcore-node的软件架构,bitcore充分利用了javascript的动态语言的特性,把服务的API方法绑定到自己实例上,这样一个服务调用其他服务是就不需要知道服务的提供者是谁,实现了解耦。一个服务需要实现几个特定的结构,包括构造函数,start函数,getAPIMethods函数, setRoute函数等,具体可以参考服务文档.
Bus是服务件消息系统,订阅一个消息可以无需知道消息有哪个服务模块发布,通过统一的Bus总线就可以实现消息的订阅和发布。Bus文档请看这里.
实现服务的简介文档在这里。