@bitpay-labs/bitcore-wallet-service 11.11.0 → 11.11.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.
Files changed (157) hide show
  1. package/Dockerfile +1 -1
  2. package/package.json +5 -5
  3. package/src/config.ts +0 -20
  4. package/src/externalservices/banxa.ts +51 -10
  5. package/src/externalservices/changelly.ts +54 -6
  6. package/src/externalservices/moonpay.ts +85 -19
  7. package/src/externalservices/oneInch.ts +13 -5
  8. package/src/externalservices/ramp.ts +42 -8
  9. package/src/externalservices/sardine.ts +51 -10
  10. package/src/externalservices/simplex.ts +58 -11
  11. package/src/externalservices/thorswap.ts +46 -11
  12. package/src/externalservices/transak.ts +53 -11
  13. package/src/lib/chain/btc/index.ts +3 -2
  14. package/src/lib/chain/eth/index.ts +134 -117
  15. package/src/lib/chain/sol/index.ts +1 -1
  16. package/src/lib/chain/xrp/index.ts +1 -1
  17. package/src/lib/routes/services.ts +0 -12
  18. package/src/lib/routes/wallets.ts +3 -1
  19. package/src/lib/server.ts +136 -91
  20. package/src/lib/storage.ts +90 -20
  21. package/src/types/externalservices.d.ts +0 -1
  22. package/test/chain/eth.test.ts +70 -0
  23. package/test/chain/sol.test.ts +1 -1
  24. package/test/chain/xrp.test.ts +1 -1
  25. package/test/expressapp.test.ts +144 -0
  26. package/test/integration/addressReads.test.ts +503 -0
  27. package/test/integration/bcmonitor.test.ts +44 -0
  28. package/test/integration/externalservices/banxa.test.ts +95 -5
  29. package/test/integration/externalservices/changelly.test.ts +118 -6
  30. package/test/integration/externalservices/coinGecko.test.ts +4 -0
  31. package/test/integration/externalservices/moonpay.test.ts +178 -9
  32. package/test/integration/externalservices/oneInch.test.ts +28 -1
  33. package/test/integration/externalservices/ramp.test.ts +126 -4
  34. package/test/integration/externalservices/sardine.test.ts +95 -5
  35. package/test/integration/externalservices/simplex.test.ts +95 -5
  36. package/test/integration/externalservices/thorswap.test.ts +81 -5
  37. package/test/integration/externalservices/transak.test.ts +98 -6
  38. package/test/integration/helpers.ts +1 -1
  39. package/test/integration/server.test.ts +254 -136
  40. package/test/integration/walletReads.test.ts +488 -0
  41. package/ts_build/package.json +3 -3
  42. package/ts_build/src/config.d.ts.map +1 -1
  43. package/ts_build/src/config.js +0 -4
  44. package/ts_build/src/config.js.map +1 -1
  45. package/ts_build/src/externalservices/banxa.d.ts.map +1 -1
  46. package/ts_build/src/externalservices/banxa.js +51 -10
  47. package/ts_build/src/externalservices/banxa.js.map +1 -1
  48. package/ts_build/src/externalservices/changelly.d.ts.map +1 -1
  49. package/ts_build/src/externalservices/changelly.js +54 -6
  50. package/ts_build/src/externalservices/changelly.js.map +1 -1
  51. package/ts_build/src/externalservices/moonpay.d.ts.map +1 -1
  52. package/ts_build/src/externalservices/moonpay.js +85 -19
  53. package/ts_build/src/externalservices/moonpay.js.map +1 -1
  54. package/ts_build/src/externalservices/oneInch.d.ts.map +1 -1
  55. package/ts_build/src/externalservices/oneInch.js +13 -5
  56. package/ts_build/src/externalservices/oneInch.js.map +1 -1
  57. package/ts_build/src/externalservices/ramp.d.ts.map +1 -1
  58. package/ts_build/src/externalservices/ramp.js +42 -8
  59. package/ts_build/src/externalservices/ramp.js.map +1 -1
  60. package/ts_build/src/externalservices/sardine.d.ts.map +1 -1
  61. package/ts_build/src/externalservices/sardine.js +51 -10
  62. package/ts_build/src/externalservices/sardine.js.map +1 -1
  63. package/ts_build/src/externalservices/simplex.d.ts.map +1 -1
  64. package/ts_build/src/externalservices/simplex.js +55 -11
  65. package/ts_build/src/externalservices/simplex.js.map +1 -1
  66. package/ts_build/src/externalservices/thorswap.d.ts.map +1 -1
  67. package/ts_build/src/externalservices/thorswap.js +45 -11
  68. package/ts_build/src/externalservices/thorswap.js.map +1 -1
  69. package/ts_build/src/externalservices/transak.d.ts.map +1 -1
  70. package/ts_build/src/externalservices/transak.js +53 -11
  71. package/ts_build/src/externalservices/transak.js.map +1 -1
  72. package/ts_build/src/lib/chain/btc/index.d.ts.map +1 -1
  73. package/ts_build/src/lib/chain/btc/index.js +3 -2
  74. package/ts_build/src/lib/chain/btc/index.js.map +1 -1
  75. package/ts_build/src/lib/chain/eth/index.d.ts +8 -1
  76. package/ts_build/src/lib/chain/eth/index.d.ts.map +1 -1
  77. package/ts_build/src/lib/chain/eth/index.js +114 -102
  78. package/ts_build/src/lib/chain/eth/index.js.map +1 -1
  79. package/ts_build/src/lib/chain/sol/index.js +1 -1
  80. package/ts_build/src/lib/chain/sol/index.js.map +1 -1
  81. package/ts_build/src/lib/chain/xrp/index.js +1 -1
  82. package/ts_build/src/lib/chain/xrp/index.js.map +1 -1
  83. package/ts_build/src/lib/routes/services.d.ts.map +1 -1
  84. package/ts_build/src/lib/routes/services.js +0 -10
  85. package/ts_build/src/lib/routes/services.js.map +1 -1
  86. package/ts_build/src/lib/routes/wallets.d.ts.map +1 -1
  87. package/ts_build/src/lib/routes/wallets.js +2 -1
  88. package/ts_build/src/lib/routes/wallets.js.map +1 -1
  89. package/ts_build/src/lib/server.d.ts +1 -3
  90. package/ts_build/src/lib/server.d.ts.map +1 -1
  91. package/ts_build/src/lib/server.js +128 -96
  92. package/ts_build/src/lib/server.js.map +1 -1
  93. package/ts_build/src/lib/storage.d.ts +17 -10
  94. package/ts_build/src/lib/storage.d.ts.map +1 -1
  95. package/ts_build/src/lib/storage.js +73 -20
  96. package/ts_build/src/lib/storage.js.map +1 -1
  97. package/ts_build/test/chain/eth.test.js +59 -0
  98. package/ts_build/test/chain/eth.test.js.map +1 -1
  99. package/ts_build/test/chain/sol.test.js +1 -1
  100. package/ts_build/test/chain/sol.test.js.map +1 -1
  101. package/ts_build/test/chain/xrp.test.js +1 -1
  102. package/ts_build/test/chain/xrp.test.js.map +1 -1
  103. package/ts_build/test/expressapp.test.js +132 -0
  104. package/ts_build/test/expressapp.test.js.map +1 -1
  105. package/ts_build/test/integration/addressReads.test.d.ts +2 -0
  106. package/ts_build/test/integration/addressReads.test.d.ts.map +1 -0
  107. package/ts_build/test/integration/addressReads.test.js +465 -0
  108. package/ts_build/test/integration/addressReads.test.js.map +1 -0
  109. package/ts_build/test/integration/bcmonitor.test.js +40 -0
  110. package/ts_build/test/integration/bcmonitor.test.js.map +1 -1
  111. package/ts_build/test/integration/externalservices/banxa.test.d.ts.map +1 -1
  112. package/ts_build/test/integration/externalservices/banxa.test.js +93 -5
  113. package/ts_build/test/integration/externalservices/banxa.test.js.map +1 -1
  114. package/ts_build/test/integration/externalservices/changelly.test.d.ts.map +1 -1
  115. package/ts_build/test/integration/externalservices/changelly.test.js +111 -6
  116. package/ts_build/test/integration/externalservices/changelly.test.js.map +1 -1
  117. package/ts_build/test/integration/externalservices/coinGecko.test.js +4 -0
  118. package/ts_build/test/integration/externalservices/coinGecko.test.js.map +1 -1
  119. package/ts_build/test/integration/externalservices/moonpay.test.d.ts.map +1 -1
  120. package/ts_build/test/integration/externalservices/moonpay.test.js +169 -9
  121. package/ts_build/test/integration/externalservices/moonpay.test.js.map +1 -1
  122. package/ts_build/test/integration/externalservices/oneInch.test.d.ts.map +1 -1
  123. package/ts_build/test/integration/externalservices/oneInch.test.js +26 -1
  124. package/ts_build/test/integration/externalservices/oneInch.test.js.map +1 -1
  125. package/ts_build/test/integration/externalservices/ramp.test.d.ts.map +1 -1
  126. package/ts_build/test/integration/externalservices/ramp.test.js +115 -4
  127. package/ts_build/test/integration/externalservices/ramp.test.js.map +1 -1
  128. package/ts_build/test/integration/externalservices/sardine.test.d.ts.map +1 -1
  129. package/ts_build/test/integration/externalservices/sardine.test.js +94 -5
  130. package/ts_build/test/integration/externalservices/sardine.test.js.map +1 -1
  131. package/ts_build/test/integration/externalservices/simplex.test.d.ts.map +1 -1
  132. package/ts_build/test/integration/externalservices/simplex.test.js +89 -5
  133. package/ts_build/test/integration/externalservices/simplex.test.js.map +1 -1
  134. package/ts_build/test/integration/externalservices/thorswap.test.d.ts.map +1 -1
  135. package/ts_build/test/integration/externalservices/thorswap.test.js +76 -5
  136. package/ts_build/test/integration/externalservices/thorswap.test.js.map +1 -1
  137. package/ts_build/test/integration/externalservices/transak.test.d.ts.map +1 -1
  138. package/ts_build/test/integration/externalservices/transak.test.js +93 -6
  139. package/ts_build/test/integration/externalservices/transak.test.js.map +1 -1
  140. package/ts_build/test/integration/helpers.js +1 -1
  141. package/ts_build/test/integration/helpers.js.map +1 -1
  142. package/ts_build/test/integration/server.test.js +225 -124
  143. package/ts_build/test/integration/server.test.js.map +1 -1
  144. package/ts_build/test/integration/walletReads.test.d.ts +2 -0
  145. package/ts_build/test/integration/walletReads.test.d.ts.map +1 -0
  146. package/ts_build/test/integration/walletReads.test.js +436 -0
  147. package/ts_build/test/integration/walletReads.test.js.map +1 -0
  148. package/src/externalservices/wyre.ts +0 -131
  149. package/test/integration/externalservices/wyre.test.ts +0 -270
  150. package/ts_build/src/externalservices/wyre.d.ts +0 -7
  151. package/ts_build/src/externalservices/wyre.d.ts.map +0 -1
  152. package/ts_build/src/externalservices/wyre.js +0 -144
  153. package/ts_build/src/externalservices/wyre.js.map +0 -1
  154. package/ts_build/test/integration/externalservices/wyre.test.d.ts +0 -2
  155. package/ts_build/test/integration/externalservices/wyre.test.d.ts.map +0 -1
  156. package/ts_build/test/integration/externalservices/wyre.test.js +0 -281
  157. package/ts_build/test/integration/externalservices/wyre.test.js.map +0 -1
@@ -61,7 +61,6 @@ const sardine_1 = require("../externalservices/sardine");
61
61
  const simplex_1 = require("../externalservices/simplex");
62
62
  const thorswap_1 = require("../externalservices/thorswap");
63
63
  const transak_1 = require("../externalservices/transak");
64
- const wyre_1 = require("../externalservices/wyre");
65
64
  const serverMessages_1 = require("../serverMessages");
66
65
  const bchaddresstranslator_1 = require("./bchaddresstranslator");
67
66
  const blockchainexplorer_1 = require("./blockchainexplorer");
@@ -145,7 +144,6 @@ class WalletService {
145
144
  simplex: new simplex_1.SimplexService(),
146
145
  thorswap: new thorswap_1.ThorswapService(),
147
146
  transak: new transak_1.TransakService(),
148
- wyre: new wyre_1.WyreService(),
149
147
  coinGecko: new coingecko_1.CoinGeckoService(this.storage),
150
148
  };
151
149
  }
@@ -643,25 +641,25 @@ class WalletService {
643
641
  getStatus(opts, cb) {
644
642
  opts = opts || {};
645
643
  const status = {};
646
- async.parallel([
647
- next => {
648
- this.getWallet({}, (err, wallet) => {
649
- if (err)
650
- return next(err);
651
- if (this._upgradeNeeded(exports.UPGRADES.SOL_bwc_$lt_10_10_12, wallet)) {
652
- return next(errordefinitions_1.Errors.UPGRADE_NEEDED);
653
- }
644
+ this.getWallet({}, (err, fetchedWallet) => {
645
+ if (err)
646
+ return cb(err);
647
+ const copyOfWallet = () => model_1.Wallet.fromObj(fetchedWallet.toObject());
648
+ const omit = (obj, keys) => Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
649
+ async.parallel([
650
+ next => {
651
+ let wallet = copyOfWallet();
654
652
  const walletExtendedKeys = ['publicKeyRing', 'pubKey', 'addressManager'];
655
653
  const copayerExtendedKeys = ['xPubKey', 'requestPubKey', 'signature', 'addressManager', 'customData'];
656
654
  wallet.copayers = (wallet.copayers || []).map(copayer => {
657
655
  if (copayer.id == this.copayerId)
658
656
  return copayer;
659
- return _.omit(copayer, 'customData');
657
+ return omit(copayer, ['customData']);
660
658
  });
661
659
  if (!opts.includeExtendedInfo) {
662
- wallet = _.omit(wallet, walletExtendedKeys);
660
+ wallet = omit(wallet, walletExtendedKeys);
663
661
  wallet.copayers = (wallet.copayers || []).map(copayer => {
664
- return _.omit(copayer, copayerExtendedKeys);
662
+ return omit(copayer, copayerExtendedKeys);
665
663
  });
666
664
  }
667
665
  status.wallet = wallet;
@@ -672,43 +670,42 @@ class WalletService {
672
670
  status.serverMessage = (0, deprecated_serverMessages_1.serverMessages)(wallet, this.appName, this.appVersion);
673
671
  }
674
672
  next();
675
- });
676
- },
677
- next => {
678
- opts.wallet = status.wallet;
679
- this.getBalance(opts, (err, balance) => {
680
- if (opts.includeExtendedInfo) {
681
- if (err && err.code != 'WALLET_NEED_SCAN') {
673
+ },
674
+ next => {
675
+ this.getBalance({ ...opts, wallet: copyOfWallet() }, (err, balance) => {
676
+ if (opts.includeExtendedInfo) {
677
+ if (err && err.code != 'WALLET_NEED_SCAN') {
678
+ return next(err);
679
+ }
680
+ }
681
+ else if (err) {
682
682
  return next(err);
683
683
  }
684
- }
685
- else if (err) {
686
- return next(err);
687
- }
688
- status.balance = balance;
689
- next();
690
- });
691
- },
692
- next => {
693
- this.getPendingTxs(opts, (err, pendingTxps) => {
694
- if (err)
695
- return next(err);
696
- status.pendingTxps = pendingTxps;
697
- next();
698
- });
699
- },
700
- next => {
701
- this.getPreferences({}, (err, preferences) => {
702
- if (err)
703
- return next(err);
704
- status.preferences = preferences;
705
- next();
706
- });
707
- }
708
- ], err => {
709
- if (err)
710
- return cb(err);
711
- return cb(null, status);
684
+ status.balance = balance;
685
+ next();
686
+ });
687
+ },
688
+ next => {
689
+ this.getPendingTxs({ ...opts, wallet: copyOfWallet() }, (err, pendingTxps) => {
690
+ if (err)
691
+ return next(err);
692
+ status.pendingTxps = pendingTxps;
693
+ next();
694
+ });
695
+ },
696
+ next => {
697
+ this.getPreferences({}, (err, preferences) => {
698
+ if (err)
699
+ return next(err);
700
+ status.preferences = preferences;
701
+ next();
702
+ });
703
+ }
704
+ ], err => {
705
+ if (err)
706
+ return cb(err);
707
+ return cb(null, status);
708
+ });
712
709
  });
713
710
  }
714
711
  _verifySignature(text, signature, pubkey) {
@@ -1138,10 +1135,11 @@ class WalletService {
1138
1135
  _canCreateAddress(ignoreMaxGap, cb) {
1139
1136
  if (ignoreMaxGap)
1140
1137
  return cb(null, true);
1141
- this.storage.fetchAddresses(this.walletId, (err, addresses) => {
1138
+ const newest = { noChange: true, reverse: true, limit: Defaults.MAX_MAIN_ADDRESS_GAP };
1139
+ this.storage.fetchAddressesPage(this.walletId, newest, (err, addresses) => {
1142
1140
  if (err)
1143
1141
  return cb(err);
1144
- const latestAddresses = addresses.filter(x => !x.isChange).slice(-Defaults.MAX_MAIN_ADDRESS_GAP);
1142
+ const latestAddresses = addresses.reverse();
1145
1143
  if (latestAddresses.length < Defaults.MAX_MAIN_ADDRESS_GAP ||
1146
1144
  latestAddresses.some(a => a.hasActivity))
1147
1145
  return cb(null, true);
@@ -1214,7 +1212,7 @@ class WalletService {
1214
1212
  }, true);
1215
1213
  };
1216
1214
  const getFirstAddress = (wallet, cb) => {
1217
- this.storage.fetchAddresses(this.walletId, (err, addresses) => {
1215
+ this.storage.fetchAddressesPage(this.walletId, { limit: 1 }, (err, addresses) => {
1218
1216
  if (err)
1219
1217
  return cb(err);
1220
1218
  if (addresses?.length) {
@@ -1259,21 +1257,10 @@ class WalletService {
1259
1257
  }
1260
1258
  getAddresses(opts, cb) {
1261
1259
  opts = opts || {};
1262
- this.storage.fetchAddresses(this.walletId, (err, addresses) => {
1260
+ const { noChange, addresses: only, reverse, skip, limit } = opts;
1261
+ this.storage.fetchAddressesPage(this.walletId, { noChange, addresses: only, reverse, skip, limit }, (err, addresses) => {
1263
1262
  if (err)
1264
1263
  return cb(err);
1265
- if (opts.noChange) {
1266
- addresses = addresses.filter(a => !a.isChange);
1267
- }
1268
- if (opts.addresses) {
1269
- addresses = addresses.filter(a => opts.addresses.includes(a.address));
1270
- }
1271
- if (opts.reverse)
1272
- addresses.reverse();
1273
- if (opts.skip > 0)
1274
- addresses = addresses.slice(opts.skip);
1275
- if (opts.limit > 0)
1276
- addresses = addresses.slice(0, opts.limit);
1277
1264
  this.getWallet({}, (err, wallet) => {
1278
1265
  if (err)
1279
1266
  return cb(err);
@@ -1329,7 +1316,7 @@ class WalletService {
1329
1316
  let allAddresses, allUtxos, utxoIndex, bc, wallet, blockchainHeight;
1330
1317
  async.series([
1331
1318
  next => {
1332
- this.getWallet({}, (err, w) => {
1319
+ const useWallet = (err, w) => {
1333
1320
  if (err)
1334
1321
  return next(err);
1335
1322
  wallet = w;
@@ -1339,7 +1326,10 @@ class WalletService {
1339
1326
  if (!bc)
1340
1327
  return cb(new Error('Could not get blockchain explorer instance'));
1341
1328
  return next();
1342
- });
1329
+ };
1330
+ if (opts.wallet)
1331
+ return useWallet(null, opts.wallet);
1332
+ this.getWallet({}, useWallet);
1343
1333
  },
1344
1334
  next => {
1345
1335
  if (Array.isArray(opts.addresses)) {
@@ -1422,7 +1412,7 @@ class WalletService {
1422
1412
  },
1423
1413
  next => {
1424
1414
  utxoIndex = _.keyBy(allUtxos, utxoKey);
1425
- this.getPendingTxs({ numberFormat: opts.numberFormat }, (err, txps) => {
1415
+ this.getPendingTxs({ numberFormat: opts.numberFormat, wallet }, (err, txps) => {
1426
1416
  if (err)
1427
1417
  return next(err);
1428
1418
  const lockedInputs = txps.flatMap(t => t.inputs).map(utxoKey);
@@ -1456,7 +1446,7 @@ class WalletService {
1456
1446
  });
1457
1447
  logger_1.default.debug(`Got ${allUtxos.length} usable UTXOs`);
1458
1448
  return next();
1459
- });
1449
+ }, wallet);
1460
1450
  },
1461
1451
  next => {
1462
1452
  const addressToPath = _.keyBy(allAddresses, 'address');
@@ -1468,6 +1458,7 @@ class WalletService {
1468
1458
  }
1469
1459
  utxo.path = addressToPath[utxo.address].path;
1470
1460
  utxo.publicKeys = addressToPath[utxo.address].publicKeys;
1461
+ utxo.isChange = addressToPath[utxo.address].isChange;
1471
1462
  }
1472
1463
  return next();
1473
1464
  }
@@ -1817,12 +1808,42 @@ class WalletService {
1817
1808
  return null;
1818
1809
  }
1819
1810
  _validateAndSanitizeTxOpts(wallet, opts, cb) {
1811
+ const gasFeeFields = ['gasPrice', 'maxGasFee', 'priorityGasFee'];
1812
+ const hasGasFeeOverride = gasFeeFields.some(key => opts[key] != null);
1813
+ if (hasGasFeeOverride) {
1814
+ if (!Constants.EVM_CHAINS[wallet.chain.toUpperCase()]) {
1815
+ return cb(new clienterror_1.ClientError('Gas fee overrides are only supported for EVM chains'));
1816
+ }
1817
+ for (const key of gasFeeFields) {
1818
+ if (opts[key] != null && (!Number.isSafeInteger(opts[key]) || opts[key] <= 0)) {
1819
+ return cb(new clienterror_1.ClientError(`${key} must be a positive safe integer in wei`));
1820
+ }
1821
+ }
1822
+ if (opts.gasPrice != null && Number(opts.txType || 0) !== 0) {
1823
+ return cb(new clienterror_1.ClientError('gasPrice requires a type 0 transaction'));
1824
+ }
1825
+ if ((opts.maxGasFee != null || opts.priorityGasFee != null) && Number(opts.txType) !== 2) {
1826
+ return cb(new clienterror_1.ClientError('maxGasFee and priorityGasFee require a type 2 transaction'));
1827
+ }
1828
+ if ((opts.maxGasFee != null) !== (opts.priorityGasFee != null)) {
1829
+ return cb(new clienterror_1.ClientError('maxGasFee and priorityGasFee must be supplied together'));
1830
+ }
1831
+ if (opts.priorityGasFee > opts.maxGasFee) {
1832
+ return cb(new clienterror_1.ClientError('priorityGasFee must not exceed maxGasFee'));
1833
+ }
1834
+ if (opts.feePerKb != null || opts.fee != null) {
1835
+ return cb(new clienterror_1.ClientError('Gas fee overrides cannot be combined with feePerKb or fee'));
1836
+ }
1837
+ if (opts.sendMax) {
1838
+ return cb(new clienterror_1.ClientError('Gas fee overrides are not supported with sendMax'));
1839
+ }
1840
+ }
1820
1841
  async.series([
1821
1842
  next => {
1822
1843
  const feeArgs = boolToNum(!!opts.feeLevel) + boolToNum(Utils.isNumber(opts.feePerKb)) + boolToNum(Utils.isNumber(opts.fee));
1823
1844
  if (feeArgs > 1)
1824
1845
  return next(new clienterror_1.ClientError('Only one of feeLevel/feePerKb/fee can be specified'));
1825
- if (feeArgs == 0) {
1846
+ if (feeArgs == 0 && !hasGasFeeOverride) {
1826
1847
  opts.feeLevel = 'normal';
1827
1848
  }
1828
1849
  const feeLevels = Defaults.FEE_LEVELS[wallet.chain];
@@ -1830,6 +1851,9 @@ class WalletService {
1830
1851
  if (!feeLevels.some(lvl => lvl.name === opts.feeLevel))
1831
1852
  return next(new clienterror_1.ClientError('Invalid fee level. Valid values are ' + feeLevels.map(lvl => lvl.name).join(', ')));
1832
1853
  }
1854
+ if (hasGasFeeOverride) {
1855
+ delete opts.feeLevel;
1856
+ }
1833
1857
  const error = index_1.ChainService.checkUtxos(wallet.chain, opts);
1834
1858
  if (error) {
1835
1859
  return next(new clienterror_1.ClientError('fee can only be set when inputs are specified'));
@@ -2467,39 +2491,47 @@ class WalletService {
2467
2491
  });
2468
2492
  }
2469
2493
  getTx(opts, cb) {
2470
- this.storage.fetchTx(this.walletId, opts.txProposalId, (err, txp) => {
2494
+ this.storage.fetchWallet(this.walletId, (err, wallet) => {
2471
2495
  if (err)
2472
2496
  return cb(err);
2473
- if (!txp)
2474
- return cb(errordefinitions_1.Errors.TX_NOT_FOUND);
2475
- if (!txp.txid)
2476
- return cb(null, txp);
2477
- this.storage.fetchTxNote(this.walletId, txp.txid, (err, note) => {
2478
- if (err) {
2479
- this.logw(`Error fetching tx note for ${txp.txid}:`, err);
2480
- }
2481
- txp.note = note;
2482
- return cb(null, txp);
2483
- });
2497
+ this.storage.fetchTx(this.walletId, opts.txProposalId, (err, txp) => {
2498
+ if (err)
2499
+ return cb(err);
2500
+ if (!txp)
2501
+ return cb(errordefinitions_1.Errors.TX_NOT_FOUND);
2502
+ if (!txp.txid)
2503
+ return cb(null, txp);
2504
+ this.storage.fetchTxNote(this.walletId, txp.txid, (err, note) => {
2505
+ if (err) {
2506
+ this.logw(`Error fetching tx note for ${txp.txid}:`, err);
2507
+ }
2508
+ txp.note = note;
2509
+ return cb(null, txp);
2510
+ }, wallet);
2511
+ }, wallet);
2484
2512
  });
2485
2513
  }
2486
2514
  getTxByHash(opts, cb) {
2487
2515
  if (!checkRequired(opts, 'txid', cb))
2488
2516
  return;
2489
- this.storage.fetchTxByHashForWallet(this.walletId, opts.txid, (err, txp) => {
2517
+ this.storage.fetchWallet(this.walletId, (err, wallet) => {
2490
2518
  if (err)
2491
2519
  return cb(err);
2492
- if (!txp)
2493
- return cb(errordefinitions_1.Errors.TX_NOT_FOUND);
2494
- if (!txp.txid)
2495
- return cb(null, txp);
2496
- this.storage.fetchTxNote(this.walletId, txp.txid, (err, note) => {
2497
- if (err) {
2498
- this.logw(`Error fetching tx note for ${txp.txid}:`, err);
2499
- }
2500
- txp.note = note;
2501
- return cb(null, txp);
2502
- });
2520
+ this.storage.fetchTxByHashForWallet(this.walletId, opts.txid, (err, txp) => {
2521
+ if (err)
2522
+ return cb(err);
2523
+ if (!txp)
2524
+ return cb(errordefinitions_1.Errors.TX_NOT_FOUND);
2525
+ if (!txp.txid)
2526
+ return cb(null, txp);
2527
+ this.storage.fetchTxNote(this.walletId, txp.txid, (err, note) => {
2528
+ if (err) {
2529
+ this.logw(`Error fetching tx note for ${txp.txid}:`, err);
2530
+ }
2531
+ txp.note = note;
2532
+ return cb(null, txp);
2533
+ }, wallet);
2534
+ }, wallet);
2503
2535
  });
2504
2536
  }
2505
2537
  editTxNote(opts, cb) {
@@ -2975,7 +3007,7 @@ class WalletService {
2975
3007
  }
2976
3008
  return cb(err, txps);
2977
3009
  });
2978
- });
3010
+ }, opts.wallet);
2979
3011
  }
2980
3012
  }
2981
3013
  getPendingTxsPromise(opts) {
@@ -3757,12 +3789,12 @@ class WalletService {
3757
3789
  this.storage.fetchTxs(this.walletId, {
3758
3790
  minTs,
3759
3791
  maxTs
3760
- }, done);
3792
+ }, done, wallet);
3761
3793
  },
3762
3794
  done => {
3763
3795
  this.storage.fetchTxNotes(this.walletId, {
3764
3796
  minTs
3765
- }, done);
3797
+ }, done, wallet);
3766
3798
  }
3767
3799
  ], (err, res) => {
3768
3800
  return next(err, {