@originals/sdk 1.2.0 → 1.4.3

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 (401) hide show
  1. package/package.json +4 -1
  2. package/.eslintrc.json +0 -33
  3. package/.turbo/turbo-build.log +0 -1
  4. package/dist/adapters/FeeOracleMock.d.ts +0 -6
  5. package/dist/adapters/FeeOracleMock.js +0 -8
  6. package/dist/adapters/index.d.ts +0 -4
  7. package/dist/adapters/index.js +0 -4
  8. package/dist/adapters/providers/OrdHttpProvider.d.ts +0 -56
  9. package/dist/adapters/providers/OrdHttpProvider.js +0 -110
  10. package/dist/adapters/providers/OrdMockProvider.d.ts +0 -70
  11. package/dist/adapters/providers/OrdMockProvider.js +0 -75
  12. package/dist/adapters/types.d.ts +0 -71
  13. package/dist/adapters/types.js +0 -1
  14. package/dist/bitcoin/BitcoinManager.d.ts +0 -15
  15. package/dist/bitcoin/BitcoinManager.js +0 -262
  16. package/dist/bitcoin/BroadcastClient.d.ts +0 -30
  17. package/dist/bitcoin/BroadcastClient.js +0 -35
  18. package/dist/bitcoin/OrdinalsClient.d.ts +0 -21
  19. package/dist/bitcoin/OrdinalsClient.js +0 -105
  20. package/dist/bitcoin/PSBTBuilder.d.ts +0 -24
  21. package/dist/bitcoin/PSBTBuilder.js +0 -80
  22. package/dist/bitcoin/fee-calculation.d.ts +0 -14
  23. package/dist/bitcoin/fee-calculation.js +0 -31
  24. package/dist/bitcoin/providers/OrdNodeProvider.d.ts +0 -38
  25. package/dist/bitcoin/providers/OrdNodeProvider.js +0 -67
  26. package/dist/bitcoin/providers/OrdinalsProvider.d.ts +0 -33
  27. package/dist/bitcoin/providers/OrdinalsProvider.js +0 -50
  28. package/dist/bitcoin/providers/types.d.ts +0 -63
  29. package/dist/bitcoin/providers/types.js +0 -1
  30. package/dist/bitcoin/transactions/commit.d.ts +0 -89
  31. package/dist/bitcoin/transactions/commit.js +0 -311
  32. package/dist/bitcoin/transactions/index.d.ts +0 -7
  33. package/dist/bitcoin/transactions/index.js +0 -8
  34. package/dist/bitcoin/transfer.d.ts +0 -9
  35. package/dist/bitcoin/transfer.js +0 -26
  36. package/dist/bitcoin/utxo-selection.d.ts +0 -78
  37. package/dist/bitcoin/utxo-selection.js +0 -237
  38. package/dist/bitcoin/utxo.d.ts +0 -26
  39. package/dist/bitcoin/utxo.js +0 -78
  40. package/dist/contexts/credentials-v1.json +0 -195
  41. package/dist/contexts/credentials-v2-examples.json +0 -5
  42. package/dist/contexts/credentials-v2.json +0 -301
  43. package/dist/contexts/credentials.json +0 -195
  44. package/dist/contexts/data-integrity-v2.json +0 -81
  45. package/dist/contexts/dids.json +0 -57
  46. package/dist/contexts/ed255192020.json +0 -93
  47. package/dist/contexts/ordinals-plus.json +0 -23
  48. package/dist/contexts/originals.json +0 -22
  49. package/dist/core/OriginalsSDK.d.ts +0 -158
  50. package/dist/core/OriginalsSDK.js +0 -274
  51. package/dist/crypto/Multikey.d.ts +0 -30
  52. package/dist/crypto/Multikey.js +0 -149
  53. package/dist/crypto/Signer.d.ts +0 -21
  54. package/dist/crypto/Signer.js +0 -196
  55. package/dist/crypto/noble-init.d.ts +0 -18
  56. package/dist/crypto/noble-init.js +0 -106
  57. package/dist/did/BtcoDidResolver.d.ts +0 -57
  58. package/dist/did/BtcoDidResolver.js +0 -166
  59. package/dist/did/DIDManager.d.ts +0 -101
  60. package/dist/did/DIDManager.js +0 -493
  61. package/dist/did/Ed25519Verifier.d.ts +0 -30
  62. package/dist/did/Ed25519Verifier.js +0 -59
  63. package/dist/did/KeyManager.d.ts +0 -17
  64. package/dist/did/KeyManager.js +0 -207
  65. package/dist/did/WebVHManager.d.ts +0 -100
  66. package/dist/did/WebVHManager.js +0 -304
  67. package/dist/did/createBtcoDidDocument.d.ts +0 -10
  68. package/dist/did/createBtcoDidDocument.js +0 -42
  69. package/dist/did/providers/OrdinalsClientProviderAdapter.d.ts +0 -23
  70. package/dist/did/providers/OrdinalsClientProviderAdapter.js +0 -51
  71. package/dist/events/EventEmitter.d.ts +0 -115
  72. package/dist/events/EventEmitter.js +0 -198
  73. package/dist/events/index.d.ts +0 -7
  74. package/dist/events/index.js +0 -6
  75. package/dist/events/types.d.ts +0 -286
  76. package/dist/events/types.js +0 -9
  77. package/dist/examples/basic-usage.d.ts +0 -3
  78. package/dist/examples/basic-usage.js +0 -62
  79. package/dist/examples/run.d.ts +0 -1
  80. package/dist/examples/run.js +0 -4
  81. package/dist/index.d.ts +0 -39
  82. package/dist/index.js +0 -47
  83. package/dist/lifecycle/BatchOperations.d.ts +0 -147
  84. package/dist/lifecycle/BatchOperations.js +0 -251
  85. package/dist/lifecycle/LifecycleManager.d.ts +0 -116
  86. package/dist/lifecycle/LifecycleManager.js +0 -971
  87. package/dist/lifecycle/OriginalsAsset.d.ts +0 -164
  88. package/dist/lifecycle/OriginalsAsset.js +0 -380
  89. package/dist/lifecycle/ProvenanceQuery.d.ts +0 -126
  90. package/dist/lifecycle/ProvenanceQuery.js +0 -220
  91. package/dist/lifecycle/ResourceVersioning.d.ts +0 -73
  92. package/dist/lifecycle/ResourceVersioning.js +0 -127
  93. package/dist/migration/MigrationManager.d.ts +0 -86
  94. package/dist/migration/MigrationManager.js +0 -412
  95. package/dist/migration/audit/AuditLogger.d.ts +0 -51
  96. package/dist/migration/audit/AuditLogger.js +0 -156
  97. package/dist/migration/checkpoint/CheckpointManager.d.ts +0 -31
  98. package/dist/migration/checkpoint/CheckpointManager.js +0 -96
  99. package/dist/migration/checkpoint/CheckpointStorage.d.ts +0 -26
  100. package/dist/migration/checkpoint/CheckpointStorage.js +0 -89
  101. package/dist/migration/index.d.ts +0 -22
  102. package/dist/migration/index.js +0 -27
  103. package/dist/migration/operations/BaseMigration.d.ts +0 -48
  104. package/dist/migration/operations/BaseMigration.js +0 -83
  105. package/dist/migration/operations/PeerToBtcoMigration.d.ts +0 -25
  106. package/dist/migration/operations/PeerToBtcoMigration.js +0 -67
  107. package/dist/migration/operations/PeerToWebvhMigration.d.ts +0 -19
  108. package/dist/migration/operations/PeerToWebvhMigration.js +0 -46
  109. package/dist/migration/operations/WebvhToBtcoMigration.d.ts +0 -25
  110. package/dist/migration/operations/WebvhToBtcoMigration.js +0 -67
  111. package/dist/migration/rollback/RollbackManager.d.ts +0 -29
  112. package/dist/migration/rollback/RollbackManager.js +0 -146
  113. package/dist/migration/state/StateMachine.d.ts +0 -25
  114. package/dist/migration/state/StateMachine.js +0 -76
  115. package/dist/migration/state/StateTracker.d.ts +0 -36
  116. package/dist/migration/state/StateTracker.js +0 -123
  117. package/dist/migration/types.d.ts +0 -306
  118. package/dist/migration/types.js +0 -33
  119. package/dist/migration/validation/BitcoinValidator.d.ts +0 -13
  120. package/dist/migration/validation/BitcoinValidator.js +0 -83
  121. package/dist/migration/validation/CredentialValidator.d.ts +0 -13
  122. package/dist/migration/validation/CredentialValidator.js +0 -46
  123. package/dist/migration/validation/DIDCompatibilityValidator.d.ts +0 -16
  124. package/dist/migration/validation/DIDCompatibilityValidator.js +0 -127
  125. package/dist/migration/validation/LifecycleValidator.d.ts +0 -10
  126. package/dist/migration/validation/LifecycleValidator.js +0 -52
  127. package/dist/migration/validation/StorageValidator.d.ts +0 -10
  128. package/dist/migration/validation/StorageValidator.js +0 -65
  129. package/dist/migration/validation/ValidationPipeline.d.ts +0 -29
  130. package/dist/migration/validation/ValidationPipeline.js +0 -180
  131. package/dist/storage/LocalStorageAdapter.d.ts +0 -11
  132. package/dist/storage/LocalStorageAdapter.js +0 -53
  133. package/dist/storage/MemoryStorageAdapter.d.ts +0 -6
  134. package/dist/storage/MemoryStorageAdapter.js +0 -21
  135. package/dist/storage/StorageAdapter.d.ts +0 -16
  136. package/dist/storage/StorageAdapter.js +0 -1
  137. package/dist/storage/index.d.ts +0 -2
  138. package/dist/storage/index.js +0 -2
  139. package/dist/types/bitcoin.d.ts +0 -84
  140. package/dist/types/bitcoin.js +0 -1
  141. package/dist/types/common.d.ts +0 -82
  142. package/dist/types/common.js +0 -1
  143. package/dist/types/credentials.d.ts +0 -75
  144. package/dist/types/credentials.js +0 -1
  145. package/dist/types/did.d.ts +0 -26
  146. package/dist/types/did.js +0 -1
  147. package/dist/types/index.d.ts +0 -5
  148. package/dist/types/index.js +0 -5
  149. package/dist/types/network.d.ts +0 -78
  150. package/dist/types/network.js +0 -145
  151. package/dist/utils/EventLogger.d.ts +0 -71
  152. package/dist/utils/EventLogger.js +0 -232
  153. package/dist/utils/Logger.d.ts +0 -106
  154. package/dist/utils/Logger.js +0 -257
  155. package/dist/utils/MetricsCollector.d.ts +0 -110
  156. package/dist/utils/MetricsCollector.js +0 -264
  157. package/dist/utils/bitcoin-address.d.ts +0 -38
  158. package/dist/utils/bitcoin-address.js +0 -113
  159. package/dist/utils/cbor.d.ts +0 -2
  160. package/dist/utils/cbor.js +0 -9
  161. package/dist/utils/encoding.d.ts +0 -37
  162. package/dist/utils/encoding.js +0 -120
  163. package/dist/utils/hash.d.ts +0 -1
  164. package/dist/utils/hash.js +0 -5
  165. package/dist/utils/retry.d.ts +0 -10
  166. package/dist/utils/retry.js +0 -35
  167. package/dist/utils/satoshi-validation.d.ts +0 -60
  168. package/dist/utils/satoshi-validation.js +0 -156
  169. package/dist/utils/serialization.d.ts +0 -14
  170. package/dist/utils/serialization.js +0 -76
  171. package/dist/utils/telemetry.d.ts +0 -17
  172. package/dist/utils/telemetry.js +0 -24
  173. package/dist/utils/validation.d.ts +0 -5
  174. package/dist/utils/validation.js +0 -98
  175. package/dist/vc/CredentialManager.d.ts +0 -22
  176. package/dist/vc/CredentialManager.js +0 -227
  177. package/dist/vc/Issuer.d.ts +0 -27
  178. package/dist/vc/Issuer.js +0 -70
  179. package/dist/vc/Verifier.d.ts +0 -16
  180. package/dist/vc/Verifier.js +0 -50
  181. package/dist/vc/cryptosuites/bbs.d.ts +0 -44
  182. package/dist/vc/cryptosuites/bbs.js +0 -213
  183. package/dist/vc/cryptosuites/bbsSimple.d.ts +0 -9
  184. package/dist/vc/cryptosuites/bbsSimple.js +0 -12
  185. package/dist/vc/cryptosuites/eddsa.d.ts +0 -30
  186. package/dist/vc/cryptosuites/eddsa.js +0 -81
  187. package/dist/vc/documentLoader.d.ts +0 -16
  188. package/dist/vc/documentLoader.js +0 -59
  189. package/dist/vc/proofs/data-integrity.d.ts +0 -21
  190. package/dist/vc/proofs/data-integrity.js +0 -15
  191. package/dist/vc/utils/jsonld.d.ts +0 -2
  192. package/dist/vc/utils/jsonld.js +0 -15
  193. package/src/adapters/FeeOracleMock.ts +0 -9
  194. package/src/adapters/index.ts +0 -5
  195. package/src/adapters/providers/OrdHttpProvider.ts +0 -126
  196. package/src/adapters/providers/OrdMockProvider.ts +0 -101
  197. package/src/adapters/types.ts +0 -66
  198. package/src/bitcoin/BitcoinManager.ts +0 -330
  199. package/src/bitcoin/BroadcastClient.ts +0 -54
  200. package/src/bitcoin/OrdinalsClient.ts +0 -119
  201. package/src/bitcoin/PSBTBuilder.ts +0 -106
  202. package/src/bitcoin/fee-calculation.ts +0 -38
  203. package/src/bitcoin/providers/OrdNodeProvider.ts +0 -92
  204. package/src/bitcoin/providers/OrdinalsProvider.ts +0 -56
  205. package/src/bitcoin/providers/types.ts +0 -59
  206. package/src/bitcoin/transactions/commit.ts +0 -465
  207. package/src/bitcoin/transactions/index.ts +0 -13
  208. package/src/bitcoin/transfer.ts +0 -43
  209. package/src/bitcoin/utxo-selection.ts +0 -322
  210. package/src/bitcoin/utxo.ts +0 -113
  211. package/src/contexts/credentials-v1.json +0 -237
  212. package/src/contexts/credentials-v2-examples.json +0 -5
  213. package/src/contexts/credentials-v2.json +0 -340
  214. package/src/contexts/credentials.json +0 -237
  215. package/src/contexts/data-integrity-v2.json +0 -81
  216. package/src/contexts/dids.json +0 -58
  217. package/src/contexts/ed255192020.json +0 -93
  218. package/src/contexts/ordinals-plus.json +0 -23
  219. package/src/contexts/originals.json +0 -22
  220. package/src/core/OriginalsSDK.ts +0 -416
  221. package/src/crypto/Multikey.ts +0 -194
  222. package/src/crypto/Signer.ts +0 -254
  223. package/src/crypto/noble-init.ts +0 -121
  224. package/src/did/BtcoDidResolver.ts +0 -227
  225. package/src/did/DIDManager.ts +0 -694
  226. package/src/did/Ed25519Verifier.ts +0 -68
  227. package/src/did/KeyManager.ts +0 -236
  228. package/src/did/WebVHManager.ts +0 -489
  229. package/src/did/createBtcoDidDocument.ts +0 -59
  230. package/src/did/providers/OrdinalsClientProviderAdapter.ts +0 -68
  231. package/src/events/EventEmitter.ts +0 -222
  232. package/src/events/index.ts +0 -19
  233. package/src/events/types.ts +0 -331
  234. package/src/examples/basic-usage.ts +0 -78
  235. package/src/examples/run.ts +0 -5
  236. package/src/index.ts +0 -84
  237. package/src/lifecycle/BatchOperations.ts +0 -373
  238. package/src/lifecycle/LifecycleManager.ts +0 -1218
  239. package/src/lifecycle/OriginalsAsset.ts +0 -524
  240. package/src/lifecycle/ProvenanceQuery.ts +0 -280
  241. package/src/lifecycle/ResourceVersioning.ts +0 -163
  242. package/src/migration/MigrationManager.ts +0 -527
  243. package/src/migration/audit/AuditLogger.ts +0 -176
  244. package/src/migration/checkpoint/CheckpointManager.ts +0 -112
  245. package/src/migration/checkpoint/CheckpointStorage.ts +0 -101
  246. package/src/migration/index.ts +0 -33
  247. package/src/migration/operations/BaseMigration.ts +0 -126
  248. package/src/migration/operations/PeerToBtcoMigration.ts +0 -105
  249. package/src/migration/operations/PeerToWebvhMigration.ts +0 -62
  250. package/src/migration/operations/WebvhToBtcoMigration.ts +0 -105
  251. package/src/migration/rollback/RollbackManager.ts +0 -170
  252. package/src/migration/state/StateMachine.ts +0 -92
  253. package/src/migration/state/StateTracker.ts +0 -156
  254. package/src/migration/types.ts +0 -344
  255. package/src/migration/validation/BitcoinValidator.ts +0 -107
  256. package/src/migration/validation/CredentialValidator.ts +0 -62
  257. package/src/migration/validation/DIDCompatibilityValidator.ts +0 -151
  258. package/src/migration/validation/LifecycleValidator.ts +0 -64
  259. package/src/migration/validation/StorageValidator.ts +0 -79
  260. package/src/migration/validation/ValidationPipeline.ts +0 -213
  261. package/src/storage/LocalStorageAdapter.ts +0 -61
  262. package/src/storage/MemoryStorageAdapter.ts +0 -29
  263. package/src/storage/StorageAdapter.ts +0 -25
  264. package/src/storage/index.ts +0 -3
  265. package/src/types/bitcoin.ts +0 -98
  266. package/src/types/common.ts +0 -92
  267. package/src/types/credentials.ts +0 -88
  268. package/src/types/did.ts +0 -31
  269. package/src/types/external-shims.d.ts +0 -53
  270. package/src/types/index.ts +0 -7
  271. package/src/types/network.ts +0 -175
  272. package/src/utils/EventLogger.ts +0 -298
  273. package/src/utils/Logger.ts +0 -322
  274. package/src/utils/MetricsCollector.ts +0 -358
  275. package/src/utils/bitcoin-address.ts +0 -130
  276. package/src/utils/cbor.ts +0 -12
  277. package/src/utils/encoding.ts +0 -127
  278. package/src/utils/hash.ts +0 -6
  279. package/src/utils/retry.ts +0 -46
  280. package/src/utils/satoshi-validation.ts +0 -196
  281. package/src/utils/serialization.ts +0 -96
  282. package/src/utils/telemetry.ts +0 -40
  283. package/src/utils/validation.ts +0 -119
  284. package/src/vc/CredentialManager.ts +0 -273
  285. package/src/vc/Issuer.ts +0 -100
  286. package/src/vc/Verifier.ts +0 -47
  287. package/src/vc/cryptosuites/bbs.ts +0 -253
  288. package/src/vc/cryptosuites/bbsSimple.ts +0 -21
  289. package/src/vc/cryptosuites/eddsa.ts +0 -99
  290. package/src/vc/documentLoader.ts +0 -67
  291. package/src/vc/proofs/data-integrity.ts +0 -33
  292. package/src/vc/utils/jsonld.ts +0 -18
  293. package/test/logs/did_webvh_QmNTn9Kkp8dQ75WrF9xqJ2kuDp9QhKc3aPiERRMj8XoTBN_example_com.jsonl +0 -1
  294. package/test/logs/did_webvh_QmNu4MNr8Lr5txx5gYNhuhZDchXsZEu3hJXKYuphpWTPDp_example_com_users_etc_passwd.jsonl +0 -1
  295. package/test/logs/did_webvh_QmR9MrGZACzjKETA8SBRNCKG11HxU85c4bVR2qN5eDCfsD_example_com.jsonl +0 -1
  296. package/test/logs/did_webvh_QmUc5suaqRM2P4nrXxZwqYMfqzhdMqjuL7oJaJbEpCQVCd_example_com_users_etc_passwd.jsonl +0 -1
  297. package/test/logs/did_webvh_QmUkiB2RCV2VZ1RTXsCebWN25Eiy9TLvpzDWAJNjhgvB4X_example_com_etc_passwd.jsonl +0 -1
  298. package/test/logs/did_webvh_QmUoRTe8UMwpAQXZSAW7pjAgZK1tq2X3C6Kfxq3UXGcaGy_example_com_secret.jsonl +0 -1
  299. package/test/logs/did_webvh_QmWWot3chx1t6KwTmcE5i2FeDZ5JMkQw3qXycsKDVmJ9Be_example_com_users_alice.jsonl +0 -1
  300. package/test/logs/did_webvh_QmWvVgALL5kjZdpgR7KZay7J8UiiUr834kkRmWeFAxjAuC_example_com_users_etc_passwd.jsonl +0 -1
  301. package/test/logs/did_webvh_QmWwaRQHUZAFcKihFC6xR6tRTTrQhHPTku6azf1egWbpy1_example_com_users_alice.jsonl +0 -1
  302. package/test/logs/did_webvh_QmXJLtkz23r7AozbtXsZMKWnVU6rd38CkVtjdWuATU3Yp6_example_com_users_alice123_profile.jsonl +0 -1
  303. package/test/logs/did_webvh_QmYsce448po14oDE1wXbyaP6wY9HQgHSKLwdezn1k577SF_example_com_my_org_user_name_test_123.jsonl +0 -1
  304. package/test/logs/did_webvh_QmZBeNzzqajxdfwcDUPZ4P8C5YSXyRztrAwmPiKuKUxmAK_example_com.jsonl +0 -1
  305. package/test/logs/did_webvh_QmZhJsqxizwVbRtqCUkmE6XQunSxtxMt3gbTYadVBNAaEq_example_com.jsonl +0 -1
  306. package/test/logs/did_webvh_QmZk7NHU2D57RzzbMq4tWW9gBa9AqtVTWfiRM6RFdwGVj2_example_com.jsonl +0 -1
  307. package/test/logs/did_webvh_QmZshSXp9w8ovH62zGGBS1b5pGGPsuYiu1VQ935sga2hWF_example_com_level1_level2.jsonl +0 -1
  308. package/test/logs/did_webvh_QmbWAmw7HQL7vKJyCsctZihXf1rmT4sGvggKCPKWcUWjw1_example_com.jsonl +0 -1
  309. package/test/logs/did_webvh_QmbdLUMbYs3juR39TLB6hhrFWLcNg45ybUzeBJCS1MhCh1_example_com_C_Windows_System32.jsonl +0 -1
  310. package/test/logs/did_webvh_QmcaQ1Ma4gkSbae85aCm8Mv4rvdT2Sb2RR3JzYwrm5XBq8_example_com_etc_passwd.jsonl +0 -1
  311. package/test/logs/did_webvh_QmcbA7WQhsBqZSoDpKJHjV8Q5o53h8vmgJhQfo6rqTY5ho_example_com.jsonl +0 -1
  312. package/test/logs/did_webvh_Qmdy8uWr2gkUJrXsThynAug3DASTWwb3onEj89LKmMGZYB_example_com.jsonl +0 -1
  313. package/tests/__mocks__/bbs-signatures.js +0 -17
  314. package/tests/__mocks__/mf-base58.js +0 -24
  315. package/tests/e2e/README.md +0 -97
  316. package/tests/e2e/example.spec.ts +0 -78
  317. package/tests/fixtures/did-documents.ts +0 -247
  318. package/tests/index.test.ts +0 -21
  319. package/tests/integration/BatchOperations.test.ts +0 -531
  320. package/tests/integration/CompleteLifecycle.e2e.test.ts +0 -735
  321. package/tests/integration/CredentialManager.test.ts +0 -42
  322. package/tests/integration/DIDManager.test.ts +0 -41
  323. package/tests/integration/DidPeerToWebVhFlow.test.ts +0 -351
  324. package/tests/integration/Events.test.ts +0 -435
  325. package/tests/integration/Lifecycle.transfer.btco.integration.test.ts +0 -25
  326. package/tests/integration/LifecycleManager.test.ts +0 -21
  327. package/tests/integration/MultikeyFlow.test.ts +0 -52
  328. package/tests/integration/TelemetryIntegration.test.ts +0 -395
  329. package/tests/integration/WebVhPublish.test.ts +0 -48
  330. package/tests/integration/migration/peer-to-webvh.test.ts +0 -172
  331. package/tests/manual/test-commit-creation.ts +0 -323
  332. package/tests/mocks/MockKeyStore.ts +0 -38
  333. package/tests/mocks/adapters/MemoryStorageAdapter.ts +0 -24
  334. package/tests/mocks/adapters/MockFeeOracle.ts +0 -11
  335. package/tests/mocks/adapters/MockOrdinalsProvider.ts +0 -76
  336. package/tests/mocks/adapters/OrdMockProvider.test.ts +0 -176
  337. package/tests/mocks/adapters/index.ts +0 -6
  338. package/tests/performance/BatchOperations.perf.test.ts +0 -403
  339. package/tests/performance/logging.perf.test.ts +0 -336
  340. package/tests/sdk.test.ts +0 -43
  341. package/tests/security/bitcoin-penetration-tests.test.ts +0 -622
  342. package/tests/setup.bun.ts +0 -69
  343. package/tests/setup.jest.ts +0 -23
  344. package/tests/stress/batch-operations-stress.test.ts +0 -571
  345. package/tests/unit/adapters/FeeOracleMock.test.ts +0 -40
  346. package/tests/unit/bitcoin/BitcoinManager.test.ts +0 -293
  347. package/tests/unit/bitcoin/BroadcastClient.test.ts +0 -52
  348. package/tests/unit/bitcoin/OrdNodeProvider.test.ts +0 -53
  349. package/tests/unit/bitcoin/OrdinalsClient.test.ts +0 -381
  350. package/tests/unit/bitcoin/OrdinalsClientProvider.test.ts +0 -102
  351. package/tests/unit/bitcoin/PSBTBuilder.test.ts +0 -84
  352. package/tests/unit/bitcoin/fee-calculation.test.ts +0 -261
  353. package/tests/unit/bitcoin/transactions/commit.test.ts +0 -649
  354. package/tests/unit/bitcoin/transfer.test.ts +0 -31
  355. package/tests/unit/bitcoin/utxo-selection-new.test.ts +0 -502
  356. package/tests/unit/bitcoin/utxo.more.test.ts +0 -39
  357. package/tests/unit/bitcoin/utxo.selection.test.ts +0 -38
  358. package/tests/unit/core/OriginalsSDK.test.ts +0 -152
  359. package/tests/unit/crypto/Multikey.test.ts +0 -206
  360. package/tests/unit/crypto/Signer.test.ts +0 -408
  361. package/tests/unit/did/BtcoDidResolver.test.ts +0 -611
  362. package/tests/unit/did/DIDManager.more.test.ts +0 -43
  363. package/tests/unit/did/DIDManager.test.ts +0 -185
  364. package/tests/unit/did/Ed25519Verifier.test.ts +0 -160
  365. package/tests/unit/did/KeyManager.test.ts +0 -452
  366. package/tests/unit/did/OrdinalsClientProviderAdapter.test.ts +0 -45
  367. package/tests/unit/did/WebVHManager.test.ts +0 -435
  368. package/tests/unit/did/createBtcoDidDocument.test.ts +0 -67
  369. package/tests/unit/did/providers/OrdinalsClientProviderAdapter.test.ts +0 -159
  370. package/tests/unit/events/EventEmitter.test.ts +0 -407
  371. package/tests/unit/lifecycle/BatchOperations.test.ts +0 -527
  372. package/tests/unit/lifecycle/LifecycleManager.keymanagement.test.ts +0 -312
  373. package/tests/unit/lifecycle/LifecycleManager.prov.test.ts +0 -18
  374. package/tests/unit/lifecycle/LifecycleManager.test.ts +0 -213
  375. package/tests/unit/lifecycle/LifecycleManager.transfer.unit.test.ts +0 -30
  376. package/tests/unit/lifecycle/OriginalsAsset.test.ts +0 -176
  377. package/tests/unit/lifecycle/ProvenanceQuery.test.ts +0 -577
  378. package/tests/unit/lifecycle/ResourceVersioning.test.ts +0 -651
  379. package/tests/unit/storage/MemoryStorageAdapter.test.ts +0 -93
  380. package/tests/unit/types/network.test.ts +0 -255
  381. package/tests/unit/utils/EventIntegration.test.ts +0 -384
  382. package/tests/unit/utils/Logger.test.ts +0 -473
  383. package/tests/unit/utils/MetricsCollector.test.ts +0 -358
  384. package/tests/unit/utils/bitcoin-address.test.ts +0 -250
  385. package/tests/unit/utils/cbor.test.ts +0 -35
  386. package/tests/unit/utils/encoding.test.ts +0 -318
  387. package/tests/unit/utils/hash.test.ts +0 -12
  388. package/tests/unit/utils/retry.test.ts +0 -100
  389. package/tests/unit/utils/satoshi-validation.test.ts +0 -354
  390. package/tests/unit/utils/serialization.test.ts +0 -124
  391. package/tests/unit/utils/telemetry.test.ts +0 -52
  392. package/tests/unit/utils/validation.test.ts +0 -141
  393. package/tests/unit/vc/CredentialManager.test.ts +0 -487
  394. package/tests/unit/vc/Issuer.test.ts +0 -107
  395. package/tests/unit/vc/Verifier.test.ts +0 -525
  396. package/tests/unit/vc/bbs.test.ts +0 -282
  397. package/tests/unit/vc/cryptosuites/eddsa.test.ts +0 -398
  398. package/tests/unit/vc/documentLoader.test.ts +0 -121
  399. package/tests/unit/vc/proofs/data-integrity.test.ts +0 -24
  400. package/tsconfig.json +0 -31
  401. package/tsconfig.test.json +0 -15
@@ -1,67 +0,0 @@
1
- export class OrdNodeProvider {
2
- constructor(options) {
3
- this.nodeUrl = options.nodeUrl;
4
- this.timeout = options.timeout || 5000;
5
- this.network = options.network || 'mainnet';
6
- }
7
- async resolve(resourceId) {
8
- return {
9
- id: resourceId,
10
- type: 'Unknown',
11
- contentType: 'application/octet-stream',
12
- content_url: `${this.nodeUrl}/content/${resourceId}`
13
- };
14
- }
15
- async resolveInscription(inscriptionId) {
16
- return {
17
- id: inscriptionId,
18
- sat: 0,
19
- content_type: 'text/plain',
20
- content_url: `${this.nodeUrl}/content/${inscriptionId}`
21
- };
22
- }
23
- async resolveInfo(resourceId) {
24
- return {
25
- id: resourceId,
26
- type: 'Unknown',
27
- contentType: 'application/octet-stream',
28
- createdAt: new Date().toISOString(),
29
- updatedAt: new Date().toISOString(),
30
- content_url: `${this.nodeUrl}/content/${resourceId}`
31
- };
32
- }
33
- async resolveCollection(did, _options = {}) {
34
- return [];
35
- }
36
- async getSatInfo(_satNumber) {
37
- return { inscription_ids: [] };
38
- }
39
- async getMetadata(_inscriptionId) {
40
- return null;
41
- }
42
- async *getAllResources(_options = {}) {
43
- // no-op generator yields nothing
44
- return;
45
- }
46
- async *getAllResourcesChronological(_options = {}) {
47
- // no-op generator yields nothing
48
- return;
49
- }
50
- async getInscriptionLocationsByAddress(_address) {
51
- return [];
52
- }
53
- async getInscriptionByNumber(_inscriptionNumber) {
54
- return {
55
- id: '0',
56
- sat: 0,
57
- content_type: 'text/plain',
58
- content_url: `${this.nodeUrl}/content/0`
59
- };
60
- }
61
- async getAddressOutputs(_address) {
62
- return [];
63
- }
64
- async getOutputDetails(_outpoint) {
65
- return { value: 0, script_pubkey: '', spent: false, inscriptions: [] };
66
- }
67
- }
@@ -1,33 +0,0 @@
1
- import { OrdinalsClient } from '../OrdinalsClient';
2
- export interface OrdinalsProvider {
3
- getSatInfo(satNumber: string): Promise<{
4
- inscription_ids: string[];
5
- }>;
6
- resolveInscription(inscriptionId: string): Promise<{
7
- id: string;
8
- sat: number;
9
- content_type: string;
10
- content_url: string;
11
- }>;
12
- getMetadata(inscriptionId: string): Promise<any>;
13
- estimateFee(blocks?: number): Promise<number>;
14
- }
15
- export declare class OrdinalsClientProvider implements OrdinalsProvider {
16
- private client;
17
- private options?;
18
- constructor(client: OrdinalsClient, options?: {
19
- retries?: number;
20
- baseUrl?: string;
21
- } | undefined);
22
- getSatInfo(satNumber: string): Promise<{
23
- inscription_ids: string[];
24
- }>;
25
- resolveInscription(inscriptionId: string): Promise<{
26
- id: string;
27
- sat: number;
28
- content_type: string;
29
- content_url: string;
30
- }>;
31
- getMetadata(inscriptionId: string): Promise<any>;
32
- estimateFee(blocks?: number): Promise<number>;
33
- }
@@ -1,50 +0,0 @@
1
- import { withRetry } from '../../utils/retry';
2
- export class OrdinalsClientProvider {
3
- constructor(client, options) {
4
- this.client = client;
5
- this.options = options;
6
- }
7
- async getSatInfo(satNumber) {
8
- return withRetry(() => this.client.getSatInfo(satNumber), {
9
- maxRetries: this.options?.retries ?? 2,
10
- isRetriable: () => true
11
- });
12
- }
13
- async resolveInscription(inscriptionId) {
14
- return withRetry(async () => {
15
- const res = await this.client.getInscriptionById(inscriptionId);
16
- if (!res)
17
- throw new Error('Inscription not found');
18
- if (!res.satoshi)
19
- throw new Error('Inscription missing satoshi');
20
- const sat = Number(String(res.satoshi));
21
- if (Number.isNaN(sat))
22
- throw new Error('Invalid satoshi value');
23
- if (!res.contentType)
24
- throw new Error('Inscription missing contentType');
25
- const base = (this.options?.baseUrl || '').replace(/\/$/, '');
26
- if (!base)
27
- throw new Error('baseUrl is required to construct content_url');
28
- const id = res.inscriptionId;
29
- const content_url = `${base}/content/${id}`;
30
- return {
31
- id,
32
- sat,
33
- content_type: res.contentType,
34
- content_url
35
- };
36
- }, { maxRetries: this.options?.retries ?? 2, isRetriable: () => true });
37
- }
38
- async getMetadata(inscriptionId) {
39
- return withRetry(() => this.client.getMetadata(inscriptionId), {
40
- maxRetries: this.options?.retries ?? 2,
41
- isRetriable: () => true
42
- });
43
- }
44
- async estimateFee(blocks) {
45
- return withRetry(() => this.client.estimateFee(blocks), {
46
- maxRetries: this.options?.retries ?? 2,
47
- isRetriable: () => true
48
- });
49
- }
50
- }
@@ -1,63 +0,0 @@
1
- export interface LinkedResource {
2
- id: string;
3
- type: string;
4
- contentType: string;
5
- content_url: string;
6
- }
7
- export interface Inscription {
8
- id: string;
9
- sat: number;
10
- content_type: string;
11
- content_url: string;
12
- number?: number;
13
- height?: number;
14
- timestamp?: number;
15
- }
16
- export interface ResourceInfo {
17
- id: string;
18
- type: string;
19
- contentType: string;
20
- createdAt?: string;
21
- updatedAt?: string;
22
- content_url: string;
23
- }
24
- export interface ResourceProvider {
25
- resolve(resourceId: string): Promise<LinkedResource>;
26
- resolveInscription(inscriptionId: string): Promise<Inscription>;
27
- resolveInfo(resourceId: string): Promise<ResourceInfo>;
28
- resolveCollection(did: string, options: {
29
- type?: string;
30
- limit?: number;
31
- offset?: number;
32
- }): Promise<LinkedResource[]>;
33
- getSatInfo(satNumber: string): Promise<{
34
- inscription_ids: string[];
35
- }>;
36
- getMetadata(inscriptionId: string): Promise<any>;
37
- getAllResources(options?: ResourceCrawlOptions): AsyncGenerator<LinkedResource[]>;
38
- getAllResourcesChronological(options?: ResourceCrawlOptions): AsyncGenerator<LinkedResource[]>;
39
- getInscriptionLocationsByAddress(address: string): Promise<InscriptionRefWithLocation[]>;
40
- getInscriptionByNumber(inscriptionNumber: number): Promise<Inscription>;
41
- getAddressOutputs(address: string): Promise<string[]>;
42
- getOutputDetails(outpoint: string): Promise<{
43
- value: number;
44
- script_pubkey: string;
45
- spent: boolean;
46
- inscriptions: string[];
47
- }>;
48
- }
49
- export interface ResourceCrawlOptions {
50
- batchSize?: number;
51
- startFrom?: number;
52
- maxResources?: number;
53
- filter?: (resource: LinkedResource) => boolean;
54
- }
55
- export interface ResourceBatch {
56
- resources: LinkedResource[];
57
- nextCursor?: number;
58
- hasMore: boolean;
59
- }
60
- export interface InscriptionRefWithLocation {
61
- id: string;
62
- location: string;
63
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,89 +0,0 @@
1
- /**
2
- * Commit Transaction Processing for Ordinals
3
- *
4
- * This module implements the commit transaction process for ordinals inscriptions.
5
- * It handles the generation of the commit address and preparation of the commit transaction.
6
- *
7
- * Ported from legacy ordinalsplus transaction infrastructure.
8
- */
9
- import * as btc from '@scure/btc-signer';
10
- import { Utxo } from '../../types/bitcoin.js';
11
- /**
12
- * Bitcoin network type for @scure/btc-signer
13
- */
14
- type BitcoinNetwork = 'mainnet' | 'testnet' | 'regtest' | 'signet';
15
- /**
16
- * Parameters for creating a commit transaction
17
- */
18
- export interface CommitTransactionParams {
19
- /** Inscription content as Buffer */
20
- content: Buffer;
21
- /** MIME type of the content (e.g., 'text/plain', 'image/png') */
22
- contentType: string;
23
- /** Available UTXOs to fund the transaction */
24
- utxos: Utxo[];
25
- /** Address to send change back to */
26
- changeAddress: string;
27
- /** Fee rate in sats/vB */
28
- feeRate: number;
29
- /** Bitcoin network configuration */
30
- network: BitcoinNetwork;
31
- /** Optional minimum amount for the commit output */
32
- minimumCommitAmount?: number;
33
- /** Optional metadata for the inscription */
34
- metadata?: Record<string, unknown>;
35
- /** Optional pointer to target specific satoshi */
36
- pointer?: number;
37
- }
38
- /**
39
- * Result of the commit transaction creation
40
- */
41
- export interface CommitTransactionResult {
42
- /** P2TR address for the commit output */
43
- commitAddress: string;
44
- /** Base64-encoded PSBT for the commit transaction */
45
- commitPsbtBase64: string;
46
- /** Raw PSBT object for commit transaction (for direct manipulation) */
47
- commitPsbt: btc.Transaction;
48
- /** The exact amount sent to the commit output */
49
- commitAmount: number;
50
- /** Selected UTXOs for the transaction */
51
- selectedUtxos: Utxo[];
52
- /** Fee information */
53
- fees: {
54
- /** Fee for the commit transaction in satoshis */
55
- commit: number;
56
- };
57
- /** Reveal private key (hex string) - needed for reveal transaction */
58
- revealPrivateKey: string;
59
- /** Reveal public key (hex string) */
60
- revealPublicKey: string;
61
- /** Inscription script for reveal transaction */
62
- inscriptionScript: {
63
- script: Uint8Array;
64
- controlBlock: Uint8Array;
65
- leafVersion: number;
66
- };
67
- }
68
- /**
69
- * Creates a commit transaction for an ordinals inscription
70
- *
71
- * This function:
72
- * 1. Validates and filters UTXOs to ensure they are spendable
73
- * 2. Creates an inscription with the provided content
74
- * 3. Generates a reveal keypair and script
75
- * 4. Creates a P2TR commit address
76
- * 5. Selects UTXOs to fund the transaction (with iterative reselection if needed)
77
- * 6. Builds a PSBT with commit output and change
78
- *
79
- * The function ensures that:
80
- * - All selected UTXOs have valid scriptPubKey fields
81
- * - Total input value always covers output value + fees
82
- * - UTXO selection is re-run if fee increases after accurate calculation
83
- *
84
- * @param params - Parameters for the commit transaction
85
- * @returns Complete information for the prepared commit transaction
86
- * @throws Error if no valid UTXOs are available or insufficient funds
87
- */
88
- export declare function createCommitTransaction(params: CommitTransactionParams): Promise<CommitTransactionResult>;
89
- export {};
@@ -1,311 +0,0 @@
1
- /**
2
- * Commit Transaction Processing for Ordinals
3
- *
4
- * This module implements the commit transaction process for ordinals inscriptions.
5
- * It handles the generation of the commit address and preparation of the commit transaction.
6
- *
7
- * Ported from legacy ordinalsplus transaction infrastructure.
8
- */
9
- import * as btc from '@scure/btc-signer';
10
- import * as ordinals from 'micro-ordinals';
11
- import { schnorr } from '@noble/curves/secp256k1';
12
- import { calculateFee } from '../fee-calculation.js';
13
- import { selectUtxos } from '../utxo-selection.js';
14
- // Define minimum dust limit (satoshis)
15
- const MIN_DUST_LIMIT = 546;
16
- // Maximum iterations for UTXO reselection to prevent infinite loops
17
- const MAX_SELECTION_ITERATIONS = 5;
18
- /**
19
- * Get @scure/btc-signer network configuration
20
- */
21
- function getScureNetwork(network) {
22
- switch (network) {
23
- case 'mainnet':
24
- return btc.NETWORK;
25
- case 'testnet':
26
- case 'signet':
27
- case 'regtest':
28
- return btc.TEST_NETWORK;
29
- default:
30
- return btc.NETWORK;
31
- }
32
- }
33
- /**
34
- * Validates that a UTXO has all required fields for spending
35
- *
36
- * @param utxo - The UTXO to validate
37
- * @returns true if the UTXO is valid and spendable, false otherwise
38
- */
39
- function isValidSpendableUtxo(utxo) {
40
- return !!(utxo.txid &&
41
- typeof utxo.vout === 'number' &&
42
- utxo.value > 0 &&
43
- utxo.scriptPubKey &&
44
- utxo.scriptPubKey.length > 0);
45
- }
46
- /**
47
- * Estimates the size of a commit transaction
48
- *
49
- * @param inputCount - Number of transaction inputs
50
- * @param outputCount - Number of transaction outputs (including commit and change)
51
- * @returns Estimated transaction size in virtual bytes
52
- */
53
- function estimateCommitTxSize(inputCount, outputCount) {
54
- // Transaction overhead
55
- const overhead = 10.5;
56
- // P2WPKH inputs (assuming most common case)
57
- const inputSize = 68 * inputCount;
58
- // P2TR output for commit and P2WPKH for change
59
- const commitOutputSize = 43; // P2TR output
60
- const changeOutputSize = outputCount > 1 ? 31 * (outputCount - 1) : 0; // P2WPKH outputs for change
61
- return Math.ceil(overhead + inputSize + commitOutputSize + changeOutputSize);
62
- }
63
- /**
64
- * Creates a commit transaction for an ordinals inscription
65
- *
66
- * This function:
67
- * 1. Validates and filters UTXOs to ensure they are spendable
68
- * 2. Creates an inscription with the provided content
69
- * 3. Generates a reveal keypair and script
70
- * 4. Creates a P2TR commit address
71
- * 5. Selects UTXOs to fund the transaction (with iterative reselection if needed)
72
- * 6. Builds a PSBT with commit output and change
73
- *
74
- * The function ensures that:
75
- * - All selected UTXOs have valid scriptPubKey fields
76
- * - Total input value always covers output value + fees
77
- * - UTXO selection is re-run if fee increases after accurate calculation
78
- *
79
- * @param params - Parameters for the commit transaction
80
- * @returns Complete information for the prepared commit transaction
81
- * @throws Error if no valid UTXOs are available or insufficient funds
82
- */
83
- export async function createCommitTransaction(params) {
84
- const { content, contentType, utxos, changeAddress, feeRate, network, minimumCommitAmount = MIN_DUST_LIMIT, metadata, pointer } = params;
85
- // Validate inputs
86
- if (!utxos || utxos.length === 0) {
87
- throw new Error('No UTXOs provided to fund the transaction.');
88
- }
89
- if (!content || content.length === 0) {
90
- throw new Error('Invalid inscription: missing content.');
91
- }
92
- if (!contentType) {
93
- throw new Error('Invalid inscription: missing content type.');
94
- }
95
- if (!changeAddress) {
96
- throw new Error('Change address is required.');
97
- }
98
- if (feeRate <= 0) {
99
- throw new Error(`Invalid fee rate: ${feeRate}`);
100
- }
101
- // CRITICAL: Pre-filter UTXOs to ensure all have valid scriptPubKey
102
- // This prevents silent failures where UTXOs are selected but can't be spent
103
- const validUtxos = utxos.filter(isValidSpendableUtxo);
104
- if (validUtxos.length === 0) {
105
- const invalidCount = utxos.length;
106
- const invalidReasons = [];
107
- utxos.forEach((utxo, idx) => {
108
- if (!utxo.scriptPubKey || utxo.scriptPubKey.length === 0) {
109
- invalidReasons.push(`UTXO ${idx} (${utxo.txid}:${utxo.vout}): missing scriptPubKey`);
110
- }
111
- else if (!utxo.txid) {
112
- invalidReasons.push(`UTXO ${idx}: missing txid`);
113
- }
114
- else if (typeof utxo.vout !== 'number') {
115
- invalidReasons.push(`UTXO ${idx} (${utxo.txid}): missing or invalid vout`);
116
- }
117
- else if (utxo.value <= 0) {
118
- invalidReasons.push(`UTXO ${idx} (${utxo.txid}:${utxo.vout}): invalid value (${utxo.value})`);
119
- }
120
- });
121
- throw new Error(`No valid spendable UTXOs available. ${invalidCount} UTXO(s) provided but all are invalid:\n` +
122
- invalidReasons.slice(0, 5).join('\n') +
123
- (invalidReasons.length > 5 ? `\n... and ${invalidReasons.length - 5} more` : ''));
124
- }
125
- // Log filtered UTXOs for debugging
126
- if (validUtxos.length < utxos.length) {
127
- const filteredCount = utxos.length - validUtxos.length;
128
- console.warn(`Filtered out ${filteredCount} invalid UTXO(s). ${validUtxos.length} valid UTXO(s) remain.`);
129
- }
130
- // Step 1: Create the inscription object
131
- const tags = {
132
- contentType
133
- };
134
- // Add metadata if provided
135
- if (metadata && Object.keys(metadata).length > 0) {
136
- tags.metadata = metadata;
137
- }
138
- // Add pointer if provided
139
- if (typeof pointer !== 'undefined') {
140
- tags.pointer = pointer;
141
- }
142
- const inscription = {
143
- tags,
144
- body: new Uint8Array(content)
145
- };
146
- // Step 2: Generate a reveal keypair
147
- // Use random private key for reveal transaction
148
- const revealPrivateKey = schnorr.utils.randomPrivateKey();
149
- const revealPublicKey = schnorr.getPublicKey(revealPrivateKey);
150
- // Step 3: Create the inscription script tree using micro-ordinals
151
- const scriptTree = ordinals.p2tr_ord_reveal(revealPublicKey, [inscription]);
152
- // Step 4: Create P2TR address for the commit output
153
- const scureNetwork = getScureNetwork(network);
154
- // Create taproot output using the inscription script tree
155
- // Use the reveal public key as the internal key
156
- const taprootPayment = btc.p2tr(revealPublicKey, // internal key
157
- scriptTree, // script tree
158
- scureNetwork, false, // allowUnknownOutputs
159
- [ordinals.OutOrdinalReveal] // customScripts
160
- );
161
- if (!taprootPayment.address) {
162
- throw new Error('Failed to generate P2TR commit address');
163
- }
164
- const commitAddress = taprootPayment.address;
165
- // Extract script information from the taproot payment
166
- if (!taprootPayment.leaves || taprootPayment.leaves.length === 0) {
167
- throw new Error('Failed to extract taproot leaves from P2TR payment');
168
- }
169
- const leaf = taprootPayment.leaves[0];
170
- const leafVersion = leaf.version ?? 0xc0;
171
- // Compute control block from leaf data
172
- // The control block is: version byte | internal key (32 bytes) | merkle path
173
- const controlBlock = btc.TaprootControlBlock.encode({
174
- version: leafVersion,
175
- internalKey: revealPublicKey,
176
- merklePath: leaf.path
177
- });
178
- // Step 5: Calculate minimum amount needed for the commit output
179
- const commitOutputValue = Math.max(minimumCommitAmount, MIN_DUST_LIMIT);
180
- // Step 6: Iterative UTXO selection with fee recalculation
181
- // This ensures that after we know the actual input count, we have enough funds
182
- let selectedUtxos = [];
183
- let totalInputValue = 0;
184
- let estimatedFee = 0;
185
- let iteration = 0;
186
- // Start with initial estimate (1 input, 2 outputs)
187
- let targetAmount = commitOutputValue + Number(calculateFee(estimateCommitTxSize(1, 2), feeRate));
188
- while (iteration < MAX_SELECTION_ITERATIONS) {
189
- iteration++;
190
- // Select UTXOs based on current target amount
191
- const options = {
192
- targetAmount
193
- };
194
- try {
195
- const selectionResult = selectUtxos(validUtxos, options);
196
- selectedUtxos = selectionResult.selectedUtxos;
197
- totalInputValue = selectionResult.totalInputValue;
198
- }
199
- catch (error) {
200
- throw new Error(`Insufficient funds. Need ${targetAmount} sats for commit output (${commitOutputValue} sats) and estimated fees. ` +
201
- `Available: ${validUtxos.reduce((sum, u) => sum + u.value, 0)} sats from ${validUtxos.length} valid UTXO(s). ` +
202
- `${error instanceof Error ? error.message : 'Unknown error'}`);
203
- }
204
- // Calculate accurate fee based on actual selected input count
205
- // Assume 2 outputs (commit + change) for now - we'll adjust later if no change
206
- const actualInputCount = selectedUtxos.length;
207
- const estimatedVBytes = estimateCommitTxSize(actualInputCount, 2);
208
- estimatedFee = Number(calculateFee(estimatedVBytes, feeRate));
209
- // Check if we need to account for no change output
210
- const potentialChange = totalInputValue - commitOutputValue - estimatedFee;
211
- let finalOutputCount = 2;
212
- if (potentialChange < MIN_DUST_LIMIT) {
213
- // No change output, recalculate fee with 1 output
214
- finalOutputCount = 1;
215
- const adjustedVBytes = estimateCommitTxSize(actualInputCount, finalOutputCount);
216
- estimatedFee = Number(calculateFee(adjustedVBytes, feeRate));
217
- }
218
- // Check if we have enough funds with the accurate fee calculation
219
- const requiredTotal = commitOutputValue + estimatedFee;
220
- if (totalInputValue >= requiredTotal) {
221
- // We have enough funds, break out of loop
222
- break;
223
- }
224
- // Not enough funds, need to reselect with higher target
225
- // Add a small buffer (5%) to account for potential fee variations
226
- targetAmount = Math.ceil(requiredTotal * 1.05);
227
- if (iteration >= MAX_SELECTION_ITERATIONS) {
228
- throw new Error(`Unable to select sufficient UTXOs after ${MAX_SELECTION_ITERATIONS} iterations. ` +
229
- `Required: ${requiredTotal} sats (commit: ${commitOutputValue}, fee: ${estimatedFee}), ` +
230
- `Selected: ${totalInputValue} sats from ${selectedUtxos.length} UTXO(s). ` +
231
- `Total available: ${validUtxos.reduce((sum, u) => sum + u.value, 0)} sats from ${validUtxos.length} valid UTXO(s).`);
232
- }
233
- }
234
- // Final validation: ensure we have selected UTXOs
235
- if (!selectedUtxos || selectedUtxos.length === 0) {
236
- throw new Error('No UTXOs selected for the transaction after selection process.');
237
- }
238
- // Step 7: Create transaction using @scure/btc-signer
239
- const tx = new btc.Transaction();
240
- // Add inputs - all selected UTXOs are already validated to have scriptPubKey
241
- for (const utxo of selectedUtxos) {
242
- // This check is now redundant due to pre-filtering, but kept as defense-in-depth
243
- if (!utxo.scriptPubKey) {
244
- throw new Error(`CRITICAL ERROR: Selected UTXO ${utxo.txid}:${utxo.vout} is missing scriptPubKey. ` +
245
- `This should never happen due to pre-filtering. Please report this bug.`);
246
- }
247
- tx.addInput({
248
- txid: utxo.txid,
249
- index: utxo.vout,
250
- witnessUtxo: {
251
- script: Buffer.from(utxo.scriptPubKey, 'hex'),
252
- amount: BigInt(utxo.value)
253
- }
254
- });
255
- }
256
- // Verify input count matches selected UTXOs
257
- if (tx.inputsLength !== selectedUtxos.length) {
258
- throw new Error(`Input count mismatch: expected ${selectedUtxos.length} inputs but transaction has ${tx.inputsLength}. ` +
259
- `This indicates a critical error in transaction construction.`);
260
- }
261
- // Step 8: Calculate final fee based on actual transaction structure
262
- const actualInputCount = tx.inputsLength;
263
- // Determine if we'll have a change output
264
- const preliminaryChange = totalInputValue - commitOutputValue - estimatedFee;
265
- const willHaveChange = preliminaryChange >= MIN_DUST_LIMIT;
266
- const finalOutputCount = willHaveChange ? 2 : 1;
267
- // Calculate final fee with correct output count
268
- const finalVBytes = estimateCommitTxSize(actualInputCount, finalOutputCount);
269
- const finalFee = Number(calculateFee(finalVBytes, feeRate));
270
- // CRITICAL: Final validation that inputs cover outputs + fees
271
- const finalChange = totalInputValue - commitOutputValue - finalFee;
272
- if (finalChange < 0) {
273
- throw new Error(`CRITICAL ERROR: Outputs exceed inputs! ` +
274
- `Inputs: ${totalInputValue} sats, ` +
275
- `Outputs: ${commitOutputValue} sats (commit) + ${finalFee} sats (fee) = ${commitOutputValue + finalFee} sats. ` +
276
- `Deficit: ${Math.abs(finalChange)} sats. ` +
277
- `This should never happen due to iterative selection. Please report this bug.`);
278
- }
279
- // Step 9: Add the commit output using the P2TR address
280
- tx.addOutputAddress(commitAddress, BigInt(commitOutputValue), scureNetwork);
281
- // Step 10: Add change output if above dust limit
282
- if (finalChange >= MIN_DUST_LIMIT) {
283
- tx.addOutputAddress(changeAddress, BigInt(finalChange), scureNetwork);
284
- }
285
- else if (finalChange > 0) {
286
- // If change is below dust limit, it's effectively added to the fee
287
- console.log(`Change amount ${finalChange} sats is below dust limit (${MIN_DUST_LIMIT} sats), adding to fee. ` +
288
- `Final fee: ${finalFee + finalChange} sats.`);
289
- }
290
- // Step 11: Get the PSBT as base64
291
- const txPsbt = tx.toPSBT();
292
- const commitPsbtBase64 = typeof txPsbt === 'string' ? txPsbt : Buffer.from(txPsbt).toString('base64');
293
- return {
294
- commitAddress,
295
- commitPsbtBase64,
296
- commitPsbt: tx,
297
- commitAmount: commitOutputValue,
298
- selectedUtxos,
299
- fees: {
300
- // Include dust in final fee if no change output
301
- commit: finalChange >= MIN_DUST_LIMIT ? finalFee : finalFee + finalChange
302
- },
303
- revealPrivateKey: Buffer.from(revealPrivateKey).toString('hex'),
304
- revealPublicKey: Buffer.from(revealPublicKey).toString('hex'),
305
- inscriptionScript: {
306
- script: leaf.script,
307
- controlBlock,
308
- leafVersion
309
- }
310
- };
311
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * Bitcoin Transactions
3
- *
4
- * This directory contains modules for creating and managing Bitcoin transactions,
5
- * particularly for Ordinals inscriptions.
6
- */
7
- export { createCommitTransaction, type CommitTransactionParams, type CommitTransactionResult } from './commit.js';
@@ -1,8 +0,0 @@
1
- /**
2
- * Bitcoin Transactions
3
- *
4
- * This directory contains modules for creating and managing Bitcoin transactions,
5
- * particularly for Ordinals inscriptions.
6
- */
7
- // Export commit transaction functionality
8
- export { createCommitTransaction } from './commit.js';
@@ -1,9 +0,0 @@
1
- import { BitcoinTransaction, Utxo } from '../types';
2
- import { SelectionOptions, SelectionResult } from './utxo';
3
- export interface BuildTransferOptions extends Omit<SelectionOptions, 'targetAmountSats' | 'feeRateSatsPerVb'> {
4
- changeAddress?: string;
5
- }
6
- export declare function buildTransferTransaction(availableUtxos: Utxo[], recipientAddress: string, amountSats: number, feeRateSatsPerVb: number, options?: BuildTransferOptions): {
7
- tx: BitcoinTransaction;
8
- selection: SelectionResult;
9
- };
@@ -1,26 +0,0 @@
1
- import { DUST_LIMIT_SATS } from '../types';
2
- import { selectUtxos } from './utxo';
3
- export function buildTransferTransaction(availableUtxos, recipientAddress, amountSats, feeRateSatsPerVb, options = {}) {
4
- const selection = selectUtxos(availableUtxos, {
5
- targetAmountSats: amountSats,
6
- feeRateSatsPerVb,
7
- allowLocked: options.allowLocked,
8
- forbidInscriptionBearingInputs: options.forbidInscriptionBearingInputs,
9
- changeAddress: options.changeAddress,
10
- feeEstimate: options.feeEstimate
11
- });
12
- const vin = selection.selected.map(u => ({ txid: u.txid, vout: u.vout }));
13
- const outputs = [];
14
- outputs.push({ value: amountSats, scriptPubKey: 'script', address: recipientAddress });
15
- if (selection.changeSats >= DUST_LIMIT_SATS) {
16
- const changeAddress = options.changeAddress || (selection.selected.find(u => !!u.address)?.address ?? 'change');
17
- outputs.push({ value: selection.changeSats, scriptPubKey: 'script', address: changeAddress });
18
- }
19
- const tx = {
20
- txid: '',
21
- vin,
22
- vout: outputs,
23
- fee: selection.feeSats
24
- };
25
- return { tx, selection };
26
- }