USDT背后的技术原理

发布时间:2018年6月10日

网络来源:微信公众号沉风网事

OP_RETURN

在进入正题前,我们需要了解比特币脚本OP_RETURN。

OP_RETURN是比特币0.9版本引入支持一种新的操作符,目的是允许开发者在交易上输出增加40个字节自定义的非交易数据。更多详细信息参考OP_RETURN wiki

USDT

USDT又名Tether,通过Tether提供1:1美元兑换服务,为法币与数字货币提供兑换服务。 国内交易所关闭后,国内玩币的人都知道,这里不过多介绍。

架构

架构图

各层介绍如下:

比特币区块链层,主要实现Tether分布式帐本功能。Tether交易信息通过OP_RETURN保存在比特币的分布式帐本中。

Omni协议层,Omni协议层主要功能如下:

创建与销毁USDT

提供OmniApi

跟踪Tether流通,通过Omnichest.info提供区块链浏览器功能

支持用户交易与保存Tether(USDT)

<!–/OL–>

Tether业务层,Tether业务层主要功能如下:

1. 法币兑换Tether(USDT)

2. Tether(USDT)兑换法币

3. 监管流通中Tether(USDT)

流程

流程图

这里与普通交易所的流程类似。法币兑换USDT,发放相应USDT,USDT兑换法币,回收USDT。

交易

具体看一个交易吧。

先上图:

交易信息-1

主要看交易的输入与输出,这里关注点主要在输出,为什么输出有三个呢? 第一个很容易理解,表示找零 第二个表示什么呢?表示转帐对方的地址,具体参考wiki 第三个OP_RETURN用于存储Tether部分转帐信息

交易信息-2

图中的0x155十六进对应十进制341,在染色币的体系中对应类型表示Tether,具体参考染色币列表。 转帐的数量在哪里体现呢?转帐数字为000002ba7def3000,占用8个字节。对应十进制数字结果为:

交易信息-3

图中显示的Tether的交易的信息,这些交易信息来自比特币交易信息。

omni封装OP_RETURN信息代码如下:

UniValue omni_createpayload_simplesend(const UniValue& params, bool fHelp)

{

if (fHelp || params.size() != 2)

throw runtime_error(

“omni_createpayload_simplesend propertyid \”amount\”\n”

“\nCreate the payload for a simple send transaction.\n”

“\nArguments:\n”

“1. propertyid (number, required) the identifier of the tokens to send\n”

“2. amount (string, required) the amount to send\n”

“\nResult:\n”

“\”payload\” (string) the hex-encoded payload\n”

“\nExamples:\n”

+ HelpExampleCli(“omni_createpayload_simplesend”, “1 \”100.0\””)

+ HelpExampleRpc(“omni_createpayload_simplesend”, “1, \”100.0\””)

);

uint32_t propertyId = ParsePropertyId(params[0]);

RequireExistingProperty(propertyId);

int64_t amount = ParseAmount(params[1], isPropertyDivisible(propertyId));

std::vector payload = CreatePayload_SimpleSend(propertyId, amount);

return HexStr(payload.begin(), payload.end());

}

小结

USDT并没有自己的公有链,而是在比特币交易交易中利用比特币OP_RETURN来保存USDT交易信息。

逻辑上两条链,数据上一条链

USDT钱包地址与比特币地址等同

非交易所内的USDT转帐实际上bitcoin转帐

<!–/OL–>

相关文章:

发表评论