Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

手动构建OP_RETURN发送USDT

fzny61226
72 0 0
Omni协议& H! }9 m4 _( T9 }" o4 l' A

6 k8 H: c: }" q$ x5 `Omni协议(之前叫做 Mastercoin),是建立在比特网络上的一个协议.利用 Omni协议,可以很方便的创建代币,现有比特币网络上发行的代币可以在 Properties for ecosystem Production 找到,最知名的就是Tether(USDT).5 ~  ?- {2 \/ |# w" [9 p
Tether(USDT)是 Tether 公司推出的基于稳定价值货币美元(USD)的代币Tether USD(下称USDT),用户可以随时使用 USDT 与 USD 进行 1:1 兑换。Tether 公司严格遵守 1:1 的准备金保证,即每发行1个 USDT 代币,其银行账户都会有1美元的资金保障。官方称:用户可以在 Tether 平台进行资金查询(现在查不到), A+ z& p  J. C0 n0 D' ~+ Y# x4 h
USDT交易+ F. i4 a: @8 X% Q
BTC网络的一笔USDT交易详情如下: 0347ab8f6291ab38c233576ddc0a4c3156b96d9fa800b07f2962e35c5b40011c1 g4 E' Y! R$ q& H6 E

% ^4 K' Y+ Y1 O+ T! K+ m& ]vins: 这笔交易的  来自 1JDtcRLZyDQJm9g6xXuuSYEpp7SKagXDc7的UTXO: 分别是0.01585606和0.00000546.
2 B- K$ j- Z/ ~) S  Xvout1: 找零0.01575606到1JDtcRLZyDQJm9g6xXuuSYEpp7SKagXDc7
* v+ H# j0 P1 Y/ ~% l; e: r1 l$ h5 {, `vout2: OP_RETURN锁定脚本,这个 vout 是 Omni 交易的特征之一,真正要发送的 USDT 数量就是在这个 vout 中体现的,后面详细的介绍
! X2 {  k. ~: m9 C( qvout3: 往1NomS9Umy2AJV2xECL89sxwL4RyXmGkyZm发送 0.00000546,一般Omni 交易往目的地址都是发送这么多金额,这个值是BTC网络允许的最低的数量.可以这么理解:USDT是借助了BTC网络来进行交易,所以你只需要支付最少的BTC来保证交易能够创建就可以了(当然也可以超过0.00000546,但是没有必要)
$ @6 b4 K# `( a6 rOP_RETURN& a5 B6 n9 s& H
以 OP_RETURN 开头的锁定脚本有着以下两种含义:4 \4 m' u" J& t2 \, i8 E6 c" r9 C
这个 vout 不能被花费OP_RETURN后面跟随的是备注信息! W: b0 N3 ~4 t. q8 l; M* Q
$ d. |9 L/ R2 p6 ], q7 [  p
在上面的 vout2中: OP_RETURN 6f6d6e69000000000000001f0000000b0f387b00代表的意义如下:0 e: X* |' T" h
6f6d6e69 : "omni"的ASCII编码,以为这个备注信息是与 Omni 协议有关系的; s$ ~& B* H+ G# \
0000 : Transaction version7 N1 }9 i# Q" S4 m, k
0000 : Transaction type, 2 Bytes,代表着Simple Send
0 z4 ?4 A# J5 f- e7 \) j7 u0000001f : Currency identifier, 4 bytes.1f== 31 == TetherUS
+ r6 r- d, u% m# e0 T# OBTC主网: 1 and 3 to 2,147,483,6475 J+ V7 O3 B' K
BTC测试网: 2 and 2,147,483,651 to 4,294,967,295
& h8 k4 e! W& g0000000b0f387b00 : Amount to transfer. 8Bytes. 数量的十六进制0000000b0f387b00 = 47500000000聪 = 475 USDT
, ]7 P# V9 X+ r; }+ P" S  y' H0 b# n# ?$ @* W' t9 W, V% ?
如何使用 Trezor 发送的USDT& _( \+ u  n& \; v/ ?3 L0 ^
5 i/ {! V, L* C! ^( u
Trezor 是为数不多支持 TetherUS的钱包,强如 Ledger 都还不支持
4 K; |, Q7 M+ k* R7 s使用 Trezor 来发送 USDT,你可以通过下面两种方式:/ E4 ?: T( h* [; R2 j' Q

$ K" x" G4 t4 Z) l0 ]9 ^) }: ?Trezor + Electrum : 这个可以参考How to send USDT with Electrum
7 f1 h+ y& G# u0 w' l( |
/ ^$ E( H  f" @
官方的Chrome/FireFox extension wallet(下面只介绍这种)2 _2 j; t: O4 }; U% j
4 E: a' G+ [5 I# s' |: D6 L: s  I

) d1 u& d& h7 y; E9 J这两种方式核心都是一样的,都是手动构建 OP_RETURN, 然后签名广播
( M( T: d! v0 Y' Z. k& W下面使用测试网进行说明7 o  v4 p$ {# K2 Y: F4 S
步骤一:' T7 z- `: e1 E: F
新建一个 Legacy 的账号,由于Trezor web wallet不支持指定send from,需要保证一个账号只生成一个地址. "账号"的概念指的是HD中第三层,m/44’/1’/1’的意思是:测试网普通地址,第二个账号
  Q$ n/ t" C3 t8 ~# R, J2 e步骤二:
% P; Q- d# U9 _4 x; T0 g从mujE43EZckhHf6i1P2ru9UUg78VTjLwwL3发送 1666 USDT 到 msbuQnXJPcqimUi3eiWFE9oPu15Ce7dphm
$ z* s" K& p3 e  o8 J这里 web前端限制了不能填 0.00000546,所以填了0.00000547
" d3 X; v& v- ]: H% |8 Z( b由于 Omni协议中,vout 找零必须找给发送地址,否则,这笔交易将不会被判断为是 Omni交易,只会认为是发送 0.00000546的普通BTC交易,所以这里增加一个 vout,将剩下的钱全部转给原 SendFrom 地址mujE43EZckhHf6i1P2ru9UUg78VTjLwwL3
7 y$ c1 j& j. {, Y5 J% g% |2 y, V- l6 ], t+ ~. K+ [
步骤三: 构建OP_RETURN:OP_RETURN 6f6d6e6900000000800004e70000000000000682* i3 d' m; S% g$ f  ~& g& J
我在BTC Testnet发的币 propertyID 为 2147484903
4 G! ^5 a! w, ^5 }, U7 S. x1 Z  A$ ?* [

3 a$ g; F+ i% b8 y/ q* ]. K
, l9 {: Y2 m; e& b$ E& H9 P最后的交易:b61dee5fc2f4588bcef39c1e6f12fee9b963c311efc6731ba06e351fcc3dbb75' n# A: [( U1 i9 }

2 e: G& t. `/ I: @# c: ]; e' ]3 l  Z! W9 P) F; F2 r
其他* @" f) O7 n, g& c$ R
如果觉得构建 OP_RETURN 很麻烦,那么可以使用 Omni 的 maintainer 在 github 发布的一个工具快速构建OP_RETURN脚本
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

fzny61226 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    22