Bootstrap

宠物商店(pet-shop) 学习笔记

宠物商店(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()<
;