一.项目背景
Pete 有一个宠物店,有 16 只宠物,他想开发一个去中心化应用,让大家来领养宠物。
在 truffle box 中,已经提供了 pet-shop 的网站部分的代码,我们只需要编写合约及交互部分。
二.环境搭建
- 安装 Node
访问nodejs官网(https://nodejs.org/en/)选择合适,我选择是mac的,安装完成后输入node -v
查看即可 - 安装 Truffle :
npm install -g truffle
- 安装 Ganache
搜索一下下载版本即可
三创建项目
1.建立项目目录并进入
mkdir pet-shop-tutorial
![cd pet-shop-tutorial](https://img-blog.csdnimg.cn/20200802182719766.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTY5NTkx,size_16,color_FFFFFF,t_70)
2.使用 truffle unbox 创建项目
truffle unbox pet-shop
出现
Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!
Commands:
Compile: truffle compile
Migrate: truffle migrate
Test contracts: truffle test
Run dev server: npm run dev
则说明成功启动项目,这一步需要等待一会。
四.项目目录结构
contracts/
智能合约的文件夹,所有的智能合约文件都放置在这里,里面包含一个重要的合约 Migrations.sol(稍后再讲)
migrations/
用来处理部署(迁移)智能合约 ,迁移是一个额外特别的合约用来保存合约的变化。
test/
智能合约测试用例文件夹
truffle.js/
配置文件
五 编写智能合约
在 contracts 目录下,添加合约文件 Adoption.sol
pragma solidity ^0.5.0;
contract Adoption {
address[16] public adopters; // 保存领养者的地址
// 领养宠物
function adopt(uint petId) public returns (uint) {
require(petId >= 0 && petId <= 15); // 确保id在数组长度内
adopters[petId] = msg.sender; // 保存调用这地址
return petId;
}
// 返回领养者
function getAdopters() public view returns (address[16] memory) {
return adopters;
}
}
六.编译部署智能合约
编译
dapp 的根目录 pet-shop-tutorial 下
输入
truffle compile
完成后输出
Compiling ./contracts/Adoption.sol...
Writing artifacts to ./build/contracts
部署
编译之后,就可以部署到区块链上。
在 migrations 文件夹下已经有一个 1_initial_migration.js
部署脚本,用来部署 Migrations.sol 合约。
Migrations.sol 用来确保不会部署相同的合约。
现在我们来创建一个自己的部署脚本 2_deploy_contracts.js
var Adoption = artifacts.require("Adoption");
module.exports = function(deployer) {
deployer.deploy(Adoption);