搭建区块链浏览器 insight

bitcore 是搭建区块链浏览器 insight 和半中心化钱包 copay 的核心;由于 bitcore 完全基于 bitcoin core 所编译的二进制程序 bitcoind ,所以我们完全可以用我们已经开发的山寨币来作为bitcore的基础,开发我们自己的区块链浏览器和钱包

了解bitcore

bitcore 的官网,包括了介绍、论坛、文档,我这就不多介绍了,我后面主要讲怎么把我们的山寨币用在bitcore上:
https://bitcore.io/

讲简单点,各个模块的关系就是:bitcoind -> bitcore-> insight-ui(区块链浏览器)和insight-api(区块链接口)-> bws(bitcore-wallet-service) -> copay和bitcore-wallet钱包;后者基于前者之上。关于bws和copay我们下节会讲。

截图预览



运行 bitcoreinsight

重编译 Bitcoind

我前几章就是bitcoin core的编译教程,并且在此基础上通过修改部分参数创造了新币。但是现在我们要做一些调整,让bitcoind程序适应bitcore。方法很简单,用bitcore官方提供的bitcoin core编译就行了,代码和我们之前开发的v0.12几乎没变化,只是多了几个可供bitcore调用的RPC接口,和我们改动的部分没说明关系。这样的话我们直接把参数换到新的工程里就好了,我们接下来要编译的整套工程会基于v0.12.1-bitbore-4这个版本,在这里下载(千万别下别的版本):

https://github.com/Jonathan-ZHU/bitcoin/tree/v0.12.1-bitcore-4
调整的文件也就是那几个,大概是:chainparams.cpp/chainparamsseed.h/consensus.h 等等,根据自己的来就行,重新编译好我们把 bitcoind 拿出来,按照我写过的教程做个unix发布程序就行,别忘了把bitcoin-cli也放进去,不然不小心打开了都关不掉,然后直接放到linux服务器上安装。如果还是缺少zmq库的话就再装一下呗~:

1
sudo apt-get install libzmq3-dev build-essential

==注意:bitcoind编译的时候,zmq环境是选装的,但是要使用bitcore,zmq是必装的,没装的滚回去装吧~==


另外,本地调试也是没问题的,看着办吧

安装Node.js

我单独写过nvm快速安装教程,传送门

安装bitcore

全局安装bitcore

1
npm install -g bitcore

然后执行看看能不能运行:

1
bitcored

你是不会成功的!!!

没错,这就是bitcore留下的一个大坑,报错如下:

1
2
3
throw new Error(message);
^
Error: More than one instance of bitcore-lib found. Please make sure to require bitcore-lib and check that submodules do not also include their own bitcore-lib dependency.

原因是bitcore的各个子模块也带着bitcore-lib,当然没关系,由于node模块是自动搜索的,本地没有会往上一层搜索,上一层没有就会找全局的,所以其实我们删掉重复的模块就行了,先找到bitcore全局安装的位置,刚才的报错信息里面有,由于我们之前安装了nvm所以地址大概是这样的:

1
/home/ubuntu/.nvm/versions/node/v4.8.4/lib/node_modules/bitcore

这个地址有点长,做个链接吧,地址根据自己的来哦:

1
$ ln -s ~/.nvm/versions/node/v4.8.4/lib/node_modules/bitcore ~/bitcore

进入这个目录以后,查到所有bitcore-lib

1
2
3
4
$ find . -name "bitcore-lib"
./node_modules/bitcore-node/node_modules/bitcore-lib
./node_modules/bitcore-lib
./node_modules/insight-api/node_modules/bitcore-lib

除了根目录的都删除:

1
2
rm -r ./node_modules/bitcore-node/node_modules/bitcore-lib
rm -r ./node_modules/insight-api/node_modules/bitcore-lib

确定自己的bitcoin程序是关闭的以后,启动bitcored,由于全局安装bitcore的时候把insight-apiinsight-ui都装上了,所以现在可以直接查看区块连浏览器

1
http://YOUR_IP_ADDRESS_OR_LOCALHOST:3001/insight/

现在运行在比特币上,用的是npm安装时候下载的bitcoind,数据文件在~/.bitcore/ 下,如果通了就关掉把,然后接下来你有两条路可以走:一个是直接在现在的bitcore下面开发,但是以后安装bws会遇到各种版本不兼容问题,需要自己来调试;第二种是通过已有的bitcore生成一个节点,在节点上开发,强烈推荐这种,这也是我接下来要讲的,他能直接安装对应版本的bws,并且引用的库相对简洁,容易开发。

安装 bitcore full node

很高兴你选择了正确的道路,让我们继续,在你想要的目录下创建新节点:

1
bitcore create NAME_OF_YOURNODE

cd以下这个目录,再运行

1
bitcored

不报错,能运行的话就关掉,继续安装insight-uiinsight-api

1
bitcore install insight-api insight-ui

然后再运行bitcored,然后老问题又来了,bitcore-lib重复了,根刚才一样删除掉就行,运行成功以后打开,再在浏览器里看看能不能运行成功,成功的话就恭喜你,bitcoreinsight已经成功安装,接下来我们就要让bitcore运行我们自己的山寨币了。

接入自己的山寨币

修改bitcore-node.json

就在节点根目录下,打开这个文件,是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"network": "livenet",
"port": 3001,
"services": [
"bitcoind",
"insight-api",
"insight-ui",
"web"
],
"servicesConfig": {
"bitcoind": {
"spawn": {
"datadir": "./data",
"exec": "/home/ubuntu/.nvm/versions/node/v4.8.4/lib/node_modules/bitcore/node_modules/bitcore-node/bin/bitcoind"
}
}
}
}

这里面配置了网络、接口、bitcoind地址、数据地址,这些你们都看得懂,所以既然要运行在我们的山寨币上,exec换成我们刚才安装自己的bitcoind的地址就可以了,数据地址不变也挺好,因为我们刚才启动过比特币,所以我们进入./data把刚才下载的区块链删掉,以免冲突。

1
2
$ rm -r blocks
$ rm -r chainstate

查看bitcoin.conf

这个文件不用改,只需要了解一下,在data里面,用来配置bitcoind启动时的各项参数。

修改networks.js

现在还不要急着打开,因为网络参数还没有改,要改成我们山寨币的。文件位置在这:

1
./node_modules/bitcore-lib/lib/networks.js

找到这串代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
addNetwork({
name: 'livenet',
alias: 'mainnet',
pubkeyhash: 0x00,
privatekey: 0x80,
scripthash: 0x05,
xpubkey: 0x0488b21e,
xprivkey: 0x0488ade4,
networkMagic: 0xf9beb4d9,
port: 8333,
dnsSeeds: [
'seed.bitcoin.sipa.be',
'dnsseed.bluematt.me',
'dnsseed.bitcoin.dashjr.org',
'seed.bitcoinstats.com',
'seed.bitnodes.io',
'bitseed.xf2.org'
]
});

把你之前定义在bitcoin core中的参数对应过来改一下,==需要注意的是这里的pubkeyhash等等,是用16进制的==,千万别搞错,要用10进制的话把0x删掉,劳资就因为这个问题搞了一整天才发现。

Finally

没什么问题的话在节点根目录执行bitcored打开吧,你已经有自己的区块链浏览器了嘿~然后我们下一章将怎么接入copay钱包,那样的话你将拥有android/iOS/MacOS/Win等所有平台的钱包客户端。

守护进程呢?

特么我也不知道,官网的文档根本就不对,先用nohup代替一下把,反正也挺好用的:

1
2
$ cd yournode
$ nohup bitcored &

补充

RPC端口

如果你的山寨币改过RPC端口的话,需要在启动 bitcoind 的配置文件 bitcoin.conf 里重新写上

1
rpcport=99999

虽然 bitcoind 在运行的时候会找到默认端口,但是 insight-api 会搜索该配置文件,如果没有设置的话默认还是8332