Data Types and Constants
A PyTeal expression has one of the following two data types:
TealType.uint64
, 64 bit unsigned integer
TealType.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()
) is typed TealType.uint64
.
Integers
Int(n)
creates a TealType.uint64
constant, where n >= 0 and n < 2 ** 64
.
Bytes
A byte slice is a binary string. There are several ways to encode a byte slice in PyTeal:
UTF-8
Byte slices can be created from UTF-8 encoded strings. For example:
Bytes("hello world")
Base16
Byte slices can be created from a RFC 4648#section-8 base16 encoded
binary string, e.g. "0xA21212EF"
or "A21212EF"
. For example:
Bytes("base16", "0xA21212EF")
Bytes("base16", "A21212EF") # "0x" is optional
Base32
Byte slices can be created from a RFC 4648#section-6 base32 encoded
binary string with or without padding, e.g. "7Z5PWO2C6LFNQFGHWKSK5H47IQP5OJW2M3HA2QPXTY3WTNP5NU2MHBW27M"
.
Bytes("base32", "7Z5PWO2C6LFNQFGHWKSK5H47IQP5OJW2M3HA2QPXTY3WTNP5NU2MHBW27M")
Base64
Byte slices can be created from a RFC 4648#section-4 base64 encoded
binary string, e.g. "Zm9vYmE="
.
Bytes("base64", "Zm9vYmE=")
Type Checking
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 Operations for more details)
requires both operands of type TealType.uint64
,
while Arg(0)
is of type TealType.bytes
.
Conversion
Converting a value to its corresponding value in the other data type is supported by the following two operators:
Note: These operations are not meant to convert between human-readable strings and numbers.
Itob
produces a big-endian 8-byte encoding of an unsigned integer, not a human readable
string. For example, Itob(Int(1))
will produce the string "x00x00x00x00x00x00x00x01"
not the string "1"
.