Omni研究系列【USDT】

in #usdt8 years ago (edited)

介绍

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存在的风险总共有以下几点:

  1. USDT超发。目前在网络上能查询到USDT市值是6.75亿美元,但是Tether公司无法提供相对应银行账户的担保。Tether公司的资金储备情况一直未公开,一年前承诺发布的审计报告已经跳票到了年底。
  2. USDT的用户免责条款是霸王条款。USDT发行方Tether公司的用户条款里面免除在任何条件下(包括公司倒闭清算时)兑付法币的责任。
  3. USDT赎回困难。用UDST赎回美元时非常非常困难,会拖很久。
  4. 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 的帖子,期待您能留言交流!

Sort:  

太硬核了,看不懂。乙太的部分呢?他們也有用乙太系統版本發的usdt, 手續費、確認速度應該優於基於比特幣的吧?

听说过但没了解,我也就有需要就看一下

你好!cn区点赞机器人 @cnbuddy 谢谢你对cn区的贡献。倘若你不喜欢我的留言,请回复“取消”。

Coin Marketplace

STEEM 0.04
TRX 0.32
JST 0.077
BTC 62958.67
ETH 1650.44
USDT 1.00
SBD 0.41