A PyTeal expression has one of the following two data types:
TealType.uint64
, 64 bit unsigned integerTealType.bytes
, a slice of bytes
For example, all the transaction arguments (e.g. Arg(0)
) are of type TealType.bytes
. The first valid round of current transaction (Txn.first_valid() <TxnObject.first_valid()>
) is typed TealType.uint64
.
Int(n)
creates a TealType.uint64
constant, where n >= 0 and n < 2 ** 64
.
A byte slice is a binary string. There are several ways to encode a byte slice in PyTeal:
Byte slices can be created from UTF-8 encoded strings. For example:
Bytes("hello world")
Byte slices can be created from a 4648#section-8
base16 encoded binary string, e.g. "0xA21212EF"
or "A21212EF"
. For example:
Bytes("base16", "0xA21212EF")
Bytes("base16", "A21212EF") # "0x" is optional
Byte slices can be created from a 4648#section-6
base32 encoded binary string without padding, e.g. "7Z5PWO2C6LFNQFGHWKSK5H47IQP5OJW2M3HA2QPXTY3WTNP5NU2MHBW27M"
.
Bytes("base32", "7Z5PWO2C6LFNQFGHWKSK5H47IQP5OJW2M3HA2QPXTY3WTNP5NU2MHBW27M")
Byte slices can be created from a 4648#section-4
base64 encoded binary string, e.g. "Zm9vYmE="
.
Bytes("base64", "Zm9vYmE=")
All PyTeal expressions are type checked at construction time, for example, running the following code triggers a TealTypeError
: :
Int(0) < Arg(0)
Since <
(overloaded Python operator, see arithmetic_expressions
for more details) requires both operands of type TealType.uint64
, while Arg(0)
is of type TealType.bytes
.
Converting a value to its corresponding value in the other data type is supported by the following two operators:
Itob(n)
: generate aTealType.bytes
value from aTealType.uint64
valuen
Btoi(b)
: generate aTealType.uint64
value from aTealType.bytes
valueb