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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339

推荐阅读更多精彩内容

  • 2017.7.24 第一章 货币的本质与职能 第一节 货币的起源与发展 1.人類出現之初,社會生產水平極其底下,因...
    微与之期阅读 1,668评论 0 9
  • 今天,2017年2月20日,阴天,有大风,第一次收到小黑送的花。 和室友阿玉嘻嘻哈哈得插花,家里没有好看的花瓶,诺...
    Milcah_Z阅读 208评论 2 2
  • 丽江是我和你短暂地醉生梦死过的地方。每个清晨都在小客栈里睡到自然醒,手拉着手去喝一个冰凉的牦牛酸奶,手腕上一大串银...
    如果咖啡店阅读 263评论 0 2
  • 李光鑫 2017-03-11 10:40:3940 儿子正值4岁半,在到处都是大大小小屏幕的时代,看动画片在所难免...
    李光鑫简书阅读 416评论 0 1