上周我在咖啡馆调试智能合约时,邻座的小哥凑过来问:"听说区块链开发很难?"我看着他手机里闪烁的加密猫游戏界面笑了。其实只要选对工具,开发去中心化应用就像搭乐高积木——今天我就带你用Truffle这个"开发者乐高套装",亲手搭建能处理真实交易的区块链应用。
在开始建造加密城堡之前,我们需要准备三样利器:
打开终端输入这两个魔法指令:
npm install -g trufflenpm install -g ganache-cli
试着在桌面新建crypto_piggybank文件夹,这里将存放我们的存钱罐合约。输入truffle init
后,你会看到自动生成的目录结构:
contracts/ | 智能合约的家 |
migrations/ | 部署脚本的行李箱 |
test/ | 质量检测实验室 |
truffle-config.js | 项目配置说明书 |
在contracts目录新建PiggyBank.sol文件,让我们用Solidity语言编写第一个合约:
pragma solidity ^0.8.0;contract PiggyBank {address public owner;uint256 public balance;constructor {owner = msg.sender;function deposit external payable {balance += msg.value;function withdraw external {require(msg.sender == owner, "Not your piggy!");payable(owner).transfer(balance);balance = 0;}
在migrations目录创建2_deploy_contracts.js:
const PiggyBank = artifacts.require("PiggyBank");module.exports = function(deployer) {deployer.deploy(PiggyBank);};
启动Ganache后运行:
truffle compiletruffle migrate
当看到"合约地址: 0x..."的字样时,恭喜!你的数字存钱罐已经上线区块链了。
在test目录编写自动化测试:
const PiggyBank = artifacts.require("PiggyBank");contract("PiggyBank", (accounts) => {it("应该正确存取ETH", async => {const instance = await PiggyBank.deployed;await instance.deposit({value: web3.utils.toWei("1", "ether")});assert.equal(await instance.balance, web3.utils.toWei("1", "ether"));await instance.withdraw;assert.equal(await instance.balance, 0);});});
运行truffle test
时,观察终端输出的测试报告,就像看着存钱罐吐出硬币一样有趣。
在truffle-config.js中配置网络:
module.exports = {networks: {ropsten: {provider: => new HDWalletProvider(助记词",https://ropsten.infura.io/v3/你的项目ID
),network_id: 3};
记得将测试网ETH存入MetaMask,运行truffle migrate --network ropsten
后,你的合约就部署到真正的测试网络了。
窗外的霓虹灯开始闪烁,我合上笔记本准备离开咖啡馆。那个小哥正在用手机给朋友展示自己部署的存钱罐合约——区块链开发的魔法,其实就藏在日常的代码片段里。