MOV市場可以分為超導兌換、磁力兌換和閃電兌換。由於Bycoin的簡潔性、易用性,目前大多數用戶都是通過Bycoin APP使用MOV的產品。雖然Bycoin優點良多,但並不適合有做市商需求的用戶。針對這部分用戶,MOV團隊提供了RESTful API或MOV-MMDK在MOV市場參與做市。本文會通過一個簡單的例子講解如何通過MOV-MMDK使用磁力兌換。
磁力做市架構和原理
MOV Server只是提供訂單與交易之間的相互轉化,實際上所有的訂單都是由用戶籤名後提交, 並最終由智能合約進行撮合的過程。 MOV Server提供了與中心化交易所接近一致的API接口,其交易時的API使用體驗,基本與中心化交易所一致,但依然有一些不同,下面我們將會進行說明。
準備工作
在正式開始之前,我們先進行一些準備吧!包括名詞解釋和所需工具的準備:
磁力兌換
磁力兌換是MOV協議下的核心產品之一,是將用戶的資產通過合約的形式在鏈上完成掛單,撮合和成交的一種資產交易方式。通俗的說,磁力兌換實現的就是去中心化交易的功能,並且在去中心的同時具備了媲美中心化交易所的速度。
MOV Server
連接MOV的中心化伺服器,用戶使用其提供RESTful API在MOV上進行交易。
MOV-MMDK
MOV Market Maker Development Kit,基於MOV Server的RESTful API開發的Python SDK
工具準備:
Python
MOV-MMDK是基於MOV Server的RESTful API開發的Python SDK,使用前請確保在你有 Python3 開發環境。本教程所有過程使用的版本為 Python 3.6.9
MOV-MMDK安裝
MOV Market Maker Develo pment Kit,基於MOV Server的RESTful API開發的Python SDK,提供獲取市場深度、發送訂單、取消訂單、查詢訂單、查詢帳戶餘額等功能。
git clone https://github.com/Bytom/mov-mmdkcd mov-mmdk/pip3 install -r requirements.txtpython3 setup.py install
溫馨提示:推薦在macOS或Linux環境下使用,Windows環境下安裝依賴的過程比較繁瑣。
詳細教程
詳細的教程我們通過一個示例來演示如何通過MMDK使用磁力兌換。我們可以在直接在Python解釋器中運行我們的代碼。
1.在命令行界面輸入以下命令即可進入Python解釋器
python3
2.接下來需要在代碼中添加依賴,創建Api對象就可以調用MOV-MMDK提供的API參與磁力兌換做市商
from mov_sdk.mov_api import MovApi
3.獲取私鑰並初始化,以下提供了四種不同的初始化方法。本教程在演示的時候選擇第一種方式。
git clone https://github.com/Bytom/mov-mmdk
//通過助記詞初始化 api = MovApi(secret_key="") config = api.init_from_mnemonic("你的助記詞") print(api.main_address) print(api.vapor_address) print(api.public_key) //通過私鑰初始化 api = MovApi(secret_key="你的私鑰") print(api.main_address) print(api.vapor_address) print(api.public_key) //以下兩種方式會創建新地址並且初始化 api = MovApi("") print(api.secret_key) print(api.main_address) print(api.vapor_address) print(api.public_key) api = MovApi("") print(api.get_new_secret_key()) print(api.main_address) print(api.vapor_address)
根據自己需求創建好api對象就可以調用sdk提供的方法進行交易。對於Bycoin的用戶,推薦使用第一種初始化的方式,可以在Bycoin-設置-錢包設置-備份助記詞中獲取自己帳戶的助記詞,每個助記詞用空格分隔。
4.通過sdk獲得磁力交易對信息並輸出:
print(api.get_exchange_info())
5.獲取市場指定交易對的深度,這裡我們獲取BTC/USDT交易對的5檔深度:
print(api.get_depth("BTC/USDT", 5))
6.發送磁力交易訂單,例如我們現在發送一筆BTM/USDT的賣出訂單,定價為1USDT,數量為1:
print(api.send_order(symbol="BTM/USDT", side="sell", price=1, volume=1))
7.查詢所有未成交的磁力訂單,可以使用這個方法來查詢步驟6發送的訂單:
print(api.query_open_orders("BTM/USDT"))
8.通過訂單號查詢磁力訂單
print(api.query_list_orders([6940174]))
9.磁力撤單,通過訂單號,將指定的訂單撤銷
print(api.cancel_order(6940174))
磁力撤單後,使用api.query_open_orders("BTM/USDT")查詢所有未成交的磁力訂單,這時候已經data為空,證明我們確實把該訂單取消了。而通過訂單號查詢,在type中顯示為"mov_cancel_order",已取消訂單。
10.查詢帳戶所有資產的餘額
print(api.get_balance())
以上就是在磁力兌換中常使用的方法,包括了訂單的發送、查詢、撤銷和對帳戶資產的查閱。本教程中的過程全部通過MOV-MMDK進行磁力交易,返回數據的格式及說明詳見MOV-MMDK API 除了這種方式以外,用戶也可用直接通過磁力兌換的RESTful API進行交易。詳見:磁力兌換API
溫馨提示:若直接通過磁力兌換的RESTful API進行交易,在submit order的環節需要用戶自己在本地對raw_transaction籤名以得到signatures。該過程比較複雜,應該目前推薦使用MOV-MMDK的方式參與做市。
磁力兌換與中心化交易所的區別
交易即轉帳
用戶所有的兌換交易,實際上都是鏈上的轉帳,可以到MOV數據中心 以及vapor區塊鏈瀏覽器 通過鏈上地址查詢到市商做市的所有交易。
擁有私鑰,即可轉走帳戶上的所有金額
MOV Server和MOV-MMDK不會存儲用戶的私鑰,用戶請妥善保管你的私鑰。擁有私鑰就擁有帳戶的最高權限,洩露私鑰會導致帳戶上所有資金被人轉走,丟失私鑰,將失去對帳戶資金的控制權!
建議一個交易對對應一個錢包,不要在一個錢包並發多筆交易
構建交易訂單實際上是發送一筆UTXO交易。流程是這樣的:伺服器返還需要籤名的相關UTXO交易->用戶端籤名,提交用戶訂單到伺服器。 這時候,如果需要籤名的相關UTXO出現重複,則可能導致這筆交易失敗。 因此我們建議您採用單線程的方式來執行交易訂單請求,如果真的需要並發交易的時候,請儘量通過多個錢包單線程的方式來解決問題。
本文來源: 金色財經 / 作者:比原鏈Bytom