diff --git a/apps/trading-e2e/src/integration/trading-deal-ticket.cy.ts b/apps/trading-e2e/src/integration/trading-deal-ticket.cy.ts index 522bf20a4..b1015fc6b 100644 --- a/apps/trading-e2e/src/integration/trading-deal-ticket.cy.ts +++ b/apps/trading-e2e/src/integration/trading-deal-ticket.cy.ts @@ -144,8 +144,8 @@ describe('deal ticket orders', () => { 'Awaiting network confirmation' ); cy.getByTestId(orderTransactionHash) - .invoke('text') - .should('contain', 'Tx hash: test-tx-hash'); + .invoke('attr', 'href') + .should('include', 'https://explorer.fairground.wtf/txs/0xtest-tx-hash'); cy.getByTestId('dialog-close').click(); }; diff --git a/apps/trading/.env b/apps/trading/.env index 82d9ff526..b632722ae 100644 --- a/apps/trading/.env +++ b/apps/trading/.env @@ -6,3 +6,4 @@ NX_ETHEREUM_PROVIDER_URL=https://ropsten.infura.io/v3/4f846e79e13f44d1b51bbd7ed9 NX_ETHERSCAN_URL=https://ropsten.etherscan.io NX_VEGA_NETWORKS={\"MAINNET\":\"https://alpha.console.vega.xyz\"} NX_USE_ENV_OVERRIDES=1 +NX_VEGA_EXPLORER_URL=https://explorer.fairground.wtf diff --git a/apps/trading/.env.devnet b/apps/trading/.env.devnet index 6cc08adc4..a9a913252 100644 --- a/apps/trading/.env.devnet +++ b/apps/trading/.env.devnet @@ -5,3 +5,4 @@ NX_VEGA_URL=https://n04.d.vega.xyz/query NX_VEGA_NETWORKS={\"MAINNET\":\"https://alpha.console.vega.xyz\"} NX_ETHEREUM_PROVIDER_URL=https://ropsten.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8 NX_ETHERSCAN_URL=https://ropsten.etherscan.io +NX_VEGA_EXPLORER_URL=https://dev.explorer.vega.xyz diff --git a/apps/trading/.env.mainnet b/apps/trading/.env.mainnet index 71078005d..9aa4b5d17 100644 --- a/apps/trading/.env.mainnet +++ b/apps/trading/.env.mainnet @@ -5,3 +5,4 @@ NX_VEGA_URL=https://api.token.vega.xyz/query NX_VEGA_NETWORKS='{\"MAINNET\":\"https://alpha.console.vega.xyz\"}' NX_ETHEREUM_PROVIDER_URL=https://mainnet.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8 NX_ETHERSCAN_URL=https://etherscan.io +NX_VEGA_EXPLORER_URL=https://explorer.vega.xyz diff --git a/apps/trading/.env.stagnet1 b/apps/trading/.env.stagnet1 index 13ac66839..7a84c347f 100644 --- a/apps/trading/.env.stagnet1 +++ b/apps/trading/.env.stagnet1 @@ -5,3 +5,4 @@ NX_VEGA_URL=https://n03.s.vega.xyz/query NX_VEGA_NETWORKS='{\"MAINNET\":\"https://alpha.console.vega.xyz\"}' NX_ETHEREUM_PROVIDER_URL=https://ropsten.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8 NX_ETHERSCAN_URL=https://ropsten.etherscan.io +NX_VEGA_EXPLORER_URL=https://staging.explorer.vega.xyz diff --git a/apps/trading/.env.stagnet2 b/apps/trading/.env.stagnet2 index ae6011f3e..4c5893943 100644 --- a/apps/trading/.env.stagnet2 +++ b/apps/trading/.env.stagnet2 @@ -5,3 +5,4 @@ NX_VEGA_URL=https://n03.stagnet2.vega.xyz/query NX_VEGA_NETWORKS='{\"MAINNET\":\"https://alpha.console.vega.xyz\"}' NX_ETHEREUM_PROVIDER_URL=https://ropsten.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8 NX_ETHERSCAN_URL=https://ropsten.etherscan.io +NX_VEGA_EXPLORER_URL=https://staging2.explorer.vega.xyz diff --git a/apps/trading/.env.testnet b/apps/trading/.env.testnet index 7804d1378..7b36cbfe9 100644 --- a/apps/trading/.env.testnet +++ b/apps/trading/.env.testnet @@ -5,3 +5,4 @@ NX_VEGA_URL=https://lb.testnet.vega.xyz/query NX_VEGA_NETWORKS='{\"MAINNET\":\"https://alpha.console.vega.xyz\"}' NX_ETHEREUM_PROVIDER_URL=https://ropsten.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8 NX_ETHERSCAN_URL=https://ropsten.etherscan.io +NX_VEGA_EXPLORER_URL=https://explorer.fairground.wtf diff --git a/libs/environment/src/utils/compile-environment.ts b/libs/environment/src/utils/compile-environment.ts index 9bbaa95b8..ecd91d909 100644 --- a/libs/environment/src/utils/compile-environment.ts +++ b/libs/environment/src/utils/compile-environment.ts @@ -58,6 +58,8 @@ const getBundledEnvironmentValue = (key: EnvKey) => { return process.env['NX_ETHERSCAN_URL']; case 'VEGA_NETWORKS': return process.env['NX_VEGA_NETWORKS']; + case 'VEGA_EXPLORER_URL': + return process.env['NX_VEGA_EXPLORER_URL']; } }; diff --git a/libs/environment/src/utils/validate-environment.ts b/libs/environment/src/utils/validate-environment.ts index b739e248f..44c89d8d1 100644 --- a/libs/environment/src/utils/validate-environment.ts +++ b/libs/environment/src/utils/validate-environment.ts @@ -14,6 +14,7 @@ export enum Networks { const schemaObject = { VEGA_URL: z.optional(z.string()), + VEGA_EXPLORER_URL: z.optional(z.string()), VEGA_CONFIG_URL: z.optional(z.string()), ETHEREUM_PROVIDER_URL: z.string().url({ message: diff --git a/libs/wallet/src/order-hooks/__generated__/OrderEvent.ts b/libs/wallet/src/order-hooks/__generated__/OrderEvent.ts index a2d305009..8ce11083c 100644 --- a/libs/wallet/src/order-hooks/__generated__/OrderEvent.ts +++ b/libs/wallet/src/order-hooks/__generated__/OrderEvent.ts @@ -22,14 +22,14 @@ export interface OrderEvent_busEvents_event_Order_market { /** * decimalPlaces indicates the number of decimal places that an integer must be shifted by in order to get a correct * number denominated in the currency of the Market. (uint64) - * + * * Examples: * Currency Balance decimalPlaces Real Balance * GBP 100 0 GBP 100 * GBP 100 2 GBP 1.00 * GBP 100 4 GBP 0.01 * GBP 1 4 GBP 0.0001 ( 0.01p ) - * + * * GBX (pence) 100 0 GBP 1.00 (100p ) * GBX (pence) 100 2 GBP 0.01 ( 1p ) * GBX (pence) 100 4 GBP 0.0001 ( 0.01p ) diff --git a/libs/wallet/src/vega-order-transaction-dialog/vega-order-transaction-dialog.spec.tsx b/libs/wallet/src/vega-order-transaction-dialog/vega-order-transaction-dialog.spec.tsx index 4d6e314a7..b851426bb 100644 --- a/libs/wallet/src/vega-order-transaction-dialog/vega-order-transaction-dialog.spec.tsx +++ b/libs/wallet/src/vega-order-transaction-dialog/vega-order-transaction-dialog.spec.tsx @@ -5,6 +5,12 @@ import { VegaTxStatus } from '../use-vega-transaction'; import type { Order } from './vega-order-transaction-dialog'; import { VegaOrderTransactionDialog } from './vega-order-transaction-dialog'; +jest.mock('@vegaprotocol/environment', () => ({ + useEnvironment: () => ({ + VEGA_EXPLORER_URL: 'https://test.explorer.vega.network', + }), +})); + describe('VegaOrderTransactionDialog', () => { it('should render when an order is successful', () => { const transaction: VegaTxState = { @@ -127,4 +133,27 @@ describe('VegaOrderTransactionDialog', () => { 'Order rejected by wallet' ); }); + + it('should render awaiting network confirmation and add link to tx in block explorer', () => { + const transaction: VegaTxState = { + status: VegaTxStatus.Default, + error: null, + txHash: 'TxHash', + signature: null, + }; + render( + + ); + expect(screen.getByTestId('order-status-header')).toHaveTextContent( + 'Awaiting network confirmation' + ); + expect(screen.getByTestId('tx-hash')).toHaveTextContent('TxHash'); + expect(screen.getByTestId('tx-hash')).toHaveAttribute( + 'href', + 'https://test.explorer.vega.network/txs/0xTxHash' + ); + }); }); diff --git a/libs/wallet/src/vega-order-transaction-dialog/vega-order-transaction-dialog.tsx b/libs/wallet/src/vega-order-transaction-dialog/vega-order-transaction-dialog.tsx index b707dabac..03e941635 100644 --- a/libs/wallet/src/vega-order-transaction-dialog/vega-order-transaction-dialog.tsx +++ b/libs/wallet/src/vega-order-transaction-dialog/vega-order-transaction-dialog.tsx @@ -7,6 +7,7 @@ import { } from '@vegaprotocol/react-helpers'; import type { VegaTxState } from '../use-vega-transaction'; import { VegaTxStatus } from '../use-vega-transaction'; +import { useEnvironment } from '@vegaprotocol/environment'; export interface Market { name: string; @@ -23,7 +24,7 @@ export interface Order { type: string | null; } -interface OrderDialogProps { +interface VegaOrderTransactionDialogProps { transaction: VegaTxState; finalizedOrder: Order | null; title?: string; @@ -33,7 +34,8 @@ export const VegaOrderTransactionDialog = ({ transaction, finalizedOrder, title = 'Order placed', -}: OrderDialogProps) => { +}: VegaOrderTransactionDialogProps) => { + const { VEGA_EXPLORER_URL } = useEnvironment(); // Rejected by wallet if (transaction.status === VegaTxStatus.Requested) { return ( @@ -73,8 +75,17 @@ export const VegaOrderTransactionDialog = ({ icon={} > {transaction.txHash && ( -

- {t(`Tx hash: ${transaction.txHash}`)} +

+ Tx hash:   + + {transaction.txHash} +

)}