Unit ID
n9nrEKz935jbNcN85jDvUonz65QJ8xCQYPa4oJIqhjo=
Received
11.07.2021 12:43:20
Confirmation delay (full node)
2 minutes 25 seconds
Confirmation delay (light node)
3 minutes 15 seconds
Messages
Definition
Definition: [ "autonomous agent", { "init": "{\r $nom_AA = 'Accions';\r \r //$_Registre = '5WVBJQHTEP54AEYUJGTQKWTXTXZSJQWA';\r $_Registre = trigger.data._Registre; // * només x tests\r \r // $_Portal = $__dada( '_Portal' );\r $_Portal = trigger.address; // * només x tests\r if ( $_Portal != trigger.address ) bounce( 'Portal no reconegut' );\r \r // Principals\r $args = trigger.data;\r $adr__ = trigger.initial_address;\r $unitat = trigger.output[[ asset != base ]].asset;\r $qt = trigger.output[[ asset = $unitat ]];\r $geto = $args.geto otherwise 'Estels';\r $ref = $args.ref;\r \r // Provisió\r $provisio = $unitat == 'none';\r if( $provisio ) return;\r \r // Funcions\r $__dada = $refval =>\r data_feed[[ oracles = $_Registre, feed_name = $refval, ifnone = false ]];\r \r $__arg = $arg =>\r $args[ $arg ] otherwise\r bounce( "Cal proporcionar el valor de: " || $arg );\r \r $__definidor = $refdef => {\r $geto == 'Estels' ?\r $__dada( $refdef ) :\r $__dada( $geto || '_' || to_lower( $refdef ) )\r };\r \r // Comprova si adreça activada per operar amb getó especificat\r $__activada = ( $refe, $adre ) =>\r !! $__dada( 'activacio_' || $refe || '_' || $adre ) ?\r true :\r bounce( 'Adreça no activada per a ' || $refe );\r \r // Comprova si qt proporcionada cobreix import especificat\r $__qtSuficient = $refe, $q => {\r $import_requerit = $__definidor( $refe );\r $import_requerit > $q ?\r bounce( "L'" || $refe || " és de " || $import_requerit )\r : true\r };\r \r // Comprova si adreça consta com a subscrita\r $__subscrita = $adr =>\r !! $__dada( 'subscripcio_' || $geto || '_' || $adr ) ?\r true :\r bounce( "Adreça no subscrita per a " || $geto );\r \r \r // Arguments i Dades\r $ACC = $args.accio otherwise '';\r $cicle_actual =\r 1 + floor( ( timestamp - $__dada( 'Origen' ) ) / $__dada( 'Interval' ));\r $dades = $args.dades otherwise {};\r $dades.cicle_actual = $cicle_actual;\r $_FOP = $__dada( '_FOP' );\r $ordinal_accio = $__dada( 'ordinal_' || $ACC || '_' || $geto ) + 1;\r $dades[ 'ordinal_' || $ACC || '_' || $geto ] = $ordinal_accio;\r $args.sentit = 'entrada';\r \r // Escala actual\r $nombre_digits = length( $__dada( 'total_FOP_Estels' ) otherwise 1 );\r $escala_actual = $__dada( 'escala_actual' );\r $data_escala_actual = $__dada( 'data_escala_actual' );\r if ( $nombre_digits > $escala_actual ) {\r $nova_escala = $nombre_digits;\r $data_nova_escala = timestamp;\r $interval_escala = 1000;\r } else $interval_escala = timestamp - $data_escala_actual + 1000;\r \r if ( !! $nova_escala ) {\r $dades.escala_actual = $nova_escala;\r $dades.data_escala_actual = $data_nova_escala;\r $dades[ 'data_escala_' || $nova_escala ] = $data_nova_escala;\r }\r $dades.interval_escala = $interval_escala;\r \r // Control adr__ activada\r if ( $ACC == 'Activacio') {\r if ( $geto != 'Estels' )\r $activa_x_estels = $__activada( 'Estels', $adr__ );\r } else {\r $activa_x_estels = $__activada( 'Estels', $adr__ );\r if ( $geto != 'Estels' )\r $activa_x_geto = $__activada( $geto, $adr__ );\r }\r \r // Consulta si acció restringida\r $__accRestringida = $ac => {\r $geto == 'Estels' ?\r false :\r $__dada( $geto || '_' || $ac || 'ns_restringides' )\r };\r \r // Si acció restringida per al getó especificat, comprova si adreça capacitada\r $__capacitada = ( $ac, $ad ) => {\r $capacitacio = $__dada( $geto || '_' || $ac || '_' || $ad ) otherwise '';\r $__accRestringida( $ac ) AND $capacitacio != 'capacitada' ?\r bounce( 'Acció restringida i adreça no capacitada' ) :\r true\r };\r \r $adr__capacitada = $__capacitada( $ACC, $adr__ );\r \r // Avís\r // Consulta si hi ha cap avís per a adr__\r $ref_avis = 'avis_' || $geto || '_' || $adr__;\r $ord_avis = $__dada( $ref_avis );\r $rebot = $__dada( $ord_avis || '_rebot' );\r $temps_avis = $__dada( $ord_avis || '_data' );\r $avis_es_actual =\r !! $temps_avis AND\r $temps_avis + ( $__dada( 'Lapse' ) * 2 ) < timestamp;\r \r if ( $avis_es_actual AND $rebot )\r bounce( $__dada( $ord_avis || '_text' ) );\r \r \r // Activació\r if ( $ACC == 'Activacio' ) {\r $ord_activacio = 'activacio_' || $ordinal_accio;\r $ref_activacio = 'activacio_' || $geto || '_' || $adr__;\r \r if ( !! $__dada( $ref_activacio ) )\r bounce( 'Adreça ja activada' );\r \r $condicions = $__qtSuficient( 'Import_Activacio', $qt );\r \r $dades[ $ref_activacio ] = $ord_activacio;\r $dades[ $ord_activacio || '_data' ] = timestamp;\r $dades[ $ord_activacio || '_nom' ] = $__arg( 'nom' );\r $dades[ $ord_activacio || '_qt' ] = $qt;\r $dades[ $ord_activacio || '_cicle' ] = $cicle_actual;\r if ( $geto == 'Estels' )\r $dades[ $ord_activacio || '_escala' ] = $escala_actual;\r $dades[ $ord_activacio || '_interval' ] = $interval_escala;\r }\r \r \r // Subscripció\r if ( $ACC == 'Subscripcio' ) {\r $ord_subscripcio = 'subscripcio_' || $ordinal_accio;\r $ref_subscripcio = 'subscripcio_' || $geto || '_' || $adr__;\r $nou_ordinal_renovacio = $__dada( 'ordinal_renovacio' ) + 1;\r $ord_renovacio = 'renovacio_' || $nou_ordinal_renovacio;\r $ref_renovacio = 'renovacio_' || $geto || '_' || $adr__;\r \r if ( !! $__dada( $ref_subscripcio ) )\r bounce( 'Adreça ja subscrita' );\r \r $condicions =\r $__qtSuficient( 'Import_Subscripcio', $qt )\r AND $__arg( 'nom' )\r AND $__arg( 'aportacio' );\r \r $dades[ $ref_subscripcio ] = $ord_subscripcio;\r $dades[ $ord_subscripcio || '_data' ] = timestamp;\r $dades[ $ord_subscripcio || '_nom' ] = $args.nom;\r $dades[ $ord_subscripcio || '_aportacio' ] = $args.aportacio;\r $dades[ $ord_subscripcio || '_cicle' ] = $cicle_actual;\r $dades[ $ref_renovacio ] = $ord_renovacio;\r $dades[ $ord_renovacio || '_data' ] = timestamp;\r $dades[ $ord_renovacio || '_cicle' ] = $cicle_actual;\r $dades[ 'ordinal_renovacio' ] = $nou_ordinal_renovacio;\r }\r \r \r // Renovació\r if ( $ACC == 'Renovacio' ) {\r $ord_renovacio = 'renovacio_' || $ordinal_accio;\r $ref_renovacio = 'renovacio_' || $geto || '_' || $adr__;\r $cicle_renovat = $__dada( $ord_renovacio || '_cicle' ) otherwise 1;\r \r if ( $cicle_actual == $cicle_renovat )\r bounce( 'Cicle actual ( ' || $cicle_actual || ' ) ja renovat' );\r \r $condicions =\r $__subscrita( $adr__ )\r AND $__qtSuficient( 'Import_Renovacio', $qt );\r \r $dades[ $ref_renovacio ] = $ord_renovacio;\r $dades[ $ord_renovacio || '_data' ] = timestamp;\r $dades[ $ord_renovacio || '_cicle' ] = $cicle_actual;\r }\r \r \r // Dipòsit\r if ( $ACC == 'Diposit' ) {\r $ord_diposit = 'diposit_' || $geto || '_' || $ordinal_accio;\r $ref_diposit = 'diposit_' || $geto || '_' || $adr__;\r \r $condicions = $__subscrita( $adr__ );\r \r if ( $qt < $__definidor( 'Diposit_Minim' ) )\r bounce( 'El dipòsit mínim és de ' || $__definidor( 'Diposit_Minim' ) );\r \r $ord_renovacio = $__dada( 'renovacio_' || $geto || '_' || $adr__ );\r $cicle_renovat = $__dada( $ord_renovacio || '_cicle' );\r \r if ( $cicle_renovat < $cicle_actual )\r bounce( 'Subscripció no renovada. Darrer cicle renovat: ' ||\r $cicle_renovat || ' Cicle actual: ' || $cicle_actual );\r \r $taxa_conversio = $__definidor( 'Taxa_Conversio' );\r $cicles_diposit = $__definidor( 'Cicles_Diposit' );\r $factor_conversio = $__definidor( 'factor_conversio' ) otherwise 1;\r $cicle_conversio = $cicle_actual + $cicles_diposit;\r $taxa = round( $qt * $factor_conversio * $taxa_conversio / 100, 0 );\r $qt_conversio = $qt - $taxa;\r $dades[ $ref_diposit ] = $ord_diposit;\r $dades[ $ord_diposit || '_qt' ] = $qt;\r $dades[ $ord_diposit || '_dipositant' ] = $adr__;\r $dades[ $ord_diposit || '_cicle' ] = $cicle_actual;\r $dades[ $ord_diposit || '_geto_diposit' ] = $geto;\r $dades[ $ord_diposit || '_data' ] = timestamp;\r $dades[ $ord_diposit || '_taxa' ] = $taxa_conversio;\r $dades[ $ord_diposit || '_qt_conversio' ] = $qt_conversio;\r $dades[ $ord_diposit || '_cicle_conversio' ] = $cicle_conversio;\r }\r \r \r // Contribució\r if ( $ACC == 'Contribucio' ) {\r // Les contribucions només es poden fer en Estels\r if ( $geto != 'Estels' )\r bounce( 'Les contribucions només es poden fer en Estels' );\r \r $ord_contribucio = 'contribucio_' || $ordinal_accio;\r $ref_contribucio = 'contribucio_' || $adr__;\r $dades[ $ref_contribucio ] = $ord_contribucio;\r $dades[ $ord_contribucio || '_qt' ] = $qt;\r $dades[ $ord_contribucio || '_contribuidora' ] = $adr__;\r $dades[ $ord_contribucio || '_cicle' ] = $cicle_actual;\r $dades[ $ord_contribucio || '_escala' ] = $escala_actual;\r $dades[ $ord_contribucio || '_interval' ] = $interval_escala;\r $dades[ $ord_contribucio || '_data' ] = timestamp;\r }\r \r \r // Transfer\r if ( $ACC == 'Transfer' ) {\r $receptora = $__arg( 'receptora' );\r $receptora_activada =\r $__activada( 'Estels', $receptora )\r AND $__activada( $geto, $receptora );\r $receptora_capacitada = $__capacitada( 'recepcio', $receptora );\r $ref_subscripcio = 'subscripcio_' || $geto || '_' || $receptora;\r $ord_subscripcio = $__dada( $ref_subscripcio );\r $ref_renovacio = 'renovacio_' || $geto || '_' || $receptora;\r $ord_renovacio = $__dada( $ref_renovacio );\r $cicle_renovacio = $__dada( $ord_renovacio || '_cicle' );\r $receptora_renovada =\r !! $cicle_renovacio\r AND $cicle_renovacio == $cicle_actual;\r $args.qt_transfer = $qt;\r if ( $ord_subscripcio AND $receptora_renovada ) {\r $percent_aportacio = $__dada( $ord_subscripcio || '_aportacio' );\r $qt_aportacio = floor( $qt * $percent_aportacio / 100 );\r $args.qt_transfer = $qt - $qt_aportacio;\r }\r }\r \r \r // Conversió\r if ( $ACC == 'Conversio' ) {\r $qt_dipositada = $__dada( $ref || '_qt' );\r \r if ( ! $qt_dipositada )\r bounce( 'Dipòsit desconegut' );\r \r $qt_conversio = $__dada( $ref || '_qt_conversio' );\r $geto_diposit = $__dada( $ref || '_geto_diposit' );\r $cicle_conversio = $__dada( $ref || '_cicle_conversio' );\r $ord_renovacio = $__dada( 'renovacio_' || $geto_diposit || '_' || $adr__ );\r $cicle_renovat = $__dada( $ord_renovacio || '_cicle' );\r $id_estels = $__dada( 'Estels' );\r $id_unitat = $geto_diposit == $id_estels ? "base" : $id_estels;\r $ref_conversio = 'conversio_' || $ref;\r $ord_conversio = 'conversio_' || $ordinal_accio;\r \r if ( $adr__ != $__dada( $ref || '_dipositant' ))\r bounce( "L'adreça receptora ha de ser la dipositant" );\r \r if ( !! $__dada( $ref_conversio ))\r bounce( 'Aquest dipòsit ja ha estat convertit' );\r \r if ( $cicle_conversio > $cicle_actual )\r bounce( "Encara no és l'hora" );\r \r if ( $cicle_renovat < $cicle_actual )\r bounce( "No renovada en " || $geto_diposit || " per al cicle actual: " || $cicle_actual );\r \r $dades[ $ref_conversio ] = $ord_conversio;\r $dades[ $ord_conversio || '_data' ] = timestamp;\r $dades[ $ord_conversio || '_qt' ] = $qt_conversio;\r $dades[ $ord_conversio || '_unitat' ] = $id_unitat;\r $dades[ $ord_conversio || '_rebedora' ] = $adr__;\r \r $ref_total_conversions = 'total_conversions_' || $geto_diposit;\r $total_conversions = $__dada( $ref_total_conversions ) otherwise 0;\r $dades[ $ref_total_conversions ] = $total_conversions + $qt_dipositada;\r \r $ref_total_taxes = 'total_taxes_' || $geto_diposit;\r $total_taxes = $__dada( $ref_total_taxes ) otherwise 0;\r $dades[ $ref_total_taxes ] = $total_taxes + $qt_dipositada - $qt_conversio;\r \r $args.qt = $qt_conversio;\r $args.rebedora = $adr__;\r $args.sentit = 'sortida';\r $args.unitat = $id_unitat;\r }\r \r \r // Retribució\r if ( $ACC == 'Retribucio' ) {\r $ord_retribucio = 'retribucio_' || $ordinal_accio;\r \r if ( $ref == 'aportacio_activacio' ) {\r $ord_activacio = $__dada( 'activacio_estels_' || $adr__ )\r otherwise bounce( 'Activació inexistent' );\r $import = $__dada( 'activacio_estels_' || $ord_activacio || '_qt' );\r $escala = $__dada( 'activacio_estels_' || $ord_activacio || '_escala' );\r $interval = $__dada( 'activacio_estels_' || $ord_activacio || '_interval' );\r $ref_retribucio = 'retribucio_' || $adr__ || '_escala_' || $escala_actual;\r } else {\r $import = $__dada( $ref || '_qt' ) otherwise bounce( 'Contribució desconeguda' );\r $escala = $__dada( $ref || '_escala' );\r $interval = $__dada( $ref || '_interval' );\r \r if ( $adr__ != $__dada( $ref || '_contribuidora' ))\r bounce( "Només l'adreça contribuïdora pot rebre la retribució" );\r \r $ref_retribucio = 'retribucio_' || $ref || '_escala_' || $escala_actual;\r $dades[ $ord_retribucio || '_rebedora' ] = $adr__;\r }\r \r // La retribució hi és pendent\r if ( !! $__dada( $ref_retribucio ))\r bounce( "Ja ha estat retribuïda per a l'escala actual" );\r \r // Cal que s'hagi produït un salt d'escala\r if ( $escala_actual == $escala )\r bounce( "Cal que es produeixi un salt d'escala" );\r \r // Cal que hagi passat igual o més temps entre la data del salt d'escala i la de la\r //retribució que entre la data del salt d'escala de la contribucio i la data d'aquesta\r $diferencia_intervals = $__dada( 'interval_escala' ) - $interval;\r if ( $diferencia_intervals < 0 )\r bounce( "Encara no és l'hora. Falten: " || $diferencia_intervals || ' segons' );\r \r // Determina la qt de la retribució\r $qt_retribucio = $import * ( $escala_actual - $escala );\r \r //...\r $dades[ $ref_retribucio ] = 'retribucio_' || $ord_retribucio;\r $dades[ $ord_retribucio || '_data' ] = timestamp;\r $dades[ $ord_retribucio || '_qt' ] = $qt_retribucio;\r \r $total_retribucions = $__dada( 'total_retribucions' ) otherwise 0;\r $dades[ 'total_retribucions' ] = $total_retribucions + $qt_retribucio;\r \r $args.qt = $qt_retribucio;\r $args.rebedora = $adr__;\r $args.sentit = 'sortida';\r $args.unitat = $id_estels;\r }\r \r \r // Totals\r $secc_ref =\r $ACC == 'Diposit' OR $ACC == 'Transfer' ?\r to_lower( $ACC ) || 's' :\r to_lower( $ACC ) || 'ns';\r $ref_total_acc = 'total_' || $secc_ref || '_' || $geto;\r $qt_accio = $args.sentit == 'sortida' ? $args.qt : $qt;\r $dades[ $ref_total_acc ] = $__dada( $ref_total_acc ) + $qt_accio otherwise $qt_accio;\r \r $ref_total_FOP = 'total_FOP_' || $geto;\r $total_FOP_actual = $__dada( $ref_total_FOP ) otherwise 0;\r $increment_FOP =\r $ACC == 'Activacio' OR $ACC == 'Subscripcio' OR $ACC == 'Renovacio' OR $ACC == 'Contribucio' ?\r $qt :\r !! $qt_aportacio ?\r $qt_aportacio :\r 0;\r \r if ( $increment_FOP > 0 ) {\r $estat_interficie = $__dada( 'interficie_' || $args.interficie || '_estat' ) otherwise '-';\r $interficie = $estat_interficie == 'operatiu' ? $args.interficie : 'basica';\r $ref_total_FOP_via = 'total_FOP_' || $geto || '_via_' || $interficie;\r $total_FOP_via = $__dada( $ref_total_FOP_via ) otherwise 0;\r $dades[ $ref_total_FOP_via ] = $total_FOP_via + $increment_FOP;\r \r $estat_promotora = $__dada( 'promotora_' || $args.promotora || '_estat' ) otherwise '-';\r $promotora = $estat_promotora == 'operatiu' ? $args.promotora : 'basica';\r $ref_total_FOP_per = 'total_FOP_' || $geto || '_per_' || $promotora;\r $total_FOP_per = $__dada( $ref_total_FOP_per ) otherwise 0;\r $dades[ $ref_total_FOP_per ] = $total_FOP_per + $increment_FOP;\r \r if ( !! $qt_aportacio ) {\r $ref_total_aportacions = 'total_aportat_' || $geto;\r $total_aportacions = $__dada( $ref_total_aportacions ) otherwise 0;\r $dades[ $ref_total_aportacions ] = $total_aportacions + $qt_aportacio;\r $ref_total_particular = 'total_aportat_' || $geto || '_' || $args.receptora;\r $total_particular = $__dada( $ref_total_particular ) otherwise 0;\r $dades[ $ref_total_particular ] = $total_particular + $qt_aportacio;\r }\r }\r \r //...\r $destinacio =\r $geto == 'Estels' OR $ACC == 'Diposit' ? $_FOP :\r $__dada( $geto || '__FOP' );\r \r //...\r $registre = {};\r $registre.dades = $dades;\r $args.qt = $qt_aportacio otherwise $qt_accio;\r }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "if": "{ ! $provisio }", "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $__dada( 'Provisio' ) }" } ] } }, { "if": "{ ! $provisio AND ( $ACC != 'Transfer' OR !! $qt_aportacio ) }", "app": "payment", "payload": { "asset": "{ $unitat }", "outputs": [ { "address": "{ $destinacio }", "amount": "{ $args.qt }" } ] } }, { "if": "{ $ACC == 'Transfer' }", "app": "payment", "payload": { "asset": "{ $unitat }", "outputs": [ { "address": "{ $receptora }", "amount": "{ $args.qt_transfer }" } ] } }, { "app": "state", "state": "{\r // Info general\r response[ 'Cicle actual' ] = $cicle_actual;\r response[ 'Escala actual' ] = $escala_actual;\r response[ 'Acció realitzada' ] = $ACC;\r if( $provisio )\r response[ 'Provisió rebuda' ] = timestamp;\r else\r response[ 'Acció realitzada' ] = $ACC;\r \r // Transfer\r if ( !! $receptora )\r response[ 'Transfer a' ] =\r $receptora || " de " || $args.qt || " " || $geto;\r if ( !! $qt_aportacio ) {\r response[ 'Receptora aporta a FOP'] = $qt_aportacio || ' ' || $geto;\r response[ 'Total Aportacions en ' || $geto ] =\r $total_aportacions + $qt_aportacio;\r response[ 'Total Aportacions de ' || $args.receptora || ' en ' || $geto ] =\r $total_particular + $qt_aportacio;\r }\r \r // Activació\r if ( $ACC == 'Activacio' )\r response[ 'Activació' ] =\r "Amb nom: " || $args.nom || " de l'adr " || $adr__ || " per operar amb " || $geto;\r \r // Subscripció\r if ( $ACC == 'Subscripcio' )\r response[ 'Subscripció' ] =\r "Amb nom: " || $args.nom || " de l'adr " || $adr__ ||\r " per al cicle " || $cicle_actual || " per operar amb " || $geto;\r \r // Renovació\r if ( $ACC == 'Renovacio' )\r response[ 'Renovació' ] =\r "De la subscripció per al cicle " || $cicle_actual\r || " de l'adr " || $adr__ || " en " || $geto;\r \r // Dipòsit\r if ( $ACC == 'Diposit' ) {\r response[ 'Dipòsit' ] = $ref_diposit;\r response[ 'Dipositant' ] = $adr__;\r response[ 'Qt dipòsit' ] = $qt;\r response[ 'Qt conversió' ] = $qt_conversio;\r response[ 'Taxa' ] = $taxa_conversio;\r response[ 'Data dipòsit' ] = timestamp_to_string( timestamp, 'date' );\r response[ 'Hora dipòsit' ] = timestamp_to_string( timestamp, 'time' );\r response[ 'Cicle dipòsit' ] = $cicle_actual;\r response[ 'Cicle conversió' ] = $cicle_conversio;\r }\r \r // Contribució\r if ( $ACC == 'Contribucio' ) {\r response[ 'Contribució' ] = $ref_contribucio;\r response[ 'Contribuïdora' ] = $adr__;\r response[ 'Quantitat' ] = $qt;\r }\r \r // Retribució i Conversió\r if ( $ACC == 'retribucio' ) {\r response[ 'Rebedora' ] = $args.rebedora;\r response[ 'Quantitat' ] = $args.qt;\r response[ 'Unitat' ] = $args.unitat;\r }\r \r // Avís\r //if ( $_avis AND $avis_es_actual )\r if ( $avis_es_actual )\r response[ 'AVÍS !' ] = $__dada( $ref_avis || '_text' );\r }" } ] } ]
Technical information
Fees:
19,744 bytes
(452 headers, 19292 payload)
Level:2077676
Witnessed level:2077669
Main chain index:2069492
Latest included mc index:2069491
Status:stable/confirmed/final