This post is from a low-reputation account and contains an unverified outbound link. Be cautious before clicking external links.

byteball 字节雪球钱包

ioung(25)
Published in
#byteball
Words
1562
Reading
7 min
Listen
Play
8y

背景

​ 公司需要上线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.jsconf.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.1
  • rpcPort: rpc 监听的端口,默认是6332
  • storage: 区块存储方式,可以是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
}
byteball 字节雪球钱包 | Ecency