@rango-dev/provider-trezor 0.29.1-next.0 → 0.29.1-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mod.js +1 -1
- package/dist/mod.js.map +3 -3
- package/dist/utxo-ILXYPRDR.js +2 -0
- package/dist/utxo-ILXYPRDR.js.map +7 -0
- package/package.json +8 -7
- package/src/constants.ts +13 -11
- package/src/signers/utxo.ts +2 -2
- package/dist/provider-trezor.build.json +0 -1
- package/dist/utxo-MZNQ2QK4.js +0 -2
- package/dist/utxo-MZNQ2QK4.js.map +0 -7
package/dist/mod.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as f,b as g,c as
|
|
1
|
+
import{a as f,b as g,c as T}from"./chunk-HUUVMU7F.js";import{a as o,b as d,d as u,g as a,h as l,i as s}from"./chunk-FTGT4J2G.js";import{defineVersions as ot}from"@hub3js/core/utils";import{ProviderBuilder as tt}from"@hub3js/core";import{CAIP_ETHEREUM_CHAIN_ID as B,isEvmNamespace as L}from"@hub3js/evm";import{getChainIdFromCaip2ChainId as E}from"@hub3js/std/utils";import{CAIP_BITCOIN_CHAIN_ID as U,isUtxoNamespace as O}from"@rango-dev/wallets-core/namespaces/utxo";import{WalletTypes as R}from"@rango-dev/wallets-shared";import{dynamicImportWithRefinedError as h}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as N,TransactionType as v}from"rango-types";async function p(){let t=new N,{EthereumSigner:e}=await h(async()=>await import("./ethereum-WJFMSBHD.js")),{BTCSigner:r}=await h(async()=>await import("./utxo-ILXYPRDR.js"));return t.registerSigner(v.EVM,new e),t.registerSigner(v.TRANSFER,new r),t}o(p,"getSigners");var i=R.TREZOR,x={name:"Trezor",icon:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/trezor/icon.svg",extensions:{homepage:"https://trezor.io/learn/a/download-verify-trezor-suite"},properties:[{name:"namespaces",value:{selection:"single",data:[{label:"Ethereum",value:"EVM",id:"ETH",isChainSupported:t=>L(t)&&E(t)===B},{label:"Bitcoin",value:"UTXO",id:"BTC",isChainSupported:t=>O(t)&&E(t)===U}]}},{name:"derivationPath",value:{data:[{id:"metamask",label:"Metamask (m/44'/60'/0'/0/index)",namespace:"EVM",generateDerivationPath:t=>`44'/60'/0'/0/${t}`},{id:"ledgerLive",label:"LedgerLive (m/44'/60'/index'/0/0)",namespace:"EVM",generateDerivationPath:t=>`44'/60'/${t}'/0/0`},{id:"legacy",label:"Legacy (m/44'/60'/0'/index)",namespace:"EVM",generateDerivationPath:t=>`44'/60'/0'/${t}`},...g.map(t=>({id:`bitcoin-${t.id}`,label:`${t.label} (m/${t.purpose}'/0'/index')`,namespace:"UTXO",generateDerivationPath:e=>`${t.purpose}'/0'/${e}'/0/0`}))]}},{name:"signers",value:{getSigners:async()=>p()}}]};import{NamespaceBuilder as W}from"@hub3js/core";import{builders as I,utils as $}from"@hub3js/evm";import*as y from"@hub3js/std/builders";import{standardizeAndThrowError as F}from"@hub3js/std/operators";import{ETHEREUM_CHAIN_ID as H}from"@rango-dev/wallets-shared";var w=!1;async function m(){if(w)return;await(await a()).init({lazyLoad:!0,manifest:A()}),w=!0}o(m,"initTrezor");var V=I.connect().action(async function(t,e,r){if(!r?.derivationPath)throw new Error("Derivation Path can not be empty.");d(s(r.derivationPath)),await m();let n=await l();return{accounts:$.formatAccountsToCAIP(n.accounts,n.chainId),network:n.chainId}}).or(F).build(),j=y.disconnect().build(),k=I.getChainId().action(()=>H).build(),C=new W("EVM",i).action(V).action(j).action(k).build();import{NamespaceBuilder as Z}from"@hub3js/core";import*as z from"@hub3js/std/builders";import{standardizeAndThrowError as G}from"@hub3js/std/operators";import{builders as J}from"@rango-dev/wallets-core/namespaces/utxo";import{CAIP_BITCOIN_CHAIN_ID as X,utils as q}from"@rango-dev/wallets-core/namespaces/utxo";function Y(){return async(t,e)=>{if(!e?.derivationPath)throw new Error("Derivation Path can not be empty.");await m();let r=s(e.derivationPath),n=T(r);u(r);let c=await(await a()).getAddress({path:r,coin:f,scriptType:n,showOnTrezor:!1});if(!c.success)throw new Error(c.payload.error);let{address:M}=c.payload;return q.formatAccountsToCAIP([M],X)}}o(Y,"connect");var b={connect:Y};var K=J.connect().action(b.connect()).or(G).build(),Q=z.disconnect().build(),P=new Z("UTXO",i).action(K).action(Q).build();var _,A=o(()=>_,"getTrezorManifest"),D=o(()=>new tt(i).init(function(t,e){let[,r]=t.state();if(!e.manifest)throw new Error("Trezor manifest is required");_=e.manifest,r("installed",!0),console.debug("[trezor] instance detected.",t)}).config("metadata",x).add("evm",C).add("utxo",P).build(),"buildProvider");var qt=o(()=>ot().version("1.0.0",D()).build(),"versions");export{qt as versions};
|
|
2
2
|
//# sourceMappingURL=mod.js.map
|
package/dist/mod.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/mod.ts", "../src/provider.ts", "../src/constants.ts", "../src/signer.ts", "../src/namespaces/evm.ts", "../src/init.ts", "../src/namespaces/utxo.ts", "../src/actions/utxo.ts"],
|
|
4
|
-
"sourcesContent": ["import { defineVersions } from '@hub3js/core/utils';\n\nimport { buildProvider } from './provider.js';\n\nconst versions = () =>\n defineVersions().version('1.0.0', buildProvider()).build();\n\nexport { versions };\n", "import type { Environments } from './types.js';\n\nimport { ProviderBuilder } from '@hub3js/core';\n\nimport { metadata, WALLET_ID } from './constants.js';\nimport { evm } from './namespaces/evm.js';\nimport { utxo } from './namespaces/utxo.js';\n\nlet trezorManifest: Environments['manifest'];\n\nexport const getTrezorManifest = () => trezorManifest;\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context, environments: Environments) {\n const [, setState] = context.state();\n\n if (!environments.manifest) {\n throw new Error('Trezor manifest is required');\n }\n\n trezorManifest = environments.manifest;\n setState('installed', true);\n console.debug('[trezor] instance detected.', context);\n })\n .config('metadata', metadata)\n .add('evm', evm)\n .add('utxo', utxo)\n .build();\n\nexport { buildProvider };\n", "import type { ProviderMetadata } from '@hub3js/core';\n\nimport {
|
|
5
|
-
"mappings": "iIAAA,OAAS,kBAAAA,
|
|
6
|
-
"names": ["defineVersions", "ProviderBuilder", "
|
|
4
|
+
"sourcesContent": ["import { defineVersions } from '@hub3js/core/utils';\n\nimport { buildProvider } from './provider.js';\n\nconst versions = () =>\n defineVersions().version('1.0.0', buildProvider()).build();\n\nexport { versions };\n", "import type { Environments } from './types.js';\n\nimport { ProviderBuilder } from '@hub3js/core';\n\nimport { metadata, WALLET_ID } from './constants.js';\nimport { evm } from './namespaces/evm.js';\nimport { utxo } from './namespaces/utxo.js';\n\nlet trezorManifest: Environments['manifest'];\n\nexport const getTrezorManifest = () => trezorManifest;\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context, environments: Environments) {\n const [, setState] = context.state();\n\n if (!environments.manifest) {\n throw new Error('Trezor manifest is required');\n }\n\n trezorManifest = environments.manifest;\n setState('installed', true);\n console.debug('[trezor] instance detected.', context);\n })\n .config('metadata', metadata)\n .add('evm', evm)\n .add('utxo', utxo)\n .build();\n\nexport { buildProvider };\n", "import type { ProviderMetadata } from '@hub3js/core';\n\nimport { CAIP_ETHEREUM_CHAIN_ID, isEvmNamespace } from '@hub3js/evm';\nimport { getChainIdFromCaip2ChainId } from '@hub3js/std/utils';\nimport {\n CAIP_BITCOIN_CHAIN_ID,\n isUtxoNamespace,\n} from '@rango-dev/wallets-core/namespaces/utxo';\nimport { WalletTypes } from '@rango-dev/wallets-shared';\n\nimport getSigners from './signer.js';\nimport { BITCOIN_ADDRESS_TYPES } from './utxo/config.js';\n\nexport const WALLET_ID = WalletTypes.TREZOR;\n\nexport const metadata: ProviderMetadata = {\n name: 'Trezor',\n icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/trezor/icon.svg',\n extensions: {\n homepage: 'https://trezor.io/learn/a/download-verify-trezor-suite',\n },\n properties: [\n {\n name: 'namespaces',\n value: {\n selection: 'single',\n data: [\n {\n label: 'Ethereum',\n value: 'EVM',\n id: 'ETH',\n isChainSupported: (chainId: string) =>\n isEvmNamespace(chainId) &&\n getChainIdFromCaip2ChainId(chainId) === CAIP_ETHEREUM_CHAIN_ID,\n },\n {\n label: 'Bitcoin',\n value: 'UTXO',\n id: 'BTC',\n isChainSupported: (chainId: string) =>\n isUtxoNamespace(chainId) &&\n getChainIdFromCaip2ChainId(chainId) === CAIP_BITCOIN_CHAIN_ID,\n },\n ],\n },\n },\n {\n name: 'derivationPath',\n value: {\n data: [\n {\n id: 'metamask',\n label: `Metamask (m/44'/60'/0'/0/index)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/0'/0/${index}`,\n },\n {\n id: 'ledgerLive',\n label: `LedgerLive (m/44'/60'/index'/0/0)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/${index}'/0/0`,\n },\n {\n id: 'legacy',\n label: `Legacy (m/44'/60'/0'/index)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/0'/${index}`,\n },\n /*\n * Bitcoin derivation templates. The BIP-43 purpose (and thus the address\n * type) is what the user picks here; `index` selects the account.\n */\n ...BITCOIN_ADDRESS_TYPES.map((addressType) => ({\n id: `bitcoin-${addressType.id}`,\n label: `${addressType.label} (m/${addressType.purpose}'/0'/index')`,\n namespace: 'UTXO',\n generateDerivationPath: (index: string) =>\n `${addressType.purpose}'/0'/${index}'/0/0`,\n })),\n ],\n },\n },\n {\n name: 'signers',\n value: { getSigners: async () => getSigners() },\n },\n ],\n};\n", "import type { SignerFactory } from 'rango-types';\n\nimport { dynamicImportWithRefinedError } from '@rango-dev/wallets-shared';\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nexport default async function getSigners(): Promise<SignerFactory> {\n const signers = new DefaultSignerFactory();\n const { EthereumSigner } = await dynamicImportWithRefinedError(\n async () => await import('./signers/ethereum.js')\n );\n const { BTCSigner } = await dynamicImportWithRefinedError(\n async () => await import('./signers/utxo.js')\n );\n signers.registerSigner(TxType.EVM, new EthereumSigner());\n signers.registerSigner(TxType.TRANSFER, new BTCSigner());\n return signers;\n}\n", "import type { EvmActions } from '@hub3js/evm';\n\nimport { NamespaceBuilder } from '@hub3js/core';\nimport { builders, utils } from '@hub3js/evm';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\nimport { ETHEREUM_CHAIN_ID } from '@rango-dev/wallets-shared';\n\nimport { WALLET_ID } from '../constants.js';\nimport { initTrezor } from '../init.js';\nimport { setDerivationPath } from '../state.js';\nimport {\n getEthereumAccounts,\n getTrezorNormalizedDerivationPath,\n} from '../utils.js';\n\nconst connect = builders\n .connect()\n .action(async function (_context, _chain, options) {\n if (!options?.derivationPath) {\n throw new Error('Derivation Path can not be empty.');\n }\n setDerivationPath(\n getTrezorNormalizedDerivationPath(options.derivationPath)\n );\n\n await initTrezor();\n\n const result = await getEthereumAccounts();\n\n const formatAccounts = utils.formatAccountsToCAIP(\n result.accounts,\n result.chainId\n );\n\n return {\n accounts: formatAccounts,\n network: result.chainId,\n };\n })\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders.disconnect<EvmActions>().build();\n\nconst getChainId = builders\n .getChainId()\n .action(() => ETHEREUM_CHAIN_ID)\n .build();\n\nconst evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(getChainId)\n .build();\n\nexport { evm };\n", "import { getTrezorManifest } from './provider.js';\nimport { getTrezorModule } from './utils.js';\n\nlet isTrezorInitialized = false;\n\n/*\n * `TrezorConnect.init` throws if called twice, so initialization is shared across every\n * namespace (EVM, UTXO). `lazyLoad` defers iframe injection until the first method call.\n */\nexport async function initTrezor() {\n if (isTrezorInitialized) {\n return;\n }\n const TrezorConnect = await getTrezorModule();\n await TrezorConnect.init({\n lazyLoad: true,\n manifest: getTrezorManifest(),\n });\n isTrezorInitialized = true;\n}\n", "import type { UtxoActions } from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport { NamespaceBuilder } from '@hub3js/core';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\nimport { builders } from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport { utxoActions } from '../actions/utxo.js';\nimport { WALLET_ID } from '../constants.js';\n\nconst connect = builders\n .connect()\n .action(utxoActions.connect())\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders.disconnect<UtxoActions>().build();\n\nconst utxo = new NamespaceBuilder<UtxoActions>('UTXO', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .build();\n\nexport { utxo };\n", "import type { Context, FunctionWithContext } from '@hub3js/core';\nimport type { UtxoActions } from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport {\n CAIP_BITCOIN_CHAIN_ID,\n utils,\n} from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport { initTrezor } from '../init.js';\nimport { setBitcoinDerivationPath } from '../state.js';\nimport {\n getTrezorModule,\n getTrezorNormalizedDerivationPath,\n} from '../utils.js';\nimport { BITCOIN_COIN_NAME, resolveBitcoinScriptType } from '../utxo/config.js';\n\n/**\n * Connect the Bitcoin account for the selected derivation path: derive the receive\n * address and return it CAIP-encoded with the bip122 Bitcoin chain id. The path is kept\n * (like the EVM namespace does) because Rango's PSBT has no derivation data, so the\n * signer needs it at signing time.\n */\nexport function connect(): FunctionWithContext<\n UtxoActions['connect'],\n Context\n> {\n return async (_context, options) => {\n if (!options?.derivationPath) {\n throw new Error('Derivation Path can not be empty.');\n }\n\n await initTrezor();\n\n const path = getTrezorNormalizedDerivationPath(options.derivationPath);\n const inputScriptType = resolveBitcoinScriptType(path);\n setBitcoinDerivationPath(path);\n\n const TrezorConnect = await getTrezorModule();\n const result = await TrezorConnect.getAddress({\n path,\n coin: BITCOIN_COIN_NAME,\n scriptType: inputScriptType,\n showOnTrezor: false,\n });\n\n if (!result.success) {\n throw new Error(result.payload.error);\n }\n\n const { address } = result.payload;\n\n return utils.formatAccountsToCAIP([address], CAIP_BITCOIN_CHAIN_ID);\n };\n}\n\nexport const utxoActions = { connect };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["defineVersions", "ProviderBuilder", "CAIP_ETHEREUM_CHAIN_ID", "isEvmNamespace", "getChainIdFromCaip2ChainId", "CAIP_BITCOIN_CHAIN_ID", "isUtxoNamespace", "WalletTypes", "dynamicImportWithRefinedError", "DefaultSignerFactory", "TxType", "getSigners", "signers", "DefaultSignerFactory", "EthereumSigner", "dynamicImportWithRefinedError", "BTCSigner", "TxType", "__name", "WALLET_ID", "WalletTypes", "metadata", "chainId", "isEvmNamespace", "getChainIdFromCaip2ChainId", "CAIP_ETHEREUM_CHAIN_ID", "isUtxoNamespace", "CAIP_BITCOIN_CHAIN_ID", "index", "BITCOIN_ADDRESS_TYPES", "addressType", "getSigners", "NamespaceBuilder", "builders", "utils", "commonBuilders", "standardizeAndThrowError", "ETHEREUM_CHAIN_ID", "isTrezorInitialized", "initTrezor", "getTrezorModule", "getTrezorManifest", "__name", "connect", "builders", "_context", "_chain", "options", "setDerivationPath", "getTrezorNormalizedDerivationPath", "initTrezor", "result", "getEthereumAccounts", "utils", "standardizeAndThrowError", "disconnect", "getChainId", "ETHEREUM_CHAIN_ID", "evm", "NamespaceBuilder", "WALLET_ID", "NamespaceBuilder", "commonBuilders", "standardizeAndThrowError", "builders", "CAIP_BITCOIN_CHAIN_ID", "utils", "connect", "_context", "options", "initTrezor", "path", "getTrezorNormalizedDerivationPath", "inputScriptType", "resolveBitcoinScriptType", "setBitcoinDerivationPath", "result", "getTrezorModule", "BITCOIN_COIN_NAME", "address", "utils", "CAIP_BITCOIN_CHAIN_ID", "__name", "utxoActions", "connect", "builders", "utxoActions", "standardizeAndThrowError", "disconnect", "utxo", "NamespaceBuilder", "WALLET_ID", "trezorManifest", "getTrezorManifest", "__name", "buildProvider", "ProviderBuilder", "WALLET_ID", "context", "environments", "setState", "metadata", "evm", "utxo", "versions", "__name", "defineVersions", "buildProvider"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as d,c as h}from"./chunk-HUUVMU7F.js";import{a as s,e as g,g as m}from"./chunk-FTGT4J2G.js";import{isBitcoinBlockchain as B}from"@rango-dev/wallets-shared";import{SignerError as S}from"rango-types";import*as x from"@bitcoinerlab/secp256k1";import*as n from"bitcoinjs-lib";n.initEccLib(x);var z=s(o=>Buffer.from(o).reverse().toString("hex"),"reverseTxid");function l(o,e,c=n.networks.bitcoin){let r=n.Psbt.fromBase64(o,{network:c}),u=h(e),T=r.txInputs.map((t,p)=>{let i=r.data.inputs[p];if(i.sighashType!=null&&i.sighashType!==n.Transaction.SIGHASH_ALL)throw new Error(`PSBT input #${p} uses sighash type ${i.sighashType}; only SIGHASH_ALL is supported.`);let a=i.witnessUtxo??n.Transaction.fromBuffer(i.nonWitnessUtxo).outs[t.index];return{address_n:e,prev_hash:z(t.hash),prev_index:t.index,amount:a.value.toString(),script_type:u,sequence:t.sequence}}),f=r.txOutputs.map(t=>t.address?{script_type:"PAYTOADDRESS",address:t.address,amount:t.value.toString()}:{script_type:"PAYTOOPRETURN",amount:"0",op_return_data:(n.script.decompile(t.script)?.find(Buffer.isBuffer)??Buffer.alloc(0)).toString("hex")});return{inputs:T,outputs:f,version:r.version,locktime:r.locktime}}s(l,"buildTrezorBitcoinTransaction");function w(o){return new Error(o.code?`${o.error} (${o.code})`:o.error)}s(w,"getTrezorErrorMessage");var b=class{static{s(this,"BTCSigner")}async signMessage(){throw S.UnimplementedError("signMessage")}async signAndSendTx(e){let{blockchain:c}=e.asset;if(!B(c))throw new Error(`Signing ${c} transactions is not supported by Trezor.`);let{psbt:r}=e;if(!r)throw new Error("No PSBT found to sign. Ensure a valid PSBT is provided.");let u=g();if(!u)throw new Error("No connected Bitcoin account found. Please connect the wallet first.");let T=await m(),{inputs:f,outputs:t,version:p,locktime:i}=l(r.unsignedPsbtBase64,u),a=await T.signTransaction({coin:d,inputs:f,outputs:t,version:p,locktime:i,push:!0});if(!a.success)throw w(a.payload);return{hash:await this.#r(a.payload)}}async#r(e){if(e.txid)return e.txid;if(!e.serializedTx)throw new Error("Trezor did not return a transaction id.");let r=await(await m()).pushTransaction({tx:e.serializedTx,coin:d});if(!r.success)throw w(r.payload);return r.payload.txid}};export{b as BTCSigner};
|
|
2
|
+
//# sourceMappingURL=utxo-ILXYPRDR.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/signers/utxo.ts", "../src/utxo/psbt.ts"],
|
|
4
|
+
"sourcesContent": ["import type { GenericSigner, Transfer } from 'rango-types';\n\nimport { isBitcoinBlockchain } from '@rango-dev/wallets-shared';\nimport { SignerError } from 'rango-types';\n\nimport { getBitcoinDerivationPath } from '../state.js';\nimport { getTrezorModule } from '../utils.js';\nimport { BITCOIN_COIN_NAME } from '../utxo/config.js';\nimport { buildTrezorBitcoinTransaction } from '../utxo/psbt.js';\n\nfunction getTrezorErrorMessage(payload: { error: string; code?: string }) {\n return new Error(\n payload.code ? `${payload.error} (${payload.code})` : payload.error\n );\n}\n\nexport class BTCSigner implements GenericSigner<Transfer> {\n async signMessage(): Promise<string> {\n throw SignerError.UnimplementedError('signMessage');\n }\n\n async signAndSendTx(tx: Transfer): Promise<{ hash: string }> {\n const { blockchain } = tx.asset;\n if (!isBitcoinBlockchain(blockchain)) {\n throw new Error(\n `Signing ${blockchain} transactions is not supported by Trezor.`\n );\n }\n\n const { psbt } = tx;\n if (!psbt) {\n throw new Error(\n 'No PSBT found to sign. Ensure a valid PSBT is provided.'\n );\n }\n\n const path = getBitcoinDerivationPath();\n if (!path) {\n throw new Error(\n 'No connected Bitcoin account found. Please connect the wallet first.'\n );\n }\n\n const TrezorConnect = await getTrezorModule();\n const { inputs, outputs, version, locktime } =\n buildTrezorBitcoinTransaction(psbt.unsignedPsbtBase64, path);\n\n // `push: true` signs and broadcasts via Trezor's Blockbook backend.\n const result = await TrezorConnect.signTransaction({\n coin: BITCOIN_COIN_NAME,\n inputs,\n outputs,\n version,\n locktime,\n push: true,\n });\n\n if (!result.success) {\n throw getTrezorErrorMessage(result.payload);\n }\n\n return { hash: await this.#resolveHash(result.payload) };\n }\n\n /**\n * `push: true` usually returns the txid directly. If it isn't present (older\n * firmware/connect), push the serialized transaction explicitly as a fallback.\n */\n async #resolveHash(payload: {\n txid?: string;\n serializedTx?: string;\n }): Promise<string> {\n if (payload.txid) {\n return payload.txid;\n }\n if (!payload.serializedTx) {\n throw new Error('Trezor did not return a transaction id.');\n }\n\n const TrezorConnect = await getTrezorModule();\n const pushResult = await TrezorConnect.pushTransaction({\n tx: payload.serializedTx,\n coin: BITCOIN_COIN_NAME,\n });\n if (!pushResult.success) {\n throw getTrezorErrorMessage(pushResult.payload);\n }\n return pushResult.payload.txid;\n }\n}\n", "import type { SignTransaction } from '@trezor/connect-web';\n\nimport * as ecc from '@bitcoinerlab/secp256k1';\nimport * as bitcoin from 'bitcoinjs-lib';\n\nimport { resolveBitcoinScriptType } from './config.js';\n\n// Lets bitcoinjs-lib decode taproot (witness v1) output addresses.\nbitcoin.initEccLib(ecc);\n\ntype TrezorInput = SignTransaction['inputs'][number];\ntype TrezorOutput = SignTransaction['outputs'][number];\n\nexport interface TrezorBitcoinTransaction {\n inputs: TrezorInput[];\n outputs: TrezorOutput[];\n /** Transaction version from the PSBT \u2014 preserved so the signed tx matches Rango's. */\n version: number;\n /** Transaction locktime from the PSBT (e.g. for CLTV) \u2014 preserved as-is. */\n locktime: number;\n}\n\nconst reverseTxid = (hash: Buffer) =>\n Buffer.from(hash).reverse().toString('hex');\n\n/**\n * Translate Rango's unsigned PSBT into the transaction Trezor's `signTransaction` expects\n * (Trezor has no \"sign this PSBT\" call). Every field that affects the resulting bytes is\n * preserved: `version`, `locktime`, and per-input `sequence` (RBF / locktime signaling),\n * alongside each input's amount and script.\n *\n * Rango's PSBT carries no derivation data, so the connected `path` (and the script type\n * from its BIP-43 purpose) is applied to every input \u2014 Rango funds the swap from that\n * single address. `refTxs` are omitted: Trezor Connect fetches previous transactions from\n * its Blockbook backend. Pure function -> unit testable.\n *\n * Only SIGHASH_ALL is supported: a non-default per-input sighash can't be honored through\n * Trezor's signTransaction, so we reject it rather than sign the wrong thing. Multisig /\n * script-path spends are out of scope (Rango funds from a single-key address).\n */\nexport function buildTrezorBitcoinTransaction(\n unsignedPsbtBase64: string,\n path: string,\n network: bitcoin.Network = bitcoin.networks.bitcoin\n): TrezorBitcoinTransaction {\n const psbt = bitcoin.Psbt.fromBase64(unsignedPsbtBase64, { network });\n const scriptType = resolveBitcoinScriptType(path);\n\n const inputs = psbt.txInputs.map((input, index): TrezorInput => {\n const data = psbt.data.inputs[index];\n\n if (\n data.sighashType != null &&\n data.sighashType !== bitcoin.Transaction.SIGHASH_ALL\n ) {\n throw new Error(\n `PSBT input #${index} uses sighash type ${data.sighashType}; only SIGHASH_ALL is supported.`\n );\n }\n\n const utxo =\n data.witnessUtxo ??\n bitcoin.Transaction.fromBuffer(data.nonWitnessUtxo as Buffer).outs[\n input.index\n ];\n return {\n // Trezor Connect accepts the path string directly (like our EVM signer).\n address_n: path,\n prev_hash: reverseTxid(input.hash),\n prev_index: input.index,\n amount: utxo.value.toString(),\n script_type: scriptType,\n sequence: input.sequence,\n };\n });\n\n const outputs = psbt.txOutputs.map(\n (output): TrezorOutput =>\n output.address\n ? {\n script_type: 'PAYTOADDRESS',\n address: output.address,\n amount: output.value.toString(),\n }\n : {\n script_type: 'PAYTOOPRETURN',\n amount: '0',\n op_return_data: (\n bitcoin.script.decompile(output.script)?.find(Buffer.isBuffer) ??\n Buffer.alloc(0)\n ).toString('hex'),\n }\n );\n\n return { inputs, outputs, version: psbt.version, locktime: psbt.locktime };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["isBitcoinBlockchain", "SignerError", "ecc", "bitcoin", "ecc", "reverseTxid", "__name", "hash", "buildTrezorBitcoinTransaction", "unsignedPsbtBase64", "path", "network", "psbt", "scriptType", "resolveBitcoinScriptType", "inputs", "input", "index", "data", "utxo", "outputs", "output", "getTrezorErrorMessage", "payload", "__name", "BTCSigner", "SignerError", "tx", "blockchain", "isBitcoinBlockchain", "psbt", "path", "getBitcoinDerivationPath", "TrezorConnect", "getTrezorModule", "inputs", "outputs", "version", "locktime", "buildTrezorBitcoinTransaction", "result", "BITCOIN_COIN_NAME", "#resolveHash", "pushResult"]
|
|
7
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rango-dev/provider-trezor",
|
|
3
|
-
"version": "0.29.1-next.
|
|
3
|
+
"version": "0.29.1-next.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"source": "./src/mod.ts",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"src"
|
|
15
15
|
],
|
|
16
16
|
"scripts": {
|
|
17
|
-
"build": "
|
|
17
|
+
"build": "yarn run rangutopia library build --splitting",
|
|
18
18
|
"ts-check": "tsc --declaration --emitDeclarationOnly -p ./tsconfig.json",
|
|
19
19
|
"clean": "rimraf dist",
|
|
20
20
|
"format": "prettier --write '{.,src}/**/*.{ts,tsx}'",
|
|
@@ -22,11 +22,12 @@
|
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@bitcoinerlab/secp256k1": "^1.2.0",
|
|
25
|
-
"@hub3js/core": "^0.61.
|
|
26
|
-
"@hub3js/evm": "^0.3.
|
|
27
|
-
"@hub3js/std": "^0.2.
|
|
28
|
-
"@rango-dev/signer-evm": "^0.44.0",
|
|
29
|
-
"@rango-dev/wallets-
|
|
25
|
+
"@hub3js/core": "^0.61.1",
|
|
26
|
+
"@hub3js/evm": "^0.3.3",
|
|
27
|
+
"@hub3js/std": "^0.2.3",
|
|
28
|
+
"@rango-dev/signer-evm": "^0.44.1-next.0",
|
|
29
|
+
"@rango-dev/wallets-core": "^0.60.1-next.4",
|
|
30
|
+
"@rango-dev/wallets-shared": "^0.61.1-next.5",
|
|
30
31
|
"@trezor/connect-web": "^9.5.0",
|
|
31
32
|
"bitcoinjs-lib": "^6.1.7",
|
|
32
33
|
"ethers": "^6.13.2",
|
package/src/constants.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import type { ProviderMetadata } from '@hub3js/core';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { CAIP_ETHEREUM_CHAIN_ID, isEvmNamespace } from '@hub3js/evm';
|
|
4
|
+
import { getChainIdFromCaip2ChainId } from '@hub3js/std/utils';
|
|
5
|
+
import {
|
|
6
|
+
CAIP_BITCOIN_CHAIN_ID,
|
|
7
|
+
isUtxoNamespace,
|
|
8
|
+
} from '@rango-dev/wallets-core/namespaces/utxo';
|
|
9
|
+
import { WalletTypes } from '@rango-dev/wallets-shared';
|
|
5
10
|
|
|
6
11
|
import getSigners from './signer.js';
|
|
7
12
|
import { BITCOIN_ADDRESS_TYPES } from './utxo/config.js';
|
|
@@ -24,20 +29,17 @@ export const metadata: ProviderMetadata = {
|
|
|
24
29
|
label: 'Ethereum',
|
|
25
30
|
value: 'EVM',
|
|
26
31
|
id: 'ETH',
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
),
|
|
32
|
+
isChainSupported: (chainId: string) =>
|
|
33
|
+
isEvmNamespace(chainId) &&
|
|
34
|
+
getChainIdFromCaip2ChainId(chainId) === CAIP_ETHEREUM_CHAIN_ID,
|
|
31
35
|
},
|
|
32
36
|
{
|
|
33
37
|
label: 'Bitcoin',
|
|
34
38
|
value: 'UTXO',
|
|
35
39
|
id: 'BTC',
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
chain.name === Networks.BTC
|
|
40
|
-
),
|
|
40
|
+
isChainSupported: (chainId: string) =>
|
|
41
|
+
isUtxoNamespace(chainId) &&
|
|
42
|
+
getChainIdFromCaip2ChainId(chainId) === CAIP_BITCOIN_CHAIN_ID,
|
|
41
43
|
},
|
|
42
44
|
],
|
|
43
45
|
},
|
package/src/signers/utxo.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { GenericSigner, Transfer } from 'rango-types';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { isBitcoinBlockchain } from '@rango-dev/wallets-shared';
|
|
4
4
|
import { SignerError } from 'rango-types';
|
|
5
5
|
|
|
6
6
|
import { getBitcoinDerivationPath } from '../state.js';
|
|
@@ -21,7 +21,7 @@ export class BTCSigner implements GenericSigner<Transfer> {
|
|
|
21
21
|
|
|
22
22
|
async signAndSendTx(tx: Transfer): Promise<{ hash: string }> {
|
|
23
23
|
const { blockchain } = tx.asset;
|
|
24
|
-
if (blockchain
|
|
24
|
+
if (!isBitcoinBlockchain(blockchain)) {
|
|
25
25
|
throw new Error(
|
|
26
26
|
`Signing ${blockchain} transactions is not supported by Trezor.`
|
|
27
27
|
);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"inputs":{"src/state.ts":{"bytes":744,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils.ts":{"bytes":1690,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"src/state.ts","kind":"import-statement","original":"./state.js"},{"path":"@trezor/connect-web","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/signers/ethereum.ts":{"bytes":3825,"imports":[{"path":"@rango-dev/signer-evm","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"ethers","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/state.ts","kind":"import-statement","original":"../state.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utxo/config.ts":{"bytes":1961,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utxo/psbt.ts":{"bytes":3426,"imports":[{"path":"@bitcoinerlab/secp256k1","kind":"import-statement","external":true},{"path":"bitcoinjs-lib","kind":"import-statement","external":true},{"path":"src/utxo/config.ts","kind":"import-statement","original":"./config.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/signers/utxo.ts":{"bytes":2629,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/state.ts","kind":"import-statement","original":"../state.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"},{"path":"src/utxo/config.ts","kind":"import-statement","original":"../utxo/config.js"},{"path":"src/utxo/psbt.ts","kind":"import-statement","original":"../utxo/psbt.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/signer.ts":{"bytes":702,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signers/ethereum.ts","kind":"dynamic-import","original":"./signers/ethereum.js"},{"path":"src/signers/utxo.ts","kind":"dynamic-import","original":"./signers/utxo.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/constants.ts":{"bytes":2728,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signer.ts","kind":"import-statement","original":"./signer.js"},{"path":"src/utxo/config.ts","kind":"import-statement","original":"./utxo/config.js"}],"format":"esm"},"src/init.ts":{"bytes":571,"imports":[{"path":"src/provider.ts","kind":"import-statement","original":"./provider.js"},{"path":"src/utils.ts","kind":"import-statement","original":"./utils.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/namespaces/evm.ts":{"bytes":1477,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/evm","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"../constants.js"},{"path":"src/init.ts","kind":"import-statement","original":"../init.js"},{"path":"src/state.ts","kind":"import-statement","original":"../state.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"}],"format":"esm"},"src/actions/utxo.ts":{"bytes":1692,"imports":[{"path":"@rango-dev/wallets-core/namespaces/utxo","kind":"import-statement","external":true},{"path":"src/init.ts","kind":"import-statement","original":"../init.js"},{"path":"src/state.ts","kind":"import-statement","original":"../state.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"},{"path":"src/utxo/config.ts","kind":"import-statement","original":"../utxo/config.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/namespaces/utxo.ts":{"bytes":736,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/utxo","kind":"import-statement","external":true},{"path":"src/actions/utxo.ts","kind":"import-statement","original":"../actions/utxo.js"},{"path":"src/constants.ts","kind":"import-statement","original":"../constants.js"}],"format":"esm"},"src/provider.ts":{"bytes":878,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"./constants.js"},{"path":"src/namespaces/evm.ts","kind":"import-statement","original":"./namespaces/evm.js"},{"path":"src/namespaces/utxo.ts","kind":"import-statement","original":"./namespaces/utxo.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/mod.ts":{"bytes":209,"imports":[{"path":"@hub3js/core/utils","kind":"import-statement","external":true},{"path":"src/provider.ts","kind":"import-statement","original":"./provider.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/mod.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":14560},"dist/mod.js":{"imports":[{"path":"dist/chunk-HUUVMU7F.js","kind":"import-statement"},{"path":"dist/chunk-FTGT4J2G.js","kind":"import-statement"},{"path":"@hub3js/core/utils","kind":"import-statement","external":true},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"dist/ethereum-WJFMSBHD.js","kind":"dynamic-import"},{"path":"dist/utxo-MZNQ2QK4.js","kind":"dynamic-import"},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/evm","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/utxo","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/utxo","kind":"import-statement","external":true}],"exports":["versions"],"entryPoint":"src/mod.ts","inputs":{"src/mod.ts":{"bytesInOutput":110},"src/provider.ts":{"bytesInOutput":353},"src/constants.ts":{"bytesInOutput":1141},"src/signer.ts":{"bytesInOutput":412},"src/namespaces/evm.ts":{"bytesInOutput":650},"src/init.ts":{"bytesInOutput":113},"src/namespaces/utxo.ts":{"bytesInOutput":342},"src/actions/utxo.ts":{"bytesInOutput":470}},"bytes":3776},"dist/ethereum-WJFMSBHD.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":6428},"dist/ethereum-WJFMSBHD.js":{"imports":[{"path":"dist/chunk-FTGT4J2G.js","kind":"import-statement"},{"path":"@rango-dev/signer-evm","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"ethers","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true}],"exports":["EthereumSigner","getTrezorErrorMessage"],"entryPoint":"src/signers/ethereum.ts","inputs":{"src/signers/ethereum.ts":{"bytesInOutput":1474}},"bytes":1637},"dist/utxo-MZNQ2QK4.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":9115},"dist/utxo-MZNQ2QK4.js":{"imports":[{"path":"dist/chunk-HUUVMU7F.js","kind":"import-statement"},{"path":"dist/chunk-FTGT4J2G.js","kind":"import-statement"},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@bitcoinerlab/secp256k1","kind":"import-statement","external":true},{"path":"bitcoinjs-lib","kind":"import-statement","external":true}],"exports":["BTCSigner"],"entryPoint":"src/signers/utxo.ts","inputs":{"src/signers/utxo.ts":{"bytesInOutput":1107},"src/utxo/psbt.ts":{"bytesInOutput":1006}},"bytes":2280},"dist/chunk-HUUVMU7F.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":2802},"dist/chunk-HUUVMU7F.js":{"imports":[{"path":"dist/chunk-FTGT4J2G.js","kind":"import-statement"}],"exports":["a","b","c"],"inputs":{"src/utxo/config.ts":{"bytesInOutput":585}},"bytes":698},"dist/chunk-FTGT4J2G.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":3943},"dist/chunk-FTGT4J2G.js":{"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"@trezor/connect-web","kind":"dynamic-import","external":true}],"exports":["a","b","c","d","e","f","g","h","i"],"inputs":{"src/state.ts":{"bytesInOutput":212},"src/utils.ts":{"bytesInOutput":615}},"bytes":1021}}}
|
package/dist/utxo-MZNQ2QK4.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as d,c as h}from"./chunk-HUUVMU7F.js";import{a as s,e as g,g as m}from"./chunk-FTGT4J2G.js";import{Networks as S}from"@rango-dev/wallets-shared";import{SignerError as B}from"rango-types";import*as x from"@bitcoinerlab/secp256k1";import*as e from"bitcoinjs-lib";e.initEccLib(x);var z=s(o=>Buffer.from(o).reverse().toString("hex"),"reverseTxid");function l(o,n,c=e.networks.bitcoin){let r=e.Psbt.fromBase64(o,{network:c}),u=h(n),T=r.txInputs.map((t,p)=>{let i=r.data.inputs[p];if(i.sighashType!=null&&i.sighashType!==e.Transaction.SIGHASH_ALL)throw new Error(`PSBT input #${p} uses sighash type ${i.sighashType}; only SIGHASH_ALL is supported.`);let a=i.witnessUtxo??e.Transaction.fromBuffer(i.nonWitnessUtxo).outs[t.index];return{address_n:n,prev_hash:z(t.hash),prev_index:t.index,amount:a.value.toString(),script_type:u,sequence:t.sequence}}),f=r.txOutputs.map(t=>t.address?{script_type:"PAYTOADDRESS",address:t.address,amount:t.value.toString()}:{script_type:"PAYTOOPRETURN",amount:"0",op_return_data:(e.script.decompile(t.script)?.find(Buffer.isBuffer)??Buffer.alloc(0)).toString("hex")});return{inputs:T,outputs:f,version:r.version,locktime:r.locktime}}s(l,"buildTrezorBitcoinTransaction");function w(o){return new Error(o.code?`${o.error} (${o.code})`:o.error)}s(w,"getTrezorErrorMessage");var b=class{static{s(this,"BTCSigner")}async signMessage(){throw B.UnimplementedError("signMessage")}async signAndSendTx(n){let{blockchain:c}=n.asset;if(c!==S.BTC)throw new Error(`Signing ${c} transactions is not supported by Trezor.`);let{psbt:r}=n;if(!r)throw new Error("No PSBT found to sign. Ensure a valid PSBT is provided.");let u=g();if(!u)throw new Error("No connected Bitcoin account found. Please connect the wallet first.");let T=await m(),{inputs:f,outputs:t,version:p,locktime:i}=l(r.unsignedPsbtBase64,u),a=await T.signTransaction({coin:d,inputs:f,outputs:t,version:p,locktime:i,push:!0});if(!a.success)throw w(a.payload);return{hash:await this.#r(a.payload)}}async#r(n){if(n.txid)return n.txid;if(!n.serializedTx)throw new Error("Trezor did not return a transaction id.");let r=await(await m()).pushTransaction({tx:n.serializedTx,coin:d});if(!r.success)throw w(r.payload);return r.payload.txid}};export{b as BTCSigner};
|
|
2
|
-
//# sourceMappingURL=utxo-MZNQ2QK4.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/signers/utxo.ts", "../src/utxo/psbt.ts"],
|
|
4
|
-
"sourcesContent": ["import type { GenericSigner, Transfer } from 'rango-types';\n\nimport { Networks } from '@rango-dev/wallets-shared';\nimport { SignerError } from 'rango-types';\n\nimport { getBitcoinDerivationPath } from '../state.js';\nimport { getTrezorModule } from '../utils.js';\nimport { BITCOIN_COIN_NAME } from '../utxo/config.js';\nimport { buildTrezorBitcoinTransaction } from '../utxo/psbt.js';\n\nfunction getTrezorErrorMessage(payload: { error: string; code?: string }) {\n return new Error(\n payload.code ? `${payload.error} (${payload.code})` : payload.error\n );\n}\n\nexport class BTCSigner implements GenericSigner<Transfer> {\n async signMessage(): Promise<string> {\n throw SignerError.UnimplementedError('signMessage');\n }\n\n async signAndSendTx(tx: Transfer): Promise<{ hash: string }> {\n const { blockchain } = tx.asset;\n if (blockchain !== Networks.BTC) {\n throw new Error(\n `Signing ${blockchain} transactions is not supported by Trezor.`\n );\n }\n\n const { psbt } = tx;\n if (!psbt) {\n throw new Error(\n 'No PSBT found to sign. Ensure a valid PSBT is provided.'\n );\n }\n\n const path = getBitcoinDerivationPath();\n if (!path) {\n throw new Error(\n 'No connected Bitcoin account found. Please connect the wallet first.'\n );\n }\n\n const TrezorConnect = await getTrezorModule();\n const { inputs, outputs, version, locktime } =\n buildTrezorBitcoinTransaction(psbt.unsignedPsbtBase64, path);\n\n // `push: true` signs and broadcasts via Trezor's Blockbook backend.\n const result = await TrezorConnect.signTransaction({\n coin: BITCOIN_COIN_NAME,\n inputs,\n outputs,\n version,\n locktime,\n push: true,\n });\n\n if (!result.success) {\n throw getTrezorErrorMessage(result.payload);\n }\n\n return { hash: await this.#resolveHash(result.payload) };\n }\n\n /**\n * `push: true` usually returns the txid directly. If it isn't present (older\n * firmware/connect), push the serialized transaction explicitly as a fallback.\n */\n async #resolveHash(payload: {\n txid?: string;\n serializedTx?: string;\n }): Promise<string> {\n if (payload.txid) {\n return payload.txid;\n }\n if (!payload.serializedTx) {\n throw new Error('Trezor did not return a transaction id.');\n }\n\n const TrezorConnect = await getTrezorModule();\n const pushResult = await TrezorConnect.pushTransaction({\n tx: payload.serializedTx,\n coin: BITCOIN_COIN_NAME,\n });\n if (!pushResult.success) {\n throw getTrezorErrorMessage(pushResult.payload);\n }\n return pushResult.payload.txid;\n }\n}\n", "import type { SignTransaction } from '@trezor/connect-web';\n\nimport * as ecc from '@bitcoinerlab/secp256k1';\nimport * as bitcoin from 'bitcoinjs-lib';\n\nimport { resolveBitcoinScriptType } from './config.js';\n\n// Lets bitcoinjs-lib decode taproot (witness v1) output addresses.\nbitcoin.initEccLib(ecc);\n\ntype TrezorInput = SignTransaction['inputs'][number];\ntype TrezorOutput = SignTransaction['outputs'][number];\n\nexport interface TrezorBitcoinTransaction {\n inputs: TrezorInput[];\n outputs: TrezorOutput[];\n /** Transaction version from the PSBT \u2014 preserved so the signed tx matches Rango's. */\n version: number;\n /** Transaction locktime from the PSBT (e.g. for CLTV) \u2014 preserved as-is. */\n locktime: number;\n}\n\nconst reverseTxid = (hash: Buffer) =>\n Buffer.from(hash).reverse().toString('hex');\n\n/**\n * Translate Rango's unsigned PSBT into the transaction Trezor's `signTransaction` expects\n * (Trezor has no \"sign this PSBT\" call). Every field that affects the resulting bytes is\n * preserved: `version`, `locktime`, and per-input `sequence` (RBF / locktime signaling),\n * alongside each input's amount and script.\n *\n * Rango's PSBT carries no derivation data, so the connected `path` (and the script type\n * from its BIP-43 purpose) is applied to every input \u2014 Rango funds the swap from that\n * single address. `refTxs` are omitted: Trezor Connect fetches previous transactions from\n * its Blockbook backend. Pure function -> unit testable.\n *\n * Only SIGHASH_ALL is supported: a non-default per-input sighash can't be honored through\n * Trezor's signTransaction, so we reject it rather than sign the wrong thing. Multisig /\n * script-path spends are out of scope (Rango funds from a single-key address).\n */\nexport function buildTrezorBitcoinTransaction(\n unsignedPsbtBase64: string,\n path: string,\n network: bitcoin.Network = bitcoin.networks.bitcoin\n): TrezorBitcoinTransaction {\n const psbt = bitcoin.Psbt.fromBase64(unsignedPsbtBase64, { network });\n const scriptType = resolveBitcoinScriptType(path);\n\n const inputs = psbt.txInputs.map((input, index): TrezorInput => {\n const data = psbt.data.inputs[index];\n\n if (\n data.sighashType != null &&\n data.sighashType !== bitcoin.Transaction.SIGHASH_ALL\n ) {\n throw new Error(\n `PSBT input #${index} uses sighash type ${data.sighashType}; only SIGHASH_ALL is supported.`\n );\n }\n\n const utxo =\n data.witnessUtxo ??\n bitcoin.Transaction.fromBuffer(data.nonWitnessUtxo as Buffer).outs[\n input.index\n ];\n return {\n // Trezor Connect accepts the path string directly (like our EVM signer).\n address_n: path,\n prev_hash: reverseTxid(input.hash),\n prev_index: input.index,\n amount: utxo.value.toString(),\n script_type: scriptType,\n sequence: input.sequence,\n };\n });\n\n const outputs = psbt.txOutputs.map(\n (output): TrezorOutput =>\n output.address\n ? {\n script_type: 'PAYTOADDRESS',\n address: output.address,\n amount: output.value.toString(),\n }\n : {\n script_type: 'PAYTOOPRETURN',\n amount: '0',\n op_return_data: (\n bitcoin.script.decompile(output.script)?.find(Buffer.isBuffer) ??\n Buffer.alloc(0)\n ).toString('hex'),\n }\n );\n\n return { inputs, outputs, version: psbt.version, locktime: psbt.locktime };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Networks", "SignerError", "ecc", "bitcoin", "ecc", "reverseTxid", "__name", "hash", "buildTrezorBitcoinTransaction", "unsignedPsbtBase64", "path", "network", "psbt", "scriptType", "resolveBitcoinScriptType", "inputs", "input", "index", "data", "utxo", "outputs", "output", "getTrezorErrorMessage", "payload", "__name", "BTCSigner", "SignerError", "tx", "blockchain", "Networks", "psbt", "path", "getBitcoinDerivationPath", "TrezorConnect", "getTrezorModule", "inputs", "outputs", "version", "locktime", "buildTrezorBitcoinTransaction", "result", "BITCOIN_COIN_NAME", "#resolveHash", "pushResult"]
|
|
7
|
-
}
|