背景
公司需要上线byteball的代币和byteball的见证节点,在测试环境安装好钱包和见证节点,并同步数据
byteball 钱包大致有2种分类方法,一是按照是否会同步线上所有数据,可分为轻钱包(light client)和重钱包( full node),二是按照是否有GUI界面,可分为GUI钱包和无头钱包,就后者的分类,两种钱包有不同点,也有关联点:
key.json文件,并且可以修改conf.js 文件里面的内容,比如payout_address注意下这里安装的是轻钱包,并且连接的是测试网络,所以启动的时候需要修改下配置文件
apt install g++ make
wget https://nodejs.org/download/release/v5.12.0/node-v5.12.0-linux-x64.tar.xz
tar xvf node-v5.12.0-linux-x64.tar.xz
mv node-v5.12.0-linux-x64 /usr/local/node
ln -s /usr/local/node/bin/node /usr/local/bin/node
ln -s /usr/local/node/bin/npm /usr/local/bin/npm
npm config set registry https://registry.npm.taobao.org
高版本或者低版本的node/npm在npm install的时候会出现各种各样的问题,建议直接卸载系统内部的node和npm,手动安装node-v5.12.0版本
cd /opt/byteball
git clone https://github.com/byteball/headless-byteball.git
cd headless-byteball
npm install
headless-byteball目录下的 testnetify.sh文件,但是这个文件还缺少一行,完整如下:#!/bin/sh
sed -ie "s/version = '1.0'/version = '1.0t'/; s/alt = '1'/alt = '2'/" node_modules/byteballcore/constants.js
sed -ie "s/.hub = 'byteball.org\/bb'/.hub = 'byteball.org\/bb-test'/" conf.js
主要是修改了node_modules/byteballcore/constants.js和conf.js文件,修改成为测试网络的配置。
conf.js文件里的exports.bLight = false;改为exports.bLight = true;bLight: 是否是轻钱包,默认是false ,light client (true) or full node (false).rpcInterface: rpc 监听的地址,默认是127.0.0.1rpcPort: rpc 监听的端口,默认是6332storage: 区块存储方式,可以是mysql和sqlite,默认sqlite,如果需要修改为mysql,需要将这个sql库导入,并在conf.json文件加入这个配置项:{control_addresses: 远端可以配对的设备地址。可以在GUI钱包menu button-Settings-Global preference- Device address找到payout_address: 执行pay命令时候付款的对方地址deviceName: 在对话界面显示的名称permanent_paring_secret: 加密配对地址的认证词,跟在配对地址#后面KEYS_FILENAME: 保存的keys文件名称以下文件是示例:
/*jslint node: true */
"use strict";
//exports.port = 6611;
//exports.myUrl = 'wss://mydomain.com/bb';
exports.bServeAsHub = false;
exports.bLight = true;
exports.storage = 'sqlite';
exports.hub = 'byteball.org/bb-test';
exports.deviceName = 'light-wallter-test';
exports.permanent_pairing_secret = 'randomstring';
exports.control_addresses = ['0Z4VJO5JY5P2IQ60MZHPLPZJJPUSHEBIQ'];
exports.payout_address = '9HTZ4VJAWDP2IQ60MZHPLPZJJPUSHEKJ';
exports.KEYS_FILENAME = 'keys.json';
// where logs are written to (absolute path). Default is log.txt in app data directory
//exports.LOG_FILENAME = '/dev/null';
// consolidate unspent outputs when there are too many of them. Value of 0 means do not try to consolidate
exports.MAX_UNSPENT_OUTPUTS = 0;
exports.CONSOLIDATION_INTERVAL = 3600*1000;
// this is for runnining RPC service only, see play/rpc_service.js
exports.rpcInterface = '0.0.0.0';
exports.rpcPort = '6332';
console.log('finished headless conf');
钱包启动的时候只能在前端运行,按Ctrl+Z放在后台,所以建议开启一个screen来运行我们需要启动带有rpc接口的钱包,所以需要启动的文件是play目录下的rpc_service.js
screen -S headless-wallet
cd /opt/byteball/headless-byteball/play
node rpc_service.js
第一次运行会让输入设备名称和加密钱包密码,这里自己定义好并记住启动后,会在启动用户的家目录生产.config/headless-byteball数据文件,里面包括这些文件:
root@sh-gdex-08:~/.config/headless-byteball# ll
total 2664
drwx------ 2 root root 4096 Aug 9 18:20 ./
drwx------ 5 root root 4096 Aug 9 18:00 ../
-rw-r--r-- 1 root root 811008 Aug 9 18:00 byteball-light.sqlite
-rw-r--r-- 1 root root 32768 Aug 9 19:45 byteball-light.sqlite-shm
-rw-r--r-- 1 root root 795192 Aug 9 19:45 byteball-light.sqlite-wal
-rw-r--r-- 1 root root 0 Aug 9 18:20 byteball.sqlite
-rw-r--r-- 1 root root 31 Aug 9 18:00 conf.json
-rw-r--r-- 1 root root 243 Aug 9 18:00 keys.json
-rw-r--r-- 1 root root 1060736 Aug 9 19:55 log.txt
这下面的除了log.txt文件之外都需要做好备份
keys.json:是钱包的加密文件conf.json:配置文件,包括上面的msql的配置都放在里面,会覆盖默认的conf.js文件*.sqlite: 文件是数据文件,可以用sqlite连接进去看里面的表的结构获取区块信息
$ curl --data '{"jsonrpc":"2.0", "id":1, "method":"getinfo", "params":{} }' http://127.0.0.1:6332
{"jsonrpc":"2.0","result":{"last_mci":253151,"last_stable_mci":253120,"count_unhandled":0},"id":1}
创建新地址
$ curl --data '{"jsonrpc":"2.0", "id":1, "method":"getnewaddress", "params":{} }' http://127.0.0.1:6332
{"jsonrpc":"2.0","result":"QZEM3UWTG5MPKYZYRMUZLNLX5AL437O3","id":1}
地址存放在数据库的my_addresses表里
验证地址,返回true or false
$ curl --data '{"jsonrpc":"2.0", "id":1, "method":"validateaddress", "params":["QZEM3UWTG5MPKYZYRMUZLNLX5AL437O3"] }' http://127.0.0.1:6332
{"jsonrpc":"2.0","result":true,"id":1}
获取整个钱包或者某个地址的的余额,单位为bytes,取整
$ curl --data '{"jsonrpc":"2.0", "id":1, "method":"getbalance", "params":{} }' http://127.0.0.1:6332
{"jsonrpc":"2.0","result":{"base":{"stable":8000,"pending":0}},"id":1}
$ curl --data '{"jsonrpc":"2.0", "id":1, "method":"getbalance", "params":["QZEM3UWTG5MPKYZYRMUZLNLX5AL437O3"] }' http://127.0.0.1:6332
{"jsonrpc":"2.0","result":{"base":{"stable":5000,"pending":0}},"id":1}
获取钱包或者单个地址的交易记录
$ curl --data '{"jsonrpc":"2.0", "id":1, "method":"listtransactions", "params":{"since_mci": 1234} }' http://127.0.0.1:6332
{
"jsonrpc": "2.0",
"result": [
{
"action": "received",
"amount": 3000,
"my_address": "YA3RYZ6FEUG3YEIDIJICGVPD6PPCTIZK",
"arrPayerAddresses": [
"EENED5HS2Y7IJ5HACSH4GHSCFRBLA6CN"
],
"confirmations": 0,
"unit": "sALugOU8fjVyUvtfKPP0pxlE74GlPqOJxMbwxA1B+eE=",
"fee": 588,
"time": "1490452729",
"level": 253518
},
{
"action": "received",
"amount": 5000,
"my_address": "QZEM3UWTG5MPKYZYRMUZLNLX5AL437O3",
"arrPayerAddresses": [
"UOOHQW4ZKPTII4ZEE4ENAM5PC6LWAQHQ"
],
"confirmations": 1,
"unit": "vlt1vzMtLCIpb8K+IrvqdpNLA9DkkNAGABJ420NvOBs=",
"fee": 541,
"time": "1490452322",
"level": 253483
}
],
"id": 1
}
$ curl --data '{"jsonrpc":"2.0", "id":1, "method":"listtransactions", "params":["QZEM3UWTG5MPKYZYRMUZLNLX5AL437O3"] }' http://127.0.0.1:6332
{
"jsonrpc": "2.0",
"result": [
{
"action": "received",
"amount": 5000,
"my_address": "QZEM3UWTG5MPKYZYRMUZLNLX5AL437O3",
"arrPayerAddresses": [
"UOOHQW4ZKPTII4ZEE4ENAM5PC6LWAQHQ"
],
"confirmations": 0,
"unit": "vlt1vzMtLCIpb8K+IrvqdpNLA9DkkNAGABJ420NvOBs=",
"fee": 541,
"time": "1490452322",
"level": 253483
}
],
"id": 1
}
转账
$ curl --data '{"jsonrpc":"2.0", "id":1, "method":"sendtoaddress", "params":["BVVJ2K7ENPZZ3VYZFWQWK7ISPCATFIW3", 1000] }' http://127.0.0.1:6332
{
"jsonrpc": "2.0",
"result": "vuudtbL5ASwr0LJZ9tuV4S0j/lIsotJCKifphvGATmU=",
"id": 1
}