手动构建OP_RETURN发送USDT
fzny61226
发表于 2022-12-27 22:51:12
117
0
0
Omni协议(之前叫做 Mastercoin),是建立在比特网络上的一个协议.利用 Omni协议,可以很方便的创建代币,现有比特币网络上发行的代币可以在 Properties for ecosystem Production 找到,最知名的就是Tether(USDT).: u3 b/ B( P- M$ o6 C2 E
Tether(USDT)是 Tether 公司推出的基于稳定价值货币美元(USD)的代币Tether USD(下称USDT),用户可以随时使用 USDT 与 USD 进行 1:1 兑换。Tether 公司严格遵守 1:1 的准备金保证,即每发行1个 USDT 代币,其银行账户都会有1美元的资金保障。官方称:用户可以在 Tether 平台进行资金查询(现在查不到)
USDT交易9 B2 o( x, A& s9 ?0 X
BTC网络的一笔USDT交易详情如下: 0347ab8f6291ab38c233576ddc0a4c3156b96d9fa800b07f2962e35c5b40011c: C5 ]! ^9 q; k, s
" J; d1 Z% J" C
vins: 这笔交易的 来自 1JDtcRLZyDQJm9g6xXuuSYEpp7SKagXDc7的UTXO: 分别是0.01585606和0.00000546.
vout1: 找零0.01575606到1JDtcRLZyDQJm9g6xXuuSYEpp7SKagXDc7
vout2: OP_RETURN锁定脚本,这个 vout 是 Omni 交易的特征之一,真正要发送的 USDT 数量就是在这个 vout 中体现的,后面详细的介绍
vout3: 往1NomS9Umy2AJV2xECL89sxwL4RyXmGkyZm发送 0.00000546,一般Omni 交易往目的地址都是发送这么多金额,这个值是BTC网络允许的最低的数量.可以这么理解:USDT是借助了BTC网络来进行交易,所以你只需要支付最少的BTC来保证交易能够创建就可以了(当然也可以超过0.00000546,但是没有必要)
OP_RETURN
以 OP_RETURN 开头的锁定脚本有着以下两种含义:1 z2 u d8 W4 _! g9 n! Q2 o
这个 vout 不能被花费OP_RETURN后面跟随的是备注信息8 _ h# m$ k! q
% a6 i9 I. @, T: b
在上面的 vout2中: OP_RETURN 6f6d6e69000000000000001f0000000b0f387b00代表的意义如下:
6f6d6e69 : "omni"的ASCII编码,以为这个备注信息是与 Omni 协议有关系的
0000 : Transaction version
0000 : Transaction type, 2 Bytes,代表着Simple Send8 A1 T; X _4 y, m( t0 Z- E0 E
0000001f : Currency identifier, 4 bytes.1f== 31 == TetherUS- q, b, R% T' Y) j3 u7 K H) ]( k% t
BTC主网: 1 and 3 to 2,147,483,647
BTC测试网: 2 and 2,147,483,651 to 4,294,967,295
0000000b0f387b00 : Amount to transfer. 8Bytes. 数量的十六进制0000000b0f387b00 = 47500000000聪 = 475 USDT
# [- A" J3 B, @# c2 e( E
如何使用 Trezor 发送的USDT
/ ~0 a p! K+ {2 B
Trezor 是为数不多支持 TetherUS的钱包,强如 Ledger 都还不支持! H$ x$ d6 {8 F. J( C3 W* w
使用 Trezor 来发送 USDT,你可以通过下面两种方式:
& r8 W9 R7 g2 O
Trezor + Electrum : 这个可以参考How to send USDT with Electrum2 O2 b# w1 e" l( ?
) k, q' n$ y8 l2 }1 f
官方的Chrome/FireFox extension wallet(下面只介绍这种)
6 O3 a! `- V1 h
这两种方式核心都是一样的,都是手动构建 OP_RETURN, 然后签名广播5 v( T! i0 N0 a8 k2 I0 [) R
下面使用测试网进行说明
步骤一:
新建一个 Legacy 的账号,由于Trezor web wallet不支持指定send from,需要保证一个账号只生成一个地址. "账号"的概念指的是HD中第三层,m/44’/1’/1’的意思是:测试网普通地址,第二个账号
步骤二:
从mujE43EZckhHf6i1P2ru9UUg78VTjLwwL3发送 1666 USDT 到 msbuQnXJPcqimUi3eiWFE9oPu15Ce7dphm
这里 web前端限制了不能填 0.00000546,所以填了0.00000547
由于 Omni协议中,vout 找零必须找给发送地址,否则,这笔交易将不会被判断为是 Omni交易,只会认为是发送 0.00000546的普通BTC交易,所以这里增加一个 vout,将剩下的钱全部转给原 SendFrom 地址mujE43EZckhHf6i1P2ru9UUg78VTjLwwL3
' ~, y6 R$ s% S( M* U1 C
步骤三: 构建OP_RETURN:OP_RETURN 6f6d6e6900000000800004e70000000000000682: B- q' W5 w2 t
我在BTC Testnet发的币 propertyID 为 21474849030 p. Q, A0 g: }4 m: r
7 N/ u) q3 G4 W2 E# h
) P' q9 H- P5 U0 O3 ]# v5 {- ^
最后的交易:b61dee5fc2f4588bcef39c1e6f12fee9b963c311efc6731ba06e351fcc3dbb758 H& n2 Q8 O! M- a+ b% ?
其他
如果觉得构建 OP_RETURN 很麻烦,那么可以使用 Omni 的 maintainer 在 github 发布的一个工具快速构建OP_RETURN脚本
成为第一个吐槽的人