​Truffle框架的学习与使用(一)

Truffle 是一个在以太坊进行 DApp 开发的世界级开发环境、测试框架。它在使开发人员更轻松。这里有几篇博客让我们了解如何开发DApp:

使用 Truffle 开发有一以下优点:

  • 内置智能合约编译,链接,部署和二进制(文件)管理。

  • 可快速开发自动化智能合约测试框架。

  • 可脚本化、可扩展的部署和迁移框架。

  • 可管理多个不同的以太坊网络,可部署到任意数量的公共主网和私有网络。

  • 使用 ERC190 标准,使用 EthPM 和 NPM 进行包装管理。

  • 支持通过命令控制台直接与智能合约进行交互。

  • 可配置的构建管道,支持紧密集成。

  • 支持在Truffle环境中使用外部脚本运行器执行脚本。

更多的基础知识可以参考 Truffle中文文档地址 


一、安装 Truffle,并编译、部署Demo项目

我们使用truffle-webpack的安装方式安装:https://www.trufflesuite.com/boxes/webpack

1、全局安装Truffle:

npm install -g truffle

检查:

C:\WINDOWS\system32>truffle version
Truffle v5.2.4 (core: 5.2.4)
Solidity v0.5.16 (solc-js)
Node v14.16.0
Web3.js v1.2.9

2、先创建一个项目空文件夹myDapp,然后通过unbox命令,创建一个Truffle的demo项目:

truffle unbox webpack

执行此命令时,运气不好会遇到报错:

5.jpg

这是因为“raw.githubusercontent.com地址DNS污染”,解决办法:修改自己本地的host文件;

修改host后不重启电脑生效办法:

ipconfig /displaydns
ipconfig /flushdns

3、然后就可以正常执行unbox下载项目啦:

PS D:\Study\Blockchain\Truffle\myDapp> truffle unbox webpack

Starting unbox...
=================

√ Preparing to download box
√ Downloading
...
√ Cleaning up temporary files
√ Setting up box

Unbox successful, sweet!

Commands:

  Compile:              truffle compile
  Migrate:              truffle migrate
  Test contracts:       truffle test
  Run dev server:       cd app && npm run dev
  Build for production: cd app && npm run build

到这里,webpack项目就算是初始化完成了!

6.jpg

这里需要注意的几个文件:

src/下的index.html、index.js、MetaCoin.sol是一个Demo只能合约;

4、运行此项目:truffle develop

PS D:\Study\Blockchain\Truffle\myDapp> truffle develop
Truffle Develop started at http://127.0.0.1:8545/

Accounts:
(0) 0xf475c19d7bc2396187721920794343f53db60657
(1) 0x8e7536d92a97c1cbfdb572ec736d2b7840e84b71
(2) 0x28f75acab623c5877dd5d37d9b8431887f2f7c5f
(3) 0xd97558f837d0a032ca4c30250265864412530b72
(4) 0x0df3e1d228f98d7e7235ccc5c9d794e91a79039e
(5) 0x465b553d3d86c8682be58991202985431b96cf58
(6) 0x0cc0e8394052aec2c9e1e7612e12b6d12e99ee24
(7) 0xb06b024292f75f0de0146cd3ab6d6f968f8f7372
(8) 0x1e7a3faa37831194133e3beba648049983d22584
(9) 0x8516828ddf11193681c22e4b57467ddfc5321ff3

Private Keys:
(0) e763cb01f515d5abf71425386971cfab18cddebec4baedf68ce17ded9048cd6e
(1) a4eee3e2e6120b2503f98677d3b741d52c7809a0e849aee7802c5b89bdb31a74
(2) 80fdd9e8b4cb39442e3eba9fc50aae211132afb3899933326a02a51e2c9c7e99
(3) 9ad06b222107983abd08281a1d082227b180887477b7764bd92e8d404146d9a1
(4) ba86d9b040f38fbc750f73e170c70f5071587f2ccb70e19bfcda280cf79093fd
(5) 90cbdd4405588a2a5009e93cd9240cc1647fe81b79885234893da714858d1db6
(6) 038881b40fbee633bddf20338fc13fcb836d79a330079c77d9c15cf8c81a60f9
(7) 90f32d6835796beb0a545610c4ab957b5d262e78139185584caa334de8415d31
(8) ca8cd83e1a0076b7cf0ce42cbed0f5d1918a21442762f098d7495eeb3220963f
(9) 37abb2ebc4a6e59dff74819b392fa9ca4c47d0d33a0cd7d0a81404e7398a7264

Mnemonic: caution mass effort purpose color pluck unique expand balance rice divide kid

⚠️  Important ⚠️  : This mnemonic was created for you by Truffle. It is not secure.
Ensure you do not use it on production blockchains, or else you risk losing funds.

此操作会为我们创建一条本地测试链,默认有十个账号节点;

5、编译项目中的几个.sol只能合约文件:compile

truffle(develop)> compile

Compiling your contracts...
===========================
> Compiling .\contracts\ConvertLib.sol
> Compiling .\contracts\MetaCoin.sol  
> Compiling .\contracts\Migrations.sol
> Compiling .\contracts\ConvertLib.sol
> Artifacts written to D:\Study\Blockchain\Truffle\myDapp\build\contracts
> Compiled successfully using:
   - solc: 0.5.16+commit.9c3226ce.Emscripten.clang

6、部署智能合约:migrate

truffle(develop)> migrate

Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.



Starting migrations...
======================
> Network name:    'develop'
> Network id:      5777
> Block gas limit: 6721975 (0x6691b7)


1_initial_migration.js
======================

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0x936b15642ef40820563cefe04e6686d53fcc8f3239c351f42d2cbb2ad7cd50bc
   > Blocks: 0            Seconds: 0
   > contract address:    0x4a1B6279f7C5b6b662b77A158E463E89158B7e9A
   > block number:        1
   > block timestamp:     1616138579
   > account:             0xF475c19D7BC2396187721920794343F53dB60657
   > balance:             99.9967165
   > gas used:            164175 (0x2814f)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.0032835 ETH


   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:           0.0032835 ETH


2_deploy_contracts.js
=====================

   Deploying 'ConvertLib'
   ----------------------
   > transaction hash:    0xc1d1b19eda7837ad27391eceaf377fdd37dae54719fcf9f9f4a7a2bcd28ee2df
   > Blocks: 0            Seconds: 0
   > contract address:    0x6a3C55e6Fa4024Cc0C92E9F672B892920aFBC114
   > block number:        3
   > block timestamp:     1616138579
   > account:             0xF475c19D7BC2396187721920794343F53dB60657
   > balance:             99.99396028
   > gas used:            95470 (0x174ee)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.0019094 ETH


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

   Deploying 'MetaCoin'
   --------------------
   > transaction hash:    0x49bfea117a626f5ed150e1142e4bc9eec0e7e65943f78d10bd4ee2108ebcc1d9
   > Blocks: 0            Seconds: 0
   > contract address:    0x5474435467A7062D3b101E780eC93aEed91057A8
   > block number:        4
   > block timestamp:     1616138580
   > account:             0xF475c19D7BC2396187721920794343F53dB60657
   > balance:             99.98822898
   > gas used:            286565 (0x45f65)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.0057313 ETH


   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:           0.0076407 ETH


Summary
=======
> Total deployments:   3
> Final cost:          0.0109242 ETH


- Blocks: 0            Seconds: 0
- Saving migration to chain.
- Blocks: 0            Seconds: 0
- Blocks: 0            Seconds: 0
- Saving migration to chain.

这步成功后,就说明,合约已经部署到我们的测试链上了!


二、启动web前端服务、完成与合约的交互

1、启动web前端服务(新开一个终端):

PS D:\Study\Blockchain\Truffle\myDapp> cd .\app\
PS D:\Study\Blockchain\Truffle\myDapp\app> npm install
PS D:\Study\Blockchain\Truffle\myDapp\app> npm run dev
> app@1.0.0 dev D:\Study\Blockchain\Truffle\myDapp\app
> webpack-dev-server

i 「wds」: Project is running at http://localhost:8080/
i 「wds」: webpack output is served from /
i 「wds」: Content not from webpack is served from D:\Study\Blockchain\Truffle\myDapp\app\dist
i 「wdm」: Hash: 7958639988f795dcf49b
Version: webpack 4.41.2
Time: 2187ms

2、访问 http://localhost:8080/ 

默认使用的地址是刚刚生成的第一个地址:

7.jpg

可以看到其中有10000个META

3、我们用此地址向第二个地址发送100个META

8.jpg

交易成功后,我们就可以看到,原地址少了100个META;转账功能测试成功;


到这里,Truffle框架算是搭建完成,并且使用Demo项目跑通了!

jiguiquan@163.com

文章作者信息...

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐