[
"autonomous agent",
{
"doc_url": "https://oswap-frontend.herokuapp.com/factory.json",
"init": "{
$base = 'GEUJAHDREHWT4JDBYRFT5AQDG3K7GIT6';
$assetA = trigger.data.assetA;
$assetB = trigger.data.assetB;
$address = trigger.data.address;
}",
"messages": {
"cases": [
{
"if": "{trigger.data.createPair AND $assetA AND $assetB AND trigger.output[[asset=base]] == 1e5}",
"init": "{
if ($assetA == $assetB) bounce('identical asset');
if (
!asset[$assetA].exists
OR asset[$assetA].is_private
OR !asset[$assetA].is_transferrable
OR asset[$assetA].fixed_denominations
OR !asset[$assetB].exists
OR asset[$assetB].is_private
OR !asset[$assetB].is_transferrable
OR asset[$assetB].fixed_denominations
)
bounce('invalid asset');
$order = number_from_seed($assetA) > number_from_seed($assetB);
$asset0 = $order ? $assetA : $assetB;
$asset1 = $order ? $assetB : $assetA;
if (var['all_pairs.' || $asset0 || '_' || $asset1]) bounce('pair exists');
}",
"messages": [
{
"app": "definition",
"payload": {
"definition": [
"autonomous agent",
{
"base_aa": "{$base}",
"params": {
"factory": "{this_address}",
"asset0": "{$asset0}",
"asset1": "{$asset1}"
}
}
]
}
},
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{this_address}",
"amount": "{2e4}"
}
]
}
},
{
"app": "data",
"payload": {
"initializePair": "1",
"assetA": "{$asset0}",
"assetB": "{$asset1}"
}
},
{
"app": "state",
"state": "{
$address = unit[response_unit].messages[[.app='definition']].payload.address;
var['all_pairs.' || $asset0 || '_' || $asset1] = $address;
var['all_pairs.' || $asset1 || '_' || $asset0] = $address;
var['get_pair.' || $address] = $asset0 || '_' || $asset1;
var['pair_count'] += 1;
}"
}
]
},
{
"if": "{
$address = var['all_pairs.' || $assetA || '_' || $assetB];
trigger.data.initializePair AND $address AND trigger.output[[asset=base]] == 2e4 AND trigger.address == this_address
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{$address}",
"amount": "{1e4}"
}
]
}
},
{
"app": "data",
"payload": {
"initialize": "1"
}
}
]
}
]
}
}
]