Definition: [
"autonomous agent",
{
"init": "{
$team_creation_tax = 1000;
$challenging_period = 12*3600; // not more than 12 hours of work per day
$bFinished = var['finished'];
}",
"messages": {
"cases": [
{
"if": "{trigger.data.create_team AND !$bFinished}",
"init": "{
if (var['team' || trigger.address || 'amount'])
bounce('the challenging period is over');
if (trigger.output[[asset=base]] < $team_creation_tax)
bounce('please pay for a new team creation');
}",
"messages": [
{
"app": "asset",
"payload": {
"is_private": false,
"is_transferrable": true,
"auto_destroy": false,
"fixed_denominations": false,
"issued_by_definer_only": false,
"cosigned_by_definer": false,
"spender_attested": false
}
},
{
"app": "payment",
"if": "{trigger.output[[asset=base]] > $team_creation_tax}",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{trigger.address}",
"amount": "{trigger.output[[asset=base]] - $team_creation_tax}"
}
]
}
},
{
"app": "state",
"state": "{
var['team' || trigger.address || 'founder_tax'] = trigger.data.founder_tax otherwise 100/100;
var['team' || trigger.address || 'asset'] = response_unit;
response['team_asset'] = response_unit;
}"
}
]
},
{
"if": "{trigger.data.team AND !$bFinished}",
"init": "{
if (!var['team' || trigger.data.team || 'asset'])
bounce('no such team');
if (trigger.data.team == var['winner'])
bounce('contributions to candidate winner are not allowed');
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "{var['team' || trigger.data.team || 'asset']}",
"outputs": [
{
"address": "{trigger.address}",
"amount": "{trigger.output[[asset=base]]}"
}
]
}
},
{
"app": "state",
"state": "{
var['team' || trigger.data.team || 'amount'] += trigger.output[[asset=base]];
if (var['team' || trigger.data.team || 'amount'] > balance[base]*0.50){
var['winner'] = trigger.data.team;
var['challenging_period_start_ts'] = timestamp;
}
}"
}
]
},
{
"if": "{trigger.data.finished AND !$bFinished}",
"init": "{
if (!var['winner'])
bounce('no candidate winner yet');
if (timestamp < var['challenging_period_start_ts'] + $challenging_period)
bounce('challenging period not expired yet');
}",
"messages": [
{
"app": "state",
"state": "{
var['finished'] = true;
var['total'] = balance[base];
var['challenging_period_stop_ts'] = true;
response['winner'] = var['winner'];
}"
}
]
},
{
"if": "{
if (!$bFinished)
return false;
$winner = var['winner'];
$winner_asset = var['team' || $winner || 'asset'];
$asset_amount = trigger.output[[asset=$winner_asset]];
$asset_amount >= 0
}",
"init": "{
$share = $asset_amount / var['team' || $winner || 'amount'];
$founder_tax = var['team' || $winner || 'founder_tax'];
$amount = round(( $share * (1000-$founder_tax) + (trigger.address == $winner AND !var['founder_tax_paid'] ? $founder_tax : 1000) ) * var['total']);
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{trigger.address}",
"amount": "{$amount}"
}
]
}
},
{
"app": "state",
"state": "{
if (trigger.address == $winner)
var['founder_tax_paid'] = true;
}"
}
]
}
]
}
}
]