1.簡介:
該智能合約實現(xiàn)一個簡單的商業(yè)應用案例,即數(shù)字貨幣的發(fā)行與轉賬。在這之中一共分為三種角色:中央銀行,商業(yè)銀行,企業(yè)。其中中央銀行可以發(fā)行一定數(shù)量的貨幣,企業(yè)之間可以進行相互的轉賬。
該設計架構來源于:https://yeasy.gitbooks.io/blockchain_guide/app_dev/chaincode_example03.html
2.主要實現(xiàn)如下的功能:
初始化中央銀行及其發(fā)行的貨幣數(shù)量
新增商業(yè)銀行,同時央行并向其發(fā)行一定數(shù)量的貨幣
新增企業(yè)
商業(yè)銀行向企業(yè)轉給一定數(shù)量的數(shù)字貨幣
企業(yè)之間進行相互的轉賬
查詢企業(yè)、銀行、交易信息
3.主要函數(shù)
init:初始化中央銀行,并發(fā)行一定數(shù)量的貨幣;
invoke:調用合約內部的函數(shù);
query:查詢相關的信息;
createBank:新增商業(yè)銀行,同時央行向其發(fā)行一定數(shù)量的貨幣;
createCompany:新增企業(yè);
issueCoin:央行再次發(fā)行一定數(shù)量的貨幣(歸于交易);
issueCoinToBank:央行向商業(yè)銀行轉一定數(shù)量的數(shù)字貨幣(歸于交易);
issueCoinToCp:商業(yè)銀行向企業(yè)轉一定數(shù)量的數(shù)字貨幣(歸于交易行為);
transfer:企業(yè)之間進行相互轉賬(歸于交易行為);
getCompanys:獲取所有的公司信息,如果企業(yè)個數(shù)大于10,先訪問前10個;
getBanks:獲取所有的商業(yè)銀行信息,如果商業(yè)銀行個數(shù)大于10,先訪問前 10 個
getTransactions:獲取所有的交易記錄 如果交易個數(shù)大于10,先訪問前 10 個;
getCompanyById:獲取某家公司信息;
getBankById:獲取某家銀行信息;
getTransactionBy:獲取某筆交易記錄;
writeCenterBank:修改央行信息;
writeBank:修改商業(yè)銀行信息;
writeCompany:修改企業(yè)信息;
writeTransaction:寫入交易信息。
4.數(shù)據(jù)結構設計
centerBank 中央銀行
Name:名稱
TotalNumber:發(fā)行貨幣總數(shù)額
RestNumber:賬戶余額
ID:ID固定為 0
bank 商業(yè)銀行
Name:名稱
TotalNumber:收到貨幣總數(shù)額
RestNumber:賬戶余額
ID:銀行 ID
company 企業(yè)
Name:名稱
Number:賬戶余額
ID:企業(yè) ID
transaction 交易內容
FromType:發(fā)送方角色 //centerBank:0,Bank:1,Company:2
FromID:發(fā)送方 ID
ToType:接收方角色 //Bank:1,Company:2
ToID:接收方 ID
Time:交易時間
Number:交易數(shù)額
ID:交易 ID
5.接口設計
init
request 參數(shù):
args[0] 銀行名稱
args[1] 初始化發(fā)布金額
response 參數(shù):
{"Name":"XXX","TotalNumber":"0","RestNumber":"0","ID":"XX"}
createBank
request 參數(shù):
args[0] 銀行名稱
response 參數(shù):
{"Name":"XXX","TotalNumber":"0","RestNumber":"0","ID":"XX"}
createCompany
request 參數(shù):
args[0] 公司名稱
response 參數(shù):
{"Name":"XXX","Number":"0","ID":"XX"}
issueCoin
request 參數(shù):
args[0] 再次發(fā)行貨幣數(shù)額
response 參數(shù):
{"FromType":"0","FromID":"0","ToType":"0","ToID":"0","Time":"XX","Number":"XX","ID":"XX"}
issueCoinToBank
request 參數(shù):
args[0] 商業(yè)銀行ID
args[1] 轉賬數(shù)額
response 參數(shù):
{"FromType":"0","FromID":"0","ToType":"1","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}
issueCoinToCp
request 參數(shù):
args[0] 商業(yè)銀行ID
args[1] 企業(yè)ID
args[2] 轉賬數(shù)額
response 參數(shù):
{"FromType":"1","FromID":"XX","ToType":"2","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}
transfer
request 參數(shù):
args[0] 轉賬用戶ID
args[1] 被轉賬用戶ID
args[2] 轉賬余額
response 參數(shù):
{"FromType":"2","FromID":"XX","ToType":"2","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}
getBanks
response 參數(shù)
[{"Name":"XXX","Number":"XX","ID":"XX"},{"Name":"XXX","Number":"XX","ID":"XX"},...]
getCompanys
response 參數(shù)
[{"Name":"XXX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"},{"Name":"XXX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"},...]
getTransactions
response 參數(shù)
[{"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 參數(shù)
[{"Name":"XX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"}]
getBankById
request 參數(shù)
args[0] 商業(yè)銀行ID
response 參數(shù)
[{"Name":"XX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"}]
getCompanyById
request 參數(shù)
args[0] 企業(yè)ID
response 參數(shù)
[{"Name":"XXX","Number":"XX","ID":"XX"}]
getTransactionById
request 參數(shù)
args[0] 交易ID
response 參數(shù)
{"FromType":"XX","FromID":"XX","ToType":"XX","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}
writeCenterBank
request 參數(shù)
CenterBank
response 參數(shù)
err nil 為成功
writeBank
request 參數(shù)
Bank
response 參數(shù)
err nil 為成功
writeCompany
request 參數(shù)
Company
response 參數(shù)
err nil 為成功
writeTransaction
request 參數(shù)
Transaction
response 參數(shù)
err nil 為成功
我是按照這個架構來實現(xiàn)了一個數(shù)字貨幣發(fā)行與管理的智能合約的。
代碼鏈接如下:
https://github.com/HeartWillGo/MySmartContract.git