Aelf区块链系统搭建步骤、方法及智能合约开发介绍
一、概要:
本文介绍基于Linux ubuntu 操作系统搭建AElf Boilerplate开发环境、运行智能合约DAPP的方法和步骤,重点是介绍和官方文档不一样的地方,也就是重点介绍搭建环境和运行Demo时所入的坑(问题),希望对要在Aelf上搭建智能合约开发提供快速顺利搭建的环境,为开起基于Aelf智能合约愉快之旅的第一步。
二、环境
1、整体运行环境:本文档是基于Linux Ubuntu 18.0.4 + Windows 10 搭建和运行,其中Linux 操作系统跑节点和服务,windows跑客户端和JS,通过ssh协议终端远程访问Linux 上的Aelf服务,这是一种最通用的操作方式和BS架构。
2、 参考文档,来自Aelf官方文档:https://docs.aelf.io/main/main/setup
3、开发环境:
1)、准备安装linux Ubuntu 操作系统,版本18.0.4 以上,server版;
2)、开发工具:
A:安装git:安装参考开发文档:https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
在linux命令下输入以下命令:
sudo apt install git-all
sudo apt-get install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
sudo apt-get install asciidoc xmlto docbook2x
sudo apt-get install install-info
sudo apt-get install getopt
B: dotnet core sdk 2.2 官方下载地址:https://dotnet.microsoft.com/download
linux 版本下载以下:
点击 Install Net Core SDK,如下:按以下红框选择和输入命令安装:
C:在windows 系统安装chrome浏览器。
注意:chrom的版本位要和系统版本位一致,不然后面跑demo 3时,即时安装钱包插件,通信也有问题,也就是说如果你的windos系统是64位,那么安装chrom也要是64位,同理,如果你的windos系统是32位,那么安装chrom也要是32位。
官方下载地址:https://www.google.cn/intl/zh-CN/chrome/
D:安装IDE Visual Studio Code (vscode),官方下载地址:https://code.visualstudio.com/docs/setup/linux
在linux下安装命令:
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install code # or code-insiders
到此,开发环境 已搭建完毕,可以小熄一下,喝杯茶,接下来开始智能合约Deom 体验之旅~~!
三、体验Demo
1、git clone aelf-boilerplate, 命令如下:
git clone https://github.com/AElfProject/aelf-boilerplate
这个命令将在目录下创建AElfProject/aelf-boilerplate文件夹,下载代码,大概需要几分种时间,如我的截图:
2、运行Demo
1)、安装导入工程和编译运行链节点,
注意:以下命令模式下全程需要把用户加入到超级用户组,运行命令时要在前面加入sudo ,不然会报很多错误,大部分都是权限问题,如果报错,记得在命令行前加入sudo,以下操作我都会在官方文档命令前面带上sudo。
A:安装:
在linux 终端运行以下命令
sudo bash chain/scripts/install.sh
如果输入sudo sh chain/scripts/install.sh 会报以下错误:
chain/scripts/install.sh: 14: [: linux: unexpected operator
chain/scripts/install.sh: 16: [: linux: unexpected operator
B:Build and Run
cd aelf-boilerplate
cd chain/src/AElf.Boilerplate.Launcher/
sudo dotnet build
编译预计几分钟,会出现很多黄色字体,忽略,只要不爆红都OK,以下表示编译成功:
启动运行智能合约链:
注意:这条链在整个Demo运行中,都得在run,不能关闭和退出。
在命令行中输入以下命令:
sudo dotnet run bin/Debug/netcoreapp2.2/AElf.Boilerplate.Launcher
出现以下提示表示成功,些时会500ms左右更新一个区块高度,高度不断叠加。
如果你想退出,按Ctrl+C 停止或退出链,要启动,再按以上命令即可。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·
到此分割线,智能主链已运行起来,开始Demo之旅。!!
2、.Demo1: HelloWorld 智能合约 Demo
打开另一个终端,输入以下命令:
cd chain/test/HelloWorldContract.Test/
sudo dotnet test
出现以下表示成功:
3、Demo2:运行 JS SDK Demo
在终端中输入以下命令:
cd ../../../web/JSSDK/
sudo npm install
sudo npm start
在终端中出现以下界面,成功:
4:Demo3:运行 AElf 浏览器插件——NightELF Demo
A)、在Windos端安装浏览器插件,注意:此步需要科学上网,要梯子,通俗就叫翻墙,自己准备。
用chrome浏览器打开以下地址:https://chrome.google.com/webstore/detail/aelf-explorer-extension-d/mlmlhipeonlflbcclinpbmcjdnpnmkpf
在搜索框中输入aelf-explorer-extension-dev 点击安装即可。
B)、打开Aelf Nigth 钱包插件,创建钱包,钥匙,Open the extension, create your wallet, create your keypair.,打开chrome浏览器,点
以上图红圈,出现Night Aelf, 配置方法参考以下文档:
NightELF 的使用教程:https://zmh3788.gitbook.io/aelf-web-extensions/
C)、修改相关代码和脚本,具体如下:
1、修改index.html ,搜索文件中的127.0.0.1 ,把此IP改为服务器的Ip地址,保存退出。我的服务器IP地址为192.168.1.188
2、修改index.js,搜索文件中的127.0.0.1 ,把此IP改为服务器的Ip地址,保存退出。
3、在linux 终端输入以下命令:
cd ../browserExtension/
sudo npm install
sudo npm start
在终端中出现以下窗口:
D: 在windows浏览器中输入以下:
http://IP:3000, 此IP表示linux 服务器的IP地址,我测试的linuxIP地址为192.168.1.188 因此输入: http://192.168.1.188:3000
按F12(进入开发者模式),具体如下:
点击getChainStatus出现:
点击login出现:
点击demo init contract出现:
点击hello出现:
5:Demo4,运行 DAPP Demo——BingoGame:
在linux终端输入以下命:
cd ../browserBingo/
修改dist/bingo.bundle.js,搜索文件中的127.0.0.1 ,把此IP改为服务器的Ip地址,保存退出。
把browseBingo 文件夹复制到windows本地端,因BingoGame是一个客户端程序,所以直接手动打开index.html即可,界面如下:
点击register 初始化
然后点击下注金额,点击play 按照提示进行即可。
那么到了这里,这个4个demo就已经体验完成了。
谢谢大家,有问题可以留言。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以下是编写智能合约的教程,来自Aelf官方,可参考学习修改:
智能合约编写
aelf 通过类GRPC的protobuf服务描述文件定义智能合约,实现了一个性能等价于GRPC Server的智能合约运行环境。
## Hello World 智能合约讲解
简化目录结构
```bash
.
├── AElf.Boilerplate.sln
├── protobuf
│ ├── hello_world.proto
├── src
│ ├── AElf.Boilerplate.Launcher
│ │ ├── bin
│ │ │ └── Debug
│ │ │ └── netcoreapp2.2
│ │ │ ├── AElf.Boilerplate.Launcher.dll
│ └── HelloWorldContract
│ │ ├── bin
│ │ │ └── Debug
│ │ │ └── netcoreapp2.2
│ │ │ ├── HelloWorldContract.dll
│ ├── HelloWorldContract.cs
│ ├── HelloWorldContract.csproj
```
### 1.在protobuf/hello_world.proto中
通过service 定义了对应的rpc方法,通过message来定义了数据格式。更多的内容可以参考protobuf的文档。
### 2.在src/HelloWorldContract中
在HelloWorldContract.csproj引用了对应的protobuf文件。
在HelloWorldContract.cs中实现了具体的合约逻辑。
### 3.src/HelloWorldContract/bin/Debug/netcoreapp2.2/HelloWorldContract.dll
这个文件是执行 dotnet build后生成的文件。
在boilerplate这个模板中,dotnet run时会自动发布到我们启动的链上。
如果需要将自己的合约发布到其它基于AELF系统运行的区块链网络上,只需要发布对应dll即可。
### 4.代码讲解
```protobuf
// protobuf的定义
syntax = "proto3";
import "aelf_options.proto";
import "google/protobuf/empty.proto";
option csharp_namespace = "HelloWorldContract";
service HelloWorldContract {
option (aelf.csharp_state) = "HelloWorldContractState";
// 定义了合约的方法,和该方法的返回
rpc Hello (google.protobuf.Empty) returns (HelloReturn) { }
}
// 定义了返回数据的数据格式
message HelloReturn {
string Value = 1;
}
```
```C#
// C#中的逻辑实现
using Google.Protobuf.WellKnownTypes;
namespace HelloWorldContract
{
public partial class HelloWorldContract : HelloWorldContractContainer.HelloWorldContractBase
{
// 对应proto文件中的rpc Hello
// 返回为 HelloReturn
public override HelloReturn Hello(Empty input)
{
return new HelloReturn {Value = "Hello world!"};
}
}
```
## 新增合约方法教程
下面我们新增一个Add方法,输入两个整型参数 a和b, 输出 a + b
### 1.在hello_world.proto文件中增加方法的定义和数据类型的定义
```proto
syntax = "proto3";
import "aelf_options.proto";
import "google/protobuf/empty.proto";
option csharp_namespace = "HelloWorldContract";
service HelloWorldContract {
option (aelf.csharp_state) = "HelloWorldContractState";
rpc Hello (google.protobuf.Empty) returns (HelloReturn) { }
// 新增方法Add, 入参为AddInput, 返回为 AddOutput
rpc Add (AddInput) returns (AddOutput) { }
}
message HelloReturn {
string Value = 1;
}
// AddInput的格式定义,根据protobuf的协议规定,Key的首字母须大写
message AddInput {
sint64 A = 1;
sint64 B = 2;
}
// AddOutpu的定义
message AddOutput {
sint64 Value = 1;
}
```
### 2.在HelloWorldContract.cs新增逻辑
```C#
using Google.Protobuf.WellKnownTypes;
namespace HelloWorldContract
{
public partial class HelloWorldContract : HelloWorldContractContainer.HelloWorldContractBase
{
public override HelloReturn Hello(Empty input)
{
return new HelloReturn {Value = "Hello world!"};
}
// 新增Add方法
public override AddOutput Add(AddInput input) {
return new AddOutput {Value = input.A + input.B};
}
}
}
```
### 3.重新编译并启动链
在src/AElf.Boilerplate.Launcher 下执行 dotnet build 完成编译
dotnet run bin/Debug/netcoreapp2.2/AElf.Boilerplate.Launcher
新的合约会自动发布到链上。
### 4.通过JS文件使用新的合约
```bash
cd web/JSSDK
# 执行node, 进入nodejs的命令行交互界面
node
```
把下面一段js输入
```js
const AElf = require('aelf-sdk');
const Wallet = AElf.wallet;
const sha256 = AElf.utils.sha256;
// address: 65dDNxzcd35jESiidFXN5JV8Z7pCwaFnepuYQToNefSgqk9
const defaultPrivateKey = 'bdb3b39ef4cd18c2697a920eb6d9e8c3cf1a930570beb37d04fb52400092c42b';
const wallet = Wallet.getWalletByPrivateKey(defaultPrivateKey);
const aelf = new AElf(new AElf.providers.HttpProvider(
'http://127.0.0.1:1235/chain',
null,
null,
null,
[{
name: 'Accept',
value: 'text/plain;v=1.0'
}]
));
const helloWorldContractName = 'HelloWorldContract';
const {
GenesisContractAddress
} = aelf.chain.getChainStatus();
const zeroC = aelf.chain.contractAt(GenesisContractAddress, wallet);
const helloWorldContractAddress = zeroC.GetContractAddressByName.call(sha256(helloWorldContractName));
const helloWorldC = aelf.chain.contractAt(helloWorldContractAddress, wallet);
// 刚新增的方法
helloWorldC.Add.call({A: 1, B:3}, (error, result) => {console.log(error, result);})
```
稍等一下看到输出结果
```js
null { Value: '4' }
```
看不到结果
1. 确认编译成功。
2. 确认链在运行。
3. 确认JS代码没输入错。
多学多看多搜索,愿大家在工程师的道路上越走越远。
Aelf区块链系统搭建步骤、方法及智能合约开发介绍相关推荐
- 区块链课堂|从0开始了解区块链,通过代币学智能合约开发(线上课程)
前两天约一个程序员朋友吃饭,他是通过学习蒋勇老师的区块链智能合约课程转型的区块链开发,聊到区块链开发他吐槽了这么一句:学会ERC20,就是区块链工程师. 他在找新机会的时候,被问到最多的问题就是会不会 ...
- IEEE P3217《区块链系统应用接口规范》国际标准启动
在 2021 年 8 月 27 日召开的 IEEE P3217<区块链系统应用接口规范>国际标准启动媒体发布会上,上海树图区块链研究院宣布 IEEE<区块链系统应用接口规范>( ...
- 蚂蚁区块链第10课 可信计算及TEE硬件隐私合约链智能合约开发实践
1,摘要 本文介绍可信计算分类INTEL SGX技术和ARM TRUSTZONE技术技术方案概要,以及应用INTEL SGX技术的蚂蚁区块链TEE硬件隐私链的智能合约开发实践. 2,可信计算和2种技术 ...
- 区块链智能合约开发学习
最近正在肝区块链知识学习,入手学习智能合约的开发,由于网上资料实在是太少了,好不容易东拼西凑完成了智能合约的开发.编译.部署.web3js调用(网页页面)和web3j调用(java调用),赶紧趁热把重 ...
- LikeLib侧链:搭建区块链系统信任传递桥梁
几乎没有什么技术比区块链更能吸引关注和争议了.对某些人来说,这是未来革命性的技术:对另一些人来说,它是一个骗局或庞氏骗局. 我已经概述了科技在通往每个办公室,或许是全世界每个家庭的旅程中所面临的四个问 ...
- WDK_基于Fabric的区块链系统开发
文章目录 摘要 一.Fabric环境搭建 1.1 安装docker 1.2 安装go 1.3 安装Node.js 1.4 部署hyperledger Fabric 二.Fabric的概念 2.1 逻辑 ...
- 牛逼,一整套基于Java开发的的区块链系统(附完整源码)
前言 近几年区块链概念越来越火,特别是区块链技术被纳入国家基础设施建设名单后,各大企业也开始招兵买马,对区块链技术进行研究,从各大招聘网站的区块链职位来看,薪资待遇都很不错,月薪30K到80K的都有, ...
- 基于Java开发一套完整的区块链系统(附源码)
来源:https://blog.csdn.net/victory_long 前言 近几年区块链概念越来越火,特别是区块链技术被纳入国家基础设施建设名单后,各大企业也开始招兵买马,对区块链技术进行研究, ...
- 基于Java开发一套完整的区块链系统(附完整源码)
前言 近几年区块链概念越来越火,特别是区块链技术被纳入国家基础设施建设名单后,各大企业也开始招兵买马,对区块链技术进行研究,从各大招聘网站的区块链职位来看,薪资待遇都很不错,月薪30K到80K的都有, ...
最新文章
- 联手中科大、浙大、华科大等高校,阿里研发4项最新AI安全技术
- sqlalchemy mysql_SQLAlchemy简明教程
- [转] C# 获取程序运行目录
- SAP实施顾问参与主数据搜集的四大好处
- Eclipse中的Tomcat:6个流行的“如何”问题
- apollo持久化sentinel_Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则
- Redis 如何实现限流功能?
- java在线查看pdf文件,java 实现所有文件的在线查看(其他类型转pdf后用pdf.js显示)...
- 饿了么口碑实现超30亿美元融资,引领本地生活数字化升级...
- sql语句count_带COUNT()函数SQL SELECT语句
- C语言——指针篇(三)数组的下标引用和指针访问
- 讨论一下hibernate如何动态注册一个动态生成的实体类
- 3dmax高级建模方法总结
- 施努卡:什么是视觉定位系统 视觉系统如何定位
- Mac用户必备翻译软件!Bob 0.5.3 中文版 附谷歌翻译插件!
- 云平台仿真框架cloudsim介绍
- 风控ML[15] | 风控模型报告以及上线后需要监控的内容
- 兆骑科创创客大赛,招商引资,招才引智,招企引税
- 市场调研报告-全球与中国地球物理数据市场现状及未来发展趋势
- 《一本书读懂大数据营销 玩透大数据营销 创造网络营销奇迹》pdf下载 百度云
热门文章
- 淘宝直通车关键词拖价怎么做?大神导航,一个神奇的网站,从此开启大神之路!
- 玉米油、橄榄油、茶油是对心脑血管最好的油
- 【HTML+CSS+JS】前端三剑客实现3D旋转照片墙
- 链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现
- 拼多多APP商品详情接口获取activity_id值(activity_id接口)代码对接教程
- 「GoCN酷Go推荐」Golang轻量级桌面程序wails2教学
- 基于网管的企业IT管理解决方案
- win10闪讯用户网络图标消失
- PeckShield创始人蒋旭宪教授荣获AMiner全球最具影响力学者提名
- 深度linux系统精简版,深度deepin 20.2正式发布,系统精简运行丝滑,快来体验!...