Unit ID
65URtg1MZHLYYX/gcEa7y4l6bs9BZ65LLXyFKhuVIv4=
Received
19.07.2021 15:06:00
Confirmation delay (full node)
15 minutes 30 seconds
Messages
Definition
Definition: [ "autonomous agent", { "init": "{ $nom_AA = 'Accions'; //$_Registre = '5WVBJQHTEP54AEYUJGTQKWTXTXZSJQWA'; $_Registre = trigger.data._Registre; // * només x tests // $_Portal = $__dada( '_Portal' ); $_Portal = trigger.address; // * només x tests if ( $_Portal != trigger.address ) bounce( 'Portal no reconegut' ); // Arguments i dades rebudes $args = trigger.data; $adr__ = trigger.initial_address; $id_unitat = trigger.output[[ asset != base ]].asset; $qt = trigger.output[[ asset = $id_unitat ]]; $ref = $args.ref; $provisio = $id_unitat == 'none'; $ACC = $args.accio otherwise ''; $dades = $args.dades otherwise {}; $args.sentit = 'entrada'; // Funcions $__dada = $refval => data_feed[[ oracles = $_Registre, feed_name = $refval, ifnone = false ]]; $__arg = $arg => $args[ $arg ] otherwise bounce( "Cal proporcionar el valor de: " || $arg ); // Getó utilitzat $geto = $id_unitat == $__dada( 'Estels' ) ? 'Estels': $__dada( 'geto_' || $id_unitat ); // + Funcions $__definidor = $refdef => { $geto == 'Estels' ? $__dada( $refdef ) : $__dada( $geto || '_' || to_lower( $refdef ) ) }; // Comprova si adreça activada per operar amb getó especificat $__activada = ( $refe, $adre ) => !! $__dada( 'activacio_' || $refe || '_' || $adre ) ? true : bounce( 'Adreça no activada per a ' || $refe ); // Comprova si qt proporcionada cobreix import especificat $__qtSuficient = $refe, $q => { $import_requerit = $__definidor( $refe ); $import_requerit > $q ? bounce( "L'" || $refe || " és de " || $import_requerit ) : true }; // Comprova si adreça consta com a subscrita $__subscrita = $adr => !! $__dada( 'subscripcio_' || $geto || '_' || $adr ) ? true : bounce( "Adreça no subscrita per a " || $geto ); // Cicle actual $cicle_actual = 1 + floor( ( timestamp - $__dada( 'Origen' ) ) / $__dada( 'Interval' )); $dades.cicle_actual = $cicle_actual; // Escala actual $nombre_digits = length( $__dada( 'volum_ASRAC' ) otherwise 1 ); $escala_actual = $__dada( 'escala_actual' ); $data_escala_actual = $__dada( 'data_escala_actual' ); if ( $nombre_digits > $escala_actual ) { $nova_escala = $nombre_digits; $data_nova_escala = timestamp; $interval_escala = 1000; } else $interval_escala = timestamp - $data_escala_actual + 1000; if ( !! $nova_escala ) { $dades.escala_actual = $nova_escala; $dades.data_escala_actual = $data_nova_escala; $dades[ 'data_escala_' || $nova_escala ] = $data_nova_escala; } $dades.interval_escala = $interval_escala; // Actuant activada? if ( $ACC == 'Activacio') { if ( $geto != 'Estels' ) $activa_x_estels = $__activada( 'Estels', $adr__ ); } else { $activa_x_estels = $__activada( 'Estels', $adr__ ); if ( $geto != 'Estels' ) $activa_x_geto = $__activada( $geto, $adr__ ); } // Consulta si acció restringida $__accRestringida = $ac => { $geto == 'Estels' ? false : $__dada( $geto || '_' || $ac || 'ns_restringides' ) }; // Si acció restringida per al getó especificat, comprova si adreça capacitada $__capacitada = ( $ac, $ad ) => { $capacitacio = $__dada( $geto || '_' || $ac || '_' || $ad ) otherwise ''; $__accRestringida( $ac ) AND $capacitacio != 'capacitada' ? bounce( 'Acció restringida i adreça no capacitada' ) : true }; $adr__capacitada = $__capacitada( $ACC, $adr__ ); // Nou total $__nou_total = ( $ref_tot, $increment ) => { $nou_total = $__dada( 'total_' || $ref_tot ) otherwise 0; $dades[ 'total_' || $ref_tot ] = $nou_total + $increment; }; // Totals i ASRAC $total_activacions = $__dada( 'total_activacions_Estels' ) otherwise 0; $total_subscripcions = $__dada( 'total_subscripcions_Estels' ) otherwise 0; $total_renovacions = $__dada( 'total_renovacions_Estels' ) otherwise 0; $total_aportacions = $__dada( 'total_aportacions_Estels' ) otherwise 0; $total_contribucions = $__dada( 'total_contribucions_Estels' ) otherwise 0; $dades[ 'volum_ASRAC' ] = $total_activacions + $total_subscripcions + $total_renovacions + $total_aportacions + $total_contribucions; $increment_FOP_compensable = $ACC == 'Activacio' OR $ACC == 'Subscripcio' OR $ACC == 'Renovacio' OR $ACC == 'Contribucio' ? $qt : 0; if ( $increment_FOP_compensable > 0 ) { $estat_interficie = $__dada( 'interficie_' || $args.interficie || '_estat' ) otherwise '-'; $interficie = $estat_interficie == 'operatiu' ? $args.interficie : 'basica'; $__nou_total( 'FOP_' || $geto || '_via_' || $interficie, $increment_FOP_compensable ); $estat_promotora = $__dada( 'promotora_' || $args.promotora || '_estat' ) otherwise '-'; $promotora = $estat_promotora == 'operatiu' ? $args.promotora : 'basica'; $__nou_total( 'FOP_' || $geto || '_per_' || $promotora, $increment_FOP_compensable ); } // Ordinal acció $ordinal_accio = $__dada( 'ordinal_' || $ACC || '_' || $geto ) + 1; $dades[ 'ordinal_' || $ACC || '_' || $geto ] = $ordinal_accio; // FOP i id Estels $_FOP = $__dada( '_FOP' ); $id_estels = $__dada( 'Estels' ); $_FOP_receptor = $geto == 'Estels' ? $_FOP : $__dada( $geto || '__FOP' ); // ... $registre = {}; $registre.dades = $dades; }", "messages": { "cases": [ { "if": "{ $ACC == 'Activacio' }", "init": "{ $ord_activacio = 'activacio_' || $ordinal_accio; $ref_activacio = 'activacio_' || $geto || '_' || $adr__; if ( !! $__dada( $ref_activacio ) ) bounce( 'Adreça ja activada' ); $condicions = $__qtSuficient( 'Import_Activacio', $qt ); $dades[ $ref_activacio ] = $ord_activacio; $dades[ $ord_activacio || '_data' ] = timestamp; $dades[ $ord_activacio || '_nom' ] = $__arg( 'nom' ); $dades[ $ord_activacio || '_qt' ] = $qt; $dades[ $ord_activacio || '_cicle' ] = $cicle_actual; if ( $geto == 'Estels' ) $dades[ $ord_activacio || '_escala' ] = $escala_actual; $dades[ $ord_activacio || '_interval' ] = $interval_escala; $__nou_total( 'activacions_' || $geto, $qt ); }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $__dada( 'Provisio' ) }" } ] } }, { "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP_receptor }", "amount": "{ $qt }" } ] } }, { "app": "state", "state": "{ response[ 'Acció' ] = $ACC; response[ 'Nom' ] = $args.nom; response[ 'Adreça' ] = $adr__; response[ 'Getó' ] = $geto; }" } ] }, { "if": "{ $ACC == 'Subscripcio' }", "init": "{ $ord_subscripcio = 'subscripcio_' || $ordinal_accio; $ref_subscripcio = 'subscripcio_' || $geto || '_' || $adr__; $nou_ordinal_renovacio = $__dada( 'ordinal_renovacio' ) + 1; $ord_renovacio = 'renovacio_' || $nou_ordinal_renovacio; $ref_renovacio = 'renovacio_' || $geto || '_' || $adr__; if ( !! $__dada( $ref_subscripcio ) ) bounce( 'Adreça ja subscrita' ); $condicions = $__qtSuficient( 'Import_Subscripcio', $qt ) AND $__arg( 'nom' ) AND $__arg( 'aportacio' ); $dades[ $ref_subscripcio ] = $ord_subscripcio; $dades[ $ord_subscripcio || '_data' ] = timestamp; $dades[ $ord_subscripcio || '_nom' ] = $args.nom; $dades[ $ord_subscripcio || '_aportacio' ] = $args.aportacio; $dades[ $ord_subscripcio || '_cicle' ] = $cicle_actual; $dades[ $ref_renovacio ] = $ord_renovacio; $dades[ $ord_renovacio || '_data' ] = timestamp; $dades[ $ord_renovacio || '_cicle' ] = $cicle_actual; $dades[ 'ordinal_renovacio' ] = $nou_ordinal_renovacio; $__nou_total( 'subscripcions_' || $geto, $qt ); }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $__dada( 'Provisio' ) }" } ] } }, { "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP_receptor }", "amount": "{ $qt }" } ] } }, { "app": "state", "state": "{ response[ 'Acció' ] = $ACC; response[ 'Nom subscriptora' ] = $args.nom; response[ 'Adreça subscriptora' ] = $adr__; response[ 'Cicle subscripció' ] = $cicle_actual; response[ 'Getó' ] = $geto; }" } ] }, { "if": "{ $ACC == 'Renovacio' }", "init": "{ $ord_renovacio = 'renovacio_' || $ordinal_accio; $ref_renovacio = 'renovacio_' || $geto || '_' || $adr__; $cicle_renovat = $__dada( $ord_renovacio || '_cicle' ) otherwise 1; if ( $cicle_actual == $cicle_renovat ) bounce( 'Cicle actual ( ' || $cicle_actual || ' ) ja renovat' ); $condicions = $__subscrita( $adr__ ) AND $__qtSuficient( 'Import_Renovacio', $qt ); $dades[ $ref_renovacio ] = $ord_renovacio; $dades[ $ord_renovacio || '_data' ] = timestamp; $dades[ $ord_renovacio || '_cicle' ] = $cicle_actual; $__nou_total( 'renovacions_' || $geto, $qt ); }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $__dada( 'Provisio' ) }" } ] } }, { "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP_receptor }", "amount": "{ $qt }" } ] } }, { "app": "state", "state": "{ response[ 'Acció' ] = $ACC; response[ 'Cicle renovat' ] = $cicle_actual; response[ 'Subscriptora' ] = $adr__; response[ 'Getó' ] = $geto; }" } ] }, { "if": "{ $ACC == 'Diposit' }", "init": "{ $ord_diposit = 'diposit_' || $geto || '_' || $ordinal_accio; $ref_diposit = 'diposit_' || $geto || '_' || $adr__; $condicions = $__subscrita( $adr__ ); if ( $qt < $__definidor( 'Diposit_Minim' ) ) bounce( 'El dipòsit mínim és de ' || $__definidor( 'Diposit_Minim' ) ); $ord_renovacio = $__dada( 'renovacio_' || $geto || '_' || $adr__ ); $cicle_renovat = $__dada( $ord_renovacio || '_cicle' ); if ( $cicle_renovat < $cicle_actual ) bounce( 'Subscripció no renovada. Darrer cicle renovat: ' || $cicle_renovat || ' Cicle actual: ' || $cicle_actual ); $taxa_conversio = $__definidor( 'Taxa_Conversio' ); $cicles_diposit = $__definidor( 'Cicles_Diposit' ); $factor_conversio = $__definidor( 'factor_conversio' ) otherwise 1; $cicle_conversio = $cicle_actual + $cicles_diposit; $taxa = round( $qt * $factor_conversio * $taxa_conversio / 100, 0 ); $qt_conversio = $qt - $taxa; $dades[ $ref_diposit ] = $ord_diposit; $dades[ $ord_diposit || '_qt' ] = $qt; $dades[ $ord_diposit || '_dipositant' ] = $adr__; $dades[ $ord_diposit || '_cicle' ] = $cicle_actual; $dades[ $ord_diposit || '_geto_diposit' ] = $geto; $dades[ $ord_diposit || '_data' ] = timestamp; $dades[ $ord_diposit || '_taxa' ] = $taxa_conversio; $dades[ $ord_diposit || '_qt_conversio' ] = $qt_conversio; $dades[ $ord_diposit || '_cicle_conversio' ] = $cicle_conversio; $__nou_total( 'diposits_' || $geto, $qt ); }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $__dada( 'Provisio' ) }" } ] } }, { "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP }", "amount": "{ $qt }" } ] } }, { "app": "state", "state": "{ response[ 'Acció' ] = $ACC; response[ 'Ref' ] = $ref_diposit; response[ 'Qt dipòsit' ] = $qt; response[ 'Qt conversió' ] = $qt_conversio; response[ 'Taxa' ] = $taxa_conversio; response[ 'Cicle dipòsit' ] = $cicle_actual; response[ 'Cicle conversió' ] = $cicle_conversio; }" } ] }, { "if": "{ $ACC == 'Contribucio' }", "init": "{ // Les contribucions només es poden fer en Estels if ( $geto != 'Estels' ) bounce( 'Les contribucions només es poden fer en Estels' ); $ord_contribucio = 'contribucio_' || $ordinal_accio; $ref_contribucio = 'contribucio_' || $adr__; $dades[ $ref_contribucio ] = $ord_contribucio; $dades[ $ord_contribucio || '_qt' ] = $qt; $dades[ $ord_contribucio || '_contribuidora' ] = $adr__; $dades[ $ord_contribucio || '_cicle' ] = $cicle_actual; $dades[ $ord_contribucio || '_escala' ] = $escala_actual; $dades[ $ord_contribucio || '_interval' ] = $interval_escala; $dades[ $ord_contribucio || '_data' ] = timestamp; $__nou_total( 'contribucions_Estels', $qt ); }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $__dada( 'Provisio' ) }" } ] } }, { "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP }", "amount": "{ $qt }" } ] } }, { "app": "state", "state": "{ response[ 'Acció' ] = $ACC; response[ 'Ref' ] = $ref_contribucio; response[ 'Contribuïdora' ] = $adr__; response[ 'Quantitat' ] = $qt; }" } ] }, { "if": "{ $ACC == 'Transfer' }", "init": "{ $receptora = $__arg( 'receptora' ); $receptora_activada = $__activada( 'Estels', $receptora ) AND $__activada( $geto, $receptora ); $receptora_capacitada = $__capacitada( 'recepcio', $receptora ); $ref_subscripcio = 'subscripcio_' || $geto || '_' || $receptora; $ord_subscripcio = $__dada( $ref_subscripcio ); $ref_renovacio = 'renovacio_' || $geto || '_' || $receptora; $ord_renovacio = $__dada( $ref_renovacio ); $cicle_renovacio = $__dada( $ord_renovacio || '_cicle' ); $receptora_renovada = !! $cicle_renovacio AND $cicle_renovacio == $cicle_actual; $__nou_total( 'transfers_' || $geto, $qt ); $args.qt_transfer = $qt; if ( $ord_subscripcio AND $receptora_renovada ) { $percent_aportacio = $__dada( $ord_subscripcio || '_aportacio' ); $qt_aportacio = floor( $qt * $percent_aportacio / 100 ); $args.qt_transfer = $qt - $qt_aportacio; $__nou_total( 'aportacions_' || $geto, $qt_aportacio ); $__nou_total( 'aportacions_' || $geto || '_' || $args.receptora, $qt_aportacio ); } }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $__dada( 'Provisio' ) }" } ] } }, { "if": "{ !! $qt_aportacio }", "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP_receptor }", "amount": "{ $qt_aportacio }" }, { "address": "{ $receptora }", "amount": "{ $args.qt_transfer }" } ] } }, { "if": "{ ! $qt_aportacio }", "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $receptora }", "amount": "{ $args.qt_transfer }" } ] } }, { "app": "state", "state": "{ response[ 'Acció' ] = $ACC; response[ 'Receptora' ] = $receptora; response[ 'Quantitat' ] = $args.qt; response[ 'Getó' ] = $geto; if ( !! $qt_aportacio ) response[ 'Receptora aporta a FOP'] = $qt_aportacio || ' ' || $geto; }" } ] }, { "if": "{ $ACC == 'Conversio' }", "init": "{ $qt_dipositada = $__dada( $ref || '_qt' ); if ( ! $qt_dipositada ) bounce( 'Dipòsit desconegut' ); $qt_conversio = $__dada( $ref || '_qt_conversio' ); $geto_diposit = $__dada( $ref || '_geto_diposit' ); $cicle_conversio = $__dada( $ref || '_cicle_conversio' ); $ord_renovacio = $__dada( 'renovacio_' || $geto_diposit || '_' || $adr__ ); $cicle_renovat = $__dada( $ord_renovacio || '_cicle' ); $id_unitat_conversio = $geto_diposit == 'Estels' ? 'base' : $id_estels; $unitat_conversio = $geto_diposit == 'Estels' ? 'Bytes' : 'Estels'; $ref_conversio = 'conversio_' || $ref; $ord_conversio = 'conversio_' || $ordinal_accio; if ( $adr__ != $__dada( $ref || '_dipositant' )) bounce( "L'adreça receptora ha de ser la dipositant" ); if ( !! $__dada( $ref_conversio )) bounce( 'Aquest dipòsit ja ha estat convertit' ); if ( $cicle_conversio > $cicle_actual ) bounce( "Encara no és l'hora" ); if ( $cicle_renovat < $cicle_actual ) bounce( "No renovada en " || $geto_diposit || " per al cicle actual: " || $cicle_actual ); $dades[ $ref_conversio ] = $ord_conversio; $dades[ $ord_conversio || '_data' ] = timestamp; $dades[ $ord_conversio || '_qt' ] = $qt_conversio; $dades[ $ord_conversio || '_unitat' ] = $unitat_conversio; $dades[ $ord_conversio || '_rebedora' ] = $adr__; $__nou_total( 'conversions_' || $geto_diposit, $qt_dipositada ); $__nou_total( 'taxes_' || $geto_diposit, ( $qt_dipositada - $qt_conversio )); $args.qt = $qt_conversio; $args.rebedora = $adr__; $args.sentit = 'sortida'; $args.id_unitat_sortida = $id_unitat_conversio; $args.unitat_sortida = $unitat_conversio; }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $__dada( 'Provisio' ) }" } ] } }, { "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP }", "amount": "{ $qt }" } ] } }, { "app": "state", "state": "{ response[ 'Acció' ] = $ACC; response[ 'Rebedora' ] = $args.rebedora; response[ 'Quantitat' ] = $args.qt; response[ 'Unitat' ] = $args.unitat_sortida; }" } ] }, { "if": "{ $ACC == 'Retribucio' }", "init": "{ $ord_retribucio = 'retribucio_' || $ordinal_accio; if ( $ref == 'aportacio_activacio' ) { $ord_activac = $__dada( 'activacio_Estels_' || $adr__ ) otherwise bounce( 'Activació inexistent' ); $import = $__dada( $ord_activac || '_qt' ); $escala = $__dada( $ord_activac || '_escala' ); $interval = $__dada( $ord_activac || '_interval' ); $ref_retribucio = 'retribucio_' || $adr__ || '_escala_' || $escala_actual; } else { $import = $__dada( $ref || '_qt' ) otherwise bounce( 'Contribució desconeguda' ); $escala = $__dada( $ref || '_escala' ); $interval = $__dada( $ref || '_interval' ); if ( $adr__ != $__dada( $ref || '_contribuidora' )) bounce( "Només l'adreça contribuïdora pot rebre la retribució" ); $ref_retribucio = 'retribucio_' || $ref || '_escala_' || $escala_actual; $dades[ $ord_retribucio || '_rebedora' ] = $adr__; } // La retribució hi és pendent if ( !! $__dada( $ref_retribucio )) bounce( "Ja ha estat retribuïda per a l'escala actual" ); // Cal que s'hagi produït un salt d'escala if ( $escala_actual == $escala ) bounce( "Cal que es produeixi un salt d'escala" ); /* Comentat temporalment per a facilitar els tests !! // Cal que hagi passat igual o més temps entre la data del salt d'escala i la de la //retribució que entre la data del salt d'escala de la contribucio i la data d'aquesta $diferencia_intervals = $__dada( 'interval_escala' ) - $interval; if ( $diferencia_intervals < 0 ) bounce( "Encara no és l'hora. Falten: " || $diferencia_intervals || ' segons' ); */ // Determina la qt de la retribució $qt_retribucio = $import * ( $escala_actual - $escala ); //... $dades[ $ref_retribucio ] = $ord_retribucio; $dades[ $ord_retribucio || '_data' ] = timestamp; $dades[ $ord_retribucio || '_qt' ] = $qt_retribucio; $__nou_total( 'retribucions_Estels', $qt_retribucio ); $args.qt = $qt_retribucio; $args.rebedora = $adr__; $args.sentit = 'sortida'; $args.id_unitat_sortida = $id_estels; $args.unitat_sortida = 'Estels'; }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $__dada( 'Provisio' ) }" } ] } }, { "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP }", "amount": "{ $qt }" } ] } }, { "app": "state", "state": "{ response[ 'Acció' ] = $ACC; response[ 'Rebedora' ] = $args.rebedora; response[ 'Quantitat' ] = $args.qt; response[ 'Unitat' ] = 'Estels'; }" } ] } ] } } ]
Technical information
Fees:
19,821 bytes
(452 headers, 19369 payload)
Level:2088895
Witnessed level:2088887
Main chain index:2080576
Latest included mc index:2080575
Status:stable/confirmed/final