@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
|
@@ -1,285 +0,0 @@
|
|
|
1
|
-
import { p2tr } from "@scure/btc-signer";
|
|
2
|
-
import { DEFAULT_NETWORK_NAME } from "./index.js";
|
|
3
|
-
import { getNetwork } from "../networks.js";
|
|
4
|
-
import { ESPLORA_URL, EsploraProvider, } from "../providers/onchain.js";
|
|
5
|
-
import { findP2AOutput, P2A } from "../utils/anchor.js";
|
|
6
|
-
import { TxWeightEstimator } from "../utils/txSizeEstimator.js";
|
|
7
|
-
import { Transaction } from "../utils/transaction.js";
|
|
8
|
-
import { DUST_AMOUNT } from "./utils.js";
|
|
9
|
-
/**
|
|
10
|
-
* Onchain Bitcoin wallet implementation for traditional Bitcoin transactions.
|
|
11
|
-
*
|
|
12
|
-
* This wallet handles regular Bitcoin transactions on the blockchain without
|
|
13
|
-
* using the Arkade protocol. It supports P2TR (Pay-to-Taproot) addresses and
|
|
14
|
-
* provides basic Bitcoin wallet functionality.
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```typescript
|
|
18
|
-
* const wallet = await OnchainWallet.create(identity, 'mainnet');
|
|
19
|
-
* const balance = await wallet.getBalance();
|
|
20
|
-
* const txid = await wallet.send({
|
|
21
|
-
* address: 'bc1...',
|
|
22
|
-
* amount: 50000
|
|
23
|
-
* });
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export class OnchainWallet {
|
|
27
|
-
constructor(identity, network, onchainP2TR, provider) {
|
|
28
|
-
this.identity = identity;
|
|
29
|
-
this.network = network;
|
|
30
|
-
this.onchainP2TR = onchainP2TR;
|
|
31
|
-
this.provider = provider;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Create an onchain wallet for the given identity and Bitcoin network.
|
|
35
|
-
*
|
|
36
|
-
* @param identity - Identity used to derive the Taproot key and sign transactions
|
|
37
|
-
* @param networkName - Bitcoin network name, @see NetworkName
|
|
38
|
-
* @param provider - Optional onchain provider override, @see OnchainProvider
|
|
39
|
-
* @returns Configured onchain wallet
|
|
40
|
-
* @defaultValue `provider = new EsploraProvider('https://mempool.space/api')`
|
|
41
|
-
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
42
|
-
*/
|
|
43
|
-
static async create(identity, networkName = DEFAULT_NETWORK_NAME, provider) {
|
|
44
|
-
const pubkey = await identity.xOnlyPublicKey();
|
|
45
|
-
if (!pubkey) {
|
|
46
|
-
throw new Error("Invalid configured public key");
|
|
47
|
-
}
|
|
48
|
-
const network = getNetwork(networkName);
|
|
49
|
-
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
50
|
-
const onchainP2TR = p2tr(pubkey, undefined, network);
|
|
51
|
-
return new OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
52
|
-
}
|
|
53
|
-
get address() {
|
|
54
|
-
return this.onchainP2TR.address || "";
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Fetch spendable onchain outputs for the wallet address.
|
|
58
|
-
*
|
|
59
|
-
* @returns Spendable onchain outputs for the wallet address
|
|
60
|
-
* @see getBalance
|
|
61
|
-
*/
|
|
62
|
-
async getCoins() {
|
|
63
|
-
return this.provider.getCoins(this.address);
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Return the wallet's total onchain balance in satoshis.
|
|
67
|
-
*
|
|
68
|
-
* @returns Confirmed plus unconfirmed onchain balance
|
|
69
|
-
* @see getCoins
|
|
70
|
-
*/
|
|
71
|
-
async getBalance() {
|
|
72
|
-
const coins = await this.getCoins();
|
|
73
|
-
const onchainConfirmed = coins
|
|
74
|
-
.filter((coin) => coin.status.confirmed)
|
|
75
|
-
.reduce((sum, coin) => sum + coin.value, 0);
|
|
76
|
-
const onchainUnconfirmed = coins
|
|
77
|
-
.filter((coin) => !coin.status.confirmed)
|
|
78
|
-
.reduce((sum, coin) => sum + coin.value, 0);
|
|
79
|
-
const onchainTotal = onchainConfirmed + onchainUnconfirmed;
|
|
80
|
-
return onchainTotal;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Iteratively selects coins and estimates transaction fees until convergence.
|
|
84
|
-
*
|
|
85
|
-
* This method handles the circular dependency between output selection and fee
|
|
86
|
-
* estimation: the fee depends on transaction size, which depends on the number
|
|
87
|
-
* of inputs (selected outputs) and whether a change output is needed.
|
|
88
|
-
*
|
|
89
|
-
* The algorithm iterates up to 10 times, refining the fee estimate based on
|
|
90
|
-
* the actual transaction structure. It resolves dust oscillation loops that
|
|
91
|
-
* occur when the change amount hovers near the dust threshold—adding/removing
|
|
92
|
-
* the change output causes the fee to fluctuate, preventing convergence.
|
|
93
|
-
* When a lower fee is computed (indicating the change output was dropped),
|
|
94
|
-
* the function accepts this state to guarantee termination.
|
|
95
|
-
*
|
|
96
|
-
* @param coins - Available onchain outputs to select from
|
|
97
|
-
* @param amount - Target send amount in satoshis
|
|
98
|
-
* @param feeRate - Fee rate in sat/vbyte
|
|
99
|
-
* @param recipientAddress - Destination address for size estimation
|
|
100
|
-
* @returns Selected inputs, change amount, and calculated fee
|
|
101
|
-
* @throws Error if fee estimation fails to converge within max iterations
|
|
102
|
-
*/
|
|
103
|
-
estimateFeesAndSelectCoins(coins, amount, feeRate, recipientAddress) {
|
|
104
|
-
const MAX_ITERATIONS = 10;
|
|
105
|
-
let fee = 0;
|
|
106
|
-
for (let i = 0; i < MAX_ITERATIONS; i++) {
|
|
107
|
-
const totalNeeded = amount + fee;
|
|
108
|
-
const selected = selectCoins(coins, totalNeeded);
|
|
109
|
-
const estimator = TxWeightEstimator.create();
|
|
110
|
-
for (const _ of selected.inputs) {
|
|
111
|
-
estimator.addKeySpendInput();
|
|
112
|
-
}
|
|
113
|
-
estimator.addOutputAddress(recipientAddress, this.network);
|
|
114
|
-
if (selected.changeAmount >= BigInt(DUST_AMOUNT)) {
|
|
115
|
-
estimator.addOutputAddress(this.address, this.network);
|
|
116
|
-
}
|
|
117
|
-
const newFee = Number(estimator.vsize().value) * feeRate;
|
|
118
|
-
const roundedNewFee = Math.ceil(newFee);
|
|
119
|
-
// Prevent oscillation loops when change falls just below the dust limit.
|
|
120
|
-
// If removing the change output reduces the fee below our budget,
|
|
121
|
-
// we accept the valid transaction state to guarantee convergence.
|
|
122
|
-
if (roundedNewFee <= fee) {
|
|
123
|
-
return { ...selected, fee: roundedNewFee };
|
|
124
|
-
}
|
|
125
|
-
fee = roundedNewFee;
|
|
126
|
-
}
|
|
127
|
-
throw new Error("Fee estimation failed: could not converge");
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Send bitcoin to a single onchain address.
|
|
131
|
-
*
|
|
132
|
-
* @param params - destination `address`, `amount` (in satoshis), and optional `feeRate` override (other fields ignored)
|
|
133
|
-
* @returns Broadcast transaction id
|
|
134
|
-
* @throws Error if the amount is non-positive, below dust, or cannot be funded
|
|
135
|
-
* @see SendBitcoinParams
|
|
136
|
-
*/
|
|
137
|
-
async send(params) {
|
|
138
|
-
if (params.amount <= 0) {
|
|
139
|
-
throw new Error("Amount must be positive");
|
|
140
|
-
}
|
|
141
|
-
if (params.amount < DUST_AMOUNT) {
|
|
142
|
-
throw new Error("Amount is below dust limit");
|
|
143
|
-
}
|
|
144
|
-
const coins = await this.getCoins();
|
|
145
|
-
let feeRate = params.feeRate;
|
|
146
|
-
if (!feeRate) {
|
|
147
|
-
feeRate = await this.provider.getFeeRate();
|
|
148
|
-
}
|
|
149
|
-
if (!feeRate || feeRate < OnchainWallet.MIN_FEE_RATE) {
|
|
150
|
-
feeRate = OnchainWallet.MIN_FEE_RATE;
|
|
151
|
-
}
|
|
152
|
-
const { inputs, changeAmount } = this.estimateFeesAndSelectCoins(coins, params.amount, feeRate, params.address);
|
|
153
|
-
if (!inputs) {
|
|
154
|
-
throw new Error("Fee estimation failed");
|
|
155
|
-
}
|
|
156
|
-
// Create transaction
|
|
157
|
-
let tx = new Transaction();
|
|
158
|
-
// Add inputs
|
|
159
|
-
for (const input of inputs) {
|
|
160
|
-
tx.addInput({
|
|
161
|
-
txid: input.txid,
|
|
162
|
-
index: input.vout,
|
|
163
|
-
witnessUtxo: {
|
|
164
|
-
script: this.onchainP2TR.script,
|
|
165
|
-
amount: BigInt(input.value),
|
|
166
|
-
},
|
|
167
|
-
tapInternalKey: this.onchainP2TR.tapInternalKey,
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
// Add payment output
|
|
171
|
-
tx.addOutputAddress(params.address, BigInt(params.amount), this.network);
|
|
172
|
-
if (changeAmount >= BigInt(DUST_AMOUNT)) {
|
|
173
|
-
tx.addOutputAddress(this.address, changeAmount, this.network);
|
|
174
|
-
}
|
|
175
|
-
// Sign inputs and Finalize
|
|
176
|
-
tx = await this.identity.sign(tx);
|
|
177
|
-
tx.finalize();
|
|
178
|
-
// Broadcast
|
|
179
|
-
const txid = await this.provider.broadcastTransaction(tx.hex);
|
|
180
|
-
return txid;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* CPFP-bump a parent transaction that contains a pay-to-anchor output.
|
|
184
|
-
*
|
|
185
|
-
* @param parent - Parent transaction containing a pay-to-anchor output
|
|
186
|
-
* @returns Tuple of parent transaction id and child transaction id
|
|
187
|
-
* @throws Error if the parent transaction has no pay-to-anchor output or bumping cannot be funded
|
|
188
|
-
* @see send
|
|
189
|
-
*/
|
|
190
|
-
async bumpP2A(parent) {
|
|
191
|
-
const parentVsize = parent.vsize;
|
|
192
|
-
let child = new Transaction({
|
|
193
|
-
version: 3,
|
|
194
|
-
allowLegacyWitnessUtxo: true,
|
|
195
|
-
});
|
|
196
|
-
child.addInput(findP2AOutput(parent)); // throws if not found
|
|
197
|
-
const childVsize = TxWeightEstimator.create()
|
|
198
|
-
.addKeySpendInput(true)
|
|
199
|
-
.addP2AInput()
|
|
200
|
-
.addOutputAddress(this.address, this.network)
|
|
201
|
-
.vsize().value;
|
|
202
|
-
const packageVSize = parentVsize + Number(childVsize);
|
|
203
|
-
let feeRate = await this.provider.getFeeRate();
|
|
204
|
-
if (!feeRate || feeRate < OnchainWallet.MIN_FEE_RATE) {
|
|
205
|
-
feeRate = OnchainWallet.MIN_FEE_RATE;
|
|
206
|
-
}
|
|
207
|
-
const fee = Math.ceil(feeRate * packageVSize);
|
|
208
|
-
if (!fee) {
|
|
209
|
-
throw new Error(`invalid fee, got ${fee} with vsize ${packageVSize}, feeRate ${feeRate}`);
|
|
210
|
-
}
|
|
211
|
-
// Select onchain outputs
|
|
212
|
-
const coins = await this.getCoins();
|
|
213
|
-
const selected = selectCoins(coins, fee, true);
|
|
214
|
-
for (const input of selected.inputs) {
|
|
215
|
-
child.addInput({
|
|
216
|
-
txid: input.txid,
|
|
217
|
-
index: input.vout,
|
|
218
|
-
witnessUtxo: {
|
|
219
|
-
script: this.onchainP2TR.script,
|
|
220
|
-
amount: BigInt(input.value),
|
|
221
|
-
},
|
|
222
|
-
tapInternalKey: this.onchainP2TR.tapInternalKey,
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
child.addOutputAddress(this.address, P2A.amount + selected.changeAmount, this.network);
|
|
226
|
-
// Sign inputs and Finalize
|
|
227
|
-
child = await this.identity.sign(child);
|
|
228
|
-
for (let i = 1; i < child.inputsLength; i++) {
|
|
229
|
-
child.finalizeIdx(i);
|
|
230
|
-
}
|
|
231
|
-
try {
|
|
232
|
-
await this.provider.broadcastTransaction(parent.hex, child.hex);
|
|
233
|
-
}
|
|
234
|
-
catch (error) {
|
|
235
|
-
console.error(error);
|
|
236
|
-
}
|
|
237
|
-
finally {
|
|
238
|
-
return [parent.hex, child.hex];
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
OnchainWallet.MIN_FEE_RATE = 1; // sat/vbyte
|
|
243
|
-
/**
|
|
244
|
-
* Select coins to reach a target amount, prioritizing those closer to expiry
|
|
245
|
-
* @param coins List of coins to select from
|
|
246
|
-
* @param targetAmount Target amount to reach in satoshis
|
|
247
|
-
* @param forceChange If true, ensure the coin selection will require a change output
|
|
248
|
-
* @returns Selected coins and change amount, or null if insufficient funds
|
|
249
|
-
*/
|
|
250
|
-
export function selectCoins(coins, targetAmount, forceChange = false) {
|
|
251
|
-
if (isNaN(targetAmount)) {
|
|
252
|
-
throw new Error("Target amount is NaN, got " + targetAmount);
|
|
253
|
-
}
|
|
254
|
-
if (targetAmount < 0) {
|
|
255
|
-
throw new Error("Target amount is negative, got " + targetAmount);
|
|
256
|
-
}
|
|
257
|
-
if (targetAmount === 0) {
|
|
258
|
-
return { inputs: [], changeAmount: 0n };
|
|
259
|
-
}
|
|
260
|
-
// Sort coins by amount (descending)
|
|
261
|
-
const sortedCoins = [...coins].sort((a, b) => b.value - a.value);
|
|
262
|
-
const selectedCoins = [];
|
|
263
|
-
let selectedAmount = 0;
|
|
264
|
-
// Select coins until we have enough
|
|
265
|
-
for (const coin of sortedCoins) {
|
|
266
|
-
selectedCoins.push(coin);
|
|
267
|
-
selectedAmount += coin.value;
|
|
268
|
-
if (forceChange
|
|
269
|
-
? selectedAmount > targetAmount
|
|
270
|
-
: selectedAmount >= targetAmount) {
|
|
271
|
-
break;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
if (selectedAmount === targetAmount) {
|
|
275
|
-
return { inputs: selectedCoins, changeAmount: 0n };
|
|
276
|
-
}
|
|
277
|
-
if (selectedAmount < targetAmount) {
|
|
278
|
-
throw new Error("Insufficient funds");
|
|
279
|
-
}
|
|
280
|
-
const changeAmount = BigInt(selectedAmount - targetAmount);
|
|
281
|
-
return {
|
|
282
|
-
inputs: selectedCoins,
|
|
283
|
-
changeAmount,
|
|
284
|
-
};
|
|
285
|
-
}
|
package/dist/esm/wallet/ramps.js
DELETED
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
import { Estimator } from "../arkfee/index.js";
|
|
2
|
-
import { Address, OutScript } from "@scure/btc-signer";
|
|
3
|
-
import { hex } from "@scure/base";
|
|
4
|
-
import { networks } from "../networks.js";
|
|
5
|
-
import { ArkAddress } from "../script/address.js";
|
|
6
|
-
/**
|
|
7
|
-
* Ramps is a class wrapping `settle` method to provide a more convenient interface for onboarding and offboarding operations.
|
|
8
|
-
*
|
|
9
|
-
* @see IWallet.settle
|
|
10
|
-
* @see onboard
|
|
11
|
-
* @see offboard
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* const ramps = new Ramps(wallet);
|
|
16
|
-
* const feeInfo = { intentFee: {}, txFeeRate: '1' };
|
|
17
|
-
* await ramps.onboard(feeInfo); // onboard all boarding inputs
|
|
18
|
-
* await ramps.offboard('bc1q...', feeInfo); // collaboratively exit all virtual outputs to an onchain address
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
|
-
export class Ramps {
|
|
22
|
-
/**
|
|
23
|
-
* Create convenience wrappers for onboarding and offboarding flows.
|
|
24
|
-
*
|
|
25
|
-
* @param wallet - Wallet used to query funds and execute settlement transactions
|
|
26
|
-
*/
|
|
27
|
-
constructor(wallet) {
|
|
28
|
-
this.wallet = wallet;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Onboard boarding inputs.
|
|
32
|
-
*
|
|
33
|
-
* @param feeInfo - The fee info to deduct from the onboard amount.
|
|
34
|
-
* @param boardingUtxos - Specific boarding inputs to onboard. If not provided, all boarding inputs will be used.
|
|
35
|
-
* @param amount - Amount to onboard. If not provided, the total amount of boarding inputs will be onboarded.
|
|
36
|
-
* @param eventCallback - Optional callback that receives settlement events
|
|
37
|
-
* @returns The Arkade transaction id created by settlement
|
|
38
|
-
* @throws Error if no boarding inputs remain after fee deduction or if `amount` exceeds available value
|
|
39
|
-
* @see IWallet.getBoardingUtxos
|
|
40
|
-
* @see IWallet.settle
|
|
41
|
-
* @example
|
|
42
|
-
* ```typescript
|
|
43
|
-
* const feeInfo = { intentFee: {}, txFeeRate: '1' };
|
|
44
|
-
* const ramps = new Ramps(wallet);
|
|
45
|
-
* await ramps.onboard(feeInfo);
|
|
46
|
-
* ```
|
|
47
|
-
*/
|
|
48
|
-
async onboard(feeInfo, boardingUtxos, amount, eventCallback) {
|
|
49
|
-
boardingUtxos = boardingUtxos ?? (await this.wallet.getBoardingUtxos());
|
|
50
|
-
// Calculate input fees and filter out boarding inputs where fee >= value.
|
|
51
|
-
const estimator = new Estimator(feeInfo?.intentFee ?? {});
|
|
52
|
-
const filteredBoardingUtxos = [];
|
|
53
|
-
let totalAmount = 0n;
|
|
54
|
-
for (const utxo of boardingUtxos) {
|
|
55
|
-
const inputFee = estimator.evalOnchainInput({
|
|
56
|
-
amount: BigInt(utxo.value),
|
|
57
|
-
});
|
|
58
|
-
if (inputFee.satoshis >= utxo.value) {
|
|
59
|
-
// Skip boarding inputs where spending fees are greater than or equal to the input value.
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
filteredBoardingUtxos.push(utxo);
|
|
63
|
-
totalAmount += BigInt(utxo.value) - BigInt(inputFee.satoshis);
|
|
64
|
-
}
|
|
65
|
-
if (filteredBoardingUtxos.length === 0) {
|
|
66
|
-
throw new Error("No boarding utxos available after deducting fees");
|
|
67
|
-
}
|
|
68
|
-
let change = 0n;
|
|
69
|
-
if (amount) {
|
|
70
|
-
if (amount > totalAmount) {
|
|
71
|
-
throw new Error("Amount is greater than total amount of boarding utxos after fees");
|
|
72
|
-
}
|
|
73
|
-
change = totalAmount - amount;
|
|
74
|
-
}
|
|
75
|
-
amount = amount ?? totalAmount;
|
|
76
|
-
// Calculate offchain output fee using Estimator
|
|
77
|
-
const offchainAddress = await this.wallet.getAddress();
|
|
78
|
-
const offchainAddr = ArkAddress.decode(offchainAddress);
|
|
79
|
-
const offchainScript = hex.encode(offchainAddr.pkScript);
|
|
80
|
-
const outputFee = estimator.evalOffchainOutput({
|
|
81
|
-
amount,
|
|
82
|
-
script: offchainScript,
|
|
83
|
-
});
|
|
84
|
-
if (BigInt(outputFee.satoshis) > amount) {
|
|
85
|
-
throw new Error(`can't deduct fees from onboard amount (${outputFee.satoshis} > ${amount})`);
|
|
86
|
-
}
|
|
87
|
-
amount -= BigInt(outputFee.satoshis);
|
|
88
|
-
const outputs = [
|
|
89
|
-
{
|
|
90
|
-
address: offchainAddress,
|
|
91
|
-
amount,
|
|
92
|
-
},
|
|
93
|
-
];
|
|
94
|
-
if (change > 0n) {
|
|
95
|
-
const boardingAddress = await this.wallet.getBoardingAddress();
|
|
96
|
-
outputs.push({
|
|
97
|
-
address: boardingAddress,
|
|
98
|
-
amount: change,
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
return this.wallet.settle({
|
|
102
|
-
inputs: filteredBoardingUtxos,
|
|
103
|
-
outputs,
|
|
104
|
-
}, eventCallback);
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Offboard virtual outputs, or collaboratively exit them to an onchain address.
|
|
108
|
-
*
|
|
109
|
-
* @param destinationAddress - The destination address to offboard to.
|
|
110
|
-
* @param feeInfo - The fee info to deduct from the offboard amount.
|
|
111
|
-
* @param amount - The amount to offboard. If not provided, the total amount of virtual outputs will be offboarded.
|
|
112
|
-
* @param eventCallback - Optional callback that receives settlement events
|
|
113
|
-
* @returns The Arkade transaction id created by settlement
|
|
114
|
-
* @throws Error if no virtual outputs remain after fee deduction or the destination address cannot be decoded
|
|
115
|
-
* @see IWallet.getVtxos
|
|
116
|
-
* @see IWallet.settle
|
|
117
|
-
* @example
|
|
118
|
-
* ```typescript
|
|
119
|
-
* const feeInfo = { intentFee: {}, txFeeRate: '1' };
|
|
120
|
-
* const ramps = new Ramps(wallet);
|
|
121
|
-
* await ramps.offboard('bc1q...', feeInfo);
|
|
122
|
-
* ```
|
|
123
|
-
*/
|
|
124
|
-
async offboard(destinationAddress, feeInfo, amount, eventCallback) {
|
|
125
|
-
const vtxos = await this.wallet.getVtxos({
|
|
126
|
-
withRecoverable: true,
|
|
127
|
-
withUnrolled: false,
|
|
128
|
-
});
|
|
129
|
-
// Calculate input fees and filter out virtual outputs where fee >= value.
|
|
130
|
-
const estimator = new Estimator(feeInfo?.intentFee ?? {});
|
|
131
|
-
const filteredVtxos = [];
|
|
132
|
-
let totalAmount = 0n;
|
|
133
|
-
for (const vtxo of vtxos) {
|
|
134
|
-
const inputFee = estimator.evalOffchainInput({
|
|
135
|
-
amount: BigInt(vtxo.value),
|
|
136
|
-
type: vtxo.virtualStatus.state === "swept"
|
|
137
|
-
? "recoverable"
|
|
138
|
-
: "vtxo",
|
|
139
|
-
weight: 0,
|
|
140
|
-
birth: vtxo.createdAt,
|
|
141
|
-
expiry: vtxo.virtualStatus.batchExpiry
|
|
142
|
-
? new Date(vtxo.virtualStatus.batchExpiry)
|
|
143
|
-
: undefined,
|
|
144
|
-
});
|
|
145
|
-
if (inputFee.satoshis >= vtxo.value) {
|
|
146
|
-
// Skip virtual outputs where spending fees are greater than or equal to the output value.
|
|
147
|
-
continue;
|
|
148
|
-
}
|
|
149
|
-
filteredVtxos.push(vtxo);
|
|
150
|
-
totalAmount += BigInt(vtxo.value) - BigInt(inputFee.satoshis);
|
|
151
|
-
}
|
|
152
|
-
if (filteredVtxos.length === 0) {
|
|
153
|
-
throw new Error("No vtxos available after deducting fees");
|
|
154
|
-
}
|
|
155
|
-
let change = 0n;
|
|
156
|
-
if (amount) {
|
|
157
|
-
if (amount > totalAmount) {
|
|
158
|
-
throw new Error("Amount is greater than total amount of vtxos after fees");
|
|
159
|
-
}
|
|
160
|
-
change = totalAmount - amount;
|
|
161
|
-
}
|
|
162
|
-
amount = amount ?? totalAmount;
|
|
163
|
-
const networkNames = [
|
|
164
|
-
"bitcoin",
|
|
165
|
-
"regtest",
|
|
166
|
-
"testnet",
|
|
167
|
-
"signet",
|
|
168
|
-
"mutinynet",
|
|
169
|
-
];
|
|
170
|
-
let destinationScript;
|
|
171
|
-
for (const networkName of networkNames) {
|
|
172
|
-
try {
|
|
173
|
-
const network = networks[networkName];
|
|
174
|
-
const addr = Address(network).decode(destinationAddress);
|
|
175
|
-
destinationScript = OutScript.encode(addr);
|
|
176
|
-
break;
|
|
177
|
-
}
|
|
178
|
-
catch {
|
|
179
|
-
// Try next network
|
|
180
|
-
continue;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
if (!destinationScript) {
|
|
184
|
-
throw new Error(`Failed to decode destination address: ${destinationAddress}`);
|
|
185
|
-
}
|
|
186
|
-
const outputFee = estimator.evalOnchainOutput({
|
|
187
|
-
amount,
|
|
188
|
-
script: hex.encode(destinationScript),
|
|
189
|
-
});
|
|
190
|
-
if (BigInt(outputFee.satoshis) > amount) {
|
|
191
|
-
throw new Error(`can't deduct fees from offboard amount (${outputFee.satoshis} > ${amount})`);
|
|
192
|
-
}
|
|
193
|
-
amount -= BigInt(outputFee.satoshis);
|
|
194
|
-
const outputs = [
|
|
195
|
-
{
|
|
196
|
-
address: destinationAddress,
|
|
197
|
-
amount,
|
|
198
|
-
},
|
|
199
|
-
];
|
|
200
|
-
if (change > 0n) {
|
|
201
|
-
const offchainAddress = await this.wallet.getAddress();
|
|
202
|
-
outputs.push({
|
|
203
|
-
address: offchainAddress,
|
|
204
|
-
amount: change,
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
return this.wallet.settle({
|
|
208
|
-
inputs: filteredVtxos,
|
|
209
|
-
outputs,
|
|
210
|
-
}, eventCallback);
|
|
211
|
-
}
|
|
212
|
-
}
|