[
"autonomous agent",
{
"init": "{
$expiration = 1200; // 20 minutes
// $expiration = 2592000; // 1 month
$approvalThreshold = ceil(var['vested_total'] / 2);
$senderVest = var['vested_' || trigger.address];
}",
"bounce_fees": {
"base": 10000
},
"messages": {
"cases": [
{
"if": "{trigger.data.vest}",
"messages": [
{
"app": "state",
"state": "{
var['vested_' || trigger.address] += trigger.output[[asset=base]];
var['vested_total'] += trigger.output[[asset=base]];
}"
}
]
},
{
"if": "{
trigger.data.proposal
AND trigger.data.amount > 1
}",
"init": "{
$nextProposal = (var['last_proposal'] + 1);
}",
"messages": [
{
"app": "state",
"state": "{
var['proposal_' || $nextProposal] = true;
var['proposal_' || $nextProposal || '_url'] = trigger.data.proposal;
var['proposal_' || $nextProposal || '_expiration'] = timestamp + $expiration;
var['proposal_' || $nextProposal || '_amount'] = trigger.data.amount;
var['proposal_' || $nextProposal || '_author'] = trigger.address;
var['last_proposal'] = $nextProposal;
}"
}
]
},
{
"if": "{
trigger.data.upvote
AND trigger.data.proposal
AND var['proposal_' || trigger.data.proposal]
AND !var['proposal_' || trigger.data.proposal || '_vote_' || trigger.address]
}",
"messages": [
{
"app": "state",
"state": "{
var['proposal_' || trigger.data.proposal || '_vote_' || trigger.address] = true;
var['proposal_' || trigger.data.proposal || '_vest'] += $senderVest;
if (
var['proposal_' || trigger.data.proposal || '_expiration']
> var['vested_' || trigger.address || '_expiration']
) {
var['vested_' || trigger.address || '_expiration'] =
var['proposal_' || trigger.data.proposal || '_expiration'];
}
}"
}
]
},
{
"if": "{
trigger.data.downvote
AND trigger.data.proposal
AND var['proposal_' || trigger.data.proposal]
AND !var['proposal_' || trigger.data.proposal || '_vote_' || trigger.address]
}",
"messages": [
{
"app": "state",
"state": "{
var['proposal_' || trigger.data.proposal || '_vote_' || trigger.address] = true;
var['proposal_' || trigger.data.proposal || '_vest'] -= $senderVest;
if (
var['proposal_' || trigger.data.proposal || '_expiration']
> var['vested_' || trigger.address || '_expiration']
) {
var['vested_' || trigger.address || '_expiration'] =
var['proposal_' || trigger.data.proposal || '_expiration'];
}
}"
}
]
},
{
"if": "{
trigger.data.claim
AND trigger.data.proposal
AND var['proposal_' || trigger.data.proposal || '_author'] == trigger.address
AND var['proposal_' || trigger.data.proposal || '_vest'] >= $approvalThreshold
AND !var['proposal_' || trigger.data.proposal || '_paid']
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{trigger.address}",
"amount": "{var['proposal_' || trigger.data.proposal || '_amount']}"
}
]
}
},
{
"app": "state",
"state": "{
var['proposal_' || trigger.data.proposal || '_paid'] = true;
}"
}
]
},
{
"if": "{
trigger.data.profit
AND trigger.data.proposal
AND var['proposal_' || trigger.data.proposal]
}",
"messages": [
{
"app": "state",
"state": "{
var['proposal_' || trigger.data.proposal || '_profit'] += trigger.output[[asset=base]];
}"
}
]
},
{
"if": "{
trigger.data.unvest
AND var['vested_' || trigger.address] > 0
AND timestamp > var['vested_' || trigger.address || '_expiration']
}",
"init": "{
$amount = ceil((var['vested_' || trigger.address] / var['vested_total']) * balance[base]);
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{trigger.address}",
"amount": "{$amount}"
}
]
}
},
{
"app": "state",
"state": "{
var['vested_' || trigger.address] = 0;
}"
}
]
}
]
}
}
]