Unit ID
zVbTNu1wvRb2S2MvSF2pPU8QrANRklJluLRnBlecjBQ=
Received
22.10.2025 10:54:48
Confirmation delay (full node)
6 minutes 21 seconds
Messages
Definition
Definition: [ "autonomous agent", { "doc_url": "https://friends.obyte.org/governance.json", "init": "{ $day = 3600 * 24; // now it's 1 hour for testing, change to 86400 for production $challenging_period = 3600; // 1 hour for testing, change to 86400 for production $friend_aa = params.friend_aa; require($friend_aa, "no friend_aa"); $constants = var[$friend_aa]['constants']; $asset = $constants.asset; // FRD token $names = [ 'rewards_aa', 'messaging_attestors', 'real_name_attestors', 'referrer_frd_deposit_reward_share', 'referrer_bytes_deposit_reward_share', 'referrer_deposit_asset_deposit_reward_share', 'followup_reward_share', 'min_balance_instead_of_real_name', 'deposit_asset', ]; $count_names = 9; require(length($names) == $count_names, "wrong number of governable parameters"); $is_allowed_name = $name => { length(filter($names, $count_names, $n => $n == $name)) == 1 }; $get_sqrt_balance = ($address, $bThrow) => { $user = var[$friend_aa]['user_'||$address]; require($user, "you are not a user here"); $min_unlock_date = timestamp_to_string(timestamp + $day, 'date'); if ($user.unlock_date < $min_unlock_date){ if ($bThrow) bounce("your unlock date must be "||$min_unlock_date||" or later"); return 0; } // balances in deposit assets don't count $balance = $user.balances.frd + $user.balances.base / $friend_aa#2.$get_ceiling_price(); if (!$balance){ if ($bThrow) bounce("you have no locked balance and cannot vote"); return 0; } sqrt($balance) }; $get_value_key = $value => { $key_len = length('support_messaging_attestors_' || $value); ($key_len > 128) ? 'hash_'||sha256($value) : $value }; }", "messages": { "cases": [ { "if": "{ trigger.data.name AND trigger.data.commit }", "init": "{ $name = trigger.data.name; if ($name == 'deposit_asset'){ $deposit_asset = trigger.data.deposit_asset; require(typeof($deposit_asset) == 'string' AND length($deposit_asset) == 44 AND $deposit_asset != $asset, "invalid deposit asset"); $full_name = $name||'_'||$deposit_asset; } else $full_name = $name; $leader = var['leader_' || $full_name]; require(exists($leader), "no leader"); // can be 0 $current_value = var[$full_name]; if (exists($current_value) AND $leader == $current_value) bounce("already equal to leader"); require(var['challenging_period_start_ts_' || $full_name] + $challenging_period < timestamp, "challenging period not expired yet"); $payload = { name: $name, value: $leader, }; if ($name == 'deposit_asset'){ require($leader != 'no', "only oswap AA can be committed"); $payload.deposit_asset = $deposit_asset; } }", "messages": [ { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$friend_aa}", "amount": 5000 } ] } }, { "app": "data", "payload": "{$payload}" }, { "app": "state", "state": "{ var[$full_name] = $leader; }" } ] }, { "if": "{ trigger.data.name }", "init": "{ $name = trigger.data.name; $value = trigger.data.value; // can be empty to remove one's vote require($is_allowed_name($name), "unknown name: " || $name); if ($name == 'deposit_asset'){ $deposit_asset = trigger.data.deposit_asset; require(typeof($deposit_asset) == 'string' AND length($deposit_asset) == 44 AND $deposit_asset != $asset, "invalid deposit asset"); $full_name = $name||'_'||$deposit_asset; } else $full_name = $name; $sqrt_balance = $get_sqrt_balance(trigger.address, true); if (exists($value)){ if ($name == 'rewards_aa' OR $name == 'messaging_attestors' OR $name == 'real_name_attestors' OR $name == 'deposit_asset'){ require(typeof($value) == 'string', "must be a string"); if ($name == 'rewards_aa') require(is_aa($value), "not an AA"); else if ($name == 'deposit_asset'){ if ($value == 'no') // vote 'no' to oppose addition of the asset require(!var[$full_name], "this asset is already added, you can't vote 'no' anymore"); else{ require(is_aa($value), "not an AA"); // just check that it doesn't throw $friend_aa#2.$get_deposit_asset_exchange_rates_on_aa($deposit_asset, $value); } } else{ $arr = split($value, ':'); require(length($arr) > 0, "no attestors"); foreach($arr, 5, $addr => { require(is_valid_address($addr), "invalid attestor address"); }); } } else{ require(typeof($value) == 'number' AND $value >= 0, "must be a nonnegative number"); if ($name == 'min_balance_instead_of_real_name') require(is_integer($value), "value must be integer"); else require($value < 1, "value must be < 1"); } } }", "messages": [ { "app": "state", "state": "{ $votes = var['votes_'||trigger.address] OTHERWISE {}; $prev_choice = $votes[$full_name]; $leader = var['leader_' || $full_name]; var['choice_' || trigger.address || '_' || $full_name] = $value; if (exists($prev_choice)){ $prev_choice_key = $get_value_key($prev_choice.value); var['support_' || $full_name || '_' || $prev_choice_key] -= $prev_choice.sqrt_balance; delete($votes, $full_name); } if (exists($value)){ $value_key = $get_value_key($value); var['support_' || $full_name || '_' || $value_key] += $sqrt_balance; $votes[$full_name] = { value: $value, sqrt_balance: $sqrt_balance }; if (!exists($leader) OR var['support_' || $full_name || '_' || $value_key] > var['support_' || $full_name || '_' || $get_value_key($leader)]){ var['leader_' || $full_name] = $value; var['challenging_period_start_ts_' || $full_name] = timestamp; } } var['votes_'||trigger.address] = $votes; }" } ] }, { "if": "{ trigger.data.update_user_balance AND trigger.data.address }", "messages": [ { "app": "state", "state": "{ $votes = var['votes_'||trigger.data.address]; if (!$votes) return; $sqrt_balance = $get_sqrt_balance(trigger.data.address, false); foreach($votes, $count_names, ($name, $vote) => { $value_key = $get_value_key($vote.value); var['support_' || $name || '_' || $value_key] += $sqrt_balance - $vote.sqrt_balance; $votes[$name].sqrt_balance = $sqrt_balance; }); var['votes_'||trigger.data.address] = $votes; }" } ] } ] } } ]
Technical information
Fees:
7,147 bytes
(406 headers, 6741 payload)
TPS fee:
0 bytes
Actual TPS fee:
0 bytes
Level:3805172
Witnessed level:3805165
Main chain index:3778308
Latest included mc index:3778307
Status:stable/confirmed/final