@xchainjs/xchain-doge 1.0.10 → 2.0.0

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/lib/index.esm.js CHANGED
@@ -2,6 +2,7 @@ import { ExplorerProvider, Network, FeeOption, checkFeeBounds } from '@xchainjs/
2
2
  import { getSeed } from '@xchainjs/xchain-crypto';
3
3
  import * as Dogecoin from 'bitcoinjs-lib';
4
4
  import { Client as Client$1 } from '@xchainjs/xchain-utxo';
5
+ import accumulative from 'coinselect/accumulative';
5
6
  import { AssetType } from '@xchainjs/xchain-util';
6
7
  import { SochainProvider, SochainNetwork, BlockcypherProvider, BlockcypherNetwork, BitgoProvider } from '@xchainjs/xchain-utxo-providers';
7
8
  import coininfo from 'coininfo';
@@ -39,143 +40,6 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
39
40
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
40
41
  };
41
42
 
42
- function getDefaultExportFromCjs (x) {
43
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
44
- }
45
-
46
- var utils;
47
- var hasRequiredUtils;
48
-
49
- function requireUtils () {
50
- if (hasRequiredUtils) return utils;
51
- hasRequiredUtils = 1;
52
- // baseline estimates, used to improve performance
53
- var TX_EMPTY_SIZE = 4 + 1 + 1 + 4;
54
- var TX_INPUT_BASE = 32 + 4 + 1 + 4;
55
- var TX_INPUT_PUBKEYHASH = 107;
56
- var TX_OUTPUT_BASE = 8 + 1;
57
- var TX_OUTPUT_PUBKEYHASH = 25;
58
-
59
- function inputBytes (input) {
60
- return TX_INPUT_BASE + (input.script ? input.script.length : TX_INPUT_PUBKEYHASH)
61
- }
62
-
63
- function outputBytes (output) {
64
- return TX_OUTPUT_BASE + (output.script ? output.script.length : TX_OUTPUT_PUBKEYHASH)
65
- }
66
-
67
- function dustThreshold (output, feeRate) {
68
- /* ... classify the output for input estimate */
69
- return inputBytes({}) * feeRate
70
- }
71
-
72
- function transactionBytes (inputs, outputs) {
73
- return TX_EMPTY_SIZE +
74
- inputs.reduce(function (a, x) { return a + inputBytes(x) }, 0) +
75
- outputs.reduce(function (a, x) { return a + outputBytes(x) }, 0)
76
- }
77
-
78
- function uintOrNaN (v) {
79
- if (typeof v !== 'number') return NaN
80
- if (!isFinite(v)) return NaN
81
- if (Math.floor(v) !== v) return NaN
82
- if (v < 0) return NaN
83
- return v
84
- }
85
-
86
- function sumForgiving (range) {
87
- return range.reduce(function (a, x) { return a + (isFinite(x.value) ? x.value : 0) }, 0)
88
- }
89
-
90
- function sumOrNaN (range) {
91
- return range.reduce(function (a, x) { return a + uintOrNaN(x.value) }, 0)
92
- }
93
-
94
- var BLANK_OUTPUT = outputBytes({});
95
-
96
- function finalize (inputs, outputs, feeRate) {
97
- var bytesAccum = transactionBytes(inputs, outputs);
98
- var feeAfterExtraOutput = feeRate * (bytesAccum + BLANK_OUTPUT);
99
- var remainderAfterExtraOutput = sumOrNaN(inputs) - (sumOrNaN(outputs) + feeAfterExtraOutput);
100
-
101
- // is it worth a change output?
102
- if (remainderAfterExtraOutput > dustThreshold({}, feeRate)) {
103
- outputs = outputs.concat({ value: remainderAfterExtraOutput });
104
- }
105
-
106
- var fee = sumOrNaN(inputs) - sumOrNaN(outputs);
107
- if (!isFinite(fee)) return { fee: feeRate * bytesAccum }
108
-
109
- return {
110
- inputs: inputs,
111
- outputs: outputs,
112
- fee: fee
113
- }
114
- }
115
-
116
- utils = {
117
- dustThreshold: dustThreshold,
118
- finalize: finalize,
119
- inputBytes: inputBytes,
120
- outputBytes: outputBytes,
121
- sumOrNaN: sumOrNaN,
122
- sumForgiving: sumForgiving,
123
- transactionBytes: transactionBytes,
124
- uintOrNaN: uintOrNaN
125
- };
126
- return utils;
127
- }
128
-
129
- var accumulative$1;
130
- var hasRequiredAccumulative;
131
-
132
- function requireAccumulative () {
133
- if (hasRequiredAccumulative) return accumulative$1;
134
- hasRequiredAccumulative = 1;
135
- var utils = requireUtils();
136
-
137
- // add inputs until we reach or surpass the target value (or deplete)
138
- // worst-case: O(n)
139
- accumulative$1 = function accumulative (utxos, outputs, feeRate) {
140
- if (!isFinite(utils.uintOrNaN(feeRate))) return {}
141
- var bytesAccum = utils.transactionBytes([], outputs);
142
-
143
- var inAccum = 0;
144
- var inputs = [];
145
- var outAccum = utils.sumOrNaN(outputs);
146
-
147
- for (var i = 0; i < utxos.length; ++i) {
148
- var utxo = utxos[i];
149
- var utxoBytes = utils.inputBytes(utxo);
150
- var utxoFee = feeRate * utxoBytes;
151
- var utxoValue = utils.uintOrNaN(utxo.value);
152
-
153
- // skip detrimental input
154
- if (utxoFee > utxo.value) {
155
- if (i === utxos.length - 1) return { fee: feeRate * (bytesAccum + utxoBytes) }
156
- continue
157
- }
158
-
159
- bytesAccum += utxoBytes;
160
- inAccum += utxoValue;
161
- inputs.push(utxo);
162
-
163
- var fee = feeRate * bytesAccum;
164
-
165
- // go again?
166
- if (inAccum < outAccum + fee) continue
167
-
168
- return utils.finalize(inputs, outputs, feeRate)
169
- }
170
-
171
- return { fee: feeRate * bytesAccum }
172
- };
173
- return accumulative$1;
174
- }
175
-
176
- var accumulativeExports = requireAccumulative();
177
- var accumulative = /*@__PURE__*/getDefaultExportFromCjs(accumulativeExports);
178
-
179
43
  /**
180
44
  * Minimum transaction fee for Dogecoin transactions.
181
45
  * Defined as 100000 satoshi/kB.
@@ -742,4 +606,3 @@ const getSendTxUrl = ({ blockcypherUrl, network }) => {
742
606
  };
743
607
 
744
608
  export { AssetDOGE, BitgoProviders, ClientKeystore as Client, ClientLedger, DOGEChain, DOGE_DECIMAL, LOWER_FEE_BOUND, MIN_TX_FEE, UPPER_FEE_BOUND, blockcypherDataProviders, blockstreamExplorerProviders, defaultDogeParams, getPrefix, getSendTxUrl, sochainDataProviders, validateAddress };
745
- //# sourceMappingURL=index.esm.js.map
package/lib/index.js CHANGED
@@ -4,6 +4,7 @@ var xchainClient = require('@xchainjs/xchain-client');
4
4
  var xchainCrypto = require('@xchainjs/xchain-crypto');
5
5
  var Dogecoin = require('bitcoinjs-lib');
6
6
  var xchainUtxo = require('@xchainjs/xchain-utxo');
7
+ var accumulative = require('coinselect/accumulative');
7
8
  var xchainUtil = require('@xchainjs/xchain-util');
8
9
  var xchainUtxoProviders = require('@xchainjs/xchain-utxo-providers');
9
10
  var coininfo = require('coininfo');
@@ -30,6 +31,7 @@ function _interopNamespace(e) {
30
31
  }
31
32
 
32
33
  var Dogecoin__namespace = /*#__PURE__*/_interopNamespace(Dogecoin);
34
+ var accumulative__default = /*#__PURE__*/_interopDefault(accumulative);
33
35
  var coininfo__default = /*#__PURE__*/_interopDefault(coininfo);
34
36
  var AppBtc__default = /*#__PURE__*/_interopDefault(AppBtc);
35
37
 
@@ -65,143 +67,6 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
65
67
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
66
68
  };
67
69
 
68
- function getDefaultExportFromCjs (x) {
69
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
70
- }
71
-
72
- var utils;
73
- var hasRequiredUtils;
74
-
75
- function requireUtils () {
76
- if (hasRequiredUtils) return utils;
77
- hasRequiredUtils = 1;
78
- // baseline estimates, used to improve performance
79
- var TX_EMPTY_SIZE = 4 + 1 + 1 + 4;
80
- var TX_INPUT_BASE = 32 + 4 + 1 + 4;
81
- var TX_INPUT_PUBKEYHASH = 107;
82
- var TX_OUTPUT_BASE = 8 + 1;
83
- var TX_OUTPUT_PUBKEYHASH = 25;
84
-
85
- function inputBytes (input) {
86
- return TX_INPUT_BASE + (input.script ? input.script.length : TX_INPUT_PUBKEYHASH)
87
- }
88
-
89
- function outputBytes (output) {
90
- return TX_OUTPUT_BASE + (output.script ? output.script.length : TX_OUTPUT_PUBKEYHASH)
91
- }
92
-
93
- function dustThreshold (output, feeRate) {
94
- /* ... classify the output for input estimate */
95
- return inputBytes({}) * feeRate
96
- }
97
-
98
- function transactionBytes (inputs, outputs) {
99
- return TX_EMPTY_SIZE +
100
- inputs.reduce(function (a, x) { return a + inputBytes(x) }, 0) +
101
- outputs.reduce(function (a, x) { return a + outputBytes(x) }, 0)
102
- }
103
-
104
- function uintOrNaN (v) {
105
- if (typeof v !== 'number') return NaN
106
- if (!isFinite(v)) return NaN
107
- if (Math.floor(v) !== v) return NaN
108
- if (v < 0) return NaN
109
- return v
110
- }
111
-
112
- function sumForgiving (range) {
113
- return range.reduce(function (a, x) { return a + (isFinite(x.value) ? x.value : 0) }, 0)
114
- }
115
-
116
- function sumOrNaN (range) {
117
- return range.reduce(function (a, x) { return a + uintOrNaN(x.value) }, 0)
118
- }
119
-
120
- var BLANK_OUTPUT = outputBytes({});
121
-
122
- function finalize (inputs, outputs, feeRate) {
123
- var bytesAccum = transactionBytes(inputs, outputs);
124
- var feeAfterExtraOutput = feeRate * (bytesAccum + BLANK_OUTPUT);
125
- var remainderAfterExtraOutput = sumOrNaN(inputs) - (sumOrNaN(outputs) + feeAfterExtraOutput);
126
-
127
- // is it worth a change output?
128
- if (remainderAfterExtraOutput > dustThreshold({}, feeRate)) {
129
- outputs = outputs.concat({ value: remainderAfterExtraOutput });
130
- }
131
-
132
- var fee = sumOrNaN(inputs) - sumOrNaN(outputs);
133
- if (!isFinite(fee)) return { fee: feeRate * bytesAccum }
134
-
135
- return {
136
- inputs: inputs,
137
- outputs: outputs,
138
- fee: fee
139
- }
140
- }
141
-
142
- utils = {
143
- dustThreshold: dustThreshold,
144
- finalize: finalize,
145
- inputBytes: inputBytes,
146
- outputBytes: outputBytes,
147
- sumOrNaN: sumOrNaN,
148
- sumForgiving: sumForgiving,
149
- transactionBytes: transactionBytes,
150
- uintOrNaN: uintOrNaN
151
- };
152
- return utils;
153
- }
154
-
155
- var accumulative$1;
156
- var hasRequiredAccumulative;
157
-
158
- function requireAccumulative () {
159
- if (hasRequiredAccumulative) return accumulative$1;
160
- hasRequiredAccumulative = 1;
161
- var utils = requireUtils();
162
-
163
- // add inputs until we reach or surpass the target value (or deplete)
164
- // worst-case: O(n)
165
- accumulative$1 = function accumulative (utxos, outputs, feeRate) {
166
- if (!isFinite(utils.uintOrNaN(feeRate))) return {}
167
- var bytesAccum = utils.transactionBytes([], outputs);
168
-
169
- var inAccum = 0;
170
- var inputs = [];
171
- var outAccum = utils.sumOrNaN(outputs);
172
-
173
- for (var i = 0; i < utxos.length; ++i) {
174
- var utxo = utxos[i];
175
- var utxoBytes = utils.inputBytes(utxo);
176
- var utxoFee = feeRate * utxoBytes;
177
- var utxoValue = utils.uintOrNaN(utxo.value);
178
-
179
- // skip detrimental input
180
- if (utxoFee > utxo.value) {
181
- if (i === utxos.length - 1) return { fee: feeRate * (bytesAccum + utxoBytes) }
182
- continue
183
- }
184
-
185
- bytesAccum += utxoBytes;
186
- inAccum += utxoValue;
187
- inputs.push(utxo);
188
-
189
- var fee = feeRate * bytesAccum;
190
-
191
- // go again?
192
- if (inAccum < outAccum + fee) continue
193
-
194
- return utils.finalize(inputs, outputs, feeRate)
195
- }
196
-
197
- return { fee: feeRate * bytesAccum }
198
- };
199
- return accumulative$1;
200
- }
201
-
202
- var accumulativeExports = requireAccumulative();
203
- var accumulative = /*@__PURE__*/getDefaultExportFromCjs(accumulativeExports);
204
-
205
70
  /**
206
71
  * Minimum transaction fee for Dogecoin transactions.
207
72
  * Defined as 100000 satoshi/kB.
@@ -426,7 +291,7 @@ class Client extends xchainUtxo.Client {
426
291
  targetOutputs.push({ script: compiledMemo, value: 0 });
427
292
  }
428
293
  // Calculate the inputs and outputs for the transaction
429
- const { inputs, outputs } = accumulative(utxos, targetOutputs, feeRateWhole);
294
+ const { inputs, outputs } = accumulative__default.default(utxos, targetOutputs, feeRateWhole);
430
295
  // Throw an error if no solution was found for inputs and outputs
431
296
  if (!inputs || !outputs)
432
297
  throw new Error('Balance insufficient for transaction');
@@ -783,4 +648,3 @@ exports.getPrefix = getPrefix;
783
648
  exports.getSendTxUrl = getSendTxUrl;
784
649
  exports.sochainDataProviders = sochainDataProviders;
785
650
  exports.validateAddress = validateAddress;
786
- //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xchainjs/xchain-doge",
3
- "version": "1.0.10",
3
+ "version": "2.0.0",
4
4
  "description": "Custom Doge client and utilities used by XChain clients",
5
5
  "keywords": [
6
6
  "Xchain",
@@ -34,18 +34,18 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@ledgerhq/hw-app-btc": "10.1.0",
37
- "@xchainjs/xchain-client": "1.0.10",
38
- "@xchainjs/xchain-crypto": "0.3.7",
39
- "@xchainjs/xchain-util": "1.0.8",
40
- "@xchainjs/xchain-utxo": "1.0.10",
41
- "@xchainjs/xchain-utxo-providers": "1.0.10",
37
+ "@xchainjs/xchain-client": "2.0.0",
38
+ "@xchainjs/xchain-crypto": "1.0.0",
39
+ "@xchainjs/xchain-util": "2.0.0",
40
+ "@xchainjs/xchain-utxo": "2.0.0",
41
+ "@xchainjs/xchain-utxo-providers": "2.0.0",
42
42
  "bitcoinjs-lib": "5.2.0",
43
43
  "coininfo": "5.1.0",
44
44
  "coinselect": "3.1.12"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@ledgerhq/hw-transport-node-hid": "6.28.6",
48
- "axios": "1.7.4",
48
+ "axios": "1.8.4",
49
49
  "axios-mock-adapter": "1.20.0"
50
50
  },
51
51
  "publishConfig": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../../node_modules/coinselect/utils.js","../../../node_modules/coinselect/accumulative.js","../src/const.ts","../src/utils.ts","../src/client.ts","../src/clientKeystore.ts","../src/clientLedger.ts","../src/blockcypher-api.ts"],"sourcesContent":["// baseline estimates, used to improve performance\nvar TX_EMPTY_SIZE = 4 + 1 + 1 + 4\nvar TX_INPUT_BASE = 32 + 4 + 1 + 4\nvar TX_INPUT_PUBKEYHASH = 107\nvar TX_OUTPUT_BASE = 8 + 1\nvar TX_OUTPUT_PUBKEYHASH = 25\n\nfunction inputBytes (input) {\n return TX_INPUT_BASE + (input.script ? input.script.length : TX_INPUT_PUBKEYHASH)\n}\n\nfunction outputBytes (output) {\n return TX_OUTPUT_BASE + (output.script ? output.script.length : TX_OUTPUT_PUBKEYHASH)\n}\n\nfunction dustThreshold (output, feeRate) {\n /* ... classify the output for input estimate */\n return inputBytes({}) * feeRate\n}\n\nfunction transactionBytes (inputs, outputs) {\n return TX_EMPTY_SIZE +\n inputs.reduce(function (a, x) { return a + inputBytes(x) }, 0) +\n outputs.reduce(function (a, x) { return a + outputBytes(x) }, 0)\n}\n\nfunction uintOrNaN (v) {\n if (typeof v !== 'number') return NaN\n if (!isFinite(v)) return NaN\n if (Math.floor(v) !== v) return NaN\n if (v < 0) return NaN\n return v\n}\n\nfunction sumForgiving (range) {\n return range.reduce(function (a, x) { return a + (isFinite(x.value) ? x.value : 0) }, 0)\n}\n\nfunction sumOrNaN (range) {\n return range.reduce(function (a, x) { return a + uintOrNaN(x.value) }, 0)\n}\n\nvar BLANK_OUTPUT = outputBytes({})\n\nfunction finalize (inputs, outputs, feeRate) {\n var bytesAccum = transactionBytes(inputs, outputs)\n var feeAfterExtraOutput = feeRate * (bytesAccum + BLANK_OUTPUT)\n var remainderAfterExtraOutput = sumOrNaN(inputs) - (sumOrNaN(outputs) + feeAfterExtraOutput)\n\n // is it worth a change output?\n if (remainderAfterExtraOutput > dustThreshold({}, feeRate)) {\n outputs = outputs.concat({ value: remainderAfterExtraOutput })\n }\n\n var fee = sumOrNaN(inputs) - sumOrNaN(outputs)\n if (!isFinite(fee)) return { fee: feeRate * bytesAccum }\n\n return {\n inputs: inputs,\n outputs: outputs,\n fee: fee\n }\n}\n\nmodule.exports = {\n dustThreshold: dustThreshold,\n finalize: finalize,\n inputBytes: inputBytes,\n outputBytes: outputBytes,\n sumOrNaN: sumOrNaN,\n sumForgiving: sumForgiving,\n transactionBytes: transactionBytes,\n uintOrNaN: uintOrNaN\n}\n","var utils = require('./utils')\n\n// add inputs until we reach or surpass the target value (or deplete)\n// worst-case: O(n)\nmodule.exports = function accumulative (utxos, outputs, feeRate) {\n if (!isFinite(utils.uintOrNaN(feeRate))) return {}\n var bytesAccum = utils.transactionBytes([], outputs)\n\n var inAccum = 0\n var inputs = []\n var outAccum = utils.sumOrNaN(outputs)\n\n for (var i = 0; i < utxos.length; ++i) {\n var utxo = utxos[i]\n var utxoBytes = utils.inputBytes(utxo)\n var utxoFee = feeRate * utxoBytes\n var utxoValue = utils.uintOrNaN(utxo.value)\n\n // skip detrimental input\n if (utxoFee > utxo.value) {\n if (i === utxos.length - 1) return { fee: feeRate * (bytesAccum + utxoBytes) }\n continue\n }\n\n bytesAccum += utxoBytes\n inAccum += utxoValue\n inputs.push(utxo)\n\n var fee = feeRate * bytesAccum\n\n // go again?\n if (inAccum < outAccum + fee) continue\n\n return utils.finalize(inputs, outputs, feeRate)\n }\n\n return { fee: feeRate * bytesAccum }\n}\n","import { ExplorerProvider, Network } from '@xchainjs/xchain-client'\nimport { Asset, AssetType } from '@xchainjs/xchain-util'\nimport {\n BitgoProvider,\n BlockcypherNetwork,\n BlockcypherProvider,\n SochainNetwork,\n SochainProvider,\n UtxoOnlineDataProviders,\n} from '@xchainjs/xchain-utxo-providers'\n/**\n * Minimum transaction fee for Dogecoin transactions.\n * Defined as 100000 satoshi/kB.\n * @see https://github.com/dogecoin/dogecoin/blob/master/src/validation.h#L58\n */\nexport const MIN_TX_FEE = 100000\n\n/**\n * Decimal places for Dogecoin.\n */\nexport const DOGE_DECIMAL = 8\n\n/**\n * Lower fee bound for Dogecoin transactions.\n * Referenced from Dogecoin fee recommendation documentation.\n * @see https://github.com/dogecoin/dogecoin/blob/master/doc/fee-recommendation.md\n */\nexport const LOWER_FEE_BOUND = 100\n\n/**\n * Upper fee bound for Dogecoin transactions.\n * Referenced from Dogecoin fee recommendation documentation.\n * @see https://github.com/dogecoin/dogecoin/blob/master/doc/fee-recommendation.md\n */\nexport const UPPER_FEE_BOUND = 20_000_000\n\n/**\n * Chain identifier for Dogecoin.\n */\nexport const DOGEChain = 'DOGE' as const\n\n/**\n * Base asset object for Dogecoin.\n * Represents the Dogecoin asset in various contexts.\n */\nexport const AssetDOGE: Asset = { chain: DOGEChain, symbol: 'DOGE', ticker: 'DOGE', type: AssetType.NATIVE }\n\n/**\n * Explorer provider for Dogecoin mainnet and testnet.\n * Provides URLs for exploring Dogecoin transactions and addresses.\n */\nconst DOGE_MAINNET_EXPLORER = new ExplorerProvider(\n 'https://blockchair.com/dogecoin',\n 'https://blockchair.com/dogecoin/address/%%ADDRESS%%',\n 'https://blockchair.com/dogecoin/transaction/%%TX_ID%%',\n)\nconst DOGE_TESTNET_EXPLORER = new ExplorerProvider(\n 'https://blockexplorer.one/dogecoin/testnet',\n 'https://blockexplorer.one/dogecoin/testnet/address/%%ADDRESS%%',\n 'https://blockexplorer.one/dogecoin/testnet/tx/%%TX_ID%%',\n)\nexport const blockstreamExplorerProviders = {\n [Network.Testnet]: DOGE_TESTNET_EXPLORER,\n [Network.Stagenet]: DOGE_MAINNET_EXPLORER,\n [Network.Mainnet]: DOGE_MAINNET_EXPLORER,\n}\n\n/**\n * Sochain data providers for Dogecoin mainnet and testnet.\n * Provides API access to Sochain for Dogecoin.\n */\nconst testnetSochainProvider = new SochainProvider(\n 'https://sochain.com/api/v3',\n process.env.SOCHAIN_API_KEY || '',\n DOGEChain,\n AssetDOGE,\n 8,\n SochainNetwork.DOGETEST,\n)\nconst mainnetSochainProvider = new SochainProvider(\n 'https://sochain.com/api/v3',\n process.env.SOCHAIN_API_KEY || '',\n DOGEChain,\n AssetDOGE,\n 8,\n SochainNetwork.DOGE,\n)\nexport const sochainDataProviders = {\n [Network.Testnet]: testnetSochainProvider,\n [Network.Stagenet]: mainnetSochainProvider,\n [Network.Mainnet]: mainnetSochainProvider,\n}\n\n/**\n * Blockcypher data providers for Dogecoin mainnet and stagenet.\n * Provides API access to Blockcypher for Dogecoin.\n */\nconst mainnetBlockcypherProvider = new BlockcypherProvider(\n 'https://api.blockcypher.com/v1',\n DOGEChain,\n AssetDOGE,\n 8,\n BlockcypherNetwork.DOGE,\n process.env.BLOCKCYPHER_API_KEY || '',\n)\nexport const blockcypherDataProviders = {\n [Network.Testnet]: undefined, //no provider here\n [Network.Stagenet]: mainnetBlockcypherProvider,\n [Network.Mainnet]: mainnetBlockcypherProvider,\n}\n\n/**\n * Bitgo data providers for Dogecoin mainnet and stagenet.\n * Provides API access to Bitgo for Dogecoin.\n */\nconst mainnetBitgoProvider = new BitgoProvider({\n baseUrl: 'https://app.bitgo.com',\n chain: DOGEChain,\n})\n\nexport const BitgoProviders: UtxoOnlineDataProviders = {\n [Network.Testnet]: undefined,\n [Network.Stagenet]: mainnetBitgoProvider,\n [Network.Mainnet]: mainnetBitgoProvider,\n}\n","/**\n * Import statements for required modules and types.\n */\nimport { Network } from '@xchainjs/xchain-client'\nimport { Address } from '@xchainjs/xchain-util'\nimport * as Dogecoin from 'bitcoinjs-lib' // Importing bitcoinjs-lib for Dogecoin operations\nimport coininfo from 'coininfo' // Importing coininfo for cryptocurrency information retrieval\n\n/**\n * Constant values representing transaction sizes and lengths.\n */\nexport const TX_EMPTY_SIZE = 4 + 1 + 1 + 4 // 10\nexport const TX_INPUT_BASE = 32 + 4 + 1 + 4 // 41\nexport const TX_INPUT_PUBKEYHASH = 107\nexport const TX_OUTPUT_BASE = 8 + 1 // 9\nexport const TX_OUTPUT_PUBKEYHASH = 25\n\n/**\n * Calculate the number of bytes required for an input.\n *\n * @returns {number} The number of bytes required for an input.\n */\nexport function inputBytes(): number {\n return TX_INPUT_BASE + TX_INPUT_PUBKEYHASH\n}\n\n/**\n * Calculate the average value of an array.\n *\n * @param {number[]} array - The array of numbers.\n * @returns {number} The average value of the array.\n */\nexport function arrayAverage(array: number[]): number {\n let sum = 0\n array.forEach((value) => (sum += value))\n return sum / array.length\n}\n\n/**\n * Get the Dogecoin network configuration to be used with bitcoinjs.\n *\n * @param {Network} network - The network type.\n * @returns {Dogecoin.networks.Network} The Dogecoin network configuration.\n */\nexport const dogeNetwork = (network: Network): Dogecoin.networks.Network => {\n switch (network) {\n case Network.Mainnet:\n return coininfo.dogecoin.main.toBitcoinJS()\n case Network.Stagenet:\n return coininfo.dogecoin.main.toBitcoinJS()\n case Network.Testnet: {\n // Latest coininfo on NPM doesn't contain dogetest config information\n const bip32 = {\n private: 0x04358394,\n public: 0x043587cf,\n }\n const test = coininfo.dogecoin.test\n test.versions.bip32 = bip32\n return test.toBitcoinJS()\n }\n }\n}\n\n/**\n * Validate a Dogecoin address.\n *\n * @param {Address} address - The Dogecoin address to validate.\n * @param {Network} network - The network type.\n * @returns {boolean} `true` if the address is valid, `false` otherwise.\n */\nexport const validateAddress = (address: Address, network: Network): boolean => {\n try {\n Dogecoin.address.toOutputScript(address, dogeNetwork(network))\n return true\n } catch (error) {\n return false\n }\n}\n\n/**\n * Get the address prefix based on the network.\n *\n * @param {Network} network - The network type.\n * @returns {string} The address prefix based on the network.\n */\nexport const getPrefix = (network: Network) => {\n switch (network) {\n case Network.Mainnet:\n case Network.Stagenet:\n return ''\n case Network.Testnet:\n return 'n'\n }\n}\n","import { AssetInfo, FeeRate, Network } from '@xchainjs/xchain-client'\nimport { Address } from '@xchainjs/xchain-util'\nimport { Client as UTXOClient, PreparedTx, TxParams, UTXO, UtxoClientParams } from '@xchainjs/xchain-utxo'\nimport * as Dogecoin from 'bitcoinjs-lib'\nimport accumulative from 'coinselect/accumulative'\n\nimport {\n AssetDOGE,\n BitgoProviders,\n DOGEChain,\n DOGE_DECIMAL,\n LOWER_FEE_BOUND,\n MIN_TX_FEE,\n UPPER_FEE_BOUND,\n blockcypherDataProviders,\n blockstreamExplorerProviders,\n} from './const'\nimport { LedgerTxInfo, LedgerTxInfoParams } from './types/ledger'\nimport * as Utils from './utils'\n/**\n * Default parameters for Dogecoin UTXO client.\n * Contains default values for network, phrase, explorer providers, data providers, root derivation paths, and fee bounds.\n */\nexport const defaultDogeParams: UtxoClientParams = {\n network: Network.Mainnet, // Default network is Mainnet\n phrase: '', // Default empty phrase\n explorerProviders: blockstreamExplorerProviders, // Default explorer providers\n dataProviders: [BitgoProviders, blockcypherDataProviders], // Default data providers\n rootDerivationPaths: {\n [Network.Mainnet]: `m/44'/3'/0'/0/`, // Default root derivation path for Mainnet\n [Network.Stagenet]: `m/44'/3'/0'/0/`, // Default root derivation path for Stagenet\n [Network.Testnet]: `m/44'/1'/0'/0/`, // Default root derivation path for Testnet\n },\n feeBounds: {\n lower: LOWER_FEE_BOUND, // Default lower fee bound\n upper: UPPER_FEE_BOUND, // Default upper fee bound\n },\n}\n/**\n * Custom Dogecoin client extending UTXOClient.\n * Implements methods for Dogecoin-specific functionality.\n */\nabstract class Client extends UTXOClient {\n /**\n * Constructor for initializing the Dogecoin client.\n * Initializes the client with the provided parameters.\n *\n * @param {DogecoinClientParams} params Parameters for initializing the Dogecoin client.\n */\n constructor(params = defaultDogeParams) {\n super(DOGEChain, {\n // Call the superclass constructor with DOGEChain identifier and provided parameters\n network: params.network,\n rootDerivationPaths: params.rootDerivationPaths,\n phrase: params.phrase,\n feeBounds: params.feeBounds,\n explorerProviders: params.explorerProviders,\n dataProviders: params.dataProviders,\n })\n }\n\n /**\n * Get Dogecoin asset information.\n *\n * @returns {AssetInfo} Dogecoin asset information.\n */\n getAssetInfo(): AssetInfo {\n const assetInfo: AssetInfo = {\n asset: AssetDOGE,\n decimal: DOGE_DECIMAL,\n }\n return assetInfo\n }\n\n /**\n * Validate the given address.\n *\n * @param {Address} address The Dogecoin address to validate.\n * @returns {boolean} `true` if the address is valid, otherwise `false`.\n */\n validateAddress(address: string): boolean {\n return Utils.validateAddress(address, this.network)\n }\n\n /**\n * Builds a Dogecoin transaction (PSBT).\n *\n * Builds a Partially Signed Bitcoin Transaction (PSBT) with the specified parameters.\n * @param {BuildParams} params The transaction build options including sender, recipient, amount, memo, and fee rate.\n * @returns {Transaction} A promise that resolves to the built PSBT and the unspent transaction outputs (UTXOs) used in the transaction.\n * @deprecated This method is deprecated. Use the `transfer` method instead.\n */\n public buildTx = async ({\n amount,\n recipient,\n memo,\n feeRate,\n sender,\n }: TxParams & {\n feeRate: FeeRate\n sender: Address\n }): Promise<{ psbt: Dogecoin.Psbt; utxos: UTXO[]; inputs: UTXO[] }> => {\n // Validate the recipient address\n if (!this.validateAddress(recipient)) throw new Error('Invalid address')\n\n // Scan unspent transaction outputs (UTXOs) for the sender's address\n const utxos = await this.scanUTXOs(sender, false)\n // Throw an error if no UTXOs are found\n if (utxos.length === 0) throw new Error('No UTXOs to send')\n\n // Round the fee rate to the nearest whole number\n const feeRateWhole = Number(feeRate.toFixed(0))\n // Compile the memo if provided\n const compiledMemo = memo ? this.compileMemo(memo) : null\n\n const targetOutputs = []\n //1. Add output for the recipient\n targetOutputs.push({\n address: recipient,\n value: amount.amount().toNumber(),\n })\n //2. Add output for the memo (if provided)\n if (compiledMemo) {\n targetOutputs.push({ script: compiledMemo, value: 0 })\n }\n // Calculate the inputs and outputs for the transaction\n const { inputs, outputs } = accumulative(utxos, targetOutputs, feeRateWhole)\n\n // Throw an error if no solution was found for inputs and outputs\n if (!inputs || !outputs) throw new Error('Balance insufficient for transaction')\n\n // Create a new PSBT for building the transaction\n const psbt = new Dogecoin.Psbt({ network: Utils.dogeNetwork(this.network) })\n // Set the maximum fee rate for the PSBT\n psbt.setMaximumFeeRate(7500000)\n\n // Add inputs to the PSBT\n for (const utxo of inputs) {\n psbt.addInput({\n hash: utxo.hash,\n index: utxo.index,\n nonWitnessUtxo: Buffer.from(utxo.txHex, 'hex'),\n })\n }\n // Outputs\n outputs.forEach((output: Dogecoin.PsbtTxOutput) => {\n if (!output.address) {\n //an empty address means this is the change address\n output.address = sender\n }\n if (!output.script) {\n psbt.addOutput(output)\n } else {\n //we need to add the compiled memo this way to\n //avoid dust error tx when accumulating memo output with 0 value\n if (compiledMemo) {\n psbt.addOutput({ script: compiledMemo, value: 0 })\n }\n }\n })\n\n return { psbt, utxos, inputs }\n }\n\n /**\n * Asynchronously creates transaction information for ledger sign.\n *\n * Builds a transaction (PSBT) and prepares necessary information for ledger signing.\n *\n * @param {LedgerTxInfoParams} params The parameters for creating transaction information.\n * @returns {LedgerTxInfo} A promise that resolves to the transaction information used for ledger sign.\n */\n public async createTxInfo(params: LedgerTxInfoParams): Promise<LedgerTxInfo> {\n // Build the transaction (PSBT) and obtain the unspent transaction outputs (UTXOs)\n const { psbt, utxos } = await this.buildTx(params)\n // Construct the ledger transaction information object\n const ledgerTxInfo: LedgerTxInfo = {\n utxos,\n newTxHex: psbt.data.globalMap.unsignedTx.toBuffer().toString('hex'), // Convert unsigned transaction to hexadecimal string\n }\n return ledgerTxInfo\n }\n\n /**\n * Asynchronously prepares a transaction for transfer.\n *\n * Builds a transaction (PSBT) with the specified transfer options.\n * @param {TxParams & { sender: Address; feeRate: FeeRate; spendPendingUTXO?: boolean }} params The transfer options including sender address, fee rate, and optional flag for spending pending UTXOs.\n * @returns {Promise<PreparedTx>} A promise that resolves to the raw unsigned transaction (PSBT).\n */\n async prepareTx({\n sender,\n memo,\n amount,\n recipient,\n feeRate,\n }: TxParams & {\n sender: Address\n feeRate: FeeRate\n spendPendingUTXO?: boolean\n }): Promise<PreparedTx & { utxos: UTXO[]; inputs: UTXO[] }> {\n // Build the transaction (PSBT) with the specified transfer options\n const { psbt, utxos, inputs } = await this.buildTx({\n sender,\n recipient,\n amount,\n feeRate,\n memo,\n })\n\n // Return the raw unsigned transaction (PSBT)\n return { rawUnsignedTx: psbt.toBase64(), utxos, inputs }\n }\n\n /**\n * Compiles the memo into a buffer for inclusion in a Dogecoin transaction.\n *\n * @param {string} memo The memo to be compiled.\n * @returns {Buffer} The compiled memo as a buffer.\n */\n protected compileMemo(memo: string): Buffer {\n // Convert the memo to a buffer\n const data = Buffer.from(memo, 'utf8')\n // Compile the OP_RETURN script with the memo data\n return Dogecoin.script.compile([Dogecoin.opcodes.OP_RETURN, data])\n }\n\n /**\n * Calculates the transaction fee based on the provided UTXOs, fee rate, and optional data.\n *\n * @param {UTXO[]} inputs The unspent transaction outputs (UTXOs) used as inputs.\n * @param {FeeRate} feeRate The fee rate for the transaction.\n * @param {Buffer | null} data The compiled memo (optional).\n * @returns {number} The calculated transaction fee.\n */\n protected getFeeFromUtxos(inputs: UTXO[], feeRate: FeeRate, data: Buffer | null = null): number {\n // Calculate the size of the transaction\n const inputSizeBasedOnInputs =\n inputs.length > 0\n ? inputs.reduce((a) => a + Utils.inputBytes(), 0) + inputs.length // +1 byte for each input signature\n : 0\n // Calculate the sum of transaction size\n let sum =\n Utils.TX_EMPTY_SIZE +\n inputSizeBasedOnInputs +\n Utils.TX_OUTPUT_BASE +\n Utils.TX_OUTPUT_PUBKEYHASH +\n Utils.TX_OUTPUT_BASE +\n Utils.TX_OUTPUT_PUBKEYHASH\n\n // Add additional output size if data is provided\n if (data) {\n sum += Utils.TX_OUTPUT_BASE + data.length\n }\n // Calculate the fee based on the sum of transaction size and the fee rate\n const fee = sum * feeRate\n // Ensure the fee is not less than the minimum transaction fee\n return fee > MIN_TX_FEE ? fee : MIN_TX_FEE\n }\n}\n\nexport { Client }\n","import { FeeOption, FeeRate, TxHash, checkFeeBounds } from '@xchainjs/xchain-client'\nimport { getSeed } from '@xchainjs/xchain-crypto'\nimport { Address } from '@xchainjs/xchain-util'\nimport { TxParams } from '@xchainjs/xchain-utxo'\nimport * as Dogecoin from 'bitcoinjs-lib' // Importing the base Doge client\n\nimport { Client } from './client' // Importing utility functions\nimport * as Utils from './utils'\n/**\n * Custom Doge client extended to support keystore functionality\n */\nclass ClientKeystore extends Client {\n /**\n * Get the Dogecoin address.\n *\n * Generates a Dogecoin address using the provided phrase and index.\n * @param {number} index The index of the address to retrieve. Default is 0.\n * @returns {Address} The Dogecoin address.\n * @throws {\"index must be greater than zero\"} Thrown if the index is less than zero.\n * @throws {\"Phrase must be provided\"} Thrown if the phrase is not provided.\n * @throws {\"Address not defined\"} Thrown if failed to create the address from the phrase.\n */\n getAddress(index = 0): Address {\n if (index < 0) {\n throw new Error('index must be greater than zero')\n }\n if (this.phrase) {\n // Get Dogecoin network and keys\n const dogeNetwork = Utils.dogeNetwork(this.network)\n const dogeKeys = this.getDogeKeys(this.phrase, index)\n // Generate Dogecoin address\n const { address } = Dogecoin.payments.p2pkh({\n pubkey: dogeKeys.publicKey,\n network: dogeNetwork,\n })\n if (!address) {\n throw new Error('Address not defined')\n }\n return address\n }\n throw new Error('Phrase must be provided')\n }\n /**\n * @private\n * Get private key.\n *\n * Private function to get keyPair from the this.phrase\n *\n * @param {string} phrase The phrase to be used for generating privkey\n * @returns {ECPairInterface} The privkey generated from the given phrase\n *\n * @throws {\"Could not get private key from phrase\"} Throws an error if failed creating Doge keys from the given phrase\n * */\n private getDogeKeys(phrase: string, index = 0): Dogecoin.ECPairInterface {\n const dogeNetwork = Utils.dogeNetwork(this.network)\n\n const seed = getSeed(phrase)\n const master = Dogecoin.bip32.fromSeed(seed, dogeNetwork).derivePath(this.getFullDerivationPath(index))\n\n if (!master.privateKey) {\n throw new Error('Could not get private key from phrase')\n }\n\n return Dogecoin.ECPair.fromPrivateKey(master.privateKey, { network: dogeNetwork })\n }\n\n /**\n * Get the current address.\n * Asynchronous version of getAddress method.\n * Generates a network-specific key-pair by first converting the buffer to a Wallet-Import-Format (WIF)\n * The address is then decoded into type P2WPKH and returned.\n * @returns {Address} The current address.\n *\n * @throws {\"Phrase must be provided\"} Thrown if phrase has not been set before.\n * @throws {\"Address not defined\"} Thrown if failed creating account from phrase.\n */\n async getAddressAsync(index = 0): Promise<string> {\n return this.getAddress(index)\n }\n\n /**\n * Asynchronously transfers Dogecoin.\n *\n * Builds, signs, and broadcasts a Dogecoin transaction with the specified parameters.\n * @param {TxParams & { feeRate?: FeeRate }} params The transfer parameters including transaction details and optional fee rate.\n * @returns {TxHash} A promise that resolves to the transaction hash once the transfer is completed.\n */\n async transfer(params: TxParams & { feeRate?: FeeRate }): Promise<TxHash> {\n // Determine the fee rate for the transaction, using provided fee rate or fetching it from the network\n const feeRate = params.feeRate || (await this.getFeeRates())[FeeOption.Fast]\n // Check if the fee rate is within the specified fee bounds\n checkFeeBounds(this.feeBounds, feeRate)\n\n // Get the index of the sender's address or use the default index (0)\n const fromAddressIndex = params?.walletIndex || 0\n // Prepare the transaction by building it with the specified parameters\n const { rawUnsignedTx } = await this.prepareTx({\n ...params,\n feeRate,\n sender: await this.getAddressAsync(fromAddressIndex),\n })\n // Get the Dogecoin keys for signing the transaction\n const dogeKeys = this.getDogeKeys(this.phrase, fromAddressIndex)\n // Create a Partially Signed Bitcoin Transaction (PSBT) from the raw unsigned transaction\n const psbt = Dogecoin.Psbt.fromBase64(rawUnsignedTx, { maximumFeeRate: 7500000 })\n // Sign all inputs of the transaction with the Dogecoin keys\n psbt.signAllInputs(dogeKeys)\n // Finalize all inputs of the transaction\n psbt.finalizeAllInputs()\n // Extract the signed transaction and format it to hexadecimal\n const txHex = psbt.extractTransaction().toHex()\n // Broadcast the signed transaction to the Dogecoin network and return the transaction hash\n return await this.roundRobinBroadcastTx(txHex)\n }\n}\nexport { ClientKeystore }\n","import AppBtc from '@ledgerhq/hw-app-btc'\nimport { Transaction } from '@ledgerhq/hw-app-btc/lib/types'\nimport { FeeOption, FeeRate, TxHash, checkFeeBounds } from '@xchainjs/xchain-client'\nimport { Address } from '@xchainjs/xchain-util'\nimport { TxParams, UtxoClientParams } from '@xchainjs/xchain-utxo'\nimport * as Dogecoin from 'bitcoinjs-lib'\n\nimport { Client } from './client'\n/**\n * Custom Ledger Bitcoin client\n */\nclass ClientLedger extends Client {\n // Reference to the Ledger transport object\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private transport: any // TODO: Parametrize\n private app: AppBtc | undefined\n\n // Constructor\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(params: UtxoClientParams & { transport: any }) {\n super(params)\n this.transport = params.transport\n }\n\n // Get the Ledger Doge application instance\n public async getApp(): Promise<AppBtc> {\n if (this.app) {\n return this.app\n }\n this.app = new AppBtc({ transport: this.transport, currency: 'dogecoin' })\n return this.app\n }\n\n // Get the current address synchronously\n getAddress(): string {\n throw Error('Sync method not supported for Ledger')\n }\n\n // Get the current address asynchronously\n async getAddressAsync(index = 0, verify = false): Promise<Address> {\n const app = await this.getApp()\n const result = await app.getWalletPublicKey(this.getFullDerivationPath(index), {\n format: 'legacy',\n verify,\n })\n return result.bitcoinAddress\n }\n\n // Transfer Doge from Ledger\n async transfer(params: TxParams & { feeRate?: FeeRate }): Promise<TxHash> {\n const app = await this.getApp()\n const fromAddressIndex = params?.walletIndex || 0\n // Get fee rate\n const feeRate = params.feeRate || (await this.getFeeRates())[FeeOption.Fast]\n checkFeeBounds(this.feeBounds, feeRate)\n // Get sender address\n const sender = await this.getAddressAsync(fromAddressIndex)\n // Prepare transaction\n const { rawUnsignedTx, inputs } = await this.prepareTx({ ...params, sender, feeRate })\n const psbt = Dogecoin.Psbt.fromBase64(rawUnsignedTx)\n // Prepare Ledger inputs\n const ledgerInputs: Array<[Transaction, number, string | null, number | null]> = inputs.map(\n ({ txHex, hash, index }) => {\n if (!txHex) {\n throw Error(`Missing 'txHex' for UTXO (txHash ${hash})`)\n }\n const splittedTx = app.splitTransaction(txHex, false /* no segwit support */)\n return [splittedTx, index, null, null]\n },\n )\n\n // Prepare associated keysets\n const associatedKeysets = ledgerInputs.map(() => this.getFullDerivationPath(fromAddressIndex))\n // Convert the raw unsigned transaction to a Transaction object\n // Serialize unsigned transaction\n const unsignedHex = psbt.data.globalMap.unsignedTx.toBuffer().toString('hex')\n const newTx = app.splitTransaction(unsignedHex, true)\n const outputScriptHex = app.serializeTransactionOutputs(newTx).toString('hex')\n const txHex = await app.createPaymentTransaction({\n inputs: ledgerInputs,\n associatedKeysets,\n outputScriptHex,\n // no additionals - similar to https://github.com/shapeshift/hdwallet/blob/a61234eb83081a4de54750b8965b873b15803a03/packages/hdwallet-ledger/src/bitcoin.ts#L222\n additionals: [],\n })\n\n const txHash = await this.broadcastTx(txHex)\n // Throw error if no transaction hash is received\n if (!txHash) {\n throw Error('No Tx hash')\n }\n\n return txHash\n }\n}\nexport { ClientLedger }\n","import { Network } from '@xchainjs/xchain-client'\n\n/**\n * Function to get the URL for sending a transaction based on the network and Blockcypher URL.\n * Throws an error if the network is 'testnet' since the testnet URL is not available for Blockcypher.\n * @param {object} params Object containing the Blockcypher URL and network type.\n * @param {string} params.blockcypherUrl The Blockcypher URL.\n * @param {Network} params.network The network type (Mainnet, Testnet, or Stagenet).\n * @returns {string} The URL for sending a transaction.\n */\nexport const getSendTxUrl = ({ blockcypherUrl, network }: { blockcypherUrl: string; network: Network }): string => {\n if (network === 'testnet') {\n // Check if the network is testnet\n throw new Error('Testnet URL is not available for Blockcypher') // Throw an error if testnet URL is requested\n } else {\n return `${blockcypherUrl}/doge/main/txs/push` // Return the mainnet URL for sending a transaction\n }\n}\n"],"names":["require$$0","accumulative","UTXOClient","Utils.dogeNetwork","Utils.validateAddress","Utils.inputBytes","Utils.TX_EMPTY_SIZE","Utils.TX_OUTPUT_BASE","Utils.TX_OUTPUT_PUBKEYHASH","dogeNetwork"],"mappings":"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","x_google_ignoreList":[0,1]}
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../node_modules/coinselect/utils.js","../../../node_modules/coinselect/accumulative.js","../src/const.ts","../src/utils.ts","../src/client.ts","../src/clientKeystore.ts","../src/clientLedger.ts","../src/blockcypher-api.ts"],"sourcesContent":["// baseline estimates, used to improve performance\nvar TX_EMPTY_SIZE = 4 + 1 + 1 + 4\nvar TX_INPUT_BASE = 32 + 4 + 1 + 4\nvar TX_INPUT_PUBKEYHASH = 107\nvar TX_OUTPUT_BASE = 8 + 1\nvar TX_OUTPUT_PUBKEYHASH = 25\n\nfunction inputBytes (input) {\n return TX_INPUT_BASE + (input.script ? input.script.length : TX_INPUT_PUBKEYHASH)\n}\n\nfunction outputBytes (output) {\n return TX_OUTPUT_BASE + (output.script ? output.script.length : TX_OUTPUT_PUBKEYHASH)\n}\n\nfunction dustThreshold (output, feeRate) {\n /* ... classify the output for input estimate */\n return inputBytes({}) * feeRate\n}\n\nfunction transactionBytes (inputs, outputs) {\n return TX_EMPTY_SIZE +\n inputs.reduce(function (a, x) { return a + inputBytes(x) }, 0) +\n outputs.reduce(function (a, x) { return a + outputBytes(x) }, 0)\n}\n\nfunction uintOrNaN (v) {\n if (typeof v !== 'number') return NaN\n if (!isFinite(v)) return NaN\n if (Math.floor(v) !== v) return NaN\n if (v < 0) return NaN\n return v\n}\n\nfunction sumForgiving (range) {\n return range.reduce(function (a, x) { return a + (isFinite(x.value) ? x.value : 0) }, 0)\n}\n\nfunction sumOrNaN (range) {\n return range.reduce(function (a, x) { return a + uintOrNaN(x.value) }, 0)\n}\n\nvar BLANK_OUTPUT = outputBytes({})\n\nfunction finalize (inputs, outputs, feeRate) {\n var bytesAccum = transactionBytes(inputs, outputs)\n var feeAfterExtraOutput = feeRate * (bytesAccum + BLANK_OUTPUT)\n var remainderAfterExtraOutput = sumOrNaN(inputs) - (sumOrNaN(outputs) + feeAfterExtraOutput)\n\n // is it worth a change output?\n if (remainderAfterExtraOutput > dustThreshold({}, feeRate)) {\n outputs = outputs.concat({ value: remainderAfterExtraOutput })\n }\n\n var fee = sumOrNaN(inputs) - sumOrNaN(outputs)\n if (!isFinite(fee)) return { fee: feeRate * bytesAccum }\n\n return {\n inputs: inputs,\n outputs: outputs,\n fee: fee\n }\n}\n\nmodule.exports = {\n dustThreshold: dustThreshold,\n finalize: finalize,\n inputBytes: inputBytes,\n outputBytes: outputBytes,\n sumOrNaN: sumOrNaN,\n sumForgiving: sumForgiving,\n transactionBytes: transactionBytes,\n uintOrNaN: uintOrNaN\n}\n","var utils = require('./utils')\n\n// add inputs until we reach or surpass the target value (or deplete)\n// worst-case: O(n)\nmodule.exports = function accumulative (utxos, outputs, feeRate) {\n if (!isFinite(utils.uintOrNaN(feeRate))) return {}\n var bytesAccum = utils.transactionBytes([], outputs)\n\n var inAccum = 0\n var inputs = []\n var outAccum = utils.sumOrNaN(outputs)\n\n for (var i = 0; i < utxos.length; ++i) {\n var utxo = utxos[i]\n var utxoBytes = utils.inputBytes(utxo)\n var utxoFee = feeRate * utxoBytes\n var utxoValue = utils.uintOrNaN(utxo.value)\n\n // skip detrimental input\n if (utxoFee > utxo.value) {\n if (i === utxos.length - 1) return { fee: feeRate * (bytesAccum + utxoBytes) }\n continue\n }\n\n bytesAccum += utxoBytes\n inAccum += utxoValue\n inputs.push(utxo)\n\n var fee = feeRate * bytesAccum\n\n // go again?\n if (inAccum < outAccum + fee) continue\n\n return utils.finalize(inputs, outputs, feeRate)\n }\n\n return { fee: feeRate * bytesAccum }\n}\n","import { ExplorerProvider, Network } from '@xchainjs/xchain-client'\nimport { Asset, AssetType } from '@xchainjs/xchain-util'\nimport {\n BitgoProvider,\n BlockcypherNetwork,\n BlockcypherProvider,\n SochainNetwork,\n SochainProvider,\n UtxoOnlineDataProviders,\n} from '@xchainjs/xchain-utxo-providers'\n/**\n * Minimum transaction fee for Dogecoin transactions.\n * Defined as 100000 satoshi/kB.\n * @see https://github.com/dogecoin/dogecoin/blob/master/src/validation.h#L58\n */\nexport const MIN_TX_FEE = 100000\n\n/**\n * Decimal places for Dogecoin.\n */\nexport const DOGE_DECIMAL = 8\n\n/**\n * Lower fee bound for Dogecoin transactions.\n * Referenced from Dogecoin fee recommendation documentation.\n * @see https://github.com/dogecoin/dogecoin/blob/master/doc/fee-recommendation.md\n */\nexport const LOWER_FEE_BOUND = 100\n\n/**\n * Upper fee bound for Dogecoin transactions.\n * Referenced from Dogecoin fee recommendation documentation.\n * @see https://github.com/dogecoin/dogecoin/blob/master/doc/fee-recommendation.md\n */\nexport const UPPER_FEE_BOUND = 20_000_000\n\n/**\n * Chain identifier for Dogecoin.\n */\nexport const DOGEChain = 'DOGE' as const\n\n/**\n * Base asset object for Dogecoin.\n * Represents the Dogecoin asset in various contexts.\n */\nexport const AssetDOGE: Asset = { chain: DOGEChain, symbol: 'DOGE', ticker: 'DOGE', type: AssetType.NATIVE }\n\n/**\n * Explorer provider for Dogecoin mainnet and testnet.\n * Provides URLs for exploring Dogecoin transactions and addresses.\n */\nconst DOGE_MAINNET_EXPLORER = new ExplorerProvider(\n 'https://blockchair.com/dogecoin',\n 'https://blockchair.com/dogecoin/address/%%ADDRESS%%',\n 'https://blockchair.com/dogecoin/transaction/%%TX_ID%%',\n)\nconst DOGE_TESTNET_EXPLORER = new ExplorerProvider(\n 'https://blockexplorer.one/dogecoin/testnet',\n 'https://blockexplorer.one/dogecoin/testnet/address/%%ADDRESS%%',\n 'https://blockexplorer.one/dogecoin/testnet/tx/%%TX_ID%%',\n)\nexport const blockstreamExplorerProviders = {\n [Network.Testnet]: DOGE_TESTNET_EXPLORER,\n [Network.Stagenet]: DOGE_MAINNET_EXPLORER,\n [Network.Mainnet]: DOGE_MAINNET_EXPLORER,\n}\n\n/**\n * Sochain data providers for Dogecoin mainnet and testnet.\n * Provides API access to Sochain for Dogecoin.\n */\nconst testnetSochainProvider = new SochainProvider(\n 'https://sochain.com/api/v3',\n process.env.SOCHAIN_API_KEY || '',\n DOGEChain,\n AssetDOGE,\n 8,\n SochainNetwork.DOGETEST,\n)\nconst mainnetSochainProvider = new SochainProvider(\n 'https://sochain.com/api/v3',\n process.env.SOCHAIN_API_KEY || '',\n DOGEChain,\n AssetDOGE,\n 8,\n SochainNetwork.DOGE,\n)\nexport const sochainDataProviders = {\n [Network.Testnet]: testnetSochainProvider,\n [Network.Stagenet]: mainnetSochainProvider,\n [Network.Mainnet]: mainnetSochainProvider,\n}\n\n/**\n * Blockcypher data providers for Dogecoin mainnet and stagenet.\n * Provides API access to Blockcypher for Dogecoin.\n */\nconst mainnetBlockcypherProvider = new BlockcypherProvider(\n 'https://api.blockcypher.com/v1',\n DOGEChain,\n AssetDOGE,\n 8,\n BlockcypherNetwork.DOGE,\n process.env.BLOCKCYPHER_API_KEY || '',\n)\nexport const blockcypherDataProviders = {\n [Network.Testnet]: undefined, //no provider here\n [Network.Stagenet]: mainnetBlockcypherProvider,\n [Network.Mainnet]: mainnetBlockcypherProvider,\n}\n\n/**\n * Bitgo data providers for Dogecoin mainnet and stagenet.\n * Provides API access to Bitgo for Dogecoin.\n */\nconst mainnetBitgoProvider = new BitgoProvider({\n baseUrl: 'https://app.bitgo.com',\n chain: DOGEChain,\n})\n\nexport const BitgoProviders: UtxoOnlineDataProviders = {\n [Network.Testnet]: undefined,\n [Network.Stagenet]: mainnetBitgoProvider,\n [Network.Mainnet]: mainnetBitgoProvider,\n}\n","/**\n * Import statements for required modules and types.\n */\nimport { Network } from '@xchainjs/xchain-client'\nimport { Address } from '@xchainjs/xchain-util'\nimport * as Dogecoin from 'bitcoinjs-lib' // Importing bitcoinjs-lib for Dogecoin operations\nimport coininfo from 'coininfo' // Importing coininfo for cryptocurrency information retrieval\n\n/**\n * Constant values representing transaction sizes and lengths.\n */\nexport const TX_EMPTY_SIZE = 4 + 1 + 1 + 4 // 10\nexport const TX_INPUT_BASE = 32 + 4 + 1 + 4 // 41\nexport const TX_INPUT_PUBKEYHASH = 107\nexport const TX_OUTPUT_BASE = 8 + 1 // 9\nexport const TX_OUTPUT_PUBKEYHASH = 25\n\n/**\n * Calculate the number of bytes required for an input.\n *\n * @returns {number} The number of bytes required for an input.\n */\nexport function inputBytes(): number {\n return TX_INPUT_BASE + TX_INPUT_PUBKEYHASH\n}\n\n/**\n * Calculate the average value of an array.\n *\n * @param {number[]} array - The array of numbers.\n * @returns {number} The average value of the array.\n */\nexport function arrayAverage(array: number[]): number {\n let sum = 0\n array.forEach((value) => (sum += value))\n return sum / array.length\n}\n\n/**\n * Get the Dogecoin network configuration to be used with bitcoinjs.\n *\n * @param {Network} network - The network type.\n * @returns {Dogecoin.networks.Network} The Dogecoin network configuration.\n */\nexport const dogeNetwork = (network: Network): Dogecoin.networks.Network => {\n switch (network) {\n case Network.Mainnet:\n return coininfo.dogecoin.main.toBitcoinJS()\n case Network.Stagenet:\n return coininfo.dogecoin.main.toBitcoinJS()\n case Network.Testnet: {\n // Latest coininfo on NPM doesn't contain dogetest config information\n const bip32 = {\n private: 0x04358394,\n public: 0x043587cf,\n }\n const test = coininfo.dogecoin.test\n test.versions.bip32 = bip32\n return test.toBitcoinJS()\n }\n }\n}\n\n/**\n * Validate a Dogecoin address.\n *\n * @param {Address} address - The Dogecoin address to validate.\n * @param {Network} network - The network type.\n * @returns {boolean} `true` if the address is valid, `false` otherwise.\n */\nexport const validateAddress = (address: Address, network: Network): boolean => {\n try {\n Dogecoin.address.toOutputScript(address, dogeNetwork(network))\n return true\n } catch (error) {\n return false\n }\n}\n\n/**\n * Get the address prefix based on the network.\n *\n * @param {Network} network - The network type.\n * @returns {string} The address prefix based on the network.\n */\nexport const getPrefix = (network: Network) => {\n switch (network) {\n case Network.Mainnet:\n case Network.Stagenet:\n return ''\n case Network.Testnet:\n return 'n'\n }\n}\n","import { AssetInfo, FeeRate, Network } from '@xchainjs/xchain-client'\nimport { Address } from '@xchainjs/xchain-util'\nimport { Client as UTXOClient, PreparedTx, TxParams, UTXO, UtxoClientParams } from '@xchainjs/xchain-utxo'\nimport * as Dogecoin from 'bitcoinjs-lib'\nimport accumulative from 'coinselect/accumulative'\n\nimport {\n AssetDOGE,\n BitgoProviders,\n DOGEChain,\n DOGE_DECIMAL,\n LOWER_FEE_BOUND,\n MIN_TX_FEE,\n UPPER_FEE_BOUND,\n blockcypherDataProviders,\n blockstreamExplorerProviders,\n} from './const'\nimport { LedgerTxInfo, LedgerTxInfoParams } from './types/ledger'\nimport * as Utils from './utils'\n/**\n * Default parameters for Dogecoin UTXO client.\n * Contains default values for network, phrase, explorer providers, data providers, root derivation paths, and fee bounds.\n */\nexport const defaultDogeParams: UtxoClientParams = {\n network: Network.Mainnet, // Default network is Mainnet\n phrase: '', // Default empty phrase\n explorerProviders: blockstreamExplorerProviders, // Default explorer providers\n dataProviders: [BitgoProviders, blockcypherDataProviders], // Default data providers\n rootDerivationPaths: {\n [Network.Mainnet]: `m/44'/3'/0'/0/`, // Default root derivation path for Mainnet\n [Network.Stagenet]: `m/44'/3'/0'/0/`, // Default root derivation path for Stagenet\n [Network.Testnet]: `m/44'/1'/0'/0/`, // Default root derivation path for Testnet\n },\n feeBounds: {\n lower: LOWER_FEE_BOUND, // Default lower fee bound\n upper: UPPER_FEE_BOUND, // Default upper fee bound\n },\n}\n/**\n * Custom Dogecoin client extending UTXOClient.\n * Implements methods for Dogecoin-specific functionality.\n */\nabstract class Client extends UTXOClient {\n /**\n * Constructor for initializing the Dogecoin client.\n * Initializes the client with the provided parameters.\n *\n * @param {DogecoinClientParams} params Parameters for initializing the Dogecoin client.\n */\n constructor(params = defaultDogeParams) {\n super(DOGEChain, {\n // Call the superclass constructor with DOGEChain identifier and provided parameters\n network: params.network,\n rootDerivationPaths: params.rootDerivationPaths,\n phrase: params.phrase,\n feeBounds: params.feeBounds,\n explorerProviders: params.explorerProviders,\n dataProviders: params.dataProviders,\n })\n }\n\n /**\n * Get Dogecoin asset information.\n *\n * @returns {AssetInfo} Dogecoin asset information.\n */\n getAssetInfo(): AssetInfo {\n const assetInfo: AssetInfo = {\n asset: AssetDOGE,\n decimal: DOGE_DECIMAL,\n }\n return assetInfo\n }\n\n /**\n * Validate the given address.\n *\n * @param {Address} address The Dogecoin address to validate.\n * @returns {boolean} `true` if the address is valid, otherwise `false`.\n */\n validateAddress(address: string): boolean {\n return Utils.validateAddress(address, this.network)\n }\n\n /**\n * Builds a Dogecoin transaction (PSBT).\n *\n * Builds a Partially Signed Bitcoin Transaction (PSBT) with the specified parameters.\n * @param {BuildParams} params The transaction build options including sender, recipient, amount, memo, and fee rate.\n * @returns {Transaction} A promise that resolves to the built PSBT and the unspent transaction outputs (UTXOs) used in the transaction.\n * @deprecated This method is deprecated. Use the `transfer` method instead.\n */\n public buildTx = async ({\n amount,\n recipient,\n memo,\n feeRate,\n sender,\n }: TxParams & {\n feeRate: FeeRate\n sender: Address\n }): Promise<{ psbt: Dogecoin.Psbt; utxos: UTXO[]; inputs: UTXO[] }> => {\n // Validate the recipient address\n if (!this.validateAddress(recipient)) throw new Error('Invalid address')\n\n // Scan unspent transaction outputs (UTXOs) for the sender's address\n const utxos = await this.scanUTXOs(sender, false)\n // Throw an error if no UTXOs are found\n if (utxos.length === 0) throw new Error('No UTXOs to send')\n\n // Round the fee rate to the nearest whole number\n const feeRateWhole = Number(feeRate.toFixed(0))\n // Compile the memo if provided\n const compiledMemo = memo ? this.compileMemo(memo) : null\n\n const targetOutputs = []\n //1. Add output for the recipient\n targetOutputs.push({\n address: recipient,\n value: amount.amount().toNumber(),\n })\n //2. Add output for the memo (if provided)\n if (compiledMemo) {\n targetOutputs.push({ script: compiledMemo, value: 0 })\n }\n // Calculate the inputs and outputs for the transaction\n const { inputs, outputs } = accumulative(utxos, targetOutputs, feeRateWhole)\n\n // Throw an error if no solution was found for inputs and outputs\n if (!inputs || !outputs) throw new Error('Balance insufficient for transaction')\n\n // Create a new PSBT for building the transaction\n const psbt = new Dogecoin.Psbt({ network: Utils.dogeNetwork(this.network) })\n // Set the maximum fee rate for the PSBT\n psbt.setMaximumFeeRate(7500000)\n\n // Add inputs to the PSBT\n for (const utxo of inputs) {\n psbt.addInput({\n hash: utxo.hash,\n index: utxo.index,\n nonWitnessUtxo: Buffer.from(utxo.txHex, 'hex'),\n })\n }\n // Outputs\n outputs.forEach((output: Dogecoin.PsbtTxOutput) => {\n if (!output.address) {\n //an empty address means this is the change address\n output.address = sender\n }\n if (!output.script) {\n psbt.addOutput(output)\n } else {\n //we need to add the compiled memo this way to\n //avoid dust error tx when accumulating memo output with 0 value\n if (compiledMemo) {\n psbt.addOutput({ script: compiledMemo, value: 0 })\n }\n }\n })\n\n return { psbt, utxos, inputs }\n }\n\n /**\n * Asynchronously creates transaction information for ledger sign.\n *\n * Builds a transaction (PSBT) and prepares necessary information for ledger signing.\n *\n * @param {LedgerTxInfoParams} params The parameters for creating transaction information.\n * @returns {LedgerTxInfo} A promise that resolves to the transaction information used for ledger sign.\n */\n public async createTxInfo(params: LedgerTxInfoParams): Promise<LedgerTxInfo> {\n // Build the transaction (PSBT) and obtain the unspent transaction outputs (UTXOs)\n const { psbt, utxos } = await this.buildTx(params)\n // Construct the ledger transaction information object\n const ledgerTxInfo: LedgerTxInfo = {\n utxos,\n newTxHex: psbt.data.globalMap.unsignedTx.toBuffer().toString('hex'), // Convert unsigned transaction to hexadecimal string\n }\n return ledgerTxInfo\n }\n\n /**\n * Asynchronously prepares a transaction for transfer.\n *\n * Builds a transaction (PSBT) with the specified transfer options.\n * @param {TxParams & { sender: Address; feeRate: FeeRate; spendPendingUTXO?: boolean }} params The transfer options including sender address, fee rate, and optional flag for spending pending UTXOs.\n * @returns {Promise<PreparedTx>} A promise that resolves to the raw unsigned transaction (PSBT).\n */\n async prepareTx({\n sender,\n memo,\n amount,\n recipient,\n feeRate,\n }: TxParams & {\n sender: Address\n feeRate: FeeRate\n spendPendingUTXO?: boolean\n }): Promise<PreparedTx & { utxos: UTXO[]; inputs: UTXO[] }> {\n // Build the transaction (PSBT) with the specified transfer options\n const { psbt, utxos, inputs } = await this.buildTx({\n sender,\n recipient,\n amount,\n feeRate,\n memo,\n })\n\n // Return the raw unsigned transaction (PSBT)\n return { rawUnsignedTx: psbt.toBase64(), utxos, inputs }\n }\n\n /**\n * Compiles the memo into a buffer for inclusion in a Dogecoin transaction.\n *\n * @param {string} memo The memo to be compiled.\n * @returns {Buffer} The compiled memo as a buffer.\n */\n protected compileMemo(memo: string): Buffer {\n // Convert the memo to a buffer\n const data = Buffer.from(memo, 'utf8')\n // Compile the OP_RETURN script with the memo data\n return Dogecoin.script.compile([Dogecoin.opcodes.OP_RETURN, data])\n }\n\n /**\n * Calculates the transaction fee based on the provided UTXOs, fee rate, and optional data.\n *\n * @param {UTXO[]} inputs The unspent transaction outputs (UTXOs) used as inputs.\n * @param {FeeRate} feeRate The fee rate for the transaction.\n * @param {Buffer | null} data The compiled memo (optional).\n * @returns {number} The calculated transaction fee.\n */\n protected getFeeFromUtxos(inputs: UTXO[], feeRate: FeeRate, data: Buffer | null = null): number {\n // Calculate the size of the transaction\n const inputSizeBasedOnInputs =\n inputs.length > 0\n ? inputs.reduce((a) => a + Utils.inputBytes(), 0) + inputs.length // +1 byte for each input signature\n : 0\n // Calculate the sum of transaction size\n let sum =\n Utils.TX_EMPTY_SIZE +\n inputSizeBasedOnInputs +\n Utils.TX_OUTPUT_BASE +\n Utils.TX_OUTPUT_PUBKEYHASH +\n Utils.TX_OUTPUT_BASE +\n Utils.TX_OUTPUT_PUBKEYHASH\n\n // Add additional output size if data is provided\n if (data) {\n sum += Utils.TX_OUTPUT_BASE + data.length\n }\n // Calculate the fee based on the sum of transaction size and the fee rate\n const fee = sum * feeRate\n // Ensure the fee is not less than the minimum transaction fee\n return fee > MIN_TX_FEE ? fee : MIN_TX_FEE\n }\n}\n\nexport { Client }\n","import { FeeOption, FeeRate, TxHash, checkFeeBounds } from '@xchainjs/xchain-client'\nimport { getSeed } from '@xchainjs/xchain-crypto'\nimport { Address } from '@xchainjs/xchain-util'\nimport { TxParams } from '@xchainjs/xchain-utxo'\nimport * as Dogecoin from 'bitcoinjs-lib' // Importing the base Doge client\n\nimport { Client } from './client' // Importing utility functions\nimport * as Utils from './utils'\n/**\n * Custom Doge client extended to support keystore functionality\n */\nclass ClientKeystore extends Client {\n /**\n * Get the Dogecoin address.\n *\n * Generates a Dogecoin address using the provided phrase and index.\n * @param {number} index The index of the address to retrieve. Default is 0.\n * @returns {Address} The Dogecoin address.\n * @throws {\"index must be greater than zero\"} Thrown if the index is less than zero.\n * @throws {\"Phrase must be provided\"} Thrown if the phrase is not provided.\n * @throws {\"Address not defined\"} Thrown if failed to create the address from the phrase.\n */\n getAddress(index = 0): Address {\n if (index < 0) {\n throw new Error('index must be greater than zero')\n }\n if (this.phrase) {\n // Get Dogecoin network and keys\n const dogeNetwork = Utils.dogeNetwork(this.network)\n const dogeKeys = this.getDogeKeys(this.phrase, index)\n // Generate Dogecoin address\n const { address } = Dogecoin.payments.p2pkh({\n pubkey: dogeKeys.publicKey,\n network: dogeNetwork,\n })\n if (!address) {\n throw new Error('Address not defined')\n }\n return address\n }\n throw new Error('Phrase must be provided')\n }\n /**\n * @private\n * Get private key.\n *\n * Private function to get keyPair from the this.phrase\n *\n * @param {string} phrase The phrase to be used for generating privkey\n * @returns {ECPairInterface} The privkey generated from the given phrase\n *\n * @throws {\"Could not get private key from phrase\"} Throws an error if failed creating Doge keys from the given phrase\n * */\n private getDogeKeys(phrase: string, index = 0): Dogecoin.ECPairInterface {\n const dogeNetwork = Utils.dogeNetwork(this.network)\n\n const seed = getSeed(phrase)\n const master = Dogecoin.bip32.fromSeed(seed, dogeNetwork).derivePath(this.getFullDerivationPath(index))\n\n if (!master.privateKey) {\n throw new Error('Could not get private key from phrase')\n }\n\n return Dogecoin.ECPair.fromPrivateKey(master.privateKey, { network: dogeNetwork })\n }\n\n /**\n * Get the current address.\n * Asynchronous version of getAddress method.\n * Generates a network-specific key-pair by first converting the buffer to a Wallet-Import-Format (WIF)\n * The address is then decoded into type P2WPKH and returned.\n * @returns {Address} The current address.\n *\n * @throws {\"Phrase must be provided\"} Thrown if phrase has not been set before.\n * @throws {\"Address not defined\"} Thrown if failed creating account from phrase.\n */\n async getAddressAsync(index = 0): Promise<string> {\n return this.getAddress(index)\n }\n\n /**\n * Asynchronously transfers Dogecoin.\n *\n * Builds, signs, and broadcasts a Dogecoin transaction with the specified parameters.\n * @param {TxParams & { feeRate?: FeeRate }} params The transfer parameters including transaction details and optional fee rate.\n * @returns {TxHash} A promise that resolves to the transaction hash once the transfer is completed.\n */\n async transfer(params: TxParams & { feeRate?: FeeRate }): Promise<TxHash> {\n // Determine the fee rate for the transaction, using provided fee rate or fetching it from the network\n const feeRate = params.feeRate || (await this.getFeeRates())[FeeOption.Fast]\n // Check if the fee rate is within the specified fee bounds\n checkFeeBounds(this.feeBounds, feeRate)\n\n // Get the index of the sender's address or use the default index (0)\n const fromAddressIndex = params?.walletIndex || 0\n // Prepare the transaction by building it with the specified parameters\n const { rawUnsignedTx } = await this.prepareTx({\n ...params,\n feeRate,\n sender: await this.getAddressAsync(fromAddressIndex),\n })\n // Get the Dogecoin keys for signing the transaction\n const dogeKeys = this.getDogeKeys(this.phrase, fromAddressIndex)\n // Create a Partially Signed Bitcoin Transaction (PSBT) from the raw unsigned transaction\n const psbt = Dogecoin.Psbt.fromBase64(rawUnsignedTx, { maximumFeeRate: 7500000 })\n // Sign all inputs of the transaction with the Dogecoin keys\n psbt.signAllInputs(dogeKeys)\n // Finalize all inputs of the transaction\n psbt.finalizeAllInputs()\n // Extract the signed transaction and format it to hexadecimal\n const txHex = psbt.extractTransaction().toHex()\n // Broadcast the signed transaction to the Dogecoin network and return the transaction hash\n return await this.roundRobinBroadcastTx(txHex)\n }\n}\nexport { ClientKeystore }\n","import AppBtc from '@ledgerhq/hw-app-btc'\nimport { Transaction } from '@ledgerhq/hw-app-btc/lib/types'\nimport { FeeOption, FeeRate, TxHash, checkFeeBounds } from '@xchainjs/xchain-client'\nimport { Address } from '@xchainjs/xchain-util'\nimport { TxParams, UtxoClientParams } from '@xchainjs/xchain-utxo'\nimport * as Dogecoin from 'bitcoinjs-lib'\n\nimport { Client } from './client'\n/**\n * Custom Ledger Bitcoin client\n */\nclass ClientLedger extends Client {\n // Reference to the Ledger transport object\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private transport: any // TODO: Parametrize\n private app: AppBtc | undefined\n\n // Constructor\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(params: UtxoClientParams & { transport: any }) {\n super(params)\n this.transport = params.transport\n }\n\n // Get the Ledger Doge application instance\n public async getApp(): Promise<AppBtc> {\n if (this.app) {\n return this.app\n }\n this.app = new AppBtc({ transport: this.transport, currency: 'dogecoin' })\n return this.app\n }\n\n // Get the current address synchronously\n getAddress(): string {\n throw Error('Sync method not supported for Ledger')\n }\n\n // Get the current address asynchronously\n async getAddressAsync(index = 0, verify = false): Promise<Address> {\n const app = await this.getApp()\n const result = await app.getWalletPublicKey(this.getFullDerivationPath(index), {\n format: 'legacy',\n verify,\n })\n return result.bitcoinAddress\n }\n\n // Transfer Doge from Ledger\n async transfer(params: TxParams & { feeRate?: FeeRate }): Promise<TxHash> {\n const app = await this.getApp()\n const fromAddressIndex = params?.walletIndex || 0\n // Get fee rate\n const feeRate = params.feeRate || (await this.getFeeRates())[FeeOption.Fast]\n checkFeeBounds(this.feeBounds, feeRate)\n // Get sender address\n const sender = await this.getAddressAsync(fromAddressIndex)\n // Prepare transaction\n const { rawUnsignedTx, inputs } = await this.prepareTx({ ...params, sender, feeRate })\n const psbt = Dogecoin.Psbt.fromBase64(rawUnsignedTx)\n // Prepare Ledger inputs\n const ledgerInputs: Array<[Transaction, number, string | null, number | null]> = inputs.map(\n ({ txHex, hash, index }) => {\n if (!txHex) {\n throw Error(`Missing 'txHex' for UTXO (txHash ${hash})`)\n }\n const splittedTx = app.splitTransaction(txHex, false /* no segwit support */)\n return [splittedTx, index, null, null]\n },\n )\n\n // Prepare associated keysets\n const associatedKeysets = ledgerInputs.map(() => this.getFullDerivationPath(fromAddressIndex))\n // Convert the raw unsigned transaction to a Transaction object\n // Serialize unsigned transaction\n const unsignedHex = psbt.data.globalMap.unsignedTx.toBuffer().toString('hex')\n const newTx = app.splitTransaction(unsignedHex, true)\n const outputScriptHex = app.serializeTransactionOutputs(newTx).toString('hex')\n const txHex = await app.createPaymentTransaction({\n inputs: ledgerInputs,\n associatedKeysets,\n outputScriptHex,\n // no additionals - similar to https://github.com/shapeshift/hdwallet/blob/a61234eb83081a4de54750b8965b873b15803a03/packages/hdwallet-ledger/src/bitcoin.ts#L222\n additionals: [],\n })\n\n const txHash = await this.broadcastTx(txHex)\n // Throw error if no transaction hash is received\n if (!txHash) {\n throw Error('No Tx hash')\n }\n\n return txHash\n }\n}\nexport { ClientLedger }\n","import { Network } from '@xchainjs/xchain-client'\n\n/**\n * Function to get the URL for sending a transaction based on the network and Blockcypher URL.\n * Throws an error if the network is 'testnet' since the testnet URL is not available for Blockcypher.\n * @param {object} params Object containing the Blockcypher URL and network type.\n * @param {string} params.blockcypherUrl The Blockcypher URL.\n * @param {Network} params.network The network type (Mainnet, Testnet, or Stagenet).\n * @returns {string} The URL for sending a transaction.\n */\nexport const getSendTxUrl = ({ blockcypherUrl, network }: { blockcypherUrl: string; network: Network }): string => {\n if (network === 'testnet') {\n // Check if the network is testnet\n throw new Error('Testnet URL is not available for Blockcypher') // Throw an error if testnet URL is requested\n } else {\n return `${blockcypherUrl}/doge/main/txs/push` // Return the mainnet URL for sending a transaction\n }\n}\n"],"names":["require$$0","accumulative","AssetType","ExplorerProvider","Network","SochainProvider","SochainNetwork","BlockcypherProvider","BlockcypherNetwork","BitgoProvider","coininfo","Dogecoin","UTXOClient","Utils.dogeNetwork","Utils.validateAddress","Utils.inputBytes","Utils.TX_EMPTY_SIZE","Utils.TX_OUTPUT_BASE","Utils.TX_OUTPUT_PUBKEYHASH","dogeNetwork","getSeed","FeeOption","checkFeeBounds","AppBtc"],"mappings":"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","x_google_ignoreList":[0,1]}