High-level language for Algorand Smart Contracts at Layer-1 and its low-level TEAL v2 language. The goal is to abstract the stack-based TEAL VM and provide imperative Go/JS/Python-like syntax.
-
Integer and bytes types
-
Variables and constants
let variable1 = 1
const myaddr = addr"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ"
- All binary and unary operations from TEAL
let a = (1 + 2) / 3
let b = ~a
- Inlined functions
function sample(a) {
return a - 1
}
function logic() {
return sample(2)
}
- Condition statements and expressions
function condition(a) {
let b = if a == 1 { 10 } else { 0 }
if b == 0 {
return a
}
return 1
}
- Type checking
function get_string() {
return "\x32\x33\x34"
}
function logic() {
let a = 1
a = get_string()
return a
}
- Modules
import stdlib.const
- Antlr-based parser
-
Tealang to bytecode
tealang mycontract.tl -o mycontract.tok
-
Tealang to TEAL
tealang -c mycontract.tl -o mycontract.teal
-
Tealang logic one-liner to bytecode
tealang -l '(txn.Sender == "abc") && global.MinTxnFee > 2000' -o mycontract.tok
-
stdin to stdout
cat mycontract.tl | tealang -s -r - > mycontract.tok
-
Dryrun / trace
tealang -s -c -d '' examples/basic.tl
Checkout syntax highlighter for vscode.
- Set up ANTLR4 as explained in the documentation
- Install runtime for Go
go get -u github.com/antlr/antlr4/runtime/Go/antlr
- Install and setup go-algorand. Read Algorand README if needed.
go get -u github.com/algorand/go-algorand pushd $(go env GOPATH)/src/github.com/algorand/go-algorand make build popd
- If you see the error
then
../../go/src/github.com/algorand/go-algorand/logging/telemetry.go:78:32: multiple-value uuid.NewV4() in single-value context
pushd $(go env GOPATH)/src/github.com/satori/go.uuid git checkout v1.2.0 popd
make
make java-gui ARGS=examples/basic.tl
- Constant folding.
- Improve errors reporting.
- Code gen: do not use temp scratch in "assign and use" case.
- Code gen: keep track scratch slots and mark as available after freeing with
load
.