AERGO SHIP:用于开发智能合约的包管理器

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代码库。您可以随意启动本地测试网络,贡献代码。

(0)

相关推荐

  • AERGO SHIP:用于开发智能合约的包管理器

    AERGO SHIP:用于开发智能合约的包管理器 用于构建.测试和部署分布式应用程序的客户端框架和开发环境 构建大型分布式应用程序是很困难的,因为对其进行测试,使其实现端到端工作,并进行部署是一个非常耗时的过程.通过AERGO,我们计划让一切变得与众不同. AERGO是一个为在实现基于区块链的系统和应用程序时面临众多独特挑战的企业提供解决方案的平台.为了提高开发.测试和部署智能合约的效率和易用性,我们创建了SHIP.SHIP是Lua智能合约包管理器.它将本地开发环境与Git和分布式分类账连接起来

  • Web前端开发工具——bower依赖包管理工具

    Bower 是 twitter 推出的一款包管理工具,基于nodejs的模块化思想,把功能分散到各个模块中,让模块和模块之间存在联系,通过 Bower 来管理模块间的这种联系. 包管理工具一般有以下的功能: a)注册机制:每个包需要确定一个唯一的 ID 使得搜索和下载的时候能够正确匹配,所以包管理工具需要维护注册信息,可以依赖其他平台. b)文件存储:确定文件存放的位置,下载的时候可以找到,当然这个地址在网络上是可访问的. c)上传下载:这是工具的主要功能,能提高包使用的便利性.比如想用 jqu

  • Node.js安装教程和NPM包管理器使用详解

    2009年的JSCOnf大会上,一个叫Ryan Dahl的年轻程序员向人们展示了一个他正在做的项目,一个基于Google V8引擎的JavaScript运行平台,它提供了一套事件循环和低IO的应用程序编程接口(API).和其他的服务端平台不同, JavaScript天生就是事件驱动IO,而这个项目又大大降低了编写事件驱动应用程序的复杂度,因此它很快就以不可思议的速度的成长流行起来,并应用到实际项目中.(Jack:这段翻译的不太靠谱,原文:This project was not like oth

  • Node.js包管理器Yarn的入门介绍与安装

    前言 这两天大家有没有都被Yarn悄悄刷了屏,最近Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .为了跟上 Javascript 这股潮 流的脚步,大概的浅尝了一下这个自称是又快又可信赖又安全的包管理,所以写的内容不会很详细,更多的可能只是针对这个全新的包管理与 npm 的不同之处来对比.也可能有些地方写得不对,如果有的话,欢迎指正. 一.安装 首先当然是安装啦.跟 npm 这种被钦点而随 nodejs 一起被安装的包管理器不同, Yarn 需要自行手动安装

  • Node.js包管理器npm的具体使用

    目录 目的 npm init 与 package.json文件 模块安装与管理 安装模块 查看已安装模块 更新模块 删除模块 npx 模块编译 版本控制 换源 使用 nrm 工具换源 使用 cnpm 代替 npm 总结 目的 目前的Node.js安装包中都带有一个重要的工具 包管理器npm .npm主要有两方面功能:下载管理第三方模块:构建与运行项目.npm使用本身并不复杂,但是在大陆的网络环境下使用并不省心,徒增许多工作量.这篇文章将对相关内容做个说明. npm init 与 package.

  • Node.js基础入门之模块与npm包管理器使用详解

    目录 require函数 模块分类 第三方模块 1. 安装第三方模块 2. 引入第三方模块 3. 示例测试 系统模块 require注意事项 exports导出对象 1. exports示例 2. exports注意事项 module模块对象 package.json包描述文件 1. 什么是package.json ? 2. 如何创建package.json文件? NPM基础 1. 常用npm命令 2. npm 示例 cnpm基础 1. 什么是cnpm ? 2. 使用cnpm 控制台输出 1.

  • 使用pnpm包管理器替代npm及yarn的命令示例

    目录 前言 为什么会有 pnpm 不止于此 什么是扁平化的 node_modules pnpm 的 node_modules 如何使用 pnpm 安装 直接安装 通过 npm 安装 通过 HomeBrew 安装( 一种 MacOS 包管理器) 升级 使用 配置 命令 和其他包管理器比较 Monorepo 及 工作空间(Workspace) 什么是 Monorepo Workspace workspace: 协议 结语 前言 今天给大家介绍一种新的包管理器:pnpm,pnpm 由 zkochan

  • Flutter 包管理器和资源管理使用学习

    目录 什么叫包管理器 Flutter 包管理器 Pub仓库 资源管理 配置图片资源 配置全局字体资源 结束语 什么叫包管理器 包管理器就是用来管理程序运行依赖的一个配置应用.在程序运行中,我们会用到各种各样的第三方程序包,若我们手动管理这些程序,他将变得十分臃肿.这时候便诞生了包管理器,类似于手机中的AppStore.比如说我们手机中的某个程序更新了,我们就可以通过AppStore来更新.同样的我们可以通过包管理来更新我们程序中用到的依赖包. Flutter 包管理器 Flutter包管理器是Y

  • 在linux中使用包管理器安装node.js

    网上文章中,在linux下安装node.js都是使用源码编译,其实node的github上已经提供了各个系统下使用各自的包管理器(package manager)安装node.js的方法. 1. 在Ubuntu中,使用如下命令: 复制代码 代码如下: curl -sL https://deb.nodesource.com/setup | sudo bash - sudo apt-get install -y nodejs 如果需要使用npm安装本地组件,还需要执行如下命令: 复制代码 代码如下:

  • python小白学习包管理器pip安装

    pip对于使用python的朋友并不陌生,当你想安装python模块的时候一定会首先想到它.pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品. 今天来说一下,pip的安装方法. 方法一:脚本安装 $ wget https://bootstrap.pypa.io/get-pip.py $ [sudo] python get-pip.py 方法二:源码安装: $ curl -O https://pypi.python.org/packages/sour

随机推荐