推荐solidity官网(有一些基础合约用上手):http://solidity.readthedocs.io/en/v0.4.24/introduction-to-smart-contracts.html#subcurrency-example
JSVM环境下,SimpleStorage合约测试:
JSVM环境是Remix自己生成一个私有链,便于开发者测试智能合约。上回书说到rpc是将智能合约写到私有链的必需服务,后面会提到。
使用第二个账户创建合约:
存储信息:
查看信息:
使用testrpc测试Coin:
首先安装testrpc:
EtherumJS TestRPC是一个完整的在内存中的区块链仅仅存在于你开发的设备上。它在执行交易时是实时返回,而不等待默认的出块时间,这样你可以快速验证你新写的代码,当出现错误时,也能即时反馈给你。命令行输入如下内容:
npm install -g ethereumjs-testrpc
coin合约:
打开testrpc:临时随机生成一个有10个账户的私有链,关闭testrpc就会消失。testrpc和javaVm的好处在于,挖矿是自动的便于对智能合约做测试
运行环境选择web3:web3是连接到实际存在的私有链中。testrpc是虚拟出一个私有链。默认的地址是:http://localhost:8545
创建合约:
转账:
自写TraceSource.sol商品溯源合约。连接本地测试:
pragma solidity ^0.4.0;
contract traceSource {
// 订单信息
struct Orders {
address isOK;
uint startID;
uint endID;
}
address [] public companys;
// 发起企业
address public persentCompany;
// 下游企业
address private nextCompany;
// 整条供应链的订单链
Orders [] public ordersLink;
//订单链指针
uint16 private orderNum=0;
uint16 public test=0;
constructor(uint16 length) public {
persentCompany = msg.sender;
for(uint16 i=0;i<length;i++){
if(i==0){
companys.push(msg.sender);
}
else{
companys.push(address(0));
}
ordersLink.push(Orders({
isOK: address(0),
startID: 0,
endID:0
}));
}
}
// 提交订单
function subOrder(address next,uint sID,uint eID) public {
if( (persentCompany != msg.sender) || (sID < 0) || (eID<0) || (next==address(0)) ){test++; return;}
nextCompany=next;
ordersLink[orderNum].startID=sID;
ordersLink[orderNum].endID=eID;
}
// 接受订单
function acceptOrder() public {
if( (nextCompany != msg.sender) || (nextCompany == address(0)) ){test++; return;}
companys[orderNum+1]=msg.sender;
ordersLink[orderNum].isOK=nextCompany;
persentCompany=nextCompany;
orderNum++;
}
// 查看订单链数量
function getOrdersLinkNum() public view
returns (uint16 num)
{
num=orderNum;
}
function geCompany() public view
returns (address [] cs)
{
cs=companys;
}
// 查看当前企业
// 查看当前订单开始id
function getPersentOrderStartID() public view
returns (uint startID)
{
startID =ordersLink[orderNum-1].startID;
}
// 查看当前订单结束id
function getPersentOrderEndID() public view
returns (uint endtID)
{
endtID =ordersLink[orderNum-1].endID;
}
}
按上回书的方式打开rpc:
连接成功:可能是ide的坑,用户列表莫名奇妙重复了一遍
实例化:建一个供应链长度10的合约。
Ide不能挖矿:
Pxtool中的合约:
上链后:
当前公司为创建合约公司:
下家为0:
合约链中没有订单:
上传订单:参数下家address,产品起始码,产品结束码
下家改变为指定下家,只有指定下家才能接受订单
指定下家接受订单:
当前公司改变:
订单链上出现,已达成的订单
查询订单信息: