@algorandfoundation/algokit-utils 10.0.0-alpha.45 → 10.0.0-alpha.46
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/_virtual/_rolldown/runtime.js +7 -13
- package/abi/index.js +6 -7
- package/abi/index.mjs +1 -2
- package/account-manager.js +15 -16
- package/account-manager.js.map +1 -1
- package/account-manager.mjs +2 -3
- package/account-manager.mjs.map +1 -1
- package/account.d.ts +4 -9
- package/account.js +2 -3
- package/account.js.map +1 -1
- package/account.mjs +1 -1
- package/algo25/index.js +3 -4
- package/algo25/index.mjs +1 -2
- package/algod-client/index.js +8 -9
- package/algod-client/index.mjs +1 -2
- package/algorand-client-transaction-creator.js +2 -3
- package/algorand-client-transaction-creator.js.map +1 -1
- package/algorand-client-transaction-creator.mjs +1 -1
- package/algorand-client-transaction-creator.mjs.map +1 -1
- package/algorand-client-transaction-sender.d.ts +1 -2
- package/algorand-client-transaction-sender.js +7 -8
- package/algorand-client-transaction-sender.js.map +1 -1
- package/algorand-client-transaction-sender.mjs +1 -2
- package/algorand-client-transaction-sender.mjs.map +1 -1
- package/algorand-client.js +12 -13
- package/algorand-client.js.map +1 -1
- package/algorand-client.mjs +1 -2
- package/algorand-client.mjs.map +1 -1
- package/amount.js +2 -3
- package/amount.js.map +1 -1
- package/amount.mjs +1 -1
- package/amount.mjs.map +1 -1
- package/app-client.d.ts +24 -46
- package/app-client.js +13 -14
- package/app-client.js.map +1 -1
- package/app-client.mjs +1 -2
- package/app-client.mjs.map +1 -1
- package/app-deployer.d.ts +6 -13
- package/app-deployer.js +10 -11
- package/app-deployer.js.map +1 -1
- package/app-deployer.mjs +2 -3
- package/app-deployer.mjs.map +1 -1
- package/app-factory.d.ts +29 -54
- package/app-factory.js +9 -10
- package/app-factory.js.map +1 -1
- package/app-factory.mjs +3 -4
- package/app-factory.mjs.map +1 -1
- package/app-manager.js +9 -12
- package/app-manager.js.map +1 -1
- package/app-manager.mjs +5 -8
- package/app-manager.mjs.map +1 -1
- package/app-spec.d.ts +1 -4
- package/app-spec.js +3 -4
- package/app-spec.js.map +1 -1
- package/app-spec.mjs +1 -2
- package/app-spec.mjs.map +1 -1
- package/app.d.ts +6 -12
- package/app.js +2 -3
- package/app.js.map +1 -1
- package/app.mjs +1 -1
- package/app.mjs.map +1 -1
- package/asset-manager.js +7 -8
- package/asset-manager.js.map +1 -1
- package/asset-manager.mjs +4 -5
- package/asset-manager.mjs.map +1 -1
- package/async-event-emitter.js +2 -3
- package/async-event-emitter.js.map +1 -1
- package/async-event-emitter.mjs +1 -1
- package/async-event-emitter.mjs.map +1 -1
- package/client-manager.js +10 -11
- package/client-manager.js.map +1 -1
- package/client-manager.mjs +1 -2
- package/client-manager.mjs.map +1 -1
- package/common/index.js +26 -27
- package/common/index.mjs +1 -2
- package/composer.d.ts +3 -8
- package/composer.js +26 -28
- package/composer.js.map +1 -1
- package/composer.mjs +5 -7
- package/composer.mjs.map +1 -1
- package/config.js +3 -5
- package/config.js.map +1 -1
- package/config.mjs +1 -2
- package/config.mjs.map +1 -1
- package/crypto/index.js +6 -7
- package/crypto/index.mjs +1 -2
- package/debugging.d.ts +4 -10
- package/debugging.js +2 -3
- package/debugging.js.map +1 -1
- package/debugging.mjs +1 -1
- package/dispenser-client.js +3 -4
- package/dispenser-client.js.map +1 -1
- package/dispenser-client.mjs +1 -2
- package/dispenser-client.mjs.map +1 -1
- package/index.js +26 -27
- package/index.mjs +1 -2
- package/indexer-client/index.js +8 -9
- package/indexer-client/index.mjs +1 -2
- package/indexer-client/indexer-lookup.js +1 -2
- package/indexer-client/indexer-lookup.js.map +1 -1
- package/indexer-client/indexer-lookup.mjs +1 -1
- package/indexer-client/indexer-lookup.mjs.map +1 -1
- package/indexer.d.ts +3 -3
- package/indexer.js +2 -3
- package/indexer.js.map +1 -1
- package/indexer.mjs +1 -1
- package/indexer.mjs.map +1 -1
- package/kmd-account-manager.js +9 -10
- package/kmd-account-manager.js.map +1 -1
- package/kmd-account-manager.mjs +1 -2
- package/kmd-account-manager.mjs.map +1 -1
- package/kmd-client/index.js +7 -8
- package/kmd-client/index.mjs +1 -2
- package/lifecycle-events.d.ts +1 -1
- package/lifecycle-events.js +2 -3
- package/lifecycle-events.js.map +1 -1
- package/lifecycle-events.mjs +1 -1
- package/lifecycle-events.mjs.map +1 -1
- package/logging.js +2 -3
- package/logging.js.map +1 -1
- package/logging.mjs +1 -1
- package/logic-error.js +2 -3
- package/logic-error.js.map +1 -1
- package/logic-error.mjs +1 -1
- package/logic-error.mjs.map +1 -1
- package/network-client.js +2 -3
- package/network-client.js.map +1 -1
- package/network-client.mjs +1 -1
- package/network-manager.js +2 -3
- package/network-manager.js.map +1 -1
- package/network-manager.mjs +1 -2
- package/network-manager.mjs.map +1 -1
- package/package.json +5 -2
- package/packages/abi/src/abi-method.d.ts +7 -12
- package/packages/abi/src/abi-method.js +3 -4
- package/packages/abi/src/abi-method.js.map +1 -1
- package/packages/abi/src/abi-method.mjs +1 -2
- package/packages/abi/src/abi-method.mjs.map +1 -1
- package/packages/abi/src/abi-type.d.ts +1 -4
- package/packages/abi/src/abi-type.js +22 -25
- package/packages/abi/src/abi-type.js.map +1 -1
- package/packages/abi/src/abi-type.mjs +18 -21
- package/packages/abi/src/abi-type.mjs.map +1 -1
- package/packages/abi/src/arc28-event.d.ts +4 -10
- package/packages/abi/src/arc56-contract.d.ts +66 -155
- package/packages/abi/src/arc56-contract.js +2 -3
- package/packages/abi/src/arc56-contract.js.map +1 -1
- package/packages/abi/src/arc56-contract.mjs +1 -2
- package/packages/abi/src/arc56-contract.mjs.map +1 -1
- package/packages/abi/src/bigint.js +1 -2
- package/packages/abi/src/bigint.js.map +1 -1
- package/packages/abi/src/bigint.mjs +1 -1
- package/packages/abi/src/utils.d.ts +0 -1
- package/packages/abi/src/utils.js +1 -2
- package/packages/abi/src/utils.js.map +1 -1
- package/packages/abi/src/utils.mjs +1 -1
- package/packages/algo25/src/english.js +2 -4
- package/packages/algo25/src/english.js.map +1 -1
- package/packages/algo25/src/english.mjs +2 -3
- package/packages/algo25/src/english.mjs.map +1 -1
- package/packages/algo25/src/index.js +3 -4
- package/packages/algo25/src/index.js.map +1 -1
- package/packages/algo25/src/index.mjs +5 -6
- package/packages/algo25/src/index.mjs.map +1 -1
- package/packages/algod_client/src/apis/api-service.js +33 -34
- package/packages/algod_client/src/apis/api-service.js.map +1 -1
- package/packages/algod_client/src/apis/api-service.mjs +1 -2
- package/packages/algod_client/src/apis/api-service.mjs.map +1 -1
- package/packages/algod_client/src/client.js +3 -4
- package/packages/algod_client/src/client.js.map +1 -1
- package/packages/algod_client/src/client.mjs +1 -2
- package/packages/algod_client/src/client.mjs.map +1 -1
- package/packages/algod_client/src/core/api-error.js +1 -2
- package/packages/algod_client/src/core/api-error.js.map +1 -1
- package/packages/algod_client/src/core/api-error.mjs +1 -1
- package/packages/algod_client/src/core/api-error.mjs.map +1 -1
- package/packages/algod_client/src/core/base-http-request.js +1 -2
- package/packages/algod_client/src/core/base-http-request.js.map +1 -1
- package/packages/algod_client/src/core/base-http-request.mjs +1 -1
- package/packages/algod_client/src/core/base-http-request.mjs.map +1 -1
- package/packages/algod_client/src/core/fetch-http-request.js +3 -4
- package/packages/algod_client/src/core/fetch-http-request.js.map +1 -1
- package/packages/algod_client/src/core/fetch-http-request.mjs +1 -2
- package/packages/algod_client/src/core/fetch-http-request.mjs.map +1 -1
- package/packages/algod_client/src/core/model-runtime.js +4 -5
- package/packages/algod_client/src/core/model-runtime.js.map +1 -1
- package/packages/algod_client/src/core/model-runtime.mjs +1 -2
- package/packages/algod_client/src/core/model-runtime.mjs.map +1 -1
- package/packages/algod_client/src/core/request.js +5 -6
- package/packages/algod_client/src/core/request.js.map +1 -1
- package/packages/algod_client/src/core/request.mjs +1 -2
- package/packages/algod_client/src/core/request.mjs.map +1 -1
- package/packages/algod_client/src/models/account-application-response.js +5 -6
- package/packages/algod_client/src/models/account-application-response.js.map +1 -1
- package/packages/algod_client/src/models/account-application-response.mjs +1 -2
- package/packages/algod_client/src/models/account-application-response.mjs.map +1 -1
- package/packages/algod_client/src/models/account-asset-response.js +5 -6
- package/packages/algod_client/src/models/account-asset-response.js.map +1 -1
- package/packages/algod_client/src/models/account-asset-response.mjs +1 -2
- package/packages/algod_client/src/models/account-asset-response.mjs.map +1 -1
- package/packages/algod_client/src/models/account-participation.js +3 -4
- package/packages/algod_client/src/models/account-participation.js.map +1 -1
- package/packages/algod_client/src/models/account-participation.mjs +1 -2
- package/packages/algod_client/src/models/account-participation.mjs.map +1 -1
- package/packages/algod_client/src/models/account-state-delta.d.ts +0 -1
- package/packages/algod_client/src/models/account-state-delta.js +4 -5
- package/packages/algod_client/src/models/account-state-delta.js.map +1 -1
- package/packages/algod_client/src/models/account-state-delta.mjs +1 -2
- package/packages/algod_client/src/models/account-state-delta.mjs.map +1 -1
- package/packages/algod_client/src/models/account.d.ts +0 -1
- package/packages/algod_client/src/models/account.js +14 -15
- package/packages/algod_client/src/models/account.js.map +1 -1
- package/packages/algod_client/src/models/account.mjs +1 -2
- package/packages/algod_client/src/models/account.mjs.map +1 -1
- package/packages/algod_client/src/models/application-initial-states.d.ts +0 -1
- package/packages/algod_client/src/models/application-initial-states.js +5 -6
- package/packages/algod_client/src/models/application-initial-states.js.map +1 -1
- package/packages/algod_client/src/models/application-initial-states.mjs +1 -2
- package/packages/algod_client/src/models/application-initial-states.mjs.map +1 -1
- package/packages/algod_client/src/models/application-kv-storage.d.ts +0 -1
- package/packages/algod_client/src/models/application-kv-storage.js +5 -6
- package/packages/algod_client/src/models/application-kv-storage.js.map +1 -1
- package/packages/algod_client/src/models/application-kv-storage.mjs +1 -2
- package/packages/algod_client/src/models/application-kv-storage.mjs.map +1 -1
- package/packages/algod_client/src/models/application-local-state.d.ts +0 -1
- package/packages/algod_client/src/models/application-local-state.js +6 -7
- package/packages/algod_client/src/models/application-local-state.js.map +1 -1
- package/packages/algod_client/src/models/application-local-state.mjs +1 -2
- package/packages/algod_client/src/models/application-local-state.mjs.map +1 -1
- package/packages/algod_client/src/models/application-params.d.ts +0 -1
- package/packages/algod_client/src/models/application-params.js +8 -9
- package/packages/algod_client/src/models/application-params.js.map +1 -1
- package/packages/algod_client/src/models/application-params.mjs +1 -2
- package/packages/algod_client/src/models/application-params.mjs.map +1 -1
- package/packages/algod_client/src/models/application-state-operation.d.ts +0 -1
- package/packages/algod_client/src/models/application-state-operation.js +6 -7
- package/packages/algod_client/src/models/application-state-operation.js.map +1 -1
- package/packages/algod_client/src/models/application-state-operation.mjs +1 -2
- package/packages/algod_client/src/models/application-state-operation.mjs.map +1 -1
- package/packages/algod_client/src/models/application-state-schema.js +2 -3
- package/packages/algod_client/src/models/application-state-schema.js.map +1 -1
- package/packages/algod_client/src/models/application-state-schema.mjs +1 -2
- package/packages/algod_client/src/models/application-state-schema.mjs.map +1 -1
- package/packages/algod_client/src/models/application.d.ts +0 -1
- package/packages/algod_client/src/models/application.js +4 -5
- package/packages/algod_client/src/models/application.js.map +1 -1
- package/packages/algod_client/src/models/application.mjs +1 -2
- package/packages/algod_client/src/models/application.mjs.map +1 -1
- package/packages/algod_client/src/models/asset-holding.js +3 -4
- package/packages/algod_client/src/models/asset-holding.js.map +1 -1
- package/packages/algod_client/src/models/asset-holding.mjs +1 -2
- package/packages/algod_client/src/models/asset-holding.mjs.map +1 -1
- package/packages/algod_client/src/models/asset-params.js +7 -8
- package/packages/algod_client/src/models/asset-params.js.map +1 -1
- package/packages/algod_client/src/models/asset-params.mjs +1 -2
- package/packages/algod_client/src/models/asset-params.mjs.map +1 -1
- package/packages/algod_client/src/models/asset.d.ts +0 -1
- package/packages/algod_client/src/models/asset.js +4 -5
- package/packages/algod_client/src/models/asset.js.map +1 -1
- package/packages/algod_client/src/models/asset.mjs +1 -2
- package/packages/algod_client/src/models/asset.mjs.map +1 -1
- package/packages/algod_client/src/models/avm-key-value.d.ts +0 -1
- package/packages/algod_client/src/models/avm-key-value.js +4 -5
- package/packages/algod_client/src/models/avm-key-value.js.map +1 -1
- package/packages/algod_client/src/models/avm-key-value.mjs +1 -2
- package/packages/algod_client/src/models/avm-key-value.mjs.map +1 -1
- package/packages/algod_client/src/models/avm-value.js +4 -6
- package/packages/algod_client/src/models/avm-value.js.map +1 -1
- package/packages/algod_client/src/models/avm-value.mjs +1 -2
- package/packages/algod_client/src/models/avm-value.mjs.map +1 -1
- package/packages/algod_client/src/models/block-hash-response.js +2 -4
- package/packages/algod_client/src/models/block-hash-response.js.map +1 -1
- package/packages/algod_client/src/models/block-hash-response.mjs +1 -2
- package/packages/algod_client/src/models/block-hash-response.mjs.map +1 -1
- package/packages/algod_client/src/models/block-response.d.ts +1 -3
- package/packages/algod_client/src/models/block-response.js +4 -6
- package/packages/algod_client/src/models/block-response.js.map +1 -1
- package/packages/algod_client/src/models/block-response.mjs +1 -2
- package/packages/algod_client/src/models/block-response.mjs.map +1 -1
- package/packages/algod_client/src/models/block-txids-response.js +2 -4
- package/packages/algod_client/src/models/block-txids-response.js.map +1 -1
- package/packages/algod_client/src/models/block-txids-response.mjs +1 -2
- package/packages/algod_client/src/models/block-txids-response.mjs.map +1 -1
- package/packages/algod_client/src/models/block.d.ts +41 -93
- package/packages/algod_client/src/models/block.js +12 -13
- package/packages/algod_client/src/models/block.js.map +1 -1
- package/packages/algod_client/src/models/block.mjs +1 -2
- package/packages/algod_client/src/models/block.mjs.map +1 -1
- package/packages/algod_client/src/models/box-descriptor.js +2 -4
- package/packages/algod_client/src/models/box-descriptor.js.map +1 -1
- package/packages/algod_client/src/models/box-descriptor.mjs +1 -2
- package/packages/algod_client/src/models/box-descriptor.mjs.map +1 -1
- package/packages/algod_client/src/models/box.js +3 -4
- package/packages/algod_client/src/models/box.js.map +1 -1
- package/packages/algod_client/src/models/box.mjs +1 -2
- package/packages/algod_client/src/models/box.mjs.map +1 -1
- package/packages/algod_client/src/models/boxes-response.js +4 -5
- package/packages/algod_client/src/models/boxes-response.js.map +1 -1
- package/packages/algod_client/src/models/boxes-response.mjs +1 -2
- package/packages/algod_client/src/models/boxes-response.mjs.map +1 -1
- package/packages/algod_client/src/models/build-version.js +3 -4
- package/packages/algod_client/src/models/build-version.js.map +1 -1
- package/packages/algod_client/src/models/build-version.mjs +1 -2
- package/packages/algod_client/src/models/build-version.mjs.map +1 -1
- package/packages/algod_client/src/models/compile-response.js +4 -5
- package/packages/algod_client/src/models/compile-response.js.map +1 -1
- package/packages/algod_client/src/models/compile-response.mjs +1 -2
- package/packages/algod_client/src/models/compile-response.mjs.map +1 -1
- package/packages/algod_client/src/models/disassemble-response.js +2 -4
- package/packages/algod_client/src/models/disassemble-response.js.map +1 -1
- package/packages/algod_client/src/models/disassemble-response.mjs +1 -2
- package/packages/algod_client/src/models/disassemble-response.mjs.map +1 -1
- package/packages/algod_client/src/models/eval-delta-key-value.d.ts +0 -1
- package/packages/algod_client/src/models/eval-delta-key-value.js +4 -5
- package/packages/algod_client/src/models/eval-delta-key-value.js.map +1 -1
- package/packages/algod_client/src/models/eval-delta-key-value.mjs +1 -2
- package/packages/algod_client/src/models/eval-delta-key-value.mjs.map +1 -1
- package/packages/algod_client/src/models/eval-delta.js +4 -6
- package/packages/algod_client/src/models/eval-delta.js.map +1 -1
- package/packages/algod_client/src/models/eval-delta.mjs +1 -2
- package/packages/algod_client/src/models/eval-delta.mjs.map +1 -1
- package/packages/algod_client/src/models/genesis-allocation.js +59 -62
- package/packages/algod_client/src/models/genesis-allocation.js.map +1 -1
- package/packages/algod_client/src/models/genesis-allocation.mjs +55 -58
- package/packages/algod_client/src/models/genesis-allocation.mjs.map +1 -1
- package/packages/algod_client/src/models/genesis.js +7 -8
- package/packages/algod_client/src/models/genesis.js.map +1 -1
- package/packages/algod_client/src/models/genesis.mjs +1 -2
- package/packages/algod_client/src/models/genesis.mjs.map +1 -1
- package/packages/algod_client/src/models/get-block-time-stamp-offset-response.js +2 -4
- package/packages/algod_client/src/models/get-block-time-stamp-offset-response.js.map +1 -1
- package/packages/algod_client/src/models/get-block-time-stamp-offset-response.mjs +1 -2
- package/packages/algod_client/src/models/get-block-time-stamp-offset-response.mjs.map +1 -1
- package/packages/algod_client/src/models/get-sync-round-response.js +2 -4
- package/packages/algod_client/src/models/get-sync-round-response.js.map +1 -1
- package/packages/algod_client/src/models/get-sync-round-response.mjs +1 -2
- package/packages/algod_client/src/models/get-sync-round-response.mjs.map +1 -1
- package/packages/algod_client/src/models/ledger-state-delta-for-transaction-group.d.ts +0 -1
- package/packages/algod_client/src/models/ledger-state-delta-for-transaction-group.js +4 -5
- package/packages/algod_client/src/models/ledger-state-delta-for-transaction-group.js.map +1 -1
- package/packages/algod_client/src/models/ledger-state-delta-for-transaction-group.mjs +1 -2
- package/packages/algod_client/src/models/ledger-state-delta-for-transaction-group.mjs.map +1 -1
- package/packages/algod_client/src/models/ledger-state-delta.d.ts +3 -8
- package/packages/algod_client/src/models/ledger-state-delta.js +98 -101
- package/packages/algod_client/src/models/ledger-state-delta.js.map +1 -1
- package/packages/algod_client/src/models/ledger-state-delta.mjs +205 -210
- package/packages/algod_client/src/models/ledger-state-delta.mjs.map +1 -1
- package/packages/algod_client/src/models/light-block-header-proof.js +3 -4
- package/packages/algod_client/src/models/light-block-header-proof.js.map +1 -1
- package/packages/algod_client/src/models/light-block-header-proof.mjs +1 -2
- package/packages/algod_client/src/models/light-block-header-proof.mjs.map +1 -1
- package/packages/algod_client/src/models/node-status-response.js +5 -6
- package/packages/algod_client/src/models/node-status-response.js.map +1 -1
- package/packages/algod_client/src/models/node-status-response.mjs +1 -2
- package/packages/algod_client/src/models/node-status-response.mjs.map +1 -1
- package/packages/algod_client/src/models/pending-transaction-response.d.ts +0 -1
- package/packages/algod_client/src/models/pending-transaction-response.js +9 -10
- package/packages/algod_client/src/models/pending-transaction-response.js.map +1 -1
- package/packages/algod_client/src/models/pending-transaction-response.mjs +1 -2
- package/packages/algod_client/src/models/pending-transaction-response.mjs.map +1 -1
- package/packages/algod_client/src/models/pending-transactions-response.d.ts +0 -1
- package/packages/algod_client/src/models/pending-transactions-response.js +5 -6
- package/packages/algod_client/src/models/pending-transactions-response.js.map +1 -1
- package/packages/algod_client/src/models/pending-transactions-response.mjs +1 -2
- package/packages/algod_client/src/models/pending-transactions-response.mjs.map +1 -1
- package/packages/algod_client/src/models/post-transactions-response.js +2 -4
- package/packages/algod_client/src/models/post-transactions-response.js.map +1 -1
- package/packages/algod_client/src/models/post-transactions-response.mjs +1 -2
- package/packages/algod_client/src/models/post-transactions-response.mjs.map +1 -1
- package/packages/algod_client/src/models/scratch-change.d.ts +0 -1
- package/packages/algod_client/src/models/scratch-change.js +4 -5
- package/packages/algod_client/src/models/scratch-change.js.map +1 -1
- package/packages/algod_client/src/models/scratch-change.mjs +1 -2
- package/packages/algod_client/src/models/scratch-change.mjs.map +1 -1
- package/packages/algod_client/src/models/simulate-initial-states.d.ts +0 -1
- package/packages/algod_client/src/models/simulate-initial-states.js +4 -5
- package/packages/algod_client/src/models/simulate-initial-states.js.map +1 -1
- package/packages/algod_client/src/models/simulate-initial-states.mjs +1 -2
- package/packages/algod_client/src/models/simulate-initial-states.mjs.map +1 -1
- package/packages/algod_client/src/models/simulate-request-transaction-group.d.ts +0 -1
- package/packages/algod_client/src/models/simulate-request-transaction-group.js +4 -5
- package/packages/algod_client/src/models/simulate-request-transaction-group.js.map +1 -1
- package/packages/algod_client/src/models/simulate-request-transaction-group.mjs +1 -2
- package/packages/algod_client/src/models/simulate-request-transaction-group.mjs.map +1 -1
- package/packages/algod_client/src/models/simulate-request.d.ts +0 -1
- package/packages/algod_client/src/models/simulate-request.js +8 -9
- package/packages/algod_client/src/models/simulate-request.js.map +1 -1
- package/packages/algod_client/src/models/simulate-request.mjs +1 -2
- package/packages/algod_client/src/models/simulate-request.mjs.map +1 -1
- package/packages/algod_client/src/models/simulate-response.js +10 -11
- package/packages/algod_client/src/models/simulate-response.js.map +1 -1
- package/packages/algod_client/src/models/simulate-response.mjs +1 -2
- package/packages/algod_client/src/models/simulate-response.mjs.map +1 -1
- package/packages/algod_client/src/models/simulate-trace-config.js +2 -3
- package/packages/algod_client/src/models/simulate-trace-config.js.map +1 -1
- package/packages/algod_client/src/models/simulate-trace-config.mjs +1 -2
- package/packages/algod_client/src/models/simulate-trace-config.mjs.map +1 -1
- package/packages/algod_client/src/models/simulate-transaction-group-result.d.ts +0 -1
- package/packages/algod_client/src/models/simulate-transaction-group-result.js +7 -8
- package/packages/algod_client/src/models/simulate-transaction-group-result.js.map +1 -1
- package/packages/algod_client/src/models/simulate-transaction-group-result.mjs +1 -2
- package/packages/algod_client/src/models/simulate-transaction-group-result.mjs.map +1 -1
- package/packages/algod_client/src/models/simulate-transaction-result.d.ts +0 -1
- package/packages/algod_client/src/models/simulate-transaction-result.js +7 -8
- package/packages/algod_client/src/models/simulate-transaction-result.js.map +1 -1
- package/packages/algod_client/src/models/simulate-transaction-result.mjs +1 -2
- package/packages/algod_client/src/models/simulate-transaction-result.mjs.map +1 -1
- package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.d.ts +0 -1
- package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.js +5 -6
- package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.js.map +1 -1
- package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.mjs +1 -2
- package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.mjs.map +1 -1
- package/packages/algod_client/src/models/simulation-eval-overrides.js +3 -4
- package/packages/algod_client/src/models/simulation-eval-overrides.js.map +1 -1
- package/packages/algod_client/src/models/simulation-eval-overrides.mjs +1 -2
- package/packages/algod_client/src/models/simulation-eval-overrides.mjs.map +1 -1
- package/packages/algod_client/src/models/simulation-opcode-trace-unit.d.ts +0 -1
- package/packages/algod_client/src/models/simulation-opcode-trace-unit.js +7 -8
- package/packages/algod_client/src/models/simulation-opcode-trace-unit.js.map +1 -1
- package/packages/algod_client/src/models/simulation-opcode-trace-unit.mjs +1 -2
- package/packages/algod_client/src/models/simulation-opcode-trace-unit.mjs.map +1 -1
- package/packages/algod_client/src/models/simulation-transaction-exec-trace.d.ts +0 -1
- package/packages/algod_client/src/models/simulation-transaction-exec-trace.js +7 -8
- package/packages/algod_client/src/models/simulation-transaction-exec-trace.js.map +1 -1
- package/packages/algod_client/src/models/simulation-transaction-exec-trace.mjs +1 -2
- package/packages/algod_client/src/models/simulation-transaction-exec-trace.mjs.map +1 -1
- package/packages/algod_client/src/models/source-map.js +4 -5
- package/packages/algod_client/src/models/source-map.js.map +1 -1
- package/packages/algod_client/src/models/source-map.mjs +1 -2
- package/packages/algod_client/src/models/source-map.mjs.map +1 -1
- package/packages/algod_client/src/models/state-delta.d.ts +0 -1
- package/packages/algod_client/src/models/state-delta.js +4 -5
- package/packages/algod_client/src/models/state-delta.js.map +1 -1
- package/packages/algod_client/src/models/state-delta.mjs +1 -2
- package/packages/algod_client/src/models/state-delta.mjs.map +1 -1
- package/packages/algod_client/src/models/state-proof-message.js +3 -4
- package/packages/algod_client/src/models/state-proof-message.js.map +1 -1
- package/packages/algod_client/src/models/state-proof-message.mjs +1 -2
- package/packages/algod_client/src/models/state-proof-message.mjs.map +1 -1
- package/packages/algod_client/src/models/state-proof.d.ts +0 -1
- package/packages/algod_client/src/models/state-proof.js +4 -5
- package/packages/algod_client/src/models/state-proof.js.map +1 -1
- package/packages/algod_client/src/models/state-proof.mjs +1 -2
- package/packages/algod_client/src/models/state-proof.mjs.map +1 -1
- package/packages/algod_client/src/models/supply-response.js +2 -3
- package/packages/algod_client/src/models/supply-response.js.map +1 -1
- package/packages/algod_client/src/models/supply-response.mjs +1 -2
- package/packages/algod_client/src/models/supply-response.mjs.map +1 -1
- package/packages/algod_client/src/models/teal-key-value-store.d.ts +0 -1
- package/packages/algod_client/src/models/teal-key-value-store.js +4 -5
- package/packages/algod_client/src/models/teal-key-value-store.js.map +1 -1
- package/packages/algod_client/src/models/teal-key-value-store.mjs +1 -2
- package/packages/algod_client/src/models/teal-key-value-store.mjs.map +1 -1
- package/packages/algod_client/src/models/teal-key-value.d.ts +0 -1
- package/packages/algod_client/src/models/teal-key-value.js +4 -5
- package/packages/algod_client/src/models/teal-key-value.js.map +1 -1
- package/packages/algod_client/src/models/teal-key-value.mjs +1 -2
- package/packages/algod_client/src/models/teal-key-value.mjs.map +1 -1
- package/packages/algod_client/src/models/teal-value.js +4 -6
- package/packages/algod_client/src/models/teal-value.js.map +1 -1
- package/packages/algod_client/src/models/teal-value.mjs +1 -2
- package/packages/algod_client/src/models/teal-value.mjs.map +1 -1
- package/packages/algod_client/src/models/transaction-group-ledger-state-deltas-for-round-response.js +4 -5
- package/packages/algod_client/src/models/transaction-group-ledger-state-deltas-for-round-response.js.map +1 -1
- package/packages/algod_client/src/models/transaction-group-ledger-state-deltas-for-round-response.mjs +1 -2
- package/packages/algod_client/src/models/transaction-group-ledger-state-deltas-for-round-response.mjs.map +1 -1
- package/packages/algod_client/src/models/transaction-parameters-response.js +4 -5
- package/packages/algod_client/src/models/transaction-parameters-response.js.map +1 -1
- package/packages/algod_client/src/models/transaction-parameters-response.mjs +1 -2
- package/packages/algod_client/src/models/transaction-parameters-response.mjs.map +1 -1
- package/packages/algod_client/src/models/transaction-proof.js +4 -5
- package/packages/algod_client/src/models/transaction-proof.js.map +1 -1
- package/packages/algod_client/src/models/transaction-proof.mjs +1 -2
- package/packages/algod_client/src/models/transaction-proof.mjs.map +1 -1
- package/packages/algod_client/src/models/version.d.ts +0 -1
- package/packages/algod_client/src/models/version.js +6 -7
- package/packages/algod_client/src/models/version.js.map +1 -1
- package/packages/algod_client/src/models/version.mjs +1 -2
- package/packages/algod_client/src/models/version.mjs.map +1 -1
- package/packages/common/src/address.js +12 -13
- package/packages/common/src/address.js.map +1 -1
- package/packages/common/src/address.mjs +10 -11
- package/packages/common/src/address.mjs.map +1 -1
- package/packages/common/src/array.js +1 -2
- package/packages/common/src/array.js.map +1 -1
- package/packages/common/src/array.mjs +1 -1
- package/packages/common/src/codecs/codec.d.ts +0 -1
- package/packages/common/src/codecs/codec.js +1 -2
- package/packages/common/src/codecs/codec.js.map +1 -1
- package/packages/common/src/codecs/codec.mjs +1 -1
- package/packages/common/src/codecs/codec.mjs.map +1 -1
- package/packages/common/src/codecs/composite/array.js +8 -9
- package/packages/common/src/codecs/composite/array.js.map +1 -1
- package/packages/common/src/codecs/composite/array.mjs +1 -2
- package/packages/common/src/codecs/composite/array.mjs.map +1 -1
- package/packages/common/src/codecs/composite/map.d.ts +0 -1
- package/packages/common/src/codecs/composite/map.js +2 -3
- package/packages/common/src/codecs/composite/map.js.map +1 -1
- package/packages/common/src/codecs/composite/map.mjs +1 -2
- package/packages/common/src/codecs/composite/map.mjs.map +1 -1
- package/packages/common/src/codecs/composite/record.d.ts +0 -1
- package/packages/common/src/codecs/composite/record.js +3 -4
- package/packages/common/src/codecs/composite/record.js.map +1 -1
- package/packages/common/src/codecs/composite/record.mjs +1 -2
- package/packages/common/src/codecs/composite/record.mjs.map +1 -1
- package/packages/common/src/codecs/models/array-model.js +2 -3
- package/packages/common/src/codecs/models/array-model.js.map +1 -1
- package/packages/common/src/codecs/models/array-model.mjs +1 -2
- package/packages/common/src/codecs/models/array-model.mjs.map +1 -1
- package/packages/common/src/codecs/models/object-model.js +4 -6
- package/packages/common/src/codecs/models/object-model.js.map +1 -1
- package/packages/common/src/codecs/models/object-model.mjs +2 -4
- package/packages/common/src/codecs/models/object-model.mjs.map +1 -1
- package/packages/common/src/codecs/models/primitive-model.js +2 -3
- package/packages/common/src/codecs/models/primitive-model.js.map +1 -1
- package/packages/common/src/codecs/models/primitive-model.mjs +1 -2
- package/packages/common/src/codecs/models/primitive-model.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/address.js +7 -8
- package/packages/common/src/codecs/primitives/address.js.map +1 -1
- package/packages/common/src/codecs/primitives/address.mjs +4 -5
- package/packages/common/src/codecs/primitives/address.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/bigint.js +2 -3
- package/packages/common/src/codecs/primitives/bigint.js.map +1 -1
- package/packages/common/src/codecs/primitives/bigint.mjs +1 -2
- package/packages/common/src/codecs/primitives/bigint.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/boolean.js +2 -3
- package/packages/common/src/codecs/primitives/boolean.js.map +1 -1
- package/packages/common/src/codecs/primitives/boolean.mjs +1 -2
- package/packages/common/src/codecs/primitives/boolean.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/bytes-base64.js +3 -4
- package/packages/common/src/codecs/primitives/bytes-base64.js.map +1 -1
- package/packages/common/src/codecs/primitives/bytes-base64.mjs +1 -2
- package/packages/common/src/codecs/primitives/bytes-base64.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/bytes.js +3 -4
- package/packages/common/src/codecs/primitives/bytes.js.map +1 -1
- package/packages/common/src/codecs/primitives/bytes.mjs +1 -2
- package/packages/common/src/codecs/primitives/bytes.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/fixed-bytes.js +3 -4
- package/packages/common/src/codecs/primitives/fixed-bytes.js.map +1 -1
- package/packages/common/src/codecs/primitives/fixed-bytes.mjs +1 -2
- package/packages/common/src/codecs/primitives/fixed-bytes.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/number.js +2 -3
- package/packages/common/src/codecs/primitives/number.js.map +1 -1
- package/packages/common/src/codecs/primitives/number.mjs +1 -2
- package/packages/common/src/codecs/primitives/number.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/string.js +3 -4
- package/packages/common/src/codecs/primitives/string.js.map +1 -1
- package/packages/common/src/codecs/primitives/string.mjs +1 -2
- package/packages/common/src/codecs/primitives/string.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/unknown.d.ts +0 -1
- package/packages/common/src/codecs/primitives/unknown.js +10 -11
- package/packages/common/src/codecs/primitives/unknown.js.map +1 -1
- package/packages/common/src/codecs/primitives/unknown.mjs +3 -4
- package/packages/common/src/codecs/primitives/unknown.mjs.map +1 -1
- package/packages/common/src/codecs/types.d.ts +0 -1
- package/packages/common/src/codecs/wire.js +2 -3
- package/packages/common/src/codecs/wire.js.map +1 -1
- package/packages/common/src/codecs/wire.mjs +1 -2
- package/packages/common/src/codecs/wire.mjs.map +1 -1
- package/packages/common/src/constants.js +2 -3
- package/packages/common/src/constants.js.map +1 -1
- package/packages/common/src/constants.mjs +2 -2
- package/packages/common/src/constants.mjs.map +1 -1
- package/packages/common/src/encoding.js +2 -3
- package/packages/common/src/encoding.js.map +1 -1
- package/packages/common/src/encoding.mjs +1 -2
- package/packages/common/src/encoding.mjs.map +1 -1
- package/packages/common/src/json.js +2 -3
- package/packages/common/src/json.js.map +1 -1
- package/packages/common/src/json.mjs +1 -2
- package/packages/common/src/json.mjs.map +1 -1
- package/packages/common/src/msgpack.js +2 -3
- package/packages/common/src/msgpack.js.map +1 -1
- package/packages/common/src/msgpack.mjs +1 -2
- package/packages/common/src/msgpack.mjs.map +1 -1
- package/packages/common/src/sourcemap.js +2 -3
- package/packages/common/src/sourcemap.js.map +1 -1
- package/packages/common/src/sourcemap.mjs +1 -2
- package/packages/common/src/sourcemap.mjs.map +1 -1
- package/packages/crypto/src/ed25519.js +2 -3
- package/packages/crypto/src/ed25519.js.map +1 -1
- package/packages/crypto/src/ed25519.mjs +1 -2
- package/packages/crypto/src/ed25519.mjs.map +1 -1
- package/packages/crypto/src/hash.js +4 -5
- package/packages/crypto/src/hash.js.map +1 -1
- package/packages/crypto/src/hash.mjs +3 -4
- package/packages/crypto/src/hash.mjs.map +1 -1
- package/packages/crypto/src/hd.d.ts +3 -7
- package/packages/crypto/src/hd.js +2 -3
- package/packages/crypto/src/hd.js.map +1 -1
- package/packages/crypto/src/hd.mjs +1 -2
- package/packages/crypto/src/hd.mjs.map +1 -1
- package/packages/crypto/src/index.js +5 -6
- package/packages/crypto/src/index.js.map +1 -1
- package/packages/crypto/src/index.mjs +4 -5
- package/packages/crypto/src/index.mjs.map +1 -1
- package/packages/indexer_client/src/apis/api-service.js +19 -20
- package/packages/indexer_client/src/apis/api-service.js.map +1 -1
- package/packages/indexer_client/src/apis/api-service.mjs +1 -2
- package/packages/indexer_client/src/apis/api-service.mjs.map +1 -1
- package/packages/indexer_client/src/client.js +3 -4
- package/packages/indexer_client/src/client.js.map +1 -1
- package/packages/indexer_client/src/client.mjs +1 -2
- package/packages/indexer_client/src/client.mjs.map +1 -1
- package/packages/indexer_client/src/core/api-error.js +1 -2
- package/packages/indexer_client/src/core/api-error.js.map +1 -1
- package/packages/indexer_client/src/core/api-error.mjs +1 -1
- package/packages/indexer_client/src/core/api-error.mjs.map +1 -1
- package/packages/indexer_client/src/core/base-http-request.js +1 -2
- package/packages/indexer_client/src/core/base-http-request.js.map +1 -1
- package/packages/indexer_client/src/core/base-http-request.mjs +1 -1
- package/packages/indexer_client/src/core/base-http-request.mjs.map +1 -1
- package/packages/indexer_client/src/core/fetch-http-request.js +3 -4
- package/packages/indexer_client/src/core/fetch-http-request.js.map +1 -1
- package/packages/indexer_client/src/core/fetch-http-request.mjs +1 -2
- package/packages/indexer_client/src/core/fetch-http-request.mjs.map +1 -1
- package/packages/indexer_client/src/core/model-runtime.js +2 -3
- package/packages/indexer_client/src/core/model-runtime.js.map +1 -1
- package/packages/indexer_client/src/core/model-runtime.mjs +1 -2
- package/packages/indexer_client/src/core/model-runtime.mjs.map +1 -1
- package/packages/indexer_client/src/core/request.js +5 -6
- package/packages/indexer_client/src/core/request.js.map +1 -1
- package/packages/indexer_client/src/core/request.mjs +1 -2
- package/packages/indexer_client/src/core/request.mjs.map +1 -1
- package/packages/indexer_client/src/models/account-participation.js +3 -4
- package/packages/indexer_client/src/models/account-participation.js.map +1 -1
- package/packages/indexer_client/src/models/account-participation.mjs +1 -2
- package/packages/indexer_client/src/models/account-participation.mjs.map +1 -1
- package/packages/indexer_client/src/models/account-response.js +4 -5
- package/packages/indexer_client/src/models/account-response.js.map +1 -1
- package/packages/indexer_client/src/models/account-response.mjs +1 -2
- package/packages/indexer_client/src/models/account-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/account-state-delta.d.ts +0 -1
- package/packages/indexer_client/src/models/account-state-delta.js +4 -5
- package/packages/indexer_client/src/models/account-state-delta.js.map +1 -1
- package/packages/indexer_client/src/models/account-state-delta.mjs +1 -2
- package/packages/indexer_client/src/models/account-state-delta.mjs.map +1 -1
- package/packages/indexer_client/src/models/account.d.ts +0 -1
- package/packages/indexer_client/src/models/account.js +14 -15
- package/packages/indexer_client/src/models/account.js.map +1 -1
- package/packages/indexer_client/src/models/account.mjs +1 -2
- package/packages/indexer_client/src/models/account.mjs.map +1 -1
- package/packages/indexer_client/src/models/accounts-response.js +6 -7
- package/packages/indexer_client/src/models/accounts-response.js.map +1 -1
- package/packages/indexer_client/src/models/accounts-response.mjs +1 -2
- package/packages/indexer_client/src/models/accounts-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/application-local-state.d.ts +0 -1
- package/packages/indexer_client/src/models/application-local-state.js +7 -8
- package/packages/indexer_client/src/models/application-local-state.js.map +1 -1
- package/packages/indexer_client/src/models/application-local-state.mjs +1 -2
- package/packages/indexer_client/src/models/application-local-state.mjs.map +1 -1
- package/packages/indexer_client/src/models/application-local-states-response.js +6 -7
- package/packages/indexer_client/src/models/application-local-states-response.js.map +1 -1
- package/packages/indexer_client/src/models/application-local-states-response.mjs +1 -2
- package/packages/indexer_client/src/models/application-local-states-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/application-log-data.js +3 -4
- package/packages/indexer_client/src/models/application-log-data.js.map +1 -1
- package/packages/indexer_client/src/models/application-log-data.mjs +1 -2
- package/packages/indexer_client/src/models/application-log-data.mjs.map +1 -1
- package/packages/indexer_client/src/models/application-logs-response.js +6 -7
- package/packages/indexer_client/src/models/application-logs-response.js.map +1 -1
- package/packages/indexer_client/src/models/application-logs-response.mjs +1 -2
- package/packages/indexer_client/src/models/application-logs-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/application-params.d.ts +0 -1
- package/packages/indexer_client/src/models/application-params.js +8 -9
- package/packages/indexer_client/src/models/application-params.js.map +1 -1
- package/packages/indexer_client/src/models/application-params.mjs +1 -2
- package/packages/indexer_client/src/models/application-params.mjs.map +1 -1
- package/packages/indexer_client/src/models/application-response.js +4 -5
- package/packages/indexer_client/src/models/application-response.js.map +1 -1
- package/packages/indexer_client/src/models/application-response.mjs +1 -2
- package/packages/indexer_client/src/models/application-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/application-state-schema.js +2 -3
- package/packages/indexer_client/src/models/application-state-schema.js.map +1 -1
- package/packages/indexer_client/src/models/application-state-schema.mjs +1 -2
- package/packages/indexer_client/src/models/application-state-schema.mjs.map +1 -1
- package/packages/indexer_client/src/models/application.d.ts +0 -1
- package/packages/indexer_client/src/models/application.js +5 -6
- package/packages/indexer_client/src/models/application.js.map +1 -1
- package/packages/indexer_client/src/models/application.mjs +1 -2
- package/packages/indexer_client/src/models/application.mjs.map +1 -1
- package/packages/indexer_client/src/models/applications-response.js +6 -7
- package/packages/indexer_client/src/models/applications-response.js.map +1 -1
- package/packages/indexer_client/src/models/applications-response.mjs +1 -2
- package/packages/indexer_client/src/models/applications-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/asset-balances-response.js +6 -7
- package/packages/indexer_client/src/models/asset-balances-response.js.map +1 -1
- package/packages/indexer_client/src/models/asset-balances-response.mjs +1 -2
- package/packages/indexer_client/src/models/asset-balances-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/asset-holding.js +3 -4
- package/packages/indexer_client/src/models/asset-holding.js.map +1 -1
- package/packages/indexer_client/src/models/asset-holding.mjs +1 -2
- package/packages/indexer_client/src/models/asset-holding.mjs.map +1 -1
- package/packages/indexer_client/src/models/asset-holdings-response.js +6 -7
- package/packages/indexer_client/src/models/asset-holdings-response.js.map +1 -1
- package/packages/indexer_client/src/models/asset-holdings-response.mjs +1 -2
- package/packages/indexer_client/src/models/asset-holdings-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/asset-params.js +7 -8
- package/packages/indexer_client/src/models/asset-params.js.map +1 -1
- package/packages/indexer_client/src/models/asset-params.mjs +1 -2
- package/packages/indexer_client/src/models/asset-params.mjs.map +1 -1
- package/packages/indexer_client/src/models/asset-response.js +4 -5
- package/packages/indexer_client/src/models/asset-response.js.map +1 -1
- package/packages/indexer_client/src/models/asset-response.mjs +1 -2
- package/packages/indexer_client/src/models/asset-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/asset.d.ts +0 -1
- package/packages/indexer_client/src/models/asset.js +5 -6
- package/packages/indexer_client/src/models/asset.js.map +1 -1
- package/packages/indexer_client/src/models/asset.mjs +1 -2
- package/packages/indexer_client/src/models/asset.mjs.map +1 -1
- package/packages/indexer_client/src/models/assets-response.js +6 -7
- package/packages/indexer_client/src/models/assets-response.js.map +1 -1
- package/packages/indexer_client/src/models/assets-response.mjs +1 -2
- package/packages/indexer_client/src/models/assets-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/block-headers-response.js +6 -7
- package/packages/indexer_client/src/models/block-headers-response.js.map +1 -1
- package/packages/indexer_client/src/models/block-headers-response.mjs +1 -2
- package/packages/indexer_client/src/models/block-headers-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/block-rewards.js +3 -4
- package/packages/indexer_client/src/models/block-rewards.js.map +1 -1
- package/packages/indexer_client/src/models/block-rewards.mjs +1 -2
- package/packages/indexer_client/src/models/block-rewards.mjs.map +1 -1
- package/packages/indexer_client/src/models/block-upgrade-state.js +4 -5
- package/packages/indexer_client/src/models/block-upgrade-state.js.map +1 -1
- package/packages/indexer_client/src/models/block-upgrade-state.mjs +1 -2
- package/packages/indexer_client/src/models/block-upgrade-state.mjs.map +1 -1
- package/packages/indexer_client/src/models/block-upgrade-vote.js +4 -5
- package/packages/indexer_client/src/models/block-upgrade-vote.js.map +1 -1
- package/packages/indexer_client/src/models/block-upgrade-vote.mjs +1 -2
- package/packages/indexer_client/src/models/block-upgrade-vote.mjs.map +1 -1
- package/packages/indexer_client/src/models/block.d.ts +0 -1
- package/packages/indexer_client/src/models/block.js +14 -15
- package/packages/indexer_client/src/models/block.js.map +1 -1
- package/packages/indexer_client/src/models/block.mjs +1 -2
- package/packages/indexer_client/src/models/block.mjs.map +1 -1
- package/packages/indexer_client/src/models/box-descriptor.js +2 -4
- package/packages/indexer_client/src/models/box-descriptor.js.map +1 -1
- package/packages/indexer_client/src/models/box-descriptor.mjs +1 -2
- package/packages/indexer_client/src/models/box-descriptor.mjs.map +1 -1
- package/packages/indexer_client/src/models/box-reference.js +3 -4
- package/packages/indexer_client/src/models/box-reference.js.map +1 -1
- package/packages/indexer_client/src/models/box-reference.mjs +1 -2
- package/packages/indexer_client/src/models/box-reference.mjs.map +1 -1
- package/packages/indexer_client/src/models/box.js +3 -4
- package/packages/indexer_client/src/models/box.js.map +1 -1
- package/packages/indexer_client/src/models/box.mjs +1 -2
- package/packages/indexer_client/src/models/box.mjs.map +1 -1
- package/packages/indexer_client/src/models/boxes-response.js +6 -7
- package/packages/indexer_client/src/models/boxes-response.js.map +1 -1
- package/packages/indexer_client/src/models/boxes-response.mjs +1 -2
- package/packages/indexer_client/src/models/boxes-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/eval-delta-key-value.d.ts +0 -1
- package/packages/indexer_client/src/models/eval-delta-key-value.js +4 -5
- package/packages/indexer_client/src/models/eval-delta-key-value.js.map +1 -1
- package/packages/indexer_client/src/models/eval-delta-key-value.mjs +1 -2
- package/packages/indexer_client/src/models/eval-delta-key-value.mjs.map +1 -1
- package/packages/indexer_client/src/models/eval-delta.js +4 -6
- package/packages/indexer_client/src/models/eval-delta.js.map +1 -1
- package/packages/indexer_client/src/models/eval-delta.mjs +1 -2
- package/packages/indexer_client/src/models/eval-delta.mjs.map +1 -1
- package/packages/indexer_client/src/models/hash-factory.js +2 -4
- package/packages/indexer_client/src/models/hash-factory.js.map +1 -1
- package/packages/indexer_client/src/models/hash-factory.mjs +1 -2
- package/packages/indexer_client/src/models/hash-factory.mjs.map +1 -1
- package/packages/indexer_client/src/models/hb-proof-fields.js +2 -3
- package/packages/indexer_client/src/models/hb-proof-fields.js.map +1 -1
- package/packages/indexer_client/src/models/hb-proof-fields.mjs +1 -2
- package/packages/indexer_client/src/models/hb-proof-fields.mjs.map +1 -1
- package/packages/indexer_client/src/models/health-check.js +7 -8
- package/packages/indexer_client/src/models/health-check.js.map +1 -1
- package/packages/indexer_client/src/models/health-check.mjs +1 -2
- package/packages/indexer_client/src/models/health-check.mjs.map +1 -1
- package/packages/indexer_client/src/models/holding-ref.d.ts +0 -1
- package/packages/indexer_client/src/models/holding-ref.js +3 -4
- package/packages/indexer_client/src/models/holding-ref.js.map +1 -1
- package/packages/indexer_client/src/models/holding-ref.mjs +1 -2
- package/packages/indexer_client/src/models/holding-ref.mjs.map +1 -1
- package/packages/indexer_client/src/models/indexer-state-proof-message.js +3 -4
- package/packages/indexer_client/src/models/indexer-state-proof-message.js.map +1 -1
- package/packages/indexer_client/src/models/indexer-state-proof-message.mjs +1 -2
- package/packages/indexer_client/src/models/indexer-state-proof-message.mjs.map +1 -1
- package/packages/indexer_client/src/models/locals-ref.d.ts +0 -1
- package/packages/indexer_client/src/models/locals-ref.js +3 -4
- package/packages/indexer_client/src/models/locals-ref.js.map +1 -1
- package/packages/indexer_client/src/models/locals-ref.mjs +1 -2
- package/packages/indexer_client/src/models/locals-ref.mjs.map +1 -1
- package/packages/indexer_client/src/models/merkle-array-proof.js +5 -6
- package/packages/indexer_client/src/models/merkle-array-proof.js.map +1 -1
- package/packages/indexer_client/src/models/merkle-array-proof.mjs +1 -2
- package/packages/indexer_client/src/models/merkle-array-proof.mjs.map +1 -1
- package/packages/indexer_client/src/models/mini-asset-holding.js +4 -6
- package/packages/indexer_client/src/models/mini-asset-holding.js.map +1 -1
- package/packages/indexer_client/src/models/mini-asset-holding.mjs +1 -2
- package/packages/indexer_client/src/models/mini-asset-holding.mjs.map +1 -1
- package/packages/indexer_client/src/models/on-completion.js +2 -4
- package/packages/indexer_client/src/models/on-completion.js.map +1 -1
- package/packages/indexer_client/src/models/on-completion.mjs +1 -2
- package/packages/indexer_client/src/models/on-completion.mjs.map +1 -1
- package/packages/indexer_client/src/models/participation-updates.js +2 -3
- package/packages/indexer_client/src/models/participation-updates.js.map +1 -1
- package/packages/indexer_client/src/models/participation-updates.mjs +1 -2
- package/packages/indexer_client/src/models/participation-updates.mjs.map +1 -1
- package/packages/indexer_client/src/models/resource-ref.d.ts +0 -1
- package/packages/indexer_client/src/models/resource-ref.js +7 -8
- package/packages/indexer_client/src/models/resource-ref.js.map +1 -1
- package/packages/indexer_client/src/models/resource-ref.mjs +1 -2
- package/packages/indexer_client/src/models/resource-ref.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-delta.d.ts +0 -1
- package/packages/indexer_client/src/models/state-delta.js +4 -5
- package/packages/indexer_client/src/models/state-delta.js.map +1 -1
- package/packages/indexer_client/src/models/state-delta.mjs +1 -2
- package/packages/indexer_client/src/models/state-delta.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-proof-fields.d.ts +0 -1
- package/packages/indexer_client/src/models/state-proof-fields.js +8 -9
- package/packages/indexer_client/src/models/state-proof-fields.js.map +1 -1
- package/packages/indexer_client/src/models/state-proof-fields.mjs +1 -2
- package/packages/indexer_client/src/models/state-proof-fields.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-proof-participant.js +4 -5
- package/packages/indexer_client/src/models/state-proof-participant.js.map +1 -1
- package/packages/indexer_client/src/models/state-proof-participant.mjs +1 -2
- package/packages/indexer_client/src/models/state-proof-participant.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-proof-reveal.js +5 -6
- package/packages/indexer_client/src/models/state-proof-reveal.js.map +1 -1
- package/packages/indexer_client/src/models/state-proof-reveal.mjs +1 -2
- package/packages/indexer_client/src/models/state-proof-reveal.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-proof-sig-slot.js +4 -5
- package/packages/indexer_client/src/models/state-proof-sig-slot.js.map +1 -1
- package/packages/indexer_client/src/models/state-proof-sig-slot.mjs +1 -2
- package/packages/indexer_client/src/models/state-proof-sig-slot.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-proof-signature.js +5 -6
- package/packages/indexer_client/src/models/state-proof-signature.js.map +1 -1
- package/packages/indexer_client/src/models/state-proof-signature.mjs +1 -2
- package/packages/indexer_client/src/models/state-proof-signature.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-proof-tracking.js +4 -5
- package/packages/indexer_client/src/models/state-proof-tracking.js.map +1 -1
- package/packages/indexer_client/src/models/state-proof-tracking.mjs +1 -2
- package/packages/indexer_client/src/models/state-proof-tracking.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-proof-verifier.js +3 -5
- package/packages/indexer_client/src/models/state-proof-verifier.js.map +1 -1
- package/packages/indexer_client/src/models/state-proof-verifier.mjs +1 -2
- package/packages/indexer_client/src/models/state-proof-verifier.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-schema.js +2 -3
- package/packages/indexer_client/src/models/state-schema.js.map +1 -1
- package/packages/indexer_client/src/models/state-schema.mjs +1 -2
- package/packages/indexer_client/src/models/state-schema.mjs.map +1 -1
- package/packages/indexer_client/src/models/teal-key-value-store.d.ts +0 -1
- package/packages/indexer_client/src/models/teal-key-value-store.js +4 -5
- package/packages/indexer_client/src/models/teal-key-value-store.js.map +1 -1
- package/packages/indexer_client/src/models/teal-key-value-store.mjs +1 -2
- package/packages/indexer_client/src/models/teal-key-value-store.mjs.map +1 -1
- package/packages/indexer_client/src/models/teal-key-value.d.ts +0 -1
- package/packages/indexer_client/src/models/teal-key-value.js +4 -5
- package/packages/indexer_client/src/models/teal-key-value.js.map +1 -1
- package/packages/indexer_client/src/models/teal-key-value.mjs +1 -2
- package/packages/indexer_client/src/models/teal-key-value.mjs.map +1 -1
- package/packages/indexer_client/src/models/teal-value.js +4 -6
- package/packages/indexer_client/src/models/teal-value.js.map +1 -1
- package/packages/indexer_client/src/models/teal-value.mjs +1 -2
- package/packages/indexer_client/src/models/teal-value.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-application.d.ts +0 -1
- package/packages/indexer_client/src/models/transaction-application.js +11 -12
- package/packages/indexer_client/src/models/transaction-application.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-application.mjs +1 -2
- package/packages/indexer_client/src/models/transaction-application.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-asset-config.d.ts +0 -1
- package/packages/indexer_client/src/models/transaction-asset-config.js +4 -5
- package/packages/indexer_client/src/models/transaction-asset-config.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-asset-config.mjs +1 -2
- package/packages/indexer_client/src/models/transaction-asset-config.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-asset-freeze.js +4 -6
- package/packages/indexer_client/src/models/transaction-asset-freeze.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-asset-freeze.mjs +1 -2
- package/packages/indexer_client/src/models/transaction-asset-freeze.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-asset-transfer.js +3 -4
- package/packages/indexer_client/src/models/transaction-asset-transfer.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-asset-transfer.mjs +1 -2
- package/packages/indexer_client/src/models/transaction-asset-transfer.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-heartbeat.d.ts +0 -1
- package/packages/indexer_client/src/models/transaction-heartbeat.js +7 -8
- package/packages/indexer_client/src/models/transaction-heartbeat.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-heartbeat.mjs +1 -2
- package/packages/indexer_client/src/models/transaction-heartbeat.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-keyreg.js +4 -5
- package/packages/indexer_client/src/models/transaction-keyreg.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-keyreg.mjs +1 -2
- package/packages/indexer_client/src/models/transaction-keyreg.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-payment.js +3 -4
- package/packages/indexer_client/src/models/transaction-payment.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-payment.mjs +1 -2
- package/packages/indexer_client/src/models/transaction-payment.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-response.js +4 -5
- package/packages/indexer_client/src/models/transaction-response.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-response.mjs +1 -2
- package/packages/indexer_client/src/models/transaction-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-signature-logicsig.d.ts +0 -1
- package/packages/indexer_client/src/models/transaction-signature-logicsig.js +6 -7
- package/packages/indexer_client/src/models/transaction-signature-logicsig.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-signature-logicsig.mjs +1 -2
- package/packages/indexer_client/src/models/transaction-signature-logicsig.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-signature-multisig-subsignature.js +2 -3
- package/packages/indexer_client/src/models/transaction-signature-multisig-subsignature.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-signature-multisig-subsignature.mjs +1 -2
- package/packages/indexer_client/src/models/transaction-signature-multisig-subsignature.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-signature-multisig.d.ts +0 -1
- package/packages/indexer_client/src/models/transaction-signature-multisig.js +5 -6
- package/packages/indexer_client/src/models/transaction-signature-multisig.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-signature-multisig.mjs +1 -2
- package/packages/indexer_client/src/models/transaction-signature-multisig.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-signature.d.ts +0 -1
- package/packages/indexer_client/src/models/transaction-signature.js +5 -6
- package/packages/indexer_client/src/models/transaction-signature.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-signature.mjs +1 -2
- package/packages/indexer_client/src/models/transaction-signature.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-state-proof.d.ts +0 -1
- package/packages/indexer_client/src/models/transaction-state-proof.js +5 -6
- package/packages/indexer_client/src/models/transaction-state-proof.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-state-proof.mjs +1 -2
- package/packages/indexer_client/src/models/transaction-state-proof.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction.d.ts +0 -1
- package/packages/indexer_client/src/models/transaction.js +21 -22
- package/packages/indexer_client/src/models/transaction.js.map +1 -1
- package/packages/indexer_client/src/models/transaction.mjs +1 -2
- package/packages/indexer_client/src/models/transaction.mjs.map +1 -1
- package/packages/indexer_client/src/models/transactions-response.js +6 -7
- package/packages/indexer_client/src/models/transactions-response.js.map +1 -1
- package/packages/indexer_client/src/models/transactions-response.mjs +1 -2
- package/packages/indexer_client/src/models/transactions-response.mjs.map +1 -1
- package/packages/kmd_client/src/apis/api-service.js +44 -46
- package/packages/kmd_client/src/apis/api-service.js.map +1 -1
- package/packages/kmd_client/src/apis/api-service.mjs +3 -5
- package/packages/kmd_client/src/apis/api-service.mjs.map +1 -1
- package/packages/kmd_client/src/client.js +3 -4
- package/packages/kmd_client/src/client.js.map +1 -1
- package/packages/kmd_client/src/client.mjs +1 -2
- package/packages/kmd_client/src/client.mjs.map +1 -1
- package/packages/kmd_client/src/core/api-error.js +1 -2
- package/packages/kmd_client/src/core/api-error.js.map +1 -1
- package/packages/kmd_client/src/core/api-error.mjs +1 -1
- package/packages/kmd_client/src/core/api-error.mjs.map +1 -1
- package/packages/kmd_client/src/core/base-http-request.js +1 -2
- package/packages/kmd_client/src/core/base-http-request.js.map +1 -1
- package/packages/kmd_client/src/core/base-http-request.mjs +1 -1
- package/packages/kmd_client/src/core/base-http-request.mjs.map +1 -1
- package/packages/kmd_client/src/core/fetch-http-request.js +3 -4
- package/packages/kmd_client/src/core/fetch-http-request.js.map +1 -1
- package/packages/kmd_client/src/core/fetch-http-request.mjs +1 -2
- package/packages/kmd_client/src/core/fetch-http-request.mjs.map +1 -1
- package/packages/kmd_client/src/core/model-runtime.js +3 -4
- package/packages/kmd_client/src/core/model-runtime.js.map +1 -1
- package/packages/kmd_client/src/core/model-runtime.mjs +1 -2
- package/packages/kmd_client/src/core/model-runtime.mjs.map +1 -1
- package/packages/kmd_client/src/core/request.js +5 -6
- package/packages/kmd_client/src/core/request.js.map +1 -1
- package/packages/kmd_client/src/core/request.mjs +1 -2
- package/packages/kmd_client/src/core/request.mjs.map +1 -1
- package/packages/kmd_client/src/models/create-wallet-request.js +3 -4
- package/packages/kmd_client/src/models/create-wallet-request.js.map +1 -1
- package/packages/kmd_client/src/models/create-wallet-request.mjs +1 -2
- package/packages/kmd_client/src/models/create-wallet-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/create-wallet-response.d.ts +0 -1
- package/packages/kmd_client/src/models/create-wallet-response.js +3 -4
- package/packages/kmd_client/src/models/create-wallet-response.js.map +1 -1
- package/packages/kmd_client/src/models/create-wallet-response.mjs +1 -2
- package/packages/kmd_client/src/models/create-wallet-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/delete-key-request.d.ts +0 -1
- package/packages/kmd_client/src/models/delete-key-request.js +3 -4
- package/packages/kmd_client/src/models/delete-key-request.js.map +1 -1
- package/packages/kmd_client/src/models/delete-key-request.mjs +1 -2
- package/packages/kmd_client/src/models/delete-key-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/delete-multisig-request.d.ts +0 -1
- package/packages/kmd_client/src/models/delete-multisig-request.js +3 -4
- package/packages/kmd_client/src/models/delete-multisig-request.js.map +1 -1
- package/packages/kmd_client/src/models/delete-multisig-request.mjs +1 -2
- package/packages/kmd_client/src/models/delete-multisig-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/export-key-request.d.ts +0 -1
- package/packages/kmd_client/src/models/export-key-request.js +3 -4
- package/packages/kmd_client/src/models/export-key-request.js.map +1 -1
- package/packages/kmd_client/src/models/export-key-request.mjs +1 -2
- package/packages/kmd_client/src/models/export-key-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/export-key-response.js +2 -4
- package/packages/kmd_client/src/models/export-key-response.js.map +1 -1
- package/packages/kmd_client/src/models/export-key-response.mjs +1 -2
- package/packages/kmd_client/src/models/export-key-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/export-master-key-request.js +2 -3
- package/packages/kmd_client/src/models/export-master-key-request.js.map +1 -1
- package/packages/kmd_client/src/models/export-master-key-request.mjs +1 -2
- package/packages/kmd_client/src/models/export-master-key-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/export-master-key-response.js +2 -4
- package/packages/kmd_client/src/models/export-master-key-response.js.map +1 -1
- package/packages/kmd_client/src/models/export-master-key-response.mjs +1 -2
- package/packages/kmd_client/src/models/export-master-key-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/export-multisig-request.d.ts +0 -1
- package/packages/kmd_client/src/models/export-multisig-request.js +3 -4
- package/packages/kmd_client/src/models/export-multisig-request.js.map +1 -1
- package/packages/kmd_client/src/models/export-multisig-request.mjs +1 -2
- package/packages/kmd_client/src/models/export-multisig-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/export-multisig-response.js +3 -4
- package/packages/kmd_client/src/models/export-multisig-response.js.map +1 -1
- package/packages/kmd_client/src/models/export-multisig-response.mjs +1 -2
- package/packages/kmd_client/src/models/export-multisig-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/generate-key-request.js +2 -4
- package/packages/kmd_client/src/models/generate-key-request.js.map +1 -1
- package/packages/kmd_client/src/models/generate-key-request.mjs +1 -2
- package/packages/kmd_client/src/models/generate-key-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/generate-key-response.d.ts +0 -1
- package/packages/kmd_client/src/models/generate-key-response.js +2 -4
- package/packages/kmd_client/src/models/generate-key-response.js.map +1 -1
- package/packages/kmd_client/src/models/generate-key-response.mjs +1 -2
- package/packages/kmd_client/src/models/generate-key-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/import-key-request.js +3 -4
- package/packages/kmd_client/src/models/import-key-request.js.map +1 -1
- package/packages/kmd_client/src/models/import-key-request.mjs +1 -2
- package/packages/kmd_client/src/models/import-key-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/import-key-response.d.ts +0 -1
- package/packages/kmd_client/src/models/import-key-response.js +2 -4
- package/packages/kmd_client/src/models/import-key-response.js.map +1 -1
- package/packages/kmd_client/src/models/import-key-response.mjs +1 -2
- package/packages/kmd_client/src/models/import-key-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/import-multisig-request.js +4 -5
- package/packages/kmd_client/src/models/import-multisig-request.js.map +1 -1
- package/packages/kmd_client/src/models/import-multisig-request.mjs +1 -2
- package/packages/kmd_client/src/models/import-multisig-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/import-multisig-response.d.ts +0 -1
- package/packages/kmd_client/src/models/import-multisig-response.js +2 -4
- package/packages/kmd_client/src/models/import-multisig-response.js.map +1 -1
- package/packages/kmd_client/src/models/import-multisig-response.mjs +1 -2
- package/packages/kmd_client/src/models/import-multisig-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/init-wallet-handle-token-request.js +2 -3
- package/packages/kmd_client/src/models/init-wallet-handle-token-request.js.map +1 -1
- package/packages/kmd_client/src/models/init-wallet-handle-token-request.mjs +1 -2
- package/packages/kmd_client/src/models/init-wallet-handle-token-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/init-wallet-handle-token-response.js +2 -4
- package/packages/kmd_client/src/models/init-wallet-handle-token-response.js.map +1 -1
- package/packages/kmd_client/src/models/init-wallet-handle-token-response.mjs +1 -2
- package/packages/kmd_client/src/models/init-wallet-handle-token-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/list-keys-request.js +2 -4
- package/packages/kmd_client/src/models/list-keys-request.js.map +1 -1
- package/packages/kmd_client/src/models/list-keys-request.mjs +1 -2
- package/packages/kmd_client/src/models/list-keys-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/list-keys-response.d.ts +0 -1
- package/packages/kmd_client/src/models/list-keys-response.js +2 -4
- package/packages/kmd_client/src/models/list-keys-response.js.map +1 -1
- package/packages/kmd_client/src/models/list-keys-response.mjs +1 -2
- package/packages/kmd_client/src/models/list-keys-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/list-multisig-request.js +2 -4
- package/packages/kmd_client/src/models/list-multisig-request.js.map +1 -1
- package/packages/kmd_client/src/models/list-multisig-request.mjs +1 -2
- package/packages/kmd_client/src/models/list-multisig-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/list-multisig-response.d.ts +0 -1
- package/packages/kmd_client/src/models/list-multisig-response.js +2 -4
- package/packages/kmd_client/src/models/list-multisig-response.js.map +1 -1
- package/packages/kmd_client/src/models/list-multisig-response.mjs +1 -2
- package/packages/kmd_client/src/models/list-multisig-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/list-wallets-response.d.ts +0 -1
- package/packages/kmd_client/src/models/list-wallets-response.js +4 -5
- package/packages/kmd_client/src/models/list-wallets-response.js.map +1 -1
- package/packages/kmd_client/src/models/list-wallets-response.mjs +1 -2
- package/packages/kmd_client/src/models/list-wallets-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/multisig-sig.d.ts +0 -1
- package/packages/kmd_client/src/models/multisig-sig.js +5 -6
- package/packages/kmd_client/src/models/multisig-sig.js.map +1 -1
- package/packages/kmd_client/src/models/multisig-sig.mjs +1 -2
- package/packages/kmd_client/src/models/multisig-sig.mjs.map +1 -1
- package/packages/kmd_client/src/models/multisig-subsig.js +2 -3
- package/packages/kmd_client/src/models/multisig-subsig.js.map +1 -1
- package/packages/kmd_client/src/models/multisig-subsig.mjs +1 -2
- package/packages/kmd_client/src/models/multisig-subsig.mjs.map +1 -1
- package/packages/kmd_client/src/models/release-wallet-handle-token-request.js +2 -4
- package/packages/kmd_client/src/models/release-wallet-handle-token-request.js.map +1 -1
- package/packages/kmd_client/src/models/release-wallet-handle-token-request.mjs +1 -2
- package/packages/kmd_client/src/models/release-wallet-handle-token-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/rename-wallet-request.js +2 -3
- package/packages/kmd_client/src/models/rename-wallet-request.js.map +1 -1
- package/packages/kmd_client/src/models/rename-wallet-request.mjs +1 -2
- package/packages/kmd_client/src/models/rename-wallet-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/rename-wallet-response.d.ts +0 -1
- package/packages/kmd_client/src/models/rename-wallet-response.js +3 -4
- package/packages/kmd_client/src/models/rename-wallet-response.js.map +1 -1
- package/packages/kmd_client/src/models/rename-wallet-response.mjs +1 -2
- package/packages/kmd_client/src/models/rename-wallet-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/renew-wallet-handle-token-request.js +2 -4
- package/packages/kmd_client/src/models/renew-wallet-handle-token-request.js.map +1 -1
- package/packages/kmd_client/src/models/renew-wallet-handle-token-request.mjs +1 -2
- package/packages/kmd_client/src/models/renew-wallet-handle-token-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/renew-wallet-handle-token-response.d.ts +0 -1
- package/packages/kmd_client/src/models/renew-wallet-handle-token-response.js +3 -4
- package/packages/kmd_client/src/models/renew-wallet-handle-token-response.js.map +1 -1
- package/packages/kmd_client/src/models/renew-wallet-handle-token-response.mjs +1 -2
- package/packages/kmd_client/src/models/renew-wallet-handle-token-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/sign-multisig-response.js +2 -4
- package/packages/kmd_client/src/models/sign-multisig-response.js.map +1 -1
- package/packages/kmd_client/src/models/sign-multisig-response.mjs +1 -2
- package/packages/kmd_client/src/models/sign-multisig-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/sign-multisig-txn-request.d.ts +0 -1
- package/packages/kmd_client/src/models/sign-multisig-txn-request.js +5 -6
- package/packages/kmd_client/src/models/sign-multisig-txn-request.js.map +1 -1
- package/packages/kmd_client/src/models/sign-multisig-txn-request.mjs +1 -2
- package/packages/kmd_client/src/models/sign-multisig-txn-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/sign-program-multisig-request.d.ts +0 -1
- package/packages/kmd_client/src/models/sign-program-multisig-request.js +7 -8
- package/packages/kmd_client/src/models/sign-program-multisig-request.js.map +1 -1
- package/packages/kmd_client/src/models/sign-program-multisig-request.mjs +1 -2
- package/packages/kmd_client/src/models/sign-program-multisig-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/sign-program-multisig-response.js +2 -4
- package/packages/kmd_client/src/models/sign-program-multisig-response.js.map +1 -1
- package/packages/kmd_client/src/models/sign-program-multisig-response.mjs +1 -2
- package/packages/kmd_client/src/models/sign-program-multisig-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/sign-program-request.d.ts +0 -1
- package/packages/kmd_client/src/models/sign-program-request.js +4 -5
- package/packages/kmd_client/src/models/sign-program-request.js.map +1 -1
- package/packages/kmd_client/src/models/sign-program-request.mjs +1 -2
- package/packages/kmd_client/src/models/sign-program-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/sign-program-response.js +2 -4
- package/packages/kmd_client/src/models/sign-program-response.js.map +1 -1
- package/packages/kmd_client/src/models/sign-program-response.mjs +1 -2
- package/packages/kmd_client/src/models/sign-program-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/sign-transaction-response.js +2 -4
- package/packages/kmd_client/src/models/sign-transaction-response.js.map +1 -1
- package/packages/kmd_client/src/models/sign-transaction-response.mjs +1 -2
- package/packages/kmd_client/src/models/sign-transaction-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/sign-txn-request.js +3 -4
- package/packages/kmd_client/src/models/sign-txn-request.js.map +1 -1
- package/packages/kmd_client/src/models/sign-txn-request.mjs +1 -2
- package/packages/kmd_client/src/models/sign-txn-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/tx-type.js +2 -4
- package/packages/kmd_client/src/models/tx-type.js.map +1 -1
- package/packages/kmd_client/src/models/tx-type.mjs +1 -2
- package/packages/kmd_client/src/models/tx-type.mjs.map +1 -1
- package/packages/kmd_client/src/models/versions-response.js +2 -4
- package/packages/kmd_client/src/models/versions-response.js.map +1 -1
- package/packages/kmd_client/src/models/versions-response.mjs +1 -2
- package/packages/kmd_client/src/models/versions-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/wallet-handle.d.ts +0 -1
- package/packages/kmd_client/src/models/wallet-handle.js +4 -5
- package/packages/kmd_client/src/models/wallet-handle.js.map +1 -1
- package/packages/kmd_client/src/models/wallet-handle.mjs +1 -2
- package/packages/kmd_client/src/models/wallet-handle.mjs.map +1 -1
- package/packages/kmd_client/src/models/wallet-info-request.js +2 -4
- package/packages/kmd_client/src/models/wallet-info-request.js.map +1 -1
- package/packages/kmd_client/src/models/wallet-info-request.mjs +1 -2
- package/packages/kmd_client/src/models/wallet-info-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/wallet-info-response.d.ts +0 -1
- package/packages/kmd_client/src/models/wallet-info-response.js +3 -4
- package/packages/kmd_client/src/models/wallet-info-response.js.map +1 -1
- package/packages/kmd_client/src/models/wallet-info-response.mjs +1 -2
- package/packages/kmd_client/src/models/wallet-info-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/wallet.d.ts +0 -1
- package/packages/kmd_client/src/models/wallet.js +7 -8
- package/packages/kmd_client/src/models/wallet.js.map +1 -1
- package/packages/kmd_client/src/models/wallet.mjs +1 -2
- package/packages/kmd_client/src/models/wallet.mjs.map +1 -1
- package/packages/testing/src/globalSetup.js +3 -4
- package/packages/testing/src/globalSetup.js.map +1 -1
- package/packages/testing/src/globalSetup.mjs +1 -2
- package/packages/testing/src/globalSetup.mjs.map +1 -1
- package/packages/testing/src/mockServer.js +1 -2
- package/packages/testing/src/mockServer.js.map +1 -1
- package/packages/testing/src/mockServer.mjs +1 -1
- package/packages/transact/src/logicsig.d.ts +0 -1
- package/packages/transact/src/logicsig.js +8 -9
- package/packages/transact/src/logicsig.js.map +1 -1
- package/packages/transact/src/logicsig.mjs +1 -2
- package/packages/transact/src/logicsig.mjs.map +1 -1
- package/packages/transact/src/multisig.js +9 -10
- package/packages/transact/src/multisig.js.map +1 -1
- package/packages/transact/src/multisig.mjs +6 -7
- package/packages/transact/src/multisig.mjs.map +1 -1
- package/packages/transact/src/signer.js +5 -6
- package/packages/transact/src/signer.js.map +1 -1
- package/packages/transact/src/signer.mjs +1 -2
- package/packages/transact/src/signer.mjs.map +1 -1
- package/packages/transact/src/transactions/app-call.d.ts +8 -19
- package/packages/transact/src/transactions/app-call.js +22 -23
- package/packages/transact/src/transactions/app-call.js.map +1 -1
- package/packages/transact/src/transactions/app-call.mjs +21 -22
- package/packages/transact/src/transactions/app-call.mjs.map +1 -1
- package/packages/transact/src/transactions/asset-config.d.ts +0 -1
- package/packages/transact/src/transactions/asset-config.js +11 -12
- package/packages/transact/src/transactions/asset-config.js.map +1 -1
- package/packages/transact/src/transactions/asset-config.mjs +10 -11
- package/packages/transact/src/transactions/asset-config.mjs.map +1 -1
- package/packages/transact/src/transactions/asset-freeze.d.ts +0 -1
- package/packages/transact/src/transactions/asset-freeze.js +2 -3
- package/packages/transact/src/transactions/asset-freeze.js.map +1 -1
- package/packages/transact/src/transactions/asset-freeze.mjs +1 -2
- package/packages/transact/src/transactions/asset-freeze.mjs.map +1 -1
- package/packages/transact/src/transactions/asset-transfer.d.ts +0 -1
- package/packages/transact/src/transactions/asset-transfer.js +2 -3
- package/packages/transact/src/transactions/asset-transfer.js.map +1 -1
- package/packages/transact/src/transactions/asset-transfer.mjs +1 -2
- package/packages/transact/src/transactions/asset-transfer.mjs.map +1 -1
- package/packages/transact/src/transactions/common.js +1 -2
- package/packages/transact/src/transactions/common.js.map +1 -1
- package/packages/transact/src/transactions/common.mjs +1 -1
- package/packages/transact/src/transactions/common.mjs.map +1 -1
- package/packages/transact/src/transactions/heartbeat.d.ts +8 -19
- package/packages/transact/src/transactions/key-registration.js +2 -3
- package/packages/transact/src/transactions/key-registration.js.map +1 -1
- package/packages/transact/src/transactions/key-registration.mjs +1 -2
- package/packages/transact/src/transactions/key-registration.mjs.map +1 -1
- package/packages/transact/src/transactions/payment.d.ts +0 -1
- package/packages/transact/src/transactions/reference-types-meta.d.ts +0 -1
- package/packages/transact/src/transactions/reference-types-meta.js +4 -5
- package/packages/transact/src/transactions/reference-types-meta.js.map +1 -1
- package/packages/transact/src/transactions/reference-types-meta.mjs +1 -2
- package/packages/transact/src/transactions/reference-types-meta.mjs.map +1 -1
- package/packages/transact/src/transactions/signed-transaction-meta.d.ts +0 -1
- package/packages/transact/src/transactions/signed-transaction-meta.js +8 -9
- package/packages/transact/src/transactions/signed-transaction-meta.js.map +1 -1
- package/packages/transact/src/transactions/signed-transaction-meta.mjs +1 -2
- package/packages/transact/src/transactions/signed-transaction-meta.mjs.map +1 -1
- package/packages/transact/src/transactions/signed-transaction.d.ts +0 -1
- package/packages/transact/src/transactions/signed-transaction.js +5 -6
- package/packages/transact/src/transactions/signed-transaction.js.map +1 -1
- package/packages/transact/src/transactions/signed-transaction.mjs +1 -2
- package/packages/transact/src/transactions/signed-transaction.mjs.map +1 -1
- package/packages/transact/src/transactions/state-proof.d.ts +2 -5
- package/packages/transact/src/transactions/transaction-meta.d.ts +0 -1
- package/packages/transact/src/transactions/transaction-meta.js +15 -16
- package/packages/transact/src/transactions/transaction-meta.js.map +1 -1
- package/packages/transact/src/transactions/transaction-meta.mjs +1 -2
- package/packages/transact/src/transactions/transaction-meta.mjs.map +1 -1
- package/packages/transact/src/transactions/transaction-type.d.ts +1 -1
- package/packages/transact/src/transactions/transaction-type.js +1 -2
- package/packages/transact/src/transactions/transaction-type.js.map +1 -1
- package/packages/transact/src/transactions/transaction-type.mjs +1 -1
- package/packages/transact/src/transactions/transaction-type.mjs.map +1 -1
- package/packages/transact/src/transactions/transaction.js +22 -23
- package/packages/transact/src/transactions/transaction.js.map +1 -1
- package/packages/transact/src/transactions/transaction.mjs +8 -9
- package/packages/transact/src/transactions/transaction.mjs.map +1 -1
- package/testing/account.d.ts +0 -1
- package/testing/account.js +4 -5
- package/testing/account.js.map +1 -1
- package/testing/account.mjs +1 -2
- package/testing/account.mjs.map +1 -1
- package/testing/fixtures/algokit-log-capture-fixture.d.ts +0 -1
- package/testing/fixtures/algokit-log-capture-fixture.js +3 -4
- package/testing/fixtures/algokit-log-capture-fixture.js.map +1 -1
- package/testing/fixtures/algokit-log-capture-fixture.mjs +1 -2
- package/testing/fixtures/algokit-log-capture-fixture.mjs.map +1 -1
- package/testing/fixtures/algorand-fixture.d.ts +0 -1
- package/testing/fixtures/algorand-fixture.js +8 -9
- package/testing/fixtures/algorand-fixture.js.map +1 -1
- package/testing/fixtures/algorand-fixture.mjs +1 -2
- package/testing/fixtures/algorand-fixture.mjs.map +1 -1
- package/testing/index.js +10 -11
- package/testing/index.mjs +1 -2
- package/testing/indexer.js +1 -2
- package/testing/indexer.js.map +1 -1
- package/testing/indexer.mjs +1 -1
- package/testing/test-logger.d.ts +0 -1
- package/testing/test-logger.js +2 -3
- package/testing/test-logger.js.map +1 -1
- package/testing/test-logger.mjs +1 -2
- package/testing/test-logger.mjs.map +1 -1
- package/testing/transaction-logger.d.ts +0 -1
- package/testing/transaction-logger.js +4 -5
- package/testing/transaction-logger.js.map +1 -1
- package/testing/transaction-logger.mjs +1 -2
- package/testing/transaction-logger.mjs.map +1 -1
- package/transact/index.js +12 -13
- package/transact/index.mjs +1 -2
- package/transaction/index.js +4 -5
- package/transaction/index.mjs +1 -2
- package/transaction/perform-transaction-composer-simulate.d.ts +0 -1
- package/transaction/perform-transaction-composer-simulate.js +3 -5
- package/transaction/perform-transaction-composer-simulate.js.map +1 -1
- package/transaction/perform-transaction-composer-simulate.mjs +3 -4
- package/transaction/perform-transaction-composer-simulate.mjs.map +1 -1
- package/transaction/transaction.js +2 -3
- package/transaction/transaction.js.map +1 -1
- package/transaction/transaction.mjs +1 -2
- package/transaction/transaction.mjs.map +1 -1
- package/transactions/app-call.d.ts +15 -32
- package/transactions/app-call.js +17 -18
- package/transactions/app-call.js.map +1 -1
- package/transactions/app-call.mjs +10 -11
- package/transactions/app-call.mjs.map +1 -1
- package/transactions/asset-config.d.ts +4 -10
- package/transactions/asset-config.js +5 -6
- package/transactions/asset-config.js.map +1 -1
- package/transactions/asset-config.mjs +1 -2
- package/transactions/asset-config.mjs.map +1 -1
- package/transactions/asset-transfer.d.ts +4 -10
- package/transactions/asset-transfer.js +5 -6
- package/transactions/asset-transfer.js.map +1 -1
- package/transactions/asset-transfer.mjs +1 -2
- package/transactions/asset-transfer.mjs.map +1 -1
- package/transactions/common.d.ts +7 -14
- package/transactions/common.js +3 -4
- package/transactions/common.js.map +1 -1
- package/transactions/common.mjs +1 -2
- package/transactions/common.mjs.map +1 -1
- package/transactions/fee-coverage.js +1 -2
- package/transactions/fee-coverage.js.map +1 -1
- package/transactions/fee-coverage.mjs +1 -1
- package/transactions/fee-coverage.mjs.map +1 -1
- package/transactions/key-registration.d.ts +6 -14
- package/transactions/key-registration.js +4 -5
- package/transactions/key-registration.js.map +1 -1
- package/transactions/key-registration.mjs +1 -2
- package/transactions/key-registration.mjs.map +1 -1
- package/transactions/method-call.d.ts +1 -3
- package/transactions/method-call.js +11 -14
- package/transactions/method-call.js.map +1 -1
- package/transactions/method-call.mjs +2 -5
- package/transactions/method-call.mjs.map +1 -1
- package/transactions/payment.d.ts +1 -4
- package/transactions/payment.js +5 -6
- package/transactions/payment.js.map +1 -1
- package/transactions/payment.mjs +1 -2
- package/transactions/payment.mjs.map +1 -1
- package/types/account-manager.js +3 -4
- package/types/account-manager.js.map +1 -1
- package/types/account-manager.mjs +1 -2
- package/types/account-manager.mjs.map +1 -1
- package/types/account.js +3 -5
- package/types/account.js.map +1 -1
- package/types/account.mjs +1 -2
- package/types/account.mjs.map +1 -1
- package/types/algorand-client-transaction-creator.js +3 -5
- package/types/algorand-client-transaction-creator.js.map +1 -1
- package/types/algorand-client-transaction-creator.mjs +1 -2
- package/types/algorand-client-transaction-creator.mjs.map +1 -1
- package/types/algorand-client-transaction-sender.js +3 -5
- package/types/algorand-client-transaction-sender.js.map +1 -1
- package/types/algorand-client-transaction-sender.mjs +1 -2
- package/types/algorand-client-transaction-sender.mjs.map +1 -1
- package/types/algorand-client.js +3 -5
- package/types/algorand-client.js.map +1 -1
- package/types/algorand-client.mjs +1 -2
- package/types/algorand-client.mjs.map +1 -1
- package/types/amount.js +3 -5
- package/types/amount.js.map +1 -1
- package/types/amount.mjs +1 -2
- package/types/amount.mjs.map +1 -1
- package/types/app-client.js +3 -5
- package/types/app-client.js.map +1 -1
- package/types/app-client.mjs +1 -2
- package/types/app-client.mjs.map +1 -1
- package/types/app-deployer.js +3 -5
- package/types/app-deployer.js.map +1 -1
- package/types/app-deployer.mjs +1 -2
- package/types/app-deployer.mjs.map +1 -1
- package/types/app-factory.js +3 -5
- package/types/app-factory.js.map +1 -1
- package/types/app-factory.mjs +1 -2
- package/types/app-factory.mjs.map +1 -1
- package/types/app-manager.js +3 -5
- package/types/app-manager.js.map +1 -1
- package/types/app-manager.mjs +1 -2
- package/types/app-manager.mjs.map +1 -1
- package/types/app-spec.js +3 -5
- package/types/app-spec.js.map +1 -1
- package/types/app-spec.mjs +1 -2
- package/types/app-spec.mjs.map +1 -1
- package/types/app.js +3 -4
- package/types/app.js.map +1 -1
- package/types/app.mjs +1 -2
- package/types/app.mjs.map +1 -1
- package/types/asset-manager.js +3 -5
- package/types/asset-manager.js.map +1 -1
- package/types/asset-manager.mjs +1 -2
- package/types/asset-manager.mjs.map +1 -1
- package/types/async-event-emitter.js +3 -5
- package/types/async-event-emitter.js.map +1 -1
- package/types/async-event-emitter.mjs +1 -2
- package/types/async-event-emitter.mjs.map +1 -1
- package/types/client-manager.js +3 -5
- package/types/client-manager.js.map +1 -1
- package/types/client-manager.mjs +1 -2
- package/types/client-manager.mjs.map +1 -1
- package/types/composer.js +3 -5
- package/types/composer.js.map +1 -1
- package/types/composer.mjs +1 -2
- package/types/composer.mjs.map +1 -1
- package/types/config.js +3 -5
- package/types/config.js.map +1 -1
- package/types/config.mjs +1 -2
- package/types/config.mjs.map +1 -1
- package/types/debugging.js +4 -5
- package/types/debugging.js.map +1 -1
- package/types/debugging.mjs +3 -4
- package/types/debugging.mjs.map +1 -1
- package/types/dispenser-client.js +3 -5
- package/types/dispenser-client.js.map +1 -1
- package/types/dispenser-client.mjs +1 -2
- package/types/dispenser-client.mjs.map +1 -1
- package/types/indexer.js +3 -4
- package/types/indexer.js.map +1 -1
- package/types/indexer.mjs +1 -2
- package/types/indexer.mjs.map +1 -1
- package/types/kmd-account-manager.js +3 -5
- package/types/kmd-account-manager.js.map +1 -1
- package/types/kmd-account-manager.mjs +1 -2
- package/types/kmd-account-manager.mjs.map +1 -1
- package/types/lifecycle-events.js +3 -5
- package/types/lifecycle-events.js.map +1 -1
- package/types/lifecycle-events.mjs +1 -2
- package/types/lifecycle-events.mjs.map +1 -1
- package/types/logging.js +3 -4
- package/types/logging.js.map +1 -1
- package/types/logging.mjs +1 -2
- package/types/logging.mjs.map +1 -1
- package/types/logic-error.js +3 -5
- package/types/logic-error.js.map +1 -1
- package/types/logic-error.mjs +1 -2
- package/types/logic-error.mjs.map +1 -1
- package/types/network-client.js +3 -5
- package/types/network-client.js.map +1 -1
- package/types/network-client.mjs +1 -2
- package/types/network-client.mjs.map +1 -1
- package/updatable-config.js +3 -4
- package/updatable-config.js.map +1 -1
- package/updatable-config.mjs +1 -2
- package/updatable-config.mjs.map +1 -1
- package/util.js +2 -3
- package/util.js.map +1 -1
- package/util.mjs +1 -2
- package/util.mjs.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalSetup.mjs","names":[],"sources":["../../../../packages/testing/src/globalSetup.ts"],"sourcesContent":["/**\n * Vitest global setup factory for mock server lifecycle.\n * Set MOCK_ALGOD_URL / MOCK_INDEXER_URL / MOCK_KMD_URL to use an external server.\n */\n\nimport { config } from 'dotenv'\nimport { resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { getMockServer, type ClientType, type MockServer } from './mockServer'\n\nconst currentDir = resolve(fileURLToPath(import.meta.url), '..')\nconst projectRoot = resolve(currentDir, '..', '..', '..')\nconfig({ path: resolve(projectRoot, '.env') })\n\nconst debug = process.env.DEBUG_MOCK_SERVER === 'true'\nconst log = debug ? console.log.bind(console) : () => {}\n\nexport function createGlobalSetup(clientType: ClientType) {\n let mockServer: MockServer | null = null\n\n return async function setup(): Promise<() => Promise<void>> {\n log(`[MockServer] Connecting to ${clientType} mock server...`)\n\n try {\n mockServer = await getMockServer(clientType)\n log(`[MockServer] ${clientType} server ready at ${mockServer.baseUrl}`)\n\n return async () => {\n log(`[MockServer] Disconnecting from ${clientType} mock server...`)\n log(`[MockServer] ${clientType} server disconnected`)\n }\n } catch (error) {\n console.error(`[MockServer] Failed to connect to ${clientType} server:`, error)\n throw error\n }\n }\n}\n\nexport const algodGlobalSetup = createGlobalSetup('algod')\nexport const indexerGlobalSetup = createGlobalSetup('indexer')\nexport const kmdGlobalSetup = createGlobalSetup('kmd')\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"globalSetup.mjs","names":[],"sources":["../../../../packages/testing/src/globalSetup.ts"],"sourcesContent":["/**\n * Vitest global setup factory for mock server lifecycle.\n * Set MOCK_ALGOD_URL / MOCK_INDEXER_URL / MOCK_KMD_URL to use an external server.\n */\n\nimport { config } from 'dotenv'\nimport { resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { getMockServer, type ClientType, type MockServer } from './mockServer'\n\nconst currentDir = resolve(fileURLToPath(import.meta.url), '..')\nconst projectRoot = resolve(currentDir, '..', '..', '..')\nconfig({ path: resolve(projectRoot, '.env') })\n\nconst debug = process.env.DEBUG_MOCK_SERVER === 'true'\nconst log = debug ? console.log.bind(console) : () => {}\n\nexport function createGlobalSetup(clientType: ClientType) {\n let mockServer: MockServer | null = null\n\n return async function setup(): Promise<() => Promise<void>> {\n log(`[MockServer] Connecting to ${clientType} mock server...`)\n\n try {\n mockServer = await getMockServer(clientType)\n log(`[MockServer] ${clientType} server ready at ${mockServer.baseUrl}`)\n\n return async () => {\n log(`[MockServer] Disconnecting from ${clientType} mock server...`)\n log(`[MockServer] ${clientType} server disconnected`)\n }\n } catch (error) {\n console.error(`[MockServer] Failed to connect to ${clientType} server:`, error)\n throw error\n }\n }\n}\n\nexport const algodGlobalSetup = createGlobalSetup('algod')\nexport const indexerGlobalSetup = createGlobalSetup('indexer')\nexport const kmdGlobalSetup = createGlobalSetup('kmd')\n"],"mappings":";;;;;;;;;AAYA,OAAO,EAAE,MAAM,QADK,QADD,QAAQ,cAAc,OAAO,KAAK,IAAI,EAAE,KAAK,EACxB,MAAM,MAAM,KAAK,EACrB,OAAO,EAAE,CAAC;AAG9C,MAAM,MADQ,QAAQ,IAAI,sBAAsB,SAC5B,QAAQ,IAAI,KAAK,QAAQ,SAAS;AAEtD,SAAgB,kBAAkB,YAAwB;CACxD,IAAI,aAAgC;AAEpC,QAAO,eAAe,QAAsC;AAC1D,MAAI,8BAA8B,WAAW,iBAAiB;AAE9D,MAAI;AACF,gBAAa,MAAM,cAAc,WAAW;AAC5C,OAAI,gBAAgB,WAAW,mBAAmB,WAAW,UAAU;AAEvE,UAAO,YAAY;AACjB,QAAI,mCAAmC,WAAW,iBAAiB;AACnE,QAAI,gBAAgB,WAAW,sBAAsB;;WAEhD,OAAO;AACd,WAAQ,MAAM,qCAAqC,WAAW,WAAW,MAAM;AAC/E,SAAM;;;;AAKZ,MAAa,mBAAmB,kBAAkB,QAAQ;AAC1D,MAAa,qBAAqB,kBAAkB,UAAU;AAC9D,MAAa,iBAAiB,kBAAkB,MAAM"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
//#region packages/testing/src/mockServer.ts
|
|
3
2
|
/** Environment variable names for external mock server URLs */
|
|
4
3
|
const EXTERNAL_URL_ENV_VARS = {
|
|
@@ -78,7 +77,6 @@ const TEST_BOX_NAME = "b64:cBbHBNV+zUy/Mz5IRhIrBLxr1on5wmidhXEavV+SasC8";
|
|
|
78
77
|
const TEST_ASSET_ID = 705457144;
|
|
79
78
|
const TEST_TXID = "VIXTUMAPT7NR4RB2WVOGMETW4QY43KIDA3HWDWWXS3UEDKGTEECQ";
|
|
80
79
|
const TEST_ROUND = 24099447;
|
|
81
|
-
|
|
82
80
|
//#endregion
|
|
83
81
|
exports.DEFAULT_TOKEN = DEFAULT_TOKEN;
|
|
84
82
|
exports.EXTERNAL_URL_ENV_VARS = EXTERNAL_URL_ENV_VARS;
|
|
@@ -92,4 +90,5 @@ exports.TEST_ROUND = TEST_ROUND;
|
|
|
92
90
|
exports.TEST_TXID = TEST_TXID;
|
|
93
91
|
exports.checkServerHealth = checkServerHealth;
|
|
94
92
|
exports.getMockServer = getMockServer;
|
|
93
|
+
|
|
95
94
|
//# sourceMappingURL=mockServer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockServer.js","names":[],"sources":["../../../../packages/testing/src/mockServer.ts"],"sourcesContent":["/**\n * Mock server infrastructure for algod/indexer/kmd client testing.\n *\n * Connects to externally managed mock servers that replay pre-recorded HAR files.\n * The mock server must be started separately (via GitHub Action in CI, or manually via bun for local dev).\n *\n * Set MOCK_ALGOD_URL / MOCK_INDEXER_URL / MOCK_KMD_URL environment variables to specify server URLs.\n */\n\n/** Supported client types for mock servers */\nexport type ClientType = 'algod' | 'indexer' | 'kmd'\n\n/** Environment variable names for external mock server URLs */\nexport const EXTERNAL_URL_ENV_VARS: Record<ClientType, string> = {\n algod: 'MOCK_ALGOD_URL',\n indexer: 'MOCK_INDEXER_URL',\n kmd: 'MOCK_KMD_URL',\n}\n\n/** Default token used for mock server authentication */\nexport const DEFAULT_TOKEN = 'a'.repeat(64)\n\n/** Default ports for mock servers when running locally (matches algokit-polytest defaults) */\nexport const MOCK_PORTS = {\n algod: { host: 8000 },\n indexer: { host: 8002 },\n kmd: { host: 8001 },\n} as const\n\n/** Mock server instance representing a connection to an external server */\nexport interface MockServer {\n /** Base URL of the mock server */\n baseUrl: string\n /** Type of client this server mocks */\n clientType: ClientType\n}\n\n/**\n * Check if a server is reachable by performing a health check.\n *\n * @param url - The base URL of the server to check\n * @param timeout - Maximum time to wait for the server to respond (default: 5000ms)\n * @returns Promise resolving to true if server is healthy, false otherwise\n */\nexport async function checkServerHealth(url: string, timeout = 5000): Promise<boolean> {\n const healthUrl = `${url.replace(/\\/$/, '')}/health`\n const start = Date.now()\n\n while (Date.now() - start < timeout) {\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), 2000)\n try {\n await fetch(healthUrl, { signal: controller.signal })\n clearTimeout(timeoutId)\n // Any HTTP response (including 500) indicates the server is reachable\n // The mock server returns 500 for unrecorded endpoints like /health\n return true\n } catch (error) {\n clearTimeout(timeoutId)\n // If it's a network error, retry\n if (error instanceof Error && error.name === 'AbortError') {\n await new Promise((resolve) => setTimeout(resolve, 200))\n continue\n }\n throw error\n }\n } catch {\n await new Promise((resolve) => setTimeout(resolve, 200))\n }\n }\n return false\n}\n\n/**\n * Get a mock server instance for the specified client type.\n *\n * Reads the appropriate environment variable (MOCK_ALGOD_URL, MOCK_INDEXER_URL, or MOCK_KMD_URL)\n * and validates that the server is reachable before returning a MockServer instance.\n *\n * @param clientType - The type of client to get a mock server for ('algod', 'indexer', or 'kmd')\n * @returns Promise resolving to a MockServer instance\n * @throws Error if the environment variable is not set or the server is not reachable\n *\n * @example\n * ```typescript\n * const server = await getMockServer('algod')\n * const client = new AlgodClient(DEFAULT_TOKEN, server.baseUrl)\n * // ... run tests ...\n * ```\n */\nexport async function getMockServer(clientType: ClientType): Promise<MockServer> {\n const envVar = EXTERNAL_URL_ENV_VARS[clientType]\n const externalUrl = process.env[envVar]\n\n if (!externalUrl) {\n throw new Error(\n `Environment variable ${envVar} is not set. ` +\n `Please start the mock server externally and set the URL. ` +\n `See the \"Mock Server for Client Tests\" section in README.md for local development setup.`,\n )\n }\n\n const isHealthy = await checkServerHealth(externalUrl)\n if (!isHealthy) {\n throw new Error(\n `Mock ${clientType} server at ${externalUrl} is not reachable. ` + `Please ensure the server is running and accessible.`,\n )\n }\n\n return {\n baseUrl: externalUrl.replace(/\\/$/, ''),\n clientType,\n }\n}\n\n// Test data constants matching mock server recordings\nexport const TEST_ADDRESS = '25M5BT2DMMED3V6CWDEYKSNEFGPXX4QBIINCOICLXXRU3UGTSGRMF3MTOE'\nexport const TEST_APP_ID = 718348254\nexport const TEST_APP_ID_WITH_BOXES = 742949200\nexport const TEST_BOX_NAME = 'b64:cBbHBNV+zUy/Mz5IRhIrBLxr1on5wmidhXEavV+SasC8'\nexport const TEST_ASSET_ID = 705457144\nexport const TEST_TXID = 'VIXTUMAPT7NR4RB2WVOGMETW4QY43KIDA3HWDWWXS3UEDKGTEECQ'\nexport const TEST_ROUND = 24099447\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"mockServer.js","names":[],"sources":["../../../../packages/testing/src/mockServer.ts"],"sourcesContent":["/**\n * Mock server infrastructure for algod/indexer/kmd client testing.\n *\n * Connects to externally managed mock servers that replay pre-recorded HAR files.\n * The mock server must be started separately (via GitHub Action in CI, or manually via bun for local dev).\n *\n * Set MOCK_ALGOD_URL / MOCK_INDEXER_URL / MOCK_KMD_URL environment variables to specify server URLs.\n */\n\n/** Supported client types for mock servers */\nexport type ClientType = 'algod' | 'indexer' | 'kmd'\n\n/** Environment variable names for external mock server URLs */\nexport const EXTERNAL_URL_ENV_VARS: Record<ClientType, string> = {\n algod: 'MOCK_ALGOD_URL',\n indexer: 'MOCK_INDEXER_URL',\n kmd: 'MOCK_KMD_URL',\n}\n\n/** Default token used for mock server authentication */\nexport const DEFAULT_TOKEN = 'a'.repeat(64)\n\n/** Default ports for mock servers when running locally (matches algokit-polytest defaults) */\nexport const MOCK_PORTS = {\n algod: { host: 8000 },\n indexer: { host: 8002 },\n kmd: { host: 8001 },\n} as const\n\n/** Mock server instance representing a connection to an external server */\nexport interface MockServer {\n /** Base URL of the mock server */\n baseUrl: string\n /** Type of client this server mocks */\n clientType: ClientType\n}\n\n/**\n * Check if a server is reachable by performing a health check.\n *\n * @param url - The base URL of the server to check\n * @param timeout - Maximum time to wait for the server to respond (default: 5000ms)\n * @returns Promise resolving to true if server is healthy, false otherwise\n */\nexport async function checkServerHealth(url: string, timeout = 5000): Promise<boolean> {\n const healthUrl = `${url.replace(/\\/$/, '')}/health`\n const start = Date.now()\n\n while (Date.now() - start < timeout) {\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), 2000)\n try {\n await fetch(healthUrl, { signal: controller.signal })\n clearTimeout(timeoutId)\n // Any HTTP response (including 500) indicates the server is reachable\n // The mock server returns 500 for unrecorded endpoints like /health\n return true\n } catch (error) {\n clearTimeout(timeoutId)\n // If it's a network error, retry\n if (error instanceof Error && error.name === 'AbortError') {\n await new Promise((resolve) => setTimeout(resolve, 200))\n continue\n }\n throw error\n }\n } catch {\n await new Promise((resolve) => setTimeout(resolve, 200))\n }\n }\n return false\n}\n\n/**\n * Get a mock server instance for the specified client type.\n *\n * Reads the appropriate environment variable (MOCK_ALGOD_URL, MOCK_INDEXER_URL, or MOCK_KMD_URL)\n * and validates that the server is reachable before returning a MockServer instance.\n *\n * @param clientType - The type of client to get a mock server for ('algod', 'indexer', or 'kmd')\n * @returns Promise resolving to a MockServer instance\n * @throws Error if the environment variable is not set or the server is not reachable\n *\n * @example\n * ```typescript\n * const server = await getMockServer('algod')\n * const client = new AlgodClient(DEFAULT_TOKEN, server.baseUrl)\n * // ... run tests ...\n * ```\n */\nexport async function getMockServer(clientType: ClientType): Promise<MockServer> {\n const envVar = EXTERNAL_URL_ENV_VARS[clientType]\n const externalUrl = process.env[envVar]\n\n if (!externalUrl) {\n throw new Error(\n `Environment variable ${envVar} is not set. ` +\n `Please start the mock server externally and set the URL. ` +\n `See the \"Mock Server for Client Tests\" section in README.md for local development setup.`,\n )\n }\n\n const isHealthy = await checkServerHealth(externalUrl)\n if (!isHealthy) {\n throw new Error(\n `Mock ${clientType} server at ${externalUrl} is not reachable. ` + `Please ensure the server is running and accessible.`,\n )\n }\n\n return {\n baseUrl: externalUrl.replace(/\\/$/, ''),\n clientType,\n }\n}\n\n// Test data constants matching mock server recordings\nexport const TEST_ADDRESS = '25M5BT2DMMED3V6CWDEYKSNEFGPXX4QBIINCOICLXXRU3UGTSGRMF3MTOE'\nexport const TEST_APP_ID = 718348254\nexport const TEST_APP_ID_WITH_BOXES = 742949200\nexport const TEST_BOX_NAME = 'b64:cBbHBNV+zUy/Mz5IRhIrBLxr1on5wmidhXEavV+SasC8'\nexport const TEST_ASSET_ID = 705457144\nexport const TEST_TXID = 'VIXTUMAPT7NR4RB2WVOGMETW4QY43KIDA3HWDWWXS3UEDKGTEECQ'\nexport const TEST_ROUND = 24099447\n"],"mappings":";;AAaA,MAAa,wBAAoD;CAC/D,OAAO;CACP,SAAS;CACT,KAAK;CACN;;AAGD,MAAa,gBAAgB,IAAI,OAAO,GAAG;;AAG3C,MAAa,aAAa;CACxB,OAAO,EAAE,MAAM,KAAM;CACrB,SAAS,EAAE,MAAM,MAAM;CACvB,KAAK,EAAE,MAAM,MAAM;CACpB;;;;;;;;AAiBD,eAAsB,kBAAkB,KAAa,UAAU,KAAwB;CACrF,MAAM,YAAY,GAAG,IAAI,QAAQ,OAAO,GAAG,CAAC;CAC5C,MAAM,QAAQ,KAAK,KAAK;AAExB,QAAO,KAAK,KAAK,GAAG,QAAQ,QAC1B,KAAI;EACF,MAAM,aAAa,IAAI,iBAAiB;EACxC,MAAM,YAAY,iBAAiB,WAAW,OAAO,EAAE,IAAK;AAC5D,MAAI;AACF,SAAM,MAAM,WAAW,EAAE,QAAQ,WAAW,QAAQ,CAAC;AACrD,gBAAa,UAAU;AAGvB,UAAO;WACA,OAAO;AACd,gBAAa,UAAU;AAEvB,OAAI,iBAAiB,SAAS,MAAM,SAAS,cAAc;AACzD,UAAM,IAAI,SAAS,YAAY,WAAW,SAAS,IAAI,CAAC;AACxD;;AAEF,SAAM;;SAEF;AACN,QAAM,IAAI,SAAS,YAAY,WAAW,SAAS,IAAI,CAAC;;AAG5D,QAAO;;;;;;;;;;;;;;;;;;;AAoBT,eAAsB,cAAc,YAA6C;CAC/E,MAAM,SAAS,sBAAsB;CACrC,MAAM,cAAc,QAAQ,IAAI;AAEhC,KAAI,CAAC,YACH,OAAM,IAAI,MACR,wBAAwB,OAAO,gKAGhC;AAIH,KAAI,CADc,MAAM,kBAAkB,YAAY,CAEpD,OAAM,IAAI,MACR,QAAQ,WAAW,aAAa,YAAY,wEAC7C;AAGH,QAAO;EACL,SAAS,YAAY,QAAQ,OAAO,GAAG;EACvC;EACD;;AAIH,MAAa,eAAe;AAC5B,MAAa,cAAc;AAC3B,MAAa,yBAAyB;AACtC,MAAa,gBAAgB;AAC7B,MAAa,gBAAgB;AAC7B,MAAa,YAAY;AACzB,MAAa,aAAa"}
|
|
@@ -77,7 +77,7 @@ const TEST_BOX_NAME = "b64:cBbHBNV+zUy/Mz5IRhIrBLxr1on5wmidhXEavV+SasC8";
|
|
|
77
77
|
const TEST_ASSET_ID = 705457144;
|
|
78
78
|
const TEST_TXID = "VIXTUMAPT7NR4RB2WVOGMETW4QY43KIDA3HWDWWXS3UEDKGTEECQ";
|
|
79
79
|
const TEST_ROUND = 24099447;
|
|
80
|
-
|
|
81
80
|
//#endregion
|
|
82
81
|
export { DEFAULT_TOKEN, EXTERNAL_URL_ENV_VARS, MOCK_PORTS, TEST_ADDRESS, TEST_APP_ID, TEST_APP_ID_WITH_BOXES, TEST_ASSET_ID, TEST_BOX_NAME, TEST_ROUND, TEST_TXID, checkServerHealth, getMockServer };
|
|
82
|
+
|
|
83
83
|
//# sourceMappingURL=mockServer.mjs.map
|
|
@@ -4,7 +4,6 @@ import { MultisigAccount } from "./multisig.js";
|
|
|
4
4
|
import { AddressWithDelegatedLsigSigner, TransactionSigner } from "./signer.js";
|
|
5
5
|
|
|
6
6
|
//#region packages/transact/src/logicsig.d.ts
|
|
7
|
-
|
|
8
7
|
/** Function for signing logic signatures for delegation
|
|
9
8
|
* @param lsig - The logic signature that is being signed for delegation
|
|
10
9
|
* @param msig - Optional multisig account that should be set when a public key is signing as a subsigner of a multisig
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
const require_array = require(
|
|
2
|
-
const require_address = require(
|
|
3
|
-
const require_msgpack = require(
|
|
4
|
-
const require_hash = require(
|
|
5
|
-
const require_signed_transaction_meta = require(
|
|
6
|
-
const require_signed_transaction = require(
|
|
7
|
-
const require_multisig = require(
|
|
8
|
-
|
|
1
|
+
const require_array = require("../../common/src/array.js");
|
|
2
|
+
const require_address = require("../../common/src/address.js");
|
|
3
|
+
const require_msgpack = require("../../common/src/msgpack.js");
|
|
4
|
+
const require_hash = require("../../crypto/src/hash.js");
|
|
5
|
+
const require_signed_transaction_meta = require("./transactions/signed-transaction-meta.js");
|
|
6
|
+
const require_signed_transaction = require("./transactions/signed-transaction.js");
|
|
7
|
+
const require_multisig = require("./multisig.js");
|
|
9
8
|
//#region packages/transact/src/logicsig.ts
|
|
10
9
|
const PROGRAM_TAG = new TextEncoder().encode("Program");
|
|
11
10
|
const MSIG_PROGRAM_TAG = new TextEncoder().encode("MsigProgram");
|
|
@@ -109,8 +108,8 @@ var LogicSigAccount = class LogicSigAccount extends LogicSig {
|
|
|
109
108
|
else throw new Error("Delegated lsig signer must return either a sig or lmsig");
|
|
110
109
|
}
|
|
111
110
|
};
|
|
112
|
-
|
|
113
111
|
//#endregion
|
|
114
112
|
exports.LogicSig = LogicSig;
|
|
115
113
|
exports.LogicSigAccount = LogicSigAccount;
|
|
114
|
+
|
|
116
115
|
//# sourceMappingURL=logicsig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logicsig.js","names":["Address","hash","concatArrays","decodeMsgpack","logicSigSignatureCodec","MultisigAccount","encodeSignedTransaction"],"sources":["../../../../packages/transact/src/logicsig.ts"],"sourcesContent":["import { Address, Addressable, concatArrays, decodeMsgpack } from '@algorandfoundation/algokit-common'\nimport { hash } from '@algorandfoundation/algokit-crypto'\nimport { MultisigAccount } from './multisig'\nimport { AddressWithDelegatedLsigSigner, TransactionSigner } from './signer'\nimport {\n LogicSigSignature,\n MultisigSignature,\n SignedTransaction,\n encodeSignedTransaction,\n validateSignedTransaction,\n} from './transactions/signed-transaction'\nimport { logicSigSignatureCodec } from './transactions/signed-transaction-meta'\nimport { Transaction } from './transactions/transaction'\n\nconst PROGRAM_TAG = new TextEncoder().encode('Program')\nconst MSIG_PROGRAM_TAG = new TextEncoder().encode('MsigProgram')\nconst SIGN_PROGRAM_DATA_PREFIX = new TextEncoder().encode('ProgData')\n\n/** Function for signing logic signatures for delegation\n * @param lsig - The logic signature that is being signed for delegation\n * @param msig - Optional multisig account that should be set when a public key is signing as a subsigner of a multisig\n * @returns The address of the delegator\n * */\nexport type DelegatedLsigSigner = (\n lsig: LogicSigAccount,\n msig?: MultisigAccount,\n) => Promise<{ addr: Address } & ({ sig?: Uint8Array } | { lmsig?: MultisigSignature })>\n\n/** Function for signing program data for a logic signature */\nexport type ProgramDataSigner = (data: Uint8Array, lsig: LogicSig) => Promise<Uint8Array>\n\nexport class LogicSig implements Addressable {\n logic: Uint8Array\n args: Uint8Array[]\n protected _addr: Address\n\n constructor(program: Uint8Array, programArgs?: Array<Uint8Array>) {\n this.logic = program\n this.args = programArgs ?? []\n const toBeSigned = concatArrays(PROGRAM_TAG, this.logic)\n const h = hash(toBeSigned)\n this._addr = new Address(h)\n }\n\n static fromSignature(signature: LogicSigSignature): LogicSig {\n return new LogicSig(signature.logic, signature.args || [])\n }\n\n static fromBytes(encodedLsig: Uint8Array): LogicSig {\n const decoded = decodeMsgpack(encodedLsig)\n const lsigSignature = logicSigSignatureCodec.decode(decoded, 'msgpack')\n return LogicSig.fromSignature(lsigSignature)\n }\n\n address(): Address {\n return this._addr\n }\n\n get addr(): Address {\n return this._addr\n }\n\n bytesToSignForDelegation(msig?: MultisigAccount): Uint8Array {\n if (msig) {\n return concatArrays(MSIG_PROGRAM_TAG, msig.addr.publicKey, this.logic)\n } else {\n return concatArrays(PROGRAM_TAG, this.logic)\n }\n }\n\n signProgramData(data: Uint8Array, signer: ProgramDataSigner): Promise<Uint8Array> {\n return signer(data, this)\n }\n\n programDataToSign(data: Uint8Array): Uint8Array {\n return concatArrays(SIGN_PROGRAM_DATA_PREFIX, this.address().publicKey, data)\n }\n\n account(): LogicSigAccount {\n return new LogicSigAccount(this.logic, this.args)\n }\n\n delegatedAccount(delegator: Address): LogicSigAccount {\n return new LogicSigAccount(this.logic, this.args, delegator)\n }\n}\n\nexport class LogicSigAccount extends LogicSig {\n sig?: Uint8Array\n msig?: MultisigSignature\n lmsig?: MultisigSignature\n\n static fromSignature(signature: LogicSigSignature, delegator?: Address): LogicSigAccount {\n if (signature.lmsig || signature.msig) {\n const msigAddr = MultisigAccount.fromSignature((signature.lmsig || signature.msig)!).addr\n\n if (delegator && !msigAddr.equals(delegator)) {\n throw new Error('Provided delegator address does not match multisig address')\n }\n\n const lsig = new LogicSigAccount(signature.logic, signature.args || [], msigAddr)\n lsig.lmsig = signature.lmsig\n lsig.msig = signature.msig\n return lsig\n }\n\n const lsigAccount = new LogicSigAccount(signature.logic, signature.args || [], delegator)\n\n if (signature.sig && delegator === undefined) {\n throw new Error('Delegated address must be provided when logic sig has a signature')\n }\n\n if (signature.sig) {\n lsigAccount.sig = signature.sig\n return lsigAccount\n }\n\n return lsigAccount\n }\n\n static fromBytes(encodedLsig: Uint8Array, delegator?: Address): LogicSigAccount {\n const decoded = decodeMsgpack(encodedLsig)\n const lsigSignature = logicSigSignatureCodec.decode(decoded, 'msgpack')\n return LogicSigAccount.fromSignature(lsigSignature, delegator)\n }\n\n constructor(program: Uint8Array, programArgs?: Array<Uint8Array> | null, delegator?: Address) {\n super(program, programArgs ?? undefined)\n this._addr = delegator ?? this._addr\n }\n\n get signer(): TransactionSigner {\n return async (txns: Transaction[], indexes: number[]) => {\n const signedTxns: Uint8Array[] = []\n for (const index of indexes) {\n const txn = txns[index]\n\n const stxn: SignedTransaction = {\n txn,\n lsig: { logic: this.logic, args: this.args, msig: this.msig, lmsig: this.lmsig, sig: this.sig },\n }\n\n if (!stxn.txn.sender.equals(this.addr)) {\n stxn.authAddress = this.addr\n }\n\n validateSignedTransaction(stxn)\n signedTxns.push(encodeSignedTransaction(stxn))\n }\n\n return signedTxns\n }\n }\n\n async signForDelegation(delegator: AddressWithDelegatedLsigSigner) {\n const result = await delegator.lsigSigner(this)\n\n if (!result.addr.equals(this._addr)) {\n throw new Error(\n `Delegator address from signer does not match expected delegator address. Expected: ${this._addr.toString()}, got: ${result.addr.toString()}`,\n )\n }\n\n if ('sig' in result && result.sig) {\n this.sig = result.sig\n } else if ('lmsig' in result && result.lmsig) {\n this.lmsig = result.lmsig\n } else {\n throw new Error('Delegated lsig signer must return either a sig or lmsig')\n }\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"logicsig.js","names":["Address","hash","concatArrays","decodeMsgpack","logicSigSignatureCodec","MultisigAccount","encodeSignedTransaction"],"sources":["../../../../packages/transact/src/logicsig.ts"],"sourcesContent":["import { Address, Addressable, concatArrays, decodeMsgpack } from '@algorandfoundation/algokit-common'\nimport { hash } from '@algorandfoundation/algokit-crypto'\nimport { MultisigAccount } from './multisig'\nimport { AddressWithDelegatedLsigSigner, TransactionSigner } from './signer'\nimport {\n LogicSigSignature,\n MultisigSignature,\n SignedTransaction,\n encodeSignedTransaction,\n validateSignedTransaction,\n} from './transactions/signed-transaction'\nimport { logicSigSignatureCodec } from './transactions/signed-transaction-meta'\nimport { Transaction } from './transactions/transaction'\n\nconst PROGRAM_TAG = new TextEncoder().encode('Program')\nconst MSIG_PROGRAM_TAG = new TextEncoder().encode('MsigProgram')\nconst SIGN_PROGRAM_DATA_PREFIX = new TextEncoder().encode('ProgData')\n\n/** Function for signing logic signatures for delegation\n * @param lsig - The logic signature that is being signed for delegation\n * @param msig - Optional multisig account that should be set when a public key is signing as a subsigner of a multisig\n * @returns The address of the delegator\n * */\nexport type DelegatedLsigSigner = (\n lsig: LogicSigAccount,\n msig?: MultisigAccount,\n) => Promise<{ addr: Address } & ({ sig?: Uint8Array } | { lmsig?: MultisigSignature })>\n\n/** Function for signing program data for a logic signature */\nexport type ProgramDataSigner = (data: Uint8Array, lsig: LogicSig) => Promise<Uint8Array>\n\nexport class LogicSig implements Addressable {\n logic: Uint8Array\n args: Uint8Array[]\n protected _addr: Address\n\n constructor(program: Uint8Array, programArgs?: Array<Uint8Array>) {\n this.logic = program\n this.args = programArgs ?? []\n const toBeSigned = concatArrays(PROGRAM_TAG, this.logic)\n const h = hash(toBeSigned)\n this._addr = new Address(h)\n }\n\n static fromSignature(signature: LogicSigSignature): LogicSig {\n return new LogicSig(signature.logic, signature.args || [])\n }\n\n static fromBytes(encodedLsig: Uint8Array): LogicSig {\n const decoded = decodeMsgpack(encodedLsig)\n const lsigSignature = logicSigSignatureCodec.decode(decoded, 'msgpack')\n return LogicSig.fromSignature(lsigSignature)\n }\n\n address(): Address {\n return this._addr\n }\n\n get addr(): Address {\n return this._addr\n }\n\n bytesToSignForDelegation(msig?: MultisigAccount): Uint8Array {\n if (msig) {\n return concatArrays(MSIG_PROGRAM_TAG, msig.addr.publicKey, this.logic)\n } else {\n return concatArrays(PROGRAM_TAG, this.logic)\n }\n }\n\n signProgramData(data: Uint8Array, signer: ProgramDataSigner): Promise<Uint8Array> {\n return signer(data, this)\n }\n\n programDataToSign(data: Uint8Array): Uint8Array {\n return concatArrays(SIGN_PROGRAM_DATA_PREFIX, this.address().publicKey, data)\n }\n\n account(): LogicSigAccount {\n return new LogicSigAccount(this.logic, this.args)\n }\n\n delegatedAccount(delegator: Address): LogicSigAccount {\n return new LogicSigAccount(this.logic, this.args, delegator)\n }\n}\n\nexport class LogicSigAccount extends LogicSig {\n sig?: Uint8Array\n msig?: MultisigSignature\n lmsig?: MultisigSignature\n\n static fromSignature(signature: LogicSigSignature, delegator?: Address): LogicSigAccount {\n if (signature.lmsig || signature.msig) {\n const msigAddr = MultisigAccount.fromSignature((signature.lmsig || signature.msig)!).addr\n\n if (delegator && !msigAddr.equals(delegator)) {\n throw new Error('Provided delegator address does not match multisig address')\n }\n\n const lsig = new LogicSigAccount(signature.logic, signature.args || [], msigAddr)\n lsig.lmsig = signature.lmsig\n lsig.msig = signature.msig\n return lsig\n }\n\n const lsigAccount = new LogicSigAccount(signature.logic, signature.args || [], delegator)\n\n if (signature.sig && delegator === undefined) {\n throw new Error('Delegated address must be provided when logic sig has a signature')\n }\n\n if (signature.sig) {\n lsigAccount.sig = signature.sig\n return lsigAccount\n }\n\n return lsigAccount\n }\n\n static fromBytes(encodedLsig: Uint8Array, delegator?: Address): LogicSigAccount {\n const decoded = decodeMsgpack(encodedLsig)\n const lsigSignature = logicSigSignatureCodec.decode(decoded, 'msgpack')\n return LogicSigAccount.fromSignature(lsigSignature, delegator)\n }\n\n constructor(program: Uint8Array, programArgs?: Array<Uint8Array> | null, delegator?: Address) {\n super(program, programArgs ?? undefined)\n this._addr = delegator ?? this._addr\n }\n\n get signer(): TransactionSigner {\n return async (txns: Transaction[], indexes: number[]) => {\n const signedTxns: Uint8Array[] = []\n for (const index of indexes) {\n const txn = txns[index]\n\n const stxn: SignedTransaction = {\n txn,\n lsig: { logic: this.logic, args: this.args, msig: this.msig, lmsig: this.lmsig, sig: this.sig },\n }\n\n if (!stxn.txn.sender.equals(this.addr)) {\n stxn.authAddress = this.addr\n }\n\n validateSignedTransaction(stxn)\n signedTxns.push(encodeSignedTransaction(stxn))\n }\n\n return signedTxns\n }\n }\n\n async signForDelegation(delegator: AddressWithDelegatedLsigSigner) {\n const result = await delegator.lsigSigner(this)\n\n if (!result.addr.equals(this._addr)) {\n throw new Error(\n `Delegator address from signer does not match expected delegator address. Expected: ${this._addr.toString()}, got: ${result.addr.toString()}`,\n )\n }\n\n if ('sig' in result && result.sig) {\n this.sig = result.sig\n } else if ('lmsig' in result && result.lmsig) {\n this.lmsig = result.lmsig\n } else {\n throw new Error('Delegated lsig signer must return either a sig or lmsig')\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -5,7 +5,6 @@ import { hash } from "../../crypto/src/hash.mjs";
|
|
|
5
5
|
import { logicSigSignatureCodec } from "./transactions/signed-transaction-meta.mjs";
|
|
6
6
|
import { encodeSignedTransaction, validateSignedTransaction } from "./transactions/signed-transaction.mjs";
|
|
7
7
|
import { MultisigAccount } from "./multisig.mjs";
|
|
8
|
-
|
|
9
8
|
//#region packages/transact/src/logicsig.ts
|
|
10
9
|
const PROGRAM_TAG = new TextEncoder().encode("Program");
|
|
11
10
|
const MSIG_PROGRAM_TAG = new TextEncoder().encode("MsigProgram");
|
|
@@ -109,7 +108,7 @@ var LogicSigAccount = class LogicSigAccount extends LogicSig {
|
|
|
109
108
|
else throw new Error("Delegated lsig signer must return either a sig or lmsig");
|
|
110
109
|
}
|
|
111
110
|
};
|
|
112
|
-
|
|
113
111
|
//#endregion
|
|
114
112
|
export { LogicSig, LogicSigAccount };
|
|
113
|
+
|
|
115
114
|
//# sourceMappingURL=logicsig.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logicsig.mjs","names":[],"sources":["../../../../packages/transact/src/logicsig.ts"],"sourcesContent":["import { Address, Addressable, concatArrays, decodeMsgpack } from '@algorandfoundation/algokit-common'\nimport { hash } from '@algorandfoundation/algokit-crypto'\nimport { MultisigAccount } from './multisig'\nimport { AddressWithDelegatedLsigSigner, TransactionSigner } from './signer'\nimport {\n LogicSigSignature,\n MultisigSignature,\n SignedTransaction,\n encodeSignedTransaction,\n validateSignedTransaction,\n} from './transactions/signed-transaction'\nimport { logicSigSignatureCodec } from './transactions/signed-transaction-meta'\nimport { Transaction } from './transactions/transaction'\n\nconst PROGRAM_TAG = new TextEncoder().encode('Program')\nconst MSIG_PROGRAM_TAG = new TextEncoder().encode('MsigProgram')\nconst SIGN_PROGRAM_DATA_PREFIX = new TextEncoder().encode('ProgData')\n\n/** Function for signing logic signatures for delegation\n * @param lsig - The logic signature that is being signed for delegation\n * @param msig - Optional multisig account that should be set when a public key is signing as a subsigner of a multisig\n * @returns The address of the delegator\n * */\nexport type DelegatedLsigSigner = (\n lsig: LogicSigAccount,\n msig?: MultisigAccount,\n) => Promise<{ addr: Address } & ({ sig?: Uint8Array } | { lmsig?: MultisigSignature })>\n\n/** Function for signing program data for a logic signature */\nexport type ProgramDataSigner = (data: Uint8Array, lsig: LogicSig) => Promise<Uint8Array>\n\nexport class LogicSig implements Addressable {\n logic: Uint8Array\n args: Uint8Array[]\n protected _addr: Address\n\n constructor(program: Uint8Array, programArgs?: Array<Uint8Array>) {\n this.logic = program\n this.args = programArgs ?? []\n const toBeSigned = concatArrays(PROGRAM_TAG, this.logic)\n const h = hash(toBeSigned)\n this._addr = new Address(h)\n }\n\n static fromSignature(signature: LogicSigSignature): LogicSig {\n return new LogicSig(signature.logic, signature.args || [])\n }\n\n static fromBytes(encodedLsig: Uint8Array): LogicSig {\n const decoded = decodeMsgpack(encodedLsig)\n const lsigSignature = logicSigSignatureCodec.decode(decoded, 'msgpack')\n return LogicSig.fromSignature(lsigSignature)\n }\n\n address(): Address {\n return this._addr\n }\n\n get addr(): Address {\n return this._addr\n }\n\n bytesToSignForDelegation(msig?: MultisigAccount): Uint8Array {\n if (msig) {\n return concatArrays(MSIG_PROGRAM_TAG, msig.addr.publicKey, this.logic)\n } else {\n return concatArrays(PROGRAM_TAG, this.logic)\n }\n }\n\n signProgramData(data: Uint8Array, signer: ProgramDataSigner): Promise<Uint8Array> {\n return signer(data, this)\n }\n\n programDataToSign(data: Uint8Array): Uint8Array {\n return concatArrays(SIGN_PROGRAM_DATA_PREFIX, this.address().publicKey, data)\n }\n\n account(): LogicSigAccount {\n return new LogicSigAccount(this.logic, this.args)\n }\n\n delegatedAccount(delegator: Address): LogicSigAccount {\n return new LogicSigAccount(this.logic, this.args, delegator)\n }\n}\n\nexport class LogicSigAccount extends LogicSig {\n sig?: Uint8Array\n msig?: MultisigSignature\n lmsig?: MultisigSignature\n\n static fromSignature(signature: LogicSigSignature, delegator?: Address): LogicSigAccount {\n if (signature.lmsig || signature.msig) {\n const msigAddr = MultisigAccount.fromSignature((signature.lmsig || signature.msig)!).addr\n\n if (delegator && !msigAddr.equals(delegator)) {\n throw new Error('Provided delegator address does not match multisig address')\n }\n\n const lsig = new LogicSigAccount(signature.logic, signature.args || [], msigAddr)\n lsig.lmsig = signature.lmsig\n lsig.msig = signature.msig\n return lsig\n }\n\n const lsigAccount = new LogicSigAccount(signature.logic, signature.args || [], delegator)\n\n if (signature.sig && delegator === undefined) {\n throw new Error('Delegated address must be provided when logic sig has a signature')\n }\n\n if (signature.sig) {\n lsigAccount.sig = signature.sig\n return lsigAccount\n }\n\n return lsigAccount\n }\n\n static fromBytes(encodedLsig: Uint8Array, delegator?: Address): LogicSigAccount {\n const decoded = decodeMsgpack(encodedLsig)\n const lsigSignature = logicSigSignatureCodec.decode(decoded, 'msgpack')\n return LogicSigAccount.fromSignature(lsigSignature, delegator)\n }\n\n constructor(program: Uint8Array, programArgs?: Array<Uint8Array> | null, delegator?: Address) {\n super(program, programArgs ?? undefined)\n this._addr = delegator ?? this._addr\n }\n\n get signer(): TransactionSigner {\n return async (txns: Transaction[], indexes: number[]) => {\n const signedTxns: Uint8Array[] = []\n for (const index of indexes) {\n const txn = txns[index]\n\n const stxn: SignedTransaction = {\n txn,\n lsig: { logic: this.logic, args: this.args, msig: this.msig, lmsig: this.lmsig, sig: this.sig },\n }\n\n if (!stxn.txn.sender.equals(this.addr)) {\n stxn.authAddress = this.addr\n }\n\n validateSignedTransaction(stxn)\n signedTxns.push(encodeSignedTransaction(stxn))\n }\n\n return signedTxns\n }\n }\n\n async signForDelegation(delegator: AddressWithDelegatedLsigSigner) {\n const result = await delegator.lsigSigner(this)\n\n if (!result.addr.equals(this._addr)) {\n throw new Error(\n `Delegator address from signer does not match expected delegator address. Expected: ${this._addr.toString()}, got: ${result.addr.toString()}`,\n )\n }\n\n if ('sig' in result && result.sig) {\n this.sig = result.sig\n } else if ('lmsig' in result && result.lmsig) {\n this.lmsig = result.lmsig\n } else {\n throw new Error('Delegated lsig signer must return either a sig or lmsig')\n }\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"logicsig.mjs","names":[],"sources":["../../../../packages/transact/src/logicsig.ts"],"sourcesContent":["import { Address, Addressable, concatArrays, decodeMsgpack } from '@algorandfoundation/algokit-common'\nimport { hash } from '@algorandfoundation/algokit-crypto'\nimport { MultisigAccount } from './multisig'\nimport { AddressWithDelegatedLsigSigner, TransactionSigner } from './signer'\nimport {\n LogicSigSignature,\n MultisigSignature,\n SignedTransaction,\n encodeSignedTransaction,\n validateSignedTransaction,\n} from './transactions/signed-transaction'\nimport { logicSigSignatureCodec } from './transactions/signed-transaction-meta'\nimport { Transaction } from './transactions/transaction'\n\nconst PROGRAM_TAG = new TextEncoder().encode('Program')\nconst MSIG_PROGRAM_TAG = new TextEncoder().encode('MsigProgram')\nconst SIGN_PROGRAM_DATA_PREFIX = new TextEncoder().encode('ProgData')\n\n/** Function for signing logic signatures for delegation\n * @param lsig - The logic signature that is being signed for delegation\n * @param msig - Optional multisig account that should be set when a public key is signing as a subsigner of a multisig\n * @returns The address of the delegator\n * */\nexport type DelegatedLsigSigner = (\n lsig: LogicSigAccount,\n msig?: MultisigAccount,\n) => Promise<{ addr: Address } & ({ sig?: Uint8Array } | { lmsig?: MultisigSignature })>\n\n/** Function for signing program data for a logic signature */\nexport type ProgramDataSigner = (data: Uint8Array, lsig: LogicSig) => Promise<Uint8Array>\n\nexport class LogicSig implements Addressable {\n logic: Uint8Array\n args: Uint8Array[]\n protected _addr: Address\n\n constructor(program: Uint8Array, programArgs?: Array<Uint8Array>) {\n this.logic = program\n this.args = programArgs ?? []\n const toBeSigned = concatArrays(PROGRAM_TAG, this.logic)\n const h = hash(toBeSigned)\n this._addr = new Address(h)\n }\n\n static fromSignature(signature: LogicSigSignature): LogicSig {\n return new LogicSig(signature.logic, signature.args || [])\n }\n\n static fromBytes(encodedLsig: Uint8Array): LogicSig {\n const decoded = decodeMsgpack(encodedLsig)\n const lsigSignature = logicSigSignatureCodec.decode(decoded, 'msgpack')\n return LogicSig.fromSignature(lsigSignature)\n }\n\n address(): Address {\n return this._addr\n }\n\n get addr(): Address {\n return this._addr\n }\n\n bytesToSignForDelegation(msig?: MultisigAccount): Uint8Array {\n if (msig) {\n return concatArrays(MSIG_PROGRAM_TAG, msig.addr.publicKey, this.logic)\n } else {\n return concatArrays(PROGRAM_TAG, this.logic)\n }\n }\n\n signProgramData(data: Uint8Array, signer: ProgramDataSigner): Promise<Uint8Array> {\n return signer(data, this)\n }\n\n programDataToSign(data: Uint8Array): Uint8Array {\n return concatArrays(SIGN_PROGRAM_DATA_PREFIX, this.address().publicKey, data)\n }\n\n account(): LogicSigAccount {\n return new LogicSigAccount(this.logic, this.args)\n }\n\n delegatedAccount(delegator: Address): LogicSigAccount {\n return new LogicSigAccount(this.logic, this.args, delegator)\n }\n}\n\nexport class LogicSigAccount extends LogicSig {\n sig?: Uint8Array\n msig?: MultisigSignature\n lmsig?: MultisigSignature\n\n static fromSignature(signature: LogicSigSignature, delegator?: Address): LogicSigAccount {\n if (signature.lmsig || signature.msig) {\n const msigAddr = MultisigAccount.fromSignature((signature.lmsig || signature.msig)!).addr\n\n if (delegator && !msigAddr.equals(delegator)) {\n throw new Error('Provided delegator address does not match multisig address')\n }\n\n const lsig = new LogicSigAccount(signature.logic, signature.args || [], msigAddr)\n lsig.lmsig = signature.lmsig\n lsig.msig = signature.msig\n return lsig\n }\n\n const lsigAccount = new LogicSigAccount(signature.logic, signature.args || [], delegator)\n\n if (signature.sig && delegator === undefined) {\n throw new Error('Delegated address must be provided when logic sig has a signature')\n }\n\n if (signature.sig) {\n lsigAccount.sig = signature.sig\n return lsigAccount\n }\n\n return lsigAccount\n }\n\n static fromBytes(encodedLsig: Uint8Array, delegator?: Address): LogicSigAccount {\n const decoded = decodeMsgpack(encodedLsig)\n const lsigSignature = logicSigSignatureCodec.decode(decoded, 'msgpack')\n return LogicSigAccount.fromSignature(lsigSignature, delegator)\n }\n\n constructor(program: Uint8Array, programArgs?: Array<Uint8Array> | null, delegator?: Address) {\n super(program, programArgs ?? undefined)\n this._addr = delegator ?? this._addr\n }\n\n get signer(): TransactionSigner {\n return async (txns: Transaction[], indexes: number[]) => {\n const signedTxns: Uint8Array[] = []\n for (const index of indexes) {\n const txn = txns[index]\n\n const stxn: SignedTransaction = {\n txn,\n lsig: { logic: this.logic, args: this.args, msig: this.msig, lmsig: this.lmsig, sig: this.sig },\n }\n\n if (!stxn.txn.sender.equals(this.addr)) {\n stxn.authAddress = this.addr\n }\n\n validateSignedTransaction(stxn)\n signedTxns.push(encodeSignedTransaction(stxn))\n }\n\n return signedTxns\n }\n }\n\n async signForDelegation(delegator: AddressWithDelegatedLsigSigner) {\n const result = await delegator.lsigSigner(this)\n\n if (!result.addr.equals(this._addr)) {\n throw new Error(\n `Delegator address from signer does not match expected delegator address. Expected: ${this._addr.toString()}, got: ${result.addr.toString()}`,\n )\n }\n\n if ('sig' in result && result.sig) {\n this.sig = result.sig\n } else if ('lmsig' in result && result.lmsig) {\n this.lmsig = result.lmsig\n } else {\n throw new Error('Delegated lsig signer must return either a sig or lmsig')\n }\n }\n}\n"],"mappings":";;;;;;;;AAcA,MAAM,cAAc,IAAI,aAAa,CAAC,OAAO,UAAU;AACvD,MAAM,mBAAmB,IAAI,aAAa,CAAC,OAAO,cAAc;AAChE,MAAM,2BAA2B,IAAI,aAAa,CAAC,OAAO,WAAW;AAerE,IAAa,WAAb,MAAa,SAAgC;CAC3C;CACA;CACA;CAEA,YAAY,SAAqB,aAAiC;AAChE,OAAK,QAAQ;AACb,OAAK,OAAO,eAAe,EAAE;AAG7B,OAAK,QAAQ,IAAI,QADP,KADS,aAAa,aAAa,KAAK,MAAM,CAC9B,CACC;;CAG7B,OAAO,cAAc,WAAwC;AAC3D,SAAO,IAAI,SAAS,UAAU,OAAO,UAAU,QAAQ,EAAE,CAAC;;CAG5D,OAAO,UAAU,aAAmC;EAClD,MAAM,UAAU,cAAc,YAAY;EAC1C,MAAM,gBAAgB,uBAAuB,OAAO,SAAS,UAAU;AACvE,SAAO,SAAS,cAAc,cAAc;;CAG9C,UAAmB;AACjB,SAAO,KAAK;;CAGd,IAAI,OAAgB;AAClB,SAAO,KAAK;;CAGd,yBAAyB,MAAoC;AAC3D,MAAI,KACF,QAAO,aAAa,kBAAkB,KAAK,KAAK,WAAW,KAAK,MAAM;MAEtE,QAAO,aAAa,aAAa,KAAK,MAAM;;CAIhD,gBAAgB,MAAkB,QAAgD;AAChF,SAAO,OAAO,MAAM,KAAK;;CAG3B,kBAAkB,MAA8B;AAC9C,SAAO,aAAa,0BAA0B,KAAK,SAAS,CAAC,WAAW,KAAK;;CAG/E,UAA2B;AACzB,SAAO,IAAI,gBAAgB,KAAK,OAAO,KAAK,KAAK;;CAGnD,iBAAiB,WAAqC;AACpD,SAAO,IAAI,gBAAgB,KAAK,OAAO,KAAK,MAAM,UAAU;;;AAIhE,IAAa,kBAAb,MAAa,wBAAwB,SAAS;CAC5C;CACA;CACA;CAEA,OAAO,cAAc,WAA8B,WAAsC;AACvF,MAAI,UAAU,SAAS,UAAU,MAAM;GACrC,MAAM,WAAW,gBAAgB,cAAe,UAAU,SAAS,UAAU,KAAO,CAAC;AAErF,OAAI,aAAa,CAAC,SAAS,OAAO,UAAU,CAC1C,OAAM,IAAI,MAAM,6DAA6D;GAG/E,MAAM,OAAO,IAAI,gBAAgB,UAAU,OAAO,UAAU,QAAQ,EAAE,EAAE,SAAS;AACjF,QAAK,QAAQ,UAAU;AACvB,QAAK,OAAO,UAAU;AACtB,UAAO;;EAGT,MAAM,cAAc,IAAI,gBAAgB,UAAU,OAAO,UAAU,QAAQ,EAAE,EAAE,UAAU;AAEzF,MAAI,UAAU,OAAO,cAAc,KAAA,EACjC,OAAM,IAAI,MAAM,oEAAoE;AAGtF,MAAI,UAAU,KAAK;AACjB,eAAY,MAAM,UAAU;AAC5B,UAAO;;AAGT,SAAO;;CAGT,OAAO,UAAU,aAAyB,WAAsC;EAC9E,MAAM,UAAU,cAAc,YAAY;EAC1C,MAAM,gBAAgB,uBAAuB,OAAO,SAAS,UAAU;AACvE,SAAO,gBAAgB,cAAc,eAAe,UAAU;;CAGhE,YAAY,SAAqB,aAAwC,WAAqB;AAC5F,QAAM,SAAS,eAAe,KAAA,EAAU;AACxC,OAAK,QAAQ,aAAa,KAAK;;CAGjC,IAAI,SAA4B;AAC9B,SAAO,OAAO,MAAqB,YAAsB;GACvD,MAAM,aAA2B,EAAE;AACnC,QAAK,MAAM,SAAS,SAAS;IAG3B,MAAM,OAA0B;KAC9B,KAHU,KAAK;KAIf,MAAM;MAAE,OAAO,KAAK;MAAO,MAAM,KAAK;MAAM,MAAM,KAAK;MAAM,OAAO,KAAK;MAAO,KAAK,KAAK;MAAK;KAChG;AAED,QAAI,CAAC,KAAK,IAAI,OAAO,OAAO,KAAK,KAAK,CACpC,MAAK,cAAc,KAAK;AAG1B,8BAA0B,KAAK;AAC/B,eAAW,KAAK,wBAAwB,KAAK,CAAC;;AAGhD,UAAO;;;CAIX,MAAM,kBAAkB,WAA2C;EACjE,MAAM,SAAS,MAAM,UAAU,WAAW,KAAK;AAE/C,MAAI,CAAC,OAAO,KAAK,OAAO,KAAK,MAAM,CACjC,OAAM,IAAI,MACR,sFAAsF,KAAK,MAAM,UAAU,CAAC,SAAS,OAAO,KAAK,UAAU,GAC5I;AAGH,MAAI,SAAS,UAAU,OAAO,IAC5B,MAAK,MAAM,OAAO;WACT,WAAW,UAAU,OAAO,MACrC,MAAK,QAAQ,OAAO;MAEpB,OAAM,IAAI,MAAM,0DAA0D"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
const require_array = require(
|
|
2
|
-
|
|
3
|
-
const require_address = require(
|
|
4
|
-
const require_hash = require(
|
|
5
|
-
const require_signed_transaction = require(
|
|
6
|
-
|
|
1
|
+
const require_array = require("../../common/src/array.js");
|
|
2
|
+
require("../../common/src/constants.js");
|
|
3
|
+
const require_address = require("../../common/src/address.js");
|
|
4
|
+
const require_hash = require("../../crypto/src/hash.js");
|
|
5
|
+
const require_signed_transaction = require("./transactions/signed-transaction.js");
|
|
7
6
|
//#region packages/transact/src/multisig.ts
|
|
8
7
|
const toPublicKeys = (addrs) => addrs.map((addr) => require_address.getAddress(addr).publicKey);
|
|
9
8
|
/**
|
|
@@ -178,7 +177,7 @@ function mergeMultisigTransactions(multisigTxnBlobs) {
|
|
|
178
177
|
* @returns an encoded, partially signed multisig transaction.
|
|
179
178
|
*/
|
|
180
179
|
function partialSignWithMultisigSignature(transaction, metadata, signerAddr, signature) {
|
|
181
|
-
if (signature.length !=
|
|
180
|
+
if (signature.length != 64) throw new Error(MULTISIG_SIGNATURE_LENGTH_ERROR_MSG);
|
|
182
181
|
return createMultisigTransactionWithSignature(transaction, {
|
|
183
182
|
rawSig: signature,
|
|
184
183
|
myPk: (typeof signerAddr === "string" ? require_address.Address.fromString(signerAddr) : signerAddr).publicKey
|
|
@@ -215,8 +214,8 @@ function appendSignRawMultisigSignature(multisigTxn, { version, threshold, addrs
|
|
|
215
214
|
function addressFromMultisigPreImg({ version, threshold, publicKeys }) {
|
|
216
215
|
if (version > 255 || version < 0) throw new Error(`${INVALID_MSIG_VERSION_ERROR_MSG}: ${version}`);
|
|
217
216
|
if (threshold === 0 || publicKeys.length === 0 || threshold > publicKeys.length || threshold > 255) throw new Error(INVALID_MSIG_THRESHOLD_ERROR_MSG);
|
|
218
|
-
const pkLen =
|
|
219
|
-
if (pkLen !==
|
|
217
|
+
const pkLen = 32;
|
|
218
|
+
if (pkLen !== 32) throw new Error(UNEXPECTED_PK_LEN_ERROR_MSG);
|
|
220
219
|
const merged = new Uint8Array(MULTISIG_PREIMG2ADDR_PREFIX.length + 2 + pkLen * publicKeys.length);
|
|
221
220
|
merged.set(MULTISIG_PREIMG2ADDR_PREFIX, 0);
|
|
222
221
|
merged.set([version], MULTISIG_PREIMG2ADDR_PREFIX.length);
|
|
@@ -352,7 +351,7 @@ var MultisigAccount = class MultisigAccount {
|
|
|
352
351
|
return applyMultisigSubsignature(msigSignature, pubkey, signature);
|
|
353
352
|
}
|
|
354
353
|
};
|
|
355
|
-
|
|
356
354
|
//#endregion
|
|
357
355
|
exports.MultisigAccount = MultisigAccount;
|
|
356
|
+
|
|
358
357
|
//# sourceMappingURL=multisig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multisig.js","names":["getAddress","arrayEqual","Address","SIGNATURE_BYTE_LENGTH","ALGORAND_ADDRESS_BYTE_LENGTH","ALGORAND_CHECKSUM_BYTE_LENGTH","PUBLIC_KEY_BYTE_LENGTH","hash","decodeSignedTransaction","encodeSignedTransaction"],"sources":["../../../../packages/transact/src/multisig.ts"],"sourcesContent":["import {\n Address,\n ALGORAND_ADDRESS_BYTE_LENGTH,\n ALGORAND_CHECKSUM_BYTE_LENGTH,\n arrayEqual,\n getAddress,\n PUBLIC_KEY_BYTE_LENGTH,\n SIGNATURE_BYTE_LENGTH,\n} from '@algorandfoundation/algokit-common'\nimport { hash } from '@algorandfoundation/algokit-crypto'\nimport { DelegatedLsigSigner } from './logicsig'\nimport { AddressWithDelegatedLsigSigner, AddressWithTransactionSigner, TransactionSigner } from './signer'\nimport {\n decodeSignedTransaction,\n encodeSignedTransaction,\n MultisigSignature,\n MultisigSubsignature,\n SignedTransaction,\n validateSignedTransaction,\n} from './transactions/signed-transaction'\nimport { Transaction } from './transactions/transaction'\n\nconst toPublicKeys = (addrs: Array<string | Address>): Uint8Array[] => addrs.map((addr) => getAddress(addr).publicKey)\n\n/**\n * Applies a subsignature for a participant to a multisignature signature, replacing any existing signature.\n *\n * This method applies the signature to ALL instances of the given public key (to support weighted multisig).\n * Since ed25519 signatures are deterministic, there's only one valid signature for a given message and public key.\n */\nfunction applyMultisigSubsignature(\n multisigSignature: MultisigSignature,\n participant: Uint8Array,\n signature: Uint8Array,\n): MultisigSignature {\n let found = false\n const newSubsignatures = multisigSignature.subsigs.map((subsig) => {\n if (arrayEqual(subsig.publicKey, participant)) {\n found = true\n return { ...subsig, sig: signature } satisfies MultisigSubsignature\n }\n return subsig\n })\n\n if (!found) {\n throw new Error('Public key not found in multisig signature')\n }\n\n return {\n ...multisigSignature,\n subsigs: newSubsignatures,\n }\n}\n\n// Convert \"MultisigAddr\" UTF-8 to byte array\nconst MULTISIG_PREIMG2ADDR_PREFIX = new Uint8Array([77, 117, 108, 116, 105, 115, 105, 103, 65, 100, 100, 114])\n\nconst INVALID_MSIG_VERSION_ERROR_MSG = 'invalid multisig version'\nconst INVALID_MSIG_THRESHOLD_ERROR_MSG = 'bad multisig threshold'\nconst INVALID_MSIG_PK_ERROR_MSG = 'bad multisig public key - wrong length'\nconst UNEXPECTED_PK_LEN_ERROR_MSG = 'nacl public key length is not 32 bytes'\n\nconst MULTISIG_MERGE_LESSTHANTWO_ERROR_MSG = 'Not enough multisig transactions to merge. Need at least two'\nconst MULTISIG_MERGE_MISMATCH_ERROR_MSG = 'Cannot merge txs. txIDs differ'\nconst MULTISIG_MERGE_MISMATCH_AUTH_ADDR_MSG = 'Cannot merge txs. Auth addrs differ'\nconst MULTISIG_MERGE_WRONG_PREIMAGE_ERROR_MSG = 'Cannot merge txs. Multisig preimages differ'\nconst MULTISIG_MERGE_SIG_MISMATCH_ERROR_MSG = 'Cannot merge txs. subsigs are mismatched.'\nconst MULTISIG_SIGNATURE_LENGTH_ERROR_MSG = 'Cannot add multisig signature. Signature is not of the correct length.'\nconst MULTISIG_KEY_NOT_EXIST_ERROR_MSG = 'Key does not exist'\n\n/**\n * creates a raw, multisig transaction blob without any signatures.\n * @param txn - the actual transaction.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param pks - ordered list of public keys in this multisig\n * @returns encoded multisig blob\n */\nfunction createMultisigTransaction(txn: Transaction, { version, threshold, addrs }: MultisigMetadata) {\n // construct the appendable multisigned transaction format\n const pks = toPublicKeys(addrs)\n const subsignatures = pks.map(\n (pk) =>\n ({\n publicKey: pk,\n sig: undefined,\n }) satisfies MultisigSubsignature,\n )\n\n const msig: MultisigSignature = {\n version,\n threshold,\n subsigs: subsignatures,\n }\n\n // if the address of this multisig is different from the transaction sender,\n // we need to add the auth-addr field\n const msigAddr = addressFromMultisigPreImg({\n version,\n threshold,\n publicKeys: pks,\n })\n let authAddress: Address | undefined\n if (!msigAddr.equals(txn.sender)) {\n authAddress = msigAddr\n }\n\n const signedTxn: SignedTransaction = {\n txn: txn,\n msig: msig,\n authAddress,\n }\n\n return signedTxn\n}\n\ninterface MultisigOptions {\n rawSig: Uint8Array\n myPk: Uint8Array\n}\n\ninterface MultisigMetadataWithPublicKeys extends Omit<MultisigMetadata, 'addrs'> {\n publicKeys: Uint8Array[]\n}\n\n/**\n * creates a multisig transaction blob with an included signature.\n * @param txn - the actual transaction to sign.\n * @param rawSig - a Uint8Array raw signature of that transaction\n * @param myPk - a public key that corresponds with rawSig\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param pks - ordered list of public keys in this multisig\n * @returns encoded multisig blob\n */\nfunction createMultisigTransactionWithSignature(\n txn: Transaction,\n { rawSig, myPk }: MultisigOptions,\n { version, threshold, publicKeys }: MultisigMetadataWithPublicKeys,\n): SignedTransaction {\n // Create an empty encoded multisig transaction\n const signedTxn = createMultisigTransaction(txn, {\n version,\n threshold,\n addrs: publicKeys.map((pk) => new Address(pk)),\n })\n\n let keyExist = false\n\n // append the multisig signature to the corresponding public key in the multisig blob\n const updatedSubsigs = signedTxn.msig!.subsigs.map((subsig) => {\n if (arrayEqual(subsig.publicKey, myPk)) {\n keyExist = true\n return { ...subsig, sig: rawSig }\n }\n return subsig\n })\n\n if (!keyExist) {\n throw new Error(MULTISIG_KEY_NOT_EXIST_ERROR_MSG)\n }\n\n const updatedSignedTxn: SignedTransaction = {\n ...signedTxn,\n msig: {\n ...signedTxn.msig!,\n subsigs: updatedSubsigs,\n },\n }\n\n return updatedSignedTxn\n}\n\n/**\n * takes a list of multisig transaction blobs, and merges them.\n * @param multisigTxnBlobs - a list of blobs representing encoded multisig txns\n * @returns typed array msg-pack encoded multisig txn\n */\nfunction mergeMultisigTransactions(multisigTxnBlobs: SignedTransaction[]): SignedTransaction {\n if (multisigTxnBlobs.length < 2) {\n throw new Error(MULTISIG_MERGE_LESSTHANTWO_ERROR_MSG)\n }\n const refSigTx = multisigTxnBlobs[0]\n if (!refSigTx.msig) {\n throw new Error('Invalid multisig transaction, multisig structure missing at index 0')\n }\n const refTxID = refSigTx.txn.txId()\n const refAuthAddr = refSigTx.authAddress\n const refPreImage = {\n version: refSigTx.msig.version,\n threshold: refSigTx.msig.threshold,\n publicKeys: refSigTx.msig.subsigs.map((subsig) => subsig.publicKey),\n }\n const refMsigAddr = addressFromMultisigPreImg(refPreImage)\n\n const newSubsigs: MultisigSubsignature[] = refSigTx.msig.subsigs.map((sig) => ({ ...sig }))\n for (let i = 1; i < multisigTxnBlobs.length; i++) {\n const unisig = multisigTxnBlobs[i]\n if (!unisig.msig) {\n throw new Error(`Invalid multisig transaction, multisig structure missing at index ${i}`)\n }\n\n if (unisig.txn.txId() !== refTxID) {\n throw new Error(MULTISIG_MERGE_MISMATCH_ERROR_MSG)\n }\n\n const authAddr = unisig.authAddress\n if (refAuthAddr !== authAddr) {\n throw new Error(MULTISIG_MERGE_MISMATCH_AUTH_ADDR_MSG)\n }\n\n // check multisig has same preimage as reference\n if (unisig.msig.subsigs.length !== refSigTx.msig.subsigs.length) {\n throw new Error(MULTISIG_MERGE_WRONG_PREIMAGE_ERROR_MSG)\n }\n const preimg: MultisigMetadataWithPublicKeys = {\n version: unisig.msig.version,\n threshold: unisig.msig.threshold,\n publicKeys: unisig.msig.subsigs.map((subsig) => subsig.publicKey),\n }\n const msgigAddr = addressFromMultisigPreImg(preimg)\n if (refMsigAddr.toString() !== msgigAddr.toString()) {\n throw new Error(MULTISIG_MERGE_WRONG_PREIMAGE_ERROR_MSG)\n }\n\n // now, we can merge\n unisig.msig.subsigs.forEach((uniSubsig, index) => {\n if (!uniSubsig.sig) return\n const current = newSubsigs[index]\n if (current.sig && !arrayEqual(uniSubsig.sig, current.sig)) {\n // mismatch\n throw new Error(MULTISIG_MERGE_SIG_MISMATCH_ERROR_MSG)\n }\n current.sig = uniSubsig.sig\n })\n }\n\n const msig: MultisigSignature = {\n version: refSigTx.msig.version,\n threshold: refSigTx.msig.threshold,\n subsigs: newSubsigs,\n }\n\n const signedTxn: SignedTransaction = {\n txn: refSigTx.txn,\n msig: msig,\n authAddress: refAuthAddr,\n }\n\n return signedTxn\n}\n\n/**\n * Partially signs this transaction with an external raw multisig signature and returns\n * a partially-signed multisig transaction, encoded with msgpack as a typed array.\n * @param transaction - The transaction to sign\n * @param metadata - multisig metadata\n * @param signerAddr - address of the signer\n * @param signature - raw multisig signature\n * @returns an encoded, partially signed multisig transaction.\n */\nfunction partialSignWithMultisigSignature(\n transaction: Transaction,\n metadata: MultisigMetadataWithPublicKeys,\n signerAddr: string | Address,\n signature: Uint8Array,\n) {\n if (signature.length != SIGNATURE_BYTE_LENGTH) {\n throw new Error(MULTISIG_SIGNATURE_LENGTH_ERROR_MSG)\n }\n const signerAddressObj = typeof signerAddr === 'string' ? Address.fromString(signerAddr) : signerAddr\n return createMultisigTransactionWithSignature(\n transaction,\n {\n rawSig: signature,\n myPk: signerAddressObj.publicKey,\n },\n metadata,\n )\n}\n\n/**\n * Takes a multisig transaction blob, and appends a given raw signature to it.\n * This makes it possible to compile a multisig signature using only raw signatures from external methods.\n * @param multisigTxnBlob - an encoded multisig txn. Supports non-payment txn types.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param addrs - a list of Algorand addresses representing possible signers for this multisig. Order is important.\n * @param signerAddr - address of the signer\n * @param signature - raw multisig signature\n * @returns object containing txID, and blob representing encoded multisig txn\n */\nfunction appendSignRawMultisigSignature(\n multisigTxn: SignedTransaction,\n { version, threshold, addrs }: MultisigMetadata,\n signerAddr: string | Address,\n signature: Uint8Array,\n): SignedTransaction {\n const publicKeys = toPublicKeys(addrs)\n // obtain underlying txn, sign it, and merge it\n const partialSigned = partialSignWithMultisigSignature(multisigTxn.txn, { version, threshold, publicKeys }, signerAddr, signature)\n return mergeMultisigTransactions([multisigTxn, partialSigned])\n}\n\n/**\n * Takes multisig parameters and returns a 32 byte typed array public key,\n * representing an address that identifies the \"exact group, version, and public keys\" that are required for signing.\n * Hash(\"MultisigAddr\" || version uint8 || threshold uint8 || PK1 || PK2 || ...)\n * Encoding this output yields a human readable address.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param pks - array of typed array public keys\n */\nfunction addressFromMultisigPreImg({\n version,\n threshold,\n publicKeys,\n}: Omit<MultisigMetadata, 'addrs'> & {\n publicKeys: Uint8Array[]\n}): Address {\n if (version > 255 || version < 0) {\n // ^ a tad redundant, but in case in the future version != 1, still check for uint8\n throw new Error(`${INVALID_MSIG_VERSION_ERROR_MSG}: ${version}`)\n }\n if (threshold === 0 || publicKeys.length === 0 || threshold > publicKeys.length || threshold > 255) {\n throw new Error(INVALID_MSIG_THRESHOLD_ERROR_MSG)\n }\n const pkLen = ALGORAND_ADDRESS_BYTE_LENGTH - ALGORAND_CHECKSUM_BYTE_LENGTH\n if (pkLen !== PUBLIC_KEY_BYTE_LENGTH) {\n throw new Error(UNEXPECTED_PK_LEN_ERROR_MSG)\n }\n const merged = new Uint8Array(MULTISIG_PREIMG2ADDR_PREFIX.length + 2 + pkLen * publicKeys.length)\n merged.set(MULTISIG_PREIMG2ADDR_PREFIX, 0)\n merged.set([version], MULTISIG_PREIMG2ADDR_PREFIX.length)\n merged.set([threshold], MULTISIG_PREIMG2ADDR_PREFIX.length + 1)\n for (let i = 0; i < publicKeys.length; i++) {\n if (publicKeys[i].length !== pkLen) {\n throw new Error(INVALID_MSIG_PK_ERROR_MSG)\n }\n merged.set(publicKeys[i], MULTISIG_PREIMG2ADDR_PREFIX.length + 2 + i * pkLen)\n }\n return new Address(Uint8Array.from(hash(merged)))\n}\n\n/**\n * Takes multisig parameters and returns a human readable Algorand address.\n * This is equivalent to fromMultisigPreImg, but interfaces with encoded addresses.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param addrs - array of encoded addresses\n */\nfunction addressFromMultisigPreImgAddrs({ version, threshold, addrs }: MultisigMetadata): Address {\n return addressFromMultisigPreImg({\n version,\n threshold,\n publicKeys: toPublicKeys(addrs),\n })\n}\n\n/**\n * Takes multisig metadata (preimage) and returns the corresponding human readable Algorand address.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param addrs - list of Algorand addresses\n */\nconst multisigAddress: typeof addressFromMultisigPreImgAddrs = addressFromMultisigPreImgAddrs\n\nexport interface MultisigMetadata {\n /**\n * Multisig version\n */\n version: number\n\n /**\n * Multisig threshold value. Authorization requires a subset of signatures,\n * equal to or greater than the threshold value.\n */\n threshold: number\n\n /**\n * A list of Algorand addresses representing possible signers for this multisig. Order is important.\n */\n addrs: Array<Address>\n}\n\n/** Account wrapper that supports partial or full multisig signing. */\nexport class MultisigAccount implements AddressWithTransactionSigner, AddressWithDelegatedLsigSigner {\n _params: MultisigMetadata\n _subSigners: (AddressWithTransactionSigner & AddressWithDelegatedLsigSigner)[]\n _addr: Address\n _signer: TransactionSigner\n _lsigSigner: DelegatedLsigSigner\n\n /** The parameters for the multisig account */\n get params(): Readonly<MultisigMetadata> {\n return this._params\n }\n\n /** The list of accounts that are present to sign transactions or lsigs */\n get subSigners() {\n return this._subSigners\n }\n\n /** The address of the multisig account */\n get addr(): Readonly<Address> {\n return this._addr\n }\n\n /** The transaction signer for the multisig account */\n get signer(): TransactionSigner {\n return this._signer\n }\n\n get lsigSigner(): DelegatedLsigSigner {\n return this._lsigSigner\n }\n\n static fromSignature(signature: MultisigSignature): MultisigAccount {\n const params: MultisigMetadata = {\n version: signature.version,\n threshold: signature.threshold,\n addrs: signature.subsigs.map((subsig) => new Address(subsig.publicKey)),\n }\n\n return new MultisigAccount(params, [])\n }\n\n constructor(multisigParams: MultisigMetadata, subSigners: (AddressWithTransactionSigner & AddressWithDelegatedLsigSigner)[]) {\n this._params = multisigParams\n this._subSigners = subSigners\n this._addr = multisigAddress(multisigParams)\n this._signer = async (txns: Transaction[], indexesToSign: number[]): Promise<Uint8Array[]> => {\n const txnsToSign = txns.filter((_, index) => indexesToSign.includes(index))\n const signedMsigTxns: SignedTransaction[] = []\n\n for (const txn of txnsToSign) {\n let signedMsigTxn = createMultisigTransaction(txn, this._params)\n\n for (const subSigner of this.subSigners) {\n const stxn = (await subSigner.signer([txn], [0]))[0]\n const sig = decodeSignedTransaction(stxn).sig\n\n if (!sig) {\n throw new Error(\n `Signer for address ${subSigner.addr.toString()} did not produce a valid signature when signing ${txn.txId()} for multisig account ${this._addr.toString()}`,\n )\n }\n\n signedMsigTxn = appendSignRawMultisigSignature(signedMsigTxn, this._params, subSigner.addr, sig)\n }\n\n signedMsigTxns.push(signedMsigTxn)\n }\n\n return signedMsigTxns.map((stxn) => {\n validateSignedTransaction(stxn)\n return encodeSignedTransaction(stxn)\n })\n }\n\n this._lsigSigner = async (lsig, _) => {\n let lmsig = lsig.lmsig ?? this.createMultisigSignature()\n\n for (const addrWithSigner of this.subSigners) {\n const { lsigSigner, addr } = addrWithSigner\n const result = await lsigSigner(lsig, this)\n if (!('sig' in result) || !result.sig) {\n throw new Error(\n `Signer for address ${addr.toString()} did not produce a valid signature when signing logic sig for multisig account ${this._addr.toString()}`,\n )\n }\n\n lmsig = this.applySignature(lmsig, addr.publicKey, result.sig)\n }\n\n return { addr: this.addr, lmsig }\n }\n }\n\n createMultisigTransaction(txn: Transaction): SignedTransaction {\n return createMultisigTransaction(txn, this._params)\n }\n\n createMultisigSignature(): MultisigSignature {\n const pks = toPublicKeys(this._params.addrs)\n const subsignatures: MultisigSubsignature[] = pks.map((pk) => ({\n publicKey: pk,\n sig: undefined,\n }))\n\n return {\n version: this._params.version,\n threshold: this._params.threshold,\n subsigs: subsignatures,\n }\n }\n\n applySignatureToTxn(txn: SignedTransaction, pubkey: Uint8Array, signature: Uint8Array): void {\n if (!txn.msig) {\n const createdTxn = this.createMultisigTransaction(txn.txn)\n txn.msig = createdTxn.msig\n }\n\n txn.msig = applyMultisigSubsignature(txn.msig!, pubkey, signature)\n }\n\n applySignature(msigSignature: MultisigSignature, pubkey: Uint8Array, signature: Uint8Array): MultisigSignature {\n if (msigSignature.version !== this._params.version || msigSignature.threshold !== this._params.threshold) {\n const thisParams = {\n version: this._params.version,\n threshold: this._params.threshold,\n participants: this._params.addrs.map((addr) => addr.toString()),\n }\n\n const givenParams = {\n version: msigSignature.version,\n threshold: msigSignature.threshold,\n participants: msigSignature.subsigs.map((subsig) => new Address(subsig.publicKey).toString()),\n }\n\n throw new Error(\n `Multisig signature parameters do not match expected multisig parameters. Multisig params: ${JSON.stringify(thisParams)}, signature: ${JSON.stringify(givenParams)}`,\n )\n }\n\n return applyMultisigSubsignature(msigSignature, pubkey, signature)\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"multisig.js","names":["getAddress","arrayEqual","Address","hash","decodeSignedTransaction","encodeSignedTransaction"],"sources":["../../../../packages/transact/src/multisig.ts"],"sourcesContent":["import {\n Address,\n ALGORAND_ADDRESS_BYTE_LENGTH,\n ALGORAND_CHECKSUM_BYTE_LENGTH,\n arrayEqual,\n getAddress,\n PUBLIC_KEY_BYTE_LENGTH,\n SIGNATURE_BYTE_LENGTH,\n} from '@algorandfoundation/algokit-common'\nimport { hash } from '@algorandfoundation/algokit-crypto'\nimport { DelegatedLsigSigner } from './logicsig'\nimport { AddressWithDelegatedLsigSigner, AddressWithTransactionSigner, TransactionSigner } from './signer'\nimport {\n decodeSignedTransaction,\n encodeSignedTransaction,\n MultisigSignature,\n MultisigSubsignature,\n SignedTransaction,\n validateSignedTransaction,\n} from './transactions/signed-transaction'\nimport { Transaction } from './transactions/transaction'\n\nconst toPublicKeys = (addrs: Array<string | Address>): Uint8Array[] => addrs.map((addr) => getAddress(addr).publicKey)\n\n/**\n * Applies a subsignature for a participant to a multisignature signature, replacing any existing signature.\n *\n * This method applies the signature to ALL instances of the given public key (to support weighted multisig).\n * Since ed25519 signatures are deterministic, there's only one valid signature for a given message and public key.\n */\nfunction applyMultisigSubsignature(\n multisigSignature: MultisigSignature,\n participant: Uint8Array,\n signature: Uint8Array,\n): MultisigSignature {\n let found = false\n const newSubsignatures = multisigSignature.subsigs.map((subsig) => {\n if (arrayEqual(subsig.publicKey, participant)) {\n found = true\n return { ...subsig, sig: signature } satisfies MultisigSubsignature\n }\n return subsig\n })\n\n if (!found) {\n throw new Error('Public key not found in multisig signature')\n }\n\n return {\n ...multisigSignature,\n subsigs: newSubsignatures,\n }\n}\n\n// Convert \"MultisigAddr\" UTF-8 to byte array\nconst MULTISIG_PREIMG2ADDR_PREFIX = new Uint8Array([77, 117, 108, 116, 105, 115, 105, 103, 65, 100, 100, 114])\n\nconst INVALID_MSIG_VERSION_ERROR_MSG = 'invalid multisig version'\nconst INVALID_MSIG_THRESHOLD_ERROR_MSG = 'bad multisig threshold'\nconst INVALID_MSIG_PK_ERROR_MSG = 'bad multisig public key - wrong length'\nconst UNEXPECTED_PK_LEN_ERROR_MSG = 'nacl public key length is not 32 bytes'\n\nconst MULTISIG_MERGE_LESSTHANTWO_ERROR_MSG = 'Not enough multisig transactions to merge. Need at least two'\nconst MULTISIG_MERGE_MISMATCH_ERROR_MSG = 'Cannot merge txs. txIDs differ'\nconst MULTISIG_MERGE_MISMATCH_AUTH_ADDR_MSG = 'Cannot merge txs. Auth addrs differ'\nconst MULTISIG_MERGE_WRONG_PREIMAGE_ERROR_MSG = 'Cannot merge txs. Multisig preimages differ'\nconst MULTISIG_MERGE_SIG_MISMATCH_ERROR_MSG = 'Cannot merge txs. subsigs are mismatched.'\nconst MULTISIG_SIGNATURE_LENGTH_ERROR_MSG = 'Cannot add multisig signature. Signature is not of the correct length.'\nconst MULTISIG_KEY_NOT_EXIST_ERROR_MSG = 'Key does not exist'\n\n/**\n * creates a raw, multisig transaction blob without any signatures.\n * @param txn - the actual transaction.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param pks - ordered list of public keys in this multisig\n * @returns encoded multisig blob\n */\nfunction createMultisigTransaction(txn: Transaction, { version, threshold, addrs }: MultisigMetadata) {\n // construct the appendable multisigned transaction format\n const pks = toPublicKeys(addrs)\n const subsignatures = pks.map(\n (pk) =>\n ({\n publicKey: pk,\n sig: undefined,\n }) satisfies MultisigSubsignature,\n )\n\n const msig: MultisigSignature = {\n version,\n threshold,\n subsigs: subsignatures,\n }\n\n // if the address of this multisig is different from the transaction sender,\n // we need to add the auth-addr field\n const msigAddr = addressFromMultisigPreImg({\n version,\n threshold,\n publicKeys: pks,\n })\n let authAddress: Address | undefined\n if (!msigAddr.equals(txn.sender)) {\n authAddress = msigAddr\n }\n\n const signedTxn: SignedTransaction = {\n txn: txn,\n msig: msig,\n authAddress,\n }\n\n return signedTxn\n}\n\ninterface MultisigOptions {\n rawSig: Uint8Array\n myPk: Uint8Array\n}\n\ninterface MultisigMetadataWithPublicKeys extends Omit<MultisigMetadata, 'addrs'> {\n publicKeys: Uint8Array[]\n}\n\n/**\n * creates a multisig transaction blob with an included signature.\n * @param txn - the actual transaction to sign.\n * @param rawSig - a Uint8Array raw signature of that transaction\n * @param myPk - a public key that corresponds with rawSig\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param pks - ordered list of public keys in this multisig\n * @returns encoded multisig blob\n */\nfunction createMultisigTransactionWithSignature(\n txn: Transaction,\n { rawSig, myPk }: MultisigOptions,\n { version, threshold, publicKeys }: MultisigMetadataWithPublicKeys,\n): SignedTransaction {\n // Create an empty encoded multisig transaction\n const signedTxn = createMultisigTransaction(txn, {\n version,\n threshold,\n addrs: publicKeys.map((pk) => new Address(pk)),\n })\n\n let keyExist = false\n\n // append the multisig signature to the corresponding public key in the multisig blob\n const updatedSubsigs = signedTxn.msig!.subsigs.map((subsig) => {\n if (arrayEqual(subsig.publicKey, myPk)) {\n keyExist = true\n return { ...subsig, sig: rawSig }\n }\n return subsig\n })\n\n if (!keyExist) {\n throw new Error(MULTISIG_KEY_NOT_EXIST_ERROR_MSG)\n }\n\n const updatedSignedTxn: SignedTransaction = {\n ...signedTxn,\n msig: {\n ...signedTxn.msig!,\n subsigs: updatedSubsigs,\n },\n }\n\n return updatedSignedTxn\n}\n\n/**\n * takes a list of multisig transaction blobs, and merges them.\n * @param multisigTxnBlobs - a list of blobs representing encoded multisig txns\n * @returns typed array msg-pack encoded multisig txn\n */\nfunction mergeMultisigTransactions(multisigTxnBlobs: SignedTransaction[]): SignedTransaction {\n if (multisigTxnBlobs.length < 2) {\n throw new Error(MULTISIG_MERGE_LESSTHANTWO_ERROR_MSG)\n }\n const refSigTx = multisigTxnBlobs[0]\n if (!refSigTx.msig) {\n throw new Error('Invalid multisig transaction, multisig structure missing at index 0')\n }\n const refTxID = refSigTx.txn.txId()\n const refAuthAddr = refSigTx.authAddress\n const refPreImage = {\n version: refSigTx.msig.version,\n threshold: refSigTx.msig.threshold,\n publicKeys: refSigTx.msig.subsigs.map((subsig) => subsig.publicKey),\n }\n const refMsigAddr = addressFromMultisigPreImg(refPreImage)\n\n const newSubsigs: MultisigSubsignature[] = refSigTx.msig.subsigs.map((sig) => ({ ...sig }))\n for (let i = 1; i < multisigTxnBlobs.length; i++) {\n const unisig = multisigTxnBlobs[i]\n if (!unisig.msig) {\n throw new Error(`Invalid multisig transaction, multisig structure missing at index ${i}`)\n }\n\n if (unisig.txn.txId() !== refTxID) {\n throw new Error(MULTISIG_MERGE_MISMATCH_ERROR_MSG)\n }\n\n const authAddr = unisig.authAddress\n if (refAuthAddr !== authAddr) {\n throw new Error(MULTISIG_MERGE_MISMATCH_AUTH_ADDR_MSG)\n }\n\n // check multisig has same preimage as reference\n if (unisig.msig.subsigs.length !== refSigTx.msig.subsigs.length) {\n throw new Error(MULTISIG_MERGE_WRONG_PREIMAGE_ERROR_MSG)\n }\n const preimg: MultisigMetadataWithPublicKeys = {\n version: unisig.msig.version,\n threshold: unisig.msig.threshold,\n publicKeys: unisig.msig.subsigs.map((subsig) => subsig.publicKey),\n }\n const msgigAddr = addressFromMultisigPreImg(preimg)\n if (refMsigAddr.toString() !== msgigAddr.toString()) {\n throw new Error(MULTISIG_MERGE_WRONG_PREIMAGE_ERROR_MSG)\n }\n\n // now, we can merge\n unisig.msig.subsigs.forEach((uniSubsig, index) => {\n if (!uniSubsig.sig) return\n const current = newSubsigs[index]\n if (current.sig && !arrayEqual(uniSubsig.sig, current.sig)) {\n // mismatch\n throw new Error(MULTISIG_MERGE_SIG_MISMATCH_ERROR_MSG)\n }\n current.sig = uniSubsig.sig\n })\n }\n\n const msig: MultisigSignature = {\n version: refSigTx.msig.version,\n threshold: refSigTx.msig.threshold,\n subsigs: newSubsigs,\n }\n\n const signedTxn: SignedTransaction = {\n txn: refSigTx.txn,\n msig: msig,\n authAddress: refAuthAddr,\n }\n\n return signedTxn\n}\n\n/**\n * Partially signs this transaction with an external raw multisig signature and returns\n * a partially-signed multisig transaction, encoded with msgpack as a typed array.\n * @param transaction - The transaction to sign\n * @param metadata - multisig metadata\n * @param signerAddr - address of the signer\n * @param signature - raw multisig signature\n * @returns an encoded, partially signed multisig transaction.\n */\nfunction partialSignWithMultisigSignature(\n transaction: Transaction,\n metadata: MultisigMetadataWithPublicKeys,\n signerAddr: string | Address,\n signature: Uint8Array,\n) {\n if (signature.length != SIGNATURE_BYTE_LENGTH) {\n throw new Error(MULTISIG_SIGNATURE_LENGTH_ERROR_MSG)\n }\n const signerAddressObj = typeof signerAddr === 'string' ? Address.fromString(signerAddr) : signerAddr\n return createMultisigTransactionWithSignature(\n transaction,\n {\n rawSig: signature,\n myPk: signerAddressObj.publicKey,\n },\n metadata,\n )\n}\n\n/**\n * Takes a multisig transaction blob, and appends a given raw signature to it.\n * This makes it possible to compile a multisig signature using only raw signatures from external methods.\n * @param multisigTxnBlob - an encoded multisig txn. Supports non-payment txn types.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param addrs - a list of Algorand addresses representing possible signers for this multisig. Order is important.\n * @param signerAddr - address of the signer\n * @param signature - raw multisig signature\n * @returns object containing txID, and blob representing encoded multisig txn\n */\nfunction appendSignRawMultisigSignature(\n multisigTxn: SignedTransaction,\n { version, threshold, addrs }: MultisigMetadata,\n signerAddr: string | Address,\n signature: Uint8Array,\n): SignedTransaction {\n const publicKeys = toPublicKeys(addrs)\n // obtain underlying txn, sign it, and merge it\n const partialSigned = partialSignWithMultisigSignature(multisigTxn.txn, { version, threshold, publicKeys }, signerAddr, signature)\n return mergeMultisigTransactions([multisigTxn, partialSigned])\n}\n\n/**\n * Takes multisig parameters and returns a 32 byte typed array public key,\n * representing an address that identifies the \"exact group, version, and public keys\" that are required for signing.\n * Hash(\"MultisigAddr\" || version uint8 || threshold uint8 || PK1 || PK2 || ...)\n * Encoding this output yields a human readable address.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param pks - array of typed array public keys\n */\nfunction addressFromMultisigPreImg({\n version,\n threshold,\n publicKeys,\n}: Omit<MultisigMetadata, 'addrs'> & {\n publicKeys: Uint8Array[]\n}): Address {\n if (version > 255 || version < 0) {\n // ^ a tad redundant, but in case in the future version != 1, still check for uint8\n throw new Error(`${INVALID_MSIG_VERSION_ERROR_MSG}: ${version}`)\n }\n if (threshold === 0 || publicKeys.length === 0 || threshold > publicKeys.length || threshold > 255) {\n throw new Error(INVALID_MSIG_THRESHOLD_ERROR_MSG)\n }\n const pkLen = ALGORAND_ADDRESS_BYTE_LENGTH - ALGORAND_CHECKSUM_BYTE_LENGTH\n if (pkLen !== PUBLIC_KEY_BYTE_LENGTH) {\n throw new Error(UNEXPECTED_PK_LEN_ERROR_MSG)\n }\n const merged = new Uint8Array(MULTISIG_PREIMG2ADDR_PREFIX.length + 2 + pkLen * publicKeys.length)\n merged.set(MULTISIG_PREIMG2ADDR_PREFIX, 0)\n merged.set([version], MULTISIG_PREIMG2ADDR_PREFIX.length)\n merged.set([threshold], MULTISIG_PREIMG2ADDR_PREFIX.length + 1)\n for (let i = 0; i < publicKeys.length; i++) {\n if (publicKeys[i].length !== pkLen) {\n throw new Error(INVALID_MSIG_PK_ERROR_MSG)\n }\n merged.set(publicKeys[i], MULTISIG_PREIMG2ADDR_PREFIX.length + 2 + i * pkLen)\n }\n return new Address(Uint8Array.from(hash(merged)))\n}\n\n/**\n * Takes multisig parameters and returns a human readable Algorand address.\n * This is equivalent to fromMultisigPreImg, but interfaces with encoded addresses.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param addrs - array of encoded addresses\n */\nfunction addressFromMultisigPreImgAddrs({ version, threshold, addrs }: MultisigMetadata): Address {\n return addressFromMultisigPreImg({\n version,\n threshold,\n publicKeys: toPublicKeys(addrs),\n })\n}\n\n/**\n * Takes multisig metadata (preimage) and returns the corresponding human readable Algorand address.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param addrs - list of Algorand addresses\n */\nconst multisigAddress: typeof addressFromMultisigPreImgAddrs = addressFromMultisigPreImgAddrs\n\nexport interface MultisigMetadata {\n /**\n * Multisig version\n */\n version: number\n\n /**\n * Multisig threshold value. Authorization requires a subset of signatures,\n * equal to or greater than the threshold value.\n */\n threshold: number\n\n /**\n * A list of Algorand addresses representing possible signers for this multisig. Order is important.\n */\n addrs: Array<Address>\n}\n\n/** Account wrapper that supports partial or full multisig signing. */\nexport class MultisigAccount implements AddressWithTransactionSigner, AddressWithDelegatedLsigSigner {\n _params: MultisigMetadata\n _subSigners: (AddressWithTransactionSigner & AddressWithDelegatedLsigSigner)[]\n _addr: Address\n _signer: TransactionSigner\n _lsigSigner: DelegatedLsigSigner\n\n /** The parameters for the multisig account */\n get params(): Readonly<MultisigMetadata> {\n return this._params\n }\n\n /** The list of accounts that are present to sign transactions or lsigs */\n get subSigners() {\n return this._subSigners\n }\n\n /** The address of the multisig account */\n get addr(): Readonly<Address> {\n return this._addr\n }\n\n /** The transaction signer for the multisig account */\n get signer(): TransactionSigner {\n return this._signer\n }\n\n get lsigSigner(): DelegatedLsigSigner {\n return this._lsigSigner\n }\n\n static fromSignature(signature: MultisigSignature): MultisigAccount {\n const params: MultisigMetadata = {\n version: signature.version,\n threshold: signature.threshold,\n addrs: signature.subsigs.map((subsig) => new Address(subsig.publicKey)),\n }\n\n return new MultisigAccount(params, [])\n }\n\n constructor(multisigParams: MultisigMetadata, subSigners: (AddressWithTransactionSigner & AddressWithDelegatedLsigSigner)[]) {\n this._params = multisigParams\n this._subSigners = subSigners\n this._addr = multisigAddress(multisigParams)\n this._signer = async (txns: Transaction[], indexesToSign: number[]): Promise<Uint8Array[]> => {\n const txnsToSign = txns.filter((_, index) => indexesToSign.includes(index))\n const signedMsigTxns: SignedTransaction[] = []\n\n for (const txn of txnsToSign) {\n let signedMsigTxn = createMultisigTransaction(txn, this._params)\n\n for (const subSigner of this.subSigners) {\n const stxn = (await subSigner.signer([txn], [0]))[0]\n const sig = decodeSignedTransaction(stxn).sig\n\n if (!sig) {\n throw new Error(\n `Signer for address ${subSigner.addr.toString()} did not produce a valid signature when signing ${txn.txId()} for multisig account ${this._addr.toString()}`,\n )\n }\n\n signedMsigTxn = appendSignRawMultisigSignature(signedMsigTxn, this._params, subSigner.addr, sig)\n }\n\n signedMsigTxns.push(signedMsigTxn)\n }\n\n return signedMsigTxns.map((stxn) => {\n validateSignedTransaction(stxn)\n return encodeSignedTransaction(stxn)\n })\n }\n\n this._lsigSigner = async (lsig, _) => {\n let lmsig = lsig.lmsig ?? this.createMultisigSignature()\n\n for (const addrWithSigner of this.subSigners) {\n const { lsigSigner, addr } = addrWithSigner\n const result = await lsigSigner(lsig, this)\n if (!('sig' in result) || !result.sig) {\n throw new Error(\n `Signer for address ${addr.toString()} did not produce a valid signature when signing logic sig for multisig account ${this._addr.toString()}`,\n )\n }\n\n lmsig = this.applySignature(lmsig, addr.publicKey, result.sig)\n }\n\n return { addr: this.addr, lmsig }\n }\n }\n\n createMultisigTransaction(txn: Transaction): SignedTransaction {\n return createMultisigTransaction(txn, this._params)\n }\n\n createMultisigSignature(): MultisigSignature {\n const pks = toPublicKeys(this._params.addrs)\n const subsignatures: MultisigSubsignature[] = pks.map((pk) => ({\n publicKey: pk,\n sig: undefined,\n }))\n\n return {\n version: this._params.version,\n threshold: this._params.threshold,\n subsigs: subsignatures,\n }\n }\n\n applySignatureToTxn(txn: SignedTransaction, pubkey: Uint8Array, signature: Uint8Array): void {\n if (!txn.msig) {\n const createdTxn = this.createMultisigTransaction(txn.txn)\n txn.msig = createdTxn.msig\n }\n\n txn.msig = applyMultisigSubsignature(txn.msig!, pubkey, signature)\n }\n\n applySignature(msigSignature: MultisigSignature, pubkey: Uint8Array, signature: Uint8Array): MultisigSignature {\n if (msigSignature.version !== this._params.version || msigSignature.threshold !== this._params.threshold) {\n const thisParams = {\n version: this._params.version,\n threshold: this._params.threshold,\n participants: this._params.addrs.map((addr) => addr.toString()),\n }\n\n const givenParams = {\n version: msigSignature.version,\n threshold: msigSignature.threshold,\n participants: msigSignature.subsigs.map((subsig) => new Address(subsig.publicKey).toString()),\n }\n\n throw new Error(\n `Multisig signature parameters do not match expected multisig parameters. Multisig params: ${JSON.stringify(thisParams)}, signature: ${JSON.stringify(givenParams)}`,\n )\n }\n\n return applyMultisigSubsignature(msigSignature, pubkey, signature)\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { arrayEqual } from "../../common/src/array.mjs";
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
2
|
+
import "../../common/src/constants.mjs";
|
|
3
|
+
import { Address, getAddress } from "../../common/src/address.mjs";
|
|
4
4
|
import { hash } from "../../crypto/src/hash.mjs";
|
|
5
5
|
import { decodeSignedTransaction, encodeSignedTransaction, validateSignedTransaction } from "./transactions/signed-transaction.mjs";
|
|
6
|
-
|
|
7
6
|
//#region packages/transact/src/multisig.ts
|
|
8
7
|
const toPublicKeys = (addrs) => addrs.map((addr) => getAddress(addr).publicKey);
|
|
9
8
|
/**
|
|
@@ -178,7 +177,7 @@ function mergeMultisigTransactions(multisigTxnBlobs) {
|
|
|
178
177
|
* @returns an encoded, partially signed multisig transaction.
|
|
179
178
|
*/
|
|
180
179
|
function partialSignWithMultisigSignature(transaction, metadata, signerAddr, signature) {
|
|
181
|
-
if (signature.length !=
|
|
180
|
+
if (signature.length != 64) throw new Error(MULTISIG_SIGNATURE_LENGTH_ERROR_MSG);
|
|
182
181
|
return createMultisigTransactionWithSignature(transaction, {
|
|
183
182
|
rawSig: signature,
|
|
184
183
|
myPk: (typeof signerAddr === "string" ? Address.fromString(signerAddr) : signerAddr).publicKey
|
|
@@ -215,8 +214,8 @@ function appendSignRawMultisigSignature(multisigTxn, { version, threshold, addrs
|
|
|
215
214
|
function addressFromMultisigPreImg({ version, threshold, publicKeys }) {
|
|
216
215
|
if (version > 255 || version < 0) throw new Error(`${INVALID_MSIG_VERSION_ERROR_MSG}: ${version}`);
|
|
217
216
|
if (threshold === 0 || publicKeys.length === 0 || threshold > publicKeys.length || threshold > 255) throw new Error(INVALID_MSIG_THRESHOLD_ERROR_MSG);
|
|
218
|
-
const pkLen =
|
|
219
|
-
if (pkLen !==
|
|
217
|
+
const pkLen = 32;
|
|
218
|
+
if (pkLen !== 32) throw new Error(UNEXPECTED_PK_LEN_ERROR_MSG);
|
|
220
219
|
const merged = new Uint8Array(MULTISIG_PREIMG2ADDR_PREFIX.length + 2 + pkLen * publicKeys.length);
|
|
221
220
|
merged.set(MULTISIG_PREIMG2ADDR_PREFIX, 0);
|
|
222
221
|
merged.set([version], MULTISIG_PREIMG2ADDR_PREFIX.length);
|
|
@@ -352,7 +351,7 @@ var MultisigAccount = class MultisigAccount {
|
|
|
352
351
|
return applyMultisigSubsignature(msigSignature, pubkey, signature);
|
|
353
352
|
}
|
|
354
353
|
};
|
|
355
|
-
|
|
356
354
|
//#endregion
|
|
357
355
|
export { MultisigAccount };
|
|
356
|
+
|
|
358
357
|
//# sourceMappingURL=multisig.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multisig.mjs","names":[],"sources":["../../../../packages/transact/src/multisig.ts"],"sourcesContent":["import {\n Address,\n ALGORAND_ADDRESS_BYTE_LENGTH,\n ALGORAND_CHECKSUM_BYTE_LENGTH,\n arrayEqual,\n getAddress,\n PUBLIC_KEY_BYTE_LENGTH,\n SIGNATURE_BYTE_LENGTH,\n} from '@algorandfoundation/algokit-common'\nimport { hash } from '@algorandfoundation/algokit-crypto'\nimport { DelegatedLsigSigner } from './logicsig'\nimport { AddressWithDelegatedLsigSigner, AddressWithTransactionSigner, TransactionSigner } from './signer'\nimport {\n decodeSignedTransaction,\n encodeSignedTransaction,\n MultisigSignature,\n MultisigSubsignature,\n SignedTransaction,\n validateSignedTransaction,\n} from './transactions/signed-transaction'\nimport { Transaction } from './transactions/transaction'\n\nconst toPublicKeys = (addrs: Array<string | Address>): Uint8Array[] => addrs.map((addr) => getAddress(addr).publicKey)\n\n/**\n * Applies a subsignature for a participant to a multisignature signature, replacing any existing signature.\n *\n * This method applies the signature to ALL instances of the given public key (to support weighted multisig).\n * Since ed25519 signatures are deterministic, there's only one valid signature for a given message and public key.\n */\nfunction applyMultisigSubsignature(\n multisigSignature: MultisigSignature,\n participant: Uint8Array,\n signature: Uint8Array,\n): MultisigSignature {\n let found = false\n const newSubsignatures = multisigSignature.subsigs.map((subsig) => {\n if (arrayEqual(subsig.publicKey, participant)) {\n found = true\n return { ...subsig, sig: signature } satisfies MultisigSubsignature\n }\n return subsig\n })\n\n if (!found) {\n throw new Error('Public key not found in multisig signature')\n }\n\n return {\n ...multisigSignature,\n subsigs: newSubsignatures,\n }\n}\n\n// Convert \"MultisigAddr\" UTF-8 to byte array\nconst MULTISIG_PREIMG2ADDR_PREFIX = new Uint8Array([77, 117, 108, 116, 105, 115, 105, 103, 65, 100, 100, 114])\n\nconst INVALID_MSIG_VERSION_ERROR_MSG = 'invalid multisig version'\nconst INVALID_MSIG_THRESHOLD_ERROR_MSG = 'bad multisig threshold'\nconst INVALID_MSIG_PK_ERROR_MSG = 'bad multisig public key - wrong length'\nconst UNEXPECTED_PK_LEN_ERROR_MSG = 'nacl public key length is not 32 bytes'\n\nconst MULTISIG_MERGE_LESSTHANTWO_ERROR_MSG = 'Not enough multisig transactions to merge. Need at least two'\nconst MULTISIG_MERGE_MISMATCH_ERROR_MSG = 'Cannot merge txs. txIDs differ'\nconst MULTISIG_MERGE_MISMATCH_AUTH_ADDR_MSG = 'Cannot merge txs. Auth addrs differ'\nconst MULTISIG_MERGE_WRONG_PREIMAGE_ERROR_MSG = 'Cannot merge txs. Multisig preimages differ'\nconst MULTISIG_MERGE_SIG_MISMATCH_ERROR_MSG = 'Cannot merge txs. subsigs are mismatched.'\nconst MULTISIG_SIGNATURE_LENGTH_ERROR_MSG = 'Cannot add multisig signature. Signature is not of the correct length.'\nconst MULTISIG_KEY_NOT_EXIST_ERROR_MSG = 'Key does not exist'\n\n/**\n * creates a raw, multisig transaction blob without any signatures.\n * @param txn - the actual transaction.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param pks - ordered list of public keys in this multisig\n * @returns encoded multisig blob\n */\nfunction createMultisigTransaction(txn: Transaction, { version, threshold, addrs }: MultisigMetadata) {\n // construct the appendable multisigned transaction format\n const pks = toPublicKeys(addrs)\n const subsignatures = pks.map(\n (pk) =>\n ({\n publicKey: pk,\n sig: undefined,\n }) satisfies MultisigSubsignature,\n )\n\n const msig: MultisigSignature = {\n version,\n threshold,\n subsigs: subsignatures,\n }\n\n // if the address of this multisig is different from the transaction sender,\n // we need to add the auth-addr field\n const msigAddr = addressFromMultisigPreImg({\n version,\n threshold,\n publicKeys: pks,\n })\n let authAddress: Address | undefined\n if (!msigAddr.equals(txn.sender)) {\n authAddress = msigAddr\n }\n\n const signedTxn: SignedTransaction = {\n txn: txn,\n msig: msig,\n authAddress,\n }\n\n return signedTxn\n}\n\ninterface MultisigOptions {\n rawSig: Uint8Array\n myPk: Uint8Array\n}\n\ninterface MultisigMetadataWithPublicKeys extends Omit<MultisigMetadata, 'addrs'> {\n publicKeys: Uint8Array[]\n}\n\n/**\n * creates a multisig transaction blob with an included signature.\n * @param txn - the actual transaction to sign.\n * @param rawSig - a Uint8Array raw signature of that transaction\n * @param myPk - a public key that corresponds with rawSig\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param pks - ordered list of public keys in this multisig\n * @returns encoded multisig blob\n */\nfunction createMultisigTransactionWithSignature(\n txn: Transaction,\n { rawSig, myPk }: MultisigOptions,\n { version, threshold, publicKeys }: MultisigMetadataWithPublicKeys,\n): SignedTransaction {\n // Create an empty encoded multisig transaction\n const signedTxn = createMultisigTransaction(txn, {\n version,\n threshold,\n addrs: publicKeys.map((pk) => new Address(pk)),\n })\n\n let keyExist = false\n\n // append the multisig signature to the corresponding public key in the multisig blob\n const updatedSubsigs = signedTxn.msig!.subsigs.map((subsig) => {\n if (arrayEqual(subsig.publicKey, myPk)) {\n keyExist = true\n return { ...subsig, sig: rawSig }\n }\n return subsig\n })\n\n if (!keyExist) {\n throw new Error(MULTISIG_KEY_NOT_EXIST_ERROR_MSG)\n }\n\n const updatedSignedTxn: SignedTransaction = {\n ...signedTxn,\n msig: {\n ...signedTxn.msig!,\n subsigs: updatedSubsigs,\n },\n }\n\n return updatedSignedTxn\n}\n\n/**\n * takes a list of multisig transaction blobs, and merges them.\n * @param multisigTxnBlobs - a list of blobs representing encoded multisig txns\n * @returns typed array msg-pack encoded multisig txn\n */\nfunction mergeMultisigTransactions(multisigTxnBlobs: SignedTransaction[]): SignedTransaction {\n if (multisigTxnBlobs.length < 2) {\n throw new Error(MULTISIG_MERGE_LESSTHANTWO_ERROR_MSG)\n }\n const refSigTx = multisigTxnBlobs[0]\n if (!refSigTx.msig) {\n throw new Error('Invalid multisig transaction, multisig structure missing at index 0')\n }\n const refTxID = refSigTx.txn.txId()\n const refAuthAddr = refSigTx.authAddress\n const refPreImage = {\n version: refSigTx.msig.version,\n threshold: refSigTx.msig.threshold,\n publicKeys: refSigTx.msig.subsigs.map((subsig) => subsig.publicKey),\n }\n const refMsigAddr = addressFromMultisigPreImg(refPreImage)\n\n const newSubsigs: MultisigSubsignature[] = refSigTx.msig.subsigs.map((sig) => ({ ...sig }))\n for (let i = 1; i < multisigTxnBlobs.length; i++) {\n const unisig = multisigTxnBlobs[i]\n if (!unisig.msig) {\n throw new Error(`Invalid multisig transaction, multisig structure missing at index ${i}`)\n }\n\n if (unisig.txn.txId() !== refTxID) {\n throw new Error(MULTISIG_MERGE_MISMATCH_ERROR_MSG)\n }\n\n const authAddr = unisig.authAddress\n if (refAuthAddr !== authAddr) {\n throw new Error(MULTISIG_MERGE_MISMATCH_AUTH_ADDR_MSG)\n }\n\n // check multisig has same preimage as reference\n if (unisig.msig.subsigs.length !== refSigTx.msig.subsigs.length) {\n throw new Error(MULTISIG_MERGE_WRONG_PREIMAGE_ERROR_MSG)\n }\n const preimg: MultisigMetadataWithPublicKeys = {\n version: unisig.msig.version,\n threshold: unisig.msig.threshold,\n publicKeys: unisig.msig.subsigs.map((subsig) => subsig.publicKey),\n }\n const msgigAddr = addressFromMultisigPreImg(preimg)\n if (refMsigAddr.toString() !== msgigAddr.toString()) {\n throw new Error(MULTISIG_MERGE_WRONG_PREIMAGE_ERROR_MSG)\n }\n\n // now, we can merge\n unisig.msig.subsigs.forEach((uniSubsig, index) => {\n if (!uniSubsig.sig) return\n const current = newSubsigs[index]\n if (current.sig && !arrayEqual(uniSubsig.sig, current.sig)) {\n // mismatch\n throw new Error(MULTISIG_MERGE_SIG_MISMATCH_ERROR_MSG)\n }\n current.sig = uniSubsig.sig\n })\n }\n\n const msig: MultisigSignature = {\n version: refSigTx.msig.version,\n threshold: refSigTx.msig.threshold,\n subsigs: newSubsigs,\n }\n\n const signedTxn: SignedTransaction = {\n txn: refSigTx.txn,\n msig: msig,\n authAddress: refAuthAddr,\n }\n\n return signedTxn\n}\n\n/**\n * Partially signs this transaction with an external raw multisig signature and returns\n * a partially-signed multisig transaction, encoded with msgpack as a typed array.\n * @param transaction - The transaction to sign\n * @param metadata - multisig metadata\n * @param signerAddr - address of the signer\n * @param signature - raw multisig signature\n * @returns an encoded, partially signed multisig transaction.\n */\nfunction partialSignWithMultisigSignature(\n transaction: Transaction,\n metadata: MultisigMetadataWithPublicKeys,\n signerAddr: string | Address,\n signature: Uint8Array,\n) {\n if (signature.length != SIGNATURE_BYTE_LENGTH) {\n throw new Error(MULTISIG_SIGNATURE_LENGTH_ERROR_MSG)\n }\n const signerAddressObj = typeof signerAddr === 'string' ? Address.fromString(signerAddr) : signerAddr\n return createMultisigTransactionWithSignature(\n transaction,\n {\n rawSig: signature,\n myPk: signerAddressObj.publicKey,\n },\n metadata,\n )\n}\n\n/**\n * Takes a multisig transaction blob, and appends a given raw signature to it.\n * This makes it possible to compile a multisig signature using only raw signatures from external methods.\n * @param multisigTxnBlob - an encoded multisig txn. Supports non-payment txn types.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param addrs - a list of Algorand addresses representing possible signers for this multisig. Order is important.\n * @param signerAddr - address of the signer\n * @param signature - raw multisig signature\n * @returns object containing txID, and blob representing encoded multisig txn\n */\nfunction appendSignRawMultisigSignature(\n multisigTxn: SignedTransaction,\n { version, threshold, addrs }: MultisigMetadata,\n signerAddr: string | Address,\n signature: Uint8Array,\n): SignedTransaction {\n const publicKeys = toPublicKeys(addrs)\n // obtain underlying txn, sign it, and merge it\n const partialSigned = partialSignWithMultisigSignature(multisigTxn.txn, { version, threshold, publicKeys }, signerAddr, signature)\n return mergeMultisigTransactions([multisigTxn, partialSigned])\n}\n\n/**\n * Takes multisig parameters and returns a 32 byte typed array public key,\n * representing an address that identifies the \"exact group, version, and public keys\" that are required for signing.\n * Hash(\"MultisigAddr\" || version uint8 || threshold uint8 || PK1 || PK2 || ...)\n * Encoding this output yields a human readable address.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param pks - array of typed array public keys\n */\nfunction addressFromMultisigPreImg({\n version,\n threshold,\n publicKeys,\n}: Omit<MultisigMetadata, 'addrs'> & {\n publicKeys: Uint8Array[]\n}): Address {\n if (version > 255 || version < 0) {\n // ^ a tad redundant, but in case in the future version != 1, still check for uint8\n throw new Error(`${INVALID_MSIG_VERSION_ERROR_MSG}: ${version}`)\n }\n if (threshold === 0 || publicKeys.length === 0 || threshold > publicKeys.length || threshold > 255) {\n throw new Error(INVALID_MSIG_THRESHOLD_ERROR_MSG)\n }\n const pkLen = ALGORAND_ADDRESS_BYTE_LENGTH - ALGORAND_CHECKSUM_BYTE_LENGTH\n if (pkLen !== PUBLIC_KEY_BYTE_LENGTH) {\n throw new Error(UNEXPECTED_PK_LEN_ERROR_MSG)\n }\n const merged = new Uint8Array(MULTISIG_PREIMG2ADDR_PREFIX.length + 2 + pkLen * publicKeys.length)\n merged.set(MULTISIG_PREIMG2ADDR_PREFIX, 0)\n merged.set([version], MULTISIG_PREIMG2ADDR_PREFIX.length)\n merged.set([threshold], MULTISIG_PREIMG2ADDR_PREFIX.length + 1)\n for (let i = 0; i < publicKeys.length; i++) {\n if (publicKeys[i].length !== pkLen) {\n throw new Error(INVALID_MSIG_PK_ERROR_MSG)\n }\n merged.set(publicKeys[i], MULTISIG_PREIMG2ADDR_PREFIX.length + 2 + i * pkLen)\n }\n return new Address(Uint8Array.from(hash(merged)))\n}\n\n/**\n * Takes multisig parameters and returns a human readable Algorand address.\n * This is equivalent to fromMultisigPreImg, but interfaces with encoded addresses.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param addrs - array of encoded addresses\n */\nfunction addressFromMultisigPreImgAddrs({ version, threshold, addrs }: MultisigMetadata): Address {\n return addressFromMultisigPreImg({\n version,\n threshold,\n publicKeys: toPublicKeys(addrs),\n })\n}\n\n/**\n * Takes multisig metadata (preimage) and returns the corresponding human readable Algorand address.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param addrs - list of Algorand addresses\n */\nconst multisigAddress: typeof addressFromMultisigPreImgAddrs = addressFromMultisigPreImgAddrs\n\nexport interface MultisigMetadata {\n /**\n * Multisig version\n */\n version: number\n\n /**\n * Multisig threshold value. Authorization requires a subset of signatures,\n * equal to or greater than the threshold value.\n */\n threshold: number\n\n /**\n * A list of Algorand addresses representing possible signers for this multisig. Order is important.\n */\n addrs: Array<Address>\n}\n\n/** Account wrapper that supports partial or full multisig signing. */\nexport class MultisigAccount implements AddressWithTransactionSigner, AddressWithDelegatedLsigSigner {\n _params: MultisigMetadata\n _subSigners: (AddressWithTransactionSigner & AddressWithDelegatedLsigSigner)[]\n _addr: Address\n _signer: TransactionSigner\n _lsigSigner: DelegatedLsigSigner\n\n /** The parameters for the multisig account */\n get params(): Readonly<MultisigMetadata> {\n return this._params\n }\n\n /** The list of accounts that are present to sign transactions or lsigs */\n get subSigners() {\n return this._subSigners\n }\n\n /** The address of the multisig account */\n get addr(): Readonly<Address> {\n return this._addr\n }\n\n /** The transaction signer for the multisig account */\n get signer(): TransactionSigner {\n return this._signer\n }\n\n get lsigSigner(): DelegatedLsigSigner {\n return this._lsigSigner\n }\n\n static fromSignature(signature: MultisigSignature): MultisigAccount {\n const params: MultisigMetadata = {\n version: signature.version,\n threshold: signature.threshold,\n addrs: signature.subsigs.map((subsig) => new Address(subsig.publicKey)),\n }\n\n return new MultisigAccount(params, [])\n }\n\n constructor(multisigParams: MultisigMetadata, subSigners: (AddressWithTransactionSigner & AddressWithDelegatedLsigSigner)[]) {\n this._params = multisigParams\n this._subSigners = subSigners\n this._addr = multisigAddress(multisigParams)\n this._signer = async (txns: Transaction[], indexesToSign: number[]): Promise<Uint8Array[]> => {\n const txnsToSign = txns.filter((_, index) => indexesToSign.includes(index))\n const signedMsigTxns: SignedTransaction[] = []\n\n for (const txn of txnsToSign) {\n let signedMsigTxn = createMultisigTransaction(txn, this._params)\n\n for (const subSigner of this.subSigners) {\n const stxn = (await subSigner.signer([txn], [0]))[0]\n const sig = decodeSignedTransaction(stxn).sig\n\n if (!sig) {\n throw new Error(\n `Signer for address ${subSigner.addr.toString()} did not produce a valid signature when signing ${txn.txId()} for multisig account ${this._addr.toString()}`,\n )\n }\n\n signedMsigTxn = appendSignRawMultisigSignature(signedMsigTxn, this._params, subSigner.addr, sig)\n }\n\n signedMsigTxns.push(signedMsigTxn)\n }\n\n return signedMsigTxns.map((stxn) => {\n validateSignedTransaction(stxn)\n return encodeSignedTransaction(stxn)\n })\n }\n\n this._lsigSigner = async (lsig, _) => {\n let lmsig = lsig.lmsig ?? this.createMultisigSignature()\n\n for (const addrWithSigner of this.subSigners) {\n const { lsigSigner, addr } = addrWithSigner\n const result = await lsigSigner(lsig, this)\n if (!('sig' in result) || !result.sig) {\n throw new Error(\n `Signer for address ${addr.toString()} did not produce a valid signature when signing logic sig for multisig account ${this._addr.toString()}`,\n )\n }\n\n lmsig = this.applySignature(lmsig, addr.publicKey, result.sig)\n }\n\n return { addr: this.addr, lmsig }\n }\n }\n\n createMultisigTransaction(txn: Transaction): SignedTransaction {\n return createMultisigTransaction(txn, this._params)\n }\n\n createMultisigSignature(): MultisigSignature {\n const pks = toPublicKeys(this._params.addrs)\n const subsignatures: MultisigSubsignature[] = pks.map((pk) => ({\n publicKey: pk,\n sig: undefined,\n }))\n\n return {\n version: this._params.version,\n threshold: this._params.threshold,\n subsigs: subsignatures,\n }\n }\n\n applySignatureToTxn(txn: SignedTransaction, pubkey: Uint8Array, signature: Uint8Array): void {\n if (!txn.msig) {\n const createdTxn = this.createMultisigTransaction(txn.txn)\n txn.msig = createdTxn.msig\n }\n\n txn.msig = applyMultisigSubsignature(txn.msig!, pubkey, signature)\n }\n\n applySignature(msigSignature: MultisigSignature, pubkey: Uint8Array, signature: Uint8Array): MultisigSignature {\n if (msigSignature.version !== this._params.version || msigSignature.threshold !== this._params.threshold) {\n const thisParams = {\n version: this._params.version,\n threshold: this._params.threshold,\n participants: this._params.addrs.map((addr) => addr.toString()),\n }\n\n const givenParams = {\n version: msigSignature.version,\n threshold: msigSignature.threshold,\n participants: msigSignature.subsigs.map((subsig) => new Address(subsig.publicKey).toString()),\n }\n\n throw new Error(\n `Multisig signature parameters do not match expected multisig parameters. Multisig params: ${JSON.stringify(thisParams)}, signature: ${JSON.stringify(givenParams)}`,\n )\n }\n\n return applyMultisigSubsignature(msigSignature, pubkey, signature)\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"multisig.mjs","names":[],"sources":["../../../../packages/transact/src/multisig.ts"],"sourcesContent":["import {\n Address,\n ALGORAND_ADDRESS_BYTE_LENGTH,\n ALGORAND_CHECKSUM_BYTE_LENGTH,\n arrayEqual,\n getAddress,\n PUBLIC_KEY_BYTE_LENGTH,\n SIGNATURE_BYTE_LENGTH,\n} from '@algorandfoundation/algokit-common'\nimport { hash } from '@algorandfoundation/algokit-crypto'\nimport { DelegatedLsigSigner } from './logicsig'\nimport { AddressWithDelegatedLsigSigner, AddressWithTransactionSigner, TransactionSigner } from './signer'\nimport {\n decodeSignedTransaction,\n encodeSignedTransaction,\n MultisigSignature,\n MultisigSubsignature,\n SignedTransaction,\n validateSignedTransaction,\n} from './transactions/signed-transaction'\nimport { Transaction } from './transactions/transaction'\n\nconst toPublicKeys = (addrs: Array<string | Address>): Uint8Array[] => addrs.map((addr) => getAddress(addr).publicKey)\n\n/**\n * Applies a subsignature for a participant to a multisignature signature, replacing any existing signature.\n *\n * This method applies the signature to ALL instances of the given public key (to support weighted multisig).\n * Since ed25519 signatures are deterministic, there's only one valid signature for a given message and public key.\n */\nfunction applyMultisigSubsignature(\n multisigSignature: MultisigSignature,\n participant: Uint8Array,\n signature: Uint8Array,\n): MultisigSignature {\n let found = false\n const newSubsignatures = multisigSignature.subsigs.map((subsig) => {\n if (arrayEqual(subsig.publicKey, participant)) {\n found = true\n return { ...subsig, sig: signature } satisfies MultisigSubsignature\n }\n return subsig\n })\n\n if (!found) {\n throw new Error('Public key not found in multisig signature')\n }\n\n return {\n ...multisigSignature,\n subsigs: newSubsignatures,\n }\n}\n\n// Convert \"MultisigAddr\" UTF-8 to byte array\nconst MULTISIG_PREIMG2ADDR_PREFIX = new Uint8Array([77, 117, 108, 116, 105, 115, 105, 103, 65, 100, 100, 114])\n\nconst INVALID_MSIG_VERSION_ERROR_MSG = 'invalid multisig version'\nconst INVALID_MSIG_THRESHOLD_ERROR_MSG = 'bad multisig threshold'\nconst INVALID_MSIG_PK_ERROR_MSG = 'bad multisig public key - wrong length'\nconst UNEXPECTED_PK_LEN_ERROR_MSG = 'nacl public key length is not 32 bytes'\n\nconst MULTISIG_MERGE_LESSTHANTWO_ERROR_MSG = 'Not enough multisig transactions to merge. Need at least two'\nconst MULTISIG_MERGE_MISMATCH_ERROR_MSG = 'Cannot merge txs. txIDs differ'\nconst MULTISIG_MERGE_MISMATCH_AUTH_ADDR_MSG = 'Cannot merge txs. Auth addrs differ'\nconst MULTISIG_MERGE_WRONG_PREIMAGE_ERROR_MSG = 'Cannot merge txs. Multisig preimages differ'\nconst MULTISIG_MERGE_SIG_MISMATCH_ERROR_MSG = 'Cannot merge txs. subsigs are mismatched.'\nconst MULTISIG_SIGNATURE_LENGTH_ERROR_MSG = 'Cannot add multisig signature. Signature is not of the correct length.'\nconst MULTISIG_KEY_NOT_EXIST_ERROR_MSG = 'Key does not exist'\n\n/**\n * creates a raw, multisig transaction blob without any signatures.\n * @param txn - the actual transaction.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param pks - ordered list of public keys in this multisig\n * @returns encoded multisig blob\n */\nfunction createMultisigTransaction(txn: Transaction, { version, threshold, addrs }: MultisigMetadata) {\n // construct the appendable multisigned transaction format\n const pks = toPublicKeys(addrs)\n const subsignatures = pks.map(\n (pk) =>\n ({\n publicKey: pk,\n sig: undefined,\n }) satisfies MultisigSubsignature,\n )\n\n const msig: MultisigSignature = {\n version,\n threshold,\n subsigs: subsignatures,\n }\n\n // if the address of this multisig is different from the transaction sender,\n // we need to add the auth-addr field\n const msigAddr = addressFromMultisigPreImg({\n version,\n threshold,\n publicKeys: pks,\n })\n let authAddress: Address | undefined\n if (!msigAddr.equals(txn.sender)) {\n authAddress = msigAddr\n }\n\n const signedTxn: SignedTransaction = {\n txn: txn,\n msig: msig,\n authAddress,\n }\n\n return signedTxn\n}\n\ninterface MultisigOptions {\n rawSig: Uint8Array\n myPk: Uint8Array\n}\n\ninterface MultisigMetadataWithPublicKeys extends Omit<MultisigMetadata, 'addrs'> {\n publicKeys: Uint8Array[]\n}\n\n/**\n * creates a multisig transaction blob with an included signature.\n * @param txn - the actual transaction to sign.\n * @param rawSig - a Uint8Array raw signature of that transaction\n * @param myPk - a public key that corresponds with rawSig\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param pks - ordered list of public keys in this multisig\n * @returns encoded multisig blob\n */\nfunction createMultisigTransactionWithSignature(\n txn: Transaction,\n { rawSig, myPk }: MultisigOptions,\n { version, threshold, publicKeys }: MultisigMetadataWithPublicKeys,\n): SignedTransaction {\n // Create an empty encoded multisig transaction\n const signedTxn = createMultisigTransaction(txn, {\n version,\n threshold,\n addrs: publicKeys.map((pk) => new Address(pk)),\n })\n\n let keyExist = false\n\n // append the multisig signature to the corresponding public key in the multisig blob\n const updatedSubsigs = signedTxn.msig!.subsigs.map((subsig) => {\n if (arrayEqual(subsig.publicKey, myPk)) {\n keyExist = true\n return { ...subsig, sig: rawSig }\n }\n return subsig\n })\n\n if (!keyExist) {\n throw new Error(MULTISIG_KEY_NOT_EXIST_ERROR_MSG)\n }\n\n const updatedSignedTxn: SignedTransaction = {\n ...signedTxn,\n msig: {\n ...signedTxn.msig!,\n subsigs: updatedSubsigs,\n },\n }\n\n return updatedSignedTxn\n}\n\n/**\n * takes a list of multisig transaction blobs, and merges them.\n * @param multisigTxnBlobs - a list of blobs representing encoded multisig txns\n * @returns typed array msg-pack encoded multisig txn\n */\nfunction mergeMultisigTransactions(multisigTxnBlobs: SignedTransaction[]): SignedTransaction {\n if (multisigTxnBlobs.length < 2) {\n throw new Error(MULTISIG_MERGE_LESSTHANTWO_ERROR_MSG)\n }\n const refSigTx = multisigTxnBlobs[0]\n if (!refSigTx.msig) {\n throw new Error('Invalid multisig transaction, multisig structure missing at index 0')\n }\n const refTxID = refSigTx.txn.txId()\n const refAuthAddr = refSigTx.authAddress\n const refPreImage = {\n version: refSigTx.msig.version,\n threshold: refSigTx.msig.threshold,\n publicKeys: refSigTx.msig.subsigs.map((subsig) => subsig.publicKey),\n }\n const refMsigAddr = addressFromMultisigPreImg(refPreImage)\n\n const newSubsigs: MultisigSubsignature[] = refSigTx.msig.subsigs.map((sig) => ({ ...sig }))\n for (let i = 1; i < multisigTxnBlobs.length; i++) {\n const unisig = multisigTxnBlobs[i]\n if (!unisig.msig) {\n throw new Error(`Invalid multisig transaction, multisig structure missing at index ${i}`)\n }\n\n if (unisig.txn.txId() !== refTxID) {\n throw new Error(MULTISIG_MERGE_MISMATCH_ERROR_MSG)\n }\n\n const authAddr = unisig.authAddress\n if (refAuthAddr !== authAddr) {\n throw new Error(MULTISIG_MERGE_MISMATCH_AUTH_ADDR_MSG)\n }\n\n // check multisig has same preimage as reference\n if (unisig.msig.subsigs.length !== refSigTx.msig.subsigs.length) {\n throw new Error(MULTISIG_MERGE_WRONG_PREIMAGE_ERROR_MSG)\n }\n const preimg: MultisigMetadataWithPublicKeys = {\n version: unisig.msig.version,\n threshold: unisig.msig.threshold,\n publicKeys: unisig.msig.subsigs.map((subsig) => subsig.publicKey),\n }\n const msgigAddr = addressFromMultisigPreImg(preimg)\n if (refMsigAddr.toString() !== msgigAddr.toString()) {\n throw new Error(MULTISIG_MERGE_WRONG_PREIMAGE_ERROR_MSG)\n }\n\n // now, we can merge\n unisig.msig.subsigs.forEach((uniSubsig, index) => {\n if (!uniSubsig.sig) return\n const current = newSubsigs[index]\n if (current.sig && !arrayEqual(uniSubsig.sig, current.sig)) {\n // mismatch\n throw new Error(MULTISIG_MERGE_SIG_MISMATCH_ERROR_MSG)\n }\n current.sig = uniSubsig.sig\n })\n }\n\n const msig: MultisigSignature = {\n version: refSigTx.msig.version,\n threshold: refSigTx.msig.threshold,\n subsigs: newSubsigs,\n }\n\n const signedTxn: SignedTransaction = {\n txn: refSigTx.txn,\n msig: msig,\n authAddress: refAuthAddr,\n }\n\n return signedTxn\n}\n\n/**\n * Partially signs this transaction with an external raw multisig signature and returns\n * a partially-signed multisig transaction, encoded with msgpack as a typed array.\n * @param transaction - The transaction to sign\n * @param metadata - multisig metadata\n * @param signerAddr - address of the signer\n * @param signature - raw multisig signature\n * @returns an encoded, partially signed multisig transaction.\n */\nfunction partialSignWithMultisigSignature(\n transaction: Transaction,\n metadata: MultisigMetadataWithPublicKeys,\n signerAddr: string | Address,\n signature: Uint8Array,\n) {\n if (signature.length != SIGNATURE_BYTE_LENGTH) {\n throw new Error(MULTISIG_SIGNATURE_LENGTH_ERROR_MSG)\n }\n const signerAddressObj = typeof signerAddr === 'string' ? Address.fromString(signerAddr) : signerAddr\n return createMultisigTransactionWithSignature(\n transaction,\n {\n rawSig: signature,\n myPk: signerAddressObj.publicKey,\n },\n metadata,\n )\n}\n\n/**\n * Takes a multisig transaction blob, and appends a given raw signature to it.\n * This makes it possible to compile a multisig signature using only raw signatures from external methods.\n * @param multisigTxnBlob - an encoded multisig txn. Supports non-payment txn types.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param addrs - a list of Algorand addresses representing possible signers for this multisig. Order is important.\n * @param signerAddr - address of the signer\n * @param signature - raw multisig signature\n * @returns object containing txID, and blob representing encoded multisig txn\n */\nfunction appendSignRawMultisigSignature(\n multisigTxn: SignedTransaction,\n { version, threshold, addrs }: MultisigMetadata,\n signerAddr: string | Address,\n signature: Uint8Array,\n): SignedTransaction {\n const publicKeys = toPublicKeys(addrs)\n // obtain underlying txn, sign it, and merge it\n const partialSigned = partialSignWithMultisigSignature(multisigTxn.txn, { version, threshold, publicKeys }, signerAddr, signature)\n return mergeMultisigTransactions([multisigTxn, partialSigned])\n}\n\n/**\n * Takes multisig parameters and returns a 32 byte typed array public key,\n * representing an address that identifies the \"exact group, version, and public keys\" that are required for signing.\n * Hash(\"MultisigAddr\" || version uint8 || threshold uint8 || PK1 || PK2 || ...)\n * Encoding this output yields a human readable address.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param pks - array of typed array public keys\n */\nfunction addressFromMultisigPreImg({\n version,\n threshold,\n publicKeys,\n}: Omit<MultisigMetadata, 'addrs'> & {\n publicKeys: Uint8Array[]\n}): Address {\n if (version > 255 || version < 0) {\n // ^ a tad redundant, but in case in the future version != 1, still check for uint8\n throw new Error(`${INVALID_MSIG_VERSION_ERROR_MSG}: ${version}`)\n }\n if (threshold === 0 || publicKeys.length === 0 || threshold > publicKeys.length || threshold > 255) {\n throw new Error(INVALID_MSIG_THRESHOLD_ERROR_MSG)\n }\n const pkLen = ALGORAND_ADDRESS_BYTE_LENGTH - ALGORAND_CHECKSUM_BYTE_LENGTH\n if (pkLen !== PUBLIC_KEY_BYTE_LENGTH) {\n throw new Error(UNEXPECTED_PK_LEN_ERROR_MSG)\n }\n const merged = new Uint8Array(MULTISIG_PREIMG2ADDR_PREFIX.length + 2 + pkLen * publicKeys.length)\n merged.set(MULTISIG_PREIMG2ADDR_PREFIX, 0)\n merged.set([version], MULTISIG_PREIMG2ADDR_PREFIX.length)\n merged.set([threshold], MULTISIG_PREIMG2ADDR_PREFIX.length + 1)\n for (let i = 0; i < publicKeys.length; i++) {\n if (publicKeys[i].length !== pkLen) {\n throw new Error(INVALID_MSIG_PK_ERROR_MSG)\n }\n merged.set(publicKeys[i], MULTISIG_PREIMG2ADDR_PREFIX.length + 2 + i * pkLen)\n }\n return new Address(Uint8Array.from(hash(merged)))\n}\n\n/**\n * Takes multisig parameters and returns a human readable Algorand address.\n * This is equivalent to fromMultisigPreImg, but interfaces with encoded addresses.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param addrs - array of encoded addresses\n */\nfunction addressFromMultisigPreImgAddrs({ version, threshold, addrs }: MultisigMetadata): Address {\n return addressFromMultisigPreImg({\n version,\n threshold,\n publicKeys: toPublicKeys(addrs),\n })\n}\n\n/**\n * Takes multisig metadata (preimage) and returns the corresponding human readable Algorand address.\n * @param version - multisig version\n * @param threshold - multisig threshold\n * @param addrs - list of Algorand addresses\n */\nconst multisigAddress: typeof addressFromMultisigPreImgAddrs = addressFromMultisigPreImgAddrs\n\nexport interface MultisigMetadata {\n /**\n * Multisig version\n */\n version: number\n\n /**\n * Multisig threshold value. Authorization requires a subset of signatures,\n * equal to or greater than the threshold value.\n */\n threshold: number\n\n /**\n * A list of Algorand addresses representing possible signers for this multisig. Order is important.\n */\n addrs: Array<Address>\n}\n\n/** Account wrapper that supports partial or full multisig signing. */\nexport class MultisigAccount implements AddressWithTransactionSigner, AddressWithDelegatedLsigSigner {\n _params: MultisigMetadata\n _subSigners: (AddressWithTransactionSigner & AddressWithDelegatedLsigSigner)[]\n _addr: Address\n _signer: TransactionSigner\n _lsigSigner: DelegatedLsigSigner\n\n /** The parameters for the multisig account */\n get params(): Readonly<MultisigMetadata> {\n return this._params\n }\n\n /** The list of accounts that are present to sign transactions or lsigs */\n get subSigners() {\n return this._subSigners\n }\n\n /** The address of the multisig account */\n get addr(): Readonly<Address> {\n return this._addr\n }\n\n /** The transaction signer for the multisig account */\n get signer(): TransactionSigner {\n return this._signer\n }\n\n get lsigSigner(): DelegatedLsigSigner {\n return this._lsigSigner\n }\n\n static fromSignature(signature: MultisigSignature): MultisigAccount {\n const params: MultisigMetadata = {\n version: signature.version,\n threshold: signature.threshold,\n addrs: signature.subsigs.map((subsig) => new Address(subsig.publicKey)),\n }\n\n return new MultisigAccount(params, [])\n }\n\n constructor(multisigParams: MultisigMetadata, subSigners: (AddressWithTransactionSigner & AddressWithDelegatedLsigSigner)[]) {\n this._params = multisigParams\n this._subSigners = subSigners\n this._addr = multisigAddress(multisigParams)\n this._signer = async (txns: Transaction[], indexesToSign: number[]): Promise<Uint8Array[]> => {\n const txnsToSign = txns.filter((_, index) => indexesToSign.includes(index))\n const signedMsigTxns: SignedTransaction[] = []\n\n for (const txn of txnsToSign) {\n let signedMsigTxn = createMultisigTransaction(txn, this._params)\n\n for (const subSigner of this.subSigners) {\n const stxn = (await subSigner.signer([txn], [0]))[0]\n const sig = decodeSignedTransaction(stxn).sig\n\n if (!sig) {\n throw new Error(\n `Signer for address ${subSigner.addr.toString()} did not produce a valid signature when signing ${txn.txId()} for multisig account ${this._addr.toString()}`,\n )\n }\n\n signedMsigTxn = appendSignRawMultisigSignature(signedMsigTxn, this._params, subSigner.addr, sig)\n }\n\n signedMsigTxns.push(signedMsigTxn)\n }\n\n return signedMsigTxns.map((stxn) => {\n validateSignedTransaction(stxn)\n return encodeSignedTransaction(stxn)\n })\n }\n\n this._lsigSigner = async (lsig, _) => {\n let lmsig = lsig.lmsig ?? this.createMultisigSignature()\n\n for (const addrWithSigner of this.subSigners) {\n const { lsigSigner, addr } = addrWithSigner\n const result = await lsigSigner(lsig, this)\n if (!('sig' in result) || !result.sig) {\n throw new Error(\n `Signer for address ${addr.toString()} did not produce a valid signature when signing logic sig for multisig account ${this._addr.toString()}`,\n )\n }\n\n lmsig = this.applySignature(lmsig, addr.publicKey, result.sig)\n }\n\n return { addr: this.addr, lmsig }\n }\n }\n\n createMultisigTransaction(txn: Transaction): SignedTransaction {\n return createMultisigTransaction(txn, this._params)\n }\n\n createMultisigSignature(): MultisigSignature {\n const pks = toPublicKeys(this._params.addrs)\n const subsignatures: MultisigSubsignature[] = pks.map((pk) => ({\n publicKey: pk,\n sig: undefined,\n }))\n\n return {\n version: this._params.version,\n threshold: this._params.threshold,\n subsigs: subsignatures,\n }\n }\n\n applySignatureToTxn(txn: SignedTransaction, pubkey: Uint8Array, signature: Uint8Array): void {\n if (!txn.msig) {\n const createdTxn = this.createMultisigTransaction(txn.txn)\n txn.msig = createdTxn.msig\n }\n\n txn.msig = applyMultisigSubsignature(txn.msig!, pubkey, signature)\n }\n\n applySignature(msigSignature: MultisigSignature, pubkey: Uint8Array, signature: Uint8Array): MultisigSignature {\n if (msigSignature.version !== this._params.version || msigSignature.threshold !== this._params.threshold) {\n const thisParams = {\n version: this._params.version,\n threshold: this._params.threshold,\n participants: this._params.addrs.map((addr) => addr.toString()),\n }\n\n const givenParams = {\n version: msigSignature.version,\n threshold: msigSignature.threshold,\n participants: msigSignature.subsigs.map((subsig) => new Address(subsig.publicKey).toString()),\n }\n\n throw new Error(\n `Multisig signature parameters do not match expected multisig parameters. Multisig params: ${JSON.stringify(thisParams)}, signature: ${JSON.stringify(givenParams)}`,\n )\n }\n\n return applyMultisigSubsignature(msigSignature, pubkey, signature)\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
const require_array = require(
|
|
2
|
-
const require_address = require(
|
|
3
|
-
const require_transaction = require(
|
|
4
|
-
const require_signed_transaction = require(
|
|
5
|
-
|
|
1
|
+
const require_array = require("../../common/src/array.js");
|
|
2
|
+
const require_address = require("../../common/src/address.js");
|
|
3
|
+
const require_transaction = require("./transactions/transaction.js");
|
|
4
|
+
const require_signed_transaction = require("./transactions/signed-transaction.js");
|
|
6
5
|
//#region packages/transact/src/signer.ts
|
|
7
6
|
const SIGN_BYTES_PREFIX = Uint8Array.from([77, 88]);
|
|
8
7
|
/**
|
|
@@ -85,9 +84,9 @@ const bytesForSigning = {
|
|
|
85
84
|
return lsig.programDataToSign(data);
|
|
86
85
|
}
|
|
87
86
|
};
|
|
88
|
-
|
|
89
87
|
//#endregion
|
|
90
88
|
exports.bytesForSigning = bytesForSigning;
|
|
91
89
|
exports.generateAddressWithSigners = generateAddressWithSigners;
|
|
92
90
|
exports.makeEmptyTransactionSigner = makeEmptyTransactionSigner;
|
|
91
|
+
|
|
93
92
|
//# sourceMappingURL=signer.js.map
|