Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

手动构建OP_RETURN发送USDT

fzny61226
57 0 0
Omni协议
. x! }& [9 d1 }/ a' }$ q' L! ~$ Q* [7 y
Omni协议(之前叫做 Mastercoin),是建立在比特网络上的一个协议.利用 Omni协议,可以很方便的创建代币,现有比特币网络上发行的代币可以在 Properties for ecosystem Production 找到,最知名的就是Tether(USDT).
4 r: W! Q% a6 K5 h1 Z  J  M$ KTether(USDT)是 Tether 公司推出的基于稳定价值货币美元(USD)的代币Tether USD(下称USDT),用户可以随时使用 USDT 与 USD 进行 1:1 兑换。Tether 公司严格遵守 1:1 的准备金保证,即每发行1个 USDT 代币,其银行账户都会有1美元的资金保障。官方称:用户可以在 Tether 平台进行资金查询(现在查不到)& M% [$ }6 }( c9 j: M
USDT交易
8 \7 n0 s% q' `9 d$ H' ~( oBTC网络的一笔USDT交易详情如下: 0347ab8f6291ab38c233576ddc0a4c3156b96d9fa800b07f2962e35c5b40011c2 I. a1 Q6 {0 {2 s2 z

- t4 v, T1 H: ]% `  Yvins: 这笔交易的  来自 1JDtcRLZyDQJm9g6xXuuSYEpp7SKagXDc7的UTXO: 分别是0.01585606和0.00000546.
" }1 V1 m& z9 T6 tvout1: 找零0.01575606到1JDtcRLZyDQJm9g6xXuuSYEpp7SKagXDc7
7 q9 e( `3 {2 i0 Jvout2: OP_RETURN锁定脚本,这个 vout 是 Omni 交易的特征之一,真正要发送的 USDT 数量就是在这个 vout 中体现的,后面详细的介绍# A( L% |7 ?1 P/ }2 K; o' N
vout3: 往1NomS9Umy2AJV2xECL89sxwL4RyXmGkyZm发送 0.00000546,一般Omni 交易往目的地址都是发送这么多金额,这个值是BTC网络允许的最低的数量.可以这么理解:USDT是借助了BTC网络来进行交易,所以你只需要支付最少的BTC来保证交易能够创建就可以了(当然也可以超过0.00000546,但是没有必要)( t: p6 b2 u" k' \* g# b# {
OP_RETURN
. j6 n. F; O; F- E: L" y. u+ u以 OP_RETURN 开头的锁定脚本有着以下两种含义:; m( X! ^- i3 V) V' j8 z5 c; S0 [
这个 vout 不能被花费OP_RETURN后面跟随的是备注信息2 r; T) B' E9 E) `* q) @" H" z

1 l$ o- y: H6 w; p/ g  p$ m: C# H在上面的 vout2中: OP_RETURN 6f6d6e69000000000000001f0000000b0f387b00代表的意义如下:
# {4 A  V! ^6 F3 G6f6d6e69 : "omni"的ASCII编码,以为这个备注信息是与 Omni 协议有关系的8 e* ^; R$ Z- T/ x3 d- a
0000 : Transaction version
" G8 }- P8 V6 Y7 x0000 : Transaction type, 2 Bytes,代表着Simple Send
8 N7 [$ A/ {5 f! n, P2 c0000001f : Currency identifier, 4 bytes.1f== 31 == TetherUS
4 r, _( T* p7 i' g( K9 I2 Q9 `BTC主网: 1 and 3 to 2,147,483,6475 ]& l7 f- N! C9 W2 D8 z! l
BTC测试网: 2 and 2,147,483,651 to 4,294,967,295
0 |9 Q0 m0 ~* \. T2 D: }0000000b0f387b00 : Amount to transfer. 8Bytes. 数量的十六进制0000000b0f387b00 = 47500000000聪 = 475 USDT
! {, U$ I4 n. V% @/ N. q- x( G1 {5 m0 O" r8 J" `3 w
如何使用 Trezor 发送的USDT
# ~; v( C/ e( ]# P& P- V3 A5 _+ n/ T, P
Trezor 是为数不多支持 TetherUS的钱包,强如 Ledger 都还不支持
0 S) m, ~# B( M使用 Trezor 来发送 USDT,你可以通过下面两种方式:
+ w& o4 {. ^" @0 L" _6 w$ x
3 Q6 W7 G( o: w( o8 z/ o2 V/ D9 YTrezor + Electrum : 这个可以参考How to send USDT with Electrum
6 h( ?7 k) ^! e. N

- j* P( x& j; p. H* M官方的Chrome/FireFox extension wallet(下面只介绍这种)
; m  O, i4 U7 ?+ s% ]5 k& A& [$ J- f5 p* `0 C1 F
6 g4 C/ U1 ^1 Q- |0 ]
这两种方式核心都是一样的,都是手动构建 OP_RETURN, 然后签名广播
0 }, m8 ~, K$ K! c, G& v( O下面使用测试网进行说明2 L0 D, l5 z3 b+ a4 F
步骤一:
  T' o: }% X2 \% i新建一个 Legacy 的账号,由于Trezor web wallet不支持指定send from,需要保证一个账号只生成一个地址. "账号"的概念指的是HD中第三层,m/44’/1’/1’的意思是:测试网普通地址,第二个账号
& X  l: K- f2 d6 v9 \* p步骤二:% Z$ I! n# ]% R% l0 Z/ O0 q5 l! @
从mujE43EZckhHf6i1P2ru9UUg78VTjLwwL3发送 1666 USDT 到 msbuQnXJPcqimUi3eiWFE9oPu15Ce7dphm
- x0 d, p0 C% }( H4 o这里 web前端限制了不能填 0.00000546,所以填了0.00000547
( u: f6 W. V& H& {由于 Omni协议中,vout 找零必须找给发送地址,否则,这笔交易将不会被判断为是 Omni交易,只会认为是发送 0.00000546的普通BTC交易,所以这里增加一个 vout,将剩下的钱全部转给原 SendFrom 地址mujE43EZckhHf6i1P2ru9UUg78VTjLwwL3  c& U  C- _8 k& X& x8 s6 f

% V3 W# t9 r! F, O( p; n8 [, f# o1 R步骤三: 构建OP_RETURN:OP_RETURN 6f6d6e6900000000800004e70000000000000682
  D. D+ ~( o" a9 v我在BTC Testnet发的币 propertyID 为 21474849032 v' a' G! l. S
, p3 g5 N& ?% y: X; o7 W. ]. t2 h

, n1 ]- s" R" L9 X# Y1 E6 F" O% ?- ^$ m, y; q
最后的交易:b61dee5fc2f4588bcef39c1e6f12fee9b963c311efc6731ba06e351fcc3dbb75
/ P# n8 N- b9 j3 E$ r# T4 n- o" E7 x% ]

6 t; \4 G$ A7 j' }其他
) B( J5 ]4 f) E! B如果觉得构建 OP_RETURN 很麻烦,那么可以使用 Omni 的 maintainer 在 github 发布的一个工具快速构建OP_RETURN脚本
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

fzny61226 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22