讓 Uniswap 這臺「預言機」給市商機器人喂價。

原文標題:《用 Uniswap 做個去中心化的「預言機」》
撰文:DeFi 傳教士

什麼是預言機?預言機英文叫 Oracle,在區塊鏈領域,是給智能合約提供外部數據源的系統。預言機是一箇中間件,連通智能合約與區塊鏈外部世界,是區塊鏈重要的基礎設施。

在 ETH 裏有幾個出名的預言機,如 Oraclize、Chainlink,有其他很多文章介紹的,這裏不詳說。想必小白心中猛然大悟,預言機好像也不能預測未來吧,這麼高大上的預言機,不就是個數據採集的系統嘛,只不過給智能合約提供數據罷了。對,但預言機提供的數據必須精準無誤,否則會導致智能合約接收了不正確的數據,產生不良後果,曾經的預言機攻擊事件就產生過不小損失。因此,預言機也由單點逐步進化爲分佈式,慢慢去中心化,這一點跟互聯網行業的 CDN 有很多相似之處,具備了很強的抗攻擊能力,這就保障了預言機多方位採集數據,不受異常干擾,給智能合約提供準確可靠的數據。

那這個和 Uniswap 有什麼關係呢?Uniswap 本身就是個可以 AMM 的 DEX,去中心化程度自然是沒得說,由於基於上面流動性進行的交易和套利行爲,讓其價格跟趨向於市場價,所以排除 ETH 性能,流動性降低和「閃電貸」類產生的價格異常滑動影響,它還算蠻符合做預言機的要求,也能給其它智能合約作個喂價參考。目前 Uniswap v1 的確不夠優秀,但 v2 已經在測試網測試了,正式上線也不會太遠,希望 v2 能解決當前的一些問題和短板,能成爲一臺完美的預言機。

我爲啥要用 Uniswap 做預言機呢?恭喜你,問對了。這纔是本文的正題。本文其實還是 MakerDAO 市商機器人的續集,不想讓大家覺得在炒舊飯,所以賣賣關子,順便做做下科普啦。之前說到的市商機器人,是用到它內部集成的幾個喂價系統,其實不一定太令人滿意,但它就提供了擴展能力,可以集成更多外部的喂價系統。今天就來介紹下怎麼讓 Uniswap 這臺「預言機」給市商機器人喂價。因爲市商機器人本身只是一套程序,算不上智能合約,所以要給這預言機打上引號。咱繼續說在 Windows 下做打通市商機器人和 Uniswap 聯繫的中間程序:

  1. 擁有一套 Python3.6 的開發環境
  2. git 克隆代碼,地址
  3. 進入代碼目錄,用 git 下載 uniswap-price-feed 的子模塊。git submodule update --init --recursive
  4. 用 pip3 安裝項目依賴和子模塊依賴,都在各個 requirements.txt 文件裏
  5. 用 pyinstaller 進行打包封裝成可運行的 exe 文件,OK 完成

接下來再說下這個怎麼玩,在 exe 文件目錄下打開命令行 cmd 敲命令 uniswap-price-feed.exe 加--help 會有詳細的參數介紹:

  • --rpc-host 以太坊的網絡節點,這裏直接借用 cloudflare 的
  • --rpc-port 以太坊的網絡節點端口,cloudflare 的是 443
  • --rpc-timeout 連接節點的超時時間,默認 10s
  • --http-address 系統地址,本地直接忽略
  • --http-port 系統端口,默認 7777
  • --base-exchange-address 本位幣種的交易所地址,忽略就是 ETH 的
  • --base-token-symbol 本位幣種的符號,忽略就是 ETH 的
  • --base-token-address 本位幣種的 ERC20 地址,忽略就是 ETH 的
  • --quote-exchange-address 報價幣種的交易所地址,這裏填了 Uniswap 上 DAI 的交易所地址
  • --quote-token-symbol 報價幣種的符號,這裏填 DAI
  • --quote-token-address 報價幣種的 ERC20 地址,這裏填 DAI 的地址
  • --report-time 報告價格的間隔時間,單位是 s
  • --ro-account 配置只讀賬號密碼,這裏填 user:readonly
  • --rw-account 配置讀寫賬號密碼,好像用不到

好了,做成個 bat 啓動文件,方便使用,可以自行編輯填寫需要的參數。小白同學還是可以直接下載使用封裝好的包。

地址

備註:

1. 已在 Windows 7 下測試能用

2. 建議跟 MakerDAO 市商機器人在同臺機上

啓動後如圖所示

手把手教你用 Uniswap 搭建去中心化「預言機」

使用的話就是在 MakerDAO 市商機器人的--price-feed 參數改成 ws://user:readonly@localhost:7777/price/ETH-DAI/socket,啓動市商機器人就可以接收喂價系統發過來的數據。喂價系統一直監控 Uniswap 這臺「預言機」,每隔一會給機器人發一段數據,內容如下:

{
    "data": {
        "price": 173.03457395327663
    },
    "timestamp": 1571747588
}

裏面就兩個數據,報價的時間戳和價格。

當然,如果你不滿足於用 Uniswap 喂價,也可參照代碼範例,去編寫一套自己的喂價系統調用 DeFi 上其他 DEX 的數據作爲喂價參考,這也是非常棒的一件事。加入 DeFi 陣營,一起尋找有價值的應用。

最後提醒一下,市場有風險,本文只是個研究,不作爲投資建議,請合理控制風險。

來源鏈接:bihu.com