该智能合约实现一个简单的商业应用案例,即数字货币的发行与转账。在这之中一共分为三种角色:中央银行,商业银行,企业。其中中央银行可以发行一定数量的货币,企业之间可以进行相互的转账。主要实现如下的功能:
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:写入交易信息。initrequest 参数:
args[0] 银行名称
args[1] 初始化发布金额
response 参数:
{"Name":"XXX","TotalNumber":"0","RestNumber":"0","ID":"XX"}
createBankrequest 参数:
args[0] 银行名称
response 参数:
{"Name":"XXX","TotalNumber":"0","RestNumber":"0","ID":"XX"}
createCompanyrequest 参数:
args[0] 公司名称
response 参数:
{"Name":"XXX","Number":"0","ID":"XX"}
issueCoinrequest 参数:
args[0] 再次发行货币数额
response 参数:
{"FromType":"0","FromID":"0","ToType":"0","ToID":"0","Time":"XX","Number":"XX","ID":"XX"}
issueCoinToBankrequest 参数:
args[0] 商业银行ID
args[1] 转账数额
response 参数:
{"FromType":"0","FromID":"0","ToType":"1","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}
issueCoinToCprequest 参数:
args[0] 商业银行ID
args[1] 企业ID
args[2] 转账数额
response 参数:
{"FromType":"1","FromID":"XX","ToType":"2","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}
transferrequest 参数:
args[0] 转账用户ID
args[1] 被转账用户ID
args[2] 转账余额
response 参数:
{"FromType":"2","FromID":"XX","ToType":"2","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}
getBanksresponse 参数
[{"Name":"XXX","Number":"XX","ID":"XX"},{"Name":"XXX","Number":"XX","ID":"XX"},...]
getCompanysresponse 参数
[{"Name":"XXX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"},{"Name":"XXX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"},...]
getTransactionsresponse 参数
[{"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"},...]
getCenterBankresponse 参数
[{"Name":"XX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"}]
getBankByIdrequest 参数
args[0] 商业银行ID
response 参数
[{"Name":"XX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"}]
getCompanyByIdrequest 参数
args[0] 企业ID
response 参数
[{"Name":"XXX","Number":"XX","ID":"XX"}]
getTransactionByIdrequest 参数
args[0] 交易ID
response 参数
{"FromType":"XX","FromID":"XX","ToType":"XX","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}
writeCenterBankrequest 参数
CenterBank
response 参数
err nil 为成功
writeBankrequest 参数
Bank
response 参数
err nil 为成功
writeCompanyrequest 参数
Company
response 参数
err nil 为成功
writeTransactionrequest 参数
Transaction
response 参数
err nil 为成功
查询时为了兼顾读速率,将一些信息备份存放在非区块链数据库上也是一个较好的选择。