LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > ?使用 Cosmos IBC 和 Band Protocol Oracle 构建 DeFi 的指南

?使用 Cosmos IBC 和 Band Protocol Oracle 构建 DeFi 的指南

2020-05-05 COSMOS 来源:区块链网络


原文链接:

https://blog.cosmos.network/guide-to-building-defi-using-band-protocol-oracle-and-cosmos-ibc-fa5348832f84

原文作者:Paul Nattapatsiri

本文是与 Jack Zampolin (前 Tendermint 产品总监)和 Peter Haymond (Tendermint 合作伙伴) 合作撰写的

今年早些时候,开放金融已经从一个小众市场爆炸式增长为一个价值超过10亿美元的行业,出现了新的用例和垂直领域,如稳定币、加密货币抵押贷款、无信任保证金交易和去中心化交易所。然而,如果没有跨链流动性和安全的预言机解决方案,DeFi 的全球流动性将仅限于以太坊。DeFi 协议的安全性取决于其预言机设计,我们最近已经看到 bZx, Synthetix, 和 MakerDAO 在多种情况下利用了这一设计。

bZx:

https://www.theblockcrypto.com/post/56207/bzx-attacked-again-645k-in-eth-estimated-to-be-lost

Synthetix:

https://blog.synthetix.io/update-on-xag-pricing-incident/

MakerDAO:

https://blog.makerdao.com/the-market-collapse-of-march-12-2020-how-it-impacted-makerdao/

智能合约在没有预言机的情况下本质上无法访问自身区块链网络之外的数据,预言机是一项中间服务,允许智能合约连接到外部数据和 API,以指示和控制应用程序的行为。因此,解决跨链和预言机问题将使这个新兴行业实现指数级增长。

以连接分布式应用为使命,Cosmos 开发了区块链跨链通讯协议(IBC),提出了区块链之间的数据和通证交换标准。通过 IBC,开发者和企业可以解锁原生链之间的高值数据交换,并为私有链或联盟链中的分布式应用带来互操作性。

IBC 的介绍

Cosmos 跨链通讯协议(IBC)是任何基于 Cosmos-SDK 的区块链之间进行通讯的可靠、安全的协议。从根本上讲,IBC 负责将“数据包”从一个区块链中继到另一个区块链,同时简化维护连接、数据完整性和来自应用程序开发人员的实时通信的复杂性。最近,Cosmos 发布了 IBC 规范、中继层的实现和构建跨链应用程序的示例代码。

IBC:

https://github.com/cosmos/ics/tree/master/ibc

IBC 规范:

https://github.com/cosmos/ics

中继层的实现:

https://github.com/iqlusioninc/relayer

构建跨链应用程序的示例代码:

https://github.com/cosmos/gaia/tree/ibc-alpha

虽然 IBC 规范充满了技术概念和术语,但您不需要了解 IBC 是如何在协议层实现的 - Cosmos IBC 应用已经简化了大部分复杂的内容。事实上,应用程序开发人员只需了解两个关键组件即可使用 IBC:

1. 数据包

具有与序列相关的元数据(由 IBC 规范定义)和作为数据包数据的不透明价值字段(具有由应用层定义的语义,例如通证和面额)。

2. 中继层进程

中继层进程是一个离链进程,负责通过扫描两台或多台机器的状态和提交事务,在两台或多台机器之间中继 IBC 数据包数据和元数据。

在 Cosmos 生态上构建 DeFi

本指南旨在为开发人员逐步介绍 BandChain & IBC 的最新开发和发布,使他们能够使用 Band Protocol 提供的安全价格构建跨链兼容的 DeFi 应用程序。

Band Protocol 是一个构建在 Cosmos-SDK 之上的跨链数据预言机平台,它将现实世界的数据和 API 聚合并连接到智能合同。区块链智能合约非常适合不可变的存储和确定、可验证的计算 - 然而,它们仍然无法访问区块链网络以外的数据和 API。Band Protocol 使智能合同应用程序能够完全灵活地构建在链上,开发人员可以指定他们的数据类型、数据源和聚合方法,而不依赖于单点故障或集中的预言机系统。

Band Protocol:

https://docs.bandprotocol.com/

以下是您可以使用 IBC 和 Band 协议构建 DeFi 应用程序的一些示例:

稳定币

借贷平台

衍生通证 (其他资产的镜像价格)

融资融券

去中心化交易所

预测市场

应用程序示例:合成黄金

为了探索 IBC 的实际如何运用的,我们构建一个简化的合成黄金应用程序(我们将其命名为Goldchain),该应用程序满足以下要求:

规范:


该应用程序支持创建 GOLD 通证,每个通证代表 1 盎司黄金。

它允许用户将 ATOM 从 Gaia 转移到 Goldchain 上,并将其作为抵押品铸造新的 GOLD 通证。

铸造 GOLD 时,质押 ATOM 的价值必须大于铸造 GOLD 的 125%。

为简单起见,我们在本指南中不会使用 CDP 清算机制,而是主要侧重于演示 IBC 功能。

应用程序架构

GoldChain 的生态系统由 4个不同的组件组成:

Goldchain - 我们正在构建一个基于 Cosmos SDK 的区块链。

Gaia (Cosmos Hub) - 托管 ATOM 通证的区块链。它为在 Goldchain 上铸造的 GOLD 通证提供了潜在价值。

BandChain - 分布式数据预言机的区块链。它使 Goldchain 能够消耗 XAU (黄金交易代码)和来自外部的 ATOM 价格。

中继层 - 在多个区块链之间中继数据包的第三方软件。它们允许多个区块链以安全和无需信任机制的方式进行互操作。

正如您将在以下各节中看到的那样,每个部分在创建安全的合成黄金的应用程序方面,都扮演着重要的角色。

UX 流程

这里介绍了用户应如何在 Goldchain 中创建 CDP。

用户通过 IBC 将 ATOM 转移到 Goldchain。

用户在 Goldchain上创建买入交易,将 ATOM 作为抵押品。

Goldchain 向 BandChain 寻求 ATOM 和黄金的现货价格,并为用户铸造 GOLD 通证。

构建 GoldChain:分步示范

您可以在 GoldChain repository 中找到完整的代码。

https://github.com/bandprotocol/goldcdp

本教程旨在提供一个循序渐进的指南,告诉您如何从 boilerplate repository 样板存储库开始编写代码,直到获得完整的 Goldchain。

https://github.com/bandprotocol/band-consumer

步骤1:启动并运行新的 Goldchain

你可以从复制 Cosmos Gaia,ibc-alpha 分支开始,以此为起点开发自己的带 IBC 支持的区块链。然而,在本教程中,我们将使用 Gaia 中 Band Protocol 的分支,它已经集成了 Band Protocol 的 oracle 模块作为我们的样板。

ibc-alpha:

https://github.com/cosmos/gaia/tree/ibc-alpha

让我们从将存储库复制到我们的机器开始。

$ git clone https://github.com/bandprotocol/band-consumer

?提示:您还可以按照本教程来学习:

https://github.com/bandprotocol/goldcdpand。立即运行完整的教程,而且不必自己编写任何 Go 代码。

确保您已安装 Go 1.14+,并按照安装指南进行操作:

https://github.com/bandprotocol/band-ibc-hackathon-starter/blob/ibc-alpha/docs/gaia-tutorials/installation.md

现在,在我们可以启动和运行区块链之前,我们需要先设置几个参数。

让我们进入新复制的存储库并启动它。

要设置新的验证人节点,我们首先初始化一个新的 Genesis。

请注意,在本教程中,我们将互换使用名称 band-Consumer 和 Goldchain,因为这两个名称都指的是我们在本地运行的链。

$ bcd init validator --chain-id band-consumer

在本教程中,我们需要3个帐户:


验证人:验证区块的主帐户。

用户:我们将向用户请求铸 GOLD 通证的帐户。

水龙头:我们将用来充值中继层余额的账户。

$ bccli keys add validator --keyring-backend test
$ bccli keys add user --keyring-backend test
$ bccli keys add faucet --keyring-backend test

现在我们已经建立了帐户,我们将在创始时将余额添加到这些帐户中。

$ bcd add-genesis-account \
validator 10000000000000stake --keyring-backend test
$ bcd add-genesis-account \
user 10000000000000stake --keyring-backend test
$ bcd add-genesis-account \
faucet 1000000000000000stake --keyring-backend test

然后,我们需要进行快速设置,以使我们的 CLI 客户端更易于使用。

$ bccli config chain-id band-consumer
$ bccli config output json
$ bccli config indent true
$ bccli config trust-node true
$ bccli config keyring-backend test

最后,创建一个 Genesis 交易并创建 Genesis 文件。

$ bcd gentx --name validator --keyring-backend test
$ bcd collect-gentxs

真相揭晓的时刻就要到了。让我们第一次运行本地节点!

$ bcd start --rpc.laddr=tcp://0.0.0.0:26657 --pruning=nothing

当你看到正在制作的区块时,恭喜你!您已经启动并运行了区块链 - 准备继续进入下一阶段。

让它保持运行:这样就可以继续创建区块。

步骤2:设置中继层并在 Gaia 和 Goldchain 之间建立连接

我们将在 gaia-ibc-hackathon.node.bandchain.org

上运行的 Gaia 测试网将 ATOM 传输到我们刚刚建立的 Goldchain。这将是我们第一次从 Cosmos Gaia 到 GoldChain 的跨链转移。

我们将从设置中继层开始。我们需要安装中继层代码。请注意,务必确保 Gobin 和 GOPATH 设置正确,否则安装将失败。

$ git clone https://github.com/bandprotocol/relayer
$ cd relayer
$ make install

?一旦完成:您就可以在 GOBIN 中使用 Cosmos IBC 中继层的 rly 命令了。

下一步,我们需要添加一些配置文件,以便中继层知道如何与 Gaia 测试网和 Goldchain 通信。获取配置文件的最简单方法是从 GoldChain repository 下载它们。

https://github.com/bandprotocol/goldcdp/tree/ibc-alpha/relayer

一旦您创建或下载了goldchain.json 和 gaia.json,我们就可以开始初始化中继层,并从前面提到的配置文件中添加两个链。

$ rly config init

$ rly chains add -f goldchain.json #chain-id: band-consumer
$ rly chains add -f gaia.json #chain-id: band-cosmoshub

接下来,我们需要为中继层创建新帐户,我们将为每个链创建一个帐户。这些账户将用于将数据包(发送交易)中继到其对应的区块链。

$ rly keys add band-consumer relayer-goldchain
$ rly keys add band-cosmoshub relayer-gaia

现在我们需要将帐户分配给中继层。

$ rly ch edit band-consumer key relayer-goldchain
$ rly ch edit band-cosmoshub key relayer-gaia

??重要提示:我们要确保我们的中继账户有足够的余额支持 Goldchain 和 Gaia 上的交易。否则,中继层将不能发送中继数据包。

在 GoldChain 上,我们已经在我们的水龙头账户上的 genesis 铸造了质押代币。我们要继续把它发送给我们的中继层 - Goldchain。

$ bccli tx send faucet $(rly keys show band-consumer) \
10000000000000stake

在 Gaia 测试网上,我们将使用中继层测试网水龙头功能。

$ rly testnets request band-cosmoshub relayer-gaia

如果我们检查两条链上的余额,我们应该会看到一些余额。

$ rly q bal band-consumer
$ rly q bal band-cosmoshub

现在我们准备好初始化轻客户端了。

$ rly lite init band-consumer -f
$ rly lite init band-cosmoshub -f

接下来,我们从 Goldchain 的传输和 Gaia 的传输生成新路径的标识符,并将其命名为 Transfer Path。

$ rly pth gen \
band-consumer transfer \
band-cosmoshub transfer \
transfer

然后,我们可以在为传输路径配置的两条链之间创建客户端、连接和通道。

$ rly tx link transfer

这将需要几秒钟的时间,因为中继层在 Goldchain 和 Gaia 上都注册了。一旦完成,最后一行应该显示这样一条线。

?? Important:查看 channel id:

<goldchain_transfer_channel>=pwlpjyneba

<gaia_transfer_channel>=zijixuhhrf

记住这些我们可以开始下一步。

最后,我们可以在传输路径上启动中继层。

$ rly st transfer

保持其运行:否则,现在将跨链发送 IBC 数据包。

步骤 3:将 ATOM 从 Gaia 转移到 Goldchain

让我们通过从 Gaia 向 Goldchain 发送一些通证来测试我们的中继层是否工作。我们将首先创建一个名为 user-gaia 的新帐户,并从水龙头里领取通证为其充值。

$ bccli keys add user-gaia

# Faucet request to our new address
$ curl --location --request \
POST 'http://gaia-ibc-hackathon.node.bandchain.org:8000' \
--header 'Content-Type: application/javascript' \
--data-raw '{
"address": "'"$(bccli keys show -a user-gaia)"'",
"chain-id": "band-cosmoshub"
}'
# Check balance: you should see 10000000000uatom
$ bccli query bank balances $(bccli keys show -a user-gaia) \
--node http://gaia-ibc-hackathon.node.bandchain.org:26657 \
--chain-id=band-cosmoshub

现在让我们创建第一个从 Gaia 到 Goldchain 的 ATOM 转移。我们将使用先前建立的<gaia_transfer_channel>将 5000000000uatom (5000 ATOM)发送给帐户用户。

$ bccli tx transfer transfer \
transfer <gaia_transfer_channel> \
10000000 $(bccli keys show -a user) \
5000000000transfer/<goldchain_transfer_channel>/uatom \
--from user-gaia \
--node http://gaia-ibc-hackathon.node.bandchain.org:26657 \
--chain-id band-cosmoshub

检查余额,您会发现我们现在的 Goldchain 上有 ATOM 通证。

$ bccli query bank balances $(bccli keys show -a user)

# You should see something like this
# [
# {
# "denom": "stake",
# "amount": "10000000000000"
# },
# {
# "denom": "transfer/<goldchain_transfer_channel>/uatom",
# "amount": "5000000000"
# }
# ]

步骤 4:添加 CDP 并架构 Band Protocol oracle

接下来,我们将添加对抵押债务(CDP)的支持,类似于 MarkerDAO 允许用户抵押 Ether和铸造新的 DAI 通证。维持 GOLD 币价值的主要条件是每个铸造的 GOLD 币的 ATOM 锁定值。Band Protocol 使 Goldchain 能够访问 XAU 和 ATOM 对美元的价格。

要做到这一点,我们需要的是:

通过 IBC 建立连接 Goldchain 和 Band Protocol的中继层。

创建用于存储默认 Gaia 和 BandChain 通道的处理程序。这有助于应用程序的用户体验。

创建用于购买 GOLD 的处理程序,该处理程序通过 IBC 向 BandChain 发送有关 ATOM 和 XAU 价格的请求,并将购买交易存储 - 有效地停止交易并等待价格从 BandChain 返回。

创建另一个处理程序,用于接收从 BandChain 返回的结果,根据价格计算要铸造的 GOLD,并为用户铸造 GOLD。

因为把所有的代码都放在这个帖子里太长了。以下的 Github 链接是我们对于如何使用上面的概来修补当前代码的介绍。

您可以通过在 GitHub 上创建帐户,为 band protocol/goldcdp 开发做出贡献:

https://github.com/bandprotocol/goldcdp/compare/6946e9ea3449322b4d5e40d52523323ace7cb622...21a68ce7e3a86151f49533b04f5b0cad98f60b04

假设您已经添加了使用 Band 协议实现 CDP 的代码(或者您从完整的 Goldchain 代码开始),让我们继续,在 Goldchain 和 BandChain 之间启动并运行中继层,这样我们最终可以铸造我们的第一个合成 GOLD 通证。

这一次,我们将快速初始化中继层,因为大多数步骤将与我们刚刚设置的 Goldchain<>Gaia 之间的中继层相同。

首先,也是最重要的,让我们为 BandChain 中继层创建一个配置文件 bandchain.json。

然后启动并运行 GoldChain<>BandChain 的中继层。

$ rly chains add -f bandchain.json

$ rly keys add ibc-bandchain relayer-bandchain
$ rly ch edit ibc-bandchain key relayer-bandchain
# Get BAND from faucet
$ curl --location --request POST 'http://54.169.14.201/faucet/request' \
--header 'Content-Type: application/json' \
--data-raw '{
"address": "'"$(rly keys show ibc-bandchain)"'",
"amount": 10000000
}'
$ rly lite init ibc-bandchain -f
$ rly pth gen band-consumer goldcdp ibc-bandchain oracle oracle
$ rly tx link oracle
$ rly st oracle

??重要提示:记住下一步要使用的渠道

时刻保持中继层在运行中:否则,预言机将不起作用

中继层启动后,现在我们将使用 BandChain 预言机设置使用 GOLD 和 ATOM 创建 CDP 的默认通道。

$ bccli tx goldcdp \
set-channel bandchain goldcdp <goldchain_oracle_channel> \
--from validator

$ bccli tx goldcdp \
set-channel band-cosmoshub transfer <goldchain_transfer_channel> \
--from validator

步骤5:使用转移的 ATOM 作为抵押品铸造 GOLD 通证

现在,我们已经设置了使 CDP 创建正常工作所需的原材料。鉴于 XAU 的价格约为 1700 美元,撰写本文时的汇率约为 800 ATOM/XAU。由于我们要求 125% 的抵押品比率,每 1000 个ATOM 抵押品将产生 1 个 GOLD。

让我们试着用 2000000000 uatom (2,000 个 ATOM)抵押品来买 GOLD。

$ bccli tx \
goldcdp buy 2000000000transfer/<goldchain_transfer_channel>/uatom \
--from user

我们现在可以检查用户帐户现在是否将拥有大约 2 个 GOLD 通证。

$ bccli query bank balances $(bccli keys show -a user)

GOLD 通证可以转移到 Cosmos 生态系统中支持 IBC 通证转移的任何 DEX,并以保证的价值进一步交易。

下一步是什么呢?

我们已经介绍了足够的功能来演示 IBC 的强大功能。为了让 GoldChain 能够投入生产,还有许多其他任务需要完成:

再加上卖黄金以及返还抵押的 ATOM

增加清算机制

加强安全措施

祝贺您!

在这个简单的教程中,我们探索了如何通过 IBC 发送和接收通证,以及如何使用 Band Protocol 的安全分布式预言机从现实市场查询加密通证和商品的实时价格。这个例子可以很容易地扩展到任何其他资产类别,如股票、债券和大宗商品,以实现此类货币工具的全球信赖交易。

有了这些关于如何运用 IBC 架构和 Band Protocol 的安全数据点的新知识,您现在就可以开始构建您的第一个 IBC 应用程序了!

要做到这一点,最好的方法是与 Agric、Cosmos 和 Band Protocol 团队一起参加即将举行的跨链黑客松,他们将为有机会赢得超过24K美元奖金的开发者提供研讨会、实况流和技术支持!

疫情期间在家的话,就请加入我们的Gitcoin 黑客松,来赢得奖品吧:

blog.cosmos.network

如果您对Cosmos IBC 或频带协议集成有任何问题,请随时告诉我们,我们很乐意为您提供帮助。加入我们 Discord 频道的讨论吧。

https://discordapp.com/invite/cr7N47p

黑客松将于 4月20日至 5月11日举行,我们期待着您将构建的所有应用程序。

在此我们要感谢 Soravis Srinawakoon 和 Peter Haymond。

您可以通过以下方式找到 Cosmos :

官网:https://cosmos.network

论坛:https://forum.cosmos.network

微信公众号:cosmosnetwork

加微信群:irisnetwork2018 (或扫描下方图片二维码)

英文电报群:https://t.me/cosmosproject

推特(中文):https://twitter.com/cosmoschina

推特(英文):https://twitter.com/cosmos

Medium:https://blog.cosmos.network

微博:@Cosmos Tendermint

币乎:Cosmos


—-

编译者/作者:COSMOS

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...