Sample Chaincode
A transaction chaincode implements the service logic. The example transaction chaincode provided in this section is used to transfer money between users. The validity of the transaction data in the form of a ciphertext is verified using the homomorphic encryption library to detect unauthorized operations, if any. This chaincode implements the functions of balance initialization, balance query, and money transfer.
Initializing the Balance
After a user is registered successfully, the balance of the user must be initialized. The default value is 0.
- Input
Parameter
Type
Description
Mandatory
PubKey
string
Public key
Yes
Balance
string
Initial balance
Yes
- Processing
Invoking the ValidateInitBalance API to verify the validity of the balance range for endorsement
PubKey := string(args[0]) BalanceInfo := string(args[1]) //PubKey := string(args[2]) hashPubkey, err := t.calcAddr(PubKey) logger.Debug("encrypt initial balance") //validate balance cipherBalance,err := pswapi_cc.ValidateInitBalance(BalanceInfo,PubKey) if err != nil { logger.Error("fail to Validate InitBalance ") return shim.Error("fail toValidate InitBalance") }
- Output
Parameter
Type
Description
newCipherBalance
string
Balance ciphertext
Querying the Balance
The balance can be queried using the account address. For details, see the queryBalance API of the transaction_demo.
The following table lists the parameters of the queryBalance API.
- |
Parameter |
Type |
Description |
---|---|---|---|
Input |
addr |
string |
Account address |
Output |
cipherbalance |
string |
Ciphertext of the account balance |
Output |
err |
error |
Error message |
Money Transfer
- Input
Parameter
Type
Description
Mandatory
AddrA
string
Address of user A (payer)
Yes
AddrB
string
Address of user B (payee)
Yes
txinfo
String
Transaction information PrepareTxInfo
Yes
- Processing
- Obtain the current balances of users A and B (cipherBalanceAKeyABlock and cipherBalanceBKeyBBlock) from the ledger based on the account addresses.
- Verify the validity of the certificates.
newCipherBalanceA,newCipherBalanceB,newCipherTxA,newCipherTxB, err := pswapi_cc.ValidateTxInfo(txInfo, cipherBalanceAKeyABlock, cipherBalanceBKeyBBlock) if err != nil { logger.Error("fail to validate trans information") return shim.Error("fail to validate trans information") }
- Provide the updated balances (ciphertext).
The ledger content of a service needs to be customized. The encrypted balance amount is added to the users' ledgers. A storage structure is defined in the demo. After the storage structure is saved, a transaction record object is saved in JSON format.
type TransRecord struct { FromAddr string ToAddr string TXType string Balance string TX string remark string }
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot