什么是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.gitcd omnicore/./autogen.sh./configuremake
运行与区块同步
编译完成之后,在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=8332rpcuser=bitcoinrpcrpcpassword=123456
启动钱包节点:
# omnicored --conf=/apps/usdt/bitcoin.conf Omni Core server startingroot@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: OK2018-11-10 02:51:40 Loading send-to-owners database: OK2018-11-10 02:51:40 Loading tx meta-info database: OK2018-11-10 02:51:40 Loading smart property database: OK2018-11-10 02:51:40 Loading master transactions database: OK2018-11-10 02:51:40 Loading fee cache database: OK2018-11-10 02:51:40 Loading fee history database: OK2018-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());
最终执行测试效果图: