Unit ID
zln4t2ly4mQtB4Tepx1iHScSQRLBn/WtdLn6YzKWSI4=
Received
23.02.2020 21:53:19
Confirmation delay (full node)
5 minutes 1 second
Confirmation delay (light node)
6 minutes 48 seconds
Messages
Definition
Definition: [ "autonomous agent", { "bounce_fees": { "base": 11000 }, "init": "{ $user = trigger.address; $is_aa = $user == this_address; $received_asset = trigger.output[[asset!=base]].asset; $received_amount = trigger.output[[asset!=base]].amount; }", "messages": { "cases": [ { "if": "{!var["def_asset_hash"] }", "init": "{ // if the creation of the asset have started, // only the creator can interract with tha AA until the asset is defined if (!!var["def_creator"]) if (var["def_creator"] != $user) bounce("The asset is being created, and you are not the creator, try again later!"); $previous_underlying_asset_hash = var["previous_underlying_asset"] otherwise "first"; $received_underlying_asset_hash = $received_asset ; $received_underlying_asset_amount = $received_amount; }", "messages": [ { "app": "state", "state": "{ var["def_creator"] = $user; // store in the definition, the quantity of asset var["def_"||$received_underlying_asset_hash||"_amount"] = $received_underlying_asset_amount; // create the next chain link var["def_"||$previous_underlying_asset_hash] = $received_underlying_asset_hash; var["previous_underlying_asset"] = $received_underlying_asset_hash; }" } ] }, { "if": "{!!trigger.data.define}", "init": "{ // if the creation of the asset have started, // only the creator can interract with tha AA until the asset is defined if (!!var["def_creator"]) { if (var["def_creator"] != $user) bounce("Only the creator of the asset is allowed to define it!"); } // an asset requires at least 2 underlying assets if (!!var["first"]) { $first_chain_link = var["first"]; if (!var[$first_chain_link]) bounce("an asset requires at least 2 underlying assets, please send the second underlying asset in the desired amount!"); } else bounce("To create a new asset, start sending the wanted amount of the first underlying asset!"); $asset_name = trigger.data.define; $previous_underlying_asset = var["previous_underlying_asset"]; }", "messages": [ { "app": "asset", "payload": { "is_private": false, "is_transferrable": true, "auto_destroy": true, "fixed_denominations": false, "issued_by_definer_only": true, "cosigned_by_definer": false, "spender_attested": false } }, { "app": "state", "state": "{ response["defined"] = $asset_name ||" is defined as "||response_unit; var["def_asset_hash"] = response_unit; var["def_asset_name"] = trigger.data.define; }" } ] }, { "if": "{!!var["def_creator"] and var["def_creator"] == $user}", "messages": [ { "app": "payment", "payload": { "asset": "{var["def_asset_hash"]}", "outputs": [ { "address": "{var["def_creator"] }", "amount": "{ 1 }" } ] } }, { "app": "state", "state": "{ response["defined"] = $asset_name ||"Creator got one asset and do not have any role to play"; var["def_creator"] = false; // we can remove the creator }" } ] }, { "if": "{($received_asset == var["def_asset_hash"]) or $is_aa}", "init": "{ if (!$is_aa) { $requester = $user; $underlying_asset_hash = var["def_first"]; $amount = $received_amount; } else { $requester = trigger.data.aa_reserved_requester; $underlying_asset_hash = trigger.data.aa_reserved_underlying_asset_hash; $amount = trigger.data.aa_reserved_asset_amount; } // use the link chain to get the next underlying asset $next_underlying_asset_hash = var["def_"||$underlying_asset_hash]; }", "messages": [ { "app": "payment", "payload": { "asset": "{$underlying_asset_hash }", "outputs": [ { "address": "{$requester}", "amount": "{$amount * var["def_"||$underlying_asset_hash]||"_amount"}" } ] } }, { "if": "{!!$next_underlying_asset_hash}", "app": "data", "payload": { "aa_reserved_requester": "{$requester}", "aa_reserved_underlying_asset_hash": "{$next_underlying_asset_hash}", "aa_reserved_asset_amount": "{$amount}" } }, { "if": "{!!$next_underlying_asset_hash}", "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{this_address}", "amount": "{ 1 }" } ] } } ] }, { "if": "{ // send the first unerlying asset or the one needed (!!var[$user||"_underlying_asset"] and ($received_asset == var[$user||"_underlying_asset"])) OR ( !var[$user||"_underlying_asset"] and ($received_asset == var["def_first"])) }", "init": "{ if (!!var[$user||"_underlying_asset"]) { $underlying_asset_hash = var[$user||"_underlying_asset"]; $etf_amount = var[$user||"_etf_amount"]; $needed_mount = $etf_amount * var["def_"||$underlying_asset_hash||"_amount"]; if ($received_amount != $needed_mount) bounce ("you should send "||$needed_mount|| " of "||$underlying_asset_hash); } else { $underlying_asset_hash = var["def_first"]; $needed_mount = var["def_"||$underlying_asset_hash||"_amount"]; //check if is a multiple of the first underlying asset amount if (($received_amount % $needed_mount) != 0) bounce ("you should send a multiple of "||$needed_mount|| " of "||$underlying_asset_hash); else $etf_amount = $received_amount / $needed_mount; } // use the link chain to get the next underlying asset $next_underlying_asset_hash = var["def_"||$underlying_asset_hash]; $all_underlying_asset_received = !$next_underlying_asset_hash; }", "messages": [ { "if": "{$all_underlying_asset_received}", "app": "payment", "payload": { "asset": "{$underlying_asset_hash }", "outputs": [ { "address": "{$requester}", "amount": "{$amount * var["def_"||$underlying_asset_hash]||"_amount"}" } ] } }, { "app": "state", "state": "{ if ($all_underlying_asset_received) { var[$user||"_etf_amount"] = false; var[$user||"_underlying_asset"] = false; response["processed"] = var["def_asset_name"]||"sent"; } else { var[$user||"_etf_amount"] = $etf_amount; var[$user||"_underlying_asset"] = $next_underlying_asset_hash; response["in progress"] = $underlying_asset_hash ||"received and waiting for "||$next_underlying_asset_hash; } }" } ] } ] } } ]
Technical information
Fees:
5,785 bytes
(353 headers, 5432 payload)
Level:1251363
Witnessed level:1251355
Main chain index:1246235
Latest included mc index:1246234
Status:stable/confirmed/final