Проверять корректность партнерского кода.
На данном этапе при вызове чейнкод транзакций не осуществляется проверка корректности и существования партнерского кода. Точнее
// CommissionForTransfer compute commission based on transaction input parameters
func (txnMngr *transactionManagerImpl) CommissionForTransfer(txnArgs *TxnFundsLockInput, adapter *managerAux) (float32, error) {
// TODO: Do we need to check correctness of the partner code?
args := util.ToChaincodeArgs(GetCommissionFunction, txnArgs.PartnerCode, txnArgs.CustomerType, txnArgs.CommissionType.String())
resp := adapter.InvokeChaincode(CommissionChaincode, args, CommissionChannel)
if resp.Status != int32(shim.OK) {
errMsg := fmt.Sprintf("Error obtain commission for operation id %s, parnter code %s, due to %s", txnArgs.OperationID, txnArgs.PartnerCode, resp.Message)
logger.Error(errMsg)
return 0, errors.New(errMsg)
}
var commission commissionCC.Commission
err := json.Unmarshal(resp.Payload, &commission)
if err != nil {
errMsg := fmt.Sprintf("Failed to deserialize commission for operation id %s, parnter code %s, due to %s", txnArgs.OperationID, txnArgs.PartnerCode, resp.Message)
logger.Error(errMsg)
return 0, errors.New(errMsg)
}
cpercent, err := strconv.ParseFloat(commission.CommisionPercent, 32)
if err != nil {
errMsg := fmt.Sprintf("Failed to parse commission percent for operation id %s, parnter code %s, due to %s", txnArgs.OperationID, txnArgs.PartnerCode, resp.Message)
logger.Error(errMsg)
return 0, errors.New(errMsg)
}
return float32(cpercent), nil
}
При подсчете коммисси необходимо добавить проверку и вызывать чейнкод который оперирует информацие по партнерским организациям.