本项目(tee-wallet)是与 Newborn Bitcoin(简称 NBC)产品配套的,由官方提供的钱包客户端 APP。 NBC 是一个类似于比特币的产品,在 NBC 区块链上发行的币种称为 NBC 币,请访问 http://nb-coin.com 了解更多关于 NBC 的信息。
tee-wallet 是开源产品,任何人可从 github.com/nb-coin/tee-wallet 下载源码。
tee-wallet 用 python 开发,支持 Python3.4+ 版本,Windows 或 MAC 各版本的桌面操作系统平台均支持。
如果您当前所用的 Python 是 2.7 以下的版本,请先升级到 3.4 以上的版本。另外,tee-wallet 使用如下依赖库,也请自行安装:
pip install six
pip install click
pip install requests
pip install pyscard
本产品用到的读卡器驱动库是 pyscard,参见这个网址:
https://github.com/LudovicRousseau/pyscard
当 Python 运行环境准备就绪后,请用如下脚本获取 tee-wallet 项目:
git clone http://github.com/nb-coin/tee-wallet.git
然后运行本软件:
cd tee-wallet
python wallet.py
当界面出现 "cmd>" 等待命令输入的提示符时,用户可键入操作指令,以便完成特定任务, 键入 "help" 可获得命令格式的使用帮助。
如果本客户端用于 NBC 挖矿,用户还可用 "--pool" 参数指示矿池所在的域名与端口号,比如:
python wallet.py --pool user1-node.nb-chain.net:30302
本软件提供如下子命令:
help : print help
break : break command loop
info [before=uock] [after=uock]
: account information
block [hash=block_id] [height]+
: query block, "1-" for last one
utxo [num=5] [uock=id]
: max list "num" of utxo or only list "uock" item
transfer [after=uock] [hash=tx_id] [addr=nbc]+
: transfer NBC to other account
record [proof=1] [where=location] [after=uock] [hash=tx_id] ["desc"]+
: record message or finger print of proof
start : start mining
stop : stop mining
account : show current NBC account
create : generate NBC account in TEE, only one time
import : import NBC account to TEE, only one time
getpass : verify PIN
setpass : change PIN
bind : bind phone number to TEE
config [level=1|2|3] [automining=0|1]
: change security level or auto mining
export : export NBC account to private_sn.bak file
restore : restore NBC account from private_sn.bak
各条指令含义如下:
- help: 打印命令行的帮助信息
- break: 退出命令行循环
- info: 显示当前账号信息,包括地址、UTXO 余额等
- block: 打印指定区块的详细信息
- utxo: 显示当前账号的 utxo,或只显示指定 uock 那项 utxo 信息
- transfer: 从当前账号转账若干 NBC 币给指定账号
- record: 创建存证记录
- start: 开始挖矿
- stop: 停止挖矿
- account: 显示当前 TEE 所绑定账号的信息
- create: 指示 TEE 中的程序自动创建账号
- import: 通过导入私钥让 TEE 创建账号
- getpass: 验证 PIN 码
- setpass: 修改 PIN 码
- bind: 绑定手机号到 TEE 设备
- config: 配置 TEE 设备的安全级别,或是否自动启动挖矿
- export: 将 TEE 中账号的私钥以密文方式导出
- restore: 根据密文私钥文件恢复 TEE 中的账号
在电脑的 USB 口先插入本 TEE 设备,然后运行本软件 python wallet.py
将进入命令行界面。
运行如下脚本可验证本设备的 PIN(Personal Identification Number)码,当前缺省值为 "000000"。
getpass
修改 PIN 码要求输对原 PIN 码并给出新 PIN 码,合法的 PIN 码要求用 09 之间的数字,可取 310 个数字。
setpass
为安全考虑,拿到设备后您应先改 PIN 码,您需妥善保管 PIN 码,拥有 PIN 码意味着拥有对该 TEE 设备的操作权。
本 TEE 设备出厂时不带 NBC 账号,您需往 TEE 导入一个账号,或让 TEE 中的程序帮你自动生成一个。 如果本 TEE 用于挖矿,须由 TEE 中程序生成账号,从外部导入的账号不能用于挖矿,只用作常规的数字货币钱包。
运行如下脚本查看 TEE 中的账号,当然,首次使用系统会报告账号为空:
account
在导入账号前,您需准备一个 32 字节长的账号私钥,描述成类似如下 16 进制格式:
0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20
这里只是举例,私钥取值越随机越好,而且,用户需自行保障其安全,不泄露给他人。拷贝上述私钥字串, 然后运行下面脚本向 TEE 导入私钥:
import
在界面提示输入私钥时,粘贴上述已拷贝的字串,本 TEE 设备随后将它导入并创建账号。
如果想让本设备自行生成一个账号,可用如下脚本:
create
请注意,在一个 TEE 设备导入 NBC 账号或自动生成账号,只能做一次,TEE 中一旦驻留了账号, 此账号便永远不可更换或删除。所以,准备往 TEE 安装账号前,您需认真想清楚该如何配置与管理 NBC 账号。
执行如下脚本可查看当前账号信息,包括 Base58 地址与在线查得的 NBC 余额。
info
NBC 采用类似比特币的 UTXO 账户模型,一个账号的总余额为它所拥有的所有未花费用(即 UTXO)项的总和。 UTXO 记录项由 UOCK(UTXO Compose Key)索引,特定 UOCK 唯一对应一项 UTXO,UOCK 是一个整数值, 其值大小与创建它所指示的 UTXO 的时间正相关。
查询账户余额时,还可由 after=uock
及(或) before=uock
参数来限定查询范围。比如:
info after=442003675414528
如果 after=uock1
与 before=uock2
两个参数并用,表示限制范围为 uock1 < uock <= uock2
。
显示当前账号拥有的 UTXO 详情信息,缺省显示最近 5 条 UTXO 记录。
utxo
我们还可以用 num=n
参数指定只显示最近 n 条记录,n 在 1 ~ 100 之间取值,也可用 uock=id
指定只显示一条对应的记录。
block 0 1-
一次可查阅一个或多个区块,比如上面脚本,查阅高度为 0 的区块(即创始区块)以及最后一个区块的信息,块高若带 -
后缀表示从当前区块链的最后一个区块向前倒数,1-
表示倒数第一个区块,2-
倒数第二个区块,其它类推。
我们还可以用 hash=id
查询指定区块头哈希值的区块,比如:
block hash=9488469356089fea9638efa2bb61ab0740b2037178292bdd665933b0d3020000
从当前账号向指定账号转账,比如:
transfer 1112pzQBWmUCsLtFZ1oNV769viSdDnAPX45N7Xp3zKvDPJwAL8BJFS=5.5
上面脚本含义为:从当前账号向 1112pzQBWmUCsLtFZ1oNV769viSdDnAPX45N7Xp3zKvDPJwAL8BJFS
转账
5.5 NBC 币,如果要向多个账号转账,罗列多个由 =
串接的目标账号及转账额的项目即可。
转账请求发起后,本程序将持续发起进度查询,每隔数十秒查询一次转账进度,进度信息将打印到界面。
若想停止查询,可按 Ctrl + C
链中断。
每次转账系统将计算该交易单的哈希值,此哈希值将唯一代表本交易,即用作交易 ID,在交易刚发起时, 界面会打印输出本次交易的哈希值。此后,我们可用类似如下脚本再次查询该交易的进度:
transfer hash=e11e110060d16c77579d00cb105298c52b228f01664dcd9361ffae82b31cdffa
成功提交一项交易后,界面将打印动用当前账号中的最后一个 utxo 的位置标识(即 uock 值),
在紧接着的同一账号向外转帐时,可用 after=uock
指示从指定位置之后取 UXTO 来转账,
这有助于避免同一 UTXO 在两次转账中均被使用。
tee-wallet 支持短消息存证与哈希值存证。前者用于在区块链账本数据中保存简短信息, 后者只保存一段哈希字串,哈希字串则来源于对一篇文章或一长字串进行散列运算。
短消息存证可支持存入 72 个字符的内容,使用举例如下:
record "Hello world!" "This is second line"
多行存证内容可用多个字串以传入参数形式来表达,如上有两行消息被存证。
哈希值存证用 proof=1
参数指示,再传入某个哈希值即可,举例如下:
record proof=1 "ba125434cf56d1b265b4f05e788b838a0bbbd89d0dfd3b3ec1452488552d80b1"
本软件也将存证(包括短消息存证与哈希值存证)视作一项交易,与 transfer
子命令类似,
也支持用 hash=id
指定交易 ID 来查询交易进度,比如:
record hash=a99718b42488efad73424511ac7e6cb4e9a7c9b200dca7182fb9eb67f023f267
tee-wallet 作为 NBC 区块链的客户端钱包 APP,其主体功能,包括交易与信息查询,
要通过调用在 https://api.nb-coin.com
提供的 RESTful API 服务来实现。因为本软件已开源,
全部代码可从 github 下载过来研读,所以,本项目也是 NBC 区块链 RESTful API 一种实现样例,
大家可以仿照着将源码移植到 java、javascript 等运行环境下使用。
如果想用交互式命令行调试本软件,不妨以 -i
参数启动 python,比如:
python -i wallet.py
另外,命令行参数还可带 --verbose
参数,用来打印从读卡器下发与回传的命令与响应。比如:
python -i wallet.py --verbose --pool user1-node.nb-chain.net:30302
tee-wallet 重用了 ricmoo/pycoind 项目中的 util 模块代码, 对该模块我们维持原有的 MIT 授权证书。
本项目其它源码我们采用 MPL V2 开源协议,详见:MPL 2.0
任何问题请在 github nb-coin/tee-wallet 项目 的 Issues 页中提交,谢谢关注本项目!