查看更多文章: https://alili.tech
truffle的宠物商店是一个了解以太坊开发的一个很不错的例子.
跟着官方提供的demo与教程,可以完整的感受一下整个流程的开发.
Ganache
为了环境需要,并且快速的在本地搭建一个私有链环境.
truffle推出了一个可视化私有链客户端:
Ganache下载地址
下载之后运行,你会看到这样一个界面:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ueP8hSnx-1600174507424)(https://static.alili.tech/images/Jietu20180421-213717.jpg)]
初始化你的项目
首先我们新建一个目录,并且初始化一下项目
$ mkdir pet-shop
$ cd pet-shop
$ truffle unbox pet-shop
项目目录结构
这里只列出了重要的目录与文件
├── bs-config.json
├── contracts //合约目录
│ └── Migrations.sol //合约文件
├── migrations // 部署脚本
│ └── 1_initial_migration.js
├── package-lock.json
├── package.json
├── src // 前端代码目录
├── test // 测试代码目录
└── truffle.js // truffle配置文件
编写智能合约
在contracts/目录中,创建一个Adoption.sol文件
文件内容:
pragma solidity ^0.4.17;
contract Adoption {
address[16] public adopters; // 声明一个地址变量,用于保存领养者地址
// 领养宠物
function adopt(uint petId) public returns (uint) {
require(petId >= 0 && petId <= 15); // 确保宠物id正确,为0到15之间,
// 如果不符合条件就会回滚
//msg.sender 为调用这个函数的人的地址
adopters[petId] = msg.sender; // 保存调用这地址
return petId;
}
// 返回领养者
function getAdopters() public view returns (address[16]) {
return adopters;
}
}
编译你的智能合约
$ truffle compile
//输出
Compiling ./contracts/Adoption.sol...
Writing artifacts to ./build/contracts
这样你就会发现你的项目多了一个build文件夹,
里面存放这里刚刚写好的智能合约编译完成的json文件
部署你的智能合约
你的智能合约写好了,你可以暂且理解为你的后台代码写好了.要部署起来便于前端调用.
在你的migrations/
目录新建一个部署脚本:2_deploy_contracts.js
var Adoption = artifacts.require("Adoption")