[
"autonomous agent",
{
"init": "{
$oswap_base_aa = 'BVI5ZXW2Y5P2SN3SP3ZB7YDKY5NE2J2B';
$usd_base_aa = 'AKMFBQ7ZM4NBT7AJO4FWXH4X6Y6EC422';
$checkDataFeed = ($oracle, $feedName) => {
$result = data_feed[[oracles=$oracle, feed_name=$feedName, ifnone=false]];
require($result, 'data feed not found: oracle=' || $oracle || ', feed_name=' || $feedName);
};
}",
"messages": {
"cases": [
{
"init": "{
$data = trigger.data;
require(exists($data.type), "type required");
$type = to_lower($data.type);
require($type == 'oswap' OR $type == 'usd', 'type is not supported: ' || $type);
if ($type == 'oswap') {
$base_aa = $oswap_base_aa;
$names = [
'oswap_aa',
'x_oracle',
'y_oracle',
'x_feed_name',
'y_feed_name',
];
foreach($names, 5, $v => {
$value = $data[$v];
require(exists($value), $v || ' required');
if ($v == 'oswap_aa') {
require(is_aa($value), 'invalid oswap_aa');
}
});
$checkDataFeed($data.x_oracle, $data.x_feed_name);
$checkDataFeed($data.y_oracle, $data.y_feed_name);
$params = {
oswap_aa: $data.oswap_aa,
x_oracle: $data.x_oracle,
y_oracle: $data.y_oracle,
x_feed_name: $data.x_feed_name,
y_feed_name: $data.y_feed_name,
x_decimals: $data.x_decimals OTHERWISE 0,
y_decimals: $data.y_decimals OTHERWISE 0,
};
}
if ($type == 'usd') {
$base_aa = $usd_base_aa;
require(exists($data.oracle), 'oracle required');
require(exists($data.feed_name), 'feed_name required');
$checkDataFeed($data.oracle, $data.feed_name);
$params = {
oracle: $data.oracle,
feed_name: $data.feed_name,
};
}
$aa = [
'autonomous agent',
{
base_aa: $base_aa,
params: $params,
}
];
$aa_address = chash160($aa);
require(!definition[$aa_address], 'such an AA already exists: ' || $aa_address);
}",
"messages": [
{
"app": "definition",
"payload": {
"definition": "{ $aa }"
}
},
{
"app": "state",
"state": "{
var['reserve_' || $type || '_' || $aa_address] = $params;
response['address'] = $aa_address;
}"
}
]
}
]
}
}
]