pet-shop Box项目地址:http://truffleframework.com/boxes/pet-shop
pet-shop Box官方教程:http://truffleframework.com/tutorials/pet-shop
本文在原文基于Truffle Box中的pet-shop Box代码,使用图形化的Ganache以及插件形式的以太坊轻客户端MetaMask,编写一个去中心化的宠物商店的基础上,加入了在实际操作过程中解决遇到的问题。例如页面无法正常显示的问题。
项目背景
Pete有一个宠物店,有16只宠物,他想开发一个去中心化应用,让大家来领养宠物。
在truffle box中,已经提供了pet-shop的网站部分的代码,我们只需要编写合约及交互部分。
环境搭建
安装Node 安装 Truffle第1,2步骤请查看区块链开发(一)Truffle入门指南 安装Ganache
创建项目
建立项目目录并进入yuyangdeMacBook-Pro:~ yuyang$ mkdir pet-shop-tutorial
yuyangdeMacBook-Pro:~ yuyang$ cd pet-shop-tutorial
使用truffle unbox 创建项目yuyangdeMacBook-Pro:pet-shop-tutorial yuyang$ truffle unbox pet-shop
这一步需要等待一会。
也可以使用truffle init 来创建一个全新的项目。
项目目录结构
contracts/ 智能合约的文件夹,所有的智能合约文件都放置在这里,里面包含一个重要的合约Migrations.sol(稍后再讲)。
migrations/ 用来处理部署(迁移)智能合约 ,迁移是一个额外特别的合约用来保存合约的变化。
test/ 智能合约测试用例文件夹。
truffle.js/ 配置文件。
其他代码可以暂时不用管。
编写智能合约
智能合约承担着分布式应用的后台逻辑和存储。智能合约使用solidity编写。
在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在数组长度内
adopters[petId] = msg.sender; // 保存调用这地址
return petId;
}
// 返回领养者
function getAdopters() public view returns (address[16]) {
return adopters;
}
}
编译部署智能合约
Truffle集成了一个开发者控制台,可用来生成一个开发链用来测试和部署智能合约。
编译
Solidity是编译型语言,需要把可读的Solidity代码编译为EVM字节码才能运行。
yuyangdeMacBook-Pro:pet-shop-tutorial yuyang$ truffle compile
输出
Compiling ./contracts/Migrations.sol...
Comp