usdt轉入轉出出入金開發
比特幣協議 -> Omni 層協議 -> USDT
USDT是基於比特幣omni協議的一種代幣: https://omniexplorer.info/asset/31 ID是31
Tether(USDT 的發行方)的官方錢包已關閉注冊,無法注冊錢包就無法獲得 API Key,也就意味着無法實現類似基於錢包接口的開發方案,但我們可以基於 USDT 的底層協議(叫做 Omni 層協議)進行開發
USDT 的協議結構從底層到頂層大致是:「比特幣協議 -> Omni 層協議 -> USDT」,也就是說,USDT 是基於比特幣的一種代幣(token);
另外USDT也出了最新的以太坊(ERC20 標准)版本,但發行量和流通量都太小,所以還是基於比特幣 Omni 層協議的經典USDT。
可以安裝並運行一個 Omni Core 節點客戶端,然后利用其提供的 RPC 接口,實現我們 USDT 出入金所需的代幣發送、接收等功能。
調用時http響應時間默認設置3秒超時會失敗,實際已轉出成功,需要改成10秒或更長后才可以正常接收到返回狀態。
usdt基於btc的,所以錢包里轉入轉出都需要通過比特幣鏈上操作都需要btc手續費,這也是很多交易所有最低充值額度的限制的原因。
=========================
usdt有單獨節點,一般是用bitcond源碼搭建的
如果自己搭建了節點看下面這個文檔就可以搞定了
怎么搭建節點,github上有的。
https://github.com/OmniLayer/omnicore/blob/master/src/omnicore/doc/rpc-api.md#omni_send
這個是usdt rpc調用提供的命令文檔。
自己不搭建節點需要另外開發?
自己不搭建節點就需要依賴三方平台,這樣不安全。
==================
importprivkey 出金之前需要把 address and privKey import to node
call rpc : importprivkey pls
usdt node 提供的命令。
文檔上有說明。
importprivkey 就是個rpc命令,你call下就可以了,參數就是address和privKey, 也許你們node不需要,
如果你剛才出金成功了,就ok,沒有成功,就call importprivkey 下
Usdt 出金 是個from to的形式,如果出金地址固定,就不用知道from, to是必須要指定的。
deposit: 掃描區塊,如果發現 to
to地址如果是存在你們的db中,就需要處理deposit的數據。
deposit 指的是入金。
掃描區塊的時候,blocknumber->blockHash->txHash->tx Details.
其中details就是json字符串,里面就有from to的地址,然后判斷to地址是否存在db中,說明別的平台向你們平的to地址有入金。
出金: 平台必須有個出金總地址addr,所有的出金都是從addr扣取。
掃描區塊的時候,blocknumber->blockHash->txHash->tx Details. 其中details就是json字符串,里面就有from to的地址,然后判斷to地址是否存在db中,說明別的平台向你們平的to地址有入金。
入金是要掃描區塊的,去分析交易詳情,發現有個to地址,要判斷這個to地址是不是你們平台的,如果是的,說明這次交易就是你們自己平台的地址在入金,所以這個交易詳情需要入庫。
中心錢包按照一定的百分比條件轉錢給冷錢包。 如果出金總地址余額不夠了,就要從熱錢包轉賬給出金總地址。
現金流監控有個策略的。
轉賬上鏈就必須要扣除手續費, to地址有N多個,你要寫個算法以最少的手續費轉給冷錢包。
中心錢包, 出金錢包, 熱錢包, 冷錢包 四個錢包按照策略比例相互轉。先要把這四個錢包概念弄清楚。
要分平台內出金還是平台外,平台外出金上鏈扣手續費,平台內直接划賬
地址存db, 沒有導入到錢包,實現方式可以不一樣
用戶地址對應公鏈上的余額是轉到冷錢包地址
用戶看到的余額是用戶賬號對應db中的余額,用戶地址對應公鏈的余額用戶沒有實際的轉賬權限,不能到外部平台轉賬,只能在自己平台轉賬。
就是像中心錢包到了,錢包冷,錢包之間相互轉,這個你是必須要上鏈的,上鏈要手續費,這個余額是錢包的余額。
如果是平台內轉賬,那是你這個平台內的。一個是錢包的余額。一個是一個用戶在你這個平台申請個賬號,你給他分配的余額,這是兩個不同的余額。
子錢包充值進來的都是鏈上的余額轉賬都需要通過鏈上,需要手續費。比特幣的最佳手續費有第三方api接口可以動態獲取。
usdt錢包里的幣要轉出到大錢包需要先轉點btc進去做手續費才能轉賬,轉多少進去合適需要看代碼和策略。
-------------------------
交易所,要出金的時候,importprivkey, 出金完了,能把privkey刪除掉嗎?
其他幣種也是這么操作的?像ETH用什么RPC ?
只有usdt需要import
eth使用web3j組件就可以了
那BTC的處理,和USDT一樣吧?
不需要刪除
不刪除,那不就成了熱錢包了嗎?
btc用的是bitcoinj
importprivkey 只是node提供的rpc命令,
並不會把privkey存儲到wallet.dat中? 命令執行完, 就會自動刪除?
下次執行,還需要import ?
import一次就可以了
跟自己直接在node上創建的賬戶差不多
你們只是在另外一個node 或者工具上創建了賬號,並保存在數據庫中,真正要轉賬時,把它import到節點上
這不是真正的離線簽名吧?
就是你說的這樣
離線簽名是先算出交易簽名,然后再廣播出去
地址這塊你們實現跟我實現的不一樣,我用的是地址派生,根據userid派生
只有usdt在創建地址的時候會import到node