
byteball 字节雪球钱包
背景
公司需要上线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
}Leave byteball 字节雪球钱包 to:
Read more #byteball posts
Best Posts From ioung
We have not curated any of ioung's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.