algorand-python-testing 1.2.0b1__tar.gz → 1.2.0b3__tar.gz
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.
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/CHANGELOG.md +12 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/PKG-INFO +1 -1
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/coverage.md +2 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/index.md +4 -4
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/concepts.md +2 -2
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/contract-testing.md +5 -5
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/subroutines.md +3 -1
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/transactions.md +71 -2
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/marketplace/contract.py +0 -3
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/proof_of_attendance/contract.py +13 -13
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/simple_voting/contract.py +0 -4
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/pyproject.toml +1 -1
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/__init__.py +5 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/context_helpers/txn_context.py +4 -4
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/itxn.py +11 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy/__init__.py +5 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_abi_call.py +2 -2
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/StaticSizeContract.approval.teal +45 -45
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/StaticSizeContract.arc56.json +1 -1
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/static_size.py +0 -1
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Contains/contract.py +0 -5
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Contains/data/MyContract.approval.teal +12 -15
- algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/contract.py +63 -0
- algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/data/DynamicItxnGroup.approval.teal +284 -0
- algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/data/DynamicItxnGroup.arc56.json +161 -0
- algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/data/VerifierContract.approval.teal +66 -0
- algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/data/VerifierContract.arc56.json +90 -0
- algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/verifier.py +16 -0
- algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal +7 -0
- algorand_python_testing-1.2.0b3/tests/artifacts/Tuples/data/TuplesContract.clear.teal +7 -0
- algorand_python_testing-1.2.0b3/tests/dynamic_itxn_group/test_dynamic_itxn_group.py +67 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/models/test_contract.py +1 -3
- algorand_python_testing-1.2.0b3/tests/utilities/__init__.py +0 -0
- algorand_python_testing-1.2.0b3/tests/value_generators/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.coveragerc +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.editorconfig +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.github/dependabot.yml +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.github/pull_request_template.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.github/workflows/cd.yaml +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.github/workflows/ci.yaml +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.github/workflows/gh-pages.yaml +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.gitignore +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.pre-commit-config.yaml +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.vscode/extensions.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.vscode/launch.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.vscode/settings.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/CONTRIBUTING.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/LICENSE +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/README.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/Makefile +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/_static/custom.css +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/algopy.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/api.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/conf.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/examples.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/faq.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/make.bat +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/arc4-types.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/avm-types.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/index.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/opcodes.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/signature-testing.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/state-management.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/README.md +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/auction/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/auction/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/auction/test_contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/htlc_logicsig/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/htlc_logicsig/signature.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/htlc_logicsig/test_signature.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/marketplace/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/marketplace/test_contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/proof_of_attendance/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/proof_of_attendance/test_contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/scratch_storage/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/scratch_storage/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/scratch_storage/test_contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/simple_voting/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/simple_voting/test_contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/zk_whitelist/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/zk_whitelist/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/zk_whitelist/test_contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/scripts/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/scripts/check_stubs_cov.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/scripts/refresh_test_artifacts.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/scripts/validate_examples.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/arc4.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/compiled.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/constants.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/context.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/context_helpers/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/context_helpers/context_storage.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/context_helpers/ledger_context.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/decorators/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/decorators/arc4.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/decorators/subroutine.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/enums.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/gtxn.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/itxn_loader.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/account.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/application.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/asset.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/logicsig.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/template_variable.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/txn_fields.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/unsigned_builtins.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/mutable.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/block.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/constants.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/crypto.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/global_values.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/itxn.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/misc.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/pure.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/txn.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/primitives/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/primitives/array.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/primitives/biguint.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/primitives/bytes.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/primitives/fixed_bytes.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/primitives/string.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/primitives/uint64.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/protocols.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/py.typed +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/serialize.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/state/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/state/box.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/state/global_state.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/state/local_state.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/state/utils.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/utilities/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/utilities/budget.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/utilities/log.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/utilities/size_of.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/utils.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/value_generators/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/value_generators/arc4.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/value_generators/avm.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/value_generators/txn.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy/arc4.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy/gtxn.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy/itxn.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy/op.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy/py.typed +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy_testing/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy_testing/py.typed +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/templates/.macros.j2 +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/templates/.release_notes.md.j2 +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/templates/CHANGELOG.md.j2 +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/conftest.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_address.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_arc4_method_signature.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_bool.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_dynamic_array.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_dynamic_bytes.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_emit.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_static_array.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_string.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_struct.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_tuple.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_ufixednxm.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_uintn.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/Contract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/Contract.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/Contract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/ContractV0.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/ContractV0.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/ContractV0.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/ContractV1.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/ContractV1.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/ContractV1.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4ABIMethod/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4ABIMethod/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4InnerTxns/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4InnerTxns/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4PrimitiveOps/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4PrimitiveOps/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/Contract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/Contract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/Contract.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/Contract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/DynamicArrayInitContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/DynamicArrayInitContract.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/DynamicArrayInitContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/ImmutableArrayContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/ImmutableArrayContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/ImmutableArrayContract.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/ImmutableArrayContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/StaticSizeContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/StaticSizeContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/immutable.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/uint64.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/BoxContract/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/BoxContract/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/BoxContract/data/BoxContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/BoxContract/data/BoxContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/BoxContract/data/BoxContract.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/BoxContract/data/BoxContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Contains/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Contains/data/MyContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppCall.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppCall.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppCall.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppCall.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/other.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CryptoOps/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CryptoOps/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CryptoOps/data/CryptoOpsContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CryptoOps/data/CryptoOpsContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1/tests/artifacts/GlobalStateValidator → algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup}/__init__.py +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/data/DynamicItxnGroup.clear.teal +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/data/VerifierContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1/tests/artifacts/MiscellaneousOps → algorand_python_testing-1.2.0b3/tests/artifacts/GlobalStateValidator}/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/GlobalStateValidator/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc56.json +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1/tests/artifacts/PrimitiveOps → algorand_python_testing-1.2.0b3/tests/artifacts/MiscellaneousOps}/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/MiscellaneousOps/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc56.json +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/StateMutations/data/StateMutations.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1/tests/artifacts/StateMutations → algorand_python_testing-1.2.0b3/tests/artifacts/PrimitiveOps}/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/PrimitiveOps/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc56.json +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1/tests/artifacts/StateOps → algorand_python_testing-1.2.0b3/tests/artifacts/StateMutations}/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateMutations/data/Contract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateMutations/data/Contract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateMutations/data/Contract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateMutations/data/StateMutations.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateMutations/data/StateMutations.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateMutations/data/StateMutations.arc56.json +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateMutations/data/StateMutations.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateMutations/statemutations.py +0 -0
- {algorand_python_testing-1.2.0b1/tests/artifacts/Tuples → algorand_python_testing-1.2.0b3/tests/artifacts/StateOps}/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/GlobalStateContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/GlobalStateContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/GlobalStateContract.arc56.json +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/LocalStateContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/ITxnOpsContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/ITxnOpsContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/ITxnOpsContract.arc56.json +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/LocalStateContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/LocalStateContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/LocalStateContract.arc56.json +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/LocalStateContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGet.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGet.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGet.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc56.json +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppGlobalContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppGlobalContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppGlobalContract.arc56.json +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppGlobalExContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc56.json +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppLocalContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppLocalContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppLocalContract.arc56.json +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppLocalExContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc56.json +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppParamsContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppParamsContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppParamsContract.arc56.json +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAssetHoldingContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc56.json +0 -0
- /algorand_python_testing-1.2.0b1/tests/artifacts/Tuples/data/TuplesContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAssetParamsContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAssetParamsContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAssetParamsContract.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1/tests/artifacts → algorand_python_testing-1.2.0b3/tests/artifacts/Tuples}/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Tuples/contract.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Tuples/data/TuplesContract.approval.teal +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Tuples/data/TuplesContract.arc32.json +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Tuples/data/TuplesContract.arc56.json +0 -0
- {algorand_python_testing-1.2.0b1/tests/avm12 → algorand_python_testing-1.2.0b3/tests/artifacts}/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1/tests/contexts → algorand_python_testing-1.2.0b3/tests/avm12}/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/avm12/conftest.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/avm12/test_avm12.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/common.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/conftest.py +0 -0
- {algorand_python_testing-1.2.0b1/tests/models → algorand_python_testing-1.2.0b3/tests/contexts}/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1/tests/primitives → algorand_python_testing-1.2.0b3/tests/dynamic_itxn_group}/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1/tests/state → algorand_python_testing-1.2.0b3/tests/models}/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/models/test_asset.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/models/test_box.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/models/test_box_map.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/models/test_box_ref.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/models/test_uenumerate.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/models/test_urange.py +0 -0
- {algorand_python_testing-1.2.0b1/tests/utilities → algorand_python_testing-1.2.0b3/tests/primitives}/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/primitives/conftest.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/primitives/test_biguint.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/primitives/test_bytes.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/primitives/test_fixed_bytes.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/primitives/test_string.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/primitives/test_uint64.py +0 -0
- {algorand_python_testing-1.2.0b1/tests/value_generators → algorand_python_testing-1.2.0b3/tests/state}/__init__.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/state/conftest.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/state/test_global_state.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/state/test_local_state.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/state/test_mutations.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/test_array.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/test_context.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/test_miscellaneous_op.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/test_op.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/util.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/utilities/conftest.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/utilities/test_log.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/utilities/test_size_of.py +0 -0
- {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/value_generators/test_avm.py +0 -0
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
|
+
## v1.2.0-beta.3 (2025-12-08)
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* add stage and submit_staged functions to support submitting dynamic number of inner transactions in a group ([`84ad031`](https://github.com/algorandfoundation/algorand-python-testing/commit/84ad03166442dadc10c7c1fe70e4cd07a63600cc))
|
|
7
|
+
|
|
8
|
+
## v1.2.0-beta.2 (2025-12-08)
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* add algopy.public alias for algopy.arc4.abimethod decorator ([`32a2787`](https://github.com/algorandfoundation/algorand-python-testing/commit/32a27877a30f03e5330aa1bdb7a4fadbea543529))
|
|
13
|
+
|
|
2
14
|
## v1.2.0-beta.1 (2025-12-05)
|
|
3
15
|
|
|
4
16
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: algorand-python-testing
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.0b3
|
|
4
4
|
Summary: Algorand Python testing library
|
|
5
5
|
Project-URL: Documentation, https://github.com/algorandfoundation/puya/tree/main/algopy_testing#README.md
|
|
6
6
|
Project-URL: Issues, https://github.com/algorandfoundation/puya/issues
|
|
@@ -40,6 +40,7 @@ See which `algorand-python` stubs are implemented by the `algorand-python-testin
|
|
|
40
40
|
| algopy.ensure_budget | Emulated |
|
|
41
41
|
| algopy.log | Emulated |
|
|
42
42
|
| algopy.logicsig | Emulated |
|
|
43
|
+
| algopy.public | Emulated |
|
|
43
44
|
| algopy.size_of | Emulated |
|
|
44
45
|
| algopy.subroutine | Native |
|
|
45
46
|
| algopy.uenumerate | Native |
|
|
@@ -95,6 +96,7 @@ See which `algorand-python` stubs are implemented by the `algorand-python-testin
|
|
|
95
96
|
| algopy.itxn.KeyRegistrationInnerTransaction | Emulated |
|
|
96
97
|
| algopy.itxn.Payment | Emulated |
|
|
97
98
|
| algopy.itxn.PaymentInnerTransaction | Emulated |
|
|
99
|
+
| algopy.itxn.submit_staged | Emulated |
|
|
98
100
|
| algopy.itxn.submit_txns | Emulated |
|
|
99
101
|
| algopy.op.Base64 | Native |
|
|
100
102
|
| algopy.op.EC | Native |
|
|
@@ -62,7 +62,7 @@ class VotingContract(algopy.ARC4Contract):
|
|
|
62
62
|
)
|
|
63
63
|
self.voted = algopy.LocalState(algopy.UInt64, key="voted", description="Tracks if an account has voted")
|
|
64
64
|
|
|
65
|
-
@
|
|
65
|
+
@algopy.public
|
|
66
66
|
def set_topic(self, topic: arc4.String) -> None:
|
|
67
67
|
self.topic.value = topic.bytes
|
|
68
68
|
|
|
@@ -79,7 +79,7 @@ class VotingContract(algopy.ARC4Contract):
|
|
|
79
79
|
self.voted[algopy.Txn.sender] = algopy.UInt64(1)
|
|
80
80
|
return arc4.Bool(True)
|
|
81
81
|
|
|
82
|
-
@
|
|
82
|
+
@algopy.public(readonly=True)
|
|
83
83
|
def get_votes(self) -> arc4.UInt64:
|
|
84
84
|
return arc4.UInt64(self.votes.value)
|
|
85
85
|
|
|
@@ -141,9 +141,9 @@ This example demonstrates key aspects of testing with `algorand-python-testing`
|
|
|
141
141
|
1. ARC4 Contract Features:
|
|
142
142
|
|
|
143
143
|
- Use of `algopy.ARC4Contract` as the base class for the contract.
|
|
144
|
-
- ABI methods defined using the `@arc4.abimethod
|
|
144
|
+
- ABI methods defined using the `@arc4.abimethod`, or its alias `@algopy.public`, decorator.
|
|
145
145
|
- Use of ARC4-specific types like `arc4.String`, `arc4.Bool`, and `arc4.UInt64`.
|
|
146
|
-
- Readonly method annotation with `@arc4.abimethod(readonly=True)
|
|
146
|
+
- Readonly method annotation with `@arc4.abimethod(readonly=True)` or `@algopy.public(readonly=True)` .
|
|
147
147
|
|
|
148
148
|
2. Testing ARC4 Contracts:
|
|
149
149
|
|
{algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/concepts.md
RENAMED
|
@@ -61,5 +61,5 @@ For a full list of all public `algopy` types and their corresponding implementat
|
|
|
61
61
|
|
|
62
62
|
## Data Validation
|
|
63
63
|
|
|
64
|
-
Algorand Python and the puya compiler have functionality to perform validation of transaction inputs via the `--validate-abi-args`, `--validate-abi-return` CLI arguments, `arc4.abimethod(validate_encoding=...)` decorator and `.validate()` methods.
|
|
65
|
-
The Algorand Python Testing library does
|
|
64
|
+
Algorand Python and the puya compiler have functionality to perform validation of transaction inputs via the `--validate-abi-args`, `--validate-abi-return` CLI arguments, `arc4.abimethod(validate_encoding=...)` decorator (or its alias, `algopy.public`) and `.validate()` methods.
|
|
65
|
+
The Algorand Python Testing library does _NOT_ implement this validation behaviour, as you should test invalid inputs using an integrated test against a real Algorand network.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Smart Contract Testing
|
|
2
2
|
|
|
3
|
-
This guide provides an overview of how to test smart contracts using the Algorand Python SDK (`algopy`). It covers the basics of testing `ARC4Contract` and `Contract` classes, focusing on the `abimethod` and `
|
|
3
|
+
This guide provides an overview of how to test smart contracts using the Algorand Python SDK (`algopy`). It covers the basics of testing `ARC4Contract` and `Contract` classes, focusing on the `baremethod`, `abimethod` and `public` (an alias of `abimethod`) decorators.
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
@@ -24,7 +24,7 @@ context = ctx_manager.__enter__()
|
|
|
24
24
|
|
|
25
25
|
Subclasses of `algopy.ARC4Contract` are **required** to be instantiated with an active test context. As part of instantiation, the test context will automatically create a matching `algopy.Application` object instance.
|
|
26
26
|
|
|
27
|
-
Within the class implementation, methods decorated with `algopy.arc4.abimethod` and `algopy.arc4.baremethod` will automatically assemble an `algopy.gtxn.ApplicationCallTransaction` to emulate the AVM application call. This behaviour can be overridden by setting the transaction group manually as part of test setup; this is done via implicit invocation of the `algopy_testing.context.any_application()` _value generator_ (refer to the [API](../api.md) for more details).
|
|
27
|
+
Within the class implementation, methods decorated with `algopy.arc4.abimethod` (or its alias, `algopy.public`) and `algopy.arc4.baremethod` will automatically assemble an `algopy.gtxn.ApplicationCallTransaction` to emulate the AVM application call. This behaviour can be overridden by setting the transaction group manually as part of test setup; this is done via implicit invocation of the `algopy_testing.context.any_application()` _value generator_ (refer to the [API](../api.md) for more details).
|
|
28
28
|
|
|
29
29
|
```{testcode}
|
|
30
30
|
class SimpleVotingContract(algopy.ARC4Contract):
|
|
@@ -42,14 +42,14 @@ class SimpleVotingContract(algopy.ARC4Contract):
|
|
|
42
42
|
self.topic.value = initial_topic
|
|
43
43
|
self.votes.value = algopy.UInt64(0)
|
|
44
44
|
|
|
45
|
-
@algopy.
|
|
45
|
+
@algopy.public
|
|
46
46
|
def vote(self) -> algopy.UInt64:
|
|
47
47
|
assert self.voted[algopy.Txn.sender] == algopy.UInt64(0), "Account has already voted"
|
|
48
48
|
self.votes.value += algopy.UInt64(1)
|
|
49
49
|
self.voted[algopy.Txn.sender] = algopy.UInt64(1)
|
|
50
50
|
return self.votes.value
|
|
51
51
|
|
|
52
|
-
@algopy.
|
|
52
|
+
@algopy.public(readonly=True)
|
|
53
53
|
def get_votes(self) -> algopy.UInt64:
|
|
54
54
|
return self.votes.value
|
|
55
55
|
|
|
@@ -74,7 +74,7 @@ assert contract.topic.value == initial_topic
|
|
|
74
74
|
assert contract.votes.value == algopy.UInt64(0)
|
|
75
75
|
|
|
76
76
|
# Act - Vote
|
|
77
|
-
# The method `.vote()` is decorated with `algopy.arc4.abimethod`, which means it will assemble a transaction to emulate the AVM application call
|
|
77
|
+
# The method `.vote()` is decorated with `algopy.public`, an alias of `algopy.arc4.abimethod`, which means it will assemble a transaction to emulate the AVM application call
|
|
78
78
|
result = contract.vote()
|
|
79
79
|
|
|
80
80
|
# Assert - you can access the corresponding auto generated application call transaction via test context
|
|
@@ -18,6 +18,8 @@ context = ctx_manager.__enter__()
|
|
|
18
18
|
|
|
19
19
|
The `@algopy.subroutine` decorator exposes contract methods for isolated testing within the Algorand Python Testing framework. This enables focused validation of core business logic without the overhead of full application deployment and execution.
|
|
20
20
|
|
|
21
|
+
`@algopy.subroutine` decorator is optional for the methods in a contract which are not callable externally.
|
|
22
|
+
|
|
21
23
|
## Usage
|
|
22
24
|
|
|
23
25
|
1. Decorate internal methods with `@algopy.subroutine`:
|
|
@@ -26,7 +28,7 @@ The `@algopy.subroutine` decorator exposes contract methods for isolated testing
|
|
|
26
28
|
from algopy import subroutine, UInt64
|
|
27
29
|
|
|
28
30
|
class MyContract:
|
|
29
|
-
@subroutine
|
|
31
|
+
@subroutine # optional
|
|
30
32
|
def calculate_value(self, input: UInt64) -> UInt64:
|
|
31
33
|
return input * UInt64(2)
|
|
32
34
|
```
|
|
@@ -143,7 +143,7 @@ When testing smart contracts, to stay consistent with AVM, the framework _does n
|
|
|
143
143
|
|
|
144
144
|
```{testcode}
|
|
145
145
|
class MyContract(algopy.ARC4Contract):
|
|
146
|
-
@algopy.
|
|
146
|
+
@algopy.public
|
|
147
147
|
def pay_via_itxn(self, asset: algopy.Asset) -> None:
|
|
148
148
|
algopy.itxn.Payment(
|
|
149
149
|
receiver=algopy.Txn.sender,
|
|
@@ -180,7 +180,7 @@ first_payment_txn = first_itxn_group.payment(0)
|
|
|
180
180
|
|
|
181
181
|
In this example, we define a contract method `pay_via_itxn` that creates and submits an inner payment transaction. The test context automatically captures and stores the inner transactions submitted by the contract method.
|
|
182
182
|
|
|
183
|
-
Note that we don't need to wrap the execution in a `create_group` context manager because the method is decorated with `@algopy.arc4.abimethod`, which automatically creates a transaction group for the method. The `create_group` context manager is only needed when you want to create more complex transaction groups or patch transaction fields for various transaction-related opcodes in AVM.
|
|
183
|
+
Note that we don't need to wrap the execution in a `create_group` context manager because the method is decorated with `@algopy.public`, an alias of `@algopy.arc4.abimethod`, which automatically creates a transaction group for the method. The `create_group` context manager is only needed when you want to create more complex transaction groups or patch transaction fields for various transaction-related opcodes in AVM.
|
|
184
184
|
|
|
185
185
|
To access the submitted inner transactions:
|
|
186
186
|
|
|
@@ -190,6 +190,75 @@ To access the submitted inner transactions:
|
|
|
190
190
|
|
|
191
191
|
These methods provide type validation and will raise an error if the requested transaction type doesn't match the actual type of the inner transaction.
|
|
192
192
|
|
|
193
|
+
### Submitting a group with dynamic number of inner transactions
|
|
194
|
+
|
|
195
|
+
`algorand-python` supports composing inner transaction groups with a dynamic number of transactions. To use this feature, call the `.stage()` method on inner transaction classes to queue transactions, then call `algopy.itxn.submit_staged()` to submit all staged transactions as a group.
|
|
196
|
+
|
|
197
|
+
The following example demonstrates how to test this functionality using the `algorand-python-testing` package.
|
|
198
|
+
|
|
199
|
+
```{testcode}
|
|
200
|
+
from algopy import Application, ARC4Contract, Array, Global, arc4, gtxn, itxn, TransactionType, Txn, UInt64, urange
|
|
201
|
+
|
|
202
|
+
class DynamicItxnGroup(ARC4Contract):
|
|
203
|
+
@arc4.abimethod
|
|
204
|
+
def distribute(
|
|
205
|
+
self, addresses: Array[arc4.Address], funds: gtxn.PaymentTransaction, verifier: Application
|
|
206
|
+
) -> None:
|
|
207
|
+
assert funds.receiver == Global.current_application_address, "Funds must be sent to app"
|
|
208
|
+
|
|
209
|
+
assert addresses.length, "must provide some accounts"
|
|
210
|
+
|
|
211
|
+
share = funds.amount // addresses.length
|
|
212
|
+
|
|
213
|
+
itxn.Payment(amount=share, receiver=addresses[0].native).stage(begin_group=True)
|
|
214
|
+
|
|
215
|
+
for i in urange(1, addresses.length):
|
|
216
|
+
addr = addresses[i]
|
|
217
|
+
itxn.Payment(amount=share, receiver=addr.native).stage()
|
|
218
|
+
|
|
219
|
+
itxn.ApplicationCall(
|
|
220
|
+
app_id=verifier.id, app_args=(arc4.arc4_signature("verify()void"),)
|
|
221
|
+
).stage()
|
|
222
|
+
|
|
223
|
+
itxn.AssetConfig(asset_name="abc").stage()
|
|
224
|
+
|
|
225
|
+
itxn.submit_staged()
|
|
226
|
+
|
|
227
|
+
class VerifierContract(ARC4Contract):
|
|
228
|
+
@arc4.abimethod
|
|
229
|
+
def verify(self) -> None:
|
|
230
|
+
for i in urange(Txn.group_index):
|
|
231
|
+
txn = gtxn.Transaction(i)
|
|
232
|
+
assert txn.type == TransactionType.Payment, "Txn must be pay"
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
# create contract instaces
|
|
236
|
+
verifier = VerifierContract()
|
|
237
|
+
dynamic_itxn_group = DynamicItxnGroup()
|
|
238
|
+
|
|
239
|
+
# get application id for contract instances
|
|
240
|
+
verifier_app = context.ledger.get_app(verifier)
|
|
241
|
+
dynamic_itxn_group_app = context.ledger.get_app(dynamic_itxn_group)
|
|
242
|
+
|
|
243
|
+
# create test accounts to distribute funds to and initial fund
|
|
244
|
+
addresses = Array([arc4.Address(context.any.account()) for _ in range(3)])
|
|
245
|
+
payment = context.any.txn.payment(
|
|
246
|
+
amount=UInt64(9),
|
|
247
|
+
receiver=dynamic_itxn_group_app.address,
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
# call contract method which creates inner transactions according to number of addresses passed in
|
|
251
|
+
dynamic_itxn_group.distribute(addresses, payment, verifier_app)
|
|
252
|
+
|
|
253
|
+
# get inner transaction group to assert the details
|
|
254
|
+
itxns = context.txn.last_group.get_itxn_group(-1)
|
|
255
|
+
assert len(itxns) == 5
|
|
256
|
+
for i in range(3):
|
|
257
|
+
assert itxns.payment(i).amount == 3
|
|
258
|
+
assert itxns.application_call(3).app_id == verifier_app
|
|
259
|
+
assert itxns.asset_config(4).asset_name == b"abc"
|
|
260
|
+
```
|
|
261
|
+
|
|
193
262
|
## References
|
|
194
263
|
|
|
195
264
|
- [API](../api.md) for more details on the test context manager and inner transactions related methods that perform implicit inner transaction type validation.
|
{algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/marketplace/contract.py
RENAMED
|
@@ -9,7 +9,6 @@ from algopy import (
|
|
|
9
9
|
gtxn,
|
|
10
10
|
itxn,
|
|
11
11
|
op,
|
|
12
|
-
subroutine,
|
|
13
12
|
)
|
|
14
13
|
from algopy.arc4 import abimethod
|
|
15
14
|
|
|
@@ -32,7 +31,6 @@ class DigitalMarketplace(ARC4Contract):
|
|
|
32
31
|
def __init__(self) -> None:
|
|
33
32
|
self.listings = BoxMap(ListingKey, ListingValue)
|
|
34
33
|
|
|
35
|
-
@subroutine
|
|
36
34
|
def listings_box_mbr(self) -> UInt64:
|
|
37
35
|
return (
|
|
38
36
|
2_500
|
|
@@ -55,7 +53,6 @@ class DigitalMarketplace(ARC4Contract):
|
|
|
55
53
|
* 400
|
|
56
54
|
)
|
|
57
55
|
|
|
58
|
-
@subroutine
|
|
59
56
|
def quantity_price(self, quantity: UInt64, price: UInt64, asset_decimals: UInt64) -> UInt64:
|
|
60
57
|
amount_not_scaled_high, amount_not_scaled_low = op.mulw(price, quantity)
|
|
61
58
|
scaling_factor_high, scaling_factor_low = op.expw(10, asset_decimals)
|
|
@@ -8,12 +8,12 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
8
8
|
self.total_attendees = algopy.UInt64(0)
|
|
9
9
|
self.box_map = algopy.BoxMap(algopy.Bytes, algopy.UInt64)
|
|
10
10
|
|
|
11
|
-
@algopy.
|
|
11
|
+
@algopy.public(create="require")
|
|
12
12
|
def init(self, max_attendees: algopy.UInt64) -> None:
|
|
13
13
|
assert algopy.Txn.sender == algopy.Global.creator_address, "Only creator can initialize"
|
|
14
14
|
self.max_attendees = max_attendees
|
|
15
15
|
|
|
16
|
-
@algopy.
|
|
16
|
+
@algopy.public()
|
|
17
17
|
def confirm_attendance(self) -> None:
|
|
18
18
|
assert self.total_attendees < self.max_attendees, "Max attendees reached"
|
|
19
19
|
|
|
@@ -25,7 +25,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
25
25
|
|
|
26
26
|
algopy.op.Box.put(algopy.Txn.sender.bytes, algopy.op.itob(minted_asset.id))
|
|
27
27
|
|
|
28
|
-
@algopy.
|
|
28
|
+
@algopy.public()
|
|
29
29
|
def confirm_attendance_with_box(self) -> None:
|
|
30
30
|
assert self.total_attendees < self.max_attendees, "Max attendees reached"
|
|
31
31
|
|
|
@@ -38,7 +38,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
38
38
|
|
|
39
39
|
box.value = minted_asset.id
|
|
40
40
|
|
|
41
|
-
@algopy.
|
|
41
|
+
@algopy.public()
|
|
42
42
|
def confirm_attendance_with_box_ref(self) -> None:
|
|
43
43
|
assert self.total_attendees < self.max_attendees, "Max attendees reached"
|
|
44
44
|
|
|
@@ -51,7 +51,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
51
51
|
|
|
52
52
|
box_ref.value = algopy.op.itob(minted_asset.id)
|
|
53
53
|
|
|
54
|
-
@algopy.
|
|
54
|
+
@algopy.public()
|
|
55
55
|
def confirm_attendance_with_box_map(self) -> None:
|
|
56
56
|
assert self.total_attendees < self.max_attendees, "Max attendees reached"
|
|
57
57
|
|
|
@@ -63,33 +63,33 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
63
63
|
|
|
64
64
|
self.box_map[algopy.Txn.sender.bytes] = minted_asset.id
|
|
65
65
|
|
|
66
|
-
@algopy.
|
|
66
|
+
@algopy.public(readonly=True)
|
|
67
67
|
def get_poa_id(self) -> algopy.UInt64:
|
|
68
68
|
poa_id, exists = algopy.op.Box.get(algopy.Txn.sender.bytes)
|
|
69
69
|
assert exists, "POA not found"
|
|
70
70
|
return algopy.op.btoi(poa_id)
|
|
71
71
|
|
|
72
|
-
@algopy.
|
|
72
|
+
@algopy.public(readonly=True)
|
|
73
73
|
def get_poa_id_with_box(self) -> algopy.UInt64:
|
|
74
74
|
box = algopy.Box(algopy.UInt64, key=algopy.Txn.sender.bytes)
|
|
75
75
|
poa_id, exists = box.maybe()
|
|
76
76
|
assert exists, "POA not found"
|
|
77
77
|
return poa_id
|
|
78
78
|
|
|
79
|
-
@algopy.
|
|
79
|
+
@algopy.public(readonly=True)
|
|
80
80
|
def get_poa_id_with_box_ref(self) -> algopy.UInt64:
|
|
81
81
|
box_ref = algopy.Box(algopy.Bytes, key=algopy.Txn.sender.bytes)
|
|
82
82
|
poa_id, exists = box_ref.maybe()
|
|
83
83
|
assert exists, "POA not found"
|
|
84
84
|
return algopy.op.btoi(poa_id)
|
|
85
85
|
|
|
86
|
-
@algopy.
|
|
86
|
+
@algopy.public(readonly=True)
|
|
87
87
|
def get_poa_id_with_box_map(self) -> algopy.UInt64:
|
|
88
88
|
poa_id, exists = self.box_map.maybe(algopy.Txn.sender.bytes)
|
|
89
89
|
assert exists, "POA not found"
|
|
90
90
|
return poa_id
|
|
91
91
|
|
|
92
|
-
@algopy.
|
|
92
|
+
@algopy.public()
|
|
93
93
|
def claim_poa(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
|
|
94
94
|
poa_id, exists = algopy.op.Box.get(algopy.Txn.sender.bytes)
|
|
95
95
|
assert exists, "POA not found, attendance validation failed!"
|
|
@@ -108,7 +108,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
108
108
|
algopy.op.btoi(poa_id),
|
|
109
109
|
)
|
|
110
110
|
|
|
111
|
-
@algopy.
|
|
111
|
+
@algopy.public()
|
|
112
112
|
def claim_poa_with_box(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
|
|
113
113
|
box = algopy.Box(algopy.UInt64, key=algopy.Txn.sender.bytes)
|
|
114
114
|
poa_id, exists = box.maybe()
|
|
@@ -128,7 +128,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
128
128
|
poa_id,
|
|
129
129
|
)
|
|
130
130
|
|
|
131
|
-
@algopy.
|
|
131
|
+
@algopy.public()
|
|
132
132
|
def claim_poa_with_box_ref(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
|
|
133
133
|
box_ref = algopy.Box(algopy.Bytes, key=algopy.Txn.sender.bytes)
|
|
134
134
|
poa_id, exists = box_ref.maybe()
|
|
@@ -148,7 +148,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
148
148
|
algopy.op.btoi(poa_id),
|
|
149
149
|
)
|
|
150
150
|
|
|
151
|
-
@algopy.
|
|
151
|
+
@algopy.public()
|
|
152
152
|
def claim_poa_with_box_map(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
|
|
153
153
|
poa_id, exists = self.box_map.maybe(algopy.Txn.sender.bytes)
|
|
154
154
|
assert exists, "POA not found, attendance validation failed!"
|
|
@@ -8,7 +8,6 @@ from algopy import (
|
|
|
8
8
|
Txn,
|
|
9
9
|
UInt64,
|
|
10
10
|
op,
|
|
11
|
-
subroutine,
|
|
12
11
|
)
|
|
13
12
|
|
|
14
13
|
VOTE_PRICE = 10_000
|
|
@@ -24,11 +23,9 @@ class VotingContract(Contract):
|
|
|
24
23
|
)
|
|
25
24
|
self.voted = LocalState(UInt64, key="voted", description="Tracks if an account has voted")
|
|
26
25
|
|
|
27
|
-
@subroutine
|
|
28
26
|
def set_topic(self, topic: Bytes) -> None:
|
|
29
27
|
self.topic.value = topic
|
|
30
28
|
|
|
31
|
-
@subroutine
|
|
32
29
|
def vote(self, voter: Account) -> bool:
|
|
33
30
|
assert op.Global.group_size == UInt64(2)
|
|
34
31
|
assert op.GTxn.amount(1) == UInt64(VOTE_PRICE)
|
|
@@ -40,7 +37,6 @@ class VotingContract(Contract):
|
|
|
40
37
|
self.voted[voter] = UInt64(1)
|
|
41
38
|
return True
|
|
42
39
|
|
|
43
|
-
@subroutine
|
|
44
40
|
def get_votes(self) -> UInt64:
|
|
45
41
|
return self.votes.value
|
|
46
42
|
|
{algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/__init__.py
RENAMED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# ruff: noqa: I001
|
|
1
2
|
from _algopy_testing import arc4, gtxn, itxn
|
|
2
3
|
from _algopy_testing.context import AlgopyTestContext
|
|
3
4
|
from _algopy_testing.context_helpers.context_storage import algopy_testing_context
|
|
@@ -24,6 +25,9 @@ from _algopy_testing.state import Box, BoxMap, BoxRef, GlobalState, LocalState
|
|
|
24
25
|
from _algopy_testing.value_generators.arc4 import ARC4ValueGenerator
|
|
25
26
|
from _algopy_testing.value_generators.avm import AVMValueGenerator
|
|
26
27
|
from _algopy_testing.value_generators.txn import TxnValueGenerator
|
|
28
|
+
from _algopy_testing.decorators.arc4 import (
|
|
29
|
+
abimethod as public,
|
|
30
|
+
)
|
|
27
31
|
|
|
28
32
|
__all__ = [
|
|
29
33
|
"ARC4Contract",
|
|
@@ -60,6 +64,7 @@ __all__ = [
|
|
|
60
64
|
"gtxn",
|
|
61
65
|
"itxn",
|
|
62
66
|
"logicsig",
|
|
67
|
+
"public",
|
|
63
68
|
"subroutine",
|
|
64
69
|
"uenumerate",
|
|
65
70
|
"urange",
|
|
@@ -326,19 +326,19 @@ class TransactionGroup:
|
|
|
326
326
|
except ValueError:
|
|
327
327
|
raise ValueError("Transaction is not part of this group") from None
|
|
328
328
|
|
|
329
|
-
def _begin_itxn_group(self) -> None:
|
|
329
|
+
def _begin_itxn_group(self, itxn: InnerTransaction | None = None) -> None:
|
|
330
330
|
if self._constructing_itxn_group:
|
|
331
331
|
raise RuntimeError("itxn begin without itxn submit")
|
|
332
332
|
|
|
333
333
|
if self.active_txn.on_completion == OnCompleteAction.ClearState:
|
|
334
334
|
raise RuntimeError("Cannot begin inner transaction group in a clear state call")
|
|
335
335
|
|
|
336
|
-
self._constructing_itxn_group.append(InnerTransaction())
|
|
336
|
+
self._constructing_itxn_group.append(itxn or InnerTransaction())
|
|
337
337
|
|
|
338
|
-
def _append_itxn_group(self) -> None:
|
|
338
|
+
def _append_itxn_group(self, itxn: InnerTransaction | None = None) -> None:
|
|
339
339
|
if not self._constructing_itxn_group:
|
|
340
340
|
raise RuntimeError("itxn next without itxn begin")
|
|
341
|
-
self._constructing_itxn_group.append(InnerTransaction())
|
|
341
|
+
self._constructing_itxn_group.append(itxn or InnerTransaction())
|
|
342
342
|
|
|
343
343
|
def _submit_itxn_group(self) -> None:
|
|
344
344
|
if not self._constructing_itxn_group:
|
{algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/itxn.py
RENAMED
|
@@ -33,6 +33,7 @@ __all__ = [
|
|
|
33
33
|
"KeyRegistrationInnerTransaction",
|
|
34
34
|
"Payment",
|
|
35
35
|
"PaymentInnerTransaction",
|
|
36
|
+
"submit_staged",
|
|
36
37
|
"submit_txns",
|
|
37
38
|
]
|
|
38
39
|
|
|
@@ -113,6 +114,12 @@ class _BaseInnerTransactionFields(typing.Protocol[_TResult_co]):
|
|
|
113
114
|
_narrow_covariant_types(fields)
|
|
114
115
|
self.fields.update(fields)
|
|
115
116
|
|
|
117
|
+
def stage(self, *, begin_group: bool = False) -> None:
|
|
118
|
+
if begin_group:
|
|
119
|
+
lazy_context.active_group._begin_itxn_group(self) # type: ignore[arg-type]
|
|
120
|
+
else:
|
|
121
|
+
lazy_context.active_group._append_itxn_group(self) # type: ignore[arg-type]
|
|
122
|
+
|
|
116
123
|
def submit(self) -> _TResult_co:
|
|
117
124
|
result = _get_itxn_result(self)
|
|
118
125
|
lazy_context.active_group._add_itxn_group([result]) # type: ignore[list-item]
|
|
@@ -170,6 +177,10 @@ def submit_txns(
|
|
|
170
177
|
return results
|
|
171
178
|
|
|
172
179
|
|
|
180
|
+
def submit_staged() -> None:
|
|
181
|
+
lazy_context.active_group._submit_itxn_group()
|
|
182
|
+
|
|
183
|
+
|
|
173
184
|
def _get_itxn_result(
|
|
174
185
|
itxn: _BaseInnerTransactionFields[_TResult_co],
|
|
175
186
|
) -> _BaseInnerTransactionResult:
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# ruff: noqa: I001
|
|
1
2
|
from _algopy_testing.compiled import (
|
|
2
3
|
CompiledContract,
|
|
3
4
|
CompiledLogicSig,
|
|
@@ -33,6 +34,9 @@ from _algopy_testing.state import Box, BoxMap, BoxRef, GlobalState, LocalState
|
|
|
33
34
|
from _algopy_testing.utilities import OpUpFeeSource, ensure_budget, log, size_of
|
|
34
35
|
|
|
35
36
|
from . import arc4, gtxn, itxn, op
|
|
37
|
+
from _algopy_testing.decorators.arc4 import (
|
|
38
|
+
abimethod as public,
|
|
39
|
+
)
|
|
36
40
|
|
|
37
41
|
__all__ = [
|
|
38
42
|
"ARC4Contract",
|
|
@@ -76,6 +80,7 @@ __all__ = [
|
|
|
76
80
|
"log",
|
|
77
81
|
"logicsig",
|
|
78
82
|
"op",
|
|
83
|
+
"public",
|
|
79
84
|
"size_of",
|
|
80
85
|
"subroutine",
|
|
81
86
|
"uenumerate",
|
{algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_abi_call.py
RENAMED
|
@@ -4,12 +4,12 @@ from collections.abc import Generator
|
|
|
4
4
|
import pytest
|
|
5
5
|
from _algopy_testing import AlgopyTestContext, algopy_testing_context
|
|
6
6
|
from _algopy_testing.itxn import ApplicationCallInnerTransaction
|
|
7
|
-
from algopy import ARC4Contract, arc4
|
|
7
|
+
from algopy import ARC4Contract, arc4, public
|
|
8
8
|
from pytest_mock import MockerFixture
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class Logger(ARC4Contract):
|
|
12
|
-
@
|
|
12
|
+
@public
|
|
13
13
|
def echo(self, value: arc4.String) -> arc4.String:
|
|
14
14
|
return "echo: " + value
|
|
15
15
|
|