Unit ID
y3g3t8cJBw6iyySx0BASXSmueEJmW0Gn9AXoYLCpE7M=
Received
05.08.2019 18:34:30
Confirmation delay (full node)
4 minutes 14 seconds
Confirmation delay (light node)
5 minutes 38 seconds
Messages
Definition
Definition: [ "autonomous agent", { "init": "{ $owner = 'JBGMJI7XSKLKNHZF26BUBWHVUZSDV3P5'; $fee = 1000; $addr = trigger.address; $base_inp = trigger.output[[asset=base]]; if(trigger.output[[asset!=base]].asset != 'none') $asset = trigger.output[[asset!=base]].asset; if($asset){ if($asset == 'ambiguous'){ bounce("only 1 asset per tx"); } if(trigger.output[[asset!=base]] ==0) bounce("zero asset tx"); $asset_inp = trigger.output[[asset!=base]]; } if($asset){ $registered = var['reg_'||$asset]; } else{ if(!trigger.data.name) bounce('you must use a name'); $registered = var['name_'||trigger.data.name]; } if(!$registered){ if(trigger.data.register_asset){ return; } else{ bounce('asset must be registered first'); } } $asset_ct = $asset?$asset:$registered; $base_key = 'base_'||$asset_ct ||'_'|| $addr ||'_'|| $ratio; $ratio_key = 'last_ratio_'||$asset_ct; if(!var[$ratio_key] and !trigger.data.price){ bounce('price must be defined before first exchange'); } if(trigger.data.price){ $ratio = round(trigger.data.price);//bytes per 1 asset if($ratio <= 0){ bounce('ratio not allowed'); } } else{ $ratio = var[$ratio_key]; } $asset_key = $asset_ct||'_'||trigger.address||'_'||$ratio; $total_key = 'total'||$asset_ct||$ratio; $total_asset_key = 'total_asset'||$asset_ct||'_'||$ratio; $max_b_to_exchange = var[$total_key]; $max_a_to_exchange = var[$total_asset_key]; $base_inp_in_asset = round($base_inp/$ratio); $asset_inp_in_bytes = $asset_inp*$ratio; if($asset){ if($max_b_to_exchange and $max_b_to_exchange != 0 and !trigger.data.cancel){ //exchange if($asset_inp_in_bytes > $max_b_to_exchange){ //partial exchange till empty,return rest and bfees $byte_amount = $max_b_to_exchange+$base_inp; $asset_amount = round(($asset_inp_in_bytes - $max_b_to_exchange)/$ratio); } else{ //full exchange until empty,return bfees $byte_amount = round($asset_inp_in_bytes)+$base_inp; $asset_amount = 0; } } else{ if(!trigger.data.cancel) $deposit = true; } } else{ if($max_a_to_exchange and $max_a_to_exchange != 0 and !trigger.data.cancel){ //exchange if($base_inp_in_asset > $max_a_to_exchange){ //partial exchange till empty,return rest $asset_amount = round($max_a_to_exchange); $byte_amount = round(($base_inp_in_asset - $max_a_to_exchange)*$ratio); } else{ //full exchange until empty $asset_amount = round($base_inp_in_asset); $byte_amount = 0; } } else{ if(!trigger.data.cancel) $deposit = true; } } }", "messages": { "cases": [ { "if": "{ trigger.data.register_asset and $asset and !var['reg_'||$asset] }", "messages": [ { "app": "payment", "payload": { "asset": "{$asset}", "outputs": [ { "address": "{$addr}", "amount": "{$asset_inp}" } ] } }, { "app": "state", "state": "{ if(trigger.data.name){ if(var['name_'||trigger.data.name]){ bounce('name already chosen'); } } else{ bounce('no name defined'); } var['reg_'||$asset] = true; var['name_'||trigger.data.name] = $asset; }" } ] }, { "if": "{ $asset and $byte_amount and !var[$base_key] }", "messages": [ { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$addr}", "amount": "{$byte_amount-$fee}" } ] } }, { "if": "{$asset_amount > 0}", "app": "payment", "payload": { "asset": "{$asset_ct}", "outputs": [ { "address": "{$addr}", "amount": "{$asset_amount}" } ] } }, { "app": "state", "state": "{ var[$total_asset_key] += $asset_inp-$asset_amount; var[$total_key] -= $byte_amount; var[$ratio_key] = $ratio; response['message'] = 'sold '||($asset_inp-$asset_amount)||'asset for '||($byte_amount)||' bytes'; }" } ] }, { "if": "{ $asset and $byte_amount and !var[$base_key] }", "messages": [ { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$addr}", "amount": "{$byte_amount-$fee}" } ] } }, { "if": "{$asset_amount > 0}", "app": "payment", "payload": { "asset": "{$asset_ct}", "outputs": [ { "address": "{$addr}", "amount": "{$asset_amount}" } ] } }, { "app": "state", "state": "{ var[$total_asset_key] += $asset_inp-$asset_amount; var[$total_key] -= $byte_amount; var[$ratio_key] = $ratio; response['message'] = 'sold '||($asset_inp-$asset_amount)||'asset for '||($byte_amount)||' bytes'; }" } ] }, { "if": "{ !$asset and $asset_amount and !var[$asset_key] }", "messages": [ { "if": "{$byte_amount-$fee > 0}", "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$addr}", "amount": "{$byte_amount-$fee}" } ] } }, { "app": "payment", "payload": { "asset": "{$asset_ct}", "outputs": [ { "address": "{$addr}", "amount": "{$asset_amount}" } ] } }, { "app": "state", "state": "{ var[$total_key] += $base_inp - $byte_amount; var[$total_asset_key] -= $asset_amount; var[$ratio_key] = $ratio; response['message'] = 'bought '||($asset_amount)||' asset for '||($base_inp - $byte_amount)||' bytes'; }" } ] }, { "if": "{ var[$total_key] and var[$asset_key] and var[$total_key] > 0 and var[$asset_key] > 0 }", "init": "{ $max_to_retire = var[$asset_key]*$ratio; if(var[$total_key] <= $max_to_retire){ $retire_amount = var[$total_key]; } else{ $retire_amount = $max_to_retire; } }", "messages": [ { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$addr}", "amount": "{$retire_amount+$base_inp}" } ] } }, { "app": "state", "state": "{ var[$total_key] -= $retire_amount; $ret_ass = round($retire_amount/$ratio); var[$asset_key] -= $ret_ass; response['message'] = 'retired exchanged amount (bytes)'; }" } ] }, { "if": "{ var[$total_asset_key] and var[$base_key] and var[$total_asset_key] > 0 and var[$base_key] > 0 }", "init": "{ $max_to_retire = round(var[$base_key]/$ratio); if(var[$total_asset_key] <= $max_to_retire){ $retire_amount = var[$total_asset_key]; } else{ $retire_amount = $max_to_retire; } }", "messages": [ { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$addr}", "amount": "{$base_inp}" } ] } }, { "app": "payment", "payload": { "asset": "{$asset_ct}", "outputs": [ { "address": "{$addr}", "amount": "{$retire_amount}" } ] } }, { "app": "state", "state": "{ var[$total_asset_key] -= $retire_amount; $ret_bas = $retire_amount*$ratio; var[$base_key] -= $ret_bas; response['message'] = 'retired exchanged amount (asset)'; }" } ] }, { "if": "{ trigger.data.cancel and var[$total_asset_key] and var[$asset_key] and var[$total_asset_key] > 0 and var[$asset_key] > 0 }", "init": "{ if(var[$total_asset_key] <= var[$asset_key]){ $retire_amount = var[$total_asset_key]; } else{ $retire_amount = var[$asset_key]; } }", "messages": [ { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$addr}", "amount": "{$base_inp-(2*$fee)}" } ] } }, { "app": "payment", "payload": { "asset": "{$asset_ct}", "outputs": [ { "address": "{$addr}", "amount": "{$retire_amount}" } ] } }, { "app": "state", "state": "{ var[$total_asset_key] -= $retire_amount; var[$asset_key] -= $retire_amount; response['message'] = 'canceled order (asset)'; }" } ] }, { "if": "{ trigger.data.cancel and var[$total_key] and var[$base_key] and var[$total_key] > 0 and var[$base_key] > 0 }", "init": "{ if(var[$total_key] <= var[$base_key]){ $retire_amount = var[$total_key]; } else{ $retire_amount = var[$base_key]; } }", "messages": [ { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$addr}", "amount": "{$retire_amount+$base_inp-(2*$fee)}" } ] } }, { "app": "state", "state": "{ var[$total_key] -= $retire_amount; var[$base_key] -= $retire_amount; response['message'] = 'canceled order (bytes)'; }" } ] }, { "if": "{ if(!$deposit){ bounce("Deposit not allowed, please cancel order first"); } $deposit }", "messages": [ { "if": "{$asset}", "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$addr}", "amount": "{$base_inp-$fee}" } ] } }, { "app": "state", "state": "{ if($asset){ var[$total_asset_key] += $asset_inp; var[$asset_key] += $asset_inp; response['message'] = 'deposited asset'; } else{ var[$total_key] += $base_inp; var[$base_key] += $base_inp; response['message'] = 'deposited bytes'; } }" } ] } ] } } ]
Technical information
Fees:
7,569 bytes
(353 headers, 7216 payload)
Level:987316
Witnessed level:987309
Main chain index:986135
Latest included mc index:986134
Status:stable/confirmed/final