- Correct
EcPairingCheck
&EcSubgroupCheck
return types (#717)
- Support for AVM v10 programs. (#714)
- New box operations:
App.box_resize
App.box_splice
- New
Global
fields:Global.asset_create_min_balance()
Global.asset_opt_in_min_balance()
Global.genesis_hash()
- New elliptic curve operations:
EcAdd
EcScalarMul
EcPairingCheck
EcMultiScalarMul
EcSubgroupCheck
EcMapTo
- New box operations:
- Support for Python 3.12. (#713)
- Support for compiling AVM v9 programs. (#707)
- Fixed sourcemap errors related to TMPL usage. (#696)
- Stop using slot indexes for assets and apps when accessing properties of ABI reference type arguments. (#701)
- Clarify that
Approve
andReject
always exit in the documentation. (#660) - Added frame pointer support for router. (#600)
- NOTE: a backwards incompatable change was imposed in this PR: previous
build_program
method inRouter
was exported and public, now this method is hidden. Usecompile_program
only.
- NOTE: a backwards incompatable change was imposed in this PR: previous
- Experimental source mapping capability. (#650)
- Enable source maps using the new
FeatureGate
class. Seeexamples/applications/sourcemap.py
for a usage example. (#687)
- Improved error handling for tuple type mismatch: added information on position and expected type. (#655)
- Added an
asdict()
method toast.router.BareCallActions
. (#656)
- Fixed wrong encoding result in tuple get last item. (#663)
- Improved Router clear state program generation. (#636)
- NOTE: a backwards incompatable change was imposed in this PR: previous Clear State Program (CSP) can be constructed in router by registering ABI methods or bare app calls, now one has to use
clear_state
argument inRouter.__init__
to construct the CSP.
- NOTE: a backwards incompatable change was imposed in this PR: previous Clear State Program (CSP) can be constructed in router by registering ABI methods or bare app calls, now one has to use
- Added frame pointer support for subroutine arguments, replacing the previous usage of scratch. (#562)
- Added frame pointer support for local ABI variables in subroutine. (#606)
- Added
frame_pointers
property inOptimizeOptions
to optimize away scratch slots during subroutine calls. This defaults to frame pointer usage when not specified for AVM version 8+. (#613)
- Allowing the
MethodCall
andExecuteMethodCall
to be passedNone
as app_id argument in the case of an app create transaction (#592) - No longer accidentally include additional package folders in release (#610, #614)
- Fixed mistakes in docs (#612, #625, #627)
- Introducing
AbstractVar
to abstract value access: store, load, and stack type. (#584)- NOTE: a backwards incompatable change was imposed in this PR: previous ABI value's public member
stored_value
with typeScratchVar
, is now changed to protected member_stored_value
with typeAbstractVar
.
- NOTE: a backwards incompatable change was imposed in this PR: previous ABI value's public member
- Starting with program version 9, when
scratch_slots
flag isn't provided toOptimizeOptions
, default to optimizing. For versions 8 and earlier the default is and remains to not optimize. (#613) - Replaced the usage of
typing.NamedTuple
withdataclass
forclass OpType
in the ir package in order to avoid a regression coming in Python 3.11.1. (#615) - Upgrade mypy to v0.991. (#618)
- Upgrade py-algorand-sdk to v2.0.0. (#626)
- adding program page related ops (#412)
- Add Replace (#413)
- Add Block (#415)
- Add JsonRef (#417)
- Add Base64Decode (#418)
- Support Secp256r1 curve (#423)
- Add VrfVerify (#419)
- Add Sha3_256 (#425)
- Support FirstValidTime transaction field (#424)
- Add Ed25519Verify_Bare (#426)
- AVM Boxes Ops in Pyteal (#438)
- Support new AVM 8 account parameters (#555)
- Changes to avm8 docs (#546)
- Added option to
OpUp
utility to allow specification of source for fees (#566)
- Erroring on constructing an odd length hex string. (#539)
- Incorrect behavior when overriding a method name (#550)
- Add missing
abi.NamedTupleTypeSpec
equality override, such that equality holds only wheninstance_class
andvalue_type_specs
match. (#540) - Prohibited instantiating
abi.NamedTuple
from inheriting subclasses ofabi.NamedTuple
, for fields in subclasses are not inherited. (#540) - Fixed bug in app arg tupling and detupling when a Txn argument is present (#577)
- Subroutines that take ABI type of Transaction now allow any Transaction type to be passed. (#531)
- Relaxing exact type check in
InnerTxnFieldExpr.MethodCall
by applyingabi.type_spec_is_assignable_to
. (#561)
- ABI methods without a docstring now have their arguments in the output Contract object. (#524)
- ABI Methods will now parse the docstring for the method and set the description for any parameters that are described. (#518)
- Note: the docstring must adhere to one of google, rst, numpy , or epy formatting styles.
- Subroutines annotated with a
TupleX
class are now invoked with an instance of that exact class, instead of the more generalTuple
class (#519)
- Static and Dynamic Byte Array convenience classes (#500, #514)
- Add the ability to insert comments in TEAL source file with the
Comment
method (#410) - Add a
comment
keyword argument to the Assert expression that will place the comment immediately above theassert
op in the resulting TEAL (#510)
- Fix AST duplication bug in
String.set
when called with anExpr
argument (#508)
-
Add the ability to pass foreign reference arrays directly into inner transactions (#384)
-
NamedTuple Implementation (#473)
-
ExecuteMethodCall helper (#501)
- Update
Block
docs to match spec change (#503)
- Support AVM 7 updates:
- Add ARC-0004 support for building and calling Apps. See user guide for a walkthrough of capabilities and limitations (#264).
- Introduce ABI Router to simplify ARC-0004 App construction and JSON descriptor generation. See user guide for a walkthrough (#170).
- Support declaring PyTeal version compatibility with a new pragma directive (#429).
- Add
Execute
method to simplify inner transaction creation and submission (#444). - Add
py.typed
marker to allow downstream use of mypy with PyTeal (#465).
- Fix misspelled function names (
localNumUint
,globalNumUint
) and corresponding internal field references (#431). - Fix stale user guide references (#359).
- Make PyTeal stack traces easier to debug (#371).
- Streamline multi-expression clause construction (#442).
- Add opcode support for ECDSA verify, decompress, and recover (#307).
- Fix bug where
Continue
skipsWhile
condition check (#332). - Fix
If
construction using builder syntax (#329).
- Resolve PyPi upload issue introduced in v0.12.0 (#317).
- Introduce a utility for increasing opcode budget referred to as OpUp (#274).
- Introduce dryrun testing facilities referred to as blackbox testing (#249).
- Introduce optional compiler optimization to remove redundant sequential
ScratchSlot
store/load invocations (#247). The optimization is disabled by default. - Expose
DynamicScratchVar
to reference arbitraryScratchVar
instances (#198).
- Bump minimum supported Python version to v3.10 (#269).
- Add
@Subroutine
support forScratchVar
parameters (#198). - Make minor doc updates (#248) and (#265).
- Remove outdated Jupyter notebook demo (#268).
- Fix docs warning about multiple OptimizeOptions targets (#271).
- Fixed a bug which caused incorrect TEAL code to be produced for mutually recursive subroutines with different argument counts (#234)
- Minor docs updates (#211, #210, #229)
- Support for new TEAL 6 features:
- Increase maximum TEAL version (#146)
- New
Gitxn
expression, inner transaction group creation withInnerTxnBuilder.Next()
, inner transaction array field setting, and allow using dynamic slot IDs withImportScratchValue
(#149) - New
BytesSqrt
expression (#163) - New
Global
fieldsopcode_budget
,caller_app_id
, andcaller_app_address
(#168) - New
AccountParam
expressions for getting information about accounts (#165) - New
Divw
expression, new transaction fieldslast_log
andstate_proof_pk
, and dynamic index support forInnerTxn
array fields (#174)
- Added a new
MethodSignature
expression (#153) - Added a new
Suffix
expression and optimized existingSubstring
andExtract
expressions (#126) - Added the
MultiValue
class as an alternative toMaybeValue
(#196)
- Various documentation fixes (#140, #142, #191, #202, #207)
- Clearer error messages when non-PyTeal expressions are present (#151)
- WARNING: Due to code generation improvements, programs compiled with this version will likely produce different TEAL code than previous versions, but their functionality will be the same. Be aware that even small differences in generated TEAL code will change the address associated with escrow LogicSig contracts.
- Optimized constant assembly for small integers (#128)
- Generated TEAL code for subroutines is more human-readable (#148)
- Subroutine argument and return type annotations, if present, MUST be
Expr
(#182) - Transaction field documentation now separates fields by transaction type (#204)
- Added documentation about how to generate the documentation (#205)
- Fixed use of wildcard import in Pylance (#133)
- Support for new TEAL 5 features:
AppParam
expressions (#107, #123)- New
nonparticipation
transaction field (#106) - Inner transactions, zero-element
Seq
expressions, dynamic transaction array access (#115) - Logs, dynamic LogicSig argument indexes, single-element
NaryExpr
s, and creatingBytes
frombytes
andbytearray
(#117) - Extract expressions (#118)
- More efficient implementation of recursive subroutines in TEAL 5+ (#114)
- Add
WideRatio
, an expression which exposesmulw
anddivmodw
(#121, #122)
- WARNING: Due to code generation improvements, programs compiled with this version will likely produce different TEAL code than previous versions, but their functionality will be the same. Be aware that even small differences in generated TEAL code will change the address associated with escrow LogicSig contracts.
- Some unnecessary branch conditions have been removed (#120)
- Support for new TEAL 4 features:
- New logo (#88, #91)
- Added the
assembleConstants
option tocompileTeal
. When enabled, the compiler will assemble int and byte constants in the most efficient way to reduce program size (#57, #61, #66). - Added an alternative syntax for constructing
If
statements (#77, #82). - Align
Seq
with the rest of the API (#96).
- Fixed
NaryExpr.__str__
method (#102).
- WARNING: Due to code generation changes required to support TEAL 4 loops and subroutines, programs compiled with this version will likely produce different TEAL code than previous versions, but their functionality will be the same. Be aware that even small differences in generated TEAL code will change the address associated with escrow LogicSig contracts.
- Improved crypto cost docs (#81).
- Applied code formatter (#100).
- Support for new TEAL 3 features:
- Added the ability to specify the TEAL version target when using
compileTeal
(#45). - Added
ScratchVar
, an interface for storing and loading values from scratch space (#33). - Added a warning when scratch slots are loaded before anything has been stored (#47).
- Rewrote internal code generation to produce smaller programs and make future optimization easier (#26). Programs compiled with this version will likely produce different TEAL code than previous versions, but their functionality will be the same.
- Corrected documentation and examples that incorrectly used the
Txn.accounts
array (#42). - Fixed improper base32 validation and allow the use of padding (#34 and #37).
- An application deployment example,
vote_deploy.py
.
- Internal modules no longer pollute the global namespace when importing with
from pyteal import *
(#29). - Fixed several documentation typos.
- Moved signature and application mode examples into separate folders.
- TEAL v2
Txn
andGtxn
fields - TEAL v2
Global
fields TxnType
enumPop
expressionNot
expressionBitwiseNot
expressionBitwiseAnd
expressionBitwiseOr
expressionBitwiseXor
expressionNeq
(not equal) expressionAssert
expressionAssetHolding
expressionsAssetParam
expressions- State manipulation with
App
expressions Concat
expressionSubstring
expressionBytes
constructor now accepts UTF-8 stringsIf
expression now allows single branches
- Compiling a PyTeal program must now be done with the
compileTeal(program, mode)
function. The.teal()
method no longer exists. - The API for group transactions has changed from
Gtxn.field(transaction_index)
toGtxn[transaction_index].field()
. Tmpl
syntax has changed fromType(Tmpl("TMPL_NAME"))
toTmpl.Type("TMPL_NAME")
.