Definition: [
"autonomous agent",
{
"init": "{
$control_address = '7';
$fundraiser_address = '6876';
$auditor_address = '78';
$price = 687;
$target = 687;
$expiry_ts = 1567027800000;
$milestone1 = 687;
$milestone2 = 678;
$milestone3 = 6876;
$milestone4 = 866;
$asset = var['asset'];
$finished = var['finished'];
$is_active = ($asset AND $price AND !$finished);
}",
"messages": {
"cases": [
{
"if": "{trigger.data.define AND !$asset}",
"messages": [
{
"app": "asset",
"payload": {
"is_private": false,
"is_transferrable": true,
"auto_destroy": false,
"fixed_denominations": false,
"issued_by_definer_only": true,
"cosigned_by_definer": false,
"spender_attested": false
}
},
{
"app": "state",
"state": "{
var['asset'] = response_unit;
response['asset'] = response_unit;
}"
}
]
},
{
"if": "{ trigger.output[[asset=base]] >= 1e5 AND $is_active }",
"init": "{
$amount = round(trigger.output[[asset=base]] / $price);
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "{$asset}",
"outputs": [
{
"address": "{trigger.address}",
"amount": "{$amount}"
}
]
}
}
]
},
{
"if": "{ trigger.data.finish AND (trigger.address == $control_address OR timestamp > $expiry_ts) }",
"messages": [
{
"app": "state",
"state": "{
var['finished'] = 1;
var['total'] = balance[base];
response['total'] = balance[base];
}"
}
]
},
{
"if": "{trigger.data.milestone AND trigger.address == $auditor_address AND $finished AND var['total'] >= $target}",
"init": "{ $share = ${'milestone' || trigger.data.milestone} / 100; if (!$share) bounce('no such milestone'); if (var['milestone' || trigger.data.milestone || '_released']) bounce('milestone ' || trigger.data.milestone || ' already released'); }",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{$fundraiser_address}",
"amount": "{round(var['total'] * $share)}"
}
]
}
},
{
"app": "state",
"state": "{
var['milestone' || trigger.data.milestone || '_released'] = 1;
response['released'] = 1;
}"
}
]
},
{
"if": "{$asset AND trigger.output[[asset=$asset]] > 0 AND $finished AND var['total'] < $target}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{trigger.address}",
"amount": "{ round(trigger.output[[asset=$asset]] * $price) }"
}
]
}
}
]
}
]
}
}
]