@algorandfoundation/algokit-utils 10.0.0-beta.2 → 10.0.0-beta.4
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/account-manager.d.ts +72 -1
- package/account-manager.js +63 -1
- package/account-manager.js.map +1 -1
- package/account-manager.mjs +63 -1
- package/account-manager.mjs.map +1 -1
- package/algo25/index.d.ts +1 -1
- package/algo25/index.js +1 -1
- package/algo25/index.mjs +1 -1
- package/algorand-client-transaction-creator.js.map +1 -1
- package/algorand-client-transaction-creator.mjs.map +1 -1
- package/algorand-client-transaction-sender.js +0 -1
- package/algorand-client-transaction-sender.js.map +1 -1
- package/algorand-client-transaction-sender.mjs.map +1 -1
- package/algorand-client.js +5 -1
- package/algorand-client.js.map +1 -1
- package/algorand-client.mjs +5 -1
- package/algorand-client.mjs.map +1 -1
- package/amount.js.map +1 -1
- package/amount.mjs.map +1 -1
- package/app-client.js +174 -17
- package/app-client.js.map +1 -1
- package/app-client.mjs +174 -16
- package/app-client.mjs.map +1 -1
- package/app-deployer.js +8 -8
- package/app-deployer.js.map +1 -1
- package/app-deployer.mjs +9 -9
- package/app-deployer.mjs.map +1 -1
- package/app-factory.d.ts +2 -2
- package/app-factory.js +49 -9
- package/app-factory.js.map +1 -1
- package/app-factory.mjs +49 -9
- package/app-factory.mjs.map +1 -1
- package/app-manager.js.map +1 -1
- package/app-manager.mjs.map +1 -1
- package/app-spec.js.map +1 -1
- package/app-spec.mjs.map +1 -1
- package/app.js.map +1 -1
- package/app.mjs.map +1 -1
- package/asset-manager.js.map +1 -1
- package/asset-manager.mjs.map +1 -1
- package/async-event-emitter.js.map +1 -1
- package/async-event-emitter.mjs.map +1 -1
- package/client-manager.js.map +1 -1
- package/client-manager.mjs.map +1 -1
- package/composer.js +17 -18
- package/composer.js.map +1 -1
- package/composer.mjs +17 -17
- package/composer.mjs.map +1 -1
- package/config.js.map +1 -1
- package/config.mjs.map +1 -1
- package/crypto/index.d.ts +3 -3
- package/crypto/index.js +5 -2
- package/crypto/index.mjs +3 -3
- package/dispenser-client.js +4 -8
- package/dispenser-client.js.map +1 -1
- package/dispenser-client.mjs +4 -8
- package/dispenser-client.mjs.map +1 -1
- package/indexer-client/indexer-lookup.js.map +1 -1
- package/indexer-client/indexer-lookup.mjs.map +1 -1
- package/indexer.js.map +1 -1
- package/indexer.mjs.map +1 -1
- package/kmd-account-manager.js.map +1 -1
- package/kmd-account-manager.mjs.map +1 -1
- package/lifecycle-events.js.map +1 -1
- package/lifecycle-events.mjs.map +1 -1
- package/logging.js.map +1 -1
- package/logging.mjs.map +1 -1
- package/logic-error.js.map +1 -1
- package/logic-error.mjs.map +1 -1
- package/network-client.js.map +1 -1
- package/network-client.mjs.map +1 -1
- package/network-manager.js.map +1 -1
- package/network-manager.mjs.map +1 -1
- package/package.json +3 -2
- package/packages/abi/src/abi-method.js +6 -6
- package/packages/abi/src/abi-method.js.map +1 -1
- package/packages/abi/src/abi-method.mjs +6 -5
- package/packages/abi/src/abi-method.mjs.map +1 -1
- package/packages/abi/src/abi-type.js +9 -0
- package/packages/abi/src/abi-type.js.map +1 -1
- package/packages/abi/src/abi-type.mjs +9 -0
- package/packages/abi/src/abi-type.mjs.map +1 -1
- package/packages/abi/src/arc56-contract.js.map +1 -1
- package/packages/abi/src/arc56-contract.mjs.map +1 -1
- package/packages/abi/src/bigint.js.map +1 -1
- package/packages/abi/src/bigint.mjs.map +1 -1
- package/packages/abi/src/utils.js.map +1 -1
- package/packages/abi/src/utils.mjs.map +1 -1
- package/packages/algod_client/src/apis/api-service.js +3 -1
- package/packages/algod_client/src/apis/api-service.js.map +1 -1
- package/packages/algod_client/src/apis/api-service.mjs +3 -1
- package/packages/algod_client/src/apis/api-service.mjs.map +1 -1
- package/packages/algod_client/src/client.js.map +1 -1
- package/packages/algod_client/src/client.mjs.map +1 -1
- package/packages/algod_client/src/core/api-error.js.map +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 -0
- package/packages/algod_client/src/core/base-http-request.js.map +1 -1
- package/packages/algod_client/src/core/base-http-request.mjs +1 -0
- package/packages/algod_client/src/core/base-http-request.mjs.map +1 -1
- package/packages/algod_client/src/core/fetch-http-request.js.map +1 -1
- package/packages/algod_client/src/core/fetch-http-request.mjs.map +1 -1
- package/packages/algod_client/src/core/model-runtime.js.map +1 -1
- package/packages/algod_client/src/core/model-runtime.mjs.map +1 -1
- package/packages/algod_client/src/core/request.js.map +1 -1
- package/packages/algod_client/src/core/request.mjs.map +1 -1
- package/packages/algod_client/src/models/account-application-response.js.map +1 -1
- package/packages/algod_client/src/models/account-application-response.mjs.map +1 -1
- package/packages/algod_client/src/models/account-asset-response.js.map +1 -1
- package/packages/algod_client/src/models/account-asset-response.mjs.map +1 -1
- package/packages/algod_client/src/models/account-participation.js.map +1 -1
- package/packages/algod_client/src/models/account-participation.mjs.map +1 -1
- package/packages/algod_client/src/models/account-state-delta.js.map +1 -1
- package/packages/algod_client/src/models/account-state-delta.mjs.map +1 -1
- package/packages/algod_client/src/models/account.js.map +1 -1
- package/packages/algod_client/src/models/account.mjs.map +1 -1
- package/packages/algod_client/src/models/application-initial-states.js.map +1 -1
- package/packages/algod_client/src/models/application-initial-states.mjs.map +1 -1
- package/packages/algod_client/src/models/application-kv-storage.js.map +1 -1
- package/packages/algod_client/src/models/application-kv-storage.mjs.map +1 -1
- package/packages/algod_client/src/models/application-local-state.js.map +1 -1
- package/packages/algod_client/src/models/application-local-state.mjs.map +1 -1
- package/packages/algod_client/src/models/application-params.js.map +1 -1
- package/packages/algod_client/src/models/application-params.mjs.map +1 -1
- package/packages/algod_client/src/models/application-state-operation.js.map +1 -1
- package/packages/algod_client/src/models/application-state-operation.mjs.map +1 -1
- package/packages/algod_client/src/models/application-state-schema.js.map +1 -1
- package/packages/algod_client/src/models/application-state-schema.mjs.map +1 -1
- package/packages/algod_client/src/models/application.js.map +1 -1
- package/packages/algod_client/src/models/application.mjs.map +1 -1
- package/packages/algod_client/src/models/asset-holding.js.map +1 -1
- package/packages/algod_client/src/models/asset-holding.mjs.map +1 -1
- package/packages/algod_client/src/models/asset-params.js.map +1 -1
- package/packages/algod_client/src/models/asset-params.mjs.map +1 -1
- package/packages/algod_client/src/models/asset.js.map +1 -1
- package/packages/algod_client/src/models/asset.mjs.map +1 -1
- package/packages/algod_client/src/models/avm-key-value.js.map +1 -1
- package/packages/algod_client/src/models/avm-key-value.mjs.map +1 -1
- package/packages/algod_client/src/models/avm-value.js.map +1 -1
- package/packages/algod_client/src/models/avm-value.mjs.map +1 -1
- package/packages/algod_client/src/models/block-hash-response.js.map +1 -1
- package/packages/algod_client/src/models/block-hash-response.mjs.map +1 -1
- package/packages/algod_client/src/models/block-response.js.map +1 -1
- package/packages/algod_client/src/models/block-response.mjs.map +1 -1
- package/packages/algod_client/src/models/block-txids-response.js.map +1 -1
- package/packages/algod_client/src/models/block-txids-response.mjs.map +1 -1
- package/packages/algod_client/src/models/block.js.map +1 -1
- package/packages/algod_client/src/models/block.mjs.map +1 -1
- package/packages/algod_client/src/models/box-descriptor.js.map +1 -1
- package/packages/algod_client/src/models/box-descriptor.mjs.map +1 -1
- package/packages/algod_client/src/models/box.js.map +1 -1
- package/packages/algod_client/src/models/box.mjs.map +1 -1
- package/packages/algod_client/src/models/boxes-response.js.map +1 -1
- package/packages/algod_client/src/models/boxes-response.mjs.map +1 -1
- package/packages/algod_client/src/models/build-version.js.map +1 -1
- package/packages/algod_client/src/models/build-version.mjs.map +1 -1
- package/packages/algod_client/src/models/compile-response.js.map +1 -1
- package/packages/algod_client/src/models/compile-response.mjs.map +1 -1
- package/packages/algod_client/src/models/disassemble-response.js.map +1 -1
- package/packages/algod_client/src/models/disassemble-response.mjs.map +1 -1
- 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.map +1 -1
- package/packages/algod_client/src/models/eval-delta.js.map +1 -1
- package/packages/algod_client/src/models/eval-delta.mjs.map +1 -1
- package/packages/algod_client/src/models/genesis-allocation.js.map +1 -1
- package/packages/algod_client/src/models/genesis-allocation.mjs.map +1 -1
- package/packages/algod_client/src/models/genesis.js.map +1 -1
- package/packages/algod_client/src/models/genesis.mjs.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/packages/algod_client/src/models/ledger-state-delta.js.map +1 -1
- package/packages/algod_client/src/models/ledger-state-delta.mjs.map +1 -1
- 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.map +1 -1
- package/packages/algod_client/src/models/node-status-response.js.map +1 -1
- package/packages/algod_client/src/models/node-status-response.mjs.map +1 -1
- package/packages/algod_client/src/models/pending-transaction-response.js.map +1 -1
- package/packages/algod_client/src/models/pending-transaction-response.mjs.map +1 -1
- package/packages/algod_client/src/models/pending-transactions-response.js.map +1 -1
- package/packages/algod_client/src/models/pending-transactions-response.mjs.map +1 -1
- package/packages/algod_client/src/models/post-transactions-response.js.map +1 -1
- package/packages/algod_client/src/models/post-transactions-response.mjs.map +1 -1
- package/packages/algod_client/src/models/scratch-change.js.map +1 -1
- package/packages/algod_client/src/models/scratch-change.mjs.map +1 -1
- package/packages/algod_client/src/models/simulate-initial-states.js.map +1 -1
- package/packages/algod_client/src/models/simulate-initial-states.mjs.map +1 -1
- 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.map +1 -1
- package/packages/algod_client/src/models/simulate-request.js.map +1 -1
- package/packages/algod_client/src/models/simulate-request.mjs.map +1 -1
- package/packages/algod_client/src/models/simulate-response.js.map +1 -1
- package/packages/algod_client/src/models/simulate-response.mjs.map +1 -1
- package/packages/algod_client/src/models/simulate-trace-config.js.map +1 -1
- package/packages/algod_client/src/models/simulate-trace-config.mjs.map +1 -1
- 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.map +1 -1
- package/packages/algod_client/src/models/simulate-transaction-result.js.map +1 -1
- package/packages/algod_client/src/models/simulate-transaction-result.mjs.map +1 -1
- 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.map +1 -1
- package/packages/algod_client/src/models/simulation-eval-overrides.js.map +1 -1
- package/packages/algod_client/src/models/simulation-eval-overrides.mjs.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/packages/algod_client/src/models/source-map.js.map +1 -1
- package/packages/algod_client/src/models/source-map.mjs.map +1 -1
- package/packages/algod_client/src/models/state-delta.js.map +1 -1
- package/packages/algod_client/src/models/state-delta.mjs.map +1 -1
- package/packages/algod_client/src/models/state-proof-message.js.map +1 -1
- package/packages/algod_client/src/models/state-proof-message.mjs.map +1 -1
- package/packages/algod_client/src/models/state-proof.js.map +1 -1
- package/packages/algod_client/src/models/state-proof.mjs.map +1 -1
- package/packages/algod_client/src/models/supply-response.js.map +1 -1
- package/packages/algod_client/src/models/supply-response.mjs.map +1 -1
- 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.map +1 -1
- package/packages/algod_client/src/models/teal-key-value.js.map +1 -1
- package/packages/algod_client/src/models/teal-key-value.mjs.map +1 -1
- package/packages/algod_client/src/models/teal-value.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/packages/algod_client/src/models/transaction-parameters-response.mjs.map +1 -1
- package/packages/algod_client/src/models/transaction-proof.js.map +1 -1
- package/packages/algod_client/src/models/transaction-proof.mjs.map +1 -1
- package/packages/algod_client/src/models/version.js.map +1 -1
- package/packages/algod_client/src/models/version.mjs.map +1 -1
- package/packages/common/src/address.js.map +1 -1
- package/packages/common/src/address.mjs.map +1 -1
- package/packages/common/src/array.js.map +1 -1
- package/packages/common/src/array.mjs.map +1 -1
- package/packages/common/src/codecs/codec.js.map +1 -1
- package/packages/common/src/codecs/codec.mjs.map +1 -1
- package/packages/common/src/codecs/composite/array.js +1 -0
- package/packages/common/src/codecs/composite/array.js.map +1 -1
- package/packages/common/src/codecs/composite/array.mjs +1 -0
- package/packages/common/src/codecs/composite/array.mjs.map +1 -1
- package/packages/common/src/codecs/composite/map.js +2 -0
- package/packages/common/src/codecs/composite/map.js.map +1 -1
- package/packages/common/src/codecs/composite/map.mjs +2 -0
- package/packages/common/src/codecs/composite/map.mjs.map +1 -1
- package/packages/common/src/codecs/composite/record.js +1 -1
- package/packages/common/src/codecs/composite/record.js.map +1 -1
- package/packages/common/src/codecs/composite/record.mjs +1 -0
- package/packages/common/src/codecs/composite/record.mjs.map +1 -1
- package/packages/common/src/codecs/models/array-model.js +1 -0
- package/packages/common/src/codecs/models/array-model.js.map +1 -1
- package/packages/common/src/codecs/models/array-model.mjs +1 -0
- package/packages/common/src/codecs/models/array-model.mjs.map +1 -1
- package/packages/common/src/codecs/models/object-model.js +3 -1
- package/packages/common/src/codecs/models/object-model.js.map +1 -1
- package/packages/common/src/codecs/models/object-model.mjs +3 -1
- package/packages/common/src/codecs/models/object-model.mjs.map +1 -1
- package/packages/common/src/codecs/models/primitive-model.js +1 -0
- package/packages/common/src/codecs/models/primitive-model.js.map +1 -1
- package/packages/common/src/codecs/models/primitive-model.mjs +1 -0
- package/packages/common/src/codecs/models/primitive-model.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/address.js +0 -1
- package/packages/common/src/codecs/primitives/address.js.map +1 -1
- package/packages/common/src/codecs/primitives/address.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/bigint.js.map +1 -1
- package/packages/common/src/codecs/primitives/bigint.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/boolean.js.map +1 -1
- package/packages/common/src/codecs/primitives/boolean.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/bytes-base64.js +0 -1
- package/packages/common/src/codecs/primitives/bytes-base64.js.map +1 -1
- package/packages/common/src/codecs/primitives/bytes-base64.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/bytes.js +0 -1
- package/packages/common/src/codecs/primitives/bytes.js.map +1 -1
- package/packages/common/src/codecs/primitives/bytes.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/fixed-bytes.js +1 -1
- package/packages/common/src/codecs/primitives/fixed-bytes.js.map +1 -1
- package/packages/common/src/codecs/primitives/fixed-bytes.mjs +1 -0
- package/packages/common/src/codecs/primitives/fixed-bytes.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/number.js.map +1 -1
- package/packages/common/src/codecs/primitives/number.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/string.js.map +1 -1
- package/packages/common/src/codecs/primitives/string.mjs.map +1 -1
- package/packages/common/src/codecs/primitives/unknown.js.map +1 -1
- package/packages/common/src/codecs/primitives/unknown.mjs.map +1 -1
- package/packages/common/src/codecs/wire.js +0 -1
- package/packages/common/src/codecs/wire.js.map +1 -1
- package/packages/common/src/codecs/wire.mjs.map +1 -1
- package/packages/common/src/constants.js.map +1 -1
- package/packages/common/src/constants.mjs.map +1 -1
- package/packages/common/src/encoding.js +0 -1
- package/packages/common/src/encoding.js.map +1 -1
- package/packages/common/src/encoding.mjs.map +1 -1
- package/packages/common/src/json.js.map +1 -1
- package/packages/common/src/json.mjs.map +1 -1
- package/packages/common/src/msgpack.js +0 -1
- package/packages/common/src/msgpack.js.map +1 -1
- package/packages/common/src/msgpack.mjs.map +1 -1
- package/packages/common/src/sourcemap.js.map +1 -1
- package/packages/common/src/sourcemap.mjs.map +1 -1
- package/packages/{algo25/src → crypto/src/algo25}/english.js +1 -1
- package/packages/crypto/src/algo25/english.js.map +1 -0
- package/packages/{algo25/src → crypto/src/algo25}/english.mjs +1 -1
- package/packages/crypto/src/algo25/english.mjs.map +1 -0
- package/packages/{algo25/src → crypto/src/algo25}/index.d.ts +1 -1
- package/packages/{algo25/src → crypto/src/algo25}/index.js +2 -2
- package/packages/crypto/src/algo25/index.js.map +1 -0
- package/packages/{algo25/src → crypto/src/algo25}/index.mjs +2 -2
- package/packages/crypto/src/algo25/index.mjs.map +1 -0
- package/packages/crypto/src/ed25519.d.ts +13 -3
- package/packages/crypto/src/ed25519.js.map +1 -1
- package/packages/crypto/src/ed25519.mjs.map +1 -1
- package/packages/crypto/src/hash.js +0 -1
- package/packages/crypto/src/hash.js.map +1 -1
- package/packages/crypto/src/hash.mjs.map +1 -1
- package/packages/crypto/src/hd.d.ts +17 -4
- package/packages/crypto/src/hd.js +13 -1
- package/packages/crypto/src/hd.js.map +1 -1
- package/packages/crypto/src/hd.mjs +11 -1
- package/packages/crypto/src/hd.mjs.map +1 -1
- package/packages/crypto/src/index.d.ts +12 -6
- package/packages/crypto/src/index.js +27 -18
- package/packages/crypto/src/index.js.map +1 -1
- package/packages/crypto/src/index.mjs +27 -18
- package/packages/crypto/src/index.mjs.map +1 -1
- package/packages/indexer_client/src/apis/api-service.js +1 -0
- package/packages/indexer_client/src/apis/api-service.js.map +1 -1
- package/packages/indexer_client/src/apis/api-service.mjs +1 -0
- package/packages/indexer_client/src/apis/api-service.mjs.map +1 -1
- package/packages/indexer_client/src/client.js.map +1 -1
- package/packages/indexer_client/src/client.mjs.map +1 -1
- package/packages/indexer_client/src/core/api-error.js.map +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 -0
- package/packages/indexer_client/src/core/base-http-request.js.map +1 -1
- package/packages/indexer_client/src/core/base-http-request.mjs +1 -0
- package/packages/indexer_client/src/core/base-http-request.mjs.map +1 -1
- package/packages/indexer_client/src/core/fetch-http-request.js.map +1 -1
- package/packages/indexer_client/src/core/fetch-http-request.mjs.map +1 -1
- package/packages/indexer_client/src/core/model-runtime.js.map +1 -1
- package/packages/indexer_client/src/core/model-runtime.mjs.map +1 -1
- package/packages/indexer_client/src/core/request.js.map +1 -1
- package/packages/indexer_client/src/core/request.mjs.map +1 -1
- package/packages/indexer_client/src/models/account-participation.js.map +1 -1
- package/packages/indexer_client/src/models/account-participation.mjs.map +1 -1
- package/packages/indexer_client/src/models/account-response.js.map +1 -1
- package/packages/indexer_client/src/models/account-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/account-state-delta.js.map +1 -1
- package/packages/indexer_client/src/models/account-state-delta.mjs.map +1 -1
- package/packages/indexer_client/src/models/account.js.map +1 -1
- package/packages/indexer_client/src/models/account.mjs.map +1 -1
- package/packages/indexer_client/src/models/accounts-response.js.map +1 -1
- package/packages/indexer_client/src/models/accounts-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/application-local-state.js.map +1 -1
- package/packages/indexer_client/src/models/application-local-state.mjs.map +1 -1
- 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.map +1 -1
- package/packages/indexer_client/src/models/application-log-data.js.map +1 -1
- package/packages/indexer_client/src/models/application-log-data.mjs.map +1 -1
- package/packages/indexer_client/src/models/application-logs-response.js.map +1 -1
- package/packages/indexer_client/src/models/application-logs-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/application-params.js.map +1 -1
- package/packages/indexer_client/src/models/application-params.mjs.map +1 -1
- package/packages/indexer_client/src/models/application-response.js.map +1 -1
- package/packages/indexer_client/src/models/application-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/application-state-schema.js.map +1 -1
- package/packages/indexer_client/src/models/application-state-schema.mjs.map +1 -1
- package/packages/indexer_client/src/models/application.js.map +1 -1
- package/packages/indexer_client/src/models/application.mjs.map +1 -1
- package/packages/indexer_client/src/models/applications-response.js.map +1 -1
- package/packages/indexer_client/src/models/applications-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/asset-balances-response.js.map +1 -1
- package/packages/indexer_client/src/models/asset-balances-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/asset-holding.js.map +1 -1
- package/packages/indexer_client/src/models/asset-holding.mjs.map +1 -1
- package/packages/indexer_client/src/models/asset-holdings-response.js.map +1 -1
- package/packages/indexer_client/src/models/asset-holdings-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/asset-params.js.map +1 -1
- package/packages/indexer_client/src/models/asset-params.mjs.map +1 -1
- package/packages/indexer_client/src/models/asset-response.js.map +1 -1
- package/packages/indexer_client/src/models/asset-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/asset.js.map +1 -1
- package/packages/indexer_client/src/models/asset.mjs.map +1 -1
- package/packages/indexer_client/src/models/assets-response.js.map +1 -1
- package/packages/indexer_client/src/models/assets-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/block-headers-response.js.map +1 -1
- package/packages/indexer_client/src/models/block-headers-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/block-rewards.js.map +1 -1
- package/packages/indexer_client/src/models/block-rewards.mjs.map +1 -1
- package/packages/indexer_client/src/models/block-upgrade-state.js.map +1 -1
- package/packages/indexer_client/src/models/block-upgrade-state.mjs.map +1 -1
- package/packages/indexer_client/src/models/block-upgrade-vote.js.map +1 -1
- package/packages/indexer_client/src/models/block-upgrade-vote.mjs.map +1 -1
- package/packages/indexer_client/src/models/block.js.map +1 -1
- package/packages/indexer_client/src/models/block.mjs.map +1 -1
- package/packages/indexer_client/src/models/box-descriptor.js.map +1 -1
- package/packages/indexer_client/src/models/box-descriptor.mjs.map +1 -1
- package/packages/indexer_client/src/models/box-reference.js.map +1 -1
- package/packages/indexer_client/src/models/box-reference.mjs.map +1 -1
- package/packages/indexer_client/src/models/box.js.map +1 -1
- package/packages/indexer_client/src/models/box.mjs.map +1 -1
- package/packages/indexer_client/src/models/boxes-response.js.map +1 -1
- package/packages/indexer_client/src/models/boxes-response.mjs.map +1 -1
- 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.map +1 -1
- package/packages/indexer_client/src/models/eval-delta.js.map +1 -1
- package/packages/indexer_client/src/models/eval-delta.mjs.map +1 -1
- package/packages/indexer_client/src/models/hash-factory.js.map +1 -1
- package/packages/indexer_client/src/models/hash-factory.mjs.map +1 -1
- package/packages/indexer_client/src/models/hb-proof-fields.js.map +1 -1
- package/packages/indexer_client/src/models/hb-proof-fields.mjs.map +1 -1
- package/packages/indexer_client/src/models/health-check.js.map +1 -1
- package/packages/indexer_client/src/models/health-check.mjs.map +1 -1
- package/packages/indexer_client/src/models/holding-ref.js.map +1 -1
- package/packages/indexer_client/src/models/holding-ref.mjs.map +1 -1
- 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.map +1 -1
- package/packages/indexer_client/src/models/locals-ref.js.map +1 -1
- package/packages/indexer_client/src/models/locals-ref.mjs.map +1 -1
- package/packages/indexer_client/src/models/merkle-array-proof.js.map +1 -1
- package/packages/indexer_client/src/models/merkle-array-proof.mjs.map +1 -1
- package/packages/indexer_client/src/models/mini-asset-holding.js.map +1 -1
- package/packages/indexer_client/src/models/mini-asset-holding.mjs.map +1 -1
- package/packages/indexer_client/src/models/on-completion.js.map +1 -1
- package/packages/indexer_client/src/models/on-completion.mjs.map +1 -1
- package/packages/indexer_client/src/models/participation-updates.js.map +1 -1
- package/packages/indexer_client/src/models/participation-updates.mjs.map +1 -1
- package/packages/indexer_client/src/models/resource-ref.js.map +1 -1
- package/packages/indexer_client/src/models/resource-ref.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-delta.js.map +1 -1
- package/packages/indexer_client/src/models/state-delta.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-proof-fields.js.map +1 -1
- package/packages/indexer_client/src/models/state-proof-fields.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-proof-participant.js.map +1 -1
- package/packages/indexer_client/src/models/state-proof-participant.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-proof-reveal.js.map +1 -1
- package/packages/indexer_client/src/models/state-proof-reveal.mjs.map +1 -1
- 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.map +1 -1
- package/packages/indexer_client/src/models/state-proof-signature.js.map +1 -1
- package/packages/indexer_client/src/models/state-proof-signature.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-proof-tracking.js.map +1 -1
- package/packages/indexer_client/src/models/state-proof-tracking.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-proof-verifier.js.map +1 -1
- package/packages/indexer_client/src/models/state-proof-verifier.mjs.map +1 -1
- package/packages/indexer_client/src/models/state-schema.js.map +1 -1
- package/packages/indexer_client/src/models/state-schema.mjs.map +1 -1
- 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.map +1 -1
- package/packages/indexer_client/src/models/teal-key-value.js.map +1 -1
- package/packages/indexer_client/src/models/teal-key-value.mjs.map +1 -1
- package/packages/indexer_client/src/models/teal-value.js.map +1 -1
- package/packages/indexer_client/src/models/teal-value.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-application.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-application.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-asset-config.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-asset-config.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-asset-freeze.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-asset-freeze.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-asset-transfer.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-asset-transfer.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-heartbeat.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-heartbeat.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-keyreg.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-keyreg.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-payment.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-payment.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-response.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-response.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-signature-logicsig.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-signature-logicsig.mjs.map +1 -1
- 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.map +1 -1
- package/packages/indexer_client/src/models/transaction-signature-multisig.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-signature-multisig.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-signature.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-signature.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction-state-proof.js.map +1 -1
- package/packages/indexer_client/src/models/transaction-state-proof.mjs.map +1 -1
- package/packages/indexer_client/src/models/transaction.js.map +1 -1
- package/packages/indexer_client/src/models/transaction.mjs.map +1 -1
- package/packages/indexer_client/src/models/transactions-response.js.map +1 -1
- package/packages/indexer_client/src/models/transactions-response.mjs.map +1 -1
- package/packages/kmd_client/src/apis/api-service.js +4 -2
- package/packages/kmd_client/src/apis/api-service.js.map +1 -1
- package/packages/kmd_client/src/apis/api-service.mjs +4 -2
- package/packages/kmd_client/src/apis/api-service.mjs.map +1 -1
- package/packages/kmd_client/src/client.js.map +1 -1
- package/packages/kmd_client/src/client.mjs.map +1 -1
- package/packages/kmd_client/src/core/api-error.js.map +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 -0
- package/packages/kmd_client/src/core/base-http-request.js.map +1 -1
- package/packages/kmd_client/src/core/base-http-request.mjs +1 -0
- package/packages/kmd_client/src/core/base-http-request.mjs.map +1 -1
- package/packages/kmd_client/src/core/fetch-http-request.js.map +1 -1
- package/packages/kmd_client/src/core/fetch-http-request.mjs.map +1 -1
- package/packages/kmd_client/src/core/model-runtime.js.map +1 -1
- package/packages/kmd_client/src/core/model-runtime.mjs.map +1 -1
- package/packages/kmd_client/src/core/request.js.map +1 -1
- package/packages/kmd_client/src/core/request.mjs.map +1 -1
- package/packages/kmd_client/src/models/create-wallet-request.js.map +1 -1
- package/packages/kmd_client/src/models/create-wallet-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/create-wallet-response.js.map +1 -1
- package/packages/kmd_client/src/models/create-wallet-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/delete-key-request.js.map +1 -1
- package/packages/kmd_client/src/models/delete-key-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/delete-multisig-request.js.map +1 -1
- package/packages/kmd_client/src/models/delete-multisig-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/export-key-request.js.map +1 -1
- package/packages/kmd_client/src/models/export-key-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/export-key-response.js.map +1 -1
- package/packages/kmd_client/src/models/export-key-response.mjs.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/packages/kmd_client/src/models/export-multisig-request.js.map +1 -1
- package/packages/kmd_client/src/models/export-multisig-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/export-multisig-response.js.map +1 -1
- package/packages/kmd_client/src/models/export-multisig-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/generate-key-request.js.map +1 -1
- package/packages/kmd_client/src/models/generate-key-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/generate-key-response.js.map +1 -1
- package/packages/kmd_client/src/models/generate-key-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/import-key-request.js.map +1 -1
- package/packages/kmd_client/src/models/import-key-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/import-key-response.js.map +1 -1
- package/packages/kmd_client/src/models/import-key-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/import-multisig-request.js.map +1 -1
- package/packages/kmd_client/src/models/import-multisig-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/import-multisig-response.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/packages/kmd_client/src/models/list-keys-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/list-keys-response.js.map +1 -1
- package/packages/kmd_client/src/models/list-keys-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/list-multisig-request.js.map +1 -1
- package/packages/kmd_client/src/models/list-multisig-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/list-multisig-response.js.map +1 -1
- package/packages/kmd_client/src/models/list-multisig-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/list-wallets-response.js.map +1 -1
- package/packages/kmd_client/src/models/list-wallets-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/multisig-sig.js.map +1 -1
- package/packages/kmd_client/src/models/multisig-sig.mjs.map +1 -1
- package/packages/kmd_client/src/models/multisig-subsig.js.map +1 -1
- package/packages/kmd_client/src/models/multisig-subsig.mjs.map +1 -1
- 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.map +1 -1
- package/packages/kmd_client/src/models/rename-wallet-request.js.map +1 -1
- package/packages/kmd_client/src/models/rename-wallet-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/rename-wallet-response.js.map +1 -1
- 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.map +1 -1
- 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.js.map +1 -1
- 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.map +1 -1
- package/packages/kmd_client/src/models/sign-multisig-response.mjs.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/packages/kmd_client/src/models/sign-program-request.js.map +1 -1
- package/packages/kmd_client/src/models/sign-program-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/sign-program-response.js.map +1 -1
- package/packages/kmd_client/src/models/sign-program-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/sign-transaction-response.js.map +1 -1
- package/packages/kmd_client/src/models/sign-transaction-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/sign-txn-request.js.map +1 -1
- package/packages/kmd_client/src/models/sign-txn-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/tx-type.js.map +1 -1
- package/packages/kmd_client/src/models/tx-type.mjs.map +1 -1
- package/packages/kmd_client/src/models/versions-response.js.map +1 -1
- package/packages/kmd_client/src/models/versions-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/wallet-handle.js.map +1 -1
- package/packages/kmd_client/src/models/wallet-handle.mjs.map +1 -1
- package/packages/kmd_client/src/models/wallet-info-request.js.map +1 -1
- package/packages/kmd_client/src/models/wallet-info-request.mjs.map +1 -1
- package/packages/kmd_client/src/models/wallet-info-response.js.map +1 -1
- package/packages/kmd_client/src/models/wallet-info-response.mjs.map +1 -1
- package/packages/kmd_client/src/models/wallet.js.map +1 -1
- package/packages/kmd_client/src/models/wallet.mjs.map +1 -1
- package/packages/testing/src/globalSetup.js +0 -1
- package/packages/testing/src/globalSetup.js.map +1 -1
- package/packages/testing/src/globalSetup.mjs.map +1 -1
- package/packages/testing/src/mockServer.js.map +1 -1
- package/packages/testing/src/mockServer.mjs.map +1 -1
- package/packages/transact/src/logicsig.js +2 -1
- package/packages/transact/src/logicsig.js.map +1 -1
- package/packages/transact/src/logicsig.mjs +2 -1
- package/packages/transact/src/logicsig.mjs.map +1 -1
- package/packages/transact/src/multisig.js +0 -2
- package/packages/transact/src/multisig.js.map +1 -1
- package/packages/transact/src/multisig.mjs +0 -2
- package/packages/transact/src/multisig.mjs.map +1 -1
- package/packages/transact/src/signer.js.map +1 -1
- package/packages/transact/src/signer.mjs.map +1 -1
- 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 +22 -23
- package/packages/transact/src/transactions/app-call.mjs.map +1 -1
- package/packages/transact/src/transactions/asset-config.js +12 -13
- package/packages/transact/src/transactions/asset-config.js.map +1 -1
- package/packages/transact/src/transactions/asset-config.mjs +12 -13
- package/packages/transact/src/transactions/asset-config.mjs.map +1 -1
- package/packages/transact/src/transactions/asset-freeze.js +1 -2
- 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.js +1 -2
- 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 +5 -14
- package/packages/transact/src/transactions/common.js.map +1 -1
- package/packages/transact/src/transactions/common.mjs +6 -14
- package/packages/transact/src/transactions/common.mjs.map +1 -1
- package/packages/transact/src/transactions/key-registration.js +8 -9
- package/packages/transact/src/transactions/key-registration.js.map +1 -1
- package/packages/transact/src/transactions/key-registration.mjs +8 -9
- package/packages/transact/src/transactions/key-registration.mjs.map +1 -1
- package/packages/transact/src/transactions/reference-types-meta.js.map +1 -1
- package/packages/transact/src/transactions/reference-types-meta.mjs.map +1 -1
- package/packages/transact/src/transactions/signed-transaction-meta.js.map +1 -1
- package/packages/transact/src/transactions/signed-transaction-meta.mjs.map +1 -1
- package/packages/transact/src/transactions/signed-transaction.js.map +1 -1
- package/packages/transact/src/transactions/signed-transaction.mjs.map +1 -1
- package/packages/transact/src/transactions/transaction-meta.js +27 -26
- package/packages/transact/src/transactions/transaction-meta.js.map +1 -1
- package/packages/transact/src/transactions/transaction-meta.mjs +27 -26
- package/packages/transact/src/transactions/transaction-meta.mjs.map +1 -1
- package/packages/transact/src/transactions/transaction-type.js.map +1 -1
- package/packages/transact/src/transactions/transaction-type.mjs.map +1 -1
- package/packages/transact/src/transactions/transaction.js +2 -2
- package/packages/transact/src/transactions/transaction.js.map +1 -1
- package/packages/transact/src/transactions/transaction.mjs +2 -2
- package/packages/transact/src/transactions/transaction.mjs.map +1 -1
- package/testing/account.js.map +1 -1
- package/testing/account.mjs.map +1 -1
- package/testing/fixtures/algokit-log-capture-fixture.js.map +1 -1
- package/testing/fixtures/algokit-log-capture-fixture.mjs.map +1 -1
- package/testing/fixtures/algorand-fixture.js.map +1 -1
- package/testing/fixtures/algorand-fixture.mjs.map +1 -1
- package/testing/indexer.js.map +1 -1
- package/testing/indexer.mjs.map +1 -1
- package/testing/test-logger.js.map +1 -1
- package/testing/test-logger.mjs.map +1 -1
- package/testing/transaction-logger.js.map +1 -1
- package/testing/transaction-logger.mjs.map +1 -1
- package/transaction/perform-transaction-composer-simulate.js.map +1 -1
- package/transaction/perform-transaction-composer-simulate.mjs.map +1 -1
- package/transaction/transaction.js.map +1 -1
- package/transaction/transaction.mjs.map +1 -1
- package/transactions/app-call.js +33 -43
- package/transactions/app-call.js.map +1 -1
- package/transactions/app-call.mjs +33 -43
- package/transactions/app-call.mjs.map +1 -1
- package/transactions/asset-config.js +5 -5
- package/transactions/asset-config.js.map +1 -1
- package/transactions/asset-config.mjs +5 -5
- package/transactions/asset-config.mjs.map +1 -1
- package/transactions/asset-transfer.js +4 -4
- package/transactions/asset-transfer.js.map +1 -1
- package/transactions/asset-transfer.mjs +4 -4
- package/transactions/asset-transfer.mjs.map +1 -1
- package/transactions/common.js.map +1 -1
- package/transactions/common.mjs.map +1 -1
- package/transactions/fee-coverage.js +7 -10
- package/transactions/fee-coverage.js.map +1 -1
- package/transactions/fee-coverage.mjs +7 -10
- package/transactions/fee-coverage.mjs.map +1 -1
- package/transactions/key-registration.js +3 -3
- package/transactions/key-registration.js.map +1 -1
- package/transactions/key-registration.mjs +3 -3
- package/transactions/key-registration.mjs.map +1 -1
- package/transactions/method-call.js +8 -8
- package/transactions/method-call.js.map +1 -1
- package/transactions/method-call.mjs +8 -8
- package/transactions/method-call.mjs.map +1 -1
- package/transactions/payment.js +2 -2
- package/transactions/payment.js.map +1 -1
- package/transactions/payment.mjs +2 -2
- package/transactions/payment.mjs.map +1 -1
- package/types/account.js.map +1 -1
- package/types/algorand-client-transaction-creator.js.map +1 -1
- package/types/algorand-client-transaction-sender.js.map +1 -1
- package/types/algorand-client.js.map +1 -1
- package/types/amount.js.map +1 -1
- package/types/app-client.js.map +1 -1
- package/types/app-deployer.js.map +1 -1
- package/types/app-factory.js.map +1 -1
- package/types/app-manager.js.map +1 -1
- package/types/app-spec.js.map +1 -1
- package/types/asset-manager.js.map +1 -1
- package/types/async-event-emitter.js.map +1 -1
- package/types/client-manager.js.map +1 -1
- package/types/composer.js.map +1 -1
- package/types/config.js.map +1 -1
- package/types/dispenser-client.js.map +1 -1
- package/types/kmd-account-manager.js.map +1 -1
- package/types/lifecycle-events.js.map +1 -1
- package/types/logic-error.js.map +1 -1
- package/types/network-client.js.map +1 -1
- package/updatable-config.js.map +1 -1
- package/updatable-config.mjs.map +1 -1
- package/util.js.map +1 -1
- package/util.mjs.map +1 -1
- package/packages/algo25/src/english.js.map +0 -1
- package/packages/algo25/src/english.mjs.map +0 -1
- package/packages/algo25/src/index.js.map +0 -1
- package/packages/algo25/src/index.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.mjs","names":[],"sources":["../../../../packages/transact/src/signer.ts"],"sourcesContent":["import { Address, Addressable, concatArrays, Expand, ReadableAddress } from '@algorandfoundation/algokit-common'\nimport { DelegatedLsigSigner, LogicSig, ProgramDataSigner } from './logicsig'\nimport { encodeSignedTransaction, SignedTransaction, validateSignedTransaction } from './transactions/signed-transaction'\nimport { encodeTransaction, Transaction } from './transactions/transaction'\nimport type { RawEd25519Signer } from '@algorandfoundation/algokit-crypto'\nimport { MultisigAccount } from './multisig'\n\n/** Function for signing a group of transactions */\nexport type TransactionSigner = (txnGroup: Transaction[], indexesToSign: number[]) => Promise<Uint8Array[]>\n\n/** A transaction signer attached to an address */\nexport interface AddressWithTransactionSigner extends Addressable {\n signer: TransactionSigner\n}\n\n/** An address that can be used to send transactions that may or may not have a signer */\nexport type SendingAddress = ReadableAddress | AddressWithTransactionSigner\n\n/** A delegated logic signature signer attached to an address */\nexport interface AddressWithDelegatedLsigSigner extends Addressable {\n lsigSigner: DelegatedLsigSigner\n}\n\nexport interface AddressWithProgramDataSigner extends Addressable {\n programDataSigner: ProgramDataSigner\n}\n\nexport type MxBytesSigner = (bytesToSign: Uint8Array) => Promise<Uint8Array>\n\nexport interface AddressWithMxBytesSigner extends Addressable {\n mxBytesSigner: MxBytesSigner\n}\n\nexport type AddressWithSigners = Expand<\n Addressable & AddressWithTransactionSigner & AddressWithDelegatedLsigSigner & AddressWithProgramDataSigner & AddressWithMxBytesSigner\n>\n\nconst SIGN_BYTES_PREFIX = Uint8Array.from([77, 88]) // \"MX\"\n\n/**\n * Generate type-safe domain-separated signer callbacks given an ed25519 pubkey and a signing callback\n * @param args - The arguments for generating signers\n * @param args.ed25519Pubkey - The ed25519 public key used for signing\n * @param args.sendingAddress - The address that will be used as the sender of transactions. If not provided, defaults to the address derived from the ed25519 public key. This is useful when signing for a rekeyed account where the sending address differs from the auth address.\n * @param args.rawEd25519Signer - A callback function that signs raw bytes using the ed25519 private key\n * @returns An object containing the sending address and various signer functions\n */\nexport function generateAddressWithSigners(args: {\n ed25519Pubkey: Uint8Array\n sendingAddress?: Address\n rawEd25519Signer: RawEd25519Signer\n}): AddressWithSigners {\n const { ed25519Pubkey, rawEd25519Signer } = args\n const authAddr = new Address(ed25519Pubkey)\n const sendingAddress = args.sendingAddress ?? authAddr\n\n const signer: TransactionSigner = async (txnGroup: Transaction[], indexesToSign: number[]) => {\n const stxns: SignedTransaction[] = []\n for (const index of indexesToSign) {\n const txn = txnGroup[index]\n const bytesToSign = encodeTransaction(txn)\n const signature = await rawEd25519Signer(bytesToSign)\n const stxn: SignedTransaction = {\n txn,\n sig: signature,\n }\n\n if (!txn.sender.equals(sendingAddress)) {\n stxn.authAddress = authAddr\n }\n\n stxns.push(stxn)\n }\n\n return stxns.map((stxn) => {\n validateSignedTransaction(stxn)\n return encodeSignedTransaction(stxn)\n })\n }\n\n const lsigSigner: DelegatedLsigSigner = async (lsig, msig) => {\n const bytesToSign = lsig.bytesToSignForDelegation(msig)\n const sig = await rawEd25519Signer(bytesToSign)\n return { sig, addr: sendingAddress }\n }\n\n const programDataSigner: ProgramDataSigner = async (data, lsig) => {\n const bytesToSign = lsig.programDataToSign(data)\n return await rawEd25519Signer(bytesToSign)\n }\n\n const mxBytesSigner: MxBytesSigner = async (bytes: Uint8Array) => {\n const bytesToSign = concatArrays(SIGN_BYTES_PREFIX, bytes)\n return await rawEd25519Signer(bytesToSign)\n }\n\n return { addr: sendingAddress, signer, lsigSigner, programDataSigner, mxBytesSigner }\n}\n\n/**\n * Create a makeEmptyTransactionSigner that does not specify any signer or\n * signing capabilities. This should only be used to simulate transactions.\n */\nexport function makeEmptyTransactionSigner(): TransactionSigner {\n return (txnGroup: Transaction[], indexesToSign: number[]) => {\n const unsigned: Uint8Array[] = []\n\n for (const index of indexesToSign) {\n const stxn: SignedTransaction = {\n txn: txnGroup[index],\n sig: new Uint8Array(64).fill(0),\n }\n validateSignedTransaction(stxn)\n unsigned.push(encodeSignedTransaction(stxn))\n }\n\n return Promise.resolve(unsigned)\n }\n}\n\nexport const bytesForSigning = {\n transaction(txn: Transaction): Uint8Array {\n return encodeTransaction(txn)\n },\n mxBytes(bytes: Uint8Array): Uint8Array {\n return concatArrays(SIGN_BYTES_PREFIX, bytes)\n },\n lsigForDelegation(lsig: LogicSig, msig?: MultisigAccount): Uint8Array {\n return lsig.bytesToSignForDelegation(msig)\n },\n programData(lsig: LogicSig, data: Uint8Array): Uint8Array {\n return lsig.programDataToSign(data)\n },\n}\n"],"mappings":";;;;;AAqCA,MAAM,oBAAoB,WAAW,KAAK,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"signer.mjs","names":[],"sources":["../../../../packages/transact/src/signer.ts"],"sourcesContent":["import { Address, Addressable, concatArrays, Expand, ReadableAddress } from '@algorandfoundation/algokit-common'\nimport { DelegatedLsigSigner, LogicSig, ProgramDataSigner } from './logicsig'\nimport { encodeSignedTransaction, SignedTransaction, validateSignedTransaction } from './transactions/signed-transaction'\nimport { encodeTransaction, Transaction } from './transactions/transaction'\nimport type { RawEd25519Signer } from '@algorandfoundation/algokit-crypto'\nimport { MultisigAccount } from './multisig'\n\n/** Function for signing a group of transactions */\nexport type TransactionSigner = (txnGroup: Transaction[], indexesToSign: number[]) => Promise<Uint8Array[]>\n\n/** A transaction signer attached to an address */\nexport interface AddressWithTransactionSigner extends Addressable {\n signer: TransactionSigner\n}\n\n/** An address that can be used to send transactions that may or may not have a signer */\nexport type SendingAddress = ReadableAddress | AddressWithTransactionSigner\n\n/** A delegated logic signature signer attached to an address */\nexport interface AddressWithDelegatedLsigSigner extends Addressable {\n lsigSigner: DelegatedLsigSigner\n}\n\nexport interface AddressWithProgramDataSigner extends Addressable {\n programDataSigner: ProgramDataSigner\n}\n\nexport type MxBytesSigner = (bytesToSign: Uint8Array) => Promise<Uint8Array>\n\nexport interface AddressWithMxBytesSigner extends Addressable {\n mxBytesSigner: MxBytesSigner\n}\n\nexport type AddressWithSigners = Expand<\n Addressable & AddressWithTransactionSigner & AddressWithDelegatedLsigSigner & AddressWithProgramDataSigner & AddressWithMxBytesSigner\n>\n\nconst SIGN_BYTES_PREFIX = Uint8Array.from([77, 88]) // \"MX\"\n\n/**\n * Generate type-safe domain-separated signer callbacks given an ed25519 pubkey and a signing callback\n * @param args - The arguments for generating signers\n * @param args.ed25519Pubkey - The ed25519 public key used for signing\n * @param args.sendingAddress - The address that will be used as the sender of transactions. If not provided, defaults to the address derived from the ed25519 public key. This is useful when signing for a rekeyed account where the sending address differs from the auth address.\n * @param args.rawEd25519Signer - A callback function that signs raw bytes using the ed25519 private key\n * @returns An object containing the sending address and various signer functions\n */\nexport function generateAddressWithSigners(args: {\n ed25519Pubkey: Uint8Array\n sendingAddress?: Address\n rawEd25519Signer: RawEd25519Signer\n}): AddressWithSigners {\n const { ed25519Pubkey, rawEd25519Signer } = args\n const authAddr = new Address(ed25519Pubkey)\n const sendingAddress = args.sendingAddress ?? authAddr\n\n const signer: TransactionSigner = async (txnGroup: Transaction[], indexesToSign: number[]) => {\n const stxns: SignedTransaction[] = []\n for (const index of indexesToSign) {\n const txn = txnGroup[index]\n const bytesToSign = encodeTransaction(txn)\n const signature = await rawEd25519Signer(bytesToSign)\n const stxn: SignedTransaction = {\n txn,\n sig: signature,\n }\n\n if (!txn.sender.equals(sendingAddress)) {\n stxn.authAddress = authAddr\n }\n\n stxns.push(stxn)\n }\n\n return stxns.map((stxn) => {\n validateSignedTransaction(stxn)\n return encodeSignedTransaction(stxn)\n })\n }\n\n const lsigSigner: DelegatedLsigSigner = async (lsig, msig) => {\n const bytesToSign = lsig.bytesToSignForDelegation(msig)\n const sig = await rawEd25519Signer(bytesToSign)\n return { sig, addr: sendingAddress }\n }\n\n const programDataSigner: ProgramDataSigner = async (data, lsig) => {\n const bytesToSign = lsig.programDataToSign(data)\n return await rawEd25519Signer(bytesToSign)\n }\n\n const mxBytesSigner: MxBytesSigner = async (bytes: Uint8Array) => {\n const bytesToSign = concatArrays(SIGN_BYTES_PREFIX, bytes)\n return await rawEd25519Signer(bytesToSign)\n }\n\n return { addr: sendingAddress, signer, lsigSigner, programDataSigner, mxBytesSigner }\n}\n\n/**\n * Create a makeEmptyTransactionSigner that does not specify any signer or\n * signing capabilities. This should only be used to simulate transactions.\n */\nexport function makeEmptyTransactionSigner(): TransactionSigner {\n return (txnGroup: Transaction[], indexesToSign: number[]) => {\n const unsigned: Uint8Array[] = []\n\n for (const index of indexesToSign) {\n const stxn: SignedTransaction = {\n txn: txnGroup[index],\n sig: new Uint8Array(64).fill(0),\n }\n validateSignedTransaction(stxn)\n unsigned.push(encodeSignedTransaction(stxn))\n }\n\n return Promise.resolve(unsigned)\n }\n}\n\nexport const bytesForSigning = {\n transaction(txn: Transaction): Uint8Array {\n return encodeTransaction(txn)\n },\n mxBytes(bytes: Uint8Array): Uint8Array {\n return concatArrays(SIGN_BYTES_PREFIX, bytes)\n },\n lsigForDelegation(lsig: LogicSig, msig?: MultisigAccount): Uint8Array {\n return lsig.bytesToSignForDelegation(msig)\n },\n programData(lsig: LogicSig, data: Uint8Array): Uint8Array {\n return lsig.programDataToSign(data)\n },\n}\n"],"mappings":";;;;;AAqCA,MAAM,oBAAoB,WAAW,KAAK,CAAC,IAAI,EAAE,CAAC;;;;;;;;;AAUlD,SAAgB,2BAA2B,MAIpB;CACrB,MAAM,EAAE,eAAe,qBAAqB;CAC5C,MAAM,WAAW,IAAI,QAAQ,aAAa;CAC1C,MAAM,iBAAiB,KAAK,kBAAkB;CAE9C,MAAM,SAA4B,OAAO,UAAyB,kBAA4B;EAC5F,MAAM,QAA6B,CAAC;EACpC,KAAK,MAAM,SAAS,eAAe;GACjC,MAAM,MAAM,SAAS;GAGrB,MAAM,OAA0B;IAC9B;IACA,KAAK,MAHiB,iBADJ,kBAAkB,GACa,CAAC;GAIpD;GAEA,IAAI,CAAC,IAAI,OAAO,OAAO,cAAc,GACnC,KAAK,cAAc;GAGrB,MAAM,KAAK,IAAI;EACjB;EAEA,OAAO,MAAM,KAAK,SAAS;GACzB,0BAA0B,IAAI;GAC9B,OAAO,wBAAwB,IAAI;EACrC,CAAC;CACH;CAEA,MAAM,aAAkC,OAAO,MAAM,SAAS;EAG5D,OAAO;GAAE,KAAA,MADS,iBADE,KAAK,yBAAyB,IACL,CAAC;GAChC,MAAM;EAAe;CACrC;CAEA,MAAM,oBAAuC,OAAO,MAAM,SAAS;EAEjE,OAAO,MAAM,iBADO,KAAK,kBAAkB,IACH,CAAC;CAC3C;CAEA,MAAM,gBAA+B,OAAO,UAAsB;EAEhE,OAAO,MAAM,iBADO,aAAa,mBAAmB,KACZ,CAAC;CAC3C;CAEA,OAAO;EAAE,MAAM;EAAgB;EAAQ;EAAY;EAAmB;CAAc;AACtF;;;;;AAMA,SAAgB,6BAAgD;CAC9D,QAAQ,UAAyB,kBAA4B;EAC3D,MAAM,WAAyB,CAAC;EAEhC,KAAK,MAAM,SAAS,eAAe;GACjC,MAAM,OAA0B;IAC9B,KAAK,SAAS;IACd,KAAK,IAAI,WAAW,EAAE,EAAE,KAAK,CAAC;GAChC;GACA,0BAA0B,IAAI;GAC9B,SAAS,KAAK,wBAAwB,IAAI,CAAC;EAC7C;EAEA,OAAO,QAAQ,QAAQ,QAAQ;CACjC;AACF;AAEA,MAAa,kBAAkB;CAC7B,YAAY,KAA8B;EACxC,OAAO,kBAAkB,GAAG;CAC9B;CACA,QAAQ,OAA+B;EACrC,OAAO,aAAa,mBAAmB,KAAK;CAC9C;CACA,kBAAkB,MAAgB,MAAoC;EACpE,OAAO,KAAK,yBAAyB,IAAI;CAC3C;CACA,YAAY,MAAgB,MAA8B;EACxD,OAAO,KAAK,kBAAkB,IAAI;CACpC;AACF"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
const require_constants = require("../../../common/src/constants.js");
|
|
2
|
-
const require_common = require("./common.js");
|
|
3
2
|
//#region packages/transact/src/transactions/app-call.ts
|
|
4
3
|
/**
|
|
5
4
|
* On-completion actions for application transactions.
|
|
@@ -63,16 +62,16 @@ function validateAppCallTransaction(appCall) {
|
|
|
63
62
|
function validateAppCreation(appCall) {
|
|
64
63
|
const errors = new Array();
|
|
65
64
|
if (!appCall.approvalProgram || appCall.approvalProgram.length === 0) errors.push({
|
|
66
|
-
type:
|
|
65
|
+
type: 0,
|
|
67
66
|
data: FIELD_APPROVAL_PROGRAM
|
|
68
67
|
});
|
|
69
68
|
if (!appCall.clearStateProgram || appCall.clearStateProgram.length === 0) errors.push({
|
|
70
|
-
type:
|
|
69
|
+
type: 0,
|
|
71
70
|
data: FIELD_CLEAR_STATE_PROGRAM
|
|
72
71
|
});
|
|
73
72
|
const extraPages = appCall.extraProgramPages ?? 0;
|
|
74
73
|
if (extraPages > 3) errors.push({
|
|
75
|
-
type:
|
|
74
|
+
type: 1,
|
|
76
75
|
data: {
|
|
77
76
|
field: FIELD_EXTRA_PROGRAM_PAGES,
|
|
78
77
|
actual: extraPages,
|
|
@@ -82,7 +81,7 @@ function validateAppCreation(appCall) {
|
|
|
82
81
|
});
|
|
83
82
|
const maxProgramSize = require_constants.PROGRAM_PAGE_SIZE + extraPages * require_constants.PROGRAM_PAGE_SIZE;
|
|
84
83
|
if (appCall.approvalProgram && appCall.approvalProgram.length > maxProgramSize) errors.push({
|
|
85
|
-
type:
|
|
84
|
+
type: 1,
|
|
86
85
|
data: {
|
|
87
86
|
field: FIELD_APPROVAL_PROGRAM,
|
|
88
87
|
actual: appCall.approvalProgram.length,
|
|
@@ -91,7 +90,7 @@ function validateAppCreation(appCall) {
|
|
|
91
90
|
}
|
|
92
91
|
});
|
|
93
92
|
if (appCall.clearStateProgram && appCall.clearStateProgram.length > maxProgramSize) errors.push({
|
|
94
|
-
type:
|
|
93
|
+
type: 1,
|
|
95
94
|
data: {
|
|
96
95
|
field: FIELD_CLEAR_STATE_PROGRAM,
|
|
97
96
|
actual: appCall.clearStateProgram.length,
|
|
@@ -101,7 +100,7 @@ function validateAppCreation(appCall) {
|
|
|
101
100
|
});
|
|
102
101
|
const totalProgramSize = (appCall.approvalProgram?.length ?? 0) + (appCall.clearStateProgram?.length ?? 0);
|
|
103
102
|
if (totalProgramSize > maxProgramSize) errors.push({
|
|
104
|
-
type:
|
|
103
|
+
type: 1,
|
|
105
104
|
data: {
|
|
106
105
|
field: "Combined approval and clear state programs",
|
|
107
106
|
actual: totalProgramSize,
|
|
@@ -111,7 +110,7 @@ function validateAppCreation(appCall) {
|
|
|
111
110
|
});
|
|
112
111
|
if (appCall.globalStateSchema) {
|
|
113
112
|
if (appCall.globalStateSchema.numUints + appCall.globalStateSchema.numByteSlices > 64) errors.push({
|
|
114
|
-
type:
|
|
113
|
+
type: 1,
|
|
115
114
|
data: {
|
|
116
115
|
field: FIELD_GLOBAL_STATE_SCHEMA,
|
|
117
116
|
actual: appCall.globalStateSchema.numUints + appCall.globalStateSchema.numByteSlices,
|
|
@@ -122,7 +121,7 @@ function validateAppCreation(appCall) {
|
|
|
122
121
|
}
|
|
123
122
|
if (appCall.localStateSchema) {
|
|
124
123
|
if (appCall.localStateSchema.numUints + appCall.localStateSchema.numByteSlices > 16) errors.push({
|
|
125
|
-
type:
|
|
124
|
+
type: 1,
|
|
126
125
|
data: {
|
|
127
126
|
field: FIELD_LOCAL_STATE_SCHEMA,
|
|
128
127
|
actual: appCall.localStateSchema.numUints + appCall.localStateSchema.numByteSlices,
|
|
@@ -138,26 +137,26 @@ function validateAppCreation(appCall) {
|
|
|
138
137
|
*/
|
|
139
138
|
function validateAppOperation(appCall) {
|
|
140
139
|
const errors = new Array();
|
|
141
|
-
if (appCall.onComplete ===
|
|
140
|
+
if (appCall.onComplete === 4) {
|
|
142
141
|
if (!appCall.approvalProgram || appCall.approvalProgram.length === 0) errors.push({
|
|
143
|
-
type:
|
|
142
|
+
type: 0,
|
|
144
143
|
data: FIELD_APPROVAL_PROGRAM
|
|
145
144
|
});
|
|
146
145
|
if (!appCall.clearStateProgram || appCall.clearStateProgram.length === 0) errors.push({
|
|
147
|
-
type:
|
|
146
|
+
type: 0,
|
|
148
147
|
data: FIELD_CLEAR_STATE_PROGRAM
|
|
149
148
|
});
|
|
150
149
|
}
|
|
151
150
|
if (appCall.globalStateSchema !== void 0) errors.push({
|
|
152
|
-
type:
|
|
151
|
+
type: 2,
|
|
153
152
|
data: FIELD_GLOBAL_STATE_SCHEMA
|
|
154
153
|
});
|
|
155
154
|
if (appCall.localStateSchema !== void 0) errors.push({
|
|
156
|
-
type:
|
|
155
|
+
type: 2,
|
|
157
156
|
data: FIELD_LOCAL_STATE_SCHEMA
|
|
158
157
|
});
|
|
159
158
|
if (appCall.extraProgramPages !== void 0) errors.push({
|
|
160
|
-
type:
|
|
159
|
+
type: 2,
|
|
161
160
|
data: FIELD_EXTRA_PROGRAM_PAGES
|
|
162
161
|
});
|
|
163
162
|
return errors;
|
|
@@ -169,7 +168,7 @@ function validateAppCommonFields(appCall) {
|
|
|
169
168
|
const errors = new Array();
|
|
170
169
|
if (appCall.args) {
|
|
171
170
|
if (appCall.args.length > 16) errors.push({
|
|
172
|
-
type:
|
|
171
|
+
type: 1,
|
|
173
172
|
data: {
|
|
174
173
|
field: FIELD_ARGS,
|
|
175
174
|
actual: appCall.args.length,
|
|
@@ -179,7 +178,7 @@ function validateAppCommonFields(appCall) {
|
|
|
179
178
|
});
|
|
180
179
|
const totalArgsSize = appCall.args.reduce((sum, arg) => sum + arg.length, 0);
|
|
181
180
|
if (totalArgsSize > 2048) errors.push({
|
|
182
|
-
type:
|
|
181
|
+
type: 1,
|
|
183
182
|
data: {
|
|
184
183
|
field: "Args total size",
|
|
185
184
|
actual: totalArgsSize,
|
|
@@ -189,7 +188,7 @@ function validateAppCommonFields(appCall) {
|
|
|
189
188
|
});
|
|
190
189
|
}
|
|
191
190
|
if (appCall.accountReferences && appCall.accountReferences.length > 8) errors.push({
|
|
192
|
-
type:
|
|
191
|
+
type: 1,
|
|
193
192
|
data: {
|
|
194
193
|
field: "Account references",
|
|
195
194
|
actual: appCall.accountReferences.length,
|
|
@@ -198,7 +197,7 @@ function validateAppCommonFields(appCall) {
|
|
|
198
197
|
}
|
|
199
198
|
});
|
|
200
199
|
if (appCall.appReferences && appCall.appReferences.length > 8) errors.push({
|
|
201
|
-
type:
|
|
200
|
+
type: 1,
|
|
202
201
|
data: {
|
|
203
202
|
field: "App references",
|
|
204
203
|
actual: appCall.appReferences.length,
|
|
@@ -207,7 +206,7 @@ function validateAppCommonFields(appCall) {
|
|
|
207
206
|
}
|
|
208
207
|
});
|
|
209
208
|
if (appCall.assetReferences && appCall.assetReferences.length > 8) errors.push({
|
|
210
|
-
type:
|
|
209
|
+
type: 1,
|
|
211
210
|
data: {
|
|
212
211
|
field: "Asset references",
|
|
213
212
|
actual: appCall.assetReferences.length,
|
|
@@ -217,7 +216,7 @@ function validateAppCommonFields(appCall) {
|
|
|
217
216
|
});
|
|
218
217
|
if (appCall.boxReferences) {
|
|
219
218
|
if (appCall.boxReferences.length > 8) errors.push({
|
|
220
|
-
type:
|
|
219
|
+
type: 1,
|
|
221
220
|
data: {
|
|
222
221
|
field: "Box references",
|
|
223
222
|
actual: appCall.boxReferences.length,
|
|
@@ -227,13 +226,13 @@ function validateAppCommonFields(appCall) {
|
|
|
227
226
|
});
|
|
228
227
|
const appRefs = appCall.appReferences || [];
|
|
229
228
|
for (const boxRef of appCall.boxReferences) if (boxRef.appId !== 0n && boxRef.appId !== appCall.appId && !appRefs.includes(boxRef.appId)) errors.push({
|
|
230
|
-
type:
|
|
229
|
+
type: 4,
|
|
231
230
|
data: `Box reference for app ID ${boxRef.appId} must be in app references`
|
|
232
231
|
});
|
|
233
232
|
}
|
|
234
233
|
const totalReferences = (appCall.accountReferences?.length || 0) + (appCall.appReferences?.length || 0) + (appCall.assetReferences?.length || 0) + (appCall.boxReferences?.length || 0);
|
|
235
234
|
if (totalReferences > 8) errors.push({
|
|
236
|
-
type:
|
|
235
|
+
type: 1,
|
|
237
236
|
data: {
|
|
238
237
|
field: "Total references",
|
|
239
238
|
actual: totalReferences,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-call.js","names":["TransactionValidationErrorType","PROGRAM_PAGE_SIZE","MAX_ARGS_SIZE"],"sources":["../../../../../packages/transact/src/transactions/app-call.ts"],"sourcesContent":["import {\n Address,\n MAX_ACCOUNT_REFERENCES,\n MAX_APP_ARGS,\n MAX_APP_REFERENCES,\n MAX_ARGS_SIZE,\n MAX_ASSET_REFERENCES,\n MAX_BOX_REFERENCES,\n MAX_EXTRA_PROGRAM_PAGES,\n MAX_GLOBAL_STATE_KEYS,\n MAX_LOCAL_STATE_KEYS,\n MAX_OVERALL_REFERENCES,\n PROGRAM_PAGE_SIZE,\n} from '@algorandfoundation/algokit-common'\nimport { TransactionValidationError, TransactionValidationErrorType } from './common'\n\n/**\n * Represents an app call transaction that interacts with Algorand Smart Contracts.\n *\n * App call transactions are used to create, update, delete, opt-in to,\n * close out of, or clear state from Algorand apps (smart contracts).\n */\nexport type AppCallTransactionFields = {\n /**\n * ID of the app being called.\n *\n * Set this to 0 to indicate an app creation call.\n */\n appId: bigint\n\n /**\n * Defines what additional actions occur with the transaction.\n */\n onComplete: OnApplicationComplete\n\n /**\n * Logic executed for every app call transaction, except when\n * on-completion is set to \"clear\".\n *\n * Approval programs may reject the transaction.\n * Only required for app creation and update transactions.\n */\n approvalProgram?: Uint8Array\n\n /**\n * Logic executed for app call transactions with on-completion set to \"clear\".\n *\n * Clear state programs cannot reject the transaction.\n * Only required for app creation and update transactions.\n */\n clearStateProgram?: Uint8Array\n\n /**\n * Holds the maximum number of global state values.\n *\n * Only required for app creation transactions.\n * This cannot be changed after creation.\n */\n globalStateSchema?: StateSchema\n\n /**\n * Holds the maximum number of local state values.\n *\n * Only required for app creation transactions.\n * This cannot be changed after creation.\n */\n localStateSchema?: StateSchema\n\n /**\n * Number of additional pages allocated to the app's approval\n * and clear state programs.\n *\n * Each extra program page is 2048 bytes. The sum of approval program\n * and clear state program may not exceed 2048*(1+extra_program_pages) bytes.\n * Currently, the maximum value is 3.\n * This cannot be changed after creation.\n */\n extraProgramPages?: number\n\n /**\n * Transaction specific arguments available in the app's\n * approval program and clear state program.\n */\n args?: Uint8Array[]\n\n /**\n * List of accounts in addition to the sender that may be accessed\n * from the app's approval program and clear state program.\n */\n accountReferences?: Address[]\n\n /**\n * List of apps in addition to the current app that may be called\n * from the app's approval program and clear state program.\n */\n appReferences?: bigint[]\n\n /**\n * Lists the assets whose parameters may be accessed by this app's\n * approval program and clear state program.\n *\n * The access is read-only.\n */\n assetReferences?: bigint[]\n\n /**\n * The boxes that should be made available for the runtime of the program.\n */\n boxReferences?: BoxReference[]\n\n /**\n * Resources accessed by the application\n */\n accessReferences?: ResourceReference[]\n\n /**\n * If set, the transaction will be rejected when the app's version is greater than or equal to this value. This can be used to prevent calling an app after it has been updated. Set to 0 or leave undefined to skip the version check.\n * */\n rejectVersion?: number\n}\n\n/**\n * On-completion actions for application transactions.\n *\n * These values define what additional actions occur with the transaction.\n */\nexport enum OnApplicationComplete {\n /**\n * NoOp indicates that an app transaction will simply call its\n * approval program without any additional action.\n */\n NoOp,\n /**\n * OptIn indicates that an app transaction will allocate some\n * local state for the app in the sender's account.\n */\n OptIn,\n /**\n * CloseOut indicates that an app transaction will deallocate\n * some local state for the app from the user's account.\n */\n CloseOut,\n /**\n * ClearState is similar to CloseOut, but may never fail. This\n * allows users to reclaim their minimum balance from an app\n * they no longer wish to opt in to.\n */\n ClearState,\n /**\n * UpdateApplication indicates that an app transaction will\n * update the approval program and clear state program for the app.\n */\n UpdateApplication,\n /**\n * DeleteApplication indicates that an app transaction will\n * delete the app parameters for the app from the creator's\n * balance record.\n */\n DeleteApplication,\n}\n\n/**\n * Schema for app state storage.\n *\n * Defines the maximum number of values that may be stored in app\n * key/value storage for both global and local state.\n */\nexport type StateSchema = {\n /**\n * Maximum number of integer values that may be stored.\n */\n numUints: number\n\n /**\n * Maximum number of byte slice values that may be stored.\n */\n numByteSlices: number\n}\n\n/**\n * Box reference for app call transactions.\n *\n * References a specific box that should be made available for the runtime\n * of the program.\n */\nexport type BoxReference = {\n /**\n * App ID that owns the box.\n * A value of 0 indicates the current app.\n */\n appId: bigint\n\n /**\n * Name of the box.\n */\n name: Uint8Array\n}\n\n/**\n * Names a single resource reference. Only one of the fields should be set.\n */\nexport type ResourceReference = {\n /** Any account addresses whose balance record is accessible by the executing ApprovalProgram or ClearStateProgram. */\n address?: Address\n /** Application ID whose GlobalState may be read by the executing ApprovalProgram or ClearStateProgram. */\n appId?: bigint\n /** Asset ID whose AssetParams may be read by the executing ApprovalProgram or ClearStateProgram. */\n assetId?: bigint\n /** Defines a holding by referring to an Address and Asset it belongs to. */\n holding?: HoldingReference\n /** Defines a local state by referring to an Address and App it belongs to. */\n locals?: LocalsReference\n /** Defines a box by its name and the application ID it belongs to. */\n box?: BoxReference\n}\n\n/**\n * A grouping of the asset index and address of the account\n */\nexport type HoldingReference = {\n /** The asset index of the holding */\n assetId: bigint\n\n /** The address of the account holding the asset */\n address: Address\n}\n\n/** A grouping of the application index and address of the account\n */\nexport type LocalsReference = {\n /** The application index of the local state */\n appId: bigint\n\n /** The address of the account holding the local state */\n address: Address\n}\n\nconst FIELD_ARGS = 'Args'\nconst FIELD_APPROVAL_PROGRAM = 'Approval program'\nconst FIELD_CLEAR_STATE_PROGRAM = 'Clear state program'\nconst FIELD_GLOBAL_STATE_SCHEMA = 'Global state schema'\nconst FIELD_LOCAL_STATE_SCHEMA = 'Local state schema'\nconst FIELD_EXTRA_PROGRAM_PAGES = 'Extra program pages'\n\n/**\n * Validate app call transaction fields\n */\nexport function validateAppCallTransaction(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (appCall.appId === 0n) {\n // App creation\n errors.push(...validateAppCreation(appCall))\n } else {\n // App call, update, or delete\n errors.push(...validateAppOperation(appCall))\n }\n\n // Common validations for all app operations\n errors.push(...validateAppCommonFields(appCall))\n\n return errors\n}\n\n/**\n * Validate app creation fields\n */\nfunction validateAppCreation(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (!appCall.approvalProgram || appCall.approvalProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_APPROVAL_PROGRAM })\n }\n\n if (!appCall.clearStateProgram || appCall.clearStateProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_CLEAR_STATE_PROGRAM })\n }\n\n const extraPages = appCall.extraProgramPages ?? 0\n if (extraPages > MAX_EXTRA_PROGRAM_PAGES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_EXTRA_PROGRAM_PAGES, actual: extraPages, max: MAX_EXTRA_PROGRAM_PAGES, unit: 'pages' },\n })\n }\n\n const maxProgramSize = PROGRAM_PAGE_SIZE + extraPages * PROGRAM_PAGE_SIZE\n\n if (appCall.approvalProgram && appCall.approvalProgram.length > maxProgramSize) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_APPROVAL_PROGRAM, actual: appCall.approvalProgram.length, max: maxProgramSize, unit: 'bytes' },\n })\n }\n\n if (appCall.clearStateProgram && appCall.clearStateProgram.length > maxProgramSize) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_CLEAR_STATE_PROGRAM, actual: appCall.clearStateProgram.length, max: maxProgramSize, unit: 'bytes' },\n })\n }\n\n const totalProgramSize = (appCall.approvalProgram?.length ?? 0) + (appCall.clearStateProgram?.length ?? 0)\n if (totalProgramSize > maxProgramSize) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Combined approval and clear state programs', actual: totalProgramSize, max: maxProgramSize, unit: 'bytes' },\n })\n }\n\n if (appCall.globalStateSchema) {\n const totalKeys = appCall.globalStateSchema.numUints + appCall.globalStateSchema.numByteSlices\n if (totalKeys > MAX_GLOBAL_STATE_KEYS) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: {\n field: FIELD_GLOBAL_STATE_SCHEMA,\n actual: appCall.globalStateSchema.numUints + appCall.globalStateSchema.numByteSlices,\n max: MAX_GLOBAL_STATE_KEYS,\n unit: 'keys',\n },\n })\n }\n }\n\n if (appCall.localStateSchema) {\n const totalKeys = appCall.localStateSchema.numUints + appCall.localStateSchema.numByteSlices\n if (totalKeys > MAX_LOCAL_STATE_KEYS) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: {\n field: FIELD_LOCAL_STATE_SCHEMA,\n actual: appCall.localStateSchema.numUints + appCall.localStateSchema.numByteSlices,\n max: MAX_LOCAL_STATE_KEYS,\n unit: 'keys',\n },\n })\n }\n }\n\n return errors\n}\n\n/**\n * Validate app operation (update, delete, call) fields\n */\nfunction validateAppOperation(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (appCall.onComplete === OnApplicationComplete.UpdateApplication) {\n if (!appCall.approvalProgram || appCall.approvalProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_APPROVAL_PROGRAM })\n }\n if (!appCall.clearStateProgram || appCall.clearStateProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_CLEAR_STATE_PROGRAM })\n }\n }\n\n // These fields are immutable and cannot be set for existing apps\n if (appCall.globalStateSchema !== undefined) {\n errors.push({ type: TransactionValidationErrorType.ImmutableField, data: FIELD_GLOBAL_STATE_SCHEMA })\n }\n if (appCall.localStateSchema !== undefined) {\n errors.push({ type: TransactionValidationErrorType.ImmutableField, data: FIELD_LOCAL_STATE_SCHEMA })\n }\n if (appCall.extraProgramPages !== undefined) {\n errors.push({ type: TransactionValidationErrorType.ImmutableField, data: FIELD_EXTRA_PROGRAM_PAGES })\n }\n\n return errors\n}\n\n/**\n * Validate common app call fields\n */\nfunction validateAppCommonFields(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (appCall.args) {\n if (appCall.args.length > MAX_APP_ARGS) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_ARGS, actual: appCall.args.length, max: MAX_APP_ARGS, unit: 'arguments' },\n })\n }\n\n const totalArgsSize = appCall.args.reduce((sum, arg) => sum + arg.length, 0)\n if (totalArgsSize > MAX_ARGS_SIZE) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Args total size', actual: totalArgsSize, max: MAX_ARGS_SIZE, unit: 'bytes' },\n })\n }\n }\n\n if (appCall.accountReferences && appCall.accountReferences.length > MAX_ACCOUNT_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Account references', actual: appCall.accountReferences.length, max: MAX_ACCOUNT_REFERENCES, unit: 'refs' },\n })\n }\n\n if (appCall.appReferences && appCall.appReferences.length > MAX_APP_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'App references', actual: appCall.appReferences.length, max: MAX_APP_REFERENCES, unit: 'refs' },\n })\n }\n\n if (appCall.assetReferences && appCall.assetReferences.length > MAX_ASSET_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Asset references', actual: appCall.assetReferences.length, max: MAX_ASSET_REFERENCES, unit: 'refs' },\n })\n }\n\n // Validate box references\n if (appCall.boxReferences) {\n if (appCall.boxReferences.length > MAX_BOX_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Box references', actual: appCall.boxReferences.length, max: MAX_BOX_REFERENCES, unit: 'refs' },\n })\n }\n\n // Validate that box reference app IDs are in app references\n const appRefs = appCall.appReferences || []\n for (const boxRef of appCall.boxReferences) {\n if (boxRef.appId !== 0n && boxRef.appId !== appCall.appId && !appRefs.includes(boxRef.appId)) {\n errors.push({\n type: TransactionValidationErrorType.ArbitraryConstraint,\n data: `Box reference for app ID ${boxRef.appId} must be in app references`,\n })\n }\n }\n }\n\n // Validate overall reference count\n const totalReferences =\n (appCall.accountReferences?.length || 0) +\n (appCall.appReferences?.length || 0) +\n (appCall.assetReferences?.length || 0) +\n (appCall.boxReferences?.length || 0)\n\n if (totalReferences > MAX_OVERALL_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Total references', actual: totalReferences, max: MAX_OVERALL_REFERENCES, unit: 'refs' },\n })\n }\n\n return errors\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-call.js","names":["PROGRAM_PAGE_SIZE","MAX_ARGS_SIZE"],"sources":["../../../../../packages/transact/src/transactions/app-call.ts"],"sourcesContent":["import {\n Address,\n MAX_ACCOUNT_REFERENCES,\n MAX_APP_ARGS,\n MAX_APP_REFERENCES,\n MAX_ARGS_SIZE,\n MAX_ASSET_REFERENCES,\n MAX_BOX_REFERENCES,\n MAX_EXTRA_PROGRAM_PAGES,\n MAX_GLOBAL_STATE_KEYS,\n MAX_LOCAL_STATE_KEYS,\n MAX_OVERALL_REFERENCES,\n PROGRAM_PAGE_SIZE,\n} from '@algorandfoundation/algokit-common'\nimport { TransactionValidationError, TransactionValidationErrorType } from './common'\n\n/**\n * Represents an app call transaction that interacts with Algorand Smart Contracts.\n *\n * App call transactions are used to create, update, delete, opt-in to,\n * close out of, or clear state from Algorand apps (smart contracts).\n */\nexport type AppCallTransactionFields = {\n /**\n * ID of the app being called.\n *\n * Set this to 0 to indicate an app creation call.\n */\n appId: bigint\n\n /**\n * Defines what additional actions occur with the transaction.\n */\n onComplete: OnApplicationComplete\n\n /**\n * Logic executed for every app call transaction, except when\n * on-completion is set to \"clear\".\n *\n * Approval programs may reject the transaction.\n * Only required for app creation and update transactions.\n */\n approvalProgram?: Uint8Array\n\n /**\n * Logic executed for app call transactions with on-completion set to \"clear\".\n *\n * Clear state programs cannot reject the transaction.\n * Only required for app creation and update transactions.\n */\n clearStateProgram?: Uint8Array\n\n /**\n * Holds the maximum number of global state values.\n *\n * Only required for app creation transactions.\n * This cannot be changed after creation.\n */\n globalStateSchema?: StateSchema\n\n /**\n * Holds the maximum number of local state values.\n *\n * Only required for app creation transactions.\n * This cannot be changed after creation.\n */\n localStateSchema?: StateSchema\n\n /**\n * Number of additional pages allocated to the app's approval\n * and clear state programs.\n *\n * Each extra program page is 2048 bytes. The sum of approval program\n * and clear state program may not exceed 2048*(1+extra_program_pages) bytes.\n * Currently, the maximum value is 3.\n * This cannot be changed after creation.\n */\n extraProgramPages?: number\n\n /**\n * Transaction specific arguments available in the app's\n * approval program and clear state program.\n */\n args?: Uint8Array[]\n\n /**\n * List of accounts in addition to the sender that may be accessed\n * from the app's approval program and clear state program.\n */\n accountReferences?: Address[]\n\n /**\n * List of apps in addition to the current app that may be called\n * from the app's approval program and clear state program.\n */\n appReferences?: bigint[]\n\n /**\n * Lists the assets whose parameters may be accessed by this app's\n * approval program and clear state program.\n *\n * The access is read-only.\n */\n assetReferences?: bigint[]\n\n /**\n * The boxes that should be made available for the runtime of the program.\n */\n boxReferences?: BoxReference[]\n\n /**\n * Resources accessed by the application\n */\n accessReferences?: ResourceReference[]\n\n /**\n * If set, the transaction will be rejected when the app's version is greater than or equal to this value. This can be used to prevent calling an app after it has been updated. Set to 0 or leave undefined to skip the version check.\n * */\n rejectVersion?: number\n}\n\n/**\n * On-completion actions for application transactions.\n *\n * These values define what additional actions occur with the transaction.\n */\nexport enum OnApplicationComplete {\n /**\n * NoOp indicates that an app transaction will simply call its\n * approval program without any additional action.\n */\n NoOp,\n /**\n * OptIn indicates that an app transaction will allocate some\n * local state for the app in the sender's account.\n */\n OptIn,\n /**\n * CloseOut indicates that an app transaction will deallocate\n * some local state for the app from the user's account.\n */\n CloseOut,\n /**\n * ClearState is similar to CloseOut, but may never fail. This\n * allows users to reclaim their minimum balance from an app\n * they no longer wish to opt in to.\n */\n ClearState,\n /**\n * UpdateApplication indicates that an app transaction will\n * update the approval program and clear state program for the app.\n */\n UpdateApplication,\n /**\n * DeleteApplication indicates that an app transaction will\n * delete the app parameters for the app from the creator's\n * balance record.\n */\n DeleteApplication,\n}\n\n/**\n * Schema for app state storage.\n *\n * Defines the maximum number of values that may be stored in app\n * key/value storage for both global and local state.\n */\nexport type StateSchema = {\n /**\n * Maximum number of integer values that may be stored.\n */\n numUints: number\n\n /**\n * Maximum number of byte slice values that may be stored.\n */\n numByteSlices: number\n}\n\n/**\n * Box reference for app call transactions.\n *\n * References a specific box that should be made available for the runtime\n * of the program.\n */\nexport type BoxReference = {\n /**\n * App ID that owns the box.\n * A value of 0 indicates the current app.\n */\n appId: bigint\n\n /**\n * Name of the box.\n */\n name: Uint8Array\n}\n\n/**\n * Names a single resource reference. Only one of the fields should be set.\n */\nexport type ResourceReference = {\n /** Any account addresses whose balance record is accessible by the executing ApprovalProgram or ClearStateProgram. */\n address?: Address\n /** Application ID whose GlobalState may be read by the executing ApprovalProgram or ClearStateProgram. */\n appId?: bigint\n /** Asset ID whose AssetParams may be read by the executing ApprovalProgram or ClearStateProgram. */\n assetId?: bigint\n /** Defines a holding by referring to an Address and Asset it belongs to. */\n holding?: HoldingReference\n /** Defines a local state by referring to an Address and App it belongs to. */\n locals?: LocalsReference\n /** Defines a box by its name and the application ID it belongs to. */\n box?: BoxReference\n}\n\n/**\n * A grouping of the asset index and address of the account\n */\nexport type HoldingReference = {\n /** The asset index of the holding */\n assetId: bigint\n\n /** The address of the account holding the asset */\n address: Address\n}\n\n/** A grouping of the application index and address of the account\n */\nexport type LocalsReference = {\n /** The application index of the local state */\n appId: bigint\n\n /** The address of the account holding the local state */\n address: Address\n}\n\nconst FIELD_ARGS = 'Args'\nconst FIELD_APPROVAL_PROGRAM = 'Approval program'\nconst FIELD_CLEAR_STATE_PROGRAM = 'Clear state program'\nconst FIELD_GLOBAL_STATE_SCHEMA = 'Global state schema'\nconst FIELD_LOCAL_STATE_SCHEMA = 'Local state schema'\nconst FIELD_EXTRA_PROGRAM_PAGES = 'Extra program pages'\n\n/**\n * Validate app call transaction fields\n */\nexport function validateAppCallTransaction(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (appCall.appId === 0n) {\n // App creation\n errors.push(...validateAppCreation(appCall))\n } else {\n // App call, update, or delete\n errors.push(...validateAppOperation(appCall))\n }\n\n // Common validations for all app operations\n errors.push(...validateAppCommonFields(appCall))\n\n return errors\n}\n\n/**\n * Validate app creation fields\n */\nfunction validateAppCreation(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (!appCall.approvalProgram || appCall.approvalProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_APPROVAL_PROGRAM })\n }\n\n if (!appCall.clearStateProgram || appCall.clearStateProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_CLEAR_STATE_PROGRAM })\n }\n\n const extraPages = appCall.extraProgramPages ?? 0\n if (extraPages > MAX_EXTRA_PROGRAM_PAGES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_EXTRA_PROGRAM_PAGES, actual: extraPages, max: MAX_EXTRA_PROGRAM_PAGES, unit: 'pages' },\n })\n }\n\n const maxProgramSize = PROGRAM_PAGE_SIZE + extraPages * PROGRAM_PAGE_SIZE\n\n if (appCall.approvalProgram && appCall.approvalProgram.length > maxProgramSize) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_APPROVAL_PROGRAM, actual: appCall.approvalProgram.length, max: maxProgramSize, unit: 'bytes' },\n })\n }\n\n if (appCall.clearStateProgram && appCall.clearStateProgram.length > maxProgramSize) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_CLEAR_STATE_PROGRAM, actual: appCall.clearStateProgram.length, max: maxProgramSize, unit: 'bytes' },\n })\n }\n\n const totalProgramSize = (appCall.approvalProgram?.length ?? 0) + (appCall.clearStateProgram?.length ?? 0)\n if (totalProgramSize > maxProgramSize) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Combined approval and clear state programs', actual: totalProgramSize, max: maxProgramSize, unit: 'bytes' },\n })\n }\n\n if (appCall.globalStateSchema) {\n const totalKeys = appCall.globalStateSchema.numUints + appCall.globalStateSchema.numByteSlices\n if (totalKeys > MAX_GLOBAL_STATE_KEYS) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: {\n field: FIELD_GLOBAL_STATE_SCHEMA,\n actual: appCall.globalStateSchema.numUints + appCall.globalStateSchema.numByteSlices,\n max: MAX_GLOBAL_STATE_KEYS,\n unit: 'keys',\n },\n })\n }\n }\n\n if (appCall.localStateSchema) {\n const totalKeys = appCall.localStateSchema.numUints + appCall.localStateSchema.numByteSlices\n if (totalKeys > MAX_LOCAL_STATE_KEYS) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: {\n field: FIELD_LOCAL_STATE_SCHEMA,\n actual: appCall.localStateSchema.numUints + appCall.localStateSchema.numByteSlices,\n max: MAX_LOCAL_STATE_KEYS,\n unit: 'keys',\n },\n })\n }\n }\n\n return errors\n}\n\n/**\n * Validate app operation (update, delete, call) fields\n */\nfunction validateAppOperation(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (appCall.onComplete === OnApplicationComplete.UpdateApplication) {\n if (!appCall.approvalProgram || appCall.approvalProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_APPROVAL_PROGRAM })\n }\n if (!appCall.clearStateProgram || appCall.clearStateProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_CLEAR_STATE_PROGRAM })\n }\n }\n\n // These fields are immutable and cannot be set for existing apps\n if (appCall.globalStateSchema !== undefined) {\n errors.push({ type: TransactionValidationErrorType.ImmutableField, data: FIELD_GLOBAL_STATE_SCHEMA })\n }\n if (appCall.localStateSchema !== undefined) {\n errors.push({ type: TransactionValidationErrorType.ImmutableField, data: FIELD_LOCAL_STATE_SCHEMA })\n }\n if (appCall.extraProgramPages !== undefined) {\n errors.push({ type: TransactionValidationErrorType.ImmutableField, data: FIELD_EXTRA_PROGRAM_PAGES })\n }\n\n return errors\n}\n\n/**\n * Validate common app call fields\n */\nfunction validateAppCommonFields(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (appCall.args) {\n if (appCall.args.length > MAX_APP_ARGS) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_ARGS, actual: appCall.args.length, max: MAX_APP_ARGS, unit: 'arguments' },\n })\n }\n\n const totalArgsSize = appCall.args.reduce((sum, arg) => sum + arg.length, 0)\n if (totalArgsSize > MAX_ARGS_SIZE) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Args total size', actual: totalArgsSize, max: MAX_ARGS_SIZE, unit: 'bytes' },\n })\n }\n }\n\n if (appCall.accountReferences && appCall.accountReferences.length > MAX_ACCOUNT_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Account references', actual: appCall.accountReferences.length, max: MAX_ACCOUNT_REFERENCES, unit: 'refs' },\n })\n }\n\n if (appCall.appReferences && appCall.appReferences.length > MAX_APP_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'App references', actual: appCall.appReferences.length, max: MAX_APP_REFERENCES, unit: 'refs' },\n })\n }\n\n if (appCall.assetReferences && appCall.assetReferences.length > MAX_ASSET_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Asset references', actual: appCall.assetReferences.length, max: MAX_ASSET_REFERENCES, unit: 'refs' },\n })\n }\n\n // Validate box references\n if (appCall.boxReferences) {\n if (appCall.boxReferences.length > MAX_BOX_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Box references', actual: appCall.boxReferences.length, max: MAX_BOX_REFERENCES, unit: 'refs' },\n })\n }\n\n // Validate that box reference app IDs are in app references\n const appRefs = appCall.appReferences || []\n for (const boxRef of appCall.boxReferences) {\n if (boxRef.appId !== 0n && boxRef.appId !== appCall.appId && !appRefs.includes(boxRef.appId)) {\n errors.push({\n type: TransactionValidationErrorType.ArbitraryConstraint,\n data: `Box reference for app ID ${boxRef.appId} must be in app references`,\n })\n }\n }\n }\n\n // Validate overall reference count\n const totalReferences =\n (appCall.accountReferences?.length || 0) +\n (appCall.appReferences?.length || 0) +\n (appCall.assetReferences?.length || 0) +\n (appCall.boxReferences?.length || 0)\n\n if (totalReferences > MAX_OVERALL_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Total references', actual: totalReferences, max: MAX_OVERALL_REFERENCES, unit: 'refs' },\n })\n }\n\n return errors\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { MAX_ARGS_SIZE, PROGRAM_PAGE_SIZE } from "../../../common/src/constants.mjs";
|
|
2
|
-
import { TransactionValidationErrorType } from "./common.mjs";
|
|
3
2
|
//#region packages/transact/src/transactions/app-call.ts
|
|
4
3
|
/**
|
|
5
4
|
* On-completion actions for application transactions.
|
|
@@ -63,16 +62,16 @@ function validateAppCallTransaction(appCall) {
|
|
|
63
62
|
function validateAppCreation(appCall) {
|
|
64
63
|
const errors = new Array();
|
|
65
64
|
if (!appCall.approvalProgram || appCall.approvalProgram.length === 0) errors.push({
|
|
66
|
-
type:
|
|
65
|
+
type: 0,
|
|
67
66
|
data: FIELD_APPROVAL_PROGRAM
|
|
68
67
|
});
|
|
69
68
|
if (!appCall.clearStateProgram || appCall.clearStateProgram.length === 0) errors.push({
|
|
70
|
-
type:
|
|
69
|
+
type: 0,
|
|
71
70
|
data: FIELD_CLEAR_STATE_PROGRAM
|
|
72
71
|
});
|
|
73
72
|
const extraPages = appCall.extraProgramPages ?? 0;
|
|
74
73
|
if (extraPages > 3) errors.push({
|
|
75
|
-
type:
|
|
74
|
+
type: 1,
|
|
76
75
|
data: {
|
|
77
76
|
field: FIELD_EXTRA_PROGRAM_PAGES,
|
|
78
77
|
actual: extraPages,
|
|
@@ -82,7 +81,7 @@ function validateAppCreation(appCall) {
|
|
|
82
81
|
});
|
|
83
82
|
const maxProgramSize = PROGRAM_PAGE_SIZE + extraPages * PROGRAM_PAGE_SIZE;
|
|
84
83
|
if (appCall.approvalProgram && appCall.approvalProgram.length > maxProgramSize) errors.push({
|
|
85
|
-
type:
|
|
84
|
+
type: 1,
|
|
86
85
|
data: {
|
|
87
86
|
field: FIELD_APPROVAL_PROGRAM,
|
|
88
87
|
actual: appCall.approvalProgram.length,
|
|
@@ -91,7 +90,7 @@ function validateAppCreation(appCall) {
|
|
|
91
90
|
}
|
|
92
91
|
});
|
|
93
92
|
if (appCall.clearStateProgram && appCall.clearStateProgram.length > maxProgramSize) errors.push({
|
|
94
|
-
type:
|
|
93
|
+
type: 1,
|
|
95
94
|
data: {
|
|
96
95
|
field: FIELD_CLEAR_STATE_PROGRAM,
|
|
97
96
|
actual: appCall.clearStateProgram.length,
|
|
@@ -101,7 +100,7 @@ function validateAppCreation(appCall) {
|
|
|
101
100
|
});
|
|
102
101
|
const totalProgramSize = (appCall.approvalProgram?.length ?? 0) + (appCall.clearStateProgram?.length ?? 0);
|
|
103
102
|
if (totalProgramSize > maxProgramSize) errors.push({
|
|
104
|
-
type:
|
|
103
|
+
type: 1,
|
|
105
104
|
data: {
|
|
106
105
|
field: "Combined approval and clear state programs",
|
|
107
106
|
actual: totalProgramSize,
|
|
@@ -111,7 +110,7 @@ function validateAppCreation(appCall) {
|
|
|
111
110
|
});
|
|
112
111
|
if (appCall.globalStateSchema) {
|
|
113
112
|
if (appCall.globalStateSchema.numUints + appCall.globalStateSchema.numByteSlices > 64) errors.push({
|
|
114
|
-
type:
|
|
113
|
+
type: 1,
|
|
115
114
|
data: {
|
|
116
115
|
field: FIELD_GLOBAL_STATE_SCHEMA,
|
|
117
116
|
actual: appCall.globalStateSchema.numUints + appCall.globalStateSchema.numByteSlices,
|
|
@@ -122,7 +121,7 @@ function validateAppCreation(appCall) {
|
|
|
122
121
|
}
|
|
123
122
|
if (appCall.localStateSchema) {
|
|
124
123
|
if (appCall.localStateSchema.numUints + appCall.localStateSchema.numByteSlices > 16) errors.push({
|
|
125
|
-
type:
|
|
124
|
+
type: 1,
|
|
126
125
|
data: {
|
|
127
126
|
field: FIELD_LOCAL_STATE_SCHEMA,
|
|
128
127
|
actual: appCall.localStateSchema.numUints + appCall.localStateSchema.numByteSlices,
|
|
@@ -138,26 +137,26 @@ function validateAppCreation(appCall) {
|
|
|
138
137
|
*/
|
|
139
138
|
function validateAppOperation(appCall) {
|
|
140
139
|
const errors = new Array();
|
|
141
|
-
if (appCall.onComplete ===
|
|
140
|
+
if (appCall.onComplete === 4) {
|
|
142
141
|
if (!appCall.approvalProgram || appCall.approvalProgram.length === 0) errors.push({
|
|
143
|
-
type:
|
|
142
|
+
type: 0,
|
|
144
143
|
data: FIELD_APPROVAL_PROGRAM
|
|
145
144
|
});
|
|
146
145
|
if (!appCall.clearStateProgram || appCall.clearStateProgram.length === 0) errors.push({
|
|
147
|
-
type:
|
|
146
|
+
type: 0,
|
|
148
147
|
data: FIELD_CLEAR_STATE_PROGRAM
|
|
149
148
|
});
|
|
150
149
|
}
|
|
151
150
|
if (appCall.globalStateSchema !== void 0) errors.push({
|
|
152
|
-
type:
|
|
151
|
+
type: 2,
|
|
153
152
|
data: FIELD_GLOBAL_STATE_SCHEMA
|
|
154
153
|
});
|
|
155
154
|
if (appCall.localStateSchema !== void 0) errors.push({
|
|
156
|
-
type:
|
|
155
|
+
type: 2,
|
|
157
156
|
data: FIELD_LOCAL_STATE_SCHEMA
|
|
158
157
|
});
|
|
159
158
|
if (appCall.extraProgramPages !== void 0) errors.push({
|
|
160
|
-
type:
|
|
159
|
+
type: 2,
|
|
161
160
|
data: FIELD_EXTRA_PROGRAM_PAGES
|
|
162
161
|
});
|
|
163
162
|
return errors;
|
|
@@ -169,7 +168,7 @@ function validateAppCommonFields(appCall) {
|
|
|
169
168
|
const errors = new Array();
|
|
170
169
|
if (appCall.args) {
|
|
171
170
|
if (appCall.args.length > 16) errors.push({
|
|
172
|
-
type:
|
|
171
|
+
type: 1,
|
|
173
172
|
data: {
|
|
174
173
|
field: FIELD_ARGS,
|
|
175
174
|
actual: appCall.args.length,
|
|
@@ -179,7 +178,7 @@ function validateAppCommonFields(appCall) {
|
|
|
179
178
|
});
|
|
180
179
|
const totalArgsSize = appCall.args.reduce((sum, arg) => sum + arg.length, 0);
|
|
181
180
|
if (totalArgsSize > 2048) errors.push({
|
|
182
|
-
type:
|
|
181
|
+
type: 1,
|
|
183
182
|
data: {
|
|
184
183
|
field: "Args total size",
|
|
185
184
|
actual: totalArgsSize,
|
|
@@ -189,7 +188,7 @@ function validateAppCommonFields(appCall) {
|
|
|
189
188
|
});
|
|
190
189
|
}
|
|
191
190
|
if (appCall.accountReferences && appCall.accountReferences.length > 8) errors.push({
|
|
192
|
-
type:
|
|
191
|
+
type: 1,
|
|
193
192
|
data: {
|
|
194
193
|
field: "Account references",
|
|
195
194
|
actual: appCall.accountReferences.length,
|
|
@@ -198,7 +197,7 @@ function validateAppCommonFields(appCall) {
|
|
|
198
197
|
}
|
|
199
198
|
});
|
|
200
199
|
if (appCall.appReferences && appCall.appReferences.length > 8) errors.push({
|
|
201
|
-
type:
|
|
200
|
+
type: 1,
|
|
202
201
|
data: {
|
|
203
202
|
field: "App references",
|
|
204
203
|
actual: appCall.appReferences.length,
|
|
@@ -207,7 +206,7 @@ function validateAppCommonFields(appCall) {
|
|
|
207
206
|
}
|
|
208
207
|
});
|
|
209
208
|
if (appCall.assetReferences && appCall.assetReferences.length > 8) errors.push({
|
|
210
|
-
type:
|
|
209
|
+
type: 1,
|
|
211
210
|
data: {
|
|
212
211
|
field: "Asset references",
|
|
213
212
|
actual: appCall.assetReferences.length,
|
|
@@ -217,7 +216,7 @@ function validateAppCommonFields(appCall) {
|
|
|
217
216
|
});
|
|
218
217
|
if (appCall.boxReferences) {
|
|
219
218
|
if (appCall.boxReferences.length > 8) errors.push({
|
|
220
|
-
type:
|
|
219
|
+
type: 1,
|
|
221
220
|
data: {
|
|
222
221
|
field: "Box references",
|
|
223
222
|
actual: appCall.boxReferences.length,
|
|
@@ -227,13 +226,13 @@ function validateAppCommonFields(appCall) {
|
|
|
227
226
|
});
|
|
228
227
|
const appRefs = appCall.appReferences || [];
|
|
229
228
|
for (const boxRef of appCall.boxReferences) if (boxRef.appId !== 0n && boxRef.appId !== appCall.appId && !appRefs.includes(boxRef.appId)) errors.push({
|
|
230
|
-
type:
|
|
229
|
+
type: 4,
|
|
231
230
|
data: `Box reference for app ID ${boxRef.appId} must be in app references`
|
|
232
231
|
});
|
|
233
232
|
}
|
|
234
233
|
const totalReferences = (appCall.accountReferences?.length || 0) + (appCall.appReferences?.length || 0) + (appCall.assetReferences?.length || 0) + (appCall.boxReferences?.length || 0);
|
|
235
234
|
if (totalReferences > 8) errors.push({
|
|
236
|
-
type:
|
|
235
|
+
type: 1,
|
|
237
236
|
data: {
|
|
238
237
|
field: "Total references",
|
|
239
238
|
actual: totalReferences,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-call.mjs","names":[],"sources":["../../../../../packages/transact/src/transactions/app-call.ts"],"sourcesContent":["import {\n Address,\n MAX_ACCOUNT_REFERENCES,\n MAX_APP_ARGS,\n MAX_APP_REFERENCES,\n MAX_ARGS_SIZE,\n MAX_ASSET_REFERENCES,\n MAX_BOX_REFERENCES,\n MAX_EXTRA_PROGRAM_PAGES,\n MAX_GLOBAL_STATE_KEYS,\n MAX_LOCAL_STATE_KEYS,\n MAX_OVERALL_REFERENCES,\n PROGRAM_PAGE_SIZE,\n} from '@algorandfoundation/algokit-common'\nimport { TransactionValidationError, TransactionValidationErrorType } from './common'\n\n/**\n * Represents an app call transaction that interacts with Algorand Smart Contracts.\n *\n * App call transactions are used to create, update, delete, opt-in to,\n * close out of, or clear state from Algorand apps (smart contracts).\n */\nexport type AppCallTransactionFields = {\n /**\n * ID of the app being called.\n *\n * Set this to 0 to indicate an app creation call.\n */\n appId: bigint\n\n /**\n * Defines what additional actions occur with the transaction.\n */\n onComplete: OnApplicationComplete\n\n /**\n * Logic executed for every app call transaction, except when\n * on-completion is set to \"clear\".\n *\n * Approval programs may reject the transaction.\n * Only required for app creation and update transactions.\n */\n approvalProgram?: Uint8Array\n\n /**\n * Logic executed for app call transactions with on-completion set to \"clear\".\n *\n * Clear state programs cannot reject the transaction.\n * Only required for app creation and update transactions.\n */\n clearStateProgram?: Uint8Array\n\n /**\n * Holds the maximum number of global state values.\n *\n * Only required for app creation transactions.\n * This cannot be changed after creation.\n */\n globalStateSchema?: StateSchema\n\n /**\n * Holds the maximum number of local state values.\n *\n * Only required for app creation transactions.\n * This cannot be changed after creation.\n */\n localStateSchema?: StateSchema\n\n /**\n * Number of additional pages allocated to the app's approval\n * and clear state programs.\n *\n * Each extra program page is 2048 bytes. The sum of approval program\n * and clear state program may not exceed 2048*(1+extra_program_pages) bytes.\n * Currently, the maximum value is 3.\n * This cannot be changed after creation.\n */\n extraProgramPages?: number\n\n /**\n * Transaction specific arguments available in the app's\n * approval program and clear state program.\n */\n args?: Uint8Array[]\n\n /**\n * List of accounts in addition to the sender that may be accessed\n * from the app's approval program and clear state program.\n */\n accountReferences?: Address[]\n\n /**\n * List of apps in addition to the current app that may be called\n * from the app's approval program and clear state program.\n */\n appReferences?: bigint[]\n\n /**\n * Lists the assets whose parameters may be accessed by this app's\n * approval program and clear state program.\n *\n * The access is read-only.\n */\n assetReferences?: bigint[]\n\n /**\n * The boxes that should be made available for the runtime of the program.\n */\n boxReferences?: BoxReference[]\n\n /**\n * Resources accessed by the application\n */\n accessReferences?: ResourceReference[]\n\n /**\n * If set, the transaction will be rejected when the app's version is greater than or equal to this value. This can be used to prevent calling an app after it has been updated. Set to 0 or leave undefined to skip the version check.\n * */\n rejectVersion?: number\n}\n\n/**\n * On-completion actions for application transactions.\n *\n * These values define what additional actions occur with the transaction.\n */\nexport enum OnApplicationComplete {\n /**\n * NoOp indicates that an app transaction will simply call its\n * approval program without any additional action.\n */\n NoOp,\n /**\n * OptIn indicates that an app transaction will allocate some\n * local state for the app in the sender's account.\n */\n OptIn,\n /**\n * CloseOut indicates that an app transaction will deallocate\n * some local state for the app from the user's account.\n */\n CloseOut,\n /**\n * ClearState is similar to CloseOut, but may never fail. This\n * allows users to reclaim their minimum balance from an app\n * they no longer wish to opt in to.\n */\n ClearState,\n /**\n * UpdateApplication indicates that an app transaction will\n * update the approval program and clear state program for the app.\n */\n UpdateApplication,\n /**\n * DeleteApplication indicates that an app transaction will\n * delete the app parameters for the app from the creator's\n * balance record.\n */\n DeleteApplication,\n}\n\n/**\n * Schema for app state storage.\n *\n * Defines the maximum number of values that may be stored in app\n * key/value storage for both global and local state.\n */\nexport type StateSchema = {\n /**\n * Maximum number of integer values that may be stored.\n */\n numUints: number\n\n /**\n * Maximum number of byte slice values that may be stored.\n */\n numByteSlices: number\n}\n\n/**\n * Box reference for app call transactions.\n *\n * References a specific box that should be made available for the runtime\n * of the program.\n */\nexport type BoxReference = {\n /**\n * App ID that owns the box.\n * A value of 0 indicates the current app.\n */\n appId: bigint\n\n /**\n * Name of the box.\n */\n name: Uint8Array\n}\n\n/**\n * Names a single resource reference. Only one of the fields should be set.\n */\nexport type ResourceReference = {\n /** Any account addresses whose balance record is accessible by the executing ApprovalProgram or ClearStateProgram. */\n address?: Address\n /** Application ID whose GlobalState may be read by the executing ApprovalProgram or ClearStateProgram. */\n appId?: bigint\n /** Asset ID whose AssetParams may be read by the executing ApprovalProgram or ClearStateProgram. */\n assetId?: bigint\n /** Defines a holding by referring to an Address and Asset it belongs to. */\n holding?: HoldingReference\n /** Defines a local state by referring to an Address and App it belongs to. */\n locals?: LocalsReference\n /** Defines a box by its name and the application ID it belongs to. */\n box?: BoxReference\n}\n\n/**\n * A grouping of the asset index and address of the account\n */\nexport type HoldingReference = {\n /** The asset index of the holding */\n assetId: bigint\n\n /** The address of the account holding the asset */\n address: Address\n}\n\n/** A grouping of the application index and address of the account\n */\nexport type LocalsReference = {\n /** The application index of the local state */\n appId: bigint\n\n /** The address of the account holding the local state */\n address: Address\n}\n\nconst FIELD_ARGS = 'Args'\nconst FIELD_APPROVAL_PROGRAM = 'Approval program'\nconst FIELD_CLEAR_STATE_PROGRAM = 'Clear state program'\nconst FIELD_GLOBAL_STATE_SCHEMA = 'Global state schema'\nconst FIELD_LOCAL_STATE_SCHEMA = 'Local state schema'\nconst FIELD_EXTRA_PROGRAM_PAGES = 'Extra program pages'\n\n/**\n * Validate app call transaction fields\n */\nexport function validateAppCallTransaction(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (appCall.appId === 0n) {\n // App creation\n errors.push(...validateAppCreation(appCall))\n } else {\n // App call, update, or delete\n errors.push(...validateAppOperation(appCall))\n }\n\n // Common validations for all app operations\n errors.push(...validateAppCommonFields(appCall))\n\n return errors\n}\n\n/**\n * Validate app creation fields\n */\nfunction validateAppCreation(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (!appCall.approvalProgram || appCall.approvalProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_APPROVAL_PROGRAM })\n }\n\n if (!appCall.clearStateProgram || appCall.clearStateProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_CLEAR_STATE_PROGRAM })\n }\n\n const extraPages = appCall.extraProgramPages ?? 0\n if (extraPages > MAX_EXTRA_PROGRAM_PAGES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_EXTRA_PROGRAM_PAGES, actual: extraPages, max: MAX_EXTRA_PROGRAM_PAGES, unit: 'pages' },\n })\n }\n\n const maxProgramSize = PROGRAM_PAGE_SIZE + extraPages * PROGRAM_PAGE_SIZE\n\n if (appCall.approvalProgram && appCall.approvalProgram.length > maxProgramSize) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_APPROVAL_PROGRAM, actual: appCall.approvalProgram.length, max: maxProgramSize, unit: 'bytes' },\n })\n }\n\n if (appCall.clearStateProgram && appCall.clearStateProgram.length > maxProgramSize) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_CLEAR_STATE_PROGRAM, actual: appCall.clearStateProgram.length, max: maxProgramSize, unit: 'bytes' },\n })\n }\n\n const totalProgramSize = (appCall.approvalProgram?.length ?? 0) + (appCall.clearStateProgram?.length ?? 0)\n if (totalProgramSize > maxProgramSize) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Combined approval and clear state programs', actual: totalProgramSize, max: maxProgramSize, unit: 'bytes' },\n })\n }\n\n if (appCall.globalStateSchema) {\n const totalKeys = appCall.globalStateSchema.numUints + appCall.globalStateSchema.numByteSlices\n if (totalKeys > MAX_GLOBAL_STATE_KEYS) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: {\n field: FIELD_GLOBAL_STATE_SCHEMA,\n actual: appCall.globalStateSchema.numUints + appCall.globalStateSchema.numByteSlices,\n max: MAX_GLOBAL_STATE_KEYS,\n unit: 'keys',\n },\n })\n }\n }\n\n if (appCall.localStateSchema) {\n const totalKeys = appCall.localStateSchema.numUints + appCall.localStateSchema.numByteSlices\n if (totalKeys > MAX_LOCAL_STATE_KEYS) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: {\n field: FIELD_LOCAL_STATE_SCHEMA,\n actual: appCall.localStateSchema.numUints + appCall.localStateSchema.numByteSlices,\n max: MAX_LOCAL_STATE_KEYS,\n unit: 'keys',\n },\n })\n }\n }\n\n return errors\n}\n\n/**\n * Validate app operation (update, delete, call) fields\n */\nfunction validateAppOperation(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (appCall.onComplete === OnApplicationComplete.UpdateApplication) {\n if (!appCall.approvalProgram || appCall.approvalProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_APPROVAL_PROGRAM })\n }\n if (!appCall.clearStateProgram || appCall.clearStateProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_CLEAR_STATE_PROGRAM })\n }\n }\n\n // These fields are immutable and cannot be set for existing apps\n if (appCall.globalStateSchema !== undefined) {\n errors.push({ type: TransactionValidationErrorType.ImmutableField, data: FIELD_GLOBAL_STATE_SCHEMA })\n }\n if (appCall.localStateSchema !== undefined) {\n errors.push({ type: TransactionValidationErrorType.ImmutableField, data: FIELD_LOCAL_STATE_SCHEMA })\n }\n if (appCall.extraProgramPages !== undefined) {\n errors.push({ type: TransactionValidationErrorType.ImmutableField, data: FIELD_EXTRA_PROGRAM_PAGES })\n }\n\n return errors\n}\n\n/**\n * Validate common app call fields\n */\nfunction validateAppCommonFields(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (appCall.args) {\n if (appCall.args.length > MAX_APP_ARGS) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_ARGS, actual: appCall.args.length, max: MAX_APP_ARGS, unit: 'arguments' },\n })\n }\n\n const totalArgsSize = appCall.args.reduce((sum, arg) => sum + arg.length, 0)\n if (totalArgsSize > MAX_ARGS_SIZE) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Args total size', actual: totalArgsSize, max: MAX_ARGS_SIZE, unit: 'bytes' },\n })\n }\n }\n\n if (appCall.accountReferences && appCall.accountReferences.length > MAX_ACCOUNT_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Account references', actual: appCall.accountReferences.length, max: MAX_ACCOUNT_REFERENCES, unit: 'refs' },\n })\n }\n\n if (appCall.appReferences && appCall.appReferences.length > MAX_APP_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'App references', actual: appCall.appReferences.length, max: MAX_APP_REFERENCES, unit: 'refs' },\n })\n }\n\n if (appCall.assetReferences && appCall.assetReferences.length > MAX_ASSET_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Asset references', actual: appCall.assetReferences.length, max: MAX_ASSET_REFERENCES, unit: 'refs' },\n })\n }\n\n // Validate box references\n if (appCall.boxReferences) {\n if (appCall.boxReferences.length > MAX_BOX_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Box references', actual: appCall.boxReferences.length, max: MAX_BOX_REFERENCES, unit: 'refs' },\n })\n }\n\n // Validate that box reference app IDs are in app references\n const appRefs = appCall.appReferences || []\n for (const boxRef of appCall.boxReferences) {\n if (boxRef.appId !== 0n && boxRef.appId !== appCall.appId && !appRefs.includes(boxRef.appId)) {\n errors.push({\n type: TransactionValidationErrorType.ArbitraryConstraint,\n data: `Box reference for app ID ${boxRef.appId} must be in app references`,\n })\n }\n }\n }\n\n // Validate overall reference count\n const totalReferences =\n (appCall.accountReferences?.length || 0) +\n (appCall.appReferences?.length || 0) +\n (appCall.assetReferences?.length || 0) +\n (appCall.boxReferences?.length || 0)\n\n if (totalReferences > MAX_OVERALL_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Total references', actual: totalReferences, max: MAX_OVERALL_REFERENCES, unit: 'refs' },\n })\n }\n\n return errors\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-call.mjs","names":[],"sources":["../../../../../packages/transact/src/transactions/app-call.ts"],"sourcesContent":["import {\n Address,\n MAX_ACCOUNT_REFERENCES,\n MAX_APP_ARGS,\n MAX_APP_REFERENCES,\n MAX_ARGS_SIZE,\n MAX_ASSET_REFERENCES,\n MAX_BOX_REFERENCES,\n MAX_EXTRA_PROGRAM_PAGES,\n MAX_GLOBAL_STATE_KEYS,\n MAX_LOCAL_STATE_KEYS,\n MAX_OVERALL_REFERENCES,\n PROGRAM_PAGE_SIZE,\n} from '@algorandfoundation/algokit-common'\nimport { TransactionValidationError, TransactionValidationErrorType } from './common'\n\n/**\n * Represents an app call transaction that interacts with Algorand Smart Contracts.\n *\n * App call transactions are used to create, update, delete, opt-in to,\n * close out of, or clear state from Algorand apps (smart contracts).\n */\nexport type AppCallTransactionFields = {\n /**\n * ID of the app being called.\n *\n * Set this to 0 to indicate an app creation call.\n */\n appId: bigint\n\n /**\n * Defines what additional actions occur with the transaction.\n */\n onComplete: OnApplicationComplete\n\n /**\n * Logic executed for every app call transaction, except when\n * on-completion is set to \"clear\".\n *\n * Approval programs may reject the transaction.\n * Only required for app creation and update transactions.\n */\n approvalProgram?: Uint8Array\n\n /**\n * Logic executed for app call transactions with on-completion set to \"clear\".\n *\n * Clear state programs cannot reject the transaction.\n * Only required for app creation and update transactions.\n */\n clearStateProgram?: Uint8Array\n\n /**\n * Holds the maximum number of global state values.\n *\n * Only required for app creation transactions.\n * This cannot be changed after creation.\n */\n globalStateSchema?: StateSchema\n\n /**\n * Holds the maximum number of local state values.\n *\n * Only required for app creation transactions.\n * This cannot be changed after creation.\n */\n localStateSchema?: StateSchema\n\n /**\n * Number of additional pages allocated to the app's approval\n * and clear state programs.\n *\n * Each extra program page is 2048 bytes. The sum of approval program\n * and clear state program may not exceed 2048*(1+extra_program_pages) bytes.\n * Currently, the maximum value is 3.\n * This cannot be changed after creation.\n */\n extraProgramPages?: number\n\n /**\n * Transaction specific arguments available in the app's\n * approval program and clear state program.\n */\n args?: Uint8Array[]\n\n /**\n * List of accounts in addition to the sender that may be accessed\n * from the app's approval program and clear state program.\n */\n accountReferences?: Address[]\n\n /**\n * List of apps in addition to the current app that may be called\n * from the app's approval program and clear state program.\n */\n appReferences?: bigint[]\n\n /**\n * Lists the assets whose parameters may be accessed by this app's\n * approval program and clear state program.\n *\n * The access is read-only.\n */\n assetReferences?: bigint[]\n\n /**\n * The boxes that should be made available for the runtime of the program.\n */\n boxReferences?: BoxReference[]\n\n /**\n * Resources accessed by the application\n */\n accessReferences?: ResourceReference[]\n\n /**\n * If set, the transaction will be rejected when the app's version is greater than or equal to this value. This can be used to prevent calling an app after it has been updated. Set to 0 or leave undefined to skip the version check.\n * */\n rejectVersion?: number\n}\n\n/**\n * On-completion actions for application transactions.\n *\n * These values define what additional actions occur with the transaction.\n */\nexport enum OnApplicationComplete {\n /**\n * NoOp indicates that an app transaction will simply call its\n * approval program without any additional action.\n */\n NoOp,\n /**\n * OptIn indicates that an app transaction will allocate some\n * local state for the app in the sender's account.\n */\n OptIn,\n /**\n * CloseOut indicates that an app transaction will deallocate\n * some local state for the app from the user's account.\n */\n CloseOut,\n /**\n * ClearState is similar to CloseOut, but may never fail. This\n * allows users to reclaim their minimum balance from an app\n * they no longer wish to opt in to.\n */\n ClearState,\n /**\n * UpdateApplication indicates that an app transaction will\n * update the approval program and clear state program for the app.\n */\n UpdateApplication,\n /**\n * DeleteApplication indicates that an app transaction will\n * delete the app parameters for the app from the creator's\n * balance record.\n */\n DeleteApplication,\n}\n\n/**\n * Schema for app state storage.\n *\n * Defines the maximum number of values that may be stored in app\n * key/value storage for both global and local state.\n */\nexport type StateSchema = {\n /**\n * Maximum number of integer values that may be stored.\n */\n numUints: number\n\n /**\n * Maximum number of byte slice values that may be stored.\n */\n numByteSlices: number\n}\n\n/**\n * Box reference for app call transactions.\n *\n * References a specific box that should be made available for the runtime\n * of the program.\n */\nexport type BoxReference = {\n /**\n * App ID that owns the box.\n * A value of 0 indicates the current app.\n */\n appId: bigint\n\n /**\n * Name of the box.\n */\n name: Uint8Array\n}\n\n/**\n * Names a single resource reference. Only one of the fields should be set.\n */\nexport type ResourceReference = {\n /** Any account addresses whose balance record is accessible by the executing ApprovalProgram or ClearStateProgram. */\n address?: Address\n /** Application ID whose GlobalState may be read by the executing ApprovalProgram or ClearStateProgram. */\n appId?: bigint\n /** Asset ID whose AssetParams may be read by the executing ApprovalProgram or ClearStateProgram. */\n assetId?: bigint\n /** Defines a holding by referring to an Address and Asset it belongs to. */\n holding?: HoldingReference\n /** Defines a local state by referring to an Address and App it belongs to. */\n locals?: LocalsReference\n /** Defines a box by its name and the application ID it belongs to. */\n box?: BoxReference\n}\n\n/**\n * A grouping of the asset index and address of the account\n */\nexport type HoldingReference = {\n /** The asset index of the holding */\n assetId: bigint\n\n /** The address of the account holding the asset */\n address: Address\n}\n\n/** A grouping of the application index and address of the account\n */\nexport type LocalsReference = {\n /** The application index of the local state */\n appId: bigint\n\n /** The address of the account holding the local state */\n address: Address\n}\n\nconst FIELD_ARGS = 'Args'\nconst FIELD_APPROVAL_PROGRAM = 'Approval program'\nconst FIELD_CLEAR_STATE_PROGRAM = 'Clear state program'\nconst FIELD_GLOBAL_STATE_SCHEMA = 'Global state schema'\nconst FIELD_LOCAL_STATE_SCHEMA = 'Local state schema'\nconst FIELD_EXTRA_PROGRAM_PAGES = 'Extra program pages'\n\n/**\n * Validate app call transaction fields\n */\nexport function validateAppCallTransaction(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (appCall.appId === 0n) {\n // App creation\n errors.push(...validateAppCreation(appCall))\n } else {\n // App call, update, or delete\n errors.push(...validateAppOperation(appCall))\n }\n\n // Common validations for all app operations\n errors.push(...validateAppCommonFields(appCall))\n\n return errors\n}\n\n/**\n * Validate app creation fields\n */\nfunction validateAppCreation(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (!appCall.approvalProgram || appCall.approvalProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_APPROVAL_PROGRAM })\n }\n\n if (!appCall.clearStateProgram || appCall.clearStateProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_CLEAR_STATE_PROGRAM })\n }\n\n const extraPages = appCall.extraProgramPages ?? 0\n if (extraPages > MAX_EXTRA_PROGRAM_PAGES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_EXTRA_PROGRAM_PAGES, actual: extraPages, max: MAX_EXTRA_PROGRAM_PAGES, unit: 'pages' },\n })\n }\n\n const maxProgramSize = PROGRAM_PAGE_SIZE + extraPages * PROGRAM_PAGE_SIZE\n\n if (appCall.approvalProgram && appCall.approvalProgram.length > maxProgramSize) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_APPROVAL_PROGRAM, actual: appCall.approvalProgram.length, max: maxProgramSize, unit: 'bytes' },\n })\n }\n\n if (appCall.clearStateProgram && appCall.clearStateProgram.length > maxProgramSize) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_CLEAR_STATE_PROGRAM, actual: appCall.clearStateProgram.length, max: maxProgramSize, unit: 'bytes' },\n })\n }\n\n const totalProgramSize = (appCall.approvalProgram?.length ?? 0) + (appCall.clearStateProgram?.length ?? 0)\n if (totalProgramSize > maxProgramSize) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Combined approval and clear state programs', actual: totalProgramSize, max: maxProgramSize, unit: 'bytes' },\n })\n }\n\n if (appCall.globalStateSchema) {\n const totalKeys = appCall.globalStateSchema.numUints + appCall.globalStateSchema.numByteSlices\n if (totalKeys > MAX_GLOBAL_STATE_KEYS) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: {\n field: FIELD_GLOBAL_STATE_SCHEMA,\n actual: appCall.globalStateSchema.numUints + appCall.globalStateSchema.numByteSlices,\n max: MAX_GLOBAL_STATE_KEYS,\n unit: 'keys',\n },\n })\n }\n }\n\n if (appCall.localStateSchema) {\n const totalKeys = appCall.localStateSchema.numUints + appCall.localStateSchema.numByteSlices\n if (totalKeys > MAX_LOCAL_STATE_KEYS) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: {\n field: FIELD_LOCAL_STATE_SCHEMA,\n actual: appCall.localStateSchema.numUints + appCall.localStateSchema.numByteSlices,\n max: MAX_LOCAL_STATE_KEYS,\n unit: 'keys',\n },\n })\n }\n }\n\n return errors\n}\n\n/**\n * Validate app operation (update, delete, call) fields\n */\nfunction validateAppOperation(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (appCall.onComplete === OnApplicationComplete.UpdateApplication) {\n if (!appCall.approvalProgram || appCall.approvalProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_APPROVAL_PROGRAM })\n }\n if (!appCall.clearStateProgram || appCall.clearStateProgram.length === 0) {\n errors.push({ type: TransactionValidationErrorType.RequiredField, data: FIELD_CLEAR_STATE_PROGRAM })\n }\n }\n\n // These fields are immutable and cannot be set for existing apps\n if (appCall.globalStateSchema !== undefined) {\n errors.push({ type: TransactionValidationErrorType.ImmutableField, data: FIELD_GLOBAL_STATE_SCHEMA })\n }\n if (appCall.localStateSchema !== undefined) {\n errors.push({ type: TransactionValidationErrorType.ImmutableField, data: FIELD_LOCAL_STATE_SCHEMA })\n }\n if (appCall.extraProgramPages !== undefined) {\n errors.push({ type: TransactionValidationErrorType.ImmutableField, data: FIELD_EXTRA_PROGRAM_PAGES })\n }\n\n return errors\n}\n\n/**\n * Validate common app call fields\n */\nfunction validateAppCommonFields(appCall: AppCallTransactionFields): TransactionValidationError[] {\n const errors = new Array<TransactionValidationError>()\n\n if (appCall.args) {\n if (appCall.args.length > MAX_APP_ARGS) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: FIELD_ARGS, actual: appCall.args.length, max: MAX_APP_ARGS, unit: 'arguments' },\n })\n }\n\n const totalArgsSize = appCall.args.reduce((sum, arg) => sum + arg.length, 0)\n if (totalArgsSize > MAX_ARGS_SIZE) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Args total size', actual: totalArgsSize, max: MAX_ARGS_SIZE, unit: 'bytes' },\n })\n }\n }\n\n if (appCall.accountReferences && appCall.accountReferences.length > MAX_ACCOUNT_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Account references', actual: appCall.accountReferences.length, max: MAX_ACCOUNT_REFERENCES, unit: 'refs' },\n })\n }\n\n if (appCall.appReferences && appCall.appReferences.length > MAX_APP_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'App references', actual: appCall.appReferences.length, max: MAX_APP_REFERENCES, unit: 'refs' },\n })\n }\n\n if (appCall.assetReferences && appCall.assetReferences.length > MAX_ASSET_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Asset references', actual: appCall.assetReferences.length, max: MAX_ASSET_REFERENCES, unit: 'refs' },\n })\n }\n\n // Validate box references\n if (appCall.boxReferences) {\n if (appCall.boxReferences.length > MAX_BOX_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Box references', actual: appCall.boxReferences.length, max: MAX_BOX_REFERENCES, unit: 'refs' },\n })\n }\n\n // Validate that box reference app IDs are in app references\n const appRefs = appCall.appReferences || []\n for (const boxRef of appCall.boxReferences) {\n if (boxRef.appId !== 0n && boxRef.appId !== appCall.appId && !appRefs.includes(boxRef.appId)) {\n errors.push({\n type: TransactionValidationErrorType.ArbitraryConstraint,\n data: `Box reference for app ID ${boxRef.appId} must be in app references`,\n })\n }\n }\n }\n\n // Validate overall reference count\n const totalReferences =\n (appCall.accountReferences?.length || 0) +\n (appCall.appReferences?.length || 0) +\n (appCall.assetReferences?.length || 0) +\n (appCall.boxReferences?.length || 0)\n\n if (totalReferences > MAX_OVERALL_REFERENCES) {\n errors.push({\n type: TransactionValidationErrorType.FieldTooLong,\n data: { field: 'Total references', actual: totalReferences, max: MAX_OVERALL_REFERENCES, unit: 'refs' },\n })\n }\n\n return errors\n}\n"],"mappings":"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"}
|