[
"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);
}"
}
]
}
]
}
}
]