From 68c76ff889d4bce3a07343b06608134611167b89 Mon Sep 17 00:00:00 2001 From: hippocampus-web3 Date: Thu, 29 Jan 2026 13:28:23 +0100 Subject: [PATCH 1/2] Add Vultisig TRON + Fix Vultisig cosmos --- packages/helpers/src/modules/swapKitError.ts | 3 ++ packages/wallet-extensions/src/types.ts | 1 + .../wallet-extensions/src/vultisig/index.ts | 30 ++++++++++++++ .../src/vultisig/walletHelpers.ts | 41 ++++++++++++++++--- 4 files changed, 70 insertions(+), 5 deletions(-) diff --git a/packages/helpers/src/modules/swapKitError.ts b/packages/helpers/src/modules/swapKitError.ts index 5113648dee..f3a02f4562 100644 --- a/packages/helpers/src/modules/swapKitError.ts +++ b/packages/helpers/src/modules/swapKitError.ts @@ -246,6 +246,9 @@ const errorCodes = { wallet_vultisig_contract_address_not_provided: 22102, wallet_vultisig_asset_not_defined: 22103, wallet_vultisig_send_transaction_no_address: 22104, + wallet_vultisig_locked: 22105, + wallet_vultisig_no_accounts: 22106, + wallet_vultisig_transaction_failed: 22107, /** * Wallets - Xaman diff --git a/packages/wallet-extensions/src/types.ts b/packages/wallet-extensions/src/types.ts index 67f9ec2fa4..be4c4eb5d0 100644 --- a/packages/wallet-extensions/src/types.ts +++ b/packages/wallet-extensions/src/types.ts @@ -62,6 +62,7 @@ declare global { polkadot: Eip1193Provider; ripple: Eip1193Provider; dash: Eip1193Provider; + tron: TronLinkWindow; zcash: Eip1193Provider; }; diff --git a/packages/wallet-extensions/src/vultisig/index.ts b/packages/wallet-extensions/src/vultisig/index.ts index 07ebb29163..2ff6d64dff 100644 --- a/packages/wallet-extensions/src/vultisig/index.ts +++ b/packages/wallet-extensions/src/vultisig/index.ts @@ -76,6 +76,7 @@ export const vultisigWallet = createWallet({ Chain.Ripple, Chain.Solana, Chain.THORChain, + Chain.Tron, Chain.Zcash, Chain.XLayer, ], @@ -171,5 +172,34 @@ async function getWalletMethods(chain: (typeof VULTISIG_SUPPORTED_CHAINS)[number return { ...toolbox, transfer: walletTransfer }; }) + .with(Chain.Tron, async () => { + const { createTronToolbox } = await import("@swapkit/toolboxes/tron"); + const tronProvider = window.vultisig?.tron; + if (!tronProvider) throw new SwapKitError("wallet_vultisig_not_found"); + + const response = await tronProvider.request({ method: "tron_requestAccounts" }); + if (response === "") { + throw new SwapKitError("wallet_vultisig_locked", { + message: "Vultisig is locked. Please unlock it to continue.", + }); + } + + const address = tronProvider.tronWeb?.defaultAddress?.base58; + if (!address) { + throw new SwapKitError("wallet_vultisig_no_accounts", { chain: Chain.Tron }); + } + + const signer = { + getAddress: async () => address, + signTransaction: async (transaction: any) => { + return await tronProvider.tronWeb.trx.sign(transaction); + }, + }; + + const toolbox = await createTronToolbox({ signer }); + + return { ...toolbox, address }; + }) + .otherwise(async () => null); } diff --git a/packages/wallet-extensions/src/vultisig/walletHelpers.ts b/packages/wallet-extensions/src/vultisig/walletHelpers.ts index febe226932..053f17216a 100644 --- a/packages/wallet-extensions/src/vultisig/walletHelpers.ts +++ b/packages/wallet-extensions/src/vultisig/walletHelpers.ts @@ -18,6 +18,7 @@ import type { getCosmosToolbox } from "@swapkit/toolboxes/cosmos"; import type { ApproveParams, CallParams, EVMTxParams } from "@swapkit/toolboxes/evm"; import type { SolanaProvider } from "@swapkit/toolboxes/solana"; import type { BrowserProvider, Eip1193Provider } from "ethers"; +import type { TronLinkWindow } from "../tronlink/types"; import type { VultisigCosmosProvider } from "../types"; type TransactionMethod = "send_transaction" | "deposit_transaction"; @@ -46,9 +47,11 @@ type VultisigProviderType = T extends typeof Chain.Solana ? VultisigCosmosProvider : T extends EVMChain ? Eip1193Provider - : T extends typeof Chain.Maya | typeof Chain.THORChain | typeof Chain.Ripple | typeof Chain.Polkadot | UTXOChain - ? Eip1193Provider - : undefined; + : T extends typeof Chain.Tron + ? TronLinkWindow + : T extends typeof Chain.Maya | typeof Chain.THORChain | typeof Chain.Ripple | typeof Chain.Polkadot | UTXOChain + ? Eip1193Provider + : undefined; export async function getVultisigProvider(chain: T): Promise> { if (!window.vultisig) throw new SwapKitError("wallet_vultisig_not_found"); @@ -67,6 +70,7 @@ export async function getVultisigProvider(chain: T): Promise window.vultisig?.mayachain as Eip1193Provider) .with(Chain.Polkadot, () => window.vultisig?.polkadot as Eip1193Provider) .with(Chain.Ripple, () => window.vultisig?.ripple as Eip1193Provider) + .with(Chain.Tron, () => window.vultisig?.tron as TronLinkWindow) .with(Chain.Zcash, () => window.vultisig?.zcash as Eip1193Provider) .otherwise(() => undefined) as VultisigProviderType; } @@ -115,11 +119,11 @@ export async function getVultisigAddress(chain: Chain) { await windowProvider.request({ method: "wallet_switch_chain", params: [{ chainId }] }); let account = await windowProvider.request({ method: "get_accounts" }); - if (!account) { + if (!account || (Array.isArray(account) && account.length === 0)) { const connectedAcount = await windowProvider.request({ method: "request_accounts" }); account = connectedAcount[0].address; } - return account; + return Array.isArray(account) ? account[0] : account; } if (EVMChains.includes(chain as EVMChain)) { @@ -136,6 +140,33 @@ export async function getVultisigAddress(chain: Chain) { return accounts.publicKey.toString(); } + if (chain === Chain.Tron) { + const tronProvider = (await getVultisigProvider(Chain.Tron)) as TronLinkWindow; + if (!tronProvider) { + throw new SwapKitError({ + errorKey: "wallet_provider_not_found", + info: { chain, wallet: WalletOption.VULTISIG }, + }); + } + + const response = await tronProvider.request({ method: "tron_requestAccounts" }); + if (response === "") { + throw new SwapKitError("wallet_vultisig_locked", { + message: "Vultisig is locked. Please unlock it to continue.", + }); + } + + const address = tronProvider.tronWeb?.defaultAddress?.base58; + if (!address) { + throw new SwapKitError({ + errorKey: "wallet_provider_not_found", + info: { chain, wallet: WalletOption.VULTISIG }, + }); + } + + return address; + } + const accounts = await windowProvider.request({ method: "request_accounts", params: [] }); return accounts[0]; } catch { From 6e4222d28644f4a11617a8ab14e59ef13cf66878 Mon Sep 17 00:00:00 2001 From: hippocampus-web3 Date: Thu, 29 Jan 2026 13:31:23 +0100 Subject: [PATCH 2/2] Add changeset --- .changeset/khaki-owls-trade.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/khaki-owls-trade.md diff --git a/.changeset/khaki-owls-trade.md b/.changeset/khaki-owls-trade.md new file mode 100644 index 0000000000..0384c9f286 --- /dev/null +++ b/.changeset/khaki-owls-trade.md @@ -0,0 +1,6 @@ +--- +"@swapkit/helpers": patch +"@swapkit/wallet-extensions": patch +--- + +Adds support for TRON in Vultisig and fixes Cosmos