以太坊环境搭建(Winodws版)3

上一篇链接: https://www.jianshu.com/p/262615eb62a3

4、Ganache+Truffle创建智能合约

前面2个小钱包,可以互相连通,转账了,但是我们还需要定制功能,也就是发布智能合约

这里我们用Ganache来创建账户、监测测试

 1、安装Ganache

Ganache是一个测试客户端,基于本地内存执行的,拥有良好的界面,他能对Transation立即执行,迅速的创建和调用自己编写的智能合约,提升测试效率。

ganache的使用:

启动会自动创建私有链,在这个链中为你声明了10个拥有100个eth的账户,你可以通过其RPChttp://127.0.0.1:7545来连接这个链,用来进行操作

优点:就是你不用自己进行什么配置,简单

缺点:在上面进行的所有操作,在下次重新启动时就会被清空,不想自己配置的私有链,数据都保存在本地

Ganache 也是一个Javascript编写的Nodejs项目,Linux 系统 安装方式: npm install -g truffle

windows 环境下可以直接进行下载安装,下载地址如下:这个地址很慢,建议从别的网站下载

  https://github.com/trufflesuite/ganache/releases

下载安装后打开,会给我们创建10个账号,界面如下:

还记得我们一开始创建创世块,启动客户端,用personal.newAccount("123456")创建的账号吗?没错这个客户端直接帮我们建了10个

现在将我们修改Ganache端口port和NetworkID:4528988,注意NetworkID不要和之前一样,否则会影响后面的测试,开启自动挖矿

2、使用小狐狸连接Ganache

切换到8489端口

使用1号账户的私钥登录小狐狸,

给第2个账户发送10块,这个传输会立即完成,不像我们之前需要手动开启挖矿,等待几秒。

可以看到传输的信息

3、安装Truffle,部署智能合约

Truffle是现在比较流行的一个Solidity智能合约开发框架,是使用Javascript编写的Nodejs项目。

truffle的安装需要首先装有:nodejs、npm、ganache和truffle。

使用如下命令安装 Truffle:

// 如果淘宝镜像连不上,需要更换为原始镜像

> npm config set registry https://registry.npmjs.org/

> npm install -g ganache-cli

> npm install -g truffle

// 查看 Truffle 版本

> truffle version

创建测试工程:新建文件夹,执行命令创建工程。

网上提供了2种方式,推荐第2种,淘宝镜像下载不了,需要更好到初始镜像,所以我第一次下载用的第3种,git的方式下载

1、truffle init //初始化 空 Truffle 工程,此处我们使用下面这种方式初始化

2、truffle unbox webpack//下载metacoin 的示例代码,如果使用这种方法则不用建立空工程

亲测好用,不过本文的后面测试还是用的第2条命令

3、npm install -g truffle-expect truffle-config web3

下载完成后,可以用我们喜欢的编译器打开,这里我用的是VS Code

修改truffle-config.js, 让端口设置和Ganache一致

执行命令

// 编译

> truffle compile

// 部署

> truffle migrate

// 测试

> truffle test


如果合约更新看不到打印信息,需要加参数--reset

truffle migrate --reset

truffle migrate[--reset][--f <number>][--to <number>][--network <name>][--compile-all][--verbose-rpc][--dry-run][--interactive]

除非指定,否则将从上次完成的迁移开始。有关详细信息,请参阅(迁移)合约部署 。

选项:

--reset: 从头开始运行所有迁移,而不是从上次完成的迁移中运行。

--f <number>: 从特定的迁移中运行合约。该数字指的是迁移文件的前缀。

--to <number>: 运行合约到特定的迁移。该数字指的是迁移文件的前缀。

--network <name>: 指定要使用的网络,网络名称必须存在于配置中。

--compile-all: 编译所有合约,而不是智能地选择需要编译的合约。

--verbose-rpc: 记录Truffle和以太坊客户端之间的通信日志。

--dry-run: 分叉(fork - 复制)指定的网络并仅执行测试迁移。

--interactive: 在 dry run 之后,提示确认用户是否要继续。

下面是执行成功结果

D:\Program Files\Geth\Truffle>truffle compile

Compiling your contracts...

===========================

> Compiling .\contracts\ConvertLib.sol

> Artifacts written to D:\Program Files\Geth\Truffle\build\contracts

> Compiled successfully using:

   - solc: 0.5.12+commit.7709ece9.Emscripten.clang

D:\Program Files\Geth\Truffle>

D:\Program Files\Geth\Truffle>truffle migrate

Compiling your contracts...

===========================

> Compiling .\contracts\ConvertLib.sol

> Artifacts written to D:\Program Files\Geth\Truffle\build\contracts

> Compiled successfully using:

   - solc: 0.5.12+commit.7709ece9.Emscripten.clang

Starting migrations...

======================

> Network name:    'development'

> Network id:      4528988

> Block gas limit: 0x6691b7

1_initial_migration.js

======================

   Deploying 'Migrations'

   ----------------------

   > transaction hash:    0x3ddd44ce6b44d94156d06a6046f62f7f3a85791879fb687692a3b5c089734885

   > Blocks: 0            Seconds: 0

   > contract address:    0xf1EE2F4618abF1229f84a94daaaF2EfA933ad884

   > block number:        2

   > block timestamp:     1577353142

   > account:             0x25c2B80cfb76377d818F12F3E15AE5035Bd9987F

   > balance:             89.99451518

   > gas used:            263741

   > gas price:           20 gwei

   > value sent:          0 ETH

   > total cost:          0.00527482 ETH

   > Saving migration to chain.

   > Saving artifacts

   -------------------------------------

   > Total cost:          0.00527482 ETH

2_deploy_contracts.js

=====================

   Deploying 'ConvertLib'

   ----------------------

   > transaction hash:    0xea47a933227c74ad1209d5a671baa2e2f6d19b937c877c55561494b997e4e72d

   > Blocks: 0            Seconds: 0

   > contract address:    0x3c82bd5bf546De4A082D6959877b186B5aE7bdee

   > block number:        4

   > block timestamp:     1577353142

   > account:             0x25c2B80cfb76377d818F12F3E15AE5035Bd9987F

   > balance:             89.99155524

   > gas used:            105974

   > gas price:           20 gwei

   > value sent:          0 ETH

   > total cost:          0.00211948 ETH

   Linking

   -------

   * Contract: MetaCoin <--> Library: ConvertLib (at address: 0x3c82bd5bf546De4A082D6959877b186B5aE7bdee)

   Deploying 'MetaCoin'

   --------------------

   > transaction hash:    0xf76ebd8fbcdda92733553659377daf2f7f23631c6a05508b519ba6a4f0c375f3

   > Blocks: 0            Seconds: 0

   > contract address:    0xa63784460D45a944d5F75c7e40e3a367A4a43233

   > block number:        5

   > block timestamp:     1577353142

   > account:             0x25c2B80cfb76377d818F12F3E15AE5035Bd9987F

   > balance:             89.9847413

   > gas used:            340697

   > gas price:           20 gwei

   > value sent:          0 ETH

   > total cost:          0.00681394 ETH

   > Saving migration to chain.

   > Saving artifacts

   -------------------------------------

   > Total cost:          0.00893342 ETH

Summary

=======

> Total deployments:   3

> Final cost:          0.01420824 ETH

D:\Program Files\Geth\Truffle>truffle test

Using network 'development'.

Compiling your contracts...

===========================

> Compiling .\contracts\ConvertLib.sol

> Compiling .\test\TestMetacoin.sol

  TestMetacoin

    √ testInitialBalanceUsingDeployedContract (77ms)

    √ testInitialBalanceWithNewMetaCoin (122ms)

  Contract: MetaCoin

    √ should put 10000 MetaCoin in the first account

    √ should call a function that depends on a linked library (49ms)

    √ should send coin correctly (134ms)

  5 passing (7s)

D:\Program Files\Geth\Truffle>

去Ganache上看一下运行结果:

●  Accounts标签:第一个账户里ETH略有减少,因为交易消耗了gas

●  Blocks标签:Ganache是自动挖矿,生成了6个新区块,每个区块里有一个交易

●  Transactions标签:有6笔新交易,可以点开看交易详情

●  Logs标签:显示交易和挖矿日志

至此合约的创建与测试已完成。

点开一个交易记录

 最后使用如下命令启动 刚刚下载webpack 示例代码

npm run dev

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容