Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

手动构建OP_RETURN发送USDT

fzny61226
118 0 0
Omni协议
9 Q& c8 i4 t# W! r/ g! i8 t3 I, [! M  o- Q0 [
Omni协议(之前叫做 Mastercoin),是建立在比特网络上的一个协议.利用 Omni协议,可以很方便的创建代币,现有比特币网络上发行的代币可以在 Properties for ecosystem Production 找到,最知名的就是Tether(USDT).; B- ^4 H1 G) Y( z
Tether(USDT)是 Tether 公司推出的基于稳定价值货币美元(USD)的代币Tether USD(下称USDT),用户可以随时使用 USDT 与 USD 进行 1:1 兑换。Tether 公司严格遵守 1:1 的准备金保证,即每发行1个 USDT 代币,其银行账户都会有1美元的资金保障。官方称:用户可以在 Tether 平台进行资金查询(现在查不到)
3 _1 r' s; p6 H9 [7 _. ^/ rUSDT交易4 u% d! I0 Z% t  D' O
BTC网络的一笔USDT交易详情如下: 0347ab8f6291ab38c233576ddc0a4c3156b96d9fa800b07f2962e35c5b40011c9 A* K6 x$ g6 t! s9 B3 ]( g3 w

) b  Q3 [: J) K6 G9 n2 vvins: 这笔交易的  来自 1JDtcRLZyDQJm9g6xXuuSYEpp7SKagXDc7的UTXO: 分别是0.01585606和0.00000546.9 S$ o5 V5 V6 S: X4 s; J: @% _0 `- I
vout1: 找零0.01575606到1JDtcRLZyDQJm9g6xXuuSYEpp7SKagXDc7
! E4 U" H3 `; evout2: OP_RETURN锁定脚本,这个 vout 是 Omni 交易的特征之一,真正要发送的 USDT 数量就是在这个 vout 中体现的,后面详细的介绍. c- y  M# P: m
vout3: 往1NomS9Umy2AJV2xECL89sxwL4RyXmGkyZm发送 0.00000546,一般Omni 交易往目的地址都是发送这么多金额,这个值是BTC网络允许的最低的数量.可以这么理解:USDT是借助了BTC网络来进行交易,所以你只需要支付最少的BTC来保证交易能够创建就可以了(当然也可以超过0.00000546,但是没有必要)
5 {; ~& a* {5 @# N3 COP_RETURN' f' `4 T+ n) Q0 e: @+ z2 \/ o
以 OP_RETURN 开头的锁定脚本有着以下两种含义:
: T, K; K1 f) l- Z9 o这个 vout 不能被花费OP_RETURN后面跟随的是备注信息
  O" y: \9 u0 N& Y2 L
) H# ?' V2 |4 h8 i0 m2 \
在上面的 vout2中: OP_RETURN 6f6d6e69000000000000001f0000000b0f387b00代表的意义如下:: y5 r1 m, M9 N
6f6d6e69 : "omni"的ASCII编码,以为这个备注信息是与 Omni 协议有关系的
& l8 s0 F0 q1 Y" f% c0000 : Transaction version; j: L; v0 f3 L5 y, M! J
0000 : Transaction type, 2 Bytes,代表着Simple Send
) q4 p. r0 b/ \) I# w' r' t" v0000001f : Currency identifier, 4 bytes.1f== 31 == TetherUS
/ t& m+ H/ [9 p: q* s( D: [BTC主网: 1 and 3 to 2,147,483,647
, I  d- U+ h! e) KBTC测试网: 2 and 2,147,483,651 to 4,294,967,295
4 `- _% E( J! `2 k0000000b0f387b00 : Amount to transfer. 8Bytes. 数量的十六进制0000000b0f387b00 = 47500000000聪 = 475 USDT1 ~3 a2 {; o4 A. Q) W

& E* g+ f3 b5 }' U7 k2 |; F如何使用 Trezor 发送的USDT. W- R5 c  M( O9 K# k
& D: {9 W( B6 s6 a
Trezor 是为数不多支持 TetherUS的钱包,强如 Ledger 都还不支持9 t; A: v9 c4 I* J
使用 Trezor 来发送 USDT,你可以通过下面两种方式:
0 S( _1 |7 I7 |1 U6 f, R5 ^+ ~* r6 K
Trezor + Electrum : 这个可以参考How to send USDT with Electrum
: @/ C8 O) |2 S

, Z1 _1 V8 X, n; q5 F1 x官方的Chrome/FireFox extension wallet(下面只介绍这种)/ `% q% }' D. b: {1 Q' Y

9 o. @3 `1 S: E, W
. c3 C. @0 F) n# a9 `' c+ T  r/ }- t
这两种方式核心都是一样的,都是手动构建 OP_RETURN, 然后签名广播
) H( N+ ?- J1 h; {7 h( R+ D, Z7 K下面使用测试网进行说明; ~9 y/ @) P# a
步骤一:
4 T  v6 a) v1 {; ?- e新建一个 Legacy 的账号,由于Trezor web wallet不支持指定send from,需要保证一个账号只生成一个地址. "账号"的概念指的是HD中第三层,m/44’/1’/1’的意思是:测试网普通地址,第二个账号$ K/ }2 i. a3 \
步骤二:
2 _( O; M' d" _/ U! ~# @从mujE43EZckhHf6i1P2ru9UUg78VTjLwwL3发送 1666 USDT 到 msbuQnXJPcqimUi3eiWFE9oPu15Ce7dphm3 }9 Z5 n( {2 u7 V% M- V, ~! u
这里 web前端限制了不能填 0.00000546,所以填了0.00000547
1 W. h5 n9 O' M  M% t! k4 e3 [/ H" q由于 Omni协议中,vout 找零必须找给发送地址,否则,这笔交易将不会被判断为是 Omni交易,只会认为是发送 0.00000546的普通BTC交易,所以这里增加一个 vout,将剩下的钱全部转给原 SendFrom 地址mujE43EZckhHf6i1P2ru9UUg78VTjLwwL3! l/ B3 T2 b7 _! Y8 L4 _/ U

7 i. _2 y# h& _# |5 @步骤三: 构建OP_RETURN:OP_RETURN 6f6d6e6900000000800004e700000000000006821 i/ _  P, s" ?
我在BTC Testnet发的币 propertyID 为 21474849034 i. e/ F. ~9 s- q; s& [+ h
) h6 R/ ]: A6 r; m! _

6 Z' U# b0 `) O
5 F3 n* A" }; [; F5 I最后的交易:b61dee5fc2f4588bcef39c1e6f12fee9b963c311efc6731ba06e351fcc3dbb750 A0 H1 ^9 |6 c1 }7 C

: b1 z* b% @$ i5 `
& G8 g3 h4 R0 E其他
" E% m9 x: s' v! a; ?如果觉得构建 OP_RETURN 很麻烦,那么可以使用 Omni 的 maintainer 在 github 发布的一个工具快速构建OP_RETURN脚本
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

fzny61226 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22