Versionsο
Each version of PyTeal compiles contracts for a specific AVM version. Newer versions of the AVM introduce new opcodes and transaction fields, so PyTeal must be updated to support these new features. Below is a table which shows the relationship between AVM and PyTeal versions.
AVM Version |
PyTeal Version |
---|---|
1 |
<= 0.5.4 |
2 |
>= 0.6.0 |
3 |
>= 0.7.0 |
4 |
>= 0.8.0 |
5 |
>= 0.9.0 |
6 |
>= 0.10.0 |
7 |
>= 0.15.0 |
Version Pragmasο
When writing a PyTeal smart contract, itβs important to target a specific AVM version and to compile with a single PyTeal version. This will ensure your compiled program remains consistent and has the exact same behavior no matter when you compile it.
The pragma
function can be used to assert that the current PyTeal version matches a constraint
of your choosing. This can help strengthen the dependency your source code has on the PyTeal package
version you used when writing it.
If you are writing code for others to consume, or if your codebase has different PyTeal version
dependencies in different places, the Pragma
expression can be used to apply a pragma
constraint to only a section of the AST.
PyTeal v0.5.4 and Belowο
In order to support AVM v2, PyTeal v0.6.0 breaks backward compatibility with v0.5.4. PyTeal
programs written for PyTeal version 0.5.4 and below will not compile properly and most likely will
display an error of the form AttributeError: * object has no attribute 'teal'
.
Warning
If you are updating from a v1 AVM program, make
sure your program abides by the TEAL safety guidelines.
Changing a v1 AVM program to a v2 AVM program without any code changes is insecure because v2
AVM programs allow rekeying. Specifically, you must add a check that the RekeyTo
property
of any transaction is set to the zero address when updating an older PyTeal program from v0.5.4 and
below.