Definition: [
"autonomous agent",
{
"messages": {
"cases": [
{
"messages": [
{
"app": "data",
"payload": {
"withdraw": 1,
"asset": "base",
"amount": "all"
}
},
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{$ODEX}",
"amount": 10000
}
]
}
},
{
"app": "state",
"state": "{var['low_fee_mode'] = true;response['message'] = 'Low fee mode active. Until AA depletion all operations are subsidized';}"
}
],
"if": "{!var['low_fee_mode'] AND $total_bal+var[$ODEX][$ODEX_KEY] > 10000000}"
},
{
"messages": [
{
"app": "data",
"payload": {
"order1": "{trigger.data.order}",
"order2": "{$order_to_match}"
}
},
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{$ODEX}",
"amount": "{var['low_fee_mode']?1:9000}"
}
]
}
},
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{trigger.address}",
"amount": 9500
}
]
},
"if": "{var['low_fee_mode']}"
},
{
"app": "state",
"state": "{$id1 = sha256($my_order.address || $my_order.sell_asset || $my_order.buy_asset || $my_order.sell_amount || $my_order.price || ($my_order.nonce otherwise '') || (trigger.data.order.last_ball_unit otherwise '-'));$order2 = $order_to_match.signed_message;$id2 = sha256($order2.address || $order2.sell_asset || $order2.buy_asset || $order2.sell_amount || $order2.price || ($order2.nonce otherwise '') || ($order_to_match.last_ball_unit otherwise '-'));$amount_left1 = var['amount_left_' || $id1] otherwise $order1.sell_amount;$amount_left2 = var['amount_left_' || $id2] otherwise $order2.sell_amount;$maker_price = $my_order.price;$buy_amount1 = round($amount_left1 * $my_order.price);if ($buy_amount1 > $amount_left2)var[$order_key] = false;if(var['low_fee_mode'] AND $total_bal < 30000)var['low_fee_mode'] = false;}"
}
],
"if": "{trigger.data.match}",
"init": "{$my_order = trigger.data.order.signed_message;$order_key = trigger.data.addr_to_match;$order_pkg = var[$order_key];if(!$order_pkg)bounce('no order to match');if(typeof($order_pkg) != 'string')bounce('order already matched');if ($my_order.matcher != this_address)bounce('wrong matcher in order');if(!exists($my_order.matcher_fee_asset) or $my_order.matcher_fee_asset != 'base')bounce('matcher_fee_asset must be base');if(!is_valid_address($my_order.matcher) OR $my_order.matcher != this_address)bounce('I am the matcher, fuck offchain matchers');if($my_order.matcher_fee != 0)bounce('matcher fees not needed');if ($my_order.affiliate)bounce('affiliates not needed');$order_to_match = json_parse($order_pkg);}"
},
{
"messages": [
{
"app": "data",
"payload": {
"order1": "{$order1}",
"order2": "{$order2}"
}
},
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{$ODEX}",
"amount": "{var['low_fee_mode']?1:9000}"
}
]
}
},
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{trigger.address}",
"amount": 10000
}
]
}
},
{
"app": "state",
"state": "{$order1s = $order1.signed_message;$order2s = $order2.signed_message;$id1 = sha256($order1s.address || $order1s.sell_asset || $order1s.buy_asset || $order1s.sell_amount || $order1s.price || ($order1s.nonce otherwise '') || ($order1.last_ball_unit otherwise '-'));$id2 = sha256($order2s.address || $order2s.sell_asset || $order2s.buy_asset || $order2s.sell_amount || $order2s.price || ($order2s.nonce otherwise '') || ($order2.last_ball_unit otherwise '-'));$amount_left1 = var['amount_left_' || $id1] otherwise $order1s.sell_amount;$amount_left2 = var['amount_left_' || $id2] otherwise $order2s.sell_amount;$maker_price = $order1s.price;$buy_amount1 = round($amount_left1 * $order1s.price);if ($buy_amount1 > $amount_left2){$id_smaller = $id2;$id_larger = $id1;$amount_left_larger = $amount_left1;$buy_amount2 = round($amount_left2 / $maker_price);$buy_amount_smaller = $buy_amount2;}else{$id_smaller = $id1;$id_larger = $id2;$amount_left_larger = $amount_left2;$buy_amount_smaller = $buy_amount1;}$new_amount_left_larger = $amount_left_larger - $buy_amount_smaller;if($id1 == $id_smaller || (!$new_amount_left_larger AND $id1 == $id_larger))var[trigger.address] = false;if($id2 == $id_smaller || (!$new_amount_left_larger AND $id2 == $id_larger))var[$to_match] = false;}"
}
],
"if": "{trigger.data.match_stored}",
"init": "{$to_match = trigger.data.addr_to_match;$str1 = var[trigger.address];$str2 = var[$to_match];if(!var[trigger.address])bounce('you have not stored order');if(!$to_match OR !is_valid_address($to_match) OR !$order2)bounce('addr_to_match must be an address with stored order');$order1 = json_parse($str1);$order2 = json_parse($str2);}"
},
{
"messages": [
{
"app": "data",
"payload": {
"cancel": 1,
"order": "{$order}"
}
},
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{$ODEX}",
"amount": "{var['low_fee_mode']?1000:9000}"
}
]
}
},
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{trigger.address}",
"amount": 8500
}
]
},
"if": "{var['low_fee_mode']}"
},
{
"app": "state",
"state": "{var[trigger.address] = false;}"
}
],
"if": "{trigger.data.cancel}",
"init": "{$str1 = var[trigger.address];if(!$str1)bounce('you have not stored order');$order1 = json_parse($str1);}"
},
{
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{trigger.address}",
"amount": 9500
}
]
},
"if": "{var['low_fee_mode']}"
},
{
"app": "state",
"state": "{var[trigger.address] = json_stringify(trigger.data.order);if(var['low_fee_mode'] AND $total_bal < 30000)var['low_fee_mode'] = false;response['message'] = 'Stored order with id '||trigger.data.id;}"
}
],
"if": "{trigger.data.store}",
"init": "{if(var[trigger.address])bounce('already stored, must be matched or cancelled first');$order = trigger.data.order.signed_message;if (!$order.sell_amount OR $order.sell_amount <= 0 or !$order.price or $order.price <= 0)bounce('wrong data in order');if (!$order.sell_asset or !$order.buy_asset)bounce('buy_asset or sell_asset missing');if(($order.sell_asset != 'base' and !asset[$order.sell_asset].exists) or ($order.buy_asset != 'base' and !asset[$order.buy_asset].exists))bounce('invalid asset');if ($order.sell_asset == $order.buy_asset)bounce('same asset');if ($order.matcher != this_address)bounce('wrong matcher in order, I am the matcher, fuck offchain matchers');if ($order.aa != $ODEX )bounce('wrong aa in order');if ($order.expiry_ts AND $order.expiry_ts <= timestamp)bounce('order expired');if(!exists($order.matcher_fee_asset) or $order.matcher_fee_asset != 'base')bounce('matcher_fee_asset must be base');$sell_key1 = 'balance_' || $order.address || '_' || $order.sell_asset;if($order.sell_amount <= 0)bounce('sell_amount must be greater than 0');$id1 = sha256($order.address || $order.sell_asset || $order.buy_asset || $order.sell_amount || $order.price || ($order.nonce otherwise '') || (trigger.data.order.last_ball_unit otherwise '-'));if (var[$ODEX]['executed_' || $id1])bounce('order already executed');if (var[$ODEX]['cancelled_' || $id1])bounce('order already cancelled');$amount_left1 = var[$ODEX]['amount_left_' || $id1] otherwise $order.sell_amount;if ($amount_left1 > var[$ODEX][$sell_key1] + 0)bounce('not sufficient balance in sell asset to complete order');if($order.matcher_fee != 0)bounce('matcher fees not needed');if ($order.affiliate)bounce('affiliates not needed');$signer1 = trigger.data.order.authors[0].address;if($order.address != trigger.address OR $signer1 != $order.address)bounce('you have to store and sign your order');if (!is_valid_signed_package(trigger.data.order, $signer1))bounce('bad signature of order');$base_key1 = 'balance_' || $order.address || '_base';if (var[$ODEX][$base_key1] <= 1000)bounce('not enough balance for AA fees');}"
},
{
"messages": [
{
"app": "state",
"state": "{response['message'] = 'bytes received';}"
}
]
}
]
},
"init": "{$ODEX = 'VGXZ74WH6SP7ZIQIIOMY4IAC2K5ZIKYO';$ODEX_KEY = 'balance_'||this_address||'_base';if(trigger.output[[asset!=base]].asset != 'none')bounce('no assets here');$total_bal = balance[base]-storage_size-trigger.output[[asset=base]];}"
}
]