Omni研究系列【USDT】
介绍
Tether(USDT)中文又叫泰达币,是一种加密货币,是Tether公司推出的基于稳定价值货币美元(USD)的代币Tether USD。
1USDT=1美元,用户可以随时使用USDT与USD进行1:1兑换。
优点
1.真正的稳定币种,避险港湾
数字资产是一个回报和风险都极高的市场,每次遇到整个数字资产市场大回调的极端行情,所有的交易员和投资者都在寻找一个稳定币,而USDT正是这样一个稳定币。
2.让币价更加直观
因为USDT它与美元是等值的,1USDT=1美元。每个币种=多少USDT,也就是它的单价是多少美元。
风险
USDT能被大众接受是建立在Tether公司不破产的情况下,大量持有USDT存在一定风险。
该公司表示每发行1USDT将以公司银行存款中的1USD作为担保,但是它的兑付并没有政府的担保,在自身条款中也不承诺能够将USDT赎回成USD!
USDT存在的风险总共有以下几点:
- USDT超发。目前在网络上能查询到USDT市值是6.75亿美元,但是Tether公司无法提供相对应银行账户的担保。Tether公司的资金储备情况一直未公开,一年前承诺发布的审计报告已经跳票到了年底。
- USDT的用户免责条款是霸王条款。USDT发行方Tether公司的用户条款里面免除在任何条件下(包括公司倒闭清算时)兑付法币的责任。
- USDT赎回困难。用UDST赎回美元时非常非常困难,会拖很久。
- USDT发行方并不靠谱。USDT的发行方历史上的黑点,不详细说了。
来源:https://www.zhihu.com/question/263624863
技术实现
Tether通过Omni Layer协议使用区块链。
Omni Layer协议是开源的的,基于比特币区块链,Github地址为 https://github.com/OmniLayer
交易数据
既然是基于比特币,我们找一笔交易来用比特币浏览器和Omni浏览器看看数据有什么不同?
交易hash:1fc6ef3e006fce0f18d409e2a49f86472a47532913e954e4397e100a49ff0390
btc.com记录如下:
从上图可以看出有三笔输出,其中一笔“地址解析失败”,一笔是找零,还有一笔地址“1CYUf3Uq3cqLswFApccRup84szbgYLq1H3”的输出。
再看看输入、输出脚本数据:
这些数据用肉眼基本是看不出太多东西!
而用Omni Explorer来看到的数据如下:
从上图能看出地址“1CYUf3Uq3cqLswFApccRup84szbgYLq1H3”收到12.7Tether。
再看看Omni解析完的json数据:
{
"amount": "12.70000000",
"block": 515635,
"blockhash": "0000000000000000001647535108c3d997eeff8503e17369f3bd074fd3bd8ceb",
"blocktime": 1522303393,
"confirmations": 7480,
"divisible": true,
"fee": "0.00002612",
"ismine": false,
"positioninblock": 503,
"propertyid": 31,
"propertyname": "TetherUS",
"referenceaddress": "1CYUf3Uq3cqLswFApccRup84szbgYLq1H3",
"sendingaddress": "1FoWyxwPXuj4C6abqwhjDWdz6D4PZgYRjA",
"txid": "1fc6ef3e006fce0f18d409e2a49f86472a47532913e954e4397e100a49ff0390",
"type": "Simple Send",
"type_int": 0,
"valid": true,
"version": 0
}
两个浏览器看到的数据做对比,我们大概能看到往一个地址转Tether时需要转一笔极小额的比特币,当然比特币转帐矿工费也是需要的,而Omni数据应该就在脚本数据中。
如何交易
从前面分析只能看到Tether的交易数据,从OmniLayer了解到要想发送和解析那些肉眼不认识的数据,最好的方式还是调用Omni相关接口。
从Omni rpc看到简单使用方式就是用omnicore-cli,那就把Omni相关代码下载并试图编译运行吧!
Chaim:~ Chaim$ cd Documents/workspace/omnilayer/omnicore/
Chaim:omnicore Chaim$ ./autogen.sh
Chaim:omnicore Chaim$ ./configure
本以为我机器编译过bitshares、steem、ethereum等能够顺利编译运行,结果配置就出错了...
checking for protobuf... no
configure: WARNING: libprotobuf not found; bitcoin-qt frontend will not be built
checking for libevent... no
configure: error: libevent not found.
解决方案就是用port安装:
Chaim:omnicore Chaim$ sudo port install libevent
configure通过了,make又出错:
Chaim:omnicore Chaim$ make
Making all in src
CXX libbitcoin_server_a-miner.o
In file included from miner.cpp:6:
In file included from ./miner.h:10:
In file included from ./txmempool.h:21:
In file included from /usr/local/include/boost/multi_index/ordered_index.hpp:17:
/usr/local/include/boost/multi_index/detail/ord_index_impl.hpp:1181:10: error: no matching function for call to object of type 'const key_compare'
(aka 'const CompareModifiedEntry')
if(comp_(key(v),key(y->value())))return false;
^~~~~
/usr/local/include/boost/multi_index/detail/ord_index_impl.hpp:825:9: note: in instantiation of member function
'boost::multi_index::detail::ordered_index_impl<boost::multi_index::identity<CTxMemPoolModifiedEntry>, CompareModifiedEntry,
boost::multi_index::detail::nth_layer<2, CTxMemPoolModifiedEntry,
boost::multi_index::indexed_by<boost::multi_index::ordered_unique<modifiedentry_iter, CompareCTxMemPoolIter, mpl_::na>,
boost::multi_index::ordered_non_unique<boost::multi_index::tag<ancestor_score, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>,
boost::multi_index::identity<CTxMemPoolModifiedEntry>, CompareModifiedEntry>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>,
std::__1::allocator<CTxMemPoolModifiedEntry> >, boost::mpl::v_item<ancestor_score, boost::mpl::vector0<mpl_::na>, 0>,
boost::multi_index::detail::ordered_non_unique_tag, boost::multi_index::detail::null_augment_policy>::in_place' requested here
b=in_place(x->value(),x,Category());
开源的代码就是需要各种折腾啊,想着是不是要装不同的boost版本,或者像bitshares一样只能用指定的一些版本,后来找到一个方法就是改代码,把以下文件中类似的代码改成带"const",解决方案参见
edit /src/miner.h at 102 line as follow
bool operator()(const CTxMemPoolModifiedEntry &a, const CTxMemPoolModifiedEntry &b) const
edit /src/txmempool.h at 234, 271, 285, 294, 314 lines
bool operator()(const CTxMemPoolEntry& a, const CTxMemPoolEntry& b) const
and at 256 line as follow
bool UseDescendantScore(const CTxMemPoolEntry &a) const
编译成功后,可以运行omnicore_cli读一下数据了!
也可以直接去下载Omnicore二进制包,编译实在太恶心了!
Chaim:bin Chaim$ ./omnicore-cli "omni_getinfo"
error: Could not locate RPC credentials. No authentication cookie could be found, and no rpcpassword is set in the configuration file (/Users/Chaim/Library/Application Support/Bitcoin/bitcoin.conf)
提示要设置bitcoin.conf文件,在里面设上rpcconnect、rpcuser、rpcpassword这三项,首先你要有omni节点在跑!!!
Chaim:bin Chaim$ ./omnicore-cli "omni_getinfo"
{
"omnicoreversion_int": 30000000,
"omnicoreversion": "0.3.0",
"mastercoreversion": "0.3.0",
"bitcoincoreversion": "0.13.2",
"block": 523125,
"blocktime": 1526565879,
"blocktransactions": 96,
"totaltrades": 1627,
"totaltransactions": 1865160,
"alerts": [
]
}
感觉好累啊,各种弄环境,明天继续...
参考
Tether官网
https://tether.to/
现在不让注册帐号20180517
Omni浏览器
https://omniexplorer.info/
https://github.com/bitcoin/bitcoin/issues/11996
感谢您阅读 @chaimyu 的帖子,期待您能留言交流!
太硬核了,看不懂。乙太的部分呢?他們也有用乙太系統版本發的usdt, 手續費、確認速度應該優於基於比特幣的吧?
听说过但没了解,我也就有需要就看一下
你好!cn区点赞机器人 @cnbuddy 谢谢你对cn区的贡献。倘若你不喜欢我的留言,请回复“取消”。