无需编写智能合约,轻松构建自己的DeFi协议

本文详细介绍如何利用Authereum的批量交易API,通过组合Maker和Compound等现有DeFi协议,构建一个收益更高的ETH借贷协议,无需编写任何智能合约代码即可实现。

如何在不编写智能合约的情况下构建自己的DeFi协议

去中心化金融(DeFi)已成为当今以太坊无可争议的主导用例。今年早些时候,锁定在DeFi协议中的资金超过10亿美元,我们正在见证一个全新金融系统从零开始构建的起点。新的DeFi协议似乎每周都在涌现。这些通常被称为"货币乐高"的协议可以被组合和构建,创造出全新的金融产品。

在Authereum,我们让使用这些协议进行构建变得比以往任何时候都更容易。在本文中,我们将探讨如何利用Authereum的批量交易API来创建自己的协议,而无需编写任何智能合约代码。

批量交易

常规的以太坊账户(也称为外部拥有账户,EOA)有一个不幸的限制。来自EOA的每个交易只能直接与单个地址或合约交互。这经常出现在dapp交互中,显示诸如"在Y之前必须先解锁X"之类的消息。

基于合约的账户(如Authereum)不受此限制,可以将多个合约的交易批量处理,从而提供更流畅的用户体验。在用户看来,“批准"步骤可以完全抽象掉,他们只需执行想要的操作即可。像Erasure Bay和1inch.exchange这样的dapp已经在使用批量交易来改善用户体验。

但是,如果我们更进一步呢?我们可以抽象掉整个协议,创造出全新的东西。

我们的构建模块

DeFi协议可以与其他协议一起构建

我们可以使用的DeFi协议数量每天都在增长,但它们主要分为几个主要类别:

  • 交易所 — Uniswap、dYdX、Kyber Network、0x
  • 借贷 — Compound、dYdX、Aave
  • 合成资产 — Maker、Synthetix、FutureSwap
  • 保险 — Nexus Mutual、Opyn

在这个例子中,我们将使用Maker和Compound构建一个ETH借贷协议,该协议可以获得比Compound本身更好的回报(基于当前的贷款利率)。

我们的借贷应用

底层协议可以被抽象掉,提供简单的界面

我们的示例DeFi协议让用户借出ETH以赚取利息。我们可以直接在Compound上借出ETH,但利率低得可怜,几乎不值得付出努力(目前<0.01%)。这个应用将利用Maker的低稳定费(目前为0%)和Compound更高的DAI借贷利率(目前为4.31%)。如果你想查看完整实现,可以在这里找到。

借贷

为了让用户获得ETH的回报,我们将:

  1. 开设金库并存入ETH
  2. 从金库提取DAI
  3. 在Compound上借出该DAI

这将允许用户保持对ETH的完全敞口,同时还能获得约2.15%的利息。这是Compound上DAI借贷利率的一半,因为只有ETH抵押品价值的一半可以从金库中提取,以维持健康的抵押比率。

为此,我们将批量处理3个交易:

1. 开设金库、存入ETH并提取DAI

Maker使这些步骤可以通过一个交易轻松完成。我们想要在智能合约上交互的函数是:

1
2
3
4
5
6
7
8
function openLockETHAndDraw(
  address manager,  // Maker系统中的合约
  address jug,      // Maker系统中的合约
  address ethJoin,  // Maker系统中的合约
  address daiJoin,  // Maker系统中的合约
  bytes32 ilk,      // 🤔不知道,问问Maker的人
  uint256 wadD      // 要提取的DAI数量
)

我们的第一个交易将如下所示:

1
2
3
4
5
6
const openVaultTransaction = {
  to: makerProxy,            // 被调用的合约
  data: openVaultData,       // 上述函数的调用数据
  value: ethLendAmount,      // 借出的ETH数量
  gasLimit: GAS_LIMIT        // 包含的gas量
}

2. 批准DAI到cDAI合约

Compound的DAI借贷合约也是一个称为cDAI的ERC20代币!你可以存入DAI并接收将赚取利息的cDAI。首先,我们必须批准向cDAI合约转移DAI。(使用批量交易时无需批准无限金额。)为此,我们在DAI合约上调用approve,将cDAI合约的地址作为我们的_spender,将从金库提取的DAI数量作为_value。

1
2
3
4
function approve(
  address _spender,  // cDAI合约地址
  uint256 _value     // 从金库提取的DAI
)

我们的第二个交易将如下所示:

1
2
3
4
5
6
const approveDaiTransaction = {
  to: daiAddress,         // DAI合约地址
  data: approveDaiData,   // `approve`的调用数据
  value: '0',             // 不需要ETH
  gasLimit: GAS_LIMIT     // 包含的gas量
}

3. 在Compound上借出DAI

现在我们调用cDAI合约上的mint,它将获取我们已批准的DAI并铸造cDAI。这是cDAI合约的mint函数:

1
2
3
function mint(
  uint256 mintAmount // 从金库提取的DAI数量
)

我们的第三个交易将如下所示:

1
2
3
4
5
6
const mintCDaiTransaction = {
  to: cDaiAddress,      // cDAI合约地址
  data: mintCDaiData,   // `mint`的调用数据
  value: '0',           // 不需要ETH
  gasLimit: GAS_LIMIT   // 包含的gas量
}

🔮✨魔法发生的地方✨🧙‍♂️

我们现在可以批量处理我们的交易,并将它们发送到以太坊网络,作为单个链上交易执行。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import Authereum from 'authereum'

const authereum = new Authereum('mainnet')
const provider = authereum.getProvider()

// 发送我们的批量交易!
await provider.sendTransactionBatch([
  openVaultTransaction,
  approveDaiTransaction,
  mintCDaiTransaction
])

就这样!我们现在可以获得比大多数主要借贷协议(包括Compound本身、dYdX和Aave)更大的ETH回报。你可以在这里找到完整工作演示的代码,并自己运行它。

结论

基于合约的账户使得混合匹配DeFi协议以创造全新事物变得容易。协议的数量在不断增长,组合它们的可能性正在爆炸式增长。你会想出什么创意?

你可以在我们的文档中找到有关Authereum和批量交易API的更多信息。有问题或想聊聊你的想法吗?加入我们的Telegram并给我们发消息。最后,在Twitter上关注Authereum以获取我们所有的最新新闻和更新。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计