Skip to content

Commit 490c117

Browse files
committed
Add GetFee wrapper func
1 parent 75dc05b commit 490c117

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

exchanges/cryptodotcom/cryptodotcom_wrapper.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1018,9 +1018,77 @@ func (cr *Cryptodotcom) GetOrderHistory(ctx context.Context, getOrdersRequest *o
10181018

10191019
// GetFeeByType returns an estimate of fee based on the type of transaction
10201020
func (cr *Cryptodotcom) GetFeeByType(ctx context.Context, feeBuilder *exchange.FeeBuilder) (float64, error) {
1021+
if feeBuilder == nil {
1022+
return 0, fmt.Errorf("%T %w", feeBuilder, common.ErrNilPointer)
1023+
}
1024+
if !cr.AreCredentialsValid(ctx) && // Todo check connection status
1025+
feeBuilder.FeeType == exchange.CryptocurrencyTradeFee {
1026+
feeBuilder.FeeType = exchange.OfflineTradeFee
1027+
}
1028+
1029+
var fee float64
1030+
1031+
switch feeBuilder.FeeType {
1032+
case exchange.CryptocurrencyTradeFee:
1033+
fee = cr.calculateTradingFee(ctx, feeBuilder) * feeBuilder.Amount * feeBuilder.PurchasePrice
1034+
case exchange.CryptocurrencyWithdrawalFee:
1035+
switch feeBuilder.Pair.Base {
1036+
case currency.USDT:
1037+
fee = 1.08
1038+
case currency.TUSD:
1039+
fee = 1.09
1040+
case currency.BTC:
1041+
fee = 0.0005
1042+
case currency.ETH:
1043+
fee = 0.01
1044+
case currency.LTC:
1045+
fee = 0.001
1046+
}
1047+
case exchange.InternationalBankDepositFee:
1048+
fee = getInternationalBankDepositFee(feeBuilder.Amount)
1049+
case exchange.InternationalBankWithdrawalFee:
1050+
fee = getInternationalBankWithdrawalFee(feeBuilder.Amount)
1051+
case exchange.OfflineTradeFee:
1052+
fee = getOfflineTradeFee(feeBuilder.PurchasePrice, feeBuilder.Amount)
1053+
}
1054+
return fee, nil
1055+
10211056
return 0, common.ErrNotYetImplemented
10221057
}
10231058

1059+
func (cr *Cryptodotcom) checkCredentials(ctx context.Context) bool {
1060+
creds, err := cr.GetCredentials(ctx)
1061+
return err == nil && cr.ValidateAPICredentials(creds) == nil
1062+
}
1063+
1064+
// getOfflineTradeFee calculates the worst case-scenario trading fee
1065+
func getOfflineTradeFee(price, amount float64) float64 {
1066+
return 0.0750 * price * amount
1067+
}
1068+
1069+
// calculateTradingFee return fee based on users current fee tier or default values
1070+
func (b *Cryptodotcom) calculateTradingFee(ctx context.Context, feeBuilder *exchange.FeeBuilder) float64 {
1071+
formattedPair, err := b.FormatExchangeCurrency(feeBuilder.Pair, asset.Spot)
1072+
if err != nil {
1073+
if feeBuilder.IsMaker {
1074+
return 0.001
1075+
}
1076+
return 0.002
1077+
}
1078+
feeTiers, err := dy.GetFeeInformation(ctx, formattedPair.String())
1079+
if err != nil {
1080+
// TODO: Return actual error, we shouldn't pivot around errors.
1081+
if feeBuilder.IsMaker {
1082+
return 0.001
1083+
}
1084+
return 0.002
1085+
}
1086+
if feeBuilder.IsMaker {
1087+
return feeTiers[0].MakerFee
1088+
}
1089+
return feeTiers[0].TakerFee
1090+
}
1091+
10241092
// ValidateCredentials validates current credentials used for wrapper
10251093
func (cr *Cryptodotcom) ValidateCredentials(ctx context.Context, assetType asset.Item) error {
10261094
_, err := cr.UpdateAccountInfo(ctx, assetType)

0 commit comments

Comments
 (0)