[
"autonomous agent",
{
"doc_url": "https://oswap.io/factory.json",
"init": "{
$base = 'GS23D3GQNNMNJ5TL4Z5PINZ5626WASMA';
$address = trigger.data.address;
$asset0 = trigger.data.asset0;
$asset1 = trigger.data.asset1;
$swapFee = trigger.data.swap_fee;
$swapFeeMin = 1e5;
$swapFeeMax = 1e10;
}",
"messages": {
"cases": [
{
"if": "{trigger.data.create AND $asset0 AND $asset1 AND $swapFee AND trigger.output[[asset=base]] == 1e4}",
"init": "{
if (!is_integer($swapFee) OR $swapFee > $swapFeeMax OR $swapFee < $swapFeeMin)
bounce('swap fee must between ' || $swapFeeMin || ' and ' || $swapFeeMax);
if ($asset0 == $asset1) bounce('identical asset');
if (number_from_seed($asset1) >= number_from_seed($asset0)) bounce('wrong asset order');
if (var['all_pools.' || $asset0 || '_' || $asset1]) bounce('pool exists');
if (
!asset[$asset0].exists
OR asset[$asset0].is_private
OR !asset[$asset0].is_transferrable
OR asset[$asset0].fixed_denominations
OR !asset[$asset1].exists
OR asset[$asset1].is_private
OR !asset[$asset1].is_transferrable
OR asset[$asset1].fixed_denominations
)
bounce('invalid asset');
}",
"messages": [
{
"app": "definition",
"payload": {
"definition": [
"autonomous agent",
{
"base_aa": "{$base}",
"params": {
"factory": "{this_address}",
"asset0": "{$asset0}",
"asset1": "{$asset1}",
"swap_fee": "{$swapFee}"
}
}
]
}
},
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{$address}",
"amount": "{5e3}"
}
]
}
},
{
"app": "data",
"payload": {
"initialize": "1"
}
},
{
"app": "state",
"state": "{
if ($address != unit[response_unit].messages[[.app='definition']].payload.address)
bounce('wrong address');
$i = var['pairs.' || $asset0 || '_' || $asset1 || '.i'] OTHERWISE 0;
var['pairs.' || $asset0 || '_' || $asset1 || '.pools[' || $i || ']'] = $address;
var['pairs.' || $asset0 || '_' || $asset1 || '.i'] += 1;
var['pools.' || $address || '.asset0'] = $asset0;
var['pools.' || $address || '.asset1'] = $asset1;
var['pools.' || $address || '.swap_fee'] = $swapFee;
var['count'] += 1;
response['type'] = 'create';
}"
}
]
},
{
"if": "{trigger.data.finalize AND var['pools.' || trigger.address || '.asset0']}",
"messages": [
{
"app": "state",
"state": "{
var['pools.' || trigger.address || '.asset'] = trigger.unit;
response['type'] = 'finalize';
}"
}
]
}
]
}
}
]