18910140161

基于windows10以太坊私有链eth安装DApp开发环境

顺晟科技

2021-06-16 10:45:36

359

本文是一篇学习文章,参考网络上的一系列DApp开发环境搭建而成,结合自己在这台机器上的测试和验证,从而加深对智能合同的理解。

1.1准备阶段

本文搭建的环境基于windows10(家庭版),相关软件版本如下:

Node.js:v8.11.3

solcjs:0 . 40 . 2 commit . 3155 DD 80 . Emscripten . clang

web3:0.20.2

块菌:v4.1.3(核心4.1.3)

Webpack:3.11.0

注意:本文搭建的环境没有安装节点模拟器ganache,而是直接部署Ethereum私有链eth。

步骤1:安装Node.js

打开官网下载链接。https://nodejs.org/en/download/下载了与你的系统相对应的Node.js版本

Node.js是运行在服务器上的JavaScript。Node.js是一个JavaScript运行环境。Node.js使用事件驱动的非阻塞I/O模型,使其轻量级且高效。Node.js的包管理器npm是世界上更大的开源库生态系统。下载64位软件包,下载后直接安装。安装后,打开控制台窗口,您可以使用节点:

C: \用户\45014node -v

v8.11.3

这里解释一下,新版Node.js有自己的npm,安装Node.js的时候会一起安装,npm的作用是管理Node.js所依赖的包,也可以理解为用来安装/卸载Node.js需要安装的东西。

注意:这里的环境配置主要配置npm安装的全局模块所在的路径和缓存的路径。配置的原因是将来执行类似npm install express [-g](可选参数-g,g代表全局安装)的安装语句时,安装的模块将被安装到C: \ users \ 45014 \ appdata

步骤2:安装可靠编译器

C: \用户\45014 npm安装g solc

安装完成后,执行命令验证安装是否成功

C: \用户\ 45014 solcjs版本

0.40.2提交

步骤3:安装web3

C: \用户\45014 npm安装g web 3 @ 0 . 20 . 2

安装验证:

C:\Users\hubwiz节点p ' require(' web 3 ')'

{[功能: Web3]

providers:{…}}

第四步:安装松露框架

执行以下命令安装桁架开发框架:

C: \用户\45014 npm安装g块菌

验证安装:

C: \用户\45014 truffle.cmd版本

块菌v4.1.3(核心4.1.3)

步骤5:安装网络包

执行以下命令安装webpack:

C: \用户\ 45014 NPM installg web pack @ 3 . 11 . 0

验证安装:

C: \用户\ 45014 web packv

3.11.0

1.2智能合同开发

1.2.1创建合同项目

D: \研究\获取mkdir测试

D: \研究\geth\testcd测试

D: \研究\geth\testmkdir HelloWorld

D: \研究\获取\测试光盘HelloWorld

D: \研究\获取\测试\ HelloWorld块菌初始化

此时将出现以下错误:

块菌初始化下载…错误:块菌盒

https://github.com/truffle-box/bare-box.git不存在。如果

您认为这是一个错误,请联系块菌支持。

解决方案可以是用直接的git代码替换truffle init命令

git克隆https://github.com/truffle-box/bare-box

需要先执行后续命令:cd裸盒

上面两个命令的功能相当于truffle init,框架是自动生成的。

目录结构描述:

合同/:块菌的默认合同文件存放地址;

迁移/:存储发布的脚本文件;

Test/:存储测试应用程序和合同的测试文件;

truffle-config . js:truss的配置文件。

1.2.2准备和部署合同

步骤1:在合同文件夹下创建一个新的HelloWorld.sol文件:

D: \研究\获取\测试\ HelloWorld\裸盒cd合同/

D: \研究\获取\测试\ HelloWorld\裸盒\合同块菌创建合同HelloWorld

写一个简单的HelloWorld代码如下:

复制代码

务实稳健的^0.4.22;

合同HelloWorld {

函数sayHello()返回public pure(string){

返回(' Hello World ');

}

}

复制代码

行命名当前的实度版本,不同的实度版本可能编译不同的字节码。是为了兼容性。

合同关键字类似于其他语言中较常见的上课。因为固态是专为智能合约(联系人)设计的语言,声明合同后即内置了开发智能合约所需的功能。也可以把这句理解为编译类扩展合同。

函数的结构与其他程序类似,但如果有传入的参数或回传值,需要指定参数或回传值的类型(类型).

第二步:编译合约:

现在执行块菌编译命令,我们可以将HelloWorld.sol原始码编译成以太网字节码:

D: \研究\获取\测试\ HelloWorld \裸盒编译

编译. contracts\HelloWorld.sol.

将工件写入。\构建\合同

命令运行成功后会多出一个建设的目录,如下:

在编译文件夹下面的建筑/合同文件夹下面会看见HelloWorld.json文件:

第三步:修改块菌-config.js文件内容:

添加以下内容到块菌-config.js文件并保存:

网络: {

发展: {

host: 'localhost ',

port: 8545,

network _ id : ' *//匹配任何网络编号

}

第四步:在迁移目录下创建移植文件:

D: \研究\获取\测试\ HelloWorld \裸盒\迁移选择创建迁移部署_helloworld

查看目录,生成如下文件:

修改1552730530 _ deploy _ hello world。射流研究…

var hello world=神器。要求(' ./hello world。sol’);

模块。exports=function(deployer){

部署者。deploy(hello world);

};

使用工件。需要语句来取得准备部署的合约。

使用deployer.deploy语句将合约部署到区块链上。这边编译是合同的名称而不是文件名。因此可以用此语法读入任一。溶胶文件中的任一合约。

第五步:执行块菌迁徙命令:

D: \研究\获取\测试\地狱世界\裸盒松露迁移

使用网络"开发"。

正在运行迁移: 1 _ initial _ migration。射流研究…

部署迁移.

.不明确的

遇到错误,正在退出。网络状态未知。手动检查成功的交易。

错误:帐户被锁定

在对象无效响应(c : \ Users \ 45014 \ AppData \ Routing \ NPM \ node _ modules \块菌\ build \ web pack : \ ~ \ web 3 \ lib \ web 3 \ errors。js :38:1)

在部署合约时需要一个解锁的账户。在桀斯控制台使用个人的对象的解锁帐户()方法来解锁指定的账户,参数为账户地址和账户密码(在创建账户时指定的那个密码):

在古英语字母或-D执行:

私人的。解锁帐户(eth。帐户[0])

密码:

真实的

然后再次执行:

D: \研究\获取\测试\地狱世界\裸盒松露迁移

使用网络"开发"。

正在运行迁移: 1 _ initial _ migration。射流研究…

部署迁移.

.0x 87 a3 F9 c 57 E1 d 01 BCD 8 f 138 c 67167028444 C1 de 145596338 a 0a F9 e 571 f 654984 f

迁移:0x 5980 c 9 cfbe 8 da C5 a 7f 0 b 100 c 6 fad 75 EC 7b 7763 bb

保存工件.

正在运行迁移: 1552730530 _ deploy _ hello world。射流研究…

更换编译.

.0x1e 24213 F8 f 21917d 9d 2159 B3 b 43845 B1 FB 13 f 19 ebc 5045 b 0 b 8976224 ba 136294

hello world d :0x 613 f 2408 babedbadd 55783 BD 60 a 893 CD 4a 89 c 0 b 9

保存工件.

(此时会停在部署阶段,需要启动挖矿,才可以部署完成)

我们先看下是否有交易在处理,在古英语字母或-D下执行命令。

txpool.status

{

pending:1,

queued:0

}

的确有一个挂起的交易!下面开启启动挖矿:

miner.start(1)

.

I 0316 213:08:35.926452 eth/API。go :1191]Tx(0x1e 24213 F8 f 21917d 9d 2159 B3 b 43845 B1 FB 13 f 19 ebc 5045 b 0 b 8976224 ba 136294)创建d 33600x 613 f 2408 babedbadd 55783 BD60 a 893 CD 4d 4

矿工/工人?开采区块(# 224/2190 b58b)10 .等待5个街区确认

我0316 21:08:37.286816矿工/工人。go :573]用1 txs 0大叔在225块提交新工作。拍摄了0

矿工/工人?219号区块后开采5个区块:

我0316 21:08:37.289809矿工/工人。go :573]用1 txs 0大叔在225块提交新工作。拍摄了0

矿工/工人?开采区块(# 225/d5e 9 a 63 b)4 .等待5个街区确认

我0316 21:08:42。536780矿工/工人。go :573]在块226上用0 txs 0大叔提交新工作。拍摄了0

矿工/工人?220号区块后开采5个区块:

我0316 21:08:42。542765矿工/工人。go :573]在块226上用0 txs 0大叔提交新工作。耗时964.2s

部署成功以后,我们可以得到合约的地址:0x 613 f 2408 babedbadd 55783 BD 60 a 893 CD 4a 89 c 0 b 9,后面会使用这个地址来实现与合约的交互,这里需要先记录下来。

稍等一段时间,再查看交易池的状态:

txpool.status

{

pending:0,

queued:0

}

交易已经成功提交了,然后我们可以停止挖矿了:

miner.stop()

1.3 与合约交互

步:首先我们找到建造/合同/地狱世界。数据中的踝肱指数的价值,通过数据压缩成一行在古英语字母或-D命令行执行:

abi=[{ 'constant': true,' inputs': [],' name': 'sayHello ',' outputs': [ { 'name': ' ',' type': 'string' } ],' payable': false,' stateMutability ' : ' pure ',' type': 'function'}]

第二步:注册合约对象:

hello=eth.contract(abi).at('0x 613 f 2408 babedbaddd d 55783 BD 60 a 893 CD 4a 89 c 0 b 9 ')

{

ab :[{

constant: true,

inputs: [],

姓名: '说你好,

outputs: [{.}],

payable: false,

状态可变性: '纯,

类型: '函数'

}],

地址: '0x 613 f 2408 babedbadd 55783 BD 60 a 893 CD 4a 89 c 0 b 9 ',

transactionHash: null,

allEvents:函数(),

sayHello:函数()

}

第三步:对象注册成功以后,就可以像正常合约那样去调用了。

hello.sayHello()

"你好,世界"

hello.sayHello()

"你好,世界"

这就是一个最基本的部署完成了个智能合约,也验证了合约确实可以运作,虽然没有实际意义,但可以帮助我们开始学习并了解智能合约

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航