当前位置:首页区块链如何建立一个无服务器智能合约自动化项目

如何建立一个无服务器智能合约自动化项目

如何建立一个无服务器智能合约自动化项目

“智能合约”的名称并不完全相同。尽管名称中有“smart”一词,但以太坊上的智能合约并不是完全自动化的。智能合约代码的运行需要外力触发。换句话说,我们需要通过一些外部流程来触发智能合约。

在本文中,我们将通过构建可行的解决方案来解决这个问题

为什么需要链下智能合约的自动化

智能合约自动化的用例

如何利用无服务器架构部署无服务器功能

最后,我们将介绍serverless ETHers,一个功能齐全的智能合约自动化服务,可以在部署后直接使用。基于此服务,我们可以定制智能合约自动化项目,以满足我们自己的需求。

如何建立一个无服务器智能合约自动化项目1

问题是:它被称为智能合约,但不能自动执行

假设我们想要实现一个智能合约,它可以每小时自动执行一次。怎么做?

现实是:根本做不到。单靠可靠的智能合约是做不到这一点的。虽然被称为“智能合约”,但以太坊的智能合约无法自动执行。我们需要调用智能合约,在外部资源(人或机器)的帮助下执行其代码。

最好的合同可以在不同的任务之间插入一个小的时间区间,例如:

函数runMe()public{require(阻止时间戳;gt;=lastTriggeredAt+1小时);…}

上面的“require()”语句确保两次执行之间至少有一个小时。但是,在代码正常运行之前,仍然需要在开始时手动触发智能合约。

如何建立一个无服务器智能合约自动化项目2

我们来谈谈“自动电子执行”

从技术上讲,有些操作可以使用函数修饰符自动执行。例如,复合治理的薪酬分配。一旦将其所有的资产转移到comp.001或comp.001地址,就会自动将其转移到comp.001地址。

我们可以在函数修饰符中实现上述逻辑,把修饰符放在函数前面,在函数被调用时自动执行逻辑。额外费用由来电者支付。

然而,并不是所有的智能合约系统都能采用这种方法。由于这些改性剂只能在特定条件下运行,因此会导致意外的天然气成本。同时,用户可随意收取额外的GAS FEE,实现合同的“余额”

而且,代码还需要人工调用智能合约才能实现。

如何建立一个无服务器智能合约自动化项目3

智能合约自动化的常见用例

DeFi协议依赖于某种链外智能合约自动化。Makerdao依靠第三方来监控债务头寸的抵押品覆盖率,并在担保头寸不足的情况下进行清算。其他DeFi协议也有类似的要求。

链下智能合约自动化有两种常见的用例

自动触发:在特定情况下执行合同。

状态和事件监视:了解合同何时具有特定状态。

1自动触发器

我们经常需要定期或在特定条件下执行合同,例如:

定期恢复余额池

在Dao/治理过程中进行近距离投票

按比例支付证券代币股息

2状态和事件监视

有时我们需要知道合同是否满足某些条件,例如:

了解智能合约的价值是否发生了变化

获取所有访问限制更改的通知

了解何时发布特定的智能合约事件

如何建立一个无服务器智能合约自动化项目4

解决方案:没有服务器功能?

事实上,serverless特性正好适合上面提到的用例。在没有服务器的情况下,我们不需要在部署代码之前预先配置任何东西,在这之后,我们不需要担心管理,这大大简化了问题的解决方案。

如何建立一个无服务器智能合约自动化项目5

快速入门:无服务器框架,无服务器

serverless框架为我们提供了开发、部署、监视和保护serverless应用程序所需的一切。让我们看看如何以最简单的方式完成开发。

gt;npm安装-g无服务器gt;无服务器-vx.x.x

首先,让我们快速了解一下serverless框架是如何工作的。

零无服务器.yml

可以调用无服务器服务中的所有lambda函数和事件无服务器.yml在的配置文件中。此文件定义服务,包括函数和事件。

服务:无服务器以太网提供程序:名称:aws运行时:nodejs12.x环境:链ID:3默认气体价格:6000000000函数:myFunc:handler:functions/myFunc.处理程序;事件:-日程安排:费率(2小时)

我们可以在function属性下定义serverless函数。在上述示例中:

我们有一个叫做myfunction的函数

handler属性指向包含要在函数中运行的代码的文件和模块

events属性指定要执行的函数的事件触发器

一个服务可以包含多个功能。

1功能

LAMBERVICES DA是一个独立的功能,与AWS的一个功能类似。作为部署在云中的一段代码,它通常用于执行单个作业。

//功能/myFunc.jsexports.handler;=异步函数(事件、上下文){///执行任何操作};

函数只是普通的JS函数,可以将事件对象作为有效负载。

2事件

事件是触发函数运行的事件。它属于每个功能。你可以设置无服务器.yml中的事件属性中。

我们可以使用定时事件触发器定期自动执行函数。例如,我们指定每2小时运行一次myfunc函数:

#serverless.yml函数:myFunc:处理程序:函数/myFunc.处理程序;事件:-日程安排:费率(2小时)

我们还可以使用cron调度表达式来指定调度

#无服务器.ymlevents:-日程安排:cron(0-12**;?*)UTC下午12点

如果使用AWS,则事件是AWS中可以启动AWS lambda函数的任何事件,例如:

AWS-API网关HTTP端点请求(例如,restapi)

AWS S3 bucket上传(例如图片)

Cloudwatch计时器(例如,每5分钟一次)

AWS SNS主题(例如,信息)

等待

现在,这就够了。如果您想了解有关serverless框架的更多信息,请查看以下文件(https://www.serverless.com/framework/docs/?参考=hackernoon.com网站)

在了解了serverless框架的基础知识之后,让我们看看serverless ETHers服务。

如何建立一个无服务器智能合约自动化项目6

什么是无服务器以太网

无服务器以太网是一种全功能的无服务器服务,可在部署后直接使用。

git克隆[email protected]:yosriady/无服务器-以太网.gitcd无服务器以太网虚拟机使用npm安装

我们可以将此项目作为构建自定义智能合约自动化的基础。AWS是预先配置好的,但它也适用于其他云提供商(如GCP、azure等)的修改。

无服务器以太网项目的结构如下:

├—合同/│⑾├—abis/│├;abis.js公司│└-;地址.js├—功能/│└——;执行js└;无服务器.yml

Contracts/包含智能合约的ABI和地址。

Functions/包含实现业务逻辑的JS函数。

无服务器.yml描述服务配置。

接下来,我们将仔细研究每个部分。

如何建立一个无服务器智能合约自动化项目7

合同范本

为了测试,我编写并部署了一个智能合约示例:

//SPDX许可证标识符:GPL-3.0pragma SOLidity^0.6.10;合同DummyStorage{event-Write(地址索引源,uint256值);uint内部函数getcurrentvalue();_currentValue}函数put(uint value)public{emitWrite(消息发送者,value);currentValue=值;

虚拟存储智能合约具有以下功能:

Get是一个只读函数,它反馈合同的当前值。

Put是一个写函数,用于更新契约的当前值。

示例合同已经过验证并在ropsten上运行。你可以用它来测试你自己的功能!

1智能合约ABIS

协定目录包含与函数交互的协定ABI。在示例项目中,它包含虚拟存储契约的ABI。

├—合同/│└├—abis/││└–;DummyStorage.json│;abis.js公司│└-;地址.js

我们可以将ABI看作是智能合约的通用API规范,类似于OpenAPI规范。我们需要用ABI调用contract函数。

ABI可以帮助我们导入合同结构和目录:

//功能/执行jsconst{abis,地址};杜米冷杉;constDummyStorageAddress=;地址.dummy存储

这是我们将在下一个函数部分使用的内容。

2功能

exec函数使用以太网加载契约ABI并调用智能合约

//Initializecontractcontractnew以太.合同(DummyStorageAddress,DummyStorageABI,wallet,)//Call smart-contract-function`put(uint)`constRANDOMINTEGER=;数学地板( 数学随机()100);///返回;从0到99const tx的随机整数=等待;合约.卖出(随机整数)

加载合同ABI和地址后,我们将获得以太.合同抽象的,包括get()和put()

在exec函数的示例中,我们用一个随机整数来调用它合约.卖出()。

三无服务器.yml

在运行exec函数之前,我们需要无服务器.yml中指定了多个环境变量

#无服务器.yml服务::无服务器以太网提供程序:名称:aws运行时:nodejs12.x区域:ap-southeast-1超时:30环境:6000000000助记符:….SLACKHOOKURL:。。。

无服务器以太网使用以下环境变量:

默认天然气价格:写入交易时使用的默认天然气价格。

助记符:用于导出以太坊地址的12个助记符。如果您计划将数据写入以太坊,请确保它是由以太支付的。

SLACK_uhook_uurl:示例使用传入的webhook向SLACK发送消息。您可以从自己的slack仪表板获取此URL。(可选)

您可以从AWS lambda控制台更改已部署函数的环境变量。

注意:记住在构建过程中不要以纯文本形式存储密钥。当存储诸如助记符和API密钥之类的凭据时,请使用安全参数存储,如AWS secrets manager。由于每个项目的安全要求和设置不同,请根据实际情况确定密码存储方式。

如何建立一个无服务器智能合约自动化项目8

本地操作

我们可以使用无服务器的cli命令在本地运行函数。

gt;无服务器调用本地-f执行启动…合同ABIs已加载其他钱包已加载合同已加载发送交易…:白色复选标记:已发送交易;https://ropsten.ETHerscan.io/tx/0x72204f0791a319b4e5f7eb54ad15ed666cfc1403b53DeFi40c9d60188b176383 completedtrue

如何建立一个无服务器智能合约自动化项目9

部署到AWS

运行serverless deploy轻松实现部署

gt;无服务器部署:打包服务…无服务器:不包括开发依赖项…无服务器:正在创建堆栈…无服务器:正在检查堆栈创建进度……。无服务器:堆栈创建完成…无服务器:正在上载;CloudInformation文件到S3…无服务器:上载工件…无服务器:上载服务无服务器-以太网.zip;文件到S3;(2.95 MB)…无服务器:正在验证模板…无服务器:正在更新堆栈…无服务器:正在检查堆栈更新;进度…………………….无服务器:堆栈更新完成…服务信息服务:无服务器以太网阶段:devregion:ap-东南-1堆栈:无服务器以太网开发资源:8api键:非终结点:非功能:执行:无服务器以太网开发层:无服务器以太网开发层

现在,一个无服务器的功能完成了。我们可以使用它来自动化和监控智能合约,并且可以基于这个示例项目构建我们自己的智能合约自动化。

如何建立一个无服务器智能合约自动化项目10

写在结尾

祝贺您学习以下内容:

为什么需要链下智能合约的自动化

智能合约自动化的用例

无服务器架构

如何运行无服务器以太网示例应用程序

如何建立一个无服务器智能合约自动化项目11

添加:使用slack实现聊天

除了无服务器以太网,我们还可以通过posttoslack函数集成slack。

constsuccessMessage=`:白色支票标记:已发送交易;https://ropsten.ETHerscan.io/tx/$`;wait;postToSlack(成功消息);

posttoslack函数利用slack conSOLe_uhook_uurl环境变量中的slack。设置完成后,只要事务发送成功,就会立即通知slack,放松监控功能。

如何建立一个无服务器智能合约自动化项目12

补充:监控智能合约事件

到目前为止,我们只介绍了“自动触发”用例。我们如何监控智能合约的状态和事件?

我们可以使用V5的API定期监视特定事件。可以在函数中执行以下操作:

//给定以下事件://Event-Transfer(bytes32索引节点,地址所有者)///Get过滤器(第二个空值可以省略)const-filter=;合同.过滤器.传输(userAccount,null);///查询;filtERConst日志=;合同查询过滤器(filter,0,quot;latestquot;);///从块0到最新块//打印出所有;值:logs.forEach((日志)=>{;控制台.log( 日志.args. 至;日志.args. 值);}

假设我们希望这个函数周期性地执行(比如每五分钟一次),我们还需要存储一个标记来跟踪函数自上次执行以来看到的最后一个块。

这个智能合约在监控访问控制白名单时非常有用。通过事件监视功能,当新地址添加到白名单时,可以通知slack。

温馨提示:

文章标题:如何建立一个无服务器智能合约自动化项目

文章链接:https://www.btchangqing.cn/102896.html

更新时间:2020年09月13日

本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。

如何建立一个无服务器智能合约自动化项目13
区块链行情

9/13以太坊多单完美斩获13分利润,只做基本操作,手上有菜不要慌

2020-9-13 19:20:36

区块链

以太坊联合创始人:以太坊2.0即将推出,但企业采用它还需要一段时间

2020-9-13 19:48:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索