手動構建OP_RETURN發送USDT

Quick Link

區塊瀏覽器

OmniLayer文檔

OmniLayer/spec前端

Omni協議

Omni協議(以前叫作 Mastercoin),是創建在比特網絡上的一個協議.利用 Omni協議,能夠很方便的建立代幣,現有比特幣網絡上發行的代幣能夠在 Properties for ecosystem Production 找到,最知名的就是Tether(USDT).git

Tether(USDT)Tether 公司推出的基於穩訂價值貨幣美圓(USD)的代幣Tether USD(下稱USDT),用戶能夠隨時使用 USDT 與 USD 進行 1:1 兌換。Tether 公司嚴格遵照 1:1 的準備金保證,即每發行1個 USDT 代幣,其銀行帳戶都會有1美圓的資金保障。官方稱:用戶能夠在 Tether 平臺進行資金查詢(如今查不到)github

USDT交易

BTC網絡的一筆USDT交易詳情以下: 0347ab8f6291ab38c233576ddc0a4c3156b96d9fa800b07f2962e35c5b40011cweb

vins: 這筆交易的 來自 1JDtcRLZyDQJm9g6xXuuSYEpp7SKagXDc7的UTXO: 分別是0.015856060.00000546.c#

vout1: 找零0.015756061JDtcRLZyDQJm9g6xXuuSYEpp7SKagXDc7瀏覽器

vout2: OP_RETURN鎖定腳本,這個 vout 是 Omni 交易的特徵之一,真正要發送的 USDT 數量就是在這個 vout 中體現的,後面詳細的介紹網絡

vout3: 往1NomS9Umy2AJV2xECL89sxwL4RyXmGkyZm發送 0.00000546,通常Omni 交易往目的地址都是發送這麼多金額,這個值是BTC網絡容許的最低的數量.能夠這麼理解:USDT是藉助了BTC網絡來進行交易,因此你只須要支付最少的BTC來保證交易可以建立就能夠了(固然也能夠超過0.00000546,可是沒有必要)ide

OP_RETURN

以 OP_RETURN 開頭的鎖定腳本有着如下兩種含義:工具

  • 這個 vout 不能被花費
  • OP_RETURN後面跟隨的是備註信息

在上面的 vout2中: OP_RETURN 6f6d6e69000000000000001f0000000b0f387b00表明的意義以下:測試

  • 6f6d6e69 : "omni"的ASCII編碼,覺得這個備註信息是與 Omni 協議有關係的
  • 0000 : Transaction version
  • 0000 : Transaction type, 2 Bytes,表明着Simple Send
  • 0000001f : Currency identifier, 4 bytes. 1f== 31 == TetherUS
    • 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
Field Type Bytes Example
Transaction version Transaction version 2 0
Transaction type Transaction type 2 0
Currency identifier Currency identifier 4 1f
Amount to transfer Number of Coins 8 0000000b0f387b00

如何使用 Trezor 發送的USDT

Trezor 是爲數很少支持 TetherUS的錢包,強如 Ledger 都還不支持

使用 Trezor 來發送 USDT,你能夠經過下面兩種方式:

這兩種方式核心都是同樣的,都是手動構建 OP_RETURN, 而後簽名廣播

下面使用測試網進行說明

步驟一: 新建一個 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

步驟三: 構建OP_RETURN:OP_RETURN 6f6d6e6900000000800004e70000000000000682

我在BTC Testnet發的幣 propertyID 爲 2147484903

Field Example
Transaction version 0
Transaction type 0
Currency identifier 800004e7(hex) == 2147484903
Amount to transfer 0000000000000682(hex) == 1666

最後的交易:b61dee5fc2f4588bcef39c1e6f12fee9b963c311efc6731ba06e351fcc3dbb75

其餘

若是以爲構建 OP_RETURN 很麻煩,那麼可使用 Omni 的 maintainer 在 github 發佈的一個工具快速構建OP_RETURN腳本

參考資料

Bitcoin Developer Guide

How to send USDT with Electrum

Create a new Omni Protocol transaction

相關文章
相關標籤/搜索