示例三:數字貨幣發行與管理
簡介
該智能合約實現一個簡單的商業應用案例,即數字貨幣的發行與轉賬。在這之中一共分為三種角色:中央銀行,商業銀行,企業。其中中央銀行可以發行一定數量的貨幣,企業之間可以進行相互的轉賬。主要實現如下的功能:
初始化中央銀行及其發行的貨幣數量
新增商業銀行,同時央行並向其發行一定數量的貨幣
新增企業
商業銀行向企業轉給一定數量的數字貨幣
企業之間進行相互的轉賬
查詢企業、銀行、交易信息
主要函數
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:寫入交易信息。
數據結構設計
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
接口設計
init
initrequest 參數:
args[0] 銀行名稱
args[1] 初始化發佈金額response 參數:
{"Name":"XXX","TotalNumber":"0","RestNumber":"0","ID":"XX"}createBank
createBankrequest 參數:
args[0] 銀行名稱response 參數:
{"Name":"XXX","TotalNumber":"0","RestNumber":"0","ID":"XX"}createCompany
createCompanyrequest 參數:
args[0] 公司名稱response 參數:
{"Name":"XXX","Number":"0","ID":"XX"}issueCoin
issueCoinrequest 參數:
args[0] 再次發行貨幣數額response 參數:
{"FromType":"0","FromID":"0","ToType":"0","ToID":"0","Time":"XX","Number":"XX","ID":"XX"}issueCoinToBank
issueCoinToBankrequest 參數:
args[0] 商業銀行ID
args[1] 轉賬數額response 參數:
{"FromType":"0","FromID":"0","ToType":"1","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}issueCoinToCp
issueCoinToCprequest 參數:
args[0] 商業銀行ID
args[1] 企業ID
args[2] 轉賬數額response 參數:
{"FromType":"1","FromID":"XX","ToType":"2","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}transfer
transferrequest 參數:
args[0] 轉賬用戶ID
args[1] 被轉賬用戶ID
args[2] 轉賬餘額response 參數:
{"FromType":"2","FromID":"XX","ToType":"2","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}getBanks
getBanksresponse 參數
[{"Name":"XXX","Number":"XX","ID":"XX"},{"Name":"XXX","Number":"XX","ID":"XX"},...]getCompanys
getCompanysresponse 參數
[{"Name":"XXX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"},{"Name":"XXX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"},...]getTransactions
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"},...]getCenterBank
getCenterBankresponse 參數
[{"Name":"XX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"}]getBankById
getBankByIdrequest 參數
args[0] 商業銀行IDresponse 參數
[{"Name":"XX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"}]getCompanyById
getCompanyByIdrequest 參數
args[0] 企業IDresponse 參數
[{"Name":"XXX","Number":"XX","ID":"XX"}]getTransactionById
getTransactionByIdrequest 參數
args[0] 交易IDresponse 參數
{"FromType":"XX","FromID":"XX","ToType":"XX","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}writeCenterBank
writeCenterBankrequest 參數
CenterBankresponse 參數
err nil 為成功writeBank
writeBankrequest 參數
Bankresponse 參數
err nil 為成功writeCompany
writeCompanyrequest 參數
Companyresponse 參數
err nil 為成功writeTransaction
writeTransactionrequest 參數
Transactionresponse 參數
``` err nil 為成功 ···
其它
查詢時為了兼顧讀速率,將一些信息備份存放在非區塊鏈數據庫上也是一個較好的選擇。
Last updated
Was this helpful?