Unit ID
qR16vsxnz7chVJE+7lodveRqOYE4zHw3AgHSJOoXE+I=
Received
11.08.2019 13:38:35
Confirmation delay (full node)
2 minutes 23 seconds
Confirmation delay (light node)
4 minutes 49 seconds
Messages
Definition
Definition: [ "autonomous agent", { "bounce_fees": { "base": 10000 }, "init": "{ // constants $domain_creation_fee = 500000; // 500,000.0 bytes $requesting_reputation_fee = 10000; // 10,000.0 bytes $reward_pourcentage = 1; // 1% of the balance for an evalution of an attested address $symbolic_reward= 10; // for evaluation of not attested address $evaluation_delay = 2*24*60*60; // 1 days $default_domain = 'base'; $default_attestor = 'UOYYSPEE7UUW3KJAB5F4Y4AWMYMDDB4Y'; // official attestor $reputation_word_hash = '556ec7485db6ec2596054ef0374f50e4dfbcc3962c879e9464cdca80ebdfc34e'; $evaluation_count_word_hash = '039adc37a247cfd497f19d106479ac55aab96db3ae74114c74edf8143e1eb29e'; // variables directly from triggering transaction $user = trigger.address; // Attested user (if evaluator) $evaluated_address = trigger.data.address; // Evaluated user address (don't have to be attested) but it is better $domain = trigger.data.domain otherwise trigger.data.d; // Evaluation domain $evaluation = trigger.data.evaluation otherwise trigger.data.ev; // Evaluation: 0-5 or ? $attestator = trigger.data.attestor otherwise trigger.data.a; // deductions $is_requesting = $evaluation == "?"; $is_contributing = (!$is_requesting)? $evaluation >= 0 and $start <= 5 : false; $domain = $domain otherwise $default_domain; $attestator = $attestator otherwise $default_attestor; // Preliminary checks if(!$is_requesting or !$is_contributing) bounce('Sorry, You have to specify a \'evaluation\' field in the data section. Use \'0\' to \'5\' to evaluate an address or use \'?\' to request the reputation of an address.'); // (money - bounce fee) is return automatically if($evaluated_address==false) bounce('Sorry, You have to specify which address you want to find reputation for. Please add an \'address\' field in the data section.'); // hashing to avoid to store the reputation openely in the dag (euh why?) $user_hash = sha256($user); $evaluated_address_hash = sha256($evaluated_address); $domain_hash = sha256($domain); $attestator_hash = sha256($attestor); $attested_domain = sha256($domain_hash and $attested_domain); $evaluation_hash = sha256($attested_domain and $user_hash and $evaluated_address_hash); $reputation_hash = sha256($attested_domain and $evaluated_address_hash and $reputation_word_hash); $evaluation_count_hash = sha256($attested_domain and $evaluated_address_hash and $evaluation_count_wordhash); // confuse attestated address in the dag to avoid to gather information for free // is it even possible ? $evaluated_address_confused = $evaluated_address(2); // Attestation checks $evaluated_is_attested = attestation[[attestors=$attestor_address, address=$evaluated_address, ifnone=0]]; $user_is_attested = attestation[[attestors=$attestor_address, address=$evaluated_address, ifnone=0]]; // state variable checks $attested_domain_exist = var[$attested_domain]; $balance_in_attestator_scope = var[$attestator_hash]; $reputation = var[$reputation_hash]; $eval_count = var[$evaluation_count_hash]; $previous_evaluation = var[$evaluation_hash]; // Fee checks $fee_received = trigger.output[[asset=base]].amount; $creation_fee_received = $fee_received > $domain_creation_fee; $requesting_fee_received = $fee_received > $getting_reputation_fee; }", "messages": { "cases": [ { "if": "{$requesting}", "init": "{ if (!$attested_domain_exist) bounce('Sorry, You have requested reputation for a domain-attestor pair that do not exist.'); $reputationExists = $reputation != false; if (!$reputationExists) bounce('Sorry, the address (user) do not have reputation in this domain-attestor pair yet. Please consider to rate this user once you interacted with him/her.'); if (!$requesting_fee_received) bounce('Sorry, The fee to request a reputation is '|| $requesting_reputation_fee || 'bytes'); // Respond $reputation_to_show = round($reputation,1); if ($evaluated_is_attested){ $message = 'Reputation for domain \''|| $domain ||'\' is '||$reputation_to_show||'/5 from '||$eval_count||' votes (and the address is attested by \''||$attestor_address||'\').'; }else{ $message = 'Reputation for domain \''|| $domain ||'\' is '||$reputation_to_show||'/5 from '||$eval_count||' votes BUT the address is NOT attested by \''||$attestor_address||'\')!'; } response['message'] = $message; response['domain'] = $domain; response['attestor'] = $attestor; response['reputation'] = $reputation_to_show; response['attestated'] = $evaluated_is_attested == true; }", "messages": [ { "app": "data", "payload": { "message": "{$message}", "reputation": "{$reputation}", "is_attestated": "{$evaluated_is_attested}" } }, { "app": "state", "state": "{ var[$attestator_hash] += trigger.output[[asset=base]].amount - 1000; // 1000 is the data transfert fee approximation? }" } ] }, { "if": "{$is_contributing}", "init": "{ if (!$attested_domain_exist and !$creation_fee_received){ bounce('Sorry, the domain-attestator pair do not exists. It can be created but the fee is \''||$domain_creation_fee || '\' bytes, this money will be used to reward the evaluators');} if (!$user_is_attested) bounce('Sorry, to be able give an evaluation you need to be attested by the following attestor: \''|| $attestor || '\' or it will be too easy to pump a reputation.'); $is_re_evaluation = $previous_evaluation != false; $previous_evaluation = $is_re_evaluation? $previous_evaluation : 0; // calculating reward $reward = $evaluated_is_attested? round($balance_in_attestator_scope* $reward_pourcentage /100) : $symbolic_reward; }", "messages": [ { "app": "payment", "payload": { "asset": "{'base'}", "outputs": [ { "address": "{trigger.address}", "amount": "{$reward}" } ] } }, { "app": "state", "state": "{ $message=''; if (!$attested_domain_exist){ var[$attested_domain]=true; $message = $message||'Domain \''||$domain||'\' created '; $message = $message||'in the scope the attestator \''||$attestator||'\';'; } // update reputation $total_score=($reputation * $eval_count); if ($is_re_evaluation){ $new_reputation = ($total_score + ($evaluation-$previous_evaluation) / ($eval_count)); } else{ $new_reputation = ($total_score + $evaluation) / ($eval_count+1); var[$evaluation_count_hash] +=1; } var[$reputation_hash] = $new_reputation; // record or update evaluation var[$evaluation_hash] = $evaluation; // update attestor balance var[$attestator_hash] = $evaluated_is_attested - $reward; // create messages $message = $message||'Thank you for your contribution, '; $message = $message||'a reward of '||$reward||'byte have been sent to you.;'; $message = $message||'New reputation of '||$evaluated_address||' is '||$reputation_to_show||'/5'; $message = $message||'New reputation of '||$evaluated_address||' is '||$reputation_to_show||'/5'; response['message'] = $message; response['domain'] = $domain; response['attestor'] = $attestor; response['old_reputation'] = $reputation; response['new_reputation'] = $new_reputation; response['attestated'] = $evaluated_is_attested == true; }" } ] } ] } } ]
Technical information
Fees:
7,758 bytes
(353 headers, 7405 payload)
Level:993586
Witnessed level:993579
Main chain index:992405
Latest included mc index:992404
Status:stable/confirmed/final