From 5da5d43fdf5ae1bf12897492d2ca0a9149cdf34f Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Mon, 3 Jun 2024 22:43:41 +0200 Subject: [PATCH] feat(wallet): add fee waiver for swaps (#23960) * feat(wallet): add fee waiver for swaps * review(StephenHeaps): remove unused code --- .../browser/brave_wallet_constants.cc | 16 ----- .../browser/brave_wallet_constants.h | 4 -- .../brave_wallet/browser/swap_service.cc | 70 +++---------------- .../browser/swap_service_unittest.cc | 18 ++--- 4 files changed, 17 insertions(+), 91 deletions(-) diff --git a/components/brave_wallet/browser/brave_wallet_constants.cc b/components/brave_wallet/browser/brave_wallet_constants.cc index 5187d0cfc23e..6cf125f258bc 100644 --- a/components/brave_wallet/browser/brave_wallet_constants.cc +++ b/components/brave_wallet/browser/brave_wallet_constants.cc @@ -72,22 +72,6 @@ GetEthBalanceScannerContractAddresses() { return *contract_addresses; } -bool HasJupiterFeesForTokenMint(const std::string& mint) { - static std::vector mints( - {"So11111111111111111111111111111111111111112", // wSOL - "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // USDC - "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", // USDT - "7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs", // WETH (Wormhole) - "2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk", // ETH (Sollet) - "9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E", // BTC (Sollet) - "qfnqNqs3nCAHjnyCgLRDbBtq4p2MtHZxw8YjSyYhPoL", // wWBTC (Wormhole) - "7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj", // stSOL - "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So", // mSOL - "FYpdBuyAHSbdaAyD1sKkxyLWbAP8uUW9h6uvdhK74ij1"}); // DAI - - return base::Contains(mints, mint); -} - const std::vector& GetEthSupportedNftInterfaces() { static base::NoDestructor> interfaces({ kERC721InterfaceId, diff --git a/components/brave_wallet/browser/brave_wallet_constants.h b/components/brave_wallet/browser/brave_wallet_constants.h index c00858aae06f..0ce09e0fe3f7 100644 --- a/components/brave_wallet/browser/brave_wallet_constants.h +++ b/components/brave_wallet/browser/brave_wallet_constants.h @@ -1473,7 +1473,6 @@ inline constexpr char kZeroExBaseBaseAPIURL[] = "https://base.api.0x.wallet.brave.com"; inline constexpr char kZeroExEthereumBaseAPIURL[] = "https://api.0x.wallet.brave.com"; -inline constexpr double kZeroExBuyTokenFeePercentage = 0.875; inline constexpr char kEVMFeeRecipient[] = "0xbd9420A98a7Bd6B89765e5715e169481602D9c3d"; inline constexpr char kAffiliateAddress[] = @@ -1483,7 +1482,6 @@ inline constexpr char kZeroExNativeAssetContractAddress[] = // Jupiter swap constants inline constexpr char kJupiterBaseAPIURL[] = "https://jupiter.wallet.brave.com"; -inline constexpr double kSolanaBuyTokenFeePercentage = 0.85; inline constexpr char kJupiterReferralKey[] = "7yke2kxg6ewNsun61qBkdsLdxuXcUiB8CMB47Zv39Aoy"; inline constexpr char kJupiterReferralProgram[] = @@ -1505,7 +1503,6 @@ inline constexpr char kLiFiNativeEVMAssetContractAddress[] = "0x0000000000000000000000000000000000000000"; inline constexpr char kLiFiNativeSVMAssetContractAddress[] = "So11111111111111111111111111111111111111112"; -inline constexpr double kLiFiFeePercentage = 0.875; constexpr int64_t kBlockTrackerDefaultTimeInSeconds = 20; constexpr int64_t kLogTrackerDefaultTimeInSeconds = 20; @@ -1549,7 +1546,6 @@ const std::string GetSardineNetworkName(const std::string& chain_id); const base::flat_map& GetInfuraChainEndpoints(); const base::flat_map& GetEthBalanceScannerContractAddresses(); -bool HasJupiterFeesForTokenMint(const std::string& mint); const std::vector& GetEthSupportedNftInterfaces(); // Returns the URL for the Ratios service. const std::string GetAssetRatioBaseURL(); diff --git a/components/brave_wallet/browser/swap_service.cc b/components/brave_wallet/browser/swap_service.cc index f3a479f47914..bb0b4a5e35d8 100644 --- a/components/brave_wallet/browser/swap_service.cc +++ b/components/brave_wallet/browser/swap_service.cc @@ -99,67 +99,13 @@ std::string GetAffiliateAddress(const std::string& chain_id) { return ""; } -mojom::SwapFeesPtr GetJupiterSwapFee(const mojom::SwapQuoteParams& params) { +mojom::SwapFeesPtr GetZeroSwapFee() { mojom::SwapFeesPtr response = mojom::SwapFees::New(); - bool has_fees = HasJupiterFeesForTokenMint( - params.to_token.empty() ? kWrappedSolanaMintAddress : params.to_token); - - auto fee_pct = kSolanaBuyTokenFeePercentage; - response->fee_pct = base::NumberToString(fee_pct); - - auto discount = has_fees ? 0.0 : 100.0; - response->discount_pct = base::NumberToString(discount); - - auto effective_fee_pct = (100.0 - discount) / 100.0 * fee_pct; - response->effective_fee_pct = base::NumberToString(effective_fee_pct); - - // Jupiter swap fee is specified in basis points - response->fee_param = - effective_fee_pct != 0.0 - ? base::NumberToString(static_cast(effective_fee_pct * 100.0)) - : ""; - - response->discount_code = - has_fees ? mojom::SwapDiscountCode::kNone - : mojom::SwapDiscountCode::kUnknownJupiterOutputMint; - - return response; -} - -mojom::SwapFeesPtr GetLiFiSwapFee() { - mojom::SwapFeesPtr response = mojom::SwapFees::New(); - - response->fee_pct = base::NumberToString(kLiFiFeePercentage); - - // We currently do not offer discounts on LiFi Brave fees. + response->fee_pct = "0"; response->discount_pct = "0"; + response->effective_fee_pct = "0"; + response->fee_param = ""; response->discount_code = mojom::SwapDiscountCode::kNone; - response->effective_fee_pct = response->fee_pct; - - // LiFi swap fee is specified as a multiplier - response->fee_param = response->effective_fee_pct != "0" - ? base::NumberToString(kLiFiFeePercentage / 100.0) - : ""; - - return response; -} - -mojom::SwapFeesPtr GetZeroExSwapFee() { - mojom::SwapFeesPtr response = mojom::SwapFees::New(); - - response->fee_pct = base::NumberToString(kZeroExBuyTokenFeePercentage); - - // We currently do not offer discounts on 0x Brave fees. - response->discount_pct = "0"; - response->discount_code = mojom::SwapDiscountCode::kNone; - response->effective_fee_pct = response->fee_pct; - - // 0x swap fee is specified as a multiplier - response->fee_param = - response->effective_fee_pct != "0" - ? base::NumberToString(kZeroExBuyTokenFeePercentage / 100.0) - : ""; - return response; } @@ -385,7 +331,7 @@ void SwapService::GetQuote(mojom::SwapQuoteParamsPtr params, if (params->from_chain_id == params->to_chain_id && IsNetworkSupportedByZeroEx(params->from_chain_id)) { - auto swap_fee = GetZeroExSwapFee(); + auto swap_fee = GetZeroSwapFee(); auto fee_param = swap_fee->fee_param; auto internal_callback = base::BindOnce( @@ -402,7 +348,7 @@ void SwapService::GetQuote(mojom::SwapQuoteParamsPtr params, if (params->from_chain_id == params->to_chain_id && IsNetworkSupportedByJupiter(params->from_chain_id)) { - auto swap_fee = GetJupiterSwapFee(*params); + auto swap_fee = GetZeroSwapFee(); auto fee_param = swap_fee->fee_param; auto internal_callback = base::BindOnce( @@ -419,7 +365,7 @@ void SwapService::GetQuote(mojom::SwapQuoteParamsPtr params, if (IsNetworkSupportedByLiFi(params->from_chain_id) && IsNetworkSupportedByLiFi(params->to_chain_id)) { - auto swap_fee = GetLiFiSwapFee(); + auto swap_fee = GetZeroSwapFee(); auto fee_param = swap_fee->fee_param; auto encoded_params = lifi::EncodeQuoteParams(std::move(params), fee_param); @@ -548,7 +494,7 @@ void SwapService::GetTransaction(mojom::SwapTransactionParamsUnionPtr params, auto conversion_callback = base::BindOnce(&ConvertAllNumbersToString); if (params->is_zero_ex_transaction_params()) { - auto swap_fee = GetZeroExSwapFee(); + auto swap_fee = GetZeroSwapFee(); auto internal_callback = base::BindOnce(&SwapService::OnGetZeroExTransaction, diff --git a/components/brave_wallet/browser/swap_service_unittest.cc b/components/brave_wallet/browser/swap_service_unittest.cc index 1b8bb59dc9bf..dbd6c8f67b3e 100644 --- a/components/brave_wallet/browser/swap_service_unittest.cc +++ b/components/brave_wallet/browser/swap_service_unittest.cc @@ -465,11 +465,11 @@ TEST_F(SwapServiceUnitTest, GetZeroExQuote) { expected_zero_ex_quote->fees = std::move(fees); auto expected_swap_fees = mojom::SwapFees::New(); - expected_swap_fees->fee_pct = "0.875"; + expected_swap_fees->fee_pct = "0"; expected_swap_fees->discount_pct = "0"; + expected_swap_fees->effective_fee_pct = "0"; expected_swap_fees->discount_code = mojom::SwapDiscountCode::kNone; - expected_swap_fees->effective_fee_pct = "0.875"; - expected_swap_fees->fee_param = "0.00875"; + expected_swap_fees->fee_param = ""; base::MockCallback callback; EXPECT_CALL(callback, Run(EqualsMojo(mojom::SwapQuoteUnion::NewZeroExQuote( @@ -1090,11 +1090,11 @@ TEST_F(SwapServiceUnitTest, GetJupiterQuote) { auto& expected_quote = params->get_jupiter_transaction_params()->quote; auto expected_swap_fees = mojom::SwapFees::New(); - expected_swap_fees->fee_pct = "0.85"; + expected_swap_fees->fee_pct = "0"; expected_swap_fees->discount_pct = "0"; - expected_swap_fees->effective_fee_pct = "0.85"; + expected_swap_fees->effective_fee_pct = "0"; expected_swap_fees->discount_code = mojom::SwapDiscountCode::kNone; - expected_swap_fees->fee_param = "85"; + expected_swap_fees->fee_param = ""; base::MockCallback callback; EXPECT_CALL(callback, Run(EqualsMojo(mojom::SwapQuoteUnion::NewJupiterQuote( @@ -1380,11 +1380,11 @@ TEST_F(SwapServiceUnitTest, GetLiFiQuote) { )"); auto expected_swap_fees = mojom::SwapFees::New(); - expected_swap_fees->fee_pct = "0.875"; + expected_swap_fees->fee_pct = "0"; expected_swap_fees->discount_pct = "0"; - expected_swap_fees->effective_fee_pct = "0.875"; + expected_swap_fees->effective_fee_pct = "0"; expected_swap_fees->discount_code = mojom::SwapDiscountCode::kNone; - expected_swap_fees->fee_param = "0.00875"; + expected_swap_fees->fee_param = ""; base::MockCallback callback; EXPECT_CALL(