[
"autonomous agent",
{
"init": "{
// Owner of the AA can withdraw the dust if calculable
$OWNER = "
MYESSCFGDERS3YIEGNZDOG2BI5HKQHLU";
}",
"messages": {
"cases": [
{
"if": "{ trigger.data.create }",
"init": "{
$name = trigger.data.create;
$other_party = trigger.data.other_party otherwise bounce ("need 'other_party' address!");
$guarantee = trigger.output[[asset=base]];
$total_guarantee_balance = var["total_guarantee_balance"] otherwise 0;
}",
"messages": [
{
"app": "state",
"state": "{
var[$name||"_party1"] = trigger.address;
var[$name||"_party2"] = $other_party;
var[$name||"_guarantee"] = $guarantee;
var["total_guarantee_balance"] = $total_guarantee_balance + $guarantee;
response['message'] = "Done! Later, the parties will have to agree on how to spread the guarantee ("||$guarantee||") by sending the 'amount' they allow the other party to receive, if the sum of the 2 amounts is equal to the guarantee then the payment will be executed.";
}"
}
]
},
{
"if": "{ trigger.data.name }",
"init": "{
//Checks
$name = trigger.data.name;
$guarantee = var[$name||"_guarantee"] otherwise bounce ("Guarantee 'name' do not exist!");
$amount = trigger.data.amount otherwise bounce ("Need the 'amount' you allow the other party to receive!");
if ($amount > $guarantee) bounce ("The amount is bigger than the full guarantee!");
$p1 = var[$name||"_party1"] otherwise bounce ("No party1 !");
$p2 = var[$name||"_party2"] otherwise bounce ("No party2 !");
if (trigger.address != $p1 and trigger.address != $p2) bounce ("You are not part of the agreement!");
// get the propositions
$released_by_1 = ( trigger.address == $p1 ) ? $amount : var[$name||"_released_by_1"] otherwise $guarantee;
$released_by_2 = ( trigger.address == $p2 ) ? $amount : var[$name||"_released_by_2"] otherwise $guarantee;
// Check if guarantee is found and define if amount must be paid
$agreement_found = ( $released_by_1 + $released_by_2 ) == $guarantee;
$amount_to_send_to_1 = $agreement_found ? $proposition2 : 0;
$amount_to_send_to_2 = $agreement_found ? $proposition1 : 0;
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{var[$name||"_party1"]}",
"amount": "{ $amount_to_send_to_1 }"
},
{
"address": "{var[$name||"_party2"]}",
"amount": "{ $amount_to_send_to_2 }"
},
{
"address": "{trigger.address}",
"amount": "{ trigger.output[[asset=base]]-2000 }"
}
]
}
},
{
"app": "state",
"state": "{
if ($agreement_found)
{ // clear the full state
var[$name||"_party1"] = false;
var[$name||"_party2"] = false;
var[$name||"_guarantee"] = false;
var[$name||"_released_by_1"] = false;
var[$name||"_released_by_2"] = false;
var["total_guarantee_balance"] -= $guarantee;
response['message'] = "Agreement found and funds sent back to parties ^^";
}
else
{ // safe the proposition
if (var[$name||"_party1"] == trigger.address)
var[$name||"_released_by_1"] = $amount;
else
var[$name||"_released_by_2"] = $amount;
response['message'] = "Proposition recorded ("||$amount||" bytes), the other party should set 'amount' to "|| ($guarantee - $amount)||" bytes to find agreement ^^";
}
}"
}
]
},
{
"init": "{
if (trigger.address != $owner)
bounce ("you need to read the doc!");
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{$owner}",
"amount": "{ balance[base] - var["blocked_balance"] - 1000 }"
}
]
}
},
{
"app": "state",
"state": "{
response['message'] = "Dust sent to owner";
}"
}
]
}
]
}
}
]