Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

手动构建OP_RETURN发送USDT

fzny61226
56 0 0
Omni协议
8 N" U4 H' u! [2 v) e: t8 T- k8 y0 B& ~
Omni协议(之前叫做 Mastercoin),是建立在比特网络上的一个协议.利用 Omni协议,可以很方便的创建代币,现有比特币网络上发行的代币可以在 Properties for ecosystem Production 找到,最知名的就是Tether(USDT).
& ^3 F$ \$ k4 ^8 c2 r/ d9 ?Tether(USDT)是 Tether 公司推出的基于稳定价值货币美元(USD)的代币Tether USD(下称USDT),用户可以随时使用 USDT 与 USD 进行 1:1 兑换。Tether 公司严格遵守 1:1 的准备金保证,即每发行1个 USDT 代币,其银行账户都会有1美元的资金保障。官方称:用户可以在 Tether 平台进行资金查询(现在查不到)
1 }6 d" L( m6 R. X* C2 nUSDT交易% e, O: K: y% C7 S8 A& \
BTC网络的一笔USDT交易详情如下: 0347ab8f6291ab38c233576ddc0a4c3156b96d9fa800b07f2962e35c5b40011c7 c2 N3 h/ ?$ S% [; S
) z( M& w* H! c) f: f
vins: 这笔交易的  来自 1JDtcRLZyDQJm9g6xXuuSYEpp7SKagXDc7的UTXO: 分别是0.01585606和0.00000546.
: l: J5 Q) Y5 z: @# ?  Pvout1: 找零0.01575606到1JDtcRLZyDQJm9g6xXuuSYEpp7SKagXDc7" {) }/ I$ T7 l5 p
vout2: OP_RETURN锁定脚本,这个 vout 是 Omni 交易的特征之一,真正要发送的 USDT 数量就是在这个 vout 中体现的,后面详细的介绍
4 @: w6 B  i0 _# dvout3: 往1NomS9Umy2AJV2xECL89sxwL4RyXmGkyZm发送 0.00000546,一般Omni 交易往目的地址都是发送这么多金额,这个值是BTC网络允许的最低的数量.可以这么理解:USDT是借助了BTC网络来进行交易,所以你只需要支付最少的BTC来保证交易能够创建就可以了(当然也可以超过0.00000546,但是没有必要)
( `- z# d& o/ b; y5 aOP_RETURN
3 W3 p) z8 h: {2 a以 OP_RETURN 开头的锁定脚本有着以下两种含义:
: f+ P  h9 t# |& T8 t9 \" s# c/ W这个 vout 不能被花费OP_RETURN后面跟随的是备注信息
* s" c4 f( D, q% ^9 K! |; |7 d

* b5 I, a+ |- P% p5 d; D* e在上面的 vout2中: OP_RETURN 6f6d6e69000000000000001f0000000b0f387b00代表的意义如下:- v! `8 k. `6 }9 D- ]
6f6d6e69 : "omni"的ASCII编码,以为这个备注信息是与 Omni 协议有关系的6 V/ d6 q9 ?3 g8 N
0000 : Transaction version
: ^8 v! C1 x4 l, s  W0000 : Transaction type, 2 Bytes,代表着Simple Send% t" o  Q. o; E
0000001f : Currency identifier, 4 bytes.1f== 31 == TetherUS
% f+ U( y$ U, B- ?  pBTC主网: 1 and 3 to 2,147,483,647
' y; o7 E7 ], G9 z. N5 IBTC测试网: 2 and 2,147,483,651 to 4,294,967,2953 ~& L2 q4 D, J  K
0000000b0f387b00 : Amount to transfer. 8Bytes. 数量的十六进制0000000b0f387b00 = 47500000000聪 = 475 USDT, N; C. T7 z  ?' y

2 F4 `, s7 B  o) J0 e% o8 w如何使用 Trezor 发送的USDT
! `: i+ M+ B/ e  v  `' j3 r. S' `' x+ R8 o
Trezor 是为数不多支持 TetherUS的钱包,强如 Ledger 都还不支持9 p& q- u) G/ G; j. K1 C5 R) x
使用 Trezor 来发送 USDT,你可以通过下面两种方式:
: S3 B% w& H; j7 \4 t5 d$ ~  b7 p4 I, x
Trezor + Electrum : 这个可以参考How to send USDT with Electrum
# J. \: H# p- f# S5 a0 u
0 u4 {. v, r/ p- _
官方的Chrome/FireFox extension wallet(下面只介绍这种)+ o% u* i8 L! T4 O

* Y' m* w/ A2 \: V; f

6 E) f' {* G7 q8 z& f1 o: L这两种方式核心都是一样的,都是手动构建 OP_RETURN, 然后签名广播; g7 u; ?8 ~1 Y6 a
下面使用测试网进行说明
( L5 e& \8 j. o* B! w& D步骤一:) R+ X% S) C9 q  \  D$ j. h; ~
新建一个 Legacy 的账号,由于Trezor web wallet不支持指定send from,需要保证一个账号只生成一个地址. "账号"的概念指的是HD中第三层,m/44’/1’/1’的意思是:测试网普通地址,第二个账号
. i$ W: F4 L* z8 l* W/ F步骤二:! P1 y2 B% G& J6 r# |4 ?
从mujE43EZckhHf6i1P2ru9UUg78VTjLwwL3发送 1666 USDT 到 msbuQnXJPcqimUi3eiWFE9oPu15Ce7dphm# A1 u, z4 m. z2 m/ q* f3 Q
这里 web前端限制了不能填 0.00000546,所以填了0.00000547% u( _: g# A7 O4 \4 U' h7 Z2 `- ~
由于 Omni协议中,vout 找零必须找给发送地址,否则,这笔交易将不会被判断为是 Omni交易,只会认为是发送 0.00000546的普通BTC交易,所以这里增加一个 vout,将剩下的钱全部转给原 SendFrom 地址mujE43EZckhHf6i1P2ru9UUg78VTjLwwL3
4 N& Q9 X" W  a( A( j
* |/ O9 \% m" K) l" w" f步骤三: 构建OP_RETURN:OP_RETURN 6f6d6e6900000000800004e70000000000000682
. V1 k+ t" i* p' p. x5 y, x我在BTC Testnet发的币 propertyID 为 2147484903: \2 k/ e% v$ _+ z
. Y- b( x" p/ T$ m: z

) _5 Z2 L: q; v" ?; Q7 y2 w! Q% F7 D$ w, k8 g6 a/ e
最后的交易:b61dee5fc2f4588bcef39c1e6f12fee9b963c311efc6731ba06e351fcc3dbb75
  Z, e5 J. e& k$ N0 F$ U0 C- L' m4 ~& a! c" B- n4 V$ K

' d3 u; ~+ g9 m1 F( Y1 [$ I& a* {3 y其他; k5 D8 X9 q* a( p' Y
如果觉得构建 OP_RETURN 很麻烦,那么可以使用 Omni 的 maintainer 在 github 发布的一个工具快速构建OP_RETURN脚本
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

fzny61226 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22