AERGO SHIP:用于开发智能合约的包管理器
用于构建、测试和部署分布式应用程序的客户端框架和开发环境
构建大型分布式应用程序是很困难的,因为对其进行测试,使其实现端到端工作,并进行部署是一个非常耗时的过程。通过AERGO,我们计划让一切变得与众不同。
AERGO是一个为在实现基于区块链的系统和应用程序时面临众多独特挑战的企业提供解决方案的平台。为了提高开发、测试和部署智能合约的效率和易用性,我们创建了SHIP。SHIP是Lua智能合约包管理器。它将本地开发环境与Git和分布式分类账连接起来,从而大大减少了构建和管理智能合约所花费的时间。SHIP提供以下功能:
项目设置:在简单的任务中完成开发准备。
从远程存储库安装软件包:GitHub上的软件包可以安装在本地存储库中。
构建:结合(预处理)项目内部的资源来开发准备分发的产品。
单元测试:在上传到网络之前,您可以验证新版本的功能是否符合要求。
部署到本地存储库:将已开发的项目安装到本地存储库中,以供其他项目参考。
SHIP最基本的理念是简洁;它轻巧而有效。目前版本的SHIP特意不包括广泛的开发功能;但重要的是,SHIP是一个持续更新的项目。我们将从技术社区中获取建议,并继续添加被视为有价值的功能。
我们为什么要创建包管理器?
我们经常回顾历史,以便提出假设。本月早些时候,Phil发表了一篇文章,解释了我们基于Linux和Red Hat所取得的历史性成功的开源执行方法。在开发分布式应用程序时,我们采用相同的方式创建了一个包管理器。
2009年至2014年,许多技术竞相出现,形成了我们今天所知的现代网络的年代。
需要注意的是,在创建JavaScript之后,1995年到2010年之间没有引入构建或包管理工具。在开始使用JavaScript之后的15年里,在推进Web状态方面几乎没有取得任何进展。然而,随着2009年Node.js的发布,包管理器和捆绑包变得越来越普遍,从而可以创建新一代的动态网页。Node.js的默认包管理器npm的创建实现了Web的快速发展。
2012年,Trello发布了一篇文章概述Trello Tech Stack。这篇文章介绍了许多技术,这些技术将使Web作为一个应用程序而不仅仅是一个页面工作。它很好地概述了2012年之前网络的进展及其在前几年的快速发展。这种快速发展确实是由npm的创建引起的,减少了开发网页所花费的时间。
就像npm之于Web一样,SHIP旨在成为开发基于区块链的应用程序和智能合约的关键点。SHIP将实现智能合约的开发、测试和部署无缝且高效。最终,SHIP将为AERGO提供吸引下一代dApp和企业区块链开发人员所需的可用性,以创建一个蓬勃发展的开发者开源生态系统。
如何使用SHIP
要使用SHIP,您必须先下载并安装以下程序:
Git
JDK 8+
Node.js
npm
构建SHIP
SHIP目前尚未正式发布。如果您希望使用SHIP,必须先构建它。SHIP使用下方的GitHub地址作为源存储。
aergoio/ship
从GitHub获取源代码。(命令开头的$显示提示,如果系统root提示,则提示符为#)。
$ git clone
现在运行构建。第一次尝试运行时,命令很长。
$ cd ship
$ ./build.sh clean deps npm assemble
成功完成后,您可以看到ship- $ VERSION.tar文件已在程序集/构建/分发中创建。
解压缩此文件以安装SHIP。
接下来,使用ship命令在PATH路径中包含bin目录。您可将.bash_profile添加到最后一部分。它可能会根据您的shell而发生改变。
export PATH=$PATH:$SHIP_HOME/bin
SHOP_HOME指的是解压缩ship - $ {VERSION}
目录。安装现已完成。
建立项目
我们现在正在建立一个智能合约开发项目。在所需位置为项目创建目录。
$ mkdir my-first-project
在本文中,我将此位置称为$ {PROJECT_HOME}
。
ship命令假定当前工作目录即为项目目录。让我们将当前目录移到项目中。
$ cd my-first-project
要将空目录作为项目,您需要运行以下命令。
$ ship init
如果运行正常,则将在项目目录中创建名为aergo.json的文件。aergo.json文件应如下所示:
{
“name” : “bylee/my-first-project”,
“source” : “src/main/lua/main.lua”,
“target” : “app.lua”
}
更改项目设置
有关该项目的信息存储在aergo.json中。必要时,您可以编辑此文件。我们来看看这个文件的属性。
name - 项目名称:以$ {github_account} / $ {project_name}
格式导入或将包放入存储库时使用此名称。最初创建为$ {username} / $ {project_name}
。如果您的用户名和GitHub帐户不同,则需要对其进行更改。
source – 将开始构建的源文件的路径视为相对于项目文件夹的路径。
target - 保存有构建结果的文件的路径。编译构建的文件,生成二进制文件和ABI并将其部署到AERGO服务器。
dependencies - 引用的包的名称。包是指存储库中安装的项目的类型。
tests - 测试源的路径。顾名思义,这是一种数组类型。
endpoint - AERGO服务器部署和运行以进行集成测试的主机名和端口信息。 $ {hostname}
:设置为$ {port}
。默认值为“localhost:7845”。
由于当前状态没有变化,我们将继续下一步。
编写智能合约
现在,让我们来编写一段简单的代码。源是src / main / lua / main.lua。
function min(a, b)
if (a b) then
return a
else
return b
end
end
我写了一个min函数,该函数选取了两个数字并返回其中较小的数字。目前,AERGO支持的智能合约基于语言lua。让我们来构建当前的源代码。
$ ship build
如果没有问题,则创建app.lua文件。如果打开此文件,它与src / main / lua / main.lua完全相同,因为您可能只有一个文件要创建。如果继续修改源并查看其更改方式,则可以看到该构建如何组合文件。
此前,SHIP表示可以将多个文件合并为一个。现在,让我们重构main.lua文件。您可以使用import命令从一个源引用另一个源。将min函数移到src / main / lua / utils.lua,将现有的main.lua替换为:
import “./utils.lua”
如果进行重新构建,则可以看到app.lua文件与之前相同。
创建单元测试
让我们为刚创建的utils.lua中的min函数编写一个单元测试。我们将在src / test / lua / test-utils.lua中编写测试代码。下一次如果有机会,我会更详细地讨论用于测试的API,这次仅显示示例。
import “aergoio/athena-343”
local suite = TestSuite(‘test suite for utils.lua')
suite:add(TestCase(‘test min', function()
assertEquals(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/test-utils.lua” ]
}
要运行测试,请运行以下命令:
$ ship test
ERROR : "Package aergoio/athena-343 not found: /Users/bylee/.aergo_modules/aergoio/athena-343/aergo.json"
When you run the test, you get an error because the aergoio / athena-343 that you use as a test framework is not installed. Now, let's install the package in github.
$ ship install aergoio/athena-343
实验部分
增量构建
SHIP具有强大的构建能力。此功能可检测项目中文件的更改,并对其进行自动构建和测试。
运行该函数需要构建命令的其他参数。
$ ship build –watch
如果运行没有问题,则可以看到以下结果。这个例子是我的第一个项目。
如果您更改了源,则可以看到实时反映的构建和测试。
WebUI
此外,我们还提供一个Web服务,允许浏览器访问以下附加端口选项。
$ ship build --watch --port 8080
构建结果
除了提供比终端所提供的更多细节之外,它还提供了额外的部署功能。此部署用于测试,因此它将转到localhost上的端口7845。要使用此功能,服务器必须正在运行,并且必须在PATH中设置aergoluac命令。
单元测试结果
您还可以查看每个构建的测试结果,并且构建记录还保存有过去的五个测试结果。
当您选择Runner菜单时,会出现一个屏幕,您可以在其中实际运行已部署的功能。
结论
SHIP提供支持项目开发每个阶段的功能,从设置到部署。它可以帮助开发人员从现有的编程方法中获得结构化编程,从而使开发智能合约的过程更加无缝和高效。虽然SHIP还没有足够的功能,并且开发的某些方面可能还不够简便,但我们计划与dApp开发人员合作,以确定有价值的东西,并在将来通过更好的功能实现这些价值。我们正在等待您的反馈!
如果您还不知道,我们最近推出了AERGO预测试网,并发布了AERGO平台的Alpha代码库。您可以随意启动本地测试网络,贡献代码。