From e50f625f0bc7a58d2e6d617f51c666d06a68990b Mon Sep 17 00:00:00 2001 From: mulan xia Date: Tue, 27 Aug 2024 04:43:48 +0900 Subject: [PATCH] add params into abacus --- .../state/manager/Environment.kt | 3 ++ .../trade/TradeOrderInputValidator.kt | 33 ++++++++++++++----- .../payload/v4/V4TradeInputTests.kt | 2 ++ .../tests/payloads/AbacusMockData.kt | 18 +++++++++- .../tests/payloads/EnvironmentsMock.kt | 3 +- 5 files changed, 49 insertions(+), 10 deletions(-) diff --git a/src/commonMain/kotlin/exchange.dydx.abacus/state/manager/Environment.kt b/src/commonMain/kotlin/exchange.dydx.abacus/state/manager/Environment.kt index 9e48c8f77..11fa3430b 100644 --- a/src/commonMain/kotlin/exchange.dydx.abacus/state/manager/Environment.kt +++ b/src/commonMain/kotlin/exchange.dydx.abacus/state/manager/Environment.kt @@ -81,6 +81,7 @@ data class EnvironmentLinks( val statusPage: String?, val withdrawalGateLearnMore: String?, val complianceSupportEmail: String?, + val equityTiersLearnMore: String?, ) { companion object { fun parse( @@ -100,6 +101,7 @@ data class EnvironmentLinks( val statusPage = parser.asString(data["statusPage"]) val withdrawalGateLearnMore = parser.asString(data["withdrawalGateLearnMore"]) val complianceSupportEmail = parser.asString(data["complianceSupportEmail"]) + val equityTiersLearnMore = parser.asString(data["equityTiersLearnMore"]) return EnvironmentLinks( tos, privacy, @@ -114,6 +116,7 @@ data class EnvironmentLinks( statusPage, withdrawalGateLearnMore, complianceSupportEmail, + equityTiersLearnMore, ) } } diff --git a/src/commonMain/kotlin/exchange.dydx.abacus/validator/trade/TradeOrderInputValidator.kt b/src/commonMain/kotlin/exchange.dydx.abacus/validator/trade/TradeOrderInputValidator.kt index fe7b2b6ff..7e1b73a78 100644 --- a/src/commonMain/kotlin/exchange.dydx.abacus/validator/trade/TradeOrderInputValidator.kt +++ b/src/commonMain/kotlin/exchange.dydx.abacus/validator/trade/TradeOrderInputValidator.kt @@ -54,7 +54,7 @@ internal class TradeOrderInputValidator( } OrderType.Limit, OrderType.StopLimit, OrderType.TakeProfitLimit -> { val errors = mutableListOf() - validateIsolatedMarginMinSize(subaccount, trade)?.let { + validateIsolatedMarginMinSize(subaccount, trade, environment)?.let { errors.add(it) } errors @@ -81,7 +81,7 @@ internal class TradeOrderInputValidator( trade, restricted, ) - OrderType.Limit, OrderType.StopLimit, OrderType.TakeProfitLimit -> validateLimitOrder(subaccount, trade, restricted) + OrderType.Limit, OrderType.StopLimit, OrderType.TakeProfitLimit -> validateLimitOrder(subaccount, trade, restricted, environment) else -> null } @@ -112,17 +112,18 @@ internal class TradeOrderInputValidator( private fun validateLimitOrder( subaccount: Map?, trade: Map, - restricted: Boolean + restricted: Boolean, + environment: V4Environment? ): List? { val errors = mutableListOf() - var error = isolatedMarginMinSize(subaccount, trade, restricted) + var error = isolatedMarginMinSize(subaccount, trade, restricted, environment) if (error != null) { errors.add(error) } return if (errors.size > 0) errors else null } - private fun isolatedMarginMinSize(subaccount: Map?, trade: Map, restricted: Boolean): Map? { + private fun isolatedMarginMinSize(subaccount: Map?, trade: Map, restricted: Boolean, environment: V4Environment?): Map? { val marginMode = parser.asString(trade.get("marginMode"))?.let { MarginMode.invoke(it) } @@ -145,6 +146,7 @@ internal class TradeOrderInputValidator( "format" to "price", ), ), + learnMoreLink = environment?.links?.equityTiersLearnMore, ) } else { return null @@ -154,7 +156,7 @@ internal class TradeOrderInputValidator( } } - private fun validateIsolatedMarginMinSize(subaccount: InternalSubaccountState, trade: InternalTradeInputState): ValidationError? { + private fun validateIsolatedMarginMinSize(subaccount: InternalSubaccountState, trade: InternalTradeInputState, environment: V4Environment?): ValidationError? { return when (trade.marginMode) { MarginMode.Isolated -> { val currentFreeCollateral = subaccount.calculated.get(CalculationPeriod.current)?.freeCollateral ?: return null @@ -173,6 +175,7 @@ internal class TradeOrderInputValidator( "format" to "price", ), ), + learnMoreLink = environment?.links?.equityTiersLearnMore, ) } return null @@ -353,7 +356,8 @@ internal class TradeOrderInputValidator( errorCode: String, fields: List? = null, actionStringKey: String? = null, - textParams: Map? = null + textParams: Map? = null, + learnMoreLink: String? = null, ): Map { return errorDeprecated( type = errorLevel, @@ -363,6 +367,12 @@ internal class TradeOrderInputValidator( titleStringKey = "ERRORS.TRADE_BOX_TITLE.$errorCode", textStringKey = "ERRORS.TRADE_BOX.$errorCode", textParams = textParams, + link = learnMoreLink, + linkText = if (learnMoreLink != null) { + "APP.GENERAL.LEARN_MORE_ARROW" + } else { + null + }, ) } @@ -371,7 +381,8 @@ internal class TradeOrderInputValidator( errorCode: String, fields: List? = null, actionStringKey: String? = null, - textParams: Map? = null + textParams: Map? = null, + learnMoreLink: String? = null, ): ValidationError { return error( type = errorLevel, @@ -381,6 +392,12 @@ internal class TradeOrderInputValidator( titleStringKey = "ERRORS.TRADE_BOX_TITLE.$errorCode", textStringKey = "ERRORS.TRADE_BOX.$errorCode", textParams = textParams, + link = learnMoreLink, + linkText = if (learnMoreLink != null) { + "APP.GENERAL.LEARN_MORE_ARROW" + } else { + null + }, ) } } diff --git a/src/commonTest/kotlin/exchange.dydx.abacus/payload/v4/V4TradeInputTests.kt b/src/commonTest/kotlin/exchange.dydx.abacus/payload/v4/V4TradeInputTests.kt index 48dbc7208..1d01d18b8 100644 --- a/src/commonTest/kotlin/exchange.dydx.abacus/payload/v4/V4TradeInputTests.kt +++ b/src/commonTest/kotlin/exchange.dydx.abacus/payload/v4/V4TradeInputTests.kt @@ -479,6 +479,8 @@ open class V4TradeInputTests : V4BaseTests() { "fields": [ "size.size" ], + "linkText": "APP.GENERAL.LEARN_MORE_ARROW", + "link": "https://help.dydx.trade/en/articles/171918-equity-tiers-and-rate-limits", "resources": { "title": { "stringKey": "ERRORS.TRADE_BOX_TITLE.ISOLATED_MARGIN_LIMIT_ORDER_BELOW_MINIMUM" diff --git a/src/commonTest/kotlin/exchange.dydx.abacus/tests/payloads/AbacusMockData.kt b/src/commonTest/kotlin/exchange.dydx.abacus/tests/payloads/AbacusMockData.kt index 4e23a2c99..b3232b39c 100644 --- a/src/commonTest/kotlin/exchange.dydx.abacus/tests/payloads/AbacusMockData.kt +++ b/src/commonTest/kotlin/exchange.dydx.abacus/tests/payloads/AbacusMockData.kt @@ -3,6 +3,7 @@ package exchange.dydx.abacus.tests.payloads import exchange.dydx.abacus.state.app.adaptors.AbUrl import exchange.dydx.abacus.state.manager.EnvironmentEndpoints import exchange.dydx.abacus.state.manager.EnvironmentFeatureFlags +import exchange.dydx.abacus.state.manager.EnvironmentLinks import exchange.dydx.abacus.state.manager.TokenInfo import exchange.dydx.abacus.state.manager.V4Environment import exchange.dydx.abacus.state.manager.WalletConnect @@ -69,7 +70,22 @@ class AbacusMockData { nobleValidator = null, geo = null, ), - null, + EnvironmentLinks( + tos = "https://dydx.exchange/v4-terms", + privacy = "https://dydx.exchange/privacy", + mintscan = "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + mintscanBase = "https://testnet.mintscan.io/dydx-testnet", + documentation = "https://v4-teacher.vercel.app/", + community = "https://discord.com/invite/dydx", + feedback = "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", + blogs = "https://www.dydx.foundation/blog", + help = "https://help.dydx.exchange/", + launchIncentive = "https://dydx.exchange/v4-launch-incentive", + statusPage = "https://status.v4testnet.dydx.exchange/", + withdrawalGateLearnMore = "https://help.dydx.exchange/en/articles/8981384-withdrawals-on-dydx-chain#h_23e97bc665", + complianceSupportEmail = "someemail@gmail.com", + equityTiersLearnMore = "https://help.dydx.trade/en/articles/171918-equity-tiers-and-rate-limits", + ), WalletConnection( WalletConnect( WalletConnectClient( diff --git a/src/commonTest/kotlin/exchange.dydx.abacus/tests/payloads/EnvironmentsMock.kt b/src/commonTest/kotlin/exchange.dydx.abacus/tests/payloads/EnvironmentsMock.kt index dcd9ce642..729f90a37 100644 --- a/src/commonTest/kotlin/exchange.dydx.abacus/tests/payloads/EnvironmentsMock.kt +++ b/src/commonTest/kotlin/exchange.dydx.abacus/tests/payloads/EnvironmentsMock.kt @@ -43,7 +43,8 @@ class EnvironmentsMock { "community":"https://discord.com/invite/dydx", "feedback":"https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", "launchIncentive":"https://dydx.exchange/v4-launch-incentive", - "complianceSupportEmail":"someemail@gmail.com" + "complianceSupportEmail":"someemail@gmail.com", + "equityTiersLearnMore":"https://help.dydx.trade/en/articles/171918-equity-tiers-and-rate-limits" } }, "wallets": {