From 28fb9c19cfcfdd2c6ff97094d0639a046e1f3663 Mon Sep 17 00:00:00 2001 From: gomes <17035424+gomesalexandre@users.noreply.github.com> Date: Wed, 10 Dec 2025 12:38:13 +0300 Subject: [PATCH 1/3] fix: temporarily use blockchair endpoints for send inputs introspection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- headers/csps/chains/zcash.ts | 6 ++- .../src/utxo/UtxoBaseAdapter.ts | 38 ++++++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/headers/csps/chains/zcash.ts b/headers/csps/chains/zcash.ts index c5b309acb02..a8f44c47d06 100644 --- a/headers/csps/chains/zcash.ts +++ b/headers/csps/chains/zcash.ts @@ -6,5 +6,9 @@ const mode = process.env.MODE ?? process.env.NODE_ENV ?? 'development' const env = loadEnv(mode, process.cwd(), '') export const csp: Csp = { - 'connect-src': [env.VITE_UNCHAINED_ZCASH_HTTP_URL, env.VITE_UNCHAINED_ZCASH_WS_URL], + 'connect-src': [ + env.VITE_UNCHAINED_ZCASH_HTTP_URL, + env.VITE_UNCHAINED_ZCASH_WS_URL, + 'https://api.blockchair.com', + ], } diff --git a/packages/chain-adapters/src/utxo/UtxoBaseAdapter.ts b/packages/chain-adapters/src/utxo/UtxoBaseAdapter.ts index c8bbffdaf38..ed521142e87 100644 --- a/packages/chain-adapters/src/utxo/UtxoBaseAdapter.ts +++ b/packages/chain-adapters/src/utxo/UtxoBaseAdapter.ts @@ -340,7 +340,23 @@ export abstract class UtxoBaseAdapter implements IChainAd const signTxInputs: BTCSignTxInput[] = [] for (const input of inputs) { - const data = await this.providers.http.getTransaction({ txid: input.txid }) + const data = await (async () => { + try { + return await this.providers.http.getTransaction({ txid: input.txid }) + } catch (error) { + if (this.chainId === KnownChainIds.ZcashMainnet) { + const response = await fetch( + `https://api.blockchair.com/zcash/raw/transaction/${input.txid}`, + ) + const data = await response.json() + if (!response.ok || data.error) { + throw new Error(`Blockchair API error: ${data.error || response.statusText}`) + } + return { hex: data.data[input.txid].raw_transaction } + } + throw error + } + })() signTxInputs.push({ // UTXO inputs are not guaranteed to have paths. @@ -544,7 +560,25 @@ export abstract class UtxoBaseAdapter implements IChainAd async broadcastTransaction({ hex }: Pick): Promise { try { - const txHash = await this.providers.http.sendTx({ sendTxBody: { hex } }) + const txHash = await (async () => { + try { + return await this.providers.http.sendTx({ sendTxBody: { hex } }) + } catch (error) { + if (this.chainId === KnownChainIds.ZcashMainnet) { + const response = await fetch('https://api.blockchair.com/zcash/push/transaction', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ data: hex }), + }) + const data = await response.json() + if (!response.ok || data.error) { + throw new Error(`Blockchair API error: ${data.error || response.statusText}`) + } + return data.data.transaction_hash + } + throw error + } + })() return txHash } catch (err) { From 4589ab0947242bf1e19df7f026e79228db5964d7 Mon Sep 17 00:00:00 2001 From: gomes <17035424+gomesalexandre@users.noreply.github.com> Date: Wed, 10 Dec 2025 12:39:27 +0300 Subject: [PATCH 2/3] feat: monkey patch throw MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- packages/chain-adapters/src/utxo/UtxoBaseAdapter.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/chain-adapters/src/utxo/UtxoBaseAdapter.ts b/packages/chain-adapters/src/utxo/UtxoBaseAdapter.ts index ed521142e87..4ff1dae7174 100644 --- a/packages/chain-adapters/src/utxo/UtxoBaseAdapter.ts +++ b/packages/chain-adapters/src/utxo/UtxoBaseAdapter.ts @@ -342,6 +342,7 @@ export abstract class UtxoBaseAdapter implements IChainAd for (const input of inputs) { const data = await (async () => { try { + throw new Error('Testing Blockchair fallback') return await this.providers.http.getTransaction({ txid: input.txid }) } catch (error) { if (this.chainId === KnownChainIds.ZcashMainnet) { @@ -562,6 +563,7 @@ export abstract class UtxoBaseAdapter implements IChainAd try { const txHash = await (async () => { try { + throw new Error('Testing Blockchair fallback') return await this.providers.http.sendTx({ sendTxBody: { hex } }) } catch (error) { if (this.chainId === KnownChainIds.ZcashMainnet) { From e3533d956b848926d94aff06ebeeebc89e64adf9 Mon Sep 17 00:00:00 2001 From: gomes <17035424+gomesalexandre@users.noreply.github.com> Date: Wed, 10 Dec 2025 12:41:15 +0300 Subject: [PATCH 3/3] Revert "feat: monkey patch throw" This reverts commit dfb64d752fe84bc6015b4c0106146af5dce9fe16. --- packages/chain-adapters/src/utxo/UtxoBaseAdapter.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/chain-adapters/src/utxo/UtxoBaseAdapter.ts b/packages/chain-adapters/src/utxo/UtxoBaseAdapter.ts index 4ff1dae7174..ed521142e87 100644 --- a/packages/chain-adapters/src/utxo/UtxoBaseAdapter.ts +++ b/packages/chain-adapters/src/utxo/UtxoBaseAdapter.ts @@ -342,7 +342,6 @@ export abstract class UtxoBaseAdapter implements IChainAd for (const input of inputs) { const data = await (async () => { try { - throw new Error('Testing Blockchair fallback') return await this.providers.http.getTransaction({ txid: input.txid }) } catch (error) { if (this.chainId === KnownChainIds.ZcashMainnet) { @@ -563,7 +562,6 @@ export abstract class UtxoBaseAdapter implements IChainAd try { const txHash = await (async () => { try { - throw new Error('Testing Blockchair fallback') return await this.providers.http.sendTx({ sendTxBody: { hex } }) } catch (error) { if (this.chainId === KnownChainIds.ZcashMainnet) {