@arkade-os/sdk 0.4.26 → 0.4.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -125
- package/dist/adapters/asyncStorage.cjs +48 -0
- package/dist/adapters/asyncStorage.cjs.map +1 -0
- package/dist/adapters/asyncStorage.d.cts +16 -0
- package/dist/{types/storage → adapters}/asyncStorage.d.ts +5 -2
- package/dist/adapters/asyncStorage.js +46 -0
- package/dist/adapters/asyncStorage.js.map +1 -0
- package/dist/adapters/expo.cjs +19 -0
- package/dist/adapters/expo.cjs.map +1 -0
- package/dist/adapters/expo.d.cts +48 -0
- package/dist/adapters/expo.d.ts +48 -0
- package/dist/adapters/expo.js +6 -0
- package/dist/adapters/expo.js.map +1 -0
- package/dist/adapters/fileSystem.cjs +116 -0
- package/dist/adapters/fileSystem.cjs.map +1 -0
- package/dist/adapters/fileSystem.d.cts +17 -0
- package/dist/{types/storage → adapters}/fileSystem.d.ts +5 -2
- package/dist/adapters/fileSystem.js +93 -0
- package/dist/adapters/fileSystem.js.map +1 -0
- package/dist/adapters/indexedDB.cjs +103 -0
- package/dist/adapters/indexedDB.cjs.map +1 -0
- package/dist/adapters/indexedDB.d.cts +18 -0
- package/dist/{types/storage → adapters}/indexedDB.d.ts +5 -2
- package/dist/adapters/indexedDB.js +101 -0
- package/dist/adapters/indexedDB.js.map +1 -0
- package/dist/adapters/localStorage.cjs +50 -0
- package/dist/adapters/localStorage.cjs.map +1 -0
- package/dist/{types/storage/inMemory.d.ts → adapters/localStorage.d.cts} +6 -3
- package/dist/{types/storage → adapters}/localStorage.d.ts +5 -2
- package/dist/adapters/localStorage.js +48 -0
- package/dist/adapters/localStorage.js.map +1 -0
- package/dist/ark-TZ1gXAXU.d.cts +3880 -0
- package/dist/ark-TZ1gXAXU.d.ts +3880 -0
- package/dist/{types/worker/expo/asyncStorageTaskQueue.d.ts → asyncStorageTaskQueue-Cb1F_Z9s.d.ts} +6 -3
- package/dist/asyncStorageTaskQueue-EFqSmYTg.d.cts +49 -0
- package/dist/chunk-5BLDMQED.cjs +18 -0
- package/dist/chunk-5BLDMQED.cjs.map +1 -0
- package/dist/chunk-5PG7DV7A.cjs +805 -0
- package/dist/chunk-5PG7DV7A.cjs.map +1 -0
- package/dist/chunk-A3EMF7RN.js +95 -0
- package/dist/chunk-A3EMF7RN.js.map +1 -0
- package/dist/chunk-ADV27S4N.cjs +2701 -0
- package/dist/chunk-ADV27S4N.cjs.map +1 -0
- package/dist/chunk-BQLHADL7.js +13805 -0
- package/dist/chunk-BQLHADL7.js.map +1 -0
- package/dist/chunk-CFZMTDWI.js +209 -0
- package/dist/chunk-CFZMTDWI.js.map +1 -0
- package/dist/chunk-FG5ACJJW.cjs +212 -0
- package/dist/chunk-FG5ACJJW.cjs.map +1 -0
- package/dist/chunk-HW3JJ323.js +768 -0
- package/dist/chunk-HW3JJ323.js.map +1 -0
- package/dist/chunk-I3DGUUCT.cjs +838 -0
- package/dist/chunk-I3DGUUCT.cjs.map +1 -0
- package/dist/chunk-IPX2R7FR.cjs +100 -0
- package/dist/chunk-IPX2R7FR.cjs.map +1 -0
- package/dist/chunk-NSBPE2FW.js +15 -0
- package/dist/chunk-NSBPE2FW.js.map +1 -0
- package/dist/chunk-T64LAI7L.js +829 -0
- package/dist/chunk-T64LAI7L.js.map +1 -0
- package/dist/chunk-ZBUDLTBO.js +2671 -0
- package/dist/chunk-ZBUDLTBO.js.map +1 -0
- package/dist/chunk-ZLO6NETT.cjs +13910 -0
- package/dist/chunk-ZLO6NETT.cjs.map +1 -0
- package/dist/contracts/handlers/index.cjs +26 -0
- package/dist/contracts/handlers/index.cjs.map +1 -0
- package/dist/contracts/handlers/index.d.cts +7 -0
- package/dist/contracts/handlers/index.d.ts +7 -0
- package/dist/contracts/handlers/index.js +5 -0
- package/dist/contracts/handlers/index.js.map +1 -0
- package/dist/delegate-BFZs69hp.d.cts +84 -0
- package/dist/delegate-aaVGfWsV.d.ts +84 -0
- package/dist/index-B22cA64m.d.cts +199 -0
- package/dist/{types/storage/index.d.ts → index-C0IanN1m.d.cts} +3 -1
- package/dist/index-C0IanN1m.d.ts +11 -0
- package/dist/index-NDla_UoJ.d.ts +199 -0
- package/dist/index.cjs +480 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +3343 -0
- package/dist/index.d.ts +3343 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/repositories/realm/index.cjs +513 -0
- package/dist/repositories/realm/index.cjs.map +1 -0
- package/dist/repositories/realm/index.d.cts +217 -0
- package/dist/{types/repositories/realm/schemas.d.ts → repositories/realm/index.d.ts} +80 -112
- package/dist/repositories/realm/index.js +507 -0
- package/dist/repositories/realm/index.js.map +1 -0
- package/dist/repositories/sqlite/index.cjs +588 -0
- package/dist/repositories/sqlite/index.cjs.map +1 -0
- package/dist/repositories/sqlite/index.d.cts +118 -0
- package/dist/{types/repositories/sqlite/walletRepository.d.ts → repositories/sqlite/index.d.ts} +58 -5
- package/dist/repositories/sqlite/index.js +585 -0
- package/dist/repositories/sqlite/index.js.map +1 -0
- package/dist/taskRunner-C6Ff4OaU.d.cts +114 -0
- package/dist/taskRunner-yvPN8Z0K.d.ts +114 -0
- package/dist/wallet/expo/background.cjs +93 -0
- package/dist/wallet/expo/background.cjs.map +1 -0
- package/dist/wallet/expo/background.d.cts +84 -0
- package/dist/wallet/expo/background.d.ts +84 -0
- package/dist/wallet/expo/background.js +68 -0
- package/dist/wallet/expo/background.js.map +1 -0
- package/dist/wallet/expo/index.cjs +171 -0
- package/dist/wallet/expo/index.cjs.map +1 -0
- package/dist/wallet/expo/index.d.cts +122 -0
- package/dist/{types/wallet/expo/wallet.d.ts → wallet/expo/index.d.ts} +45 -22
- package/dist/wallet/expo/index.js +169 -0
- package/dist/wallet/expo/index.js.map +1 -0
- package/dist/wallet-AF-p-OWj.d.cts +774 -0
- package/dist/wallet-D9NBRqvC.d.ts +774 -0
- package/dist/worker/expo/index.cjs +140 -0
- package/dist/worker/expo/index.cjs.map +1 -0
- package/dist/worker/expo/index.d.cts +29 -0
- package/dist/worker/expo/index.d.ts +29 -0
- package/dist/worker/expo/index.js +121 -0
- package/dist/worker/expo/index.js.map +1 -0
- package/package.json +110 -76
- package/dist/cjs/adapters/asyncStorage.js +0 -5
- package/dist/cjs/adapters/expo.js +0 -8
- package/dist/cjs/adapters/fileSystem.js +0 -5
- package/dist/cjs/adapters/indexedDB.js +0 -5
- package/dist/cjs/adapters/localStorage.js +0 -5
- package/dist/cjs/arkfee/celenv.js +0 -43
- package/dist/cjs/arkfee/estimator.js +0 -143
- package/dist/cjs/arkfee/index.js +0 -5
- package/dist/cjs/arkfee/types.js +0 -26
- package/dist/cjs/arknote/index.js +0 -128
- package/dist/cjs/bip322/index.js +0 -270
- package/dist/cjs/contracts/arkcontract.js +0 -147
- package/dist/cjs/contracts/contractManager.js +0 -629
- package/dist/cjs/contracts/contractWatcher.js +0 -598
- package/dist/cjs/contracts/handlers/default.js +0 -93
- package/dist/cjs/contracts/handlers/delegate.js +0 -90
- package/dist/cjs/contracts/handlers/helpers.js +0 -115
- package/dist/cjs/contracts/handlers/index.js +0 -19
- package/dist/cjs/contracts/handlers/registry.js +0 -89
- package/dist/cjs/contracts/handlers/vhtlc.js +0 -194
- package/dist/cjs/contracts/index.js +0 -41
- package/dist/cjs/contracts/types.js +0 -2
- package/dist/cjs/contracts/vtxoOwnership.js +0 -78
- package/dist/cjs/extension/asset/assetGroup.js +0 -228
- package/dist/cjs/extension/asset/assetId.js +0 -152
- package/dist/cjs/extension/asset/assetInput.js +0 -222
- package/dist/cjs/extension/asset/assetOutput.js +0 -174
- package/dist/cjs/extension/asset/assetRef.js +0 -148
- package/dist/cjs/extension/asset/index.js +0 -23
- package/dist/cjs/extension/asset/metadata.js +0 -187
- package/dist/cjs/extension/asset/packet.js +0 -114
- package/dist/cjs/extension/asset/types.js +0 -22
- package/dist/cjs/extension/asset/utils.js +0 -105
- package/dist/cjs/extension/index.js +0 -254
- package/dist/cjs/extension/packet.js +0 -20
- package/dist/cjs/forfeit.js +0 -45
- package/dist/cjs/identity/descriptor.js +0 -169
- package/dist/cjs/identity/descriptorProvider.js +0 -2
- package/dist/cjs/identity/hdCapableIdentity.js +0 -2
- package/dist/cjs/identity/index.js +0 -38
- package/dist/cjs/identity/seedIdentity.js +0 -461
- package/dist/cjs/identity/serialize.js +0 -171
- package/dist/cjs/identity/singleKey.js +0 -126
- package/dist/cjs/identity/staticDescriptorProvider.js +0 -65
- package/dist/cjs/index.js +0 -200
- package/dist/cjs/intent/index.js +0 -259
- package/dist/cjs/musig2/index.js +0 -11
- package/dist/cjs/musig2/keys.js +0 -57
- package/dist/cjs/musig2/nonces.js +0 -48
- package/dist/cjs/musig2/sign.js +0 -102
- package/dist/cjs/networks.js +0 -26
- package/dist/cjs/package.json +0 -3
- package/dist/cjs/providers/ark.js +0 -577
- package/dist/cjs/providers/delegator.js +0 -85
- package/dist/cjs/providers/electrum.js +0 -869
- package/dist/cjs/providers/errors.js +0 -59
- package/dist/cjs/providers/expoArk.js +0 -82
- package/dist/cjs/providers/expoIndexer.js +0 -111
- package/dist/cjs/providers/expoUtils.js +0 -124
- package/dist/cjs/providers/indexer.js +0 -630
- package/dist/cjs/providers/onchain.js +0 -262
- package/dist/cjs/providers/utils.js +0 -121
- package/dist/cjs/repositories/contractRepository.js +0 -2
- package/dist/cjs/repositories/inMemory/contractRepository.js +0 -55
- package/dist/cjs/repositories/inMemory/walletRepository.js +0 -115
- package/dist/cjs/repositories/index.js +0 -34
- package/dist/cjs/repositories/indexedDB/contractRepository.js +0 -187
- package/dist/cjs/repositories/indexedDB/db.js +0 -19
- package/dist/cjs/repositories/indexedDB/manager.js +0 -100
- package/dist/cjs/repositories/indexedDB/schema.js +0 -204
- package/dist/cjs/repositories/indexedDB/walletRepository.js +0 -474
- package/dist/cjs/repositories/indexedDB/websqlAdapter.js +0 -144
- package/dist/cjs/repositories/migrations/contractRepositoryImpl.js +0 -127
- package/dist/cjs/repositories/migrations/fromStorageAdapter.js +0 -66
- package/dist/cjs/repositories/migrations/walletRepositoryImpl.js +0 -184
- package/dist/cjs/repositories/realm/contractRepository.js +0 -116
- package/dist/cjs/repositories/realm/index.js +0 -11
- package/dist/cjs/repositories/realm/schemas.js +0 -157
- package/dist/cjs/repositories/realm/types.js +0 -7
- package/dist/cjs/repositories/realm/walletRepository.js +0 -305
- package/dist/cjs/repositories/scriptFromAddress.js +0 -16
- package/dist/cjs/repositories/serialization.js +0 -82
- package/dist/cjs/repositories/sqlite/contractRepository.js +0 -135
- package/dist/cjs/repositories/sqlite/index.js +0 -7
- package/dist/cjs/repositories/sqlite/types.js +0 -2
- package/dist/cjs/repositories/sqlite/walletRepository.js +0 -441
- package/dist/cjs/repositories/walletRepository.js +0 -2
- package/dist/cjs/script/address.js +0 -108
- package/dist/cjs/script/base.js +0 -185
- package/dist/cjs/script/default.js +0 -57
- package/dist/cjs/script/delegate.js +0 -53
- package/dist/cjs/script/tapscript.js +0 -619
- package/dist/cjs/script/vhtlc.js +0 -170
- package/dist/cjs/storage/asyncStorage.js +0 -50
- package/dist/cjs/storage/fileSystem.js +0 -141
- package/dist/cjs/storage/inMemory.js +0 -24
- package/dist/cjs/storage/index.js +0 -2
- package/dist/cjs/storage/indexedDB.js +0 -101
- package/dist/cjs/storage/localStorage.js +0 -51
- package/dist/cjs/tree/signingSession.js +0 -229
- package/dist/cjs/tree/txTree.js +0 -192
- package/dist/cjs/tree/validation.js +0 -107
- package/dist/cjs/utils/anchor.js +0 -35
- package/dist/cjs/utils/arkTransaction.js +0 -271
- package/dist/cjs/utils/bip21.js +0 -127
- package/dist/cjs/utils/syncCursors.js +0 -128
- package/dist/cjs/utils/timelock.js +0 -59
- package/dist/cjs/utils/transaction.js +0 -28
- package/dist/cjs/utils/transactionHistory.js +0 -183
- package/dist/cjs/utils/txSizeEstimator.js +0 -132
- package/dist/cjs/utils/unknownFields.js +0 -174
- package/dist/cjs/wallet/asset-manager.js +0 -330
- package/dist/cjs/wallet/asset.js +0 -119
- package/dist/cjs/wallet/batch.js +0 -183
- package/dist/cjs/wallet/delegator.js +0 -302
- package/dist/cjs/wallet/expo/background.js +0 -116
- package/dist/cjs/wallet/expo/index.js +0 -9
- package/dist/cjs/wallet/expo/wallet.js +0 -230
- package/dist/cjs/wallet/hdDescriptorProvider.js +0 -159
- package/dist/cjs/wallet/index.js +0 -82
- package/dist/cjs/wallet/onchain.js +0 -290
- package/dist/cjs/wallet/ramps.js +0 -216
- package/dist/cjs/wallet/serviceWorker/wallet-message-handler.js +0 -953
- package/dist/cjs/wallet/serviceWorker/wallet.js +0 -1173
- package/dist/cjs/wallet/unroll.js +0 -289
- package/dist/cjs/wallet/utils.js +0 -111
- package/dist/cjs/wallet/validation.js +0 -154
- package/dist/cjs/wallet/vtxo-manager.js +0 -1142
- package/dist/cjs/wallet/wallet.js +0 -2049
- package/dist/cjs/worker/browser/service-worker-manager.js +0 -183
- package/dist/cjs/worker/browser/utils.js +0 -67
- package/dist/cjs/worker/errors.js +0 -16
- package/dist/cjs/worker/expo/asyncStorageTaskQueue.js +0 -78
- package/dist/cjs/worker/expo/index.js +0 -13
- package/dist/cjs/worker/expo/processors/contractPollProcessor.js +0 -62
- package/dist/cjs/worker/expo/processors/index.js +0 -6
- package/dist/cjs/worker/expo/taskQueue.js +0 -41
- package/dist/cjs/worker/expo/taskRunner.js +0 -73
- package/dist/cjs/worker/messageBus.js +0 -473
- package/dist/esm/adapters/asyncStorage.js +0 -1
- package/dist/esm/adapters/expo.js +0 -3
- package/dist/esm/adapters/fileSystem.js +0 -1
- package/dist/esm/adapters/indexedDB.js +0 -1
- package/dist/esm/adapters/localStorage.js +0 -1
- package/dist/esm/arkfee/celenv.js +0 -40
- package/dist/esm/arkfee/estimator.js +0 -139
- package/dist/esm/arkfee/index.js +0 -1
- package/dist/esm/arkfee/types.js +0 -22
- package/dist/esm/arknote/index.js +0 -124
- package/dist/esm/bip322/index.js +0 -267
- package/dist/esm/contracts/arkcontract.js +0 -140
- package/dist/esm/contracts/contractManager.js +0 -625
- package/dist/esm/contracts/contractWatcher.js +0 -594
- package/dist/esm/contracts/handlers/default.js +0 -90
- package/dist/esm/contracts/handlers/delegate.js +0 -87
- package/dist/esm/contracts/handlers/helpers.js +0 -110
- package/dist/esm/contracts/handlers/index.js +0 -12
- package/dist/esm/contracts/handlers/registry.js +0 -86
- package/dist/esm/contracts/handlers/vhtlc.js +0 -191
- package/dist/esm/contracts/index.js +0 -13
- package/dist/esm/contracts/types.js +0 -1
- package/dist/esm/contracts/vtxoOwnership.js +0 -69
- package/dist/esm/extension/asset/assetGroup.js +0 -224
- package/dist/esm/extension/asset/assetId.js +0 -148
- package/dist/esm/extension/asset/assetInput.js +0 -217
- package/dist/esm/extension/asset/assetOutput.js +0 -169
- package/dist/esm/extension/asset/assetRef.js +0 -144
- package/dist/esm/extension/asset/index.js +0 -8
- package/dist/esm/extension/asset/metadata.js +0 -182
- package/dist/esm/extension/asset/packet.js +0 -110
- package/dist/esm/extension/asset/types.js +0 -19
- package/dist/esm/extension/asset/utils.js +0 -99
- package/dist/esm/extension/index.js +0 -248
- package/dist/esm/extension/packet.js +0 -16
- package/dist/esm/forfeit.js +0 -41
- package/dist/esm/identity/descriptor.js +0 -161
- package/dist/esm/identity/descriptorProvider.js +0 -1
- package/dist/esm/identity/hdCapableIdentity.js +0 -1
- package/dist/esm/identity/index.js +0 -12
- package/dist/esm/identity/seedIdentity.js +0 -453
- package/dist/esm/identity/serialize.js +0 -164
- package/dist/esm/identity/singleKey.js +0 -121
- package/dist/esm/identity/staticDescriptorProvider.js +0 -61
- package/dist/esm/index.js +0 -87
- package/dist/esm/intent/index.js +0 -255
- package/dist/esm/musig2/index.js +0 -3
- package/dist/esm/musig2/keys.js +0 -21
- package/dist/esm/musig2/nonces.js +0 -11
- package/dist/esm/musig2/sign.js +0 -63
- package/dist/esm/networks.js +0 -22
- package/dist/esm/package.json +0 -3
- package/dist/esm/providers/ark.js +0 -572
- package/dist/esm/providers/delegator.js +0 -81
- package/dist/esm/providers/electrum.js +0 -864
- package/dist/esm/providers/errors.js +0 -54
- package/dist/esm/providers/expoArk.js +0 -78
- package/dist/esm/providers/expoIndexer.js +0 -107
- package/dist/esm/providers/expoUtils.js +0 -87
- package/dist/esm/providers/indexer.js +0 -626
- package/dist/esm/providers/onchain.js +0 -258
- package/dist/esm/providers/utils.js +0 -117
- package/dist/esm/repositories/contractRepository.js +0 -1
- package/dist/esm/repositories/inMemory/contractRepository.js +0 -51
- package/dist/esm/repositories/inMemory/walletRepository.js +0 -111
- package/dist/esm/repositories/index.js +0 -10
- package/dist/esm/repositories/indexedDB/contractRepository.js +0 -183
- package/dist/esm/repositories/indexedDB/db.js +0 -4
- package/dist/esm/repositories/indexedDB/manager.js +0 -95
- package/dist/esm/repositories/indexedDB/schema.js +0 -199
- package/dist/esm/repositories/indexedDB/walletRepository.js +0 -470
- package/dist/esm/repositories/indexedDB/websqlAdapter.js +0 -138
- package/dist/esm/repositories/migrations/contractRepositoryImpl.js +0 -121
- package/dist/esm/repositories/migrations/fromStorageAdapter.js +0 -58
- package/dist/esm/repositories/migrations/walletRepositoryImpl.js +0 -180
- package/dist/esm/repositories/realm/contractRepository.js +0 -112
- package/dist/esm/repositories/realm/index.js +0 -3
- package/dist/esm/repositories/realm/schemas.js +0 -153
- package/dist/esm/repositories/realm/types.js +0 -6
- package/dist/esm/repositories/realm/walletRepository.js +0 -301
- package/dist/esm/repositories/scriptFromAddress.js +0 -13
- package/dist/esm/repositories/serialization.js +0 -67
- package/dist/esm/repositories/sqlite/contractRepository.js +0 -131
- package/dist/esm/repositories/sqlite/index.js +0 -2
- package/dist/esm/repositories/sqlite/types.js +0 -1
- package/dist/esm/repositories/sqlite/walletRepository.js +0 -437
- package/dist/esm/repositories/walletRepository.js +0 -1
- package/dist/esm/script/address.js +0 -104
- package/dist/esm/script/base.js +0 -179
- package/dist/esm/script/default.js +0 -54
- package/dist/esm/script/delegate.js +0 -50
- package/dist/esm/script/tapscript.js +0 -615
- package/dist/esm/script/vhtlc.js +0 -167
- package/dist/esm/storage/asyncStorage.js +0 -46
- package/dist/esm/storage/fileSystem.js +0 -104
- package/dist/esm/storage/inMemory.js +0 -20
- package/dist/esm/storage/index.js +0 -1
- package/dist/esm/storage/indexedDB.js +0 -97
- package/dist/esm/storage/localStorage.js +0 -47
- package/dist/esm/tree/signingSession.js +0 -191
- package/dist/esm/tree/txTree.js +0 -188
- package/dist/esm/tree/validation.js +0 -101
- package/dist/esm/utils/anchor.js +0 -31
- package/dist/esm/utils/arkTransaction.js +0 -264
- package/dist/esm/utils/bip21.js +0 -123
- package/dist/esm/utils/syncCursors.js +0 -119
- package/dist/esm/utils/timelock.js +0 -22
- package/dist/esm/utils/transaction.js +0 -24
- package/dist/esm/utils/transactionHistory.js +0 -180
- package/dist/esm/utils/txSizeEstimator.js +0 -128
- package/dist/esm/utils/unknownFields.js +0 -169
- package/dist/esm/wallet/asset-manager.js +0 -325
- package/dist/esm/wallet/asset.js +0 -113
- package/dist/esm/wallet/batch.js +0 -180
- package/dist/esm/wallet/delegator.js +0 -297
- package/dist/esm/wallet/expo/background.js +0 -111
- package/dist/esm/wallet/expo/index.js +0 -2
- package/dist/esm/wallet/expo/wallet.js +0 -193
- package/dist/esm/wallet/hdDescriptorProvider.js +0 -155
- package/dist/esm/wallet/index.js +0 -75
- package/dist/esm/wallet/onchain.js +0 -285
- package/dist/esm/wallet/ramps.js +0 -212
- package/dist/esm/wallet/serviceWorker/wallet-message-handler.js +0 -946
- package/dist/esm/wallet/serviceWorker/wallet.js +0 -1168
- package/dist/esm/wallet/unroll.js +0 -285
- package/dist/esm/wallet/utils.js +0 -103
- package/dist/esm/wallet/validation.js +0 -142
- package/dist/esm/wallet/vtxo-manager.js +0 -1136
- package/dist/esm/wallet/wallet.js +0 -2041
- package/dist/esm/worker/browser/service-worker-manager.js +0 -177
- package/dist/esm/worker/browser/utils.js +0 -63
- package/dist/esm/worker/errors.js +0 -11
- package/dist/esm/worker/expo/asyncStorageTaskQueue.js +0 -74
- package/dist/esm/worker/expo/index.js +0 -4
- package/dist/esm/worker/expo/processors/contractPollProcessor.js +0 -59
- package/dist/esm/worker/expo/processors/index.js +0 -1
- package/dist/esm/worker/expo/taskQueue.js +0 -37
- package/dist/esm/worker/expo/taskRunner.js +0 -69
- package/dist/esm/worker/messageBus.js +0 -469
- package/dist/types/adapters/asyncStorage.d.ts +0 -2
- package/dist/types/adapters/expo.d.ts +0 -4
- package/dist/types/adapters/fileSystem.d.ts +0 -2
- package/dist/types/adapters/indexedDB.d.ts +0 -2
- package/dist/types/adapters/localStorage.d.ts +0 -2
- package/dist/types/arkfee/celenv.d.ts +0 -25
- package/dist/types/arkfee/estimator.d.ts +0 -49
- package/dist/types/arkfee/index.d.ts +0 -2
- package/dist/types/arkfee/types.d.ts +0 -38
- package/dist/types/arknote/index.d.ts +0 -84
- package/dist/types/bip322/index.d.ts +0 -55
- package/dist/types/contracts/arkcontract.d.ts +0 -99
- package/dist/types/contracts/contractManager.d.ts +0 -381
- package/dist/types/contracts/contractWatcher.d.ts +0 -217
- package/dist/types/contracts/handlers/default.d.ts +0 -19
- package/dist/types/contracts/handlers/delegate.d.ts +0 -21
- package/dist/types/contracts/handlers/helpers.d.ts +0 -19
- package/dist/types/contracts/handlers/index.d.ts +0 -7
- package/dist/types/contracts/handlers/registry.d.ts +0 -65
- package/dist/types/contracts/handlers/vhtlc.d.ts +0 -32
- package/dist/types/contracts/index.d.ts +0 -14
- package/dist/types/contracts/types.d.ts +0 -233
- package/dist/types/contracts/vtxoOwnership.d.ts +0 -33
- package/dist/types/extension/asset/assetGroup.d.ts +0 -119
- package/dist/types/extension/asset/assetId.d.ts +0 -83
- package/dist/types/extension/asset/assetInput.d.ts +0 -64
- package/dist/types/extension/asset/assetOutput.d.ts +0 -54
- package/dist/types/extension/asset/assetRef.d.ts +0 -91
- package/dist/types/extension/asset/index.d.ts +0 -8
- package/dist/types/extension/asset/metadata.d.ts +0 -52
- package/dist/types/extension/asset/packet.d.ts +0 -41
- package/dist/types/extension/asset/types.d.ts +0 -16
- package/dist/types/extension/asset/utils.d.ts +0 -21
- package/dist/types/extension/index.d.ts +0 -56
- package/dist/types/extension/packet.d.ts +0 -21
- package/dist/types/forfeit.d.ts +0 -18
- package/dist/types/identity/descriptor.d.ts +0 -61
- package/dist/types/identity/descriptorProvider.d.ts +0 -35
- package/dist/types/identity/hdCapableIdentity.d.ts +0 -44
- package/dist/types/identity/index.d.ts +0 -56
- package/dist/types/identity/seedIdentity.d.ts +0 -254
- package/dist/types/identity/serialize.d.ts +0 -96
- package/dist/types/identity/singleKey.d.ts +0 -62
- package/dist/types/identity/staticDescriptorProvider.d.ts +0 -18
- package/dist/types/index.d.ts +0 -59
- package/dist/types/intent/index.d.ts +0 -86
- package/dist/types/musig2/index.d.ts +0 -4
- package/dist/types/musig2/keys.d.ts +0 -9
- package/dist/types/musig2/nonces.d.ts +0 -14
- package/dist/types/musig2/sign.d.ts +0 -27
- package/dist/types/networks.d.ts +0 -16
- package/dist/types/providers/ark.d.ts +0 -369
- package/dist/types/providers/delegator.d.ts +0 -82
- package/dist/types/providers/electrum.d.ts +0 -312
- package/dist/types/providers/errors.d.ts +0 -13
- package/dist/types/providers/expoArk.d.ts +0 -22
- package/dist/types/providers/expoIndexer.d.ts +0 -18
- package/dist/types/providers/expoUtils.d.ts +0 -18
- package/dist/types/providers/indexer.d.ts +0 -301
- package/dist/types/providers/onchain.d.ts +0 -148
- package/dist/types/providers/utils.d.ts +0 -12
- package/dist/types/repositories/contractRepository.d.ts +0 -32
- package/dist/types/repositories/inMemory/contractRepository.d.ts +0 -17
- package/dist/types/repositories/inMemory/walletRepository.d.ts +0 -29
- package/dist/types/repositories/index.d.ts +0 -9
- package/dist/types/repositories/indexedDB/contractRepository.d.ts +0 -21
- package/dist/types/repositories/indexedDB/db.d.ts +0 -4
- package/dist/types/repositories/indexedDB/manager.d.ts +0 -25
- package/dist/types/repositories/indexedDB/schema.d.ts +0 -9
- package/dist/types/repositories/indexedDB/walletRepository.d.ts +0 -28
- package/dist/types/repositories/indexedDB/websqlAdapter.d.ts +0 -49
- package/dist/types/repositories/migrations/contractRepositoryImpl.d.ts +0 -24
- package/dist/types/repositories/migrations/fromStorageAdapter.d.ts +0 -19
- package/dist/types/repositories/migrations/walletRepositoryImpl.d.ts +0 -27
- package/dist/types/repositories/realm/contractRepository.d.ts +0 -24
- package/dist/types/repositories/realm/index.d.ts +0 -4
- package/dist/types/repositories/realm/types.d.ts +0 -16
- package/dist/types/repositories/realm/walletRepository.d.ts +0 -34
- package/dist/types/repositories/scriptFromAddress.d.ts +0 -9
- package/dist/types/repositories/serialization.d.ts +0 -65
- package/dist/types/repositories/sqlite/contractRepository.d.ts +0 -33
- package/dist/types/repositories/sqlite/index.d.ts +0 -3
- package/dist/types/repositories/sqlite/types.d.ts +0 -18
- package/dist/types/repositories/walletRepository.d.ts +0 -72
- package/dist/types/script/address.d.ts +0 -67
- package/dist/types/script/base.d.ts +0 -105
- package/dist/types/script/default.d.ts +0 -44
- package/dist/types/script/delegate.d.ts +0 -40
- package/dist/types/script/tapscript.d.ts +0 -169
- package/dist/types/script/vhtlc.d.ts +0 -66
- package/dist/types/tree/signingSession.d.ts +0 -37
- package/dist/types/tree/txTree.d.ts +0 -28
- package/dist/types/tree/validation.d.ts +0 -15
- package/dist/types/utils/anchor.d.ts +0 -19
- package/dist/types/utils/arkTransaction.d.ts +0 -49
- package/dist/types/utils/bip21.d.ts +0 -38
- package/dist/types/utils/syncCursors.d.ts +0 -60
- package/dist/types/utils/timelock.d.ts +0 -9
- package/dist/types/utils/transaction.d.ts +0 -13
- package/dist/types/utils/transactionHistory.d.ts +0 -15
- package/dist/types/utils/txSizeEstimator.d.ts +0 -40
- package/dist/types/utils/unknownFields.d.ts +0 -83
- package/dist/types/wallet/asset-manager.d.ts +0 -69
- package/dist/types/wallet/asset.d.ts +0 -21
- package/dist/types/wallet/batch.d.ts +0 -107
- package/dist/types/wallet/delegator.d.ts +0 -48
- package/dist/types/wallet/expo/background.d.ts +0 -66
- package/dist/types/wallet/expo/index.d.ts +0 -4
- package/dist/types/wallet/hdDescriptorProvider.d.ts +0 -93
- package/dist/types/wallet/index.d.ts +0 -755
- package/dist/types/wallet/onchain.d.ts +0 -109
- package/dist/types/wallet/ramps.d.ts +0 -64
- package/dist/types/wallet/serviceWorker/wallet-message-handler.d.ts +0 -543
- package/dist/types/wallet/serviceWorker/wallet.d.ts +0 -238
- package/dist/types/wallet/unroll.d.ts +0 -114
- package/dist/types/wallet/utils.d.ts +0 -36
- package/dist/types/wallet/validation.d.ts +0 -24
- package/dist/types/wallet/vtxo-manager.d.ts +0 -476
- package/dist/types/wallet/wallet.d.ts +0 -360
- package/dist/types/worker/browser/service-worker-manager.d.ts +0 -32
- package/dist/types/worker/browser/utils.d.ts +0 -17
- package/dist/types/worker/errors.d.ts +0 -7
- package/dist/types/worker/expo/index.d.ts +0 -7
- package/dist/types/worker/expo/processors/contractPollProcessor.d.ts +0 -19
- package/dist/types/worker/expo/processors/index.d.ts +0 -1
- package/dist/types/worker/expo/taskQueue.d.ts +0 -50
- package/dist/types/worker/expo/taskRunner.d.ts +0 -66
- package/dist/types/worker/messageBus.d.ts +0 -188
|
@@ -0,0 +1,768 @@
|
|
|
1
|
+
import * as bip68 from 'bip68';
|
|
2
|
+
import { hex, bech32m } from '@scure/base';
|
|
3
|
+
import { Script as Script$1 } from '@scure/btc-signer/script.js';
|
|
4
|
+
import { ScriptNum, p2tr_ms, Script, taprootListToTree, p2tr, TAPROOT_UNSPENDABLE_KEY, Address } from '@scure/btc-signer';
|
|
5
|
+
import { TAP_LEAF_VERSION } from '@scure/btc-signer/payment.js';
|
|
6
|
+
import { PSBTOutput } from '@scure/btc-signer/psbt.js';
|
|
7
|
+
|
|
8
|
+
// src/utils/timelock.ts
|
|
9
|
+
function timelockToSequence(timelock) {
|
|
10
|
+
return bip68.encode(
|
|
11
|
+
timelock.type === "blocks" ? { blocks: Number(timelock.value) } : { seconds: Number(timelock.value) }
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
function sequenceToTimelock(sequence) {
|
|
15
|
+
const decoded = bip68.decode(sequence);
|
|
16
|
+
if ("blocks" in decoded && decoded.blocks !== void 0) {
|
|
17
|
+
return { type: "blocks", value: BigInt(decoded.blocks) };
|
|
18
|
+
}
|
|
19
|
+
if ("seconds" in decoded && decoded.seconds !== void 0) {
|
|
20
|
+
return { type: "seconds", value: BigInt(decoded.seconds) };
|
|
21
|
+
}
|
|
22
|
+
throw new Error(`Invalid BIP68 sequence: ${sequence}`);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// src/wallet/index.ts
|
|
26
|
+
var DEFAULT_ARKADE_SERVER_URL = "https://arkade.computer";
|
|
27
|
+
var DEFAULT_ARKADE_HRP = "ark";
|
|
28
|
+
var DEFAULT_NETWORK_NAME = "bitcoin";
|
|
29
|
+
var TxType = /* @__PURE__ */ ((TxType2) => {
|
|
30
|
+
TxType2["TxSent"] = "SENT";
|
|
31
|
+
TxType2["TxReceived"] = "RECEIVED";
|
|
32
|
+
return TxType2;
|
|
33
|
+
})(TxType || {});
|
|
34
|
+
function isSpendable(vtxo) {
|
|
35
|
+
return !vtxo.isSpent;
|
|
36
|
+
}
|
|
37
|
+
function isRecoverable(vtxo) {
|
|
38
|
+
return vtxo.virtualStatus.state === "swept" && isSpendable(vtxo);
|
|
39
|
+
}
|
|
40
|
+
function isExpired(vtxo) {
|
|
41
|
+
if (vtxo.virtualStatus.state === "swept") return true;
|
|
42
|
+
const expiry = vtxo.virtualStatus.batchExpiry;
|
|
43
|
+
if (!expiry) return false;
|
|
44
|
+
const expireAt = new Date(expiry);
|
|
45
|
+
if (expireAt.getFullYear() < 2025) return false;
|
|
46
|
+
return expiry <= Date.now();
|
|
47
|
+
}
|
|
48
|
+
function isSubdust(vtxo, dust) {
|
|
49
|
+
return vtxo.value < dust;
|
|
50
|
+
}
|
|
51
|
+
var ArkAddress = class _ArkAddress {
|
|
52
|
+
/**
|
|
53
|
+
* Create an Arkade address from its server public key, Taproot output key, and prefix.
|
|
54
|
+
*
|
|
55
|
+
* @param serverPubKey - 32-byte Arkade server public key
|
|
56
|
+
* @param vtxoTaprootKey - 32-byte Taproot output key (a.k.a. tweaked public key)
|
|
57
|
+
* @param hrp - Bech32 human-readable prefix
|
|
58
|
+
* @param version - Address version byte
|
|
59
|
+
* @defaultValue `version = 0`
|
|
60
|
+
* @throws Error if either public key is not 32 bytes long
|
|
61
|
+
*/
|
|
62
|
+
constructor(serverPubKey, vtxoTaprootKey, hrp = DEFAULT_ARKADE_HRP, version = 0) {
|
|
63
|
+
this.serverPubKey = serverPubKey;
|
|
64
|
+
this.vtxoTaprootKey = vtxoTaprootKey;
|
|
65
|
+
this.hrp = hrp;
|
|
66
|
+
this.version = version;
|
|
67
|
+
if (serverPubKey.length !== 32) {
|
|
68
|
+
throw new Error(
|
|
69
|
+
"Invalid server public key length, expected 32 bytes, got " + serverPubKey.length
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
if (vtxoTaprootKey.length !== 32) {
|
|
73
|
+
throw new Error(
|
|
74
|
+
"Invalid vtxo taproot public key length, expected 32 bytes, got " + vtxoTaprootKey.length
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Decode an Arkade address from its bech32m string form.
|
|
80
|
+
*
|
|
81
|
+
* @param address - Bech32m-encoded Arkade address
|
|
82
|
+
* @returns Decoded Arkade address
|
|
83
|
+
* @throws Error if the address is malformed or has an invalid payload length
|
|
84
|
+
* @see encode
|
|
85
|
+
*/
|
|
86
|
+
static decode(address) {
|
|
87
|
+
const decoded = bech32m.decodeUnsafe(address, 1023);
|
|
88
|
+
if (!decoded) {
|
|
89
|
+
throw new Error("Invalid address");
|
|
90
|
+
}
|
|
91
|
+
const data = new Uint8Array(bech32m.fromWords(decoded.words));
|
|
92
|
+
if (data.length !== 1 + 32 + 32) {
|
|
93
|
+
throw new Error("Invalid data length, expected 65 bytes, got " + data.length);
|
|
94
|
+
}
|
|
95
|
+
const version = data[0];
|
|
96
|
+
const serverPubKey = data.slice(1, 33);
|
|
97
|
+
const vtxoTaprootPubKey = data.slice(33, 65);
|
|
98
|
+
return new _ArkAddress(serverPubKey, vtxoTaprootPubKey, decoded.prefix, version);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Encode the address to its bech32m string form.
|
|
102
|
+
*
|
|
103
|
+
* @returns Bech32m-encoded Arkade address
|
|
104
|
+
* @see decode
|
|
105
|
+
*/
|
|
106
|
+
encode() {
|
|
107
|
+
const data = new Uint8Array(1 + 32 + 32);
|
|
108
|
+
data[0] = this.version;
|
|
109
|
+
data.set(this.serverPubKey, 1);
|
|
110
|
+
data.set(this.vtxoTaprootKey, 33);
|
|
111
|
+
const words = bech32m.toWords(data);
|
|
112
|
+
return bech32m.encode(this.hrp, words, 1023);
|
|
113
|
+
}
|
|
114
|
+
/** ScriptPubKey used to send non-dust funds to the address. */
|
|
115
|
+
get pkScript() {
|
|
116
|
+
return Script$1.encode(["OP_1", this.vtxoTaprootKey]);
|
|
117
|
+
}
|
|
118
|
+
/** ScriptPubKey used to send sub-dust funds to the address. */
|
|
119
|
+
get subdustPkScript() {
|
|
120
|
+
return Script$1.encode(["RETURN", this.vtxoTaprootKey]);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
var MinimalScriptNum = ScriptNum(void 0, true);
|
|
124
|
+
function decodeTapscript(script) {
|
|
125
|
+
const types = [
|
|
126
|
+
MultisigTapscript,
|
|
127
|
+
CSVMultisigTapscript,
|
|
128
|
+
ConditionCSVMultisigTapscript,
|
|
129
|
+
ConditionMultisigTapscript,
|
|
130
|
+
CLTVMultisigTapscript
|
|
131
|
+
];
|
|
132
|
+
for (const type of types) {
|
|
133
|
+
try {
|
|
134
|
+
return type.decode(script);
|
|
135
|
+
} catch (error) {
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
throw new Error(`Failed to decode: script ${hex.encode(script)} is not a valid tapscript`);
|
|
140
|
+
}
|
|
141
|
+
var MultisigTapscript;
|
|
142
|
+
((MultisigTapscript2) => {
|
|
143
|
+
((MultisigType2) => {
|
|
144
|
+
MultisigType2[MultisigType2["CHECKSIG"] = 0] = "CHECKSIG";
|
|
145
|
+
MultisigType2[MultisigType2["CHECKSIGADD"] = 1] = "CHECKSIGADD";
|
|
146
|
+
})(MultisigTapscript2.MultisigType || (MultisigTapscript2.MultisigType = {}));
|
|
147
|
+
function encode2(params) {
|
|
148
|
+
if (params.pubkeys.length === 0) {
|
|
149
|
+
throw new Error("At least 1 pubkey is required");
|
|
150
|
+
}
|
|
151
|
+
for (const pubkey of params.pubkeys) {
|
|
152
|
+
if (pubkey.length !== 32) {
|
|
153
|
+
throw new Error(`Invalid pubkey length: expected 32, got ${pubkey.length}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (!params.type) {
|
|
157
|
+
params.type = 0 /* CHECKSIG */;
|
|
158
|
+
}
|
|
159
|
+
if (params.type === 1 /* CHECKSIGADD */) {
|
|
160
|
+
return {
|
|
161
|
+
type: "multisig" /* Multisig */,
|
|
162
|
+
params,
|
|
163
|
+
script: p2tr_ms(params.pubkeys.length, params.pubkeys).script
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
const asm = [];
|
|
167
|
+
for (let i = 0; i < params.pubkeys.length; i++) {
|
|
168
|
+
asm.push(params.pubkeys[i]);
|
|
169
|
+
if (i < params.pubkeys.length - 1) {
|
|
170
|
+
asm.push("CHECKSIGVERIFY");
|
|
171
|
+
} else {
|
|
172
|
+
asm.push("CHECKSIG");
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
type: "multisig" /* Multisig */,
|
|
177
|
+
params,
|
|
178
|
+
script: Script.encode(asm)
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
MultisigTapscript2.encode = encode2;
|
|
182
|
+
function decode2(script) {
|
|
183
|
+
if (script.length === 0) {
|
|
184
|
+
throw new Error("Failed to decode: script is empty");
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
return decodeChecksigAdd(script);
|
|
188
|
+
} catch (error) {
|
|
189
|
+
try {
|
|
190
|
+
return decodeChecksig(script);
|
|
191
|
+
} catch (error2) {
|
|
192
|
+
throw new Error(
|
|
193
|
+
`Failed to decode script: ${error2 instanceof Error ? error2.message : String(error2)}`
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
MultisigTapscript2.decode = decode2;
|
|
199
|
+
function decodeChecksigAdd(script) {
|
|
200
|
+
const asm = Script.decode(script);
|
|
201
|
+
const pubkeys = [];
|
|
202
|
+
let foundNumEqual = false;
|
|
203
|
+
for (let i = 0; i < asm.length; i++) {
|
|
204
|
+
const op = asm[i];
|
|
205
|
+
if (typeof op !== "string" && typeof op !== "number") {
|
|
206
|
+
if (op.length !== 32) {
|
|
207
|
+
throw new Error(`Invalid pubkey length: expected 32, got ${op.length}`);
|
|
208
|
+
}
|
|
209
|
+
pubkeys.push(op);
|
|
210
|
+
if (i + 1 >= asm.length || asm[i + 1] !== "CHECKSIGADD" && asm[i + 1] !== "CHECKSIG") {
|
|
211
|
+
throw new Error("Expected CHECKSIGADD or CHECKSIG after pubkey");
|
|
212
|
+
}
|
|
213
|
+
i++;
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
if (i === asm.length - 1) {
|
|
217
|
+
if (op !== "NUMEQUAL") {
|
|
218
|
+
throw new Error("Expected NUMEQUAL at end of script");
|
|
219
|
+
}
|
|
220
|
+
foundNumEqual = true;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (!foundNumEqual) {
|
|
224
|
+
throw new Error("Missing NUMEQUAL operation");
|
|
225
|
+
}
|
|
226
|
+
if (pubkeys.length === 0) {
|
|
227
|
+
throw new Error("Invalid script: must have at least 1 pubkey");
|
|
228
|
+
}
|
|
229
|
+
const reconstructed = encode2({
|
|
230
|
+
pubkeys,
|
|
231
|
+
type: 1 /* CHECKSIGADD */
|
|
232
|
+
});
|
|
233
|
+
if (hex.encode(reconstructed.script) !== hex.encode(script)) {
|
|
234
|
+
throw new Error("Invalid script format: script reconstruction mismatch");
|
|
235
|
+
}
|
|
236
|
+
return {
|
|
237
|
+
type: "multisig" /* Multisig */,
|
|
238
|
+
params: { pubkeys, type: 1 /* CHECKSIGADD */ },
|
|
239
|
+
script
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
function decodeChecksig(script) {
|
|
243
|
+
const asm = Script.decode(script);
|
|
244
|
+
const pubkeys = [];
|
|
245
|
+
for (let i = 0; i < asm.length; i++) {
|
|
246
|
+
const op = asm[i];
|
|
247
|
+
if (typeof op !== "string" && typeof op !== "number") {
|
|
248
|
+
if (op.length !== 32) {
|
|
249
|
+
throw new Error(`Invalid pubkey length: expected 32, got ${op.length}`);
|
|
250
|
+
}
|
|
251
|
+
pubkeys.push(op);
|
|
252
|
+
if (i + 1 >= asm.length) {
|
|
253
|
+
throw new Error("Unexpected end of script");
|
|
254
|
+
}
|
|
255
|
+
const nextOp = asm[i + 1];
|
|
256
|
+
if (nextOp !== "CHECKSIGVERIFY" && nextOp !== "CHECKSIG") {
|
|
257
|
+
throw new Error("Expected CHECKSIGVERIFY or CHECKSIG after pubkey");
|
|
258
|
+
}
|
|
259
|
+
if (i === asm.length - 2 && nextOp !== "CHECKSIG") {
|
|
260
|
+
throw new Error("Last operation must be CHECKSIG");
|
|
261
|
+
}
|
|
262
|
+
i++;
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
if (pubkeys.length === 0) {
|
|
267
|
+
throw new Error("Invalid script: must have at least 1 pubkey");
|
|
268
|
+
}
|
|
269
|
+
const reconstructed = encode2({ pubkeys, type: 0 /* CHECKSIG */ });
|
|
270
|
+
if (hex.encode(reconstructed.script) !== hex.encode(script)) {
|
|
271
|
+
throw new Error("Invalid script format: script reconstruction mismatch");
|
|
272
|
+
}
|
|
273
|
+
return {
|
|
274
|
+
type: "multisig" /* Multisig */,
|
|
275
|
+
params: { pubkeys, type: 0 /* CHECKSIG */ },
|
|
276
|
+
script
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
function is(tapscript) {
|
|
280
|
+
return tapscript.type === "multisig" /* Multisig */;
|
|
281
|
+
}
|
|
282
|
+
MultisigTapscript2.is = is;
|
|
283
|
+
})(MultisigTapscript || (MultisigTapscript = {}));
|
|
284
|
+
var CSVMultisigTapscript;
|
|
285
|
+
((CSVMultisigTapscript2) => {
|
|
286
|
+
function encode2(params) {
|
|
287
|
+
for (const pubkey of params.pubkeys) {
|
|
288
|
+
if (pubkey.length !== 32) {
|
|
289
|
+
throw new Error(`Invalid pubkey length: expected 32, got ${pubkey.length}`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
const sequence = MinimalScriptNum.encode(BigInt(timelockToSequence(params.timelock)));
|
|
293
|
+
const asm = [
|
|
294
|
+
sequence.length === 1 ? sequence[0] : sequence,
|
|
295
|
+
"CHECKSEQUENCEVERIFY",
|
|
296
|
+
"DROP"
|
|
297
|
+
];
|
|
298
|
+
const multisigScript = MultisigTapscript.encode(params);
|
|
299
|
+
const script = new Uint8Array([...Script.encode(asm), ...multisigScript.script]);
|
|
300
|
+
return {
|
|
301
|
+
type: "csv-multisig" /* CSVMultisig */,
|
|
302
|
+
params,
|
|
303
|
+
script
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
CSVMultisigTapscript2.encode = encode2;
|
|
307
|
+
function decode2(script) {
|
|
308
|
+
if (script.length === 0) {
|
|
309
|
+
throw new Error("Failed to decode: script is empty");
|
|
310
|
+
}
|
|
311
|
+
const isValid = isScriptValid(script);
|
|
312
|
+
if (isValid instanceof Error) {
|
|
313
|
+
throw isValid;
|
|
314
|
+
}
|
|
315
|
+
const asm = Script.decode(script);
|
|
316
|
+
const sequence = asm[0];
|
|
317
|
+
const multisigScript = new Uint8Array(Script.encode(asm.slice(3)));
|
|
318
|
+
let multisig;
|
|
319
|
+
try {
|
|
320
|
+
multisig = MultisigTapscript.decode(multisigScript);
|
|
321
|
+
} catch (error) {
|
|
322
|
+
throw new Error(
|
|
323
|
+
`Invalid multisig script: ${error instanceof Error ? error.message : String(error)}`
|
|
324
|
+
);
|
|
325
|
+
}
|
|
326
|
+
let sequenceNum;
|
|
327
|
+
if (typeof sequence === "number") {
|
|
328
|
+
sequenceNum = sequence;
|
|
329
|
+
} else {
|
|
330
|
+
sequenceNum = Number(MinimalScriptNum.decode(sequence));
|
|
331
|
+
}
|
|
332
|
+
const timelock = sequenceToTimelock(sequenceNum);
|
|
333
|
+
const reconstructed = encode2({
|
|
334
|
+
timelock,
|
|
335
|
+
...multisig.params
|
|
336
|
+
});
|
|
337
|
+
if (hex.encode(reconstructed.script) !== hex.encode(script)) {
|
|
338
|
+
throw new Error("Invalid script format: script reconstruction mismatch");
|
|
339
|
+
}
|
|
340
|
+
return {
|
|
341
|
+
type: "csv-multisig" /* CSVMultisig */,
|
|
342
|
+
params: {
|
|
343
|
+
timelock,
|
|
344
|
+
...multisig.params
|
|
345
|
+
},
|
|
346
|
+
script
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
CSVMultisigTapscript2.decode = decode2;
|
|
350
|
+
function is(tapscript) {
|
|
351
|
+
return tapscript.type === "csv-multisig" /* CSVMultisig */;
|
|
352
|
+
}
|
|
353
|
+
CSVMultisigTapscript2.is = is;
|
|
354
|
+
function isScriptValid(script) {
|
|
355
|
+
const asm = Script.decode(script);
|
|
356
|
+
if (asm.length < 3) {
|
|
357
|
+
return new Error(`Invalid script: too short (expected at least 3)`);
|
|
358
|
+
}
|
|
359
|
+
const sequence = asm[0];
|
|
360
|
+
if (typeof sequence === "string") {
|
|
361
|
+
return new Error("Invalid script: expected sequence number");
|
|
362
|
+
}
|
|
363
|
+
if (asm[1] !== "CHECKSEQUENCEVERIFY" || asm[2] !== "DROP") {
|
|
364
|
+
return new Error("Invalid script: expected CHECKSEQUENCEVERIFY DROP");
|
|
365
|
+
}
|
|
366
|
+
return true;
|
|
367
|
+
}
|
|
368
|
+
CSVMultisigTapscript2.isScriptValid = isScriptValid;
|
|
369
|
+
})(CSVMultisigTapscript || (CSVMultisigTapscript = {}));
|
|
370
|
+
var ConditionCSVMultisigTapscript;
|
|
371
|
+
((ConditionCSVMultisigTapscript2) => {
|
|
372
|
+
function encode2(params) {
|
|
373
|
+
const script = new Uint8Array([
|
|
374
|
+
...params.conditionScript,
|
|
375
|
+
...Script.encode(["VERIFY"]),
|
|
376
|
+
...CSVMultisigTapscript.encode(params).script
|
|
377
|
+
]);
|
|
378
|
+
return {
|
|
379
|
+
type: "condition-csv-multisig" /* ConditionCSVMultisig */,
|
|
380
|
+
params,
|
|
381
|
+
script
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
ConditionCSVMultisigTapscript2.encode = encode2;
|
|
385
|
+
function decode2(script) {
|
|
386
|
+
if (script.length === 0) {
|
|
387
|
+
throw new Error("Failed to decode: script is empty");
|
|
388
|
+
}
|
|
389
|
+
const isValid = isScriptValid(script);
|
|
390
|
+
if (isValid instanceof Error) {
|
|
391
|
+
throw isValid;
|
|
392
|
+
}
|
|
393
|
+
const asm = Script.decode(script);
|
|
394
|
+
let verifyIndex = getVerifyIndex(asm);
|
|
395
|
+
if (verifyIndex === -1) {
|
|
396
|
+
throw Error("Invalid script: missing VERIFY operation");
|
|
397
|
+
}
|
|
398
|
+
const conditionScript = new Uint8Array(Script.encode(asm.slice(0, verifyIndex)));
|
|
399
|
+
const csvMultisigScript = new Uint8Array(Script.encode(asm.slice(verifyIndex + 1)));
|
|
400
|
+
let csvMultisig;
|
|
401
|
+
try {
|
|
402
|
+
csvMultisig = CSVMultisigTapscript.decode(csvMultisigScript);
|
|
403
|
+
} catch (error) {
|
|
404
|
+
throw new Error(
|
|
405
|
+
`Invalid CSV multisig script: ${error instanceof Error ? error.message : String(error)}`
|
|
406
|
+
);
|
|
407
|
+
}
|
|
408
|
+
const reconstructed = encode2({
|
|
409
|
+
conditionScript,
|
|
410
|
+
...csvMultisig.params
|
|
411
|
+
});
|
|
412
|
+
if (hex.encode(reconstructed.script) !== hex.encode(script)) {
|
|
413
|
+
throw new Error("Invalid script format: script reconstruction mismatch");
|
|
414
|
+
}
|
|
415
|
+
return {
|
|
416
|
+
type: "condition-csv-multisig" /* ConditionCSVMultisig */,
|
|
417
|
+
params: {
|
|
418
|
+
conditionScript,
|
|
419
|
+
...csvMultisig.params
|
|
420
|
+
},
|
|
421
|
+
script
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
ConditionCSVMultisigTapscript2.decode = decode2;
|
|
425
|
+
function is(tapscript) {
|
|
426
|
+
return tapscript.type === "condition-csv-multisig" /* ConditionCSVMultisig */;
|
|
427
|
+
}
|
|
428
|
+
ConditionCSVMultisigTapscript2.is = is;
|
|
429
|
+
function getVerifyIndex(asm) {
|
|
430
|
+
let verifyIndex = -1;
|
|
431
|
+
for (let i = asm.length - 1; i >= 0; i--) {
|
|
432
|
+
if (asm[i] === "VERIFY") {
|
|
433
|
+
verifyIndex = i;
|
|
434
|
+
return verifyIndex;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
return verifyIndex;
|
|
438
|
+
}
|
|
439
|
+
function isScriptValid(script) {
|
|
440
|
+
const asm = Script.decode(script);
|
|
441
|
+
if (asm.length < 1) {
|
|
442
|
+
return new Error(`Invalid script: too short (expected at least 1)`);
|
|
443
|
+
}
|
|
444
|
+
let verifyIndex = getVerifyIndex(asm);
|
|
445
|
+
if (verifyIndex === -1) {
|
|
446
|
+
return new Error("Invalid script: missing VERIFY operation");
|
|
447
|
+
}
|
|
448
|
+
return true;
|
|
449
|
+
}
|
|
450
|
+
ConditionCSVMultisigTapscript2.isScriptValid = isScriptValid;
|
|
451
|
+
})(ConditionCSVMultisigTapscript || (ConditionCSVMultisigTapscript = {}));
|
|
452
|
+
var ConditionMultisigTapscript;
|
|
453
|
+
((ConditionMultisigTapscript2) => {
|
|
454
|
+
function encode2(params) {
|
|
455
|
+
const script = new Uint8Array([
|
|
456
|
+
...params.conditionScript,
|
|
457
|
+
...Script.encode(["VERIFY"]),
|
|
458
|
+
...MultisigTapscript.encode(params).script
|
|
459
|
+
]);
|
|
460
|
+
return {
|
|
461
|
+
type: "condition-multisig" /* ConditionMultisig */,
|
|
462
|
+
params,
|
|
463
|
+
script
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
ConditionMultisigTapscript2.encode = encode2;
|
|
467
|
+
function decode2(script) {
|
|
468
|
+
if (script.length === 0) {
|
|
469
|
+
throw new Error("Failed to decode: script is empty");
|
|
470
|
+
}
|
|
471
|
+
const isValid = isScriptValid(script);
|
|
472
|
+
if (isValid instanceof Error) {
|
|
473
|
+
throw isValid;
|
|
474
|
+
}
|
|
475
|
+
const asm = Script.decode(script);
|
|
476
|
+
let verifyIndex = getVerifyIndex(asm);
|
|
477
|
+
if (verifyIndex === -1) {
|
|
478
|
+
throw Error("Invalid script: missing VERIFY operation");
|
|
479
|
+
}
|
|
480
|
+
const conditionScript = new Uint8Array(Script.encode(asm.slice(0, verifyIndex)));
|
|
481
|
+
const multisigScript = new Uint8Array(Script.encode(asm.slice(verifyIndex + 1)));
|
|
482
|
+
let multisig;
|
|
483
|
+
try {
|
|
484
|
+
multisig = MultisigTapscript.decode(multisigScript);
|
|
485
|
+
} catch (error) {
|
|
486
|
+
throw new Error(
|
|
487
|
+
`Invalid multisig script: ${error instanceof Error ? error.message : String(error)}`
|
|
488
|
+
);
|
|
489
|
+
}
|
|
490
|
+
const reconstructed = encode2({
|
|
491
|
+
conditionScript,
|
|
492
|
+
...multisig.params
|
|
493
|
+
});
|
|
494
|
+
if (hex.encode(reconstructed.script) !== hex.encode(script)) {
|
|
495
|
+
throw new Error("Invalid script format: script reconstruction mismatch");
|
|
496
|
+
}
|
|
497
|
+
return {
|
|
498
|
+
type: "condition-multisig" /* ConditionMultisig */,
|
|
499
|
+
params: {
|
|
500
|
+
conditionScript,
|
|
501
|
+
...multisig.params
|
|
502
|
+
},
|
|
503
|
+
script
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
ConditionMultisigTapscript2.decode = decode2;
|
|
507
|
+
function is(tapscript) {
|
|
508
|
+
return tapscript.type === "condition-multisig" /* ConditionMultisig */;
|
|
509
|
+
}
|
|
510
|
+
ConditionMultisigTapscript2.is = is;
|
|
511
|
+
function getVerifyIndex(asm) {
|
|
512
|
+
let verifyIndex = -1;
|
|
513
|
+
for (let i = asm.length - 1; i >= 0; i--) {
|
|
514
|
+
if (asm[i] === "VERIFY") {
|
|
515
|
+
verifyIndex = i;
|
|
516
|
+
return verifyIndex;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
return verifyIndex;
|
|
520
|
+
}
|
|
521
|
+
function isScriptValid(script) {
|
|
522
|
+
const asm = Script.decode(script);
|
|
523
|
+
if (asm.length < 1) {
|
|
524
|
+
return new Error(`Invalid script: too short (expected at least 1)`);
|
|
525
|
+
}
|
|
526
|
+
let verifyIndex = getVerifyIndex(asm);
|
|
527
|
+
if (verifyIndex === -1) {
|
|
528
|
+
return new Error("Invalid script: missing VERIFY operation");
|
|
529
|
+
}
|
|
530
|
+
return true;
|
|
531
|
+
}
|
|
532
|
+
ConditionMultisigTapscript2.isScriptValid = isScriptValid;
|
|
533
|
+
})(ConditionMultisigTapscript || (ConditionMultisigTapscript = {}));
|
|
534
|
+
var CLTVMultisigTapscript;
|
|
535
|
+
((CLTVMultisigTapscript2) => {
|
|
536
|
+
function encode2(params) {
|
|
537
|
+
const locktime = MinimalScriptNum.encode(params.absoluteTimelock);
|
|
538
|
+
const asm = [
|
|
539
|
+
locktime.length === 1 ? locktime[0] : locktime,
|
|
540
|
+
"CHECKLOCKTIMEVERIFY",
|
|
541
|
+
"DROP"
|
|
542
|
+
];
|
|
543
|
+
const timelockedScript = Script.encode(asm);
|
|
544
|
+
const script = new Uint8Array([
|
|
545
|
+
...timelockedScript,
|
|
546
|
+
...MultisigTapscript.encode(params).script
|
|
547
|
+
]);
|
|
548
|
+
return {
|
|
549
|
+
type: "cltv-multisig" /* CLTVMultisig */,
|
|
550
|
+
params,
|
|
551
|
+
script
|
|
552
|
+
};
|
|
553
|
+
}
|
|
554
|
+
CLTVMultisigTapscript2.encode = encode2;
|
|
555
|
+
function decode2(script) {
|
|
556
|
+
if (script.length === 0) {
|
|
557
|
+
throw new Error("Failed to decode: script is empty");
|
|
558
|
+
}
|
|
559
|
+
const isValid = isScriptValid(script);
|
|
560
|
+
if (isValid instanceof Error) {
|
|
561
|
+
throw isValid;
|
|
562
|
+
}
|
|
563
|
+
const asm = Script.decode(script);
|
|
564
|
+
const locktime = asm[0];
|
|
565
|
+
if (typeof locktime === "string") {
|
|
566
|
+
throw new Error("Invalid script: expected locktime number");
|
|
567
|
+
}
|
|
568
|
+
if (asm[1] !== "CHECKLOCKTIMEVERIFY" || asm[2] !== "DROP") {
|
|
569
|
+
throw new Error("Invalid script: expected CHECKLOCKTIMEVERIFY DROP");
|
|
570
|
+
}
|
|
571
|
+
const multisigScript = new Uint8Array(Script.encode(asm.slice(3)));
|
|
572
|
+
let multisig;
|
|
573
|
+
try {
|
|
574
|
+
multisig = MultisigTapscript.decode(multisigScript);
|
|
575
|
+
} catch (error) {
|
|
576
|
+
throw new Error(
|
|
577
|
+
`Invalid multisig script: ${error instanceof Error ? error.message : String(error)}`
|
|
578
|
+
);
|
|
579
|
+
}
|
|
580
|
+
let absoluteTimelock;
|
|
581
|
+
if (typeof locktime === "number") {
|
|
582
|
+
absoluteTimelock = BigInt(locktime);
|
|
583
|
+
} else {
|
|
584
|
+
absoluteTimelock = MinimalScriptNum.decode(locktime);
|
|
585
|
+
}
|
|
586
|
+
const reconstructed = encode2({
|
|
587
|
+
absoluteTimelock,
|
|
588
|
+
...multisig.params
|
|
589
|
+
});
|
|
590
|
+
if (hex.encode(reconstructed.script) !== hex.encode(script)) {
|
|
591
|
+
throw new Error("Invalid script format: script reconstruction mismatch");
|
|
592
|
+
}
|
|
593
|
+
return {
|
|
594
|
+
type: "cltv-multisig" /* CLTVMultisig */,
|
|
595
|
+
params: {
|
|
596
|
+
absoluteTimelock,
|
|
597
|
+
...multisig.params
|
|
598
|
+
},
|
|
599
|
+
script
|
|
600
|
+
};
|
|
601
|
+
}
|
|
602
|
+
CLTVMultisigTapscript2.decode = decode2;
|
|
603
|
+
function is(tapscript) {
|
|
604
|
+
return tapscript.type === "cltv-multisig" /* CLTVMultisig */;
|
|
605
|
+
}
|
|
606
|
+
CLTVMultisigTapscript2.is = is;
|
|
607
|
+
function isScriptValid(script) {
|
|
608
|
+
const asm = Script.decode(script);
|
|
609
|
+
if (asm.length < 3) {
|
|
610
|
+
return new Error(`Invalid script: too short (expected at least 3)`);
|
|
611
|
+
}
|
|
612
|
+
const locktime = asm[0];
|
|
613
|
+
if (typeof locktime === "string") {
|
|
614
|
+
return new Error("Invalid script: expected locktime as number or bytes");
|
|
615
|
+
}
|
|
616
|
+
if (asm[1] !== "CHECKLOCKTIMEVERIFY" || asm[2] !== "DROP") {
|
|
617
|
+
return new Error("Invalid script: expected CHECKLOCKTIMEVERIFY DROP");
|
|
618
|
+
}
|
|
619
|
+
return true;
|
|
620
|
+
}
|
|
621
|
+
CLTVMultisigTapscript2.isScriptValid = isScriptValid;
|
|
622
|
+
})(CLTVMultisigTapscript || (CLTVMultisigTapscript = {}));
|
|
623
|
+
var TapTreeCoder = PSBTOutput.tapTree[2];
|
|
624
|
+
function scriptFromTapLeafScript(leaf) {
|
|
625
|
+
return leaf[1].subarray(0, leaf[1].length - 1);
|
|
626
|
+
}
|
|
627
|
+
var VtxoScript = class _VtxoScript {
|
|
628
|
+
/**
|
|
629
|
+
* Create a virtual output script from its tapleaf scripts.
|
|
630
|
+
*
|
|
631
|
+
* @param scripts - Raw tapscript bytes for each leaf
|
|
632
|
+
* @throws Error if the provided leaves cannot produce a valid Taproot tree
|
|
633
|
+
*/
|
|
634
|
+
constructor(scripts) {
|
|
635
|
+
this.scripts = scripts;
|
|
636
|
+
const list = scripts.length % 2 !== 0 ? scripts.slice().reverse() : scripts;
|
|
637
|
+
const tapTree = taprootListToTree(
|
|
638
|
+
list.map((script) => ({
|
|
639
|
+
script,
|
|
640
|
+
leafVersion: TAP_LEAF_VERSION
|
|
641
|
+
}))
|
|
642
|
+
);
|
|
643
|
+
const payment = p2tr(TAPROOT_UNSPENDABLE_KEY, tapTree, void 0, true);
|
|
644
|
+
if (!payment.tapLeafScript || payment.tapLeafScript.length !== scripts.length) {
|
|
645
|
+
throw new Error("invalid scripts");
|
|
646
|
+
}
|
|
647
|
+
this.leaves = payment.tapLeafScript;
|
|
648
|
+
this.tweakedPublicKey = payment.tweakedPubkey;
|
|
649
|
+
}
|
|
650
|
+
leaves;
|
|
651
|
+
tweakedPublicKey;
|
|
652
|
+
/**
|
|
653
|
+
* Decode a virtual output script from an encoded TapTree.
|
|
654
|
+
*
|
|
655
|
+
* @param tapTree - Encoded TapTree bytes
|
|
656
|
+
* @returns Decoded virtual output script
|
|
657
|
+
* @throws Error if the TapTree cannot be decoded into a valid script set
|
|
658
|
+
* @see encode
|
|
659
|
+
*/
|
|
660
|
+
static decode(tapTree) {
|
|
661
|
+
const leaves = TapTreeCoder.decode(tapTree);
|
|
662
|
+
const scripts = leaves.map((leaf) => leaf.script);
|
|
663
|
+
return new _VtxoScript(scripts);
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* Encode the virtual output script to a TapTree byte representation.
|
|
667
|
+
*
|
|
668
|
+
* @returns Encoded TapTree bytes
|
|
669
|
+
* @see decode
|
|
670
|
+
*/
|
|
671
|
+
encode() {
|
|
672
|
+
const tapTree = TapTreeCoder.encode(
|
|
673
|
+
this.scripts.map((script) => ({
|
|
674
|
+
depth: 1,
|
|
675
|
+
version: TAP_LEAF_VERSION,
|
|
676
|
+
script
|
|
677
|
+
}))
|
|
678
|
+
);
|
|
679
|
+
return tapTree;
|
|
680
|
+
}
|
|
681
|
+
/**
|
|
682
|
+
* Build the Arkade address corresponding to this virtual output script.
|
|
683
|
+
*
|
|
684
|
+
* @param prefix - Bech32 human-readable prefix
|
|
685
|
+
* @param serverPubKey - 32-byte Arkade server public key
|
|
686
|
+
* @returns Arkade address for this script
|
|
687
|
+
* @see ArkAddress
|
|
688
|
+
*/
|
|
689
|
+
address(prefix, serverPubKey) {
|
|
690
|
+
return new ArkAddress(serverPubKey, this.tweakedPublicKey, prefix);
|
|
691
|
+
}
|
|
692
|
+
get pkScript() {
|
|
693
|
+
return Script.encode(["OP_1", this.tweakedPublicKey]);
|
|
694
|
+
}
|
|
695
|
+
/**
|
|
696
|
+
* Build the Taproot onchain address corresponding to this virtual output script.
|
|
697
|
+
*
|
|
698
|
+
* @param network - Bitcoin network descriptor
|
|
699
|
+
* @returns Taproot onchain address
|
|
700
|
+
* @see address
|
|
701
|
+
*/
|
|
702
|
+
onchainAddress(network) {
|
|
703
|
+
return Address(network).encode({
|
|
704
|
+
type: "tr",
|
|
705
|
+
pubkey: this.tweakedPublicKey
|
|
706
|
+
});
|
|
707
|
+
}
|
|
708
|
+
/**
|
|
709
|
+
* Look up a tapleaf script by its hex-encoded tapscript body.
|
|
710
|
+
*
|
|
711
|
+
* @param scriptHex - Hex-encoded tapscript body without the leaf version byte
|
|
712
|
+
* @returns Matching tapleaf script
|
|
713
|
+
* @throws Error if no matching leaf exists
|
|
714
|
+
*/
|
|
715
|
+
findLeaf(scriptHex) {
|
|
716
|
+
const leaf = this.leaves.find(
|
|
717
|
+
(leaf2) => hex.encode(scriptFromTapLeafScript(leaf2)) === scriptHex
|
|
718
|
+
);
|
|
719
|
+
if (!leaf) {
|
|
720
|
+
throw new Error(`leaf '${scriptHex}' not found`);
|
|
721
|
+
}
|
|
722
|
+
return leaf;
|
|
723
|
+
}
|
|
724
|
+
/**
|
|
725
|
+
* Return all unilateral exit paths embedded in the virtual output script.
|
|
726
|
+
*
|
|
727
|
+
* @returns CSV-based exit paths found in the leaves
|
|
728
|
+
* @see getSequence
|
|
729
|
+
*/
|
|
730
|
+
exitPaths() {
|
|
731
|
+
const paths = [];
|
|
732
|
+
for (const leaf of this.leaves) {
|
|
733
|
+
try {
|
|
734
|
+
const script = scriptFromTapLeafScript(leaf);
|
|
735
|
+
if (CSVMultisigTapscript.isScriptValid(script) === true) {
|
|
736
|
+
const tapScript = CSVMultisigTapscript.decode(script);
|
|
737
|
+
paths.push(tapScript);
|
|
738
|
+
} else if (ConditionCSVMultisigTapscript.isScriptValid(script) === true) {
|
|
739
|
+
const tapScript = ConditionCSVMultisigTapscript.decode(script);
|
|
740
|
+
paths.push(tapScript);
|
|
741
|
+
}
|
|
742
|
+
} catch (e) {
|
|
743
|
+
console.debug("Failed to decode script", e);
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
return paths;
|
|
747
|
+
}
|
|
748
|
+
};
|
|
749
|
+
function getSequence(tapLeafScript) {
|
|
750
|
+
let sequence = void 0;
|
|
751
|
+
try {
|
|
752
|
+
const scriptWithLeafVersion = tapLeafScript[1];
|
|
753
|
+
const script = scriptWithLeafVersion.subarray(0, scriptWithLeafVersion.length - 1);
|
|
754
|
+
try {
|
|
755
|
+
const params = CSVMultisigTapscript.decode(script).params;
|
|
756
|
+
sequence = timelockToSequence(params.timelock);
|
|
757
|
+
} catch {
|
|
758
|
+
const params = CLTVMultisigTapscript.decode(script).params;
|
|
759
|
+
sequence = Number(params.absoluteTimelock);
|
|
760
|
+
}
|
|
761
|
+
} catch {
|
|
762
|
+
}
|
|
763
|
+
return sequence;
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
export { ArkAddress, CLTVMultisigTapscript, CSVMultisigTapscript, ConditionCSVMultisigTapscript, ConditionMultisigTapscript, DEFAULT_ARKADE_HRP, DEFAULT_ARKADE_SERVER_URL, DEFAULT_NETWORK_NAME, MultisigTapscript, TapTreeCoder, TxType, VtxoScript, decodeTapscript, getSequence, isExpired, isRecoverable, isSpendable, isSubdust, scriptFromTapLeafScript, sequenceToTimelock, timelockToSequence };
|
|
767
|
+
//# sourceMappingURL=chunk-HW3JJ323.js.map
|
|
768
|
+
//# sourceMappingURL=chunk-HW3JJ323.js.map
|