Unit ID
ZbIuc0fwZosvZW8P2TRzBs5V05IA20kFBA70JzuJj9s=
Received
10.09.2019 21:02:11
Confirmation delay (full node)
2 minutes 41 seconds
Confirmation delay (light node)
3 minutes 57 seconds
Messages
Definition
Definition: [ "autonomous agent", { "init": "{ $i = trigger.data; // How is works, instruction to be bounce if not used case selected $INSTRUCTIONS = "Create a locked guarantee with 'create' = <unique account name> and 'owner' = <address of the owner for who you should lock a guarantee for>. Once locked, it will require consensus between the 2 parties on how to distribute it to unlock it. Both parties should use 'proposition' = <part of the guarantee you are agree to release for the other party>. When the sum of the 2 propositions is equal to the guarantee amount, the guarantee is unlock and distribute accordingly to the 2 parties."; // Owner of the AA can withdraw the dust $AA_OWNER = "MYESSCFGDERS3YIEGNZDOG2BI5HKQHLU"; $AA_NAME = "ARGAA"; // A Renting Guarantee Autonomous Agent // Account name is used to store de related information $account_name = $i.account_name otherwise $i.create; $key = $account_name||"_"; // There is 2 parties, owner and renter, known from the AA state or from the input during creation of the account $owner = var[$key||"owner"] otherwise $i.owner otherwise $i.o; $renter = var[$key||"renter"] otherwise trigger.address; // the object of the account is the guarantee, known a existing account or equal to the funds sent during the creation $guarantee = var[$key||"guarantee"] otherwise trigger.output[[asset=base]]-1000; // For the gurantee to be release, both parties should send proposition of release for the other party: $owner_proposition = var[$key||"owner_proposition"] otherwise 0; $renter_proposition = var[$key||"renter_proposition"] otherwise 0; $trigger_proposition = $i.proposition otherwise $i.p otherwise false; // the AA is keeping in mind the total amount of guarantee to have a way to now the dust available in its balance: $total = var["total"] otherwise 0; }", "messages": { "cases": [ { "if": "{ !!$i.create and !!$owner}", "init": "{ if (var[$key||"guarantee"]) bounce ("Already a guarantee with this name"); if (!$owner) bounce ("need 'owner = <address>'!"); }", "messages": [ { "app": "data", "payload": { "account_name": "{ $account_name }", "guarantee": "{ $guarantee }", "aa": "{ this_address }" } }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $owner }", "amount": "{ 1 }" } ] } }, { "app": "state", "state": "{ var[$key||"owner"] = $owner; var[$key||"guarantee"] = $guarantee; var[$key||"renter"] = $renter; var["total"] = $total + $guarantee; response['message'] = $guarantee||" bytes locked as guarantee."; }" } ] }, { "if": "{ !!$i.account_name and !!$trigger_proposition }", "init": "{ // Exceptions if ($trigger_proposition > $guarantee) bounce ("The proposition is larger than the full guarantee!"); if (trigger.address != $renter and trigger.address != $owner) bounce ("You are not part of the agreement!"); // Lets find which party is giving a new proposition $new_owner_proposition = trigger.address == $owner ? $trigger_proposition : $owner_proposition; $new_renter_proposition = trigger.address == $renter ? $trigger_proposition : $renter_proposition; // Agreement is found if both propositions have been received and their sum is equal to the guarantee $agreement_found = ( $new_owner_proposition + $new_renter_proposition ) == $guarantee; // Distribute the guarantee? send a symbolic byte to make a party aware of the new proposition? $amount_to_send_to_renter = $agreement_found ? $new_owner_proposition : trigger.address == $owner ? 1:0; $amount_to_send_to_owner = $agreement_found ? $new_renter_proposition : trigger.address == $renter ? 1:0; }", "messages": [ { "app": "data", "payload": { "account_name": "{ $account_name }", "guarantee": "{ $guarantee }", "agreement": "{ $agreement_found }", "renter_proposition": "{ $new_renter_proposition }", "owner_proposition": "{ $new_owner_proposition }", "aa": "{ this_address }" } }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $renter }", "amount": "{ $amount_to_send_to_renter }" }, { "address": "{ $owner }", "amount": "{ $amount_to_send_to_owner }" }, { "address": "{ trigger.address }", "amount": "{ trigger.output[[asset=base]]-2000 }" } ] } }, { "app": "state", "state": "{ if ($agreement_found) { // clear the full state var[$key||"renter"] = false; var[$key||"renter_proposition"] = false; var[$key||"owner"] = false; var[$key||"owner_proposition"] = false; var[$key||"guarantee"] = false; var["total"] = $total - $guarantee; response['message'] = "Agreement found and funds have been sent back to parties ^^"; } else { // safe the proposition var[$key||"renter_proposition"] = $new_renter_proposition; var[$key||"owner_proposition"] = $new_owner_proposition; response['message'] = "Proposition recorded ("||$trigger_proposition||" bytes), the other party should set 'amount' to "|| ($guarantee - $trigger_proposition)||" bytes to find agreement ^^"; } }" } ] }, { "init": "{ if (trigger.address != $AA_OWNER) bounce ($INSTRUCTIONS); }", "messages": [ { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $AA_OWNER }", "amount": "{ balance[base] - $total - 1000 }" } ] } }, { "app": "state", "state": "{ response['message'] = "Dust sent to AA owner"; }" } ] } ] } } ]
Technical information
Fees:
5,346 bytes
(353 headers, 4993 payload)
Level:1054260
Witnessed level:1054253
Main chain index:1053033
Latest included mc index:1053032
Status:stable/confirmed/final