HyperLedger Fabric 1.0 智能合约开发-数字货币发行和管理

1.简介:

该智能合约实现一个简单的商业应用案例,即数字货币的发行与转账。在这之中一共分为三种角色:中央银行,商业银行,企业。其中中央银行可以发行一定数量的货币,企业之间可以进行相互的转账。 该设计架构来源于:https://yeasy.gitbooks.io/blockchain_guide/app_dev/chaincode_example03.html

2.主要实现如下的功能:

初始化中央银行及其发行的货币数量 新增商业银行,同时央行并向其发行一定数量的货币 新增企业 商业银行向企业转给一定数量的数字货币 企业之间进行相互的转账 查询企业、银行、交易信息

3.主要函数

init:初始化中央银行,并发行一定数量的货币;
invoke:调用合约内部的函数;
query:查询相关的信息;
createBank:新增商业银行,同时央行向其发行一定数量的货币;
createCompany:新增企业;
issueCoin:央行再次发行一定数量的货币(归于交易);
issueCoinToBank:央行向商业银行转一定数量的数字货币(归于交易);
issueCoinToCp:商业银行向企业转一定数量的数字货币(归于交易行为);
transfer:企业之间进行相互转账(归于交易行为);
getCompanys:获取所有的公司信息,如果企业个数大于10,先访问前10个;
getBanks:获取所有的商业银行信息,如果商业银行个数大于10,先访问前 10 个
getTransactions:获取所有的交易记录 如果交易个数大于10,先访问前 10 个;
getCompanyById:获取某家公司信息;
getBankById:获取某家银行信息;
getTransactionBy:获取某笔交易记录;
writeCenterBank:修改央行信息;
writeBank:修改商业银行信息;
writeCompany:修改企业信息;
writeTransaction:写入交易信息。

4.数据结构设计

centerBank 中央银行

Name:名称
TotalNumber:发行货币总数额
RestNumber:账户余额
ID:ID固定为 0
bank 商业银行
Name:名称
TotalNumber:收到货币总数额
RestNumber:账户余额
ID:银行 ID
company 企业
Name:名称
Number:账户余额
ID:企业 ID
transaction 交易内容
FromType:发送方角色 //centerBank:0,Bank:1,Company:2
FromID:发送方 ID
ToType:接收方角色 //Bank:1,Company:2
ToID:接收方 ID
Time:交易时间
Number:交易数额
ID:交易 ID

5.接口设计

init
request 参数:
args[0] 银行名称
args[1] 初始化发布金额
response 参数:
{"Name":"XXX","TotalNumber":"0","RestNumber":"0","ID":"XX"}
createBank
request 参数:
args[0] 银行名称
response 参数:
{"Name":"XXX","TotalNumber":"0","RestNumber":"0","ID":"XX"}
createCompany
request 参数:
args[0] 公司名称
response 参数:
{"Name":"XXX","Number":"0","ID":"XX"}
issueCoin
request 参数:
args[0] 再次发行货币数额
response 参数:
{"FromType":"0","FromID":"0","ToType":"0","ToID":"0","Time":"XX","Number":"XX","ID":"XX"}
issueCoinToBank
request 参数:
args[0] 商业银行ID
args[1] 转账数额
response 参数:
{"FromType":"0","FromID":"0","ToType":"1","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}
issueCoinToCp
request 参数:
args[0] 商业银行ID
args[1] 企业ID
args[2] 转账数额
response 参数:
{"FromType":"1","FromID":"XX","ToType":"2","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}
transfer
request 参数:
args[0] 转账用户ID
args[1] 被转账用户ID
args[2] 转账余额
response 参数:
{"FromType":"2","FromID":"XX","ToType":"2","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}
getBanks
response 参数
[{"Name":"XXX","Number":"XX","ID":"XX"},{"Name":"XXX","Number":"XX","ID":"XX"},...]
getCompanys
response 参数
[{"Name":"XXX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"},{"Name":"XXX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"},...]
getTransactions
response 参数
[{"FromType":"XX","FromID":"XX","ToType":"XX","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"},{"FromType":"XX","FromID":"XX","ToType":"XX","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"},...]
getCenterBank
response 参数
[{"Name":"XX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"}]
getBankById
request 参数
args[0] 商业银行ID
response 参数
[{"Name":"XX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"}]
getCompanyById
request 参数
args[0] 企业ID
response 参数
[{"Name":"XXX","Number":"XX","ID":"XX"}]
getTransactionById
request 参数
args[0] 交易ID
response 参数
{"FromType":"XX","FromID":"XX","ToType":"XX","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}
writeCenterBank
request 参数
CenterBank
response 参数
err  nil 为成功
writeBank
request 参数
Bank
response 参数
err  nil 为成功
writeCompany
request 参数
Company
response 参数
err  nil 为成功
writeTransaction
request 参数
Transaction
response 参数
 err nil 为成功 

我是按照这个架构来实现了一个数字货币发行与管理的智能合约的。 代码链接如下: https://github.com/HeartWillGo/MySmartContract.git

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一块探索区块链

基于Java语言构建区块链(一)—— 基本原型

区块链技术是一项比人工智能更具革命性的技术,人工智能只是提高了人类的生产力,而区块链则将改变人类社会的生产关系,它将会颠覆我们人类社会现有的协作方式。了解和掌握...

6415
来自专栏区块链大本营

V神绞尽脑汁开发Vyper,Python、Solidity要失宠?十分钟,看完这份12岁儿童都能看懂的智能合约指南,你就明白了…

全新的以太坊语言Vyper已经发布,并在社交媒体上引起热议。Vyper是由废弃语言Serpent升级而来,为开发者们提供了可以替代Solidity语言的一种选择...

1363
来自专栏烙馅饼喽的技术分享

记一个脚本解释器的开发

最近可以有1个月左右的空闲,可以稍微整理一下这个脚本解释器的开发过程。 一、缘由   2014年左右,我们使用AIR技术,开发了一个3D战争类型的手游。那时候手...

4027
来自专栏区块链大本营

当智能合约安全遇见《海上钢琴师》,自由与限制应是怎样的关系?

自1995年尼克萨博第一次提出智能合约理念以来,智能合约的功能延展越来越迅速,代码逻辑功能也越来越复杂。

853
来自专栏懂啵的蟒络空间

哈希现金(Hashcash)与“工作量证明”

“哈希现金(Hashcash)是一种用于防止垃圾电子邮件和拒绝服务攻击的工作量证明系统,最近以其在比特币(以及其他加密货币)挖矿算法中的应用而闻名,由Adam ...

53010
来自专栏小樱的经验随笔

【请您听我说】PHP语法特点的一些看法

一、基本认识   PHP是干什么的?百度百科上提到说:PHP就是一门脚本语言,开发用的,相信这个你们只要去搜一下,就会有一大堆关于PHP概念的解释。   相信我...

3656
来自专栏web前端教室

javascript ES6 初次相见

JS的ES6网上也热炒了好久了, 我一直也没怎么太细看, 今天想起来就写个东西, 也为分享,也为学习。 我喜欢接地气一点,所以网上的那些新名词我就不写了, 就写...

1867
来自专栏区块链大本营

继承变量覆盖及构造函数失配,竟然会导致这些漏洞

区块参数作为区块属性的数据,对于挖掘区块的矿工来说,并不具有完全的随机性,因此将其作为随机数生成的依据是有局限性和危险性的。而以太坊本身又没有提供类似于传统语言...

972
来自专栏企鹅号快讯

python中的时间处理大总结

北京 上海巡回站 | NVIDIA DLI深度学习培训 2018年1月26/1月12日 ? NVIDIA 深度学习学院 带你快速进入火热的DL领域 正文共485...

24110
来自专栏数据结构与算法

cf1043C. Smallest Word(贪心)

这题打cf的时候真的是脑残,自己造了个abcdad的数据开心的玩了半天一脸懵逼。。。最后还好ycr大佬给了个思路不然就凉透了。。。

641

扫码关注云+社区

领取腾讯云代金券