@bsv/wallet-toolbox 1.3.23 → 1.3.25

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 (262) hide show
  1. package/docs/client.md +99 -59
  2. package/docs/storage.md +55 -75
  3. package/docs/wallet.md +99 -59
  4. package/mobile/out/src/Wallet.d.ts +1 -1
  5. package/mobile/out/src/Wallet.d.ts.map +1 -1
  6. package/mobile/out/src/Wallet.js +16 -6
  7. package/mobile/out/src/Wallet.js.map +1 -1
  8. package/mobile/out/src/monitor/Monitor.d.ts.map +1 -1
  9. package/mobile/out/src/monitor/Monitor.js +6 -4
  10. package/mobile/out/src/monitor/Monitor.js.map +1 -1
  11. package/mobile/out/src/monitor/tasks/TaskNewHeader.d.ts +1 -1
  12. package/mobile/out/src/monitor/tasks/TaskNewHeader.d.ts.map +1 -1
  13. package/mobile/out/src/monitor/tasks/TaskServiceCallHistory.d.ts +12 -0
  14. package/mobile/out/src/monitor/tasks/TaskServiceCallHistory.d.ts.map +1 -0
  15. package/mobile/out/src/monitor/tasks/TaskServiceCallHistory.js +23 -0
  16. package/mobile/out/src/monitor/tasks/TaskServiceCallHistory.js.map +1 -0
  17. package/mobile/out/src/sdk/WalletServices.interfaces.d.ts +2 -0
  18. package/mobile/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
  19. package/mobile/out/src/sdk/WalletStorage.interfaces.d.ts +19 -1
  20. package/mobile/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
  21. package/mobile/out/src/services/ServiceCollection.d.ts +38 -0
  22. package/mobile/out/src/services/ServiceCollection.d.ts.map +1 -1
  23. package/mobile/out/src/services/ServiceCollection.js +85 -0
  24. package/mobile/out/src/services/ServiceCollection.js.map +1 -1
  25. package/mobile/out/src/services/Services.d.ts +11 -2
  26. package/mobile/out/src/services/Services.d.ts.map +1 -1
  27. package/mobile/out/src/services/Services.js +159 -68
  28. package/mobile/out/src/services/Services.js.map +1 -1
  29. package/mobile/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.d.ts.map +1 -0
  30. package/mobile/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.js.map +1 -0
  31. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts +1 -1
  32. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts.map +1 -1
  33. package/mobile/out/src/services/chaintracker/chaintracks/index.d.ts +1 -1
  34. package/mobile/out/src/services/chaintracker/chaintracks/index.d.ts.map +1 -1
  35. package/mobile/out/src/services/chaintracker/chaintracks/index.js +1 -1
  36. package/mobile/out/src/services/chaintracker/chaintracks/index.js.map +1 -1
  37. package/mobile/out/src/services/createDefaultWalletServicesOptions.d.ts +1 -0
  38. package/mobile/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
  39. package/mobile/out/src/services/createDefaultWalletServicesOptions.js +15 -1
  40. package/mobile/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
  41. package/mobile/out/src/services/providers/ARC.d.ts +3 -2
  42. package/mobile/out/src/services/providers/ARC.d.ts.map +1 -1
  43. package/mobile/out/src/services/providers/ARC.js +5 -4
  44. package/mobile/out/src/services/providers/ARC.js.map +1 -1
  45. package/mobile/out/src/signer/methods/internalizeAction.d.ts +2 -2
  46. package/mobile/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
  47. package/mobile/out/src/signer/methods/internalizeAction.js +3 -13
  48. package/mobile/out/src/signer/methods/internalizeAction.js.map +1 -1
  49. package/mobile/out/src/storage/StorageProvider.d.ts +5 -6
  50. package/mobile/out/src/storage/StorageProvider.d.ts.map +1 -1
  51. package/mobile/out/src/storage/StorageProvider.js +75 -101
  52. package/mobile/out/src/storage/StorageProvider.js.map +1 -1
  53. package/mobile/out/src/storage/WalletStorageManager.d.ts +2 -2
  54. package/mobile/out/src/storage/WalletStorageManager.d.ts.map +1 -1
  55. package/mobile/out/src/storage/methods/createAction.d.ts.map +1 -1
  56. package/mobile/out/src/storage/methods/createAction.js +5 -1
  57. package/mobile/out/src/storage/methods/createAction.js.map +1 -1
  58. package/mobile/out/src/storage/methods/generateChange.d.ts +0 -24
  59. package/mobile/out/src/storage/methods/generateChange.d.ts.map +1 -1
  60. package/mobile/out/src/storage/methods/generateChange.js +2 -50
  61. package/mobile/out/src/storage/methods/generateChange.js.map +1 -1
  62. package/mobile/out/src/storage/methods/getBeefForTransaction.js +3 -2
  63. package/mobile/out/src/storage/methods/getBeefForTransaction.js.map +1 -1
  64. package/mobile/out/src/storage/methods/internalizeAction.d.ts +2 -10
  65. package/mobile/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
  66. package/mobile/out/src/storage/methods/internalizeAction.js +17 -1
  67. package/mobile/out/src/storage/methods/internalizeAction.js.map +1 -1
  68. package/mobile/out/src/storage/methods/processAction.d.ts +16 -1
  69. package/mobile/out/src/storage/methods/processAction.d.ts.map +1 -1
  70. package/mobile/out/src/storage/methods/processAction.js +4 -1
  71. package/mobile/out/src/storage/methods/processAction.js.map +1 -1
  72. package/mobile/out/src/storage/methods/utils.d.ts +25 -0
  73. package/mobile/out/src/storage/methods/utils.d.ts.map +1 -0
  74. package/mobile/out/src/storage/methods/utils.js +53 -0
  75. package/mobile/out/src/storage/methods/utils.js.map +1 -0
  76. package/mobile/out/src/storage/remoting/StorageClient.d.ts +2 -2
  77. package/mobile/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
  78. package/mobile/out/src/storage/remoting/StorageClient.js.map +1 -1
  79. package/mobile/out/src/storage/remoting/StorageMobile.d.ts +2 -2
  80. package/mobile/out/src/storage/remoting/StorageMobile.d.ts.map +1 -1
  81. package/mobile/out/src/storage/remoting/StorageMobile.js.map +1 -1
  82. package/mobile/out/src/utility/utilityHelpers.d.ts +1 -1
  83. package/mobile/out/src/utility/utilityHelpers.d.ts.map +1 -1
  84. package/mobile/out/src/utility/utilityHelpers.js +3 -3
  85. package/mobile/out/src/utility/utilityHelpers.js.map +1 -1
  86. package/mobile/package-lock.json +7 -6
  87. package/mobile/package.json +2 -2
  88. package/out/src/Wallet.d.ts +1 -1
  89. package/out/src/Wallet.d.ts.map +1 -1
  90. package/out/src/Wallet.js +16 -6
  91. package/out/src/Wallet.js.map +1 -1
  92. package/out/src/monitor/Monitor.d.ts.map +1 -1
  93. package/out/src/monitor/Monitor.js +6 -4
  94. package/out/src/monitor/Monitor.js.map +1 -1
  95. package/out/src/monitor/tasks/TaskNewHeader.d.ts +1 -1
  96. package/out/src/monitor/tasks/TaskNewHeader.d.ts.map +1 -1
  97. package/out/src/monitor/tasks/TaskServiceCallHistory.d.ts +12 -0
  98. package/out/src/monitor/tasks/TaskServiceCallHistory.d.ts.map +1 -0
  99. package/out/src/monitor/tasks/TaskServiceCallHistory.js +23 -0
  100. package/out/src/monitor/tasks/TaskServiceCallHistory.js.map +1 -0
  101. package/out/src/sdk/WalletServices.interfaces.d.ts +2 -0
  102. package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
  103. package/out/src/sdk/WalletStorage.interfaces.d.ts +19 -1
  104. package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
  105. package/out/src/services/ServiceCollection.d.ts +38 -0
  106. package/out/src/services/ServiceCollection.d.ts.map +1 -1
  107. package/out/src/services/ServiceCollection.js +85 -0
  108. package/out/src/services/ServiceCollection.js.map +1 -1
  109. package/out/src/services/Services.d.ts +11 -2
  110. package/out/src/services/Services.d.ts.map +1 -1
  111. package/out/src/services/Services.js +159 -68
  112. package/out/src/services/Services.js.map +1 -1
  113. package/out/src/services/__tests/ArcGorillaPool.man.test.d.ts +2 -0
  114. package/out/src/services/__tests/ArcGorillaPool.man.test.d.ts.map +1 -0
  115. package/out/src/services/__tests/ArcGorillaPool.man.test.js +93 -0
  116. package/out/src/services/__tests/ArcGorillaPool.man.test.js.map +1 -0
  117. package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.d.ts.map +1 -0
  118. package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.js.map +1 -0
  119. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts +1 -1
  120. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts.map +1 -1
  121. package/out/src/services/chaintracker/chaintracks/index.d.ts +1 -1
  122. package/out/src/services/chaintracker/chaintracks/index.d.ts.map +1 -1
  123. package/out/src/services/chaintracker/chaintracks/index.js +1 -1
  124. package/out/src/services/chaintracker/chaintracks/index.js.map +1 -1
  125. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts +144 -0
  126. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts.map +1 -0
  127. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js +463 -0
  128. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js.map +1 -0
  129. package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.d.ts +20 -0
  130. package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.d.ts.map +1 -0
  131. package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.js +31 -0
  132. package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.js.map +1 -0
  133. package/out/src/services/createDefaultWalletServicesOptions.d.ts +1 -0
  134. package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
  135. package/out/src/services/createDefaultWalletServicesOptions.js +15 -1
  136. package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
  137. package/out/src/services/providers/ARC.d.ts +3 -2
  138. package/out/src/services/providers/ARC.d.ts.map +1 -1
  139. package/out/src/services/providers/ARC.js +5 -4
  140. package/out/src/services/providers/ARC.js.map +1 -1
  141. package/out/src/signer/methods/internalizeAction.d.ts +2 -2
  142. package/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
  143. package/out/src/signer/methods/internalizeAction.js +3 -13
  144. package/out/src/signer/methods/internalizeAction.js.map +1 -1
  145. package/out/src/storage/StorageKnex.d.ts.map +1 -1
  146. package/out/src/storage/StorageKnex.js +50 -2
  147. package/out/src/storage/StorageKnex.js.map +1 -1
  148. package/out/src/storage/StorageProvider.d.ts +5 -6
  149. package/out/src/storage/StorageProvider.d.ts.map +1 -1
  150. package/out/src/storage/StorageProvider.js +75 -101
  151. package/out/src/storage/StorageProvider.js.map +1 -1
  152. package/out/src/storage/WalletStorageManager.d.ts +2 -2
  153. package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
  154. package/out/src/storage/__test/StorageIdb.test.js +1 -0
  155. package/out/src/storage/__test/StorageIdb.test.js.map +1 -1
  156. package/out/src/storage/__test/adminStats.man.test.js +2 -0
  157. package/out/src/storage/__test/adminStats.man.test.js.map +1 -1
  158. package/out/src/storage/methods/createAction.d.ts.map +1 -1
  159. package/out/src/storage/methods/createAction.js +5 -1
  160. package/out/src/storage/methods/createAction.js.map +1 -1
  161. package/out/src/storage/methods/generateChange.d.ts +0 -24
  162. package/out/src/storage/methods/generateChange.d.ts.map +1 -1
  163. package/out/src/storage/methods/generateChange.js +2 -50
  164. package/out/src/storage/methods/generateChange.js.map +1 -1
  165. package/out/src/storage/methods/getBeefForTransaction.js +3 -2
  166. package/out/src/storage/methods/getBeefForTransaction.js.map +1 -1
  167. package/out/src/storage/methods/internalizeAction.d.ts +2 -10
  168. package/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
  169. package/out/src/storage/methods/internalizeAction.js +17 -1
  170. package/out/src/storage/methods/internalizeAction.js.map +1 -1
  171. package/out/src/storage/methods/processAction.d.ts +16 -1
  172. package/out/src/storage/methods/processAction.d.ts.map +1 -1
  173. package/out/src/storage/methods/processAction.js +4 -1
  174. package/out/src/storage/methods/processAction.js.map +1 -1
  175. package/out/src/storage/methods/utils.Buffer.d.ts +21 -0
  176. package/out/src/storage/methods/utils.Buffer.d.ts.map +1 -0
  177. package/out/src/storage/methods/utils.Buffer.js +37 -0
  178. package/out/src/storage/methods/utils.Buffer.js.map +1 -0
  179. package/out/src/storage/methods/utils.d.ts +25 -0
  180. package/out/src/storage/methods/utils.d.ts.map +1 -0
  181. package/out/src/storage/methods/utils.js +53 -0
  182. package/out/src/storage/methods/utils.js.map +1 -0
  183. package/out/src/storage/remoting/StorageClient.d.ts +2 -2
  184. package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
  185. package/out/src/storage/remoting/StorageClient.js.map +1 -1
  186. package/out/src/storage/remoting/StorageMobile.d.ts +2 -2
  187. package/out/src/storage/remoting/StorageMobile.d.ts.map +1 -1
  188. package/out/src/storage/remoting/StorageMobile.js.map +1 -1
  189. package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
  190. package/out/src/storage/schema/KnexMigrations.js +12 -0
  191. package/out/src/storage/schema/KnexMigrations.js.map +1 -1
  192. package/out/src/utility/Format.d.ts +14 -0
  193. package/out/src/utility/Format.d.ts.map +1 -0
  194. package/out/src/utility/Format.js +167 -0
  195. package/out/src/utility/Format.js.map +1 -0
  196. package/out/src/utility/utilityHelpers.d.ts +1 -1
  197. package/out/src/utility/utilityHelpers.d.ts.map +1 -1
  198. package/out/src/utility/utilityHelpers.js +3 -3
  199. package/out/src/utility/utilityHelpers.js.map +1 -1
  200. package/out/test/Wallet/local/localWallet.man.test.js +12 -16
  201. package/out/test/Wallet/local/localWallet.man.test.js.map +1 -1
  202. package/out/test/Wallet/support/operations.man.test.js +105 -135
  203. package/out/test/Wallet/support/operations.man.test.js.map +1 -1
  204. package/out/test/Wallet/support/reqErrorReview.2025.05.06.man.test.d.ts +2 -0
  205. package/out/test/Wallet/support/reqErrorReview.2025.05.06.man.test.d.ts.map +1 -0
  206. package/out/test/Wallet/support/reqErrorReview.2025.05.06.man.test.js +385 -0
  207. package/out/test/Wallet/support/reqErrorReview.2025.05.06.man.test.js.map +1 -0
  208. package/out/test/storage/KnexMigrations.test.js +1 -1
  209. package/out/test/storage/KnexMigrations.test.js.map +1 -1
  210. package/out/test/utils/TestUtilsWalletStorage.d.ts +5 -0
  211. package/out/test/utils/TestUtilsWalletStorage.d.ts.map +1 -1
  212. package/out/test/utils/TestUtilsWalletStorage.js +20 -0
  213. package/out/test/utils/TestUtilsWalletStorage.js.map +1 -1
  214. package/out/tsconfig.all.tsbuildinfo +1 -1
  215. package/package.json +2 -2
  216. package/src/Wallet.ts +25 -10
  217. package/src/monitor/Monitor.ts +6 -4
  218. package/src/monitor/tasks/TaskNewHeader.ts +1 -1
  219. package/src/monitor/tasks/TaskServiceCallHistory.ts +26 -0
  220. package/src/sdk/WalletServices.interfaces.ts +2 -0
  221. package/src/sdk/WalletStorage.interfaces.ts +21 -1
  222. package/src/services/ServiceCollection.ts +121 -0
  223. package/src/services/Services.ts +157 -71
  224. package/src/services/__tests/ArcGorillaPool.man.test.ts +108 -0
  225. package/src/services/chaintracker/chaintracks/ChaintracksServiceClient.ts +1 -1
  226. package/src/services/chaintracker/chaintracks/index.ts +1 -1
  227. package/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.ts +490 -0
  228. package/src/services/chaintracker/chaintracks/util/dirtyHashes.ts +29 -0
  229. package/src/services/createDefaultWalletServicesOptions.ts +16 -1
  230. package/src/services/providers/ARC.ts +8 -6
  231. package/src/signer/methods/internalizeAction.ts +6 -16
  232. package/src/storage/StorageKnex.ts +25 -1
  233. package/src/storage/StorageProvider.ts +44 -32
  234. package/src/storage/WalletStorageManager.ts +1 -1
  235. package/src/storage/__test/StorageIdb.test.ts +1 -0
  236. package/src/storage/__test/adminStats.man.test.ts +2 -0
  237. package/src/storage/methods/createAction.ts +5 -3
  238. package/src/storage/methods/generateChange.ts +1 -54
  239. package/src/storage/methods/getBeefForTransaction.ts +10 -2
  240. package/src/storage/methods/internalizeAction.ts +23 -14
  241. package/src/storage/methods/processAction.ts +5 -2
  242. package/src/storage/methods/utils.Buffer.ts +33 -0
  243. package/src/storage/methods/utils.ts +56 -0
  244. package/src/storage/remoting/StorageClient.ts +2 -2
  245. package/src/storage/remoting/StorageMobile.ts +2 -2
  246. package/src/storage/schema/KnexMigrations.ts +13 -0
  247. package/src/utility/Format.ts +133 -0
  248. package/src/utility/utilityHelpers.ts +2 -2
  249. package/test/Wallet/local/localWallet.man.test.ts +13 -16
  250. package/test/Wallet/support/operations.man.test.ts +118 -123
  251. package/test/Wallet/support/reqErrorReview.2025.05.06.man.test.ts +359 -0
  252. package/test/storage/KnexMigrations.test.ts +1 -1
  253. package/test/utils/TestUtilsWalletStorage.ts +23 -0
  254. package/mobile/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts.map +0 -1
  255. package/mobile/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js.map +0 -1
  256. package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts.map +0 -1
  257. package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js.map +0 -1
  258. /package/mobile/out/src/services/chaintracker/chaintracks/{BlockHeaderApi.d.ts → Api/BlockHeaderApi.d.ts} +0 -0
  259. /package/mobile/out/src/services/chaintracker/chaintracks/{BlockHeaderApi.js → Api/BlockHeaderApi.js} +0 -0
  260. /package/out/src/services/chaintracker/chaintracks/{BlockHeaderApi.d.ts → Api/BlockHeaderApi.d.ts} +0 -0
  261. /package/out/src/services/chaintracker/chaintracks/{BlockHeaderApi.js → Api/BlockHeaderApi.js} +0 -0
  262. /package/src/services/chaintracker/chaintracks/{BlockHeaderApi.ts → Api/BlockHeaderApi.ts} +0 -0
@@ -6,7 +6,7 @@ import { createOneSatTestOutput, createSetup, LocalWalletTestOptions } from '../
6
6
  const chain: sdk.Chain = 'test'
7
7
 
8
8
  const options: LocalWalletTestOptions = {
9
- setActiveClient: true,
9
+ setActiveClient: false,
10
10
  useMySQLConnectionForClient: true,
11
11
  useTestIdentityKey: true,
12
12
  useIdentityKey2: false
@@ -26,6 +26,18 @@ describe('localWallet tests', () => {
26
26
  await setup.wallet.destroy()
27
27
  })
28
28
 
29
+ test('0a monitor runOnce call history', async () => {
30
+ const setup = await createSetup(chain, options)
31
+ const key = await setup.wallet.getPublicKey({ identityKey: true })
32
+ expect(key.publicKey.toString()).toBe(setup.identityKey)
33
+ await setup.services.getRawTx('6dd8e416dfaf14c04899ccad2bf76a67c1d5598fece25cf4dcb7a076012b7d8d')
34
+ await setup.services.getRawTx('ac9cced61e2491be55061ce6577e0c59b909922ba92d5cc1cd754b10d721ab0e')
35
+ await setup.services.getRawTx('0000e416dfaf14c04899ccad2bf76a67c1d5598fece25cf4dcb7a076012b7d8d')
36
+ await setup.services.getRawTx('0000ced61e2491be55061ce6577e0c59b909922ba92d5cc1cd754b10d721ab0e')
37
+ await setup.monitor.runOnce()
38
+ await setup.wallet.destroy()
39
+ })
40
+
29
41
  test('2 create 1 sat delayed', async () => {
30
42
  const setup = await createSetup(chain, options)
31
43
  const car = await createOneSatTestOutput(setup, {}, 1)
@@ -58,21 +70,6 @@ describe('localWallet tests', () => {
58
70
  await setup.wallet.destroy()
59
71
  })
60
72
 
61
- test('4 review change utxos', async () => {
62
- const setup = await createSetup(chain, options)
63
- const lor = await setup.wallet.listOutputs({
64
- basket: specOpInvalidChange
65
- })
66
- if (lor.totalOutputs > 0) {
67
- debugger
68
- const lor = await setup.wallet.listOutputs({
69
- basket: specOpInvalidChange,
70
- tags: ['release']
71
- })
72
- }
73
- await setup.wallet.destroy()
74
- })
75
-
76
73
  test('5 review synchunk', async () => {
77
74
  const setup = await createSetup(chain, options)
78
75
  const identityKey = setup.identityKey
@@ -1,37 +1,17 @@
1
- import { Transaction, WalletOutput } from '@bsv/sdk'
2
- import {
3
- sdk,
4
- Services,
5
- Setup,
6
- StorageKnex,
7
- TableOutput,
8
- TableTransaction,
9
- TableUser,
10
- verifyOne,
11
- verifyOneOrNone
12
- } from '../../../src'
13
- import { _tu, TuEnv } from '../../utils/TestUtilsWalletStorage'
1
+ import { Beef, MerklePath, WalletOutput } from '@bsv/sdk'
2
+ import { sdk, TableOutput, TableUser, verifyOne, verifyOneOrNone } from '../../../src'
3
+ import { _tu, logger } from '../../utils/TestUtilsWalletStorage'
14
4
  import { specOpInvalidChange, ValidListOutputsArgs } from '../../../src/sdk'
15
5
  import { LocalWalletTestOptions } from '../../utils/localWalletMethods'
16
-
17
- import * as dotenv from 'dotenv'
18
- dotenv.config()
19
-
20
- const chain: sdk.Chain = 'main'
21
-
22
- const options: LocalWalletTestOptions = {
23
- setActiveClient: true,
24
- useMySQLConnectionForClient: true,
25
- useTestIdentityKey: false,
26
- useIdentityKey2: false
27
- }
6
+ import { Format } from '../../../src/utility/Format'
7
+ import { asString } from '../../../src/utility/utilityHelpers.noBuffer'
28
8
 
29
9
  describe('operations.man tests', () => {
30
10
  jest.setTimeout(99999999)
31
11
 
32
12
  test('0 review and release all production invalid change utxos', async () => {
33
- const { env, storage } = await createMainReviewSetup()
34
- const users = await storage.findUsers({ partial: {} })
13
+ const { env, storage } = await _tu.createMainReviewSetup()
14
+ const users = await storage.findUsers({ partial: { } })
35
15
  const withInvalid: Record<number, { user: TableUser; outputs: WalletOutput[]; total: number }> = {}
36
16
  const vargs: ValidListOutputsArgs = {
37
17
  basket: specOpInvalidChange,
@@ -67,51 +47,16 @@ describe('operations.man tests', () => {
67
47
  await storage.destroy()
68
48
  })
69
49
 
70
- test.skip('0a review all spendable outputs for userId', async () => {
71
- const { env, storage } = await createMainReviewSetup()
72
- const users = await storage.findUsers({ partial: {} })
73
- const withInvalid: Record<number, { user: TableUser; outputs: WalletOutput[]; total: number }> = {}
74
- const vargs: ValidListOutputsArgs = {
75
- basket: specOpInvalidChange,
76
- tags: ['release', 'all'],
77
- tagQueryMode: 'all',
78
- includeLockingScripts: false,
79
- includeTransactions: false,
80
- includeCustomInstructions: false,
81
- includeTags: false,
82
- includeLabels: false,
83
- limit: 0,
84
- offset: 0,
85
- seekPermission: false,
86
- knownTxids: []
87
- }
88
- let log = ''
89
- for (const user of users) {
90
- const { userId } = user
91
- const auth = { userId, identityKey: '' }
92
- let r = await storage.listOutputs(auth, vargs)
93
- if (r.totalOutputs > 0) {
94
- const total: number = r.outputs.reduce((s, o) => (s += o.satoshis), 0)
95
- log += `userId ${userId}: ${r.totalOutputs} unspendable utxos, total ${total}, ${user.identityKey}\n`
96
- for (const o of r.outputs) {
97
- log += ` ${o.outpoint} ${o.satoshis}\n`
98
- }
99
- withInvalid[userId] = { user, outputs: r.outputs, total }
100
- }
101
- }
102
- console.log(log || 'Found zero invalid change outputs.')
103
- await storage.destroy()
104
- })
105
-
106
50
  test('1 review and unfail false doubleSpends', async () => {
107
- const { env, storage, services } = await createMainReviewSetup()
108
- let offset = 2400
51
+ const { env, storage, services } = await _tu.createMainReviewSetup()
52
+ let offset = 0
109
53
  const limit = 100
110
54
  let allUnfails: number[] = []
111
55
  for (;;) {
112
56
  let log = ''
113
57
  const unfails: number[] = []
114
- const reqs = await storage.findProvenTxReqs({ partial: { status: 'doubleSpend' }, paged: { limit, offset } })
58
+ debugger;
59
+ const reqs = await storage.findProvenTxReqs({ partial: { status: 'doubleSpend' }, paged: { limit, offset }, orderDescending: true })
115
60
  for (const req of reqs) {
116
61
  const gsr = await services.getStatusForTxids([req.txid])
117
62
  if (gsr.results[0].status !== 'unknown') {
@@ -131,14 +76,14 @@ describe('operations.man tests', () => {
131
76
  })
132
77
 
133
78
  test('2 review and unfail false invalids', async () => {
134
- const { env, storage, services } = await createMainReviewSetup()
135
- let offset = 700
79
+ const { env, storage, services } = await _tu.createMainReviewSetup()
80
+ let offset = 0
136
81
  const limit = 100
137
82
  let allUnfails: number[] = []
138
83
  for (;;) {
139
84
  let log = ''
140
85
  const unfails: number[] = []
141
- const reqs = await storage.findProvenTxReqs({ partial: { status: 'invalid' }, paged: { limit, offset } })
86
+ const reqs = await storage.findProvenTxReqs({ partial: { status: 'invalid' }, paged: { limit, offset }, orderDescending: true })
142
87
  for (const req of reqs) {
143
88
  if (!req.txid || !req.rawTx) continue
144
89
  const gsr = await services.getStatusForTxids([req.txid])
@@ -158,9 +103,56 @@ describe('operations.man tests', () => {
158
103
  await storage.destroy()
159
104
  })
160
105
 
161
- test.skip('8 re-internalize failed WUI exports', async () => {
162
- const { env, storage, services } = await createMainReviewSetup()
106
+ test.skip('3 review proven_txs', async () => {
107
+ const { env, storage, services } = await _tu.createMainReviewSetup()
108
+ let offset = 0
109
+ const limit = 100
110
+ let allUnfails: number[] = []
111
+ //for (const provenTxId of [3064, 3065, 11268, 11269, 11270, 11271] ) {
112
+ for (let height = 895000; height < 895026; height++) {
113
+ let log = ''
114
+ const unfails: number[] = []
115
+ const txs = await storage.findProvenTxs({ partial: { height }, paged: { limit, offset } })
116
+ for (const tx of txs) {
117
+ const gmpr = await services.getMerklePath(tx.txid)
118
+ if (gmpr && gmpr.header && gmpr.merklePath) {
119
+ const mp = gmpr.merklePath
120
+ const h = gmpr.header
121
+ const mr = mp.computeRoot(tx.txid)
122
+ const index = mp.path[0].find(leaf => leaf.hash === tx.txid)?.offset!
123
+
124
+ const mp2 = MerklePath.fromBinary(tx.merklePath)
125
+ const mr2 = mp2.computeRoot()
126
+
127
+ if (h.height !== mp.blockHeight || h.merkleRoot !== mr) {
128
+ console.log(`Merkle root mismatch for ${tx.txid} ${h.merkleRoot} != ${mr}`)
129
+ } else {
130
+ if (tx.merkleRoot !== mr || tx.height !== mp.blockHeight || tx.blockHash !== h.hash || tx.index !== index || mp2.blockHeight !== tx.height || mr2 !== tx.merkleRoot || asString(tx.merklePath) !== asString(mp.toBinary())) {
131
+ debugger;
132
+ await storage.updateProvenTx(tx.provenTxId, {
133
+ merklePath: mp.toBinary(),
134
+ merkleRoot: mr,
135
+ height: mp.blockHeight,
136
+ blockHash: h.hash,
137
+ index
138
+ })
139
+ log += `updated ${tx.provenTxId}\n`
140
+ }
141
+ }
142
+ }
143
+ }
144
+ //console.log(`${offset} ${log}`)
145
+ //if (txs.length < limit) break
146
+ //offset += txs.length
147
+ }
148
+ await storage.destroy()
149
+ })
150
+
151
+ test.skip('10 re-internalize failed WUI exports', async () => {
152
+ const { env, storage, services } = await _tu.createMainReviewSetup()
153
+ // From this user
163
154
  const user0 = verifyOne(await storage.findUsers({ partial: { userId: 2 } }))
155
+ // To these users
164
156
  const users = await storage.findUsers({ partial: { userId: 141 } }) // 111, 141
165
157
  for (const user of users) {
166
158
  const { userId, identityKey } = user
@@ -204,19 +196,21 @@ describe('operations.man tests', () => {
204
196
  */
205
197
  await storage.destroy()
206
198
  })
207
- test('9 review recent transaction change use', async () => {
208
- const { env, storage, services } = await createMainReviewSetup()
199
+
200
+ test.skip('11 review recent transaction change use for specific userId', async () => {
201
+ const userId = 311
202
+ const { env, storage, services } = await _tu.createMainReviewSetup()
209
203
  const countTxs = await storage.countTransactions({
210
- partial: { userId: 311 },
204
+ partial: { userId },
211
205
  status: ['completed', 'unproven', 'failed']
212
206
  })
213
207
  const txs = await storage.findTransactions({
214
- partial: { userId: 311 },
208
+ partial: { userId },
215
209
  status: ['unproven', 'completed', 'failed'],
216
210
  paged: { limit: 100, offset: Math.max(0, countTxs - 100) }
217
211
  })
218
212
  for (const tx of txs) {
219
- const ls = await toLogString(tx, storage)
213
+ const ls = await Format.toLogStringTableTransaction(tx, storage)
220
214
  console.log(ls)
221
215
  }
222
216
  const countReqs = await storage.countProvenTxReqs({ partial: {}, status: ['completed', 'unmined'] })
@@ -227,56 +221,57 @@ describe('operations.man tests', () => {
227
221
  })
228
222
  await storage.destroy()
229
223
  })
230
- })
231
224
 
232
- async function createMainReviewSetup(): Promise<{
233
- env: TuEnv
234
- storage: StorageKnex
235
- services: Services
236
- }> {
237
- const env = _tu.getEnv('main')
238
- const knex = Setup.createMySQLKnex(process.env.MAIN_CLOUD_MYSQL_CONNECTION!)
239
- const storage = new StorageKnex({
240
- chain: env.chain,
241
- knex: knex,
242
- commissionSatoshis: 0,
243
- commissionPubKeyHex: undefined,
244
- feeModel: { model: 'sat/kb', value: 1 }
225
+ test.skip('12 check storage merged BEEF', async () => {
226
+ const userId = 127
227
+ const txid = 'efba8b92a22c3308f432b292b5ec7efb3869ecd50c62cb3ddfb83871bc7be194'
228
+ const vout = 1
229
+ const { env, storage, services } = await _tu.createMainReviewSetup()
230
+
231
+ const ptx = verifyOne(await storage.findProvenTxs({ partial: { txid } }))
232
+
233
+ const mp = MerklePath.fromBinary(ptx.merklePath)
234
+ expect(mp.blockHeight).toBe(ptx.height)
235
+
236
+ const txids = ['24b19a5179c1f146e825643df4c6dc2ba21674828c20fc2948e105cb1ca91eae']
237
+
238
+ const r = await storage.getReqsAndBeefToShareWithWorld(txids, [])
239
+
240
+ await storage.destroy()
245
241
  })
246
- const servicesOptions = Services.createDefaultOptions(env.chain)
247
- if (env.whatsonchainApiKey) servicesOptions.whatsOnChainApiKey = env.whatsonchainApiKey
248
- const services = new Services(servicesOptions)
249
- storage.setServices(services)
250
- await storage.makeAvailable()
251
- return { env, storage, services }
252
- }
253
242
 
254
- async function toLogString(tx: TableTransaction, storage: StorageKnex): Promise<string> {
255
- const rawTx = await storage.getRawTxOfKnownValidTransaction(tx.txid)
256
- const btx = Transaction.fromBinary(rawTx!)
257
- let log = `tx ${tx.txid} ${tx.status} s:${tx.satoshis} uid:${tx.userId} tid:${tx.transactionId}\n`
258
- for (let i = 0; i < Math.max(btx.inputs.length, btx.outputs.length); i++) {
259
- let ilog: string = ''
260
- let olog: string = ''
261
- if (i < btx.inputs.length) {
262
- const input = btx.inputs[i]
263
- ilog = `${logTxid(input.sourceTXID!)}.${input.sourceOutputIndex}`
243
+ test('13 review use of outputs in all following transactions', async () => {
244
+ const { env, storage, services } = await _tu.createMainReviewSetup()
245
+
246
+ const txids = ['2df7b5059112a42fc40adb54ee36244cee0dd216c35ad6c4b6ef4631c14a0e83'] //, '9fb38fc87c6ff39f5c7321a4c689db535c024498ed20031434485c981dd7a182', '3fb6b02e1d001dded1daee3f59dcd684489b96a35a9dfb5082b4119a31689966', '72ea8d84a4c54dbca292f4a79a5ff08cb9917fc3127c1dcff0628aeba8b40823', '0564a515566bc43c1396becf12bbf2d82d821ae7b6e0ef404eedfa090d4877c2', '3b93e4327a50a7f4a421af9fbdec0206b3b7ba5252bc5a0142d0d64aa34c2e73', 'd4b0c3d820696afad43b43e095f3b8c3df52385bb4aeddff0212e0a472dd8e4e']
247
+ const userId = 111
248
+ const txs = await storage.findTransactions({ partial: { userId }, status: ['completed', 'unproven', 'failed'], orderDescending: true, paged: { limit: 50 } })
249
+ const allTxids = txs.map(tx => tx.txid!)
250
+ debugger;
251
+ const reqs = await storage.findProvenTxReqs({ partial: {}, txids: allTxids })
252
+ const beef = new Beef()
253
+ for (const req of reqs) {
254
+ beef.mergeRawTx(req.rawTx!)
264
255
  }
265
- if (i < btx.outputs.length) {
266
- const output = btx.outputs[i]
267
- olog = `${ar('' + output.satoshis, 9)} ${output.lockingScript.toHex().length / 2}`
256
+
257
+ for (const txid of txids) {
258
+ const o = await storage.findOutputs({ partial: { txid, userId } })
259
+ const tx = await storage.findTransactions({ partial: { txid, userId } })
260
+ if (o && tx) {
261
+ const ltx = await Format.toLogStringTableTransaction(tx[0], storage)
262
+ logger(ltx)
263
+ for (const btx of beef.txs) {
264
+ const tx = btx.tx!
265
+ for (const i of tx.inputs) {
266
+ if (i.sourceTXID === txid && i.sourceOutputIndex === 0) {
267
+ const sltx = Format.toLogStringBeefTxid(beef, btx.txid)
268
+ logger(sltx)
269
+ }
270
+ }
271
+ }
272
+ }
268
273
  }
269
- log += `${ar('' + i, 5)} ${al(ilog, 20)} ${olog}\n`
270
- }
271
- return log
274
+ await storage.destroy()
275
+ })
272
276
 
273
- function logTxid(txid: string): string {
274
- return `${txid.slice(0, 6)}..${txid.slice(-6)}`
275
- }
276
- function al(v: string | number, w: number): string {
277
- return v.toString().padEnd(w)
278
- }
279
- function ar(v: string | number, w: number): string {
280
- return v.toString().padStart(w)
281
- }
282
- }
277
+ })