宠物商店(pet-shop) 学习笔记
truffle 可以算是一个超级强大的 Ethereum 开发工具集, 集各种的功能集一身, 今天, 照着官方的文档, 和 手把手的教程, 完成了其中提供的一个demo.
truffle的目录结构
目录树
demo
├── build
│ └── contracts
│ ├── Migrations.json
│ └── Adoption.json
├── contracts
│ ├── Migrations.sol
│ └── Adoption.sol
├── migrations
│ └── 1_initial_migration.js
├── truffle-config.js
├── truffle.js
├── test
│ └──1_initial_migration.js
└── src
└── ...
- contract 此目录就是我们的编写的智能合约所存在的目录, 使用solidity语言编写
- migrations 此目录下是用于迁移部署合约的JS的脚本
- test 测试合约时所用的测试脚本
- src 一个前端的实现, 主要是调用 wed3 的库, 与节点服务器进行RPC
代码分析
合约代码
pragma solidity ^0.4.17;
contract Adoption {
address[16] public adopters; // 保存领养者的地址
/**func: 领养宠物 para: 领养宠物ID */
function adopt(uint petId) public returns (uint) {
require(petId >= 0 && petId <= 15); // 确保id在数组长度内
adopters[petId] = msg.sender; // 保存调用这地址
return petId; //返回当前宠物ID
}
// 返回领养者
function getAdopters() public view returns (address[16]) {
return adopters;
}
}
以上是实现宠物领养的合约代码.
- 指定编译器版本
定义 Adoption 的合约结构
contract {...}
- 定义一个存放地址的定长数组
- 定义合约函数 adopt
- Public类型, 可以被外部访问, uint参数 为调用时传入的要领养的宠物的ID, 返回值就是当前领养的宠物id
require()
用于检查变量值是否满足当前条件, 不满足条件则立即抛出异常, 并且对所有的已做修改进行回滚(revert)- 使用数组的对应的 ID index 来保存领养者的地址
- 定义合约函数
getAdopters()<