Definition: [
"autonomous agent",
{
"init": "{
$timeout = params.timeout OTHERWISE 5;
}",
"messages": {
"cases": [
{
"if": "{
$define_home_winner = trigger.data.define_home_winner AND !var['home_winner_asset'];
$define_away_winner = trigger.data.define_away_winner AND !var['away_winner_asset'];
$define_draw = trigger.data.define_draw AND !var['draw_asset'];
$define_canceled = trigger.data.define_canceled AND !var['canceled_asset'];
if ($define_home_winner + $define_away_winner + $define_draw + $define_canceled > 1)
bounce("Can't define more than 1 asset at the same time!");
if($define_draw AND params.no_draw)
bounce("The fixture cannot have draw result");
$define_home_winner OR $define_away_winner OR $define_draw OR $define_canceled
}",
"init": "{
if (typeof(params.championship) != 'string')
bounce("championship parameter must be a string");
if (typeof(params.home_team) != 'string')
bounce("home_team parameter must be a string");
if (typeof(params.away_team) != 'string')
bounce("away_team parameter must be a string");
if (contains(params.championship, '_') OR contains(params.championship, '|'))
bounce("championship parameter cannot contain '|' or '_'");
if (contains(params.home_team, '_') OR contains(params.home_team, '|'))
bounce("home_team parameter cannot contain '|' or '_'");
if (contains(params.away_team, '_') OR contains(params.away_team, '|'))
bounce("away_team parameter cannot contain '|' or '_'");
if (!parse_date(params.expiry_date))
bounce("expiry_date parameter is not a valid date");
if ($timeout < 1)
bounce("timeout must be at least 1 day");
$symbol_left_part = params.championship || '_' || params.home_team || '_' || params.away_team || '_' || params.expiry_date;
if (!is_valid_address(params.oracle))
bounce("oracle parameter is not a valid address");
if ($define_home_winner){
$symbol_right_part = params.home_team;
$asset = 'home_winner_asset';
}
if ($define_away_winner){
$symbol_right_part = params.away_team;
$asset = 'away_winner_asset';
}
if ($define_draw){
$symbol_right_part = 'draw';
$asset = 'draw_asset';
}
if ($define_canceled){
$symbol_right_part = 'canceled';
$asset = 'canceled_asset';
}
$symbol = $symbol_left_part || '=' || $symbol_right_part;
if (length($symbol) > 50)
bounce("resulting symbol length cannot be superior to 50");
}",
"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": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "5J5KVHIOKLRKOQOAKOOCOGNZPBKFKWDB",
"amount": "{length($asset_symbol)*2 + 268}"
}
]
}
},
{
"app": "data",
"payload": {
"oracle": "{params.oracle}",
"asset_symbol": "{$symbol}"
}
},
{
"app": "state",
"state": "{
var[$asset] = response_unit;
response[$asset] = response_unit;
}"
}
]
},
{
"if": "{trigger.output[[asset=base]] >= 1e5 AND var['home_winner_asset'] AND var['away_winner_asset'] AND (var['draw_asset'] OR params.no_draw)}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "{var['home_winner_asset']}",
"outputs": [
{
"address": "{trigger.address}",
"amount": "{ trigger.output[[asset=base]] }"
}
]
}
},
{
"app": "payment",
"payload": {
"asset": "{var['away_winner_asset']}",
"outputs": [
{
"address": "{trigger.address}",
"amount": "{ trigger.output[[asset=base]] }"
}
]
}
},
{
"if": "{!params.no_draw}",
"app": "payment",
"payload": {
"asset": "{var['draw_asset']}",
"outputs": [
{
"address": "{trigger.address}",
"amount": "{ trigger.output[[asset=base]] }"
}
]
}
}
]
},
{
"if": "{trigger.output[[asset!=base]] > 1000 AND trigger.output[[asset!=base]].asset != 'ambiguous'}",
"init": "{
$asset = trigger.output[[asset!=base]].asset;
if ($asset != var['home_winner_asset'] AND $asset != var['away_winner_asset']
AND $asset != var['draw_asset'] AND $asset != var['canceled_asset'])
bounce("foreign asset");
$amount = trigger.output[[asset!=base]];
$feedname = params.championship || '_' || params.home_team || '_' || params.away_team || '_' || params.expiry_date;
$datafeed_value = data_feed[[oracles=params.oracle_address, feed_name=$feedname]];
if ($asset == var['home_winner_asset'] AND $datafeed_value != params.home_team)
bounce("home team didn't win");
if ($asset == var['away_winner_asset'] AND $datafeed_value != params.away_team)
bounce("away team didn't win");
if ($asset == var['draw_asset'] AND $datafeed_value != 'draw')
bounce("there wasn't a draw");
if ($asset == var['canceled_asset']){
if ($datafeed_value AND $datafeed_value != 'canceled')
bounce("there wasn't a cancelation or postponement");
if (timestamp < parse_date(params.expiry_date) + $timeout * 24 * 3600)
bounce("timeout not reached yet");
}
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{trigger.address}",
"amount": "{ $amount == balance[$asset] ? balance[base] : $amount}"
}
]
}
}
]
}
]
}
}
]