ThenFunc
A ThenFunc
is a continuation of a contract that can proceed when all the
guarded_by conditions on that object are met. The ThenFunc
provides an
iterator of possible next transactions, using CTV to ensure execution.
When to use a ThenFunc
We've already seen an example of a then
function in the wild in Chapter
1. In that example we are guaranteeing that after
a timeout, a specific "return policy" is honored out of the escrow. Unless
Alice and Bob agree to something else, the funds can only be returned via
that transaction.
In general, any time you want a state transition to be "locked in" you should use a then!
.
then! macro
The then
macro generates a static fn() -> Option<ThenFunc>
method for a given impl.
There are a few variants of how you can create a then
.
#![allow(unused)] fn main() { /// A Conditional + Guarded CTV Function #[then( /// optional: only compile these branches if these compile_if statements permit compile_if= "[compile_if_1, ... compile_if_n]", /// optional: protect these branches with the conjunction (and) of these clauses guarded_by= "[guard_1, ... guard_n]" )] fn name(self, ctx) { /*Result<Box<Iterator<TransactionTemplate>>>*/ } /// Null Implementation decl_then!{name} }
The Iterator must not be empty, or it will cause an error.