Unit ID
iFZNfJqT1NHxYMnlA5V9cRslaUcn8bC+tMAV/jZZrZs=
Received
24.08.2019 21:58:01
Confirmation delay (full node)
2 minutes 26 seconds
Confirmation delay (light node)
3 minutes 48 seconds
Messages
Definition
Definition: [ "autonomous agent", { "init": "{ // JAAAWS, Joint Account Agent $aa_name = "JAAAWS"; $owner = "O7NYCFUL5XIJTYE3O4MKGMGMTN6ATQAJ"; $holaa = "FVNMVTIJYAOQJ4LKV65VT23VXIL6ZHF6"; // Holder Of List AA for the list of parties in the account $list = $holaa; $pay_id_received = trigger.data.pay_id otherwise trigger.data.pi otherwise ""; // use cases $validate_pay = $pay_id_received != ""; $cancel = ($pay_id_received != "") AND (trigger.data.cancel==true); }", "messages": { "cases": [ { "if": "{trigger.data.create}", "init": "{ }", "messages": [ { "app": "data", "payload": { "create": "{trigger.data.create}" } }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$list}", "amount": 1 }, { "address": "{trigger.address}", "amount": "{ trigger.output[[asset=base]] - 1000 }" } ] } }, { "app": "state", "state": "{ var[trigger.data.create] = trigger.output[[asset=base]]; var[trigger.data.create||"_in_creation"] = trigger.address; // to avoid abuse; response['message'] = trigger.data.create||" create, please add parties."; }" } ] }, { "if": "{trigger.data.add_party}", "init": "{ if (!trigger.data.account) bounce ("Need 'account'!"); if (!(var[$list][trigger.data.account])) bounce (trigger.data.account||" do not exist"); if (!(var[trigger.data.account||"_in_creation"])) bounce ("The account is final"); if (var[trigger.data.account||"_in_creation"] != trigger.address) bounce ("You are not the account creator!"); }", "messages": [ { "app": "data", "payload": { "list_name": "{trigger.data.account}", "add": "{trigger.data.add_party}" } }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$list}", "amount": 1 } ] } }, { "app": "state", "state": "{ response['message'] = trigger.data.add_party||" added ^^"; }" } ] }, { "if": "{trigger.data.finalize}", "init": "{ $account= trigger.data.finalize; if (!(var[$list][$account])) bounce ($account||" do not exist"); if (!(var[$account||"_in_creation"])) bounce ("The account is already final"); if (var[$account||"_in_creation"] != trigger.address) bounce ("You are not the account creator!"); if (var[$holaa][$account||"_count"] < 2) bounce ("the minimum is 2 parties, use 'add_party'"); }", "messages": [ { "app": "state", "state": "{ var[$account||"_in_creation"] = false; response['message'] = $account||" finalized ^^"; }" } ] }, { "if": "{ trigger.data.pay_to }", "init": "{ $account = trigger.data.account otherwise bounce("Need 'account'!"); $amount = trigger.data.amount otherwise bounce ("Need 'amount'!"); $account_balance = var[$list][$account] otherwise bounce ($account||" do not exist"); $party_number = var[$list][$account||"_"||trigger.address] otherwise bounce ("You are not party of "||$account); if (var[$account||"_in_creation"]) if (var[$account||"_in_creation"] != trigger.address) bounce ("Account not finalized!"); $pay_id = "payment_id_"||sha256($account||'>'||trigger.data.pay_to||':'||trigger.data.amount); // validators $next_validator_number = ($party_number == 1)? 2: 1; $next_validator = var[$list][$account||"_"||$next_validator_number]; }", "messages": [ { "app": "data", "payload": { "message": "{"JAAAWS: Your approval is required for a payment from the account '"||$account||" to pay "||trigger.data.amount||" bytes to "||trigger.data.pay_to||", please validate or cancel it by send me back 'validate = payment_id_xx...xx' or 'cancel = payment_id_xx...xx'.."}", "pay_id": "{$pay_id}" } }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$next_validator}", "amount": 33 } ] } }, { "app": "state", "state": "{ var[$pay_id||"_account"] = $account; var[$pay_id||"_amount"] = trigger.data.amount; var[$pay_id||"_address"] = trigger.data.pay_to; var[$pay_id||"_initiator"] = trigger.address; var[$pay_id||"_waiting_for"] = $next_validator; response['message'] = "Payment "||$pay_id||" created and validation request sent to "||$next_validator; }" } ] }, { "if": "{ trigger.data.validate }", "init": "{ // bounces $pay_id = trigger.data.validate; $account = var[$pay_id||"_account"] otherwise bounce ("Payment ID "||$pay_id||" do not exist!"); $amount = var[$pay_id||"_amount"] otherwise bounce ("No amount available !"); $address = var[$pay_id||"_address"] otherwise bounce ("No address to pay !"); $initiator = var[$pay_id||"_initiator"] otherwise bounce ("No initiator !"); $validator_waited_for = var[$pay_id||"_waiting_for"] otherwise bounce ("Not waiting for validation"); $party_number = var[$list][$account||"_"||trigger.address] otherwise bounce ("You are not party of "||$account); if ($validator_waited_for!=trigger.address) bounce ("Waiting first for validation by "||$validator_waited_for); // need more validation? $last_validator_num = var[$list][$account||"_count"]; $last_validator = var[$list][$account||"_"||$last_validator_num] otherwise bounce ("error"); if (trigger.address == $last_validator) // validation rounds complete $payment_complete_validated = true; else { // find next valisator $last_validator_num = (var[$list][$account||"_"||$validator_waited_for]); $jump = (var[$list][$account||"_"||($last_validator_num+1)] == $initiator)? 2:1; $next_validator = var[$list][$account||"_"||($last_validator_num+$jump)]; } // creation of messages if ($payment_complete_validated) { // lets do the payment $next_address = $address; $next_amount = $amount; $next_message = "Payment of "||$next_amount||" done to "||$next_address||" from account "||$account; } else { // prepare message for next valisator $next_address = $next_validator; $next_amount = 33; $next_message = "JAAAWS: Your approval is required for a payment from the account '"||$account||" to pay "||$amount||" to "||$address||", please validate or cancel it by send me back 'validate = payment_id_xx...xx' or 'cancel = payment_id_xx...xx'."; } }", "messages": [ { "app": "data", "payload": { "message": "{$next_message}", "pay_id": "{$pay_id_received}" } }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$next_address}", "amount": "{$next_amount}" } ] } }, { "app": "state", "state": "{ if ($payment_complete_validated) { var[$pay_id||"_account"] = false; var[$pay_id||"_amount"] = false; var[$pay_id||"_address"] = false; var[$pay_id||"_initiator"] = false; var[$pay_id||"_waiting_for"] = false; response['message'] = "Payment of "||$amount||" to "||$address||" is finally sent to "||$next_address; } else { var[$pay_id||"_waiting_for"] = $next_validator; response['message'] = "Next validation request has been sent to "||$next_validator; } }" } ] }, { "if": "{ trigger.data.cancel}", "init": "{ // bounces $pay_id = trigger.data.cancel; if (!(var[$pay_id||"_account"])) bounce ("Payment ID "||$pay_id||" do not exist!"); $account = var[$pay_id||"_account"]; if (!(var[$list][$account||"_"||trigger.address])) bounce ("You are not party of "||$account); }", "messages": [ { "app": "state", "state": "{ var[$pay_id||"_account"] = false; var[$pay_id||"_amount"] = false; var[$pay_id||"_address"] = false; var[$pay_id||"_initiator"] = false; var[$pay_id||"_waiting_for"] = false; response['message'] = "Payment of "||$amount||" to "||$address||" is cancelled by "||trigger.address; }" } ] }, { "messages": [ { "init": "{ if (!(trigger.data.account)) bounce ("need account name"); $input = trigger.output[[asset=base]]; }", "app": "state", "state": "{ var[$account] += $input; response['message'] = $input||" added to the account "||$account; }" } ] } ] } } ]
Technical information
Fees:
8,083 bytes
(353 headers, 7730 payload)
Level:1024169
Witnessed level:1024162
Main chain index:1022982
Latest included mc index:1022981
Status:stable/confirmed/final