开发环境设置(Node.js/Turffle/Ethereum TestRPC)
node -v
npm -version
npm -g install truffle
npm install -g ganache-cli
初始化
mkdir Dapp
cd Dapp
mkdir truffle_test
cd truffle_test
truffle init
新Teminal:
ganache-cli
运行demo
git clone https://github.com/3of5of7/scoreboard.git
cd scoreboard
npm install lite-server --save-dev
npm run dev
使用一个智能合约,“存在以太坊(Ethereum)区块链上”
contracts/Users.sol
pragma solidity ^0.4.2;
/**
* 用户合约
**/
contract Users {
// 结构体
struct Participant {
uint id;
bytes32 name;
uint point;
}
// 统计变量
Participant[] public users;
uint userCount;
// 新增用户
function addUser(bytes32 userName, uint userPoint) returns (uint userID, bool success) {
userID = userCount++;
Participant memory newUser;
newUser.id = userID;
newUser.name = userName;
newUser.point = userPoint;
users.push(newUser);
return(userID, true);
}
// 用户列表
function getUsers() constant returns (uint[], bytes32[], uint[]) {
uint length = users.length;
uint[] memory usersID = new uint[](length);
bytes32[] memory userNames = new bytes32[](length);
uint[] memory userPoints = new uint[](length);
for (uint i = 0; i < users.length; i++) {
Participant memory showUser;
showUser = users[i];
usersID[i] = showUser.id;
userNames[i] = showUser.name;
userPoints[i] = showUser.point;
}
return(usersID, userNames, userPoints);
}
// 为用户改变点数
function plusFive(uint id) returns (bool success) {
users[id].point = users[id].point + 5;
return true;
}
}
编译与迁移
migrations/2_initial_migration.js
var Users = artifacts.require("./Users.sol");
module.exports = function(deployer) {
deployer.deploy(Users);
};
truffle compile
truffle migrate
数据交互
truffle console
truffle(development)> Users.abi //检查合约的ABI
truffle(development)> Users.address //合约在区块链(测试网络)的地址
truffle(development)> Users.deployed().then(function(instance){instance.addUser("john", 26)})
truffle(development)> Users.deployed().then(function(instance){return instance.users(0);})
truffle(development)> Users.deployed().then(function(instance){return instance.getUsers();})