Unit ID
yfuJWQfsBOmI0jQE637juTj1fMuNQ1GuuO6BGFMDrls=
Received
26.10.2019 09:12:02
Confirmation delay (full node)
1 minute 26 seconds
Confirmation delay (light node)
3 minutes 4 seconds
Messages
Definition
Definition: [ "autonomous agent", { "bounce_fees": { "base": 10000 }, "init": "{ // constantes $name = "WEAALTH"; $how_to_claim = "To claim you heritage, enter you signature"; $how_to_setup = "To setup your testament, use, start+testament name then add + beneficiary + percentage, then finish then fill and later cancel_request"; $how_to = $how_to_claim||$how_to_setup; $HOLLAA = "C6M6BLAM2QTK727RTWA3YHZ4VW5ZIGBF"; $SAAFE = "MSUZ5VXI5RBIE734CA4HBNS35ZKI4RYS"; $DEFAULT_DELAY_TO_CANCEL = 4 * 7 * 24 * 60 * 60; // 4 weeks }", "messages": { "cases": [ { "if": "{ !!trigger.data.start and !!trigger.data.testament_name }", "messages": [ { "app": "state", "state": "{ // existing? if (!!var[trigger.data.testament_name]) bounce ("This name exist already!"); // for the moment store the user for faster next steps var[trigger.address] = trigger.data.testament_name; // store the testament writter to be able to change his mind var[trigger.data.testament_name||"_writter"] = trigger.address; // create the testament balance: var[trigger.data.testament_name||"_balance"] = trigger.output[[asset=base]].amount - 2000; response['message'] = 'Testament setup started'; }" } ] }, { "if": "{ !!trigger.data.add and !!trigger.data.beneficiary and !!trigger.data.percentage}", "init": "{ $testament_name = var[trigger.address] otherwise trigger.data.testament_name otherwise bounce ($how_to); if (!(!!trigger.data.public_key_part_1 and !!trigger.data.public_key_part_2)) bounce ("need the 2 parts of the public key linked to this beneficiary"); if (!!var[$testament_name||"_writter"]) if (trigger.address != var[$testament_name||"_writter"]) bounce ("Account "||$testament_name||" already exist!"); // inputs tests if (!is_integer(trigger.data.percentage)) bounce ("Invalid percentage'!"); if (trigger.data.percentage>100) bounce ("Invalid percentage'!"); }", "messages": [ { "app": "data", "payload": { "list_name": "{ $testament_name||"_beneficiaries" }", "add": "{ trigger.data.beneficiary }", "value": "{ "puk1="||trigger.data.public_key_part_1||" puk2="||trigger.data.public_key_part_2||" %="||trigger.data.percentage }" } }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $HOLLAA }", "amount": 1000 } ] } }, { "app": "state", "state": "{ var[trigger.data.testament_name||"_balance"] = trigger.output[[asset=base]].amount - 1000; response['message'] = 'Beneficiariey added'; }" } ] }, { "if": "{ !!trigger.data.finish_testament }", "init": "{ $testament_name = var[trigger.address] otherwise trigger.data.testament_name otherwise bounce ($how_to); if (!!var[$testament_name||"_writter"]) if (trigger.address != var[$testament_name||"_writter"]) bounce ("Account "||$testament_name||" already exist!"); }", "messages": [ { "app": "state", "state": "{ var[trigger.address] = false; var[trigger.data.testament_name||"_balance"] = trigger.output[[asset=base]].amount - 1000; response['message'] = $account_name||" activated ^^"; }" } ] }, { "if": "{ !!trigger.data.fill }", "init": "{ $testament_name = trigger.data.testament_name otherwise bounce ($how_to); }", "messages": [ { "app": "state", "state": "{ var[$testament_name ||"_balance"] += trigger.output[[asset=base]].amount; response['message'] = "Testament balance updates ^^"; }" } ] }, { "if": "{ !!trigger.data.request_heritage and !!trigger.data.beneficiary and !!trigger.data.withdraw_address}", "init": "{ $testament_name = trigger.data.testament_name otherwise bounce ($how_to); // inputs tests if (!var[$testament_name||"_writter"]) bounce ("Account "||$testament_name||" do NOT exist!"); // test siganture existance if (!(!!trigger.data.signature_key_part_1 and !!trigger.data.signature_key_part_2)) bounce ("need the 2 parts of the 'withdraw address' signature"); // test if the user is really a beneficiary if (!var[$HOLLAA][trigger.data.beneficiary]) bounce ("Beneficiary do not exist"); // test if the user is really a beneficiary by cehling signature if (!var[$HOLLAA][trigger.data.beneficiary]) bounce ("Beneficiary do not exist"); $beneficiary_info = var[$HOLLAA][trigger.data.beneficiary]; $puk2_key_word_index = index_of($beneficiary_info, " puk2="); $percentage_key_word_index = index_of($beneficiary_info, " %="); $public_key_part_1 = substring($beneficiary_info , 5, $puk2_key_word_index - 5); $public_key_part_2 = substring($beneficiary_info , $puk2_key_word_index + 6, $percentage_key_word_index); $public_key = $public_key_part_1||$public_key_part_2; $percentage = substring($beneficiary_info , $percentage_key_word_index + 3); $heritage_value = var[$testament_name||"_balance"] * $percentage / 100; // check signature if (!is_valid_sig(trigger.data.withdraw_address, $public_key, trigger.data.signature_key_part_1||trigger.data.signature_key_part_2)) bounce ("wrong signature"); // Check the phase of the withdraw if (!var[trigger.data.beneficiary||"_requested_time"]) $phase = 1; else { if (var[trigger.data.beneficiary||"_requested_time"]+$DEFAULT_DELAY_TO_CANCEL<timestamp) bounce ("request already in progress"); else $phase = 2; } }", "messages": [ { "if": "{ $phase == 1 }", "app": "data", "payload": { "message": "{ trigger.data.beneficiary||" have requested his heritage" }" } }, { "if": "{ $phase == 1 }", "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ var[$testament_name||"_writter"] }", "amount": 1000 } ] } }, { "if": "{ $phase == 2 }", "app": "data", "payload": { "message": "{ "This is your heritage" }" } }, { "if": "{ $phase == 2 }", "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ trigger.data.withdraw_address }", "amount": "{ $heritage_value }" } ] } }, { "app": "state", "state": "{ if ( $phase == 1 ) { var[$testament_name||"_balance"] -= 1000; response['message'] = "requested validated"; } if ( $phase == 2 ) { var[$testament_name||"_balance"] -= $heritage_value; response['message'] = 'Heritage withdrawn'; } }" } ] }, { "messages": [ { "app": "state", "state": "{ bounce ($how_to); }" } ] } ] } } ]
Technical information
Fees:
6,825 bytes
(353 headers, 6472 payload)
Level:1123774
Witnessed level:1123766
Main chain index:1122531
Latest included mc index:1122530
Status:stable/confirmed/final