http://www.7klian.com

操作Gelato搭建自动Uniswap生意业务

自动任务需要和举办链上的 Uniswap 生意业务,我们利用Infura[2]和节点通信,别的还需要用到用户私钥(用来付出),凡是这类的私密信息放在不被代码打点的 .env 文件中(.env加到.gitignore):
      // 包括的行动,所有行动在一个生意业务完成(要么都失败)
      }),
参考资料
有两种Gelato Providers:
 myUserWallet DAI Balance:   99.0 DAI
设置 Infura Key 及私钥
对应的剧本为:`demo/Part-1_Gelato_User/step4-withdraw-remaining-eth.js`[15],有乐趣可以查察。
yarn monitor-balances
Gelato 利用详解
yarn install  # or npm install
在用户钱包中包括 ETH 之后,运行以下呼吁可以获取 100 个 Rinkeby DAI:
[15]demo/Part-1_Gelato_User/step4-withdraw-remaining-eth.js: https://github.com/gelatodigital/gelato-uniswap/blob/master/demo/Part-1_Gelato_User/step4-withdraw-remaining-eth.js
Condition条件会由 GelatoCore 智能合约查抄,并在满意条件的区块上执行任务。
[11]demo/Part-1_Gelato_User/step3-submit-task-uniswap.js: https://github.com/gelatodigital/gelato-uniswap/blob/master/demo/Part-1_Gelato_User/step3-submit-task-uniswap.js
[5]教程: https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key
克隆项目代码
实现按时任务常用的做法是编写一个执行合约生意业务剧本,然后利用外部按时任务去运行剧本,利用 Gelato 一个显而易见的优势是可以制止单点失败以及节省开拓时间。
任务包括的 4 个行动:转账、授权、Uniswap 生意业务、更新时间,我们看一下焦点的 Uniswap 生意业务行动:
全部生意业务大提要 7 分钟完成。
到这里,这部门教程就完成了,你应该相识了如何利用 Gelato 来执行按时生意业务。
该呼吁会执行`demo/Part-1_Gelato_User/step1-create-user-proxy.js`[9]陈设任务剧本,在陈设剧本中, 是通过 Gelato 已经陈设好的 GelatoUserProxyFactory来陈设GelatoUserProxy合约。
Gelato Task(任务)只是Conditions(条件 – 什么时候执行生意业务) 和Actions(行动 – 生意业务应执行什么)的组合。
确保用户帐户中有足够的 ETH(1 ETH 以上)。
在 Demo 中,为简朴起见,利用 Gelato 官方案例提供的`GelatoUserProxy`[8]作为署理合约钱包。从理论上讲,可以利用任何智能合约署理,譬喻GnosisSafe或Maker的DSProxy。
[10]demo/Part-1_Gelato_User/step2-user-proxy-setup.js: https://github.com/gelatodigital/gelato-uniswap/blob/master/demo/Part-1_Gelato_User/step2-user-proxy-setup.js
行动是其他智能合约要运行的某些逻辑,将由用户 GelatoUserProxy 查抄或执行。你可以编写本身的Condition或Action合约,并将其与 gelato 一起利用,也可以像本教程中一样,利用现有的合约。
1. 需要在 Gelato 上存入一些 ETH,以付出执行者用度;
在这里,界说Task(任务)为:
 myUserWallet ETH Balance: 0.97978682 ETH
[7]Buidler 任务: https://learnblockchain.cn/article/1356
从这里[3] 你可以免费得到DEMO_INFURA_ID ,假如碰着问题,可查察教程[4]。
有些版本的node大概会提示一些gyp-error错误,不要紧。
git clone https://github.com/gelatodigital/gelato-uniswap.git
      data: await bre.run(“abi-encode-withselector”, {
该呼吁会执行`demo/Part-1_Gelato_User/step2-user-proxy-setup.js`[10] 剧本,剧本里通过 GelatoUserProxy 合约向 GelatoCore 提倡一个初始化Action(行动 – 下面先容)完成设置,可以查察源码,探究细节。
      ],
        functionname: “swapExactTokensForTokens”,
项目是基于 node.js 开拓,因此需要我们先安装:
yarn userproxy-setup
接下来
        actionSwapTokensUniswap,
在 Demo 中与 Gelato 的生意业务是通过 Buidler 任务[7]来执行的。Buidler 任务会利用到.env 提供的DEMO_USER_PK作为钱包,再次确保账号下有 Rinkeby ETH 和 DAI。
        inputs: [DAI_AMOUNT_PER_TRADE, 0, tokenPath, myUserAddress, 4102448461],
这样在界说任务生意业务执行时,可以在节制台看到打印出生意业务日志,雷同下面:
 ___ Current Token BALANCES! ____
      addr: UNISWAP_V2_Router_02,
“我们”需要为这些执行者(Executors)付费,以便运行自动化基本架构,并代表你的用户提交未来的生意业务。
DEMO_USER_PK=”填入地点私钥,0x 先开头”
2. 外部提供者(External Providers),可以代 Dapp 用户向执行者付款。譬喻,这些是 dapp 开拓人员或 DAO,他们但愿为用户提供精彩的 UX,而取代用户在 Gelato 上存款。前面.env 中的 DEMO_PROVIDER_PK 就是用来作为外部提供者。
为了使新建设的用户署理与 Gelato 交互,还需要做一些设置:
· Condition(条件):每 2 分钟(或每次在以太坊上到达某个时间戳记时)
· Task(任务):每 2 分钟,在 Uniswap 上用 1 DAI 兑换 WETH
在本 Demo,只有一个用于跟踪时间的条件和一个在 Uniswap 长举办生意业务的行动。可是,也可以按照需要将多个条件与多个行动组合为一个任务。
要将用户的剩余 ETH 余额撤回其钱包,运行以下剧本:
我们都知道,上的智能合约无法按时执行任务,可是常常有这样的需求场景,譬喻 DEFI 合约需要按时给合约喂价。
    });
yarn create-userproxy
情况筹备
touch .env
4. (可选) 将剩余的 ETH 取回“用户钱包”
我们可以在 Metmask 或 Etherscan 上查察你的USER帐户余额中的DAI和WETH来确认生意业务是否执行,记得是在 Rinkeby 网络上哦。
new Task({
假如你有乐趣的话,还可以看看对应条件合约及执行行动合约:Condition 合约:`contracts/gelato_conditions/ConditionTimeStateful.sol`[12] > Action 合约:行动由Uniswap V2 Router2[13] 合约执行
yarn withdraw-remaining-eth
3. 汇报 Gelato 需要与哪种智能合约(在本例中为 Proxy)交互。Gelato 可以与任何智能合约一起利用,它与署理尺度无关,可以与任何智能合约署理尺度(譬喻 Gnosis Safe,dsProxy,GelatoUser Proxy 等)一起利用。
[2]Infura: https://learnblockchain.cn/article/1590

项目建设
[9]demo/Part-1_Gelato_User/step1-create-user-proxy.js: https://github.com/gelatodigital/gelato-uniswap/blob/master/demo/Part-1_Gelato_User/step1-create-user-proxy.js
        actionApproveUniswapRouter,
· 将任务提交GelatoCore.sol,它界说了以后刻开始每 2 分钟在 uniswap 长举办生意业务。
2. 在 gelato 上预存 ETH,选择 gelato 执行者,并汇报 gelato 用户拥有哪种署理

Gelato[1]用来辅佐开拓人员自动执行智能合约的东西。

2 分钟常识利便开拓验证的时间,假如你看开拓一个以太坊定投,可以按修改为一周或二周。

在 Gelato 上,付费的主体(上一句话的我们)称为Gelato Providers(提供者),需要预先存入 ETH,以在满意预定条件时通过提交生意业务来付出执行者以执行任务。
在本教程中,假如作为自助提供者,自行付出执行者用度。在之后的文章,将先容切换成为外部提供者脚色。
[13]Uniswap V2 Router2: https://etherscan.io/address/0x7a250d5630b4cf539739df2c5dacb4c659f2488d
运行以下呼吁陈设 GelatoUserProxy 合约:
我们的 Demo 会每2分钟在Uniswap上自动用DAI购置WETH,总共举办3笔生意业务。
Gelato 提供了教程的源码,把代码克隆到当地,并安装好相应的依赖库:
    const actionSwapTokensUniswap = new Action({
· node.js
在我们的 Demo 为了可以更清楚地相识每一步产生了什么,才拆分为一个个步调,在实际开拓中,许多步调可以归并在一起。
    });
        actionTransferFrom,
[16]Cell Network: https://www.cellnetwork.io/?utm_souce=learnblockchain
      operation: Operation.Call, // This Action must be executed via the UserProxy
我们也可以利用 demo 提供的demo/Part-1_Gelato_User/monitorBalanceChanges.js[14] 来监听余额的变革:
      selfProviderGasLimit: estimatedGasPerExecution, // gas Limit
yarn submit-task-uniswap-self-provider-and-monitor
[14]demo/Part-1_Gelato_User/monitorBalanceChanges.js: https://github.com/gelatodigital/gelato-uniswap/blob/master/demo/Part-1_Gelato_User/monitorBalanceChanges.js
        contractname: “IUniswapV2Router02”,
3. 通过署理合约钱包将任务提交给 Gelato
执行这个剧本会发送 2 个生意业务:
· Action(行动):在 Uniswap 上用 1 DAI 兑换 WETH(挪用 uniswap 智能合约上的生意业务函数)
[17]Tiny熊: https://learnblockchain.cn/people/15

1. 自我提供者(Self-Providers)是最终用户或 Dapps 本身,他们直接向执行者付出用度,因此必需先将 ETH 存入 Gelato 再利用。他们本身为未来的生意业务付费,前面.env 中的 DEMO_USER_PK 就是用来作为自我提供者,
获取 DEMO_USER_PK 和 DEMO_PROVIDER_PK 私钥的一种要领是安装 Metamask 并凭据此教程[5]导出所选地点的私钥,留意填入的的私钥需要以0x前缀。
在 Demo 中,想要让 Gelato 代表我们执行 3 笔生意业务(称为 Task),每笔生意业务每 2 分钟用 1 个 DAI 去兑换 ETH。
        actionUpdateConditionTime,
[6]水龙头: https://faucet.rinkeby.io/
为了可以或许利用 Gelato 在 Uniswap 上执行生意业务,我们需要一个署理合约钱包,来署理用户与 Gelato 协议举办交互。可以将 Gelato 视作为一个模块,可以集成到任何智能合约里(包罗智能合约钱包: 譬喻 Gnosis Safe,dsProxy 等),从而使这些合约可以在未来某个时候(满意指定条件,譬喻以后刻开始的一天)执行生意业务。
DEMO_PROVIDER_PK=”填入提供者私钥(用来取代用户付费,本文临时不需要)”
为了完成上面的 3 件事,运行以下剧本:
执行以下呼吁提交任务:
完整的任务和行动界说,可以查察代码:`demo/Part-1_Gelato_User/step3-submit-task-uniswap.js`[11]
 myUserWallet DAI Allowance:   2.0 DAI
本教程以每 2 分钟自动在 Uniswap 大将 DAI 互换为 ETH 为示例, 进修悉如何利用 Gelato 构建自动执行的生意业务。

[12]contracts/gelato_conditions/ConditionTimeStateful.sol: https://github.com/gelatodigital/gelato-uniswap/blob/master/contracts/gelato_conditions/ConditionTimeStateful.sol
[3]从这里: https://infura.io/
      actions: [
在项目根目次下添加一个.env 文件:
yarn get-dai
在利用 Gelato 之前,先简朴先容一下 Gelato 的运作道理。Gelato 由一其中继处事器网络构成,这些网络的执行者(Executors)被鼓励为 Dapp 用户执行某些任务(Task)。

[4]教程: https://blog.infura.io/getting-started-with-infura-28e41844cc89/
1. 建设署理合约钱包
[8]GelatoUserProxy: https://github.com/gelatodigital/gelato-uniswap/blob/master/contracts/user_proxies/GelatoUserProxy.sol
· approve(授权)署理合约GelatoUserProxy可以转移 3 DAI,因为之后署理合约要利用 Dai 在 uniswap 上生意业务。
[1]Gelato: https://gelato.network/
· yarn(或npm)
DEMO_INFURA_ID=”输入你的在 Infura 申请的 Project ID”
Gelato 是如何运作的
在一些场景下,上述用户体验大概不足友好,因为它要求用户提前将 ETH 存入 Gelato 上,然后 Gelato 才气执行其任务。前面描写了另一种 Gelato 提供者:外部提供者,可以代表用户为生意业务付费,因此用户不必存款,从而缔造出了更好的用户体验,我们在之后的文章再先容。
此刻到有趣的部门,在实践中体验 Gelato,体验利用 gelato 作为自动执行生意业务。
2. 选择默认的 Gelato 执行者网络;
cd gelato-uniswap
      selfProviderGasPriceCeil: 0, //  gas 价值上限,0暗示不在意价值
另外,还需要为帐户存入一下 ETH 以便提倡生意业务,用户钱包还需要存入一些 DAI 。因为 Demo 是基于Rinkeby举办开拓的, ETH 可以从水龙头[6] 获取到,为了防备生意业务失败,最好将至少 2 ETH 存入与 DEMO_USER_PK 关联的帐户:
将以下变量添加到.env 文件中。
看看我们 Demo 的任务:
      conditions: [conditionEvery2minutes],  // 条件

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读