@dynamic-labs-wallet/btc 1.1.27 → 1.1.29

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/index.cjs CHANGED
@@ -735,16 +735,26 @@ class DynamicBtcWalletClient extends browser.DynamicWalletClient {
735
735
  * @param amount - The amount to send in satoshis
736
736
  * @param senderAddress - The address to send funds from
737
737
  * @param network - The network to use (mainnet/testnet)
738
- * @param feeRateLevel - The fee rate level to use (fast, medium, slow)
738
+ * @param feeRateLevel - The fee rate level to use (fast, medium, slow). Ignored when feeRate is set
739
+ * @param feeRate - Explicit fee rate in sat/vByte; skips the fee lookup entirely
740
+ * @param rpcUrl - Custom Esplora-compatible API base URL (e.g. a self-hosted Esplora/electrs/mempool)
741
+ * used for fee rates, UTXOs and raw transactions instead of mempool.space. Must be https
742
+ * (http only for localhost). Fee rates use `/v1/fees/recommended`, falling back to `/fee-estimates`
739
743
  * @returns The PSBT in hex format
740
- */ async createTransaction({ receiverAddress, amount, senderAddress, network, feeRateLevel = 'medium' }) {
744
+ */ async createTransaction({ receiverAddress, amount, senderAddress, network, feeRateLevel = 'medium', feeRate: feeRateOverride, rpcUrl }) {
745
+ // rpcUrl is deliberately not logged: custom endpoints may embed API keys.
741
746
  this.logger.debug('[BTC Client] Creating transaction', {
742
747
  receiverAddress,
743
748
  amount,
744
749
  senderAddress,
745
750
  network,
746
- feeRateLevel
751
+ feeRateLevel,
752
+ feeRate: feeRateOverride,
753
+ hasCustomRpcUrl: Boolean(rpcUrl)
747
754
  });
755
+ if (feeRateOverride !== undefined && (!Number.isFinite(feeRateOverride) || feeRateOverride <= 0)) {
756
+ throw new Error('feeRate must be a positive number (sat/vByte)');
757
+ }
748
758
  if (!senderAddress) {
749
759
  throw new Error(browser.ERROR_ACCOUNT_ADDRESS_REQUIRED);
750
760
  }
@@ -761,15 +771,15 @@ class DynamicBtcWalletClient extends browser.DynamicWalletClient {
761
771
  throw new Error('Taproot transaction creation not yet supported');
762
772
  }
763
773
  const bitcoinNetwork = network === 'testnet' ? bitcoin__namespace.networks.testnet : bitcoin__namespace.networks.bitcoin;
764
- // Fetch fee rates
765
- const feeRates = await btcUtils.getFeeRates({
766
- network
767
- });
768
- const feeRate = feeRates[feeRateLevel];
774
+ const feeRate = feeRateOverride != null ? feeRateOverride : (await btcUtils.getFeeRates({
775
+ network,
776
+ rpcUrl
777
+ }))[feeRateLevel];
769
778
  // Fetch UTXOs
770
779
  const utxos = await btcUtils.getUTXOs({
771
780
  address: senderAddress,
772
- network
781
+ network,
782
+ rpcUrl
773
783
  });
774
784
  // Select UTXOs
775
785
  const { inputs, change, fee } = btcUtils.selectUTXOs({
@@ -782,7 +792,7 @@ class DynamicBtcWalletClient extends browser.DynamicWalletClient {
782
792
  });
783
793
  // Prepare inputs
784
794
  await Promise.all(inputs.map(async (utxo)=>{
785
- const txHex = await this.getTxHex(utxo.txid, network);
795
+ const txHex = await this.getTxHex(utxo.txid, network, rpcUrl);
786
796
  const inputData = {
787
797
  hash: utxo.txid,
788
798
  index: utxo.vout,
@@ -828,10 +838,14 @@ class DynamicBtcWalletClient extends browser.DynamicWalletClient {
828
838
  * Fetches the raw transaction hex for a given transaction ID
829
839
  * @param txid - The transaction ID
830
840
  * @param network - The network
841
+ * @param rpcUrl - Optional custom Esplora-compatible API base URL
831
842
  * @returns The transaction hex
832
- */ async getTxHex(txid, network) {
833
- const baseUrl = btcUtils.getDefaultRpcUrl(network);
834
- const response = await fetch(`${baseUrl}/tx/${txid}/hex`);
843
+ */ async getTxHex(txid, network, rpcUrl) {
844
+ const baseUrl = btcUtils.resolveRpcUrl({
845
+ network,
846
+ rpcUrl
847
+ });
848
+ const response = await btcUtils.rpcFetch(`${baseUrl}/tx/${txid}/hex`, rpcUrl);
835
849
  if (!response.ok) {
836
850
  throw new Error(`Failed to fetch TX hex: ${response.statusText}`);
837
851
  }
package/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { DynamicWalletClient, BitcoinNetwork, BitcoinAddressType, getMPCChainConfig, ERROR_CREATE_WALLET_ACCOUNT, ERROR_PASSWORD_MISMATCH, ERROR_MULTIPLE_WALLETS_PER_CHAIN, ERROR_SIGN_MESSAGE, ERROR_ACCOUNT_ADDRESS_REQUIRED, ERROR_IMPORT_PRIVATE_KEY } from '@dynamic-labs-wallet/browser';
2
2
  import * as bitcoin from 'bitcoinjs-lib';
3
3
  import ecc from '@bitcoinerlab/secp256k1';
4
- import { extractPublicKeyHex, normalizePublicKey, publicKeyToBitcoinAddress, resolveBitcoinAddressType, calculateTaprootTweak, encodeBip322Signature, calculateBip322Hash, wifToPrivateKey, getPublicKeyFromPrivateKey, privateKeyToWIF, doesInputBelongToAddress, filterInputsBySigningIndexes, assertSighashAllowed, collectPSBTInputData, getSigHashType, convertSignatureToTaprootBuffer, getSegwitV0ScriptCode, getBitcoinNetwork, convertSignatureToDER, getFeeRates, getUTXOs, selectUTXOs, getDefaultRpcUrl, initEccLib } from '@dynamic-labs-wallet/btc-utils';
4
+ import { extractPublicKeyHex, normalizePublicKey, publicKeyToBitcoinAddress, resolveBitcoinAddressType, calculateTaprootTweak, encodeBip322Signature, calculateBip322Hash, wifToPrivateKey, getPublicKeyFromPrivateKey, privateKeyToWIF, doesInputBelongToAddress, filterInputsBySigningIndexes, assertSighashAllowed, collectPSBTInputData, getSigHashType, convertSignatureToTaprootBuffer, getSegwitV0ScriptCode, getBitcoinNetwork, convertSignatureToDER, getFeeRates, getUTXOs, selectUTXOs, resolveRpcUrl, rpcFetch, initEccLib } from '@dynamic-labs-wallet/btc-utils';
5
5
 
6
6
  function _extends() {
7
7
  _extends = Object.assign || function assign(target) {
@@ -714,16 +714,26 @@ class DynamicBtcWalletClient extends DynamicWalletClient {
714
714
  * @param amount - The amount to send in satoshis
715
715
  * @param senderAddress - The address to send funds from
716
716
  * @param network - The network to use (mainnet/testnet)
717
- * @param feeRateLevel - The fee rate level to use (fast, medium, slow)
717
+ * @param feeRateLevel - The fee rate level to use (fast, medium, slow). Ignored when feeRate is set
718
+ * @param feeRate - Explicit fee rate in sat/vByte; skips the fee lookup entirely
719
+ * @param rpcUrl - Custom Esplora-compatible API base URL (e.g. a self-hosted Esplora/electrs/mempool)
720
+ * used for fee rates, UTXOs and raw transactions instead of mempool.space. Must be https
721
+ * (http only for localhost). Fee rates use `/v1/fees/recommended`, falling back to `/fee-estimates`
718
722
  * @returns The PSBT in hex format
719
- */ async createTransaction({ receiverAddress, amount, senderAddress, network, feeRateLevel = 'medium' }) {
723
+ */ async createTransaction({ receiverAddress, amount, senderAddress, network, feeRateLevel = 'medium', feeRate: feeRateOverride, rpcUrl }) {
724
+ // rpcUrl is deliberately not logged: custom endpoints may embed API keys.
720
725
  this.logger.debug('[BTC Client] Creating transaction', {
721
726
  receiverAddress,
722
727
  amount,
723
728
  senderAddress,
724
729
  network,
725
- feeRateLevel
730
+ feeRateLevel,
731
+ feeRate: feeRateOverride,
732
+ hasCustomRpcUrl: Boolean(rpcUrl)
726
733
  });
734
+ if (feeRateOverride !== undefined && (!Number.isFinite(feeRateOverride) || feeRateOverride <= 0)) {
735
+ throw new Error('feeRate must be a positive number (sat/vByte)');
736
+ }
727
737
  if (!senderAddress) {
728
738
  throw new Error(ERROR_ACCOUNT_ADDRESS_REQUIRED);
729
739
  }
@@ -740,15 +750,15 @@ class DynamicBtcWalletClient extends DynamicWalletClient {
740
750
  throw new Error('Taproot transaction creation not yet supported');
741
751
  }
742
752
  const bitcoinNetwork = network === 'testnet' ? bitcoin.networks.testnet : bitcoin.networks.bitcoin;
743
- // Fetch fee rates
744
- const feeRates = await getFeeRates({
745
- network
746
- });
747
- const feeRate = feeRates[feeRateLevel];
753
+ const feeRate = feeRateOverride != null ? feeRateOverride : (await getFeeRates({
754
+ network,
755
+ rpcUrl
756
+ }))[feeRateLevel];
748
757
  // Fetch UTXOs
749
758
  const utxos = await getUTXOs({
750
759
  address: senderAddress,
751
- network
760
+ network,
761
+ rpcUrl
752
762
  });
753
763
  // Select UTXOs
754
764
  const { inputs, change, fee } = selectUTXOs({
@@ -761,7 +771,7 @@ class DynamicBtcWalletClient extends DynamicWalletClient {
761
771
  });
762
772
  // Prepare inputs
763
773
  await Promise.all(inputs.map(async (utxo)=>{
764
- const txHex = await this.getTxHex(utxo.txid, network);
774
+ const txHex = await this.getTxHex(utxo.txid, network, rpcUrl);
765
775
  const inputData = {
766
776
  hash: utxo.txid,
767
777
  index: utxo.vout,
@@ -807,10 +817,14 @@ class DynamicBtcWalletClient extends DynamicWalletClient {
807
817
  * Fetches the raw transaction hex for a given transaction ID
808
818
  * @param txid - The transaction ID
809
819
  * @param network - The network
820
+ * @param rpcUrl - Optional custom Esplora-compatible API base URL
810
821
  * @returns The transaction hex
811
- */ async getTxHex(txid, network) {
812
- const baseUrl = getDefaultRpcUrl(network);
813
- const response = await fetch(`${baseUrl}/tx/${txid}/hex`);
822
+ */ async getTxHex(txid, network, rpcUrl) {
823
+ const baseUrl = resolveRpcUrl({
824
+ network,
825
+ rpcUrl
826
+ });
827
+ const response = await rpcFetch(`${baseUrl}/tx/${txid}/hex`, rpcUrl);
814
828
  if (!response.ok) {
815
829
  throw new Error(`Failed to fetch TX hex: ${response.statusText}`);
816
830
  }
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@dynamic-labs-wallet/btc",
3
- "version": "1.1.27",
3
+ "version": "1.1.29",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "dependencies": {
8
8
  "@dynamic-labs/sdk-api-core": "0.50.0",
9
- "@dynamic-labs-wallet/browser": "1.1.27",
10
- "@dynamic-labs-wallet/btc-utils": "1.1.27",
9
+ "@dynamic-labs-wallet/browser": "1.1.29",
10
+ "@dynamic-labs-wallet/btc-utils": "1.1.29",
11
11
  "@bitcoinerlab/secp256k1": "^1.2.0",
12
12
  "bitcoinjs-lib": "^7.0.0"
13
13
  },
@@ -189,20 +189,27 @@ export declare class DynamicBtcWalletClient extends DynamicWalletClient {
189
189
  * @param amount - The amount to send in satoshis
190
190
  * @param senderAddress - The address to send funds from
191
191
  * @param network - The network to use (mainnet/testnet)
192
- * @param feeRateLevel - The fee rate level to use (fast, medium, slow)
192
+ * @param feeRateLevel - The fee rate level to use (fast, medium, slow). Ignored when feeRate is set
193
+ * @param feeRate - Explicit fee rate in sat/vByte; skips the fee lookup entirely
194
+ * @param rpcUrl - Custom Esplora-compatible API base URL (e.g. a self-hosted Esplora/electrs/mempool)
195
+ * used for fee rates, UTXOs and raw transactions instead of mempool.space. Must be https
196
+ * (http only for localhost). Fee rates use `/v1/fees/recommended`, falling back to `/fee-estimates`
193
197
  * @returns The PSBT in hex format
194
198
  */
195
- createTransaction({ receiverAddress, amount, senderAddress, network, feeRateLevel, }: {
199
+ createTransaction({ receiverAddress, amount, senderAddress, network, feeRateLevel, feeRate: feeRateOverride, rpcUrl, }: {
196
200
  receiverAddress: string;
197
201
  amount: string;
198
202
  senderAddress: string;
199
203
  network: BitcoinNetwork;
200
204
  feeRateLevel?: 'fast' | 'medium' | 'slow';
205
+ feeRate?: number;
206
+ rpcUrl?: string;
201
207
  }): Promise<string>;
202
208
  /**
203
209
  * Fetches the raw transaction hex for a given transaction ID
204
210
  * @param txid - The transaction ID
205
211
  * @param network - The network
212
+ * @param rpcUrl - Optional custom Esplora-compatible API base URL
206
213
  * @returns The transaction hex
207
214
  */
208
215
  private getTxHex;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}