Commit 2e5b0e74 authored by Artem Maksimov's avatar Artem Maksimov
Browse files

Revert "Merge branch 'feature/cryp-776' into 'develop'"

This reverts merge request !51
1 merge request!52Revert "Merge branch 'feature/cryp-776' into 'develop'"
Showing with 69 additions and 82 deletions
+69 -82
......@@ -179,7 +179,7 @@ func (this *TransactionManagerImpl) depositBitcoinFundsTransaction(bitcoinRecord
operationId := fmt.Sprintf("%s.%s", inAccountInfo.AccountID, bitcoinRecord.Txid)
// ввод средст пользователю
depositTxs, err := this.depositAmount(internalUserAccountInfoForAddCryptocurrency, amountPlain, operationId)
transactionAmountRecords, err := this.depositAmount(internalUserAccountInfoForAddCryptocurrency, amountPlain, operationId)
if err != nil {
return nil, err
}
......@@ -196,16 +196,17 @@ func (this *TransactionManagerImpl) depositBitcoinFundsTransaction(bitcoinRecord
}
if commissionAmount.Num.IsZero() {
return depositTxs, nil
} else {
// снятие комиссии за ввод средств
commissionTxs, err := this.depositCommission(internalUserAccountInfoForAddCryptocurrency, operationId, commissionAmount)
if err != nil {
return nil, err
}
txs := append(depositTxs, commissionTxs...)
return txs, nil
return nil, nil
}
// снятие комиссии за ввод средств
transactionCommissionRecords, err := this.depositCommission(internalUserAccountInfoForAddCryptocurrency, operationId, commissionAmount)
result := append(transactionAmountRecords, transactionCommissionRecords...)
if err != nil {
return nil, err
}
return result, nil
}
// depositEthereumFundsTransaction создание/сохранение транзакции на вывод эфироподобной криптовалюты
......@@ -341,7 +342,7 @@ func (this *TransactionManagerImpl) depositEthereumFundsTransaction(ethereumReco
operationId := fmt.Sprintf("%s.%s", internalUserAccountInfoForAddCryptocurrency, ethereumRecord.Hash)
// ввод средств пользователю
depositTxs, err := this.depositAmount(internalUserAccountInfoForAddCryptocurrency, amountPlain, operationId)
transactionAmountRecords, err := this.depositAmount(internalUserAccountInfoForAddCryptocurrency, amountPlain, operationId)
if err != nil {
return nil, err
}
......@@ -356,18 +357,18 @@ func (this *TransactionManagerImpl) depositEthereumFundsTransaction(ethereumReco
if err != nil {
return nil, errors.Errorf("failed to get commission amount: %s", err)
}
if commissionAmount.Num.IsZero() {
return depositTxs, nil
} else {
// снятие комиссии за ввод средств
commissionTxs, err := this.depositCommission(internalUserAccountInfoForAddCryptocurrency, operationId, commissionAmount)
if err != nil {
return nil, err
}
txs := append(depositTxs, commissionTxs...)
return txs, nil
return nil, nil
}
// снятие комиссии за ввод средств
transactionCommissionRecords, err := this.depositCommission(internalUserAccountInfoForAddCryptocurrency, operationId, commissionAmount)
result := append(transactionAmountRecords, transactionCommissionRecords...)
if err != nil {
return nil, err
}
return result, nil
}
// комиссия за ввод средств
......@@ -619,14 +620,18 @@ func isExistsTransactionByOperationId(operationId string, manager chaincode.IMan
func getCommissionAmount(amount nums.PlainCurrencyNumber, user *userCC.User, processType transactionCC.ProcessType, manager *TransactionManagerImpl) (*nums.CurrencyNumber, error) {
// Определяем переменную getCommissionArg -аргумент комиссии
getCommissionArg := commissionCC.GetCommissionArg{
PartnerCode: user.PartnerCode, CustomerType: user.CustomerType, ProcessType: processType,
}
commission, err := manager.CommissionCC.GetCommission(getCommissionArg)
// Определяем переменную commissionPercent из определенного ранее аргумента комиссии
commissionPercent, err := manager.CommissionCC.GetCommission(getCommissionArg)
if err != nil {
return nil, err
}
chaincode.GlobalLogger.Infof("commissionPercent: (%f)", commissionPercent)
keysWithFilter := &requests.KeysWithFilter{
Keys: []string{user.PartnerCode, processType.String(), nums.Lion_CurrencyType.String()},
}
......@@ -670,7 +675,7 @@ func getCommissionAmount(amount nums.PlainCurrencyNumber, user *userCC.User, pro
numberAmount, err = numberAmount.MulFloat(lionExchangeRate.Rate)
}
commissionAmount, err := numberAmount.MulFloat(commission.CommissionPercent / 100)
commissionAmount, err := numberAmount.MulFloat(commissionPercent.CommissionPercent / 100)
if err != nil {
return nil, err
}
......@@ -679,17 +684,6 @@ func getCommissionAmount(amount nums.PlainCurrencyNumber, user *userCC.User, pro
if err != nil {
return nil, err
}
chaincode.GlobalLogger.Infof("commission: %f cryptoenterCommission: %f", commission.CommissionPercent, cryptoenterCommission.CommissionPercent)
if commission.CommissionPercent == 0 && cryptoenterCommission.CommissionPercent == 0 {
zero, err := numberAmount.MulFloat(0.0)
if err != nil {
return nil, err
}
return zero, nil
}
cryptoenterCommissionAmount, err := numberAmount.MulFloat(cryptoenterCommission.CommissionPercent / 100)
commissionAmount, err = commissionAmount.Add(cryptoenterCommissionAmount)
......
......@@ -157,11 +157,12 @@ func (this *TransactionManagerImpl) LockFundsOnAccount(txnArgs *transactionCC.Tx
}
}
commission, err := getCommissionAmount(txnArgs.Amount, commissionUser, txnArgs.ProcessType, this)
// Получаем сумму комиссии передавая в функцию блокируемую сумму и процент комисии
commissionAmount, err := getCommissionAmount(txnArgs.Amount, commissionUser, txnArgs.ProcessType, this)
if err != nil {
return nil, errors.Errorf("failed calc commission, due to %s", err)
return nil, errors.Errorf("failed calc commissionAmount, due to %s", err)
}
if err := this.isEnoughLionOnAccount(outAccount.ToUserAccountInfo(), commission); err != nil {
if err := this.isEnoughLionOnAccount(outAccount.ToUserAccountInfo(), commissionAmount); err != nil {
return nil, err
}
......@@ -219,14 +220,12 @@ func (this *TransactionManagerImpl) LockFundsOnAccount(txnArgs *transactionCC.Tx
// If commission is on sender we need to lock commissions funds either
// Если комиссия с отправителя, происходит блокировка суммы комиссии
if txnArgs.ProcessType != transactionCC.TransferReceiverCommission_ProcessType &&
txnArgs.ProcessType != transactionCC.Move_ProcessType &&
!commission.Num.IsZero() {
transactionCommissionRecords, err := this.lockSenderCommission(lockCommissionAmountAccountInfo, txnArgs, commission, outAccount)
if txnArgs.ProcessType != transactionCC.TransferReceiverCommission_ProcessType && txnArgs.ProcessType != transactionCC.Move_ProcessType {
transactionCommissionRecords, err := this.lockSenderCommission(lockCommissionAmountAccountInfo, txnArgs, commissionAmount, outAccount)
userTransactionsList.Transactions = append(userTransactionsList.Transactions, transactionCommissionRecords...)
if err != nil {
return nil, err
}
userTransactionsList.Transactions = append(userTransactionsList.Transactions, transactionCommissionRecords...)
}
// Funds locked successfully
......@@ -282,12 +281,7 @@ func (this *TransactionManagerImpl) lockFunds(lockAmountAccountInfo *accountCC.T
}
// Функция блокировки комиссии от пользователя к системе
func (this *TransactionManagerImpl) lockSenderCommission(
lockCommissionAmountAccountInfo *accountCC.TxnAccountInfo,
txnArgs *transactionCC.TxnFundsLockInput,
commissionAmount *nums.CurrencyNumber,
outUserAccountInfo *accountCC.Account,
) ([]*transactionCC.TransactionRecord, error) {
func (this *TransactionManagerImpl) lockSenderCommission(lockCommissionAmountAccountInfo *accountCC.TxnAccountInfo, txnArgs *transactionCC.TxnFundsLockInput, commissionAmount *nums.CurrencyNumber, outUserAccountInfo *accountCC.Account) ([]*transactionCC.TransactionRecord, error) {
chaincode.GlobalLogger.Debugf("Locking commission funds %f on account id %s", commissionAmount, outUserAccountInfo.AccountID)
SYSTEM_COMMISSION_USER_AccountInfo, err := this.AccountCC.CheckAndLoadAccount(&accountCC.UserAccountInfo{UserID: system_user.SYSTEM_COMMISSION_USER})
......
......@@ -97,15 +97,16 @@ func (this *TransactionManagerImpl) LockOutFundsOnAccount(txnArgs *transactionCC
return userTransactionsList, errors.Errorf("To User is Blocked. UserID: %s; CustomerType: %s; PartnerCode: %s", fromUser.UserID, fromUser.CustomerType, fromUser.PartnerCode)
}
commission, err := getCommissionAmount(txnArgs.Amount, fromUser, txnArgs.ProcessType, this)
// Определяем commissionAmount из суммы выводимых средств и полуечнного процента комиссии
commissionAmount, err := getCommissionAmount(txnArgs.Amount, fromUser, txnArgs.ProcessType, this)
if err != nil {
return nil, errors.Errorf("failed to get commission amount: %s", err)
}
chaincode.GlobalLogger.Infof("result commission: (%s)", commission.Num)
chaincode.GlobalLogger.Infof("result commissionAmount: (%s)", commissionAmount.Num)
err = this.isEnoughLionOnAccount(txnArgs.OutUser, commission)
err = this.isEnoughLionOnAccount(txnArgs.OutUser, commissionAmount)
if err != nil {
return nil, err
}
......@@ -165,8 +166,8 @@ func (this *TransactionManagerImpl) LockOutFundsOnAccount(txnArgs *transactionCC
},
}
// Вызываем функцию блокировки средств на вывод из системы и записываем результат в txs
txs, err := this.lockOutAmount(lockAmountAccountInfo, fromUserAccountInfo, txnArgs, externalWalletUserAccountInfo)
// Вызываем функцию блокировки средств на вывод из системы и записываем результат в transactionRecords
transactionRecords, err := this.lockOutAmount(lockAmountAccountInfo, fromUserAccountInfo, txnArgs, externalWalletUserAccountInfo)
if err != nil {
return nil, err
}
......@@ -176,23 +177,26 @@ func (this *TransactionManagerImpl) LockOutFundsOnAccount(txnArgs *transactionCC
// Вызываем функцию блокировки комиссии которая берется за транзакцию майнерами (газ в эфире) и записываем результат в lockLockEthFeeAmountAccountInfo
lockLockEthFeeAmountAccountInfo := accountCC.GenerateLockAccount("LockEthFeeAmount", txnArgs.OutUser.UserID, txnArgs.OperationID)
lockTransactionFeeRecords, err := this.lockEthFee(&lockLockEthFeeAmountAccountInfo, txnArgs, ethFee, fromUserAccountInfo, externalWalletUserAccountInfo)
// Добавляем к txs запись о комиссии для эфироподобных валют (lockLockEthFeeAmountAccountInfo)
txs = append(txs, lockTransactionFeeRecords...)
// Добавляем к transactionRecords запись о комиссии для эфироподобных валют (lockLockEthFeeAmountAccountInfo)
transactionRecords = append(transactionRecords, lockTransactionFeeRecords...)
if err != nil {
return nil, err
}
}
if !commission.Num.IsZero() {
lockCommissionTxs, err := this.lockOutCommission(lockCommissionAmountAccountInfo, txnArgs, commission, fromUserAccountInfo)
if err != nil {
return nil, err
}
txs = append(txs, lockCommissionTxs...)
chaincode.GlobalLogger.Infof("commissionRecordsLen: (%d)", len(lockCommissionTxs))
// Вызываем функцию блокировки комиссии за вывод из системы и записываем результат в lockTransactionCommissionRecords
lockTransactionCommissionRecords, err := this.lockOutCommission(lockCommissionAmountAccountInfo, txnArgs, commissionAmount, fromUserAccountInfo)
if err != nil {
return nil, err
}
// Добавляем к transactionRecords запись о комиссии (lockTransactionCommissionRecords)
transactionRecords = append(transactionRecords, lockTransactionCommissionRecords...)
chaincode.GlobalLogger.Infof("commissionRecordsLen: (%d)", len(lockTransactionCommissionRecords))
userTransactionsList.Transactions = txs
// Добавляем запсиь о транзакции в список транзакций пользователя
userTransactionsList.Transactions = transactionRecords
// Возвращаем список транзакций пользователя
return userTransactionsList, nil
}
......
......@@ -98,16 +98,17 @@ func (this *TransactionManagerImpl) transferFunds(lockTransactionRecordInfo *tra
if inLockedAmountTransactionRecord.ProcessType == transactionCC.TransferReceiverCommission_ProcessType {
// Блокируем комиссию с получателя
inLockedCommissionTransactionRecord, lockTransactionCommissionRecords, err := this.lockReceiverCommission(systemCommissionUserInfo, inLockedAmountTransactionRecord)
// Прибавляем к списку транзакций транзакцию с блокировкой комиссии с получателя
userTransactionsList.Transactions = append(userTransactionsList.Transactions, lockTransactionCommissionRecords...)
if err != nil {
return userTransactionsList, err
}
if inLockedAmountTransactionRecord != nil && lockTransactionCommissionRecords != nil {
userTransactionsList.Transactions = append(userTransactionsList.Transactions, lockTransactionCommissionRecords...)
transactionCommissionRecords, err := this.transferCommission(inLockedCommissionTransactionRecord, systemCommissionUserInfo)
userTransactionsList.Transactions = append(userTransactionsList.Transactions, transactionCommissionRecords...)
if err != nil {
return nil, err
}
// Вызываем функцию перевода комиссии
transactionCommissionRecords, err := this.transferCommission(inLockedCommissionTransactionRecord, systemCommissionUserInfo)
// Прибавляем к списку транзакций транзакцию с переводом комиссии с получателя
userTransactionsList.Transactions = append(userTransactionsList.Transactions, transactionCommissionRecords...)
if err != nil {
return nil, err
}
}
......@@ -167,9 +168,7 @@ func (this *TransactionManagerImpl) transfer(inLockedAmountTransactionRecord *tr
return this.SaveTransactionPair(outTransferringFundsFromLockedAccount, inTransferringFundsFromLockedAccount)
}
// Функция блокировки комиссии в случае, когда комиссия с получателя.
//
// Если комиссионные равны 0, то возвращает (nil,nil,nil).
// Функция блокировки комиссии в случае, когда комиссия с получателя
func (this *TransactionManagerImpl) lockReceiverCommission(systemCommissionUserInfo *accountCC.Account, inLockedAmountTransactionRecord *transactionCC.TransactionRecord) (*transactionCC.TransactionRecord, []*transactionCC.TransactionRecord, error) {
chaincode.GlobalLogger.Info("create key for out user account")
......@@ -183,13 +182,9 @@ func (this *TransactionManagerImpl) lockReceiverCommission(systemCommissionUserI
}
// Определяем сумму комиссии
commission, err := getCommissionAmount(inLockedAmountTransactionRecord.Amount, outUser, inLockedAmountTransactionRecord.ProcessType, this)
commissionAmount, err := getCommissionAmount(inLockedAmountTransactionRecord.Amount, outUser, inLockedAmountTransactionRecord.ProcessType, this)
if err != nil {
return nil, nil, errors.Errorf("failed calc commission, due to %s", err)
}
if commission.Num.IsZero() {
return nil, nil, nil
return nil, nil, errors.Errorf("failed calc commissionAmount, due to %s", err)
}
// Определяем системного пользователя, который получит комиссию
......@@ -204,10 +199,10 @@ func (this *TransactionManagerImpl) lockReceiverCommission(systemCommissionUserI
from := inLockedAmountTransactionRecord.DestinationUserAccountInfo
to := SYSTEM_COMMISSION_USER_AccountInfo.ToUserAccountInfo()
chaincode.GlobalLogger.Debugf("Locking commission funds %f on account id %s", commission, inLockedAmountTransactionRecord.DestinationUserAccountInfo.AccountID)
chaincode.GlobalLogger.Debugf("Locking commission funds %f on account id %s", commissionAmount, inLockedAmountTransactionRecord.DestinationUserAccountInfo.AccountID)
outTransactionRecord := &transactionCC.TransactionRecord{
UserAccountInfo: from,
Amount: commission.Plain(),
Amount: commissionAmount.Plain(),
OperationID: inLockedAmountTransactionRecord.OperationID,
OperationType: transactionCC.LockCommission,
ProcessType: inLockedAmountTransactionRecord.ProcessType,
......@@ -223,7 +218,7 @@ func (this *TransactionManagerImpl) lockReceiverCommission(systemCommissionUserI
UserID: system_user.LOCK_COMMISSION_USER,
TxnAccountInfo: lockCommissionAmountAccountInfo,
},
Amount: commission.Plain(),
Amount: commissionAmount.Plain(),
OperationID: inLockedAmountTransactionRecord.OperationID,
OperationType: transactionCC.LockCommission,
ProcessType: inLockedAmountTransactionRecord.ProcessType,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment