From 555b905c80999482f42b4afe086e92ee3cd5bd78 Mon Sep 17 00:00:00 2001 From: Holmes <98631674+haodev007@users.noreply.github.com> Date: Sun, 21 Aug 2022 03:22:37 +0300 Subject: [PATCH] solana-contrib: Refactor `generateTXLink` (#675) * move generate tx link logic to /packages/solana-contrib/src/utils * fix: build error with pass tx to generateTXLink * pass signature on behalf of tx --- .../src/transaction/PendingTransaction.ts | 3 ++- .../src/transaction/TransactionReceipt.ts | 22 ++----------------- packages/solana-contrib/src/utils/index.ts | 1 + packages/solana-contrib/src/utils/txLink.ts | 21 ++++++++++++++++++ 4 files changed, 26 insertions(+), 21 deletions(-) create mode 100644 packages/solana-contrib/src/utils/txLink.ts diff --git a/packages/solana-contrib/src/transaction/PendingTransaction.ts b/packages/solana-contrib/src/transaction/PendingTransaction.ts index 329ad03ae..0c988c569 100644 --- a/packages/solana-contrib/src/transaction/PendingTransaction.ts +++ b/packages/solana-contrib/src/transaction/PendingTransaction.ts @@ -9,6 +9,7 @@ import type { import promiseRetry from "promise-retry"; import type { WrapOptions } from "retry"; +import { generateTXLink } from "../utils/txLink.js"; import { TransactionReceipt } from "./TransactionReceipt.js"; /** @@ -165,6 +166,6 @@ export class PendingTransaction { * @returns */ generateSolanaExplorerLink(cluster: Cluster = "mainnet-beta"): string { - return `https://explorer.solana.com/tx/${this.signature}?cluster=${cluster}`; + return generateTXLink(this.signature, cluster); } } diff --git a/packages/solana-contrib/src/transaction/TransactionReceipt.ts b/packages/solana-contrib/src/transaction/TransactionReceipt.ts index 0d9b5d888..e7f35d5f7 100644 --- a/packages/solana-contrib/src/transaction/TransactionReceipt.ts +++ b/packages/solana-contrib/src/transaction/TransactionReceipt.ts @@ -8,6 +8,7 @@ import { default as invariant } from "tiny-invariant"; import type { Event, EventParser } from "../interfaces.js"; import type { PromiseOrValue } from "../utils/misc.js"; import { valueAsPromise } from "../utils/misc.js"; +import { generateTXLink } from "../utils/txLink.js"; import { PendingTransaction } from "./PendingTransaction.js"; import type { TransactionEnvelope } from "./TransactionEnvelope.js"; @@ -19,11 +20,6 @@ export type TransactionLike = | PendingTransaction | TransactionReceipt; -export enum ExplorerType { - SOLANA_EXPLORER = "solana-explorer", - SOLSCAN = "solscan", -} - /** * Confirms a transaction, returning its receipt. * @@ -102,20 +98,6 @@ export class TransactionReceipt { * @returns */ generateSolanaExplorerLink(cluster: Cluster = "mainnet-beta"): string { - return this.generateTXLink(cluster); - } - - generateTXLink( - cluster: Cluster = "mainnet-beta", - explorerType: string = ExplorerType.SOLANA_EXPLORER - ): string { - switch (explorerType) { - case ExplorerType.SOLANA_EXPLORER: - return `https://explorer.solana.com/tx/${this.signature}?cluster=${cluster}`; - case ExplorerType.SOLSCAN: - return `https://solscan.io/tx/${this.signature}?cluster=${cluster}`; - default: - throw new Error(`Explorer type ${explorerType} is not supported.`); - } + return generateTXLink(this.signature, cluster); } } diff --git a/packages/solana-contrib/src/utils/index.ts b/packages/solana-contrib/src/utils/index.ts index 3c64bd05d..6ef4e4128 100644 --- a/packages/solana-contrib/src/utils/index.ts +++ b/packages/solana-contrib/src/utils/index.ts @@ -6,3 +6,4 @@ export * from "./pubkeyCache.js"; export * from "./publicKey.js"; export * from "./simulateTransactionWithCommitment.js"; export * from "./time.js"; +export * from "./txLink.js"; diff --git a/packages/solana-contrib/src/utils/txLink.ts b/packages/solana-contrib/src/utils/txLink.ts new file mode 100644 index 000000000..000306609 --- /dev/null +++ b/packages/solana-contrib/src/utils/txLink.ts @@ -0,0 +1,21 @@ +import type { Cluster } from "@solana/web3.js"; + +export enum ExplorerType { + SOLANA_EXPLORER = "solana-explorer", + SOLSCAN = "solscan", +} + +export function generateTXLink( + signature: string, + cluster: Cluster = "mainnet-beta", + explorerType: string = ExplorerType.SOLANA_EXPLORER +): string { + switch (explorerType) { + case ExplorerType.SOLANA_EXPLORER: + return `https://explorer.solana.com/tx/${signature}?cluster=${cluster}`; + case ExplorerType.SOLSCAN: + return `https://solscan.io/tx/${signature}?cluster=${cluster}`; + default: + throw new Error(`Explorer type ${explorerType} is not supported.`); + } +}