让 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