AERGO SHIP:一个开发智能合同的包管理器
用于构建、测试和部署分布式应用程序的客户端框架和开发环境
构建一个大型的分布式应用程序是很困难的,因为测试它、使它端到端工作并部署它是一个耗时的过程。有了AERGO,我们计划有所作为。
AERGO是一个平台,为在实施基于区块链的系统和应用时面临许多独特挑战的企业提供解决方案。为了提高开发、测试和部署智能合约的效率和易用性,我们创建了SHIP。SHIP是Lua智能合同包管理器。它将本地开发环境与Git和分布式分类帐连接起来,从而大大减少了构建和管理智能合同所花费的时间。船舶提供以下功能:
项目设置:在简单的任务中完成开发准备。
从远程存储库中安装包:GitHub上的包可以安装在本地存储库中。
构建:组合(预处理)项目的内部资源来开发要分发的产品。
单元测试:上传到网络之前,可以验证新版本的功能是否符合要求。
部署到本地存储库:将开发的项目安装到本地存储库中,供其他项目参考。
SHIP最基本的思想是简单;它轻便有效。SHIP的当前版本故意不包括广泛的开发功能;但重要的是,SHIP是一个不断更新的项目。我们将从技术社区获得建议,并继续添加被认为有价值的功能。
我们为什么要创建一个包管理器?
我们经常回顾历史,以便做出假设。本月早些时候,Phil发表了一篇文章,解释了我们基于Linux和红帽的历史性成功的开源执行方法。在开发分布式应用程序时,我们以同样的方式创建了一个包管理器。
从2009年到2014年,竞争中出现了许多技术,形成了我们今天所知的现代网络时代。
应该注意的是,在创建JavaScript之后的1995年到2010年期间,没有引入任何构建或包管理工具。自从开始使用JavaScript以来的15年里,在推进Web状态方面几乎没有取得任何进展。然而,随着2009年Node.js的发布,包管理器和包变得越来越流行,可以创建新一代的动态网页。Node.js的默认包管理器npm的建立,实现了Web的快速发展。
2012年,特雷罗发表了一篇概述特雷罗技术堆栈的文章。本文介绍了许多技术,这些技术将使Web作为一个应用程序而不仅仅是一个页面来工作。它很好地概述了网络在2012年之前的进展以及前几年的快速发展。这种快速发展实际上是由npm的创建引起的,它减少了开发网页所花费的时间。
就像网络上的npm一样,SHIP的目标是成为开发基于区块链的应用程序和智能合同的关键点。SHIP将实现智能合约的无缝高效开发、测试和部署。最终,SHIP将为AERGO提供吸引下一代dApp和企业区块链开发者所需的可用性,从而创建一个繁荣的开发者开源生态系统。
如何使用SHIP
要使用SHIP,您必须首先下载并安装以下程序:
GitJDK 8 Node.jsnpm
建造船舶
SHIP还没有正式发布。如果你想使用SHIP,你必须先构建它。SHIP使用下面的GitHub地址作为源存储。
aer goio/船
从GitHub获取源代码。($在命令的开头显示一个提示,如果系统根目录提示,则提示为#)。
$ git克隆
现在运行构建。第一次尝试运行时,命令很长。
$ cd船
$ ./build.sh清洁deps npm组装
成功完成后,您可以看到SHIP-$ VERSION.tar文件已经在组装/构建/分发中创建。
解压缩此文件以安装SHIP。
接下来,使用ship命令将bin目录包含在PATH路径中。你可以补充。bash_profile到最后一节。它可能会根据你的外壳而变化。
导出路径=$PATH:$SHIP_HOME/bin
SHOP_HOME指的是解压发货-$ {VERSION}目录。安装现已完成。
创建项目
我们现在正在构建一个智能合同开发项目。在所需位置为项目创建一个目录。
$ mkdir我的第一个项目
在本文中,我将此位置称为$ {PROJECT_HOME}。
ship命令假定当前工作目录是项目目录。让我们将当前目录移到项目中。
$ cd我的第一个项目
要将空目录用作项目,您需要运行以下命令。
$发货初始化
如果运行正常,将在项目目录中创建一个名为aergo.json的文件。aergo.json文件应该如下所示:
{“name”:“bylee/my-first-project”,“source”:“src/main/Lua/main . Lua”,“target”:“app . Lua”}更改项目设置
有关该项目的信息存储在aergo.json中。如有必要,您可以编辑该文件。让我们看看这个文件的属性。
Name-project name:当以$ { github _ account }/$ { project _ name }的格式将包导入或放入存储库时,将使用此名称。最初创建为$ {username}/$ {project_name}。如果您的用户名和GitHub帐户不同,您需要更改它们。
source将要开始构建的源文件的路径视为相对于项目文件夹的路径。
目标-保存生成结果的文件的路径。编译构建的文件,生成二进制文件和ABI,并将其部署到AERGO服务器。
依赖项-引用包的名称。包指的是存储库中安装的项目类型。
测试-测试源的路径。顾名思义,这是一个数组类型。
为集成测试而部署和运行的端点-AERGO服务器的主机名和端口信息。$ {hostname}:设置为$ {port}。默认值为“localhost:7845”。
既然目前的状态没有改变,我们就继续下一步。
撰写智能合同
现在,让我们写一个简单的代码。来源是src/main/lua/main.lua
函数min(a,b)如果(a,b)然后返回一个返回bendend
我写了一个min函数,取两个数字,返回较小的一个。目前,AERGO支持的智能合约都是基于lua语言的。让我们构建当前的源代码。
$造船
如果没有问题,创建一个app.lua文件。如果您打开这个文件,它与src/main/lua/main.lua完全相同,因为您可能只有一个文件要创建。如果您继续修改源代码并查看它是如何变化的,您可以看到构建是如何组合文件的。
之前,SHIP指出多个文件可以合并成一个。现在,让我们重建main.lua文件。您可以使用导入命令从另一个源引用一个源。将min函数移动到src/main/lua/utils.lua,并将现有的main.lua替换为:
进口”。/utils.lua "
如果您重建,您可以看到app.lua文件与以前相同。
创建单元测试
让我们为刚刚创建的utils.lua中的min函数编写一个单元测试。我们将在src/test/lua/test-utils.lua中编写测试代码下一次,如果有机会,我将更详细地讨论用于测试的API。这一次,我只举几个例子。
import " aer goio/Athena-343 " local suite=TestSuite(' test suite for utils . Lua ')suite : add(test case(' test min ',function()asserteqals(3,min(3,4))end))suite:run()在aergo.json中添加一个测试条目,告诉SHIP这是一个用于测试的文件。
{ " name " : " bylee/my-first-project "," source " : " src/main/Lua/main . Lua "," target" : "app.lua "," tests" : ["src/test/Lua "
$ ship testERROR : '包aergoio/athena-343未找到:/user/byee/。当您运行测试时,您会得到一个错误,因为您用作测试框架的aergoio/athena-343没有安装。现在,让我们在github中安装这个包。$船舶安装aer goio/雅典娜-343
实验部分
增量构建
SHIP有很强的建造能力。该功能可以检测项目中文件的变化,并自动构建和测试它们。
运行此函数需要build命令的附加参数。
$造船手表
如果操作没有问题,可以看到以下结果。这个例子是我的第一个项目。
如果您更改源代码,您可以实时看到构建和测试。
用户界面
此外,我们还提供了一个网络服务,允许浏览器访问以下附加端口选项。
$造船-观察-港口8080
构建结果
除了提供比终端更多的细节,它还提供了额外的部署功能。这个部署是为了测试,所以它将转到localhost上的端口7845。要使用此功能,服务器必须正在运行,并且aergoluac命令必须在PATH中设置。
单元测试结果
您还可以查看每个构建的测试结果,构建记录还保存了过去的五个测试结果。
当您选择Runner菜单时,将出现一个屏幕,您可以在其中实际运行已部署的功能。
结论
SHIP提供的功能支持项目开发的每个阶段,从设置到部署。它可以帮助开发人员从现有的编程方法中获得结构化编程,从而使开发智能合约的过程更加无缝和高效。虽然SHIP没有足够的功能,开发的某些方面可能不够容易,但我们计划与dApp开发人员合作,识别有价值的东西,并在未来通过更好的功能实现这些价值。我们正在等待您的反馈!
如果你不知道,我们最近推出了AERGO预测试网络,并发布了AERGO平台的Alpha代码库。您可以随意启动本地测试网络并贡献代码。