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
执行此命令时,运气不好会遇到报错:
这是因为“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项目就算是初始化完成了!
这里需要注意的几个文件:
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/
默认使用的地址是刚刚生成的第一个地址:
可以看到其中有10000个META
3、我们用此地址向第二个地址发送100个META
交易成功后,我们就可以看到,原地址少了100个META;转账功能测试成功;
到这里,Truffle框架算是搭建完成,并且使用Demo项目跑通了!