区块链智能合约精选
# 区块链智能合约精选
标签(空格分隔): 工作任务
---
## 农业乳制品区块链
#### 奶牛场
1. 添加奶牛场
2. 添加奶牛
3. 删除奶牛
4. 添加操作1为喂养 2为检疫
5. 挤奶
6. 桶发送到工厂
7. 工厂确认奶桶是否接受,如果是确认接受会立即向工厂同步奶桶信息
8. 查看工厂待收的奶桶
9. 获取操作历史
10. 获取数据
11. 存入数据
#### Machining Chaincode
1. 添加加工厂
1. 添加奶桶
1. 打包牛奶
1. 添加奶桶操作
1. 牛奶送到销售
1. 销售终端确认牛奶是否接受,如果是确认接受会立即向销售终端同步牛奶信息
1. 查看销售终端待收的牛奶
1. 获取操作历史
1. 获取数据
1. 存入数据
#### Salesterminal Chaincode
1. 添加销售终端
1. 添加奶桶
1. 添加操作
1. 获取操作历史
1. 获取溯源操作历史
1. 获取数据
1. 存入数据
## erc20 (chaincode实现erc20标准的代币)
用Hyperledger Fabric开发ERC20标准的代币
利用ca身份用户名作为代币地址(通过stub.GetCreator获取)
实现ERC20的标准的所有方法
###初始化
1. 检查
1. 添加代币
1. 创建人
1. 拥有者初始化拥有所有代币
### 执行
1. 获取token信息 tokenInfo
1. 输入地址,可以获取该地址代币的余额 balanceOf
1. 挖矿 minter
1. 调用transfer函数将自己的token转账给to地址,value为转账个数 transfer
1. 实现账户的冻结和解冻 (true 冻结,false 解冻)freezeAccount
1. 转移拥有者transferOwner
1. 批准spender账户从自己的账户转移value个token。可以分多次转移approve
1. 与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。 transferFrom
1. 返回spender还能提取sponsor的token的个数 allowance
1. 增加spender账户从自己的账户转移value个token。可以分多次转移
increaseAllowance
1. 减少spender账户从自己的账户转移value个token。可以分多次转移
decreaseAllowance
1. 销毁代币burn
##云证
代码
type CloudCertificate struct {
CloudCardNumber string `json:"cloudCardNumber"` //云证编号
CloudCardPerson string `json:"cloudCardPerson"` //存证方
CloudCardPlatform string `json:"cloudCardPlatform"` //传证平台
Time int64 `json:"time"` //存证时间
BlockNumber string `json:"blockNumber"` //存证区块号
CloudCardHash string `json:"cloudCardHash"` //存证hash
FileType string `json:"fileType"` //文件类型
FileLabel string `json:"fileLabel"` //文件标签
FileName string `json:"fileName"` //文件名
FileAddress string `json:"fileAddress"` //下载地址
}
1. 添加证据addCard
1. 根据参数获取存证getList
1. 获取一条存证get
## 投票智能合约VoteChaincode
1. 投票VoteUser
1. 获取某人投票结果getUserVote
## 积分类型的智能合约实现
模仿以太坊ERC20规范的Hyperledger Fabric 实现Token通证案例
借用以太坊思维,将以太坊代币合约搬到 hyperledger 上,一样可以实现代币的功能,这个代币除了不能上交易所,基本满足我们替代积分系统的需求,在超级账本上实现类似以太坊的代币转账功能。
合约实现代币转账,额度查询,增发代币,冻结账号,锁仓等等服务,功能与 ERC20 Token 相仿。合约实例化所有代币打入了 coinbase 账号,分发代币需要使用转账功能从 coinbase 想普通账号转账。普通账号消费可以在将代币转到 coinbase 账号中,这样就完成了代币流通,形成一个闭环。
这个合约用户可以创建多套代币,Args":["Token" 的第一参数 Token就是代币名称,第二参数为初始化供应总额}
peer chaincode invoke -C myc -n token -c '{"function":"initLedger","Args":["Apple","水果币","1000000"]}'
peer chaincode invoke -C myc -n token -c '{"function":"initLedger","Args":["Token","蔬菜币","1000000"]}'
peer chaincode invoke -C myc -n token -c '{"function":"initLedger","Args":["Oil","粮油币","1000000"]}'
这个方案仍有不足之处,作者还不清楚如果用户上线是多少,达到临界值后,Hyperledger Fabric 无法在提供服务。
可能 chaincode_example02 做法更靠谱,就是不用 map 保存数据,将每个用户存储在 State 数据上。这里需要创建多套代币,所以使用了一个key 来存储所有账号。如果像 chaincode_example02 那样就需要部署多个 chaincode 在 channel 中。管理起来比较复杂。