本文作者:陈进坚
博客地址:https://jian1098.github.io
CSDN博客:https://blog.csdn.net/c_jian
联系方式:jian1098@qq.com
关于USDT
泰达币(USDT)是Tether公司推出的基于稳定价值货币美元(USD)的代币Tether USD(下称USDT),1USDT=1美元,用户可以随时使用USDT与USD进行1:1兑换。Tether 公司严格遵守1:1的准备金保证,即每发行1个 USDT 代币,其银行账户都会有1美元的资金保障。用户可以在 Tether 平台进行资金查询,以保障透明度。
Omni Layer是一种通信协议,它使用比特币区块链实现智能合约,用户货币和分散式点对点交换等功能。 Omni Core是基于比特币核心代码库的快速,便携式Omni层实现。 这种实现不需要与Bitcoin Core无关的外部依赖关系,并且与其他比特币节点一样,它本身就是比特币网络。 它目前支持钱包模式,并可在三种平台上无缝使用:Windows,Linux和Mac OS。 Omni Layer扩展通过JSON-RPC接口公开。
Tether的钱包是以bitcoin区块网络为基础的,在这个网络上面搭建了名为Omni Layer的共识网络,其主要的思想是对bitcoin的区块进行染色,写入需要存储的数据。
安装omnicore程序
1 | jian@ubuntu:/root# wget https://github.com/OmniLayer/omnicore/releases/download/v0.3.1/omnicore-0.3.1-x86_64-linux-gnu.tar.gz |
配置bitcoin参数
1 | jian@ubuntu:~$ mkdir .bitcoin #创建主目录,如果目录已经存在请跳过 |
将下面信息全部复制,并修改rpcuser(RPC用户名),rpcpassword(RPC用户密码),rpcallowip(允许访问的ip地址)然后保存
1 | # Generated by https://jlopp.github.io/bitcoin-core-config-generator/ |
启动omnicore程序
请将-conf
和-datadir
路径修改为你的路径
1 | jian@ubuntu:~/.omni$ omnicored -conf=/home/jian/.bitcoin/bitcoin.conf -datadir=/home/jian/omnidata -txindex=1 -daemon |
1 | 2018-11-22 10:46:09 Loading trades database: OK |
初始化两分钟后再查看是否启动成功,要不然不会输出任何信息,需要输入上一步配置的密码,用户名omnirpc改为你bitcoin.conf中配置的用户名:
1 | jian@ubuntu:~$ curl --user omnicorerpc --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getnetworkinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:18332 |
能返回下面的信息表示启动成功
1 | {"result":{"version":130200,"subversion":"/Satoshi:0.13.2/","protocolversion":70015,"localservices":"000000000000000d","localrelay":true,"timeoffset":0,"connections":2,"networks":[{"name":"ipv4","limited":false,"reachable":true,"proxy":"","proxy_randomize_credentials":false},{"name":"ipv6","limited":false,"reachable":true,"proxy":"","proxy_randomize_credentials":false},{"name":"onion","limited":true,"reachable":false,"proxy":"","proxy_randomize_credentials":false}],"relayfee":0.00001000,"localaddresses":[],"warnings":""},"error":null,"id":"curltest"} |
停止omnicore程序
1 | jian@ubuntu:~/.omni$ omnicore-cli -conf=/home/jian/.bitcoin/bitcoin.conf stop |
检查区块同步信息
检查同步日志(刷屏):
1 | jian@ubuntu:~$ cd ~/omnidata/testnet3/ |
查询当前同步到的区块数:
1 | jian@ubuntu:~/omnidata/testnet3$ curl --user omnicorerpc --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getblockcount", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:18332/ |
由于usdt是基于BTC的,所有可以在比特币测试链上查询测试网络中的总区块:https://live.blockcypher.com/btc-testnet/
需要注意的是只有区块同步到最新才可以查到钱包余额,要同步完区块,需要70G以上的硬盘空间。
创建钱包地址
1 | jian@ubuntu:~$ curl --user omnirpc --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getnewaddress", "params": ["test"] }' -H 'content-type: text/plain;' http://127.0.0.1:18332/ |
返回结果中的 “n1Axxy3WGwFci1GJffwdY55dRem92GKXAm” 即为新创建的USDT钱包,以m开头表示是测试链的钱包地址,公链上的钱包地址一般是1开头
查询余额
查询比特币余额
1 | jian@ubuntu:~$ curl --user omnicorerpc --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getbalance", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:18332/ |
查询USDT余额,请将钱包地址换成你的
1 | jian@ubuntu:~$ omnicore-cli omni_getbalance "n1Axxy3WGwFci1GJffwdY55dRem92GKXAm" 1 |
或者
1 | jian@ubuntu:~$ curl --user omnicorerpc --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "omni_getbalance", "params": ["n1Axxy3WGwFci1GJffwdY55dRem92GKXAm", 1] }' -H 'content-type: text/plain;' http://127.0.0.1:18332/ |
获取测试币
在下面两个网站中可以获得少量的测试比特币,用来做USDT交易手续费测试足够了,此时区块必须同步到最新,要不然获取不到余额:
获取到比特币之后用下面的命令往moneyqMan7uh8FqdCA2BV5yZ8qVrc9ikLP
发送比特币可以得到一点测试的USDT,每1BTC可以获得100个USDT,这里发送0.1个获得USDT10个
1 | jian@ubuntu:~$omnicore-cli -testnet sendtoaddress "moneyqMan7uh8FqdCA2BV5yZ8qVrc9ikLP" 0.1 |
你可以在比特币区块链浏览器查到btc余额:https://live.blockcypher.com/btc-testnet/address/2MtW8kA68TMrBLZb373WttjHbxfuRNdvHh7/ ,但是测试网络的usdt只能在你本地用命令行查,区块链浏览器查不到的。
发送交易
参数分别是from,to,代币id,交易数量,支付btc手续费的地址
1 | jian@ubuntu:~$ omnicore-cli "omni_funded_send" "n1Axxy3WGwFci1GJffwdY55dRem92GKXAm" "n4VTWrjPV1QaLmM1x8ZtyLiJoFk3KaCAsi" 1 "1" "n1Axxy3WGwFci1GJffwdY55dRem92GKXAm" |
JSON-RPC
可以查看:https://github.com/OmniLayer/omnicore/blob/master/src/omnicore/doc/rpc-api.md,需要用编程语言对接的话可以使用api中的函数和参数拼装成json数据,例如本文中的查询余额的 json 为{"jsonrpc": "1.0", "id":"curltest", "method": "getbalance", "params": [] }
,然后将这串json作为参数post提交到节点的ip和端口即可返回相应的json结果。