This post is from a low-reputation account and contains an unverified outbound link. Be cautious before clicking external links.
背景
公司需要上线byteball的代币和byteball的见证节点,在测试环境安装好钱包和见证节点,并同步数据
byteball 钱包
byteball 钱包大致有2种分类方法,一是按照是否会同步线上所有数据,可分为轻钱包(light client)和重钱包( full node),二是按照是否有GUI界面,可分为GUI钱包和无头钱包,就后者的分类,两种钱包有不同点,也有关联点:
- 不同点
- 一个有GUI界面,一个没有GUI界面
- Headless 之能有一个钱包,GUI界面的钱包可以有多个钱包
- Headless钱包大部分情况部署在服务端,供程序调用来使用(需要开启rpc服务),GUI钱包有各个端的版本(IOS,Android,Mac,Windows , Linux等)
- Headless的安全性没有GUI客户端高,主要是本地会有
key.json文件,并且可以修改conf.js 文件里面的内容,比如payout_address
- 相同点(关联点)
- 在Headless钱包可以配置GUI钱包的设备地址(deviceName),GUI钱包配置Headless钱包的配对秘钥(permanent_paring_secret),这样GUI钱包可以远程控制Headless钱包,如图
- 都分为轻钱包和重钱包两种模式
安装无头钱包,并启动rpc服务器
注意下这里安装的是轻钱包,并且连接的是测试网络,所以启动的时候需要修改下配置文件
安装node,npm等环境(必须是官方指定的版本),npm 配置淘宝源加速
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版本
pull 最新的headless-byteball 代码并编译
cd /opt/byteball
git clone https://github.com/byteball/headless-byteball.git
cd headless-byteball
npm install
测试网络(testnet)修改配置文件
测试网络配置文件修改
- 由于我们连接的测试网络,需要执行
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文件,修改成为测试网络的配置。
轻钱包配置文件修改
- 我们启动的是轻钱包,轻钱包只会存储同步和钱包相关的DAG数据,我们做交易所转帐充值等的操作只需要使用轻钱包即可满足需求
- 将
conf.js文件里的exports.bLight = false;改为exports.bLight = true;
- 将
conf.js文件配置说明
bLight: 是否是轻钱包,默认是false ,light client (true) or full node (false).rpcInterface: rpc 监听的地址,默认是127.0.0.1rpcPort: rpc 监听的端口,默认是6332storage: 区块存储方式,可以是mysql和sqlite,默认sqlite,如果需要修改为mysql,需要将这个sql库导入,并在conf.json文件加入这个配置项:{
"port": 3306,
"storage": "mysql",
"database": {
"max_connections": 30,
"host" : "localhost",
"user" : "byteball",
"password" : "yourmysqlpassword",
"name" : "byteball"
}
}
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连接进去看里面的表的结构
一些基础操作
getinfo
获取区块信息
$ 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}
getnewaddress
创建新地址
$ 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表里
validateaddress
验证地址,返回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}
getbalance
获取整个钱包或者某个地址的的余额,单位为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}
listtransactions
获取钱包或者单个地址的交易记录
$ 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
}
sendtoaddress
转账
$ 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
}