什么是USDT
本文中,我们介绍Tether公司利用bitcoin区块网络构造的omni layer,在这个overlay network上各方可以发行token,tether公司在omni layer上发行了代号为USDT的token, 1:1锚定美元。
tether的思想很简单,大家把美元给我,给我1美元,我发行1USDT,美元存放到指定的资产账户,大家都可以查询,发行的USDT总量也可以在区块上进行查询。当兑换的时候,给我1USDT,我返还1美元。
当然,其中的经济学方面的事情就先不讲了,可以说,tether提供了一条数字资产与法币相连接的通道,至于USDT是否靠谱,是否是骗局,这个仁者见仁智者见智,我们只对其技术进行讲解。
Omni Layer节点的安装
Tether的钱包是以bitcoin区块网络为基础的,在这个网络上面搭建了名为Omni Layer的共识网络,其主要的思想是对bitcoin的区块进行染色,写入需要存储的数据。
依赖环境同上一篇文章 ubuntu下从源码编译安装比特币钱包节点(Bitcoin)
源码编译
git clone https://github.com/OmniLayer/omnicore.git
cd omnicore/
./autogen.sh
./configure
make
运行与区块同步
编译完成之后,在omnicore/src/会有omnicored, omnicore-cli等可执行文件。其来执行方式与bitcoin一样,需要一个名为bitcoin.conf的配置文件。启动命令如下所示:
./omnicored -conf=%PATH TO bitcon.conf% -datadir=%PATH TO DATA DIR% &
启动之后,可以在%datadir%/omnicore.log下面查看日志。
bitcoin.conf 文件配置样例
~/.bitcoin/bitcoin.conf 文件配置
testnet=1 # 测试网络 (同步快)
server=1 #允许rpc访问
daemon=1 #后台运行
datadir=/home/data #区块存储位置(硬盘要够用)
rpcallowip= 0.0.0.0/0
rpcport=8332
rpcuser=bitcoinrpc
rpcpassword=123456
启动钱包节点:
# omnicored --conf=/apps/usdt/bitcoin.conf
Omni Core server starting
root@ubuntu:/apps/usdt# 2018-11-10 02:51:40 Initializing Omni Core v0.3.1 [test]
2018-11-10 02:51:40 Loading trades database: OK
2018-11-10 02:51:40 Loading send-to-owners database: OK
2018-11-10 02:51:40 Loading tx meta-info database: OK
2018-11-10 02:51:40 Loading smart property database: OK
2018-11-10 02:51:40 Loading master transactions database: OK
2018-11-10 02:51:40 Loading fee cache database: OK
2018-11-10 02:51:40 Loading fee history database: OK
2018-11-10 02:51:40 Loading persistent state: NONE (no usable previous state found)
2018-11-10 02:51:40 Omni Core initialization completed
omni同步区块,并不需要把区块全部下载,大致一天之内就能够同步完毕。之后,我们就可以使用omnicore-cli命令,或者通过RPC API对节点和钱包进行操作。
命令行查看节点数据
# omnicore-cli -conf=/apps/usdt/bitcoin.conf omni_getinfo
{
"omnicoreversion_int": 30001000,
"omnicoreversion": "0.3.1",
"mastercoreversion": "0.3.1",
"bitcoincoreversion": "0.13.2",
"block": 103554,
"blocktime": 1378066894,
"blocktransactions": 0,
"totaltrades": 0,
"totaltransactions": 0,
"alerts": [
]
}
JSON-RPC API
omni的JSON-RPC API与bitcoin的完全相同,使用的时候只是相当于将bitcoin的命令集进行了扩展。
具体的JOSN-RPC API可以查询官方文档:
https://github.com/OmniLayer/omnicore/blob/master/src/omnicore/doc/rpc-api.md
二次开发过程中,可以使用原有的bitcoin的JSON-RPC API包进行开发。例如,使用EasyBitcoin-PHP.
//使用EasyBitcoin 对omnicore 进行JSON-RCP api操作
include_once "easybitcoin.php";
$bitcoin = new Bitcoin("rpc-user","rpc-pass");
var_dump($bitcoin->getinfo());
var_dump($bitcoin->omni_getinfo());
最终执行测试效果图:
php 执行效果