diff --git a/migration/1773740800000-AddEdgeWallet.js b/migration/1773740800000-AddEdgeWallet.js new file mode 100644 index 0000000000..e14bc66c2f --- /dev/null +++ b/migration/1773740800000-AddEdgeWallet.js @@ -0,0 +1,20 @@ +module.exports = class AddEdgeWallet1773740800000 { + name = 'AddEdgeWallet1773740800000'; + + async up(queryRunner) { + await queryRunner.query(` + IF NOT EXISTS (SELECT 1 FROM "dbo"."wallet" WHERE "name" = 'Edge') + INSERT INTO "dbo"."wallet" ( + "name", "isKycClient", "amlRules", "autoTradeApproval", + "mailConfig", "usesDummyAddresses", "displayFraudWarning", "buySpecificIbanEnabled" + ) VALUES ( + 'Edge', 0, '0', 1, + 'BuyCrypto;BuyFiat;RefReward;Info', 0, 0, 0 + ) + `); + } + + async down(queryRunner) { + await queryRunner.query(`DELETE FROM "dbo"."wallet" WHERE "name" = 'Edge'`); + } +}; \ No newline at end of file diff --git a/src/integration/blockchain/shared/util/blockchain.util.ts b/src/integration/blockchain/shared/util/blockchain.util.ts index bddccea0ec..4463e4d15a 100644 --- a/src/integration/blockchain/shared/util/blockchain.util.ts +++ b/src/integration/blockchain/shared/util/blockchain.util.ts @@ -51,10 +51,9 @@ export function txExplorerUrl(blockchain: Blockchain, txId: string): string | un const txPath = TxPaths[blockchain]; if (!baseUrl || !txPath) return undefined; - // ICP token txIds have format "canisterId:blockIndex" — extract block index only + // ICP token txIds have format "canisterId:blockIndex" if (blockchain === Blockchain.INTERNET_COMPUTER && txId.includes(':')) { - const blockIndex = txId.split(':')[1]; - return `${baseUrl}/${txPath}/${blockIndex}`; + return icpTokenTxUrl(baseUrl, txPath, txId); } return `${baseUrl}/${txPath}/${txId}`; @@ -73,6 +72,20 @@ export function addressExplorerUrl(blockchain: Blockchain, address: string): str // --- HELPERS --- // +// ICP token canister ID to dashboard path mapping +const IcpTokenDashboardPaths: Record = { + 'mxzaz-hqaaa-aaaar-qaada-cai': 'bitcoin', // ckBTC +}; + +function icpTokenTxUrl(baseUrl: string, txPath: string, txId: string): string | undefined { + const [canisterId, blockIndex] = txId.split(':'); + + const tokenPath = IcpTokenDashboardPaths[canisterId]; + if (!tokenPath) return undefined; + + return `${baseUrl}/${tokenPath}/${txPath}/${blockIndex}`; +} + const BlockchainExplorerUrls: { [b in Blockchain]: string } = { [Blockchain.DEFICHAIN]: 'https://defiscan.live', [Blockchain.BITCOIN]: 'https://mempool.space', diff --git a/src/shared/models/asset/dto/asset-dto.mapper.ts b/src/shared/models/asset/dto/asset-dto.mapper.ts index c4da5e7506..a418b3c767 100644 --- a/src/shared/models/asset/dto/asset-dto.mapper.ts +++ b/src/shared/models/asset/dto/asset-dto.mapper.ts @@ -24,8 +24,8 @@ export class AssetDtoMapper { sellable: asset.sellable, instantBuyable: asset.instantBuyable, instantSellable: asset.instantSellable, - cardBuyable: asset.cardBuyable, - cardSellable: asset.cardSellable, + cardBuyable: false, + cardSellable: false, blockchain: asset.blockchain, sortOrder: asset.sortOrder, }; diff --git a/src/shared/models/fiat/dto/fiat-dto.mapper.ts b/src/shared/models/fiat/dto/fiat-dto.mapper.ts index cef7f22fff..a7d34198f9 100644 --- a/src/shared/models/fiat/dto/fiat-dto.mapper.ts +++ b/src/shared/models/fiat/dto/fiat-dto.mapper.ts @@ -13,8 +13,8 @@ export class FiatDtoMapper { name: fiat.name, buyable: fiat.buyable, sellable: fiat.sellable, - cardBuyable: fiat.cardBuyable, - cardSellable: fiat.cardSellable, + cardBuyable: false, + cardSellable: false, instantBuyable: fiat.instantBuyable, instantSellable: fiat.instantSellable, }; @@ -37,10 +37,7 @@ export class FiatDtoMapper { fiat.instantBuyable || fiat.instantSellable ? this.convert(spec.minVolume, Config.tradingLimits.yearlyDefault, fiat) : this.zeroLimits, - [FiatPaymentMethod.CARD]: - fiat.cardBuyable || fiat.cardSellable - ? this.convert(spec.minVolume, Config.tradingLimits.cardDefault, fiat) - : this.zeroLimits, + [FiatPaymentMethod.CARD]: this.zeroLimits, }, allowedIbanCountries, }); diff --git a/src/shared/services/payment-info.service.ts b/src/shared/services/payment-info.service.ts index 7a66f77207..b5cddd76ee 100644 --- a/src/shared/services/payment-info.service.ts +++ b/src/shared/services/payment-info.service.ts @@ -48,10 +48,7 @@ export class PaymentInfoService { throw this.createError('Asset blockchain mismatch', QuoteError.ASSET_UNSUPPORTED, forQuote); if ('paymentMethod' in dto && dto.paymentMethod === FiatPaymentMethod.CARD) { - if (!dto.currency.cardSellable) - throw this.createError('Currency not sellable via Card', QuoteError.CURRENCY_UNSUPPORTED, forQuote); - if (!dto.asset.cardBuyable) - throw this.createError('Asset not buyable via Card', QuoteError.ASSET_UNSUPPORTED, forQuote); + throw this.createError('Card payments are not supported', QuoteError.PAYMENT_METHOD_NOT_ALLOWED, forQuote); } else if ('paymentMethod' in dto && dto.paymentMethod === FiatPaymentMethod.INSTANT) { if (!dto.currency.instantSellable) throw this.createError('Currency not sellable via Instant', QuoteError.CURRENCY_UNSUPPORTED, forQuote);