Unit ID
bfcwQdi6/4tO4WKc1uDj6hJBQRH63o/thCSQvAOxl/Y=
Received
15.01.2021 20:54:24
Confirmation delay (full node)
4 minutes 8 seconds
Confirmation delay (light node)
6 minutes 19 seconds
Messages
Definition
Definition: [ "autonomous agent", { "init": "{ $nom_AA = 'Portal'; $versio = '0.1.2'; $_AUT_000 = 'C4KIJSUWVM7BGWTLXKX3K4PNRXV7OY4W'; // Principals $adr__ = trigger.address; $args = trigger.data; $_unitat = trigger.output[[ asset != base ]].asset; $qt = trigger.output[[ asset = $_unitat ]]; $dades = var[ 'dades' ] otherwise {}; $generics = $dades.generics otherwise {}; $propostes = $dades.propostes otherwise {}; $assignacions = $dades.assignacions otherwise {}; $conversions = $dades.conversions otherwise {}; $retribucions = $dades.retribucions otherwise {}; $entitats = $dades.entitats otherwise {}; $_estels = $generics._Estels; $getons = $generics._Getons ? var[ $generics._Getons ][ 'getons' ] : {}; $dades_accions = $generics._Accions ? var[ $generics._Accions ]: {}; $cicle_actual = $dades_accions.basiques.cicle_actual; $escala_actual = $dades_accions.basiques.escala_actual; // Abreviacions $admin = $args.admin; $proces = $args.proces; $ref = $args.ref; $val = $args.val; $idprop = $args.idprop; $idgeto = $args.id_geto; // Identificacions $_actuant_es_AUT_000 = $adr__ == $_AUT_000; $_actuant_es_AUT = ( $generics._AUT_A AND $generics._AUT_A == $adr__ ) OR ( $generics._AUT_B AND $generics._AUT_B == $adr__ ) OR ( $generics._AUT_C AND $generics._AUT_C == $adr__ ) OR ( $generics._AUT_0 AND $adr__ == $generics._AUT_0 ) OR ( $_actuant_es_AUT_000 AND ! is_valid_address( $generics._AUT_0 ) ); // Funcions auxiliars // Retorna valor argument lliurat si el troba. Altrament, s'atura $__arg = $arg => $args[ $arg ] otherwise bounce( "Cal proporcionar el valor de: " || $arg ); $__ordinal = $rf => $dades.ordinals[ $rf ] ? $dades.ordinals[ $rf ] + 1 : 1; // Admin if ( $admin ) { // Autoritzacions if ( $args.admin_geto ) { $geto = $getons[ $idgeto ]; // El getó ha d'existir i constar com a actiu if ( ! $geto OR $geto.estat != 'actiu' ) { bounce( 'Getó inexistent o inactiu' ); } // Determina si adr__ actuant consta com autoritzada per al getó $varsgeto = $geto.variables; $_actuant_es_AUT_geto = $_actuant_es_AUT AND ! $varsgeto._AUT_0 OR $adr__ == $geto.constants._AUT_A OR ( $varsgeto._AUT_0 AND $adr__ == $varsgeto._AUT_0 ) OR ( $varsgeto._AUT_B AND $adr__ == $varsgeto._AUT_B ) OR ( $varsgeto._AUT_C AND $adr__ == $varsgeto._AUT_C ); if ( ! $_actuant_es_AUT_geto ) { bounce( 'No autoritzada' ); } } else { if ( ! $_actuant_es_AUT ) { bounce( 'No autoritzada' ); } // Excepcionalment per als TESTS if ( ( $__arg( 'ref' ) ) == 'multiple' AND ! $_actuant_es_AUT_000 ) { bounce( 'No autoritzada per a esmena múltiple' ); } } // Validació $validacio_requerida = // _AUT_000 pot saltar-se procés validació mentre no existeixi _AUT_0 ! $_actuant_es_AUT_000 OR ( $_actuant_es_AUT_000 AND $generics._AUT_0 ) // Processos exclosos AND $proces != 'decisio_validacio' AND $proces != 'generacio_getons'; if ( $validacio_requerida ) { if ( $args.operacio AND $args.operacio == 'confirmacio' ) { $proposta = $propostes[ $idprop ]; // La proposta ha d'existir if ( ! $proposta ) { bounce( "No hi ha cap proposta amb aquesta ref" ); } // La confirmació l'ha de fer una AUT diferent a la proposant if ( $proposta.proposant == $adr__ ) { bounce( "El procés de confirmació l'ha d'endegar una altra AUT" ); } // La confirmació només es pot fer quan ha transcorregut el lapse especificat if ( $generics.Lapse > timestamp - $proposta.temps ) { bounce( "Encara no es pot confirmar la proposta" ); } // La proposta ha de constar com a validada $dades_validacions = var[ $generics._Validacions ][ 'dades' ]; if ( ! $dades_validacions.validacions[ $idprop ] ) { bounce( "La proposta encara no ha estat validada" ); } $operacio = 'confirmacio'; } else { $__nova_proposta = $dades_prop => { $dades.ordinals[ $proces ] = $__ordinal( $proces ); $nova_idprop = $proces || '_' || $dades.ordinals[ $proces ]; $dades.propostes[ $nova_idprop ] = $dades_prop; $nova_idprop }; $__data_confirmacio = () => timestamp_to_string( timestamp + $generics.Lapse ); $operacio = 'proposta'; } } else { $operacio = 'drecera'; } } }", "messages": { "cases": [ { "if": "{ $proces == 'acces_accions' }", "init": "{ $unitat_es_geto = $getons[ $_unitat ]; if ( $_unitat != $_estels AND ( ! $unitat_es_geto OR $unitat_es_geto.estat != 'actiu' ) ) { bounce( 'Getó inexistent o inactiu' ); } }", "messages": [ { "app": "data", "payload": "{ $args }" }, { "app": "payment", "payload": { "asset": "{ $_unitat }", "outputs": [ { "address": "{ $generics._Accions }", "amount": "{ $qt }" } ] } } ] }, { "if": "{ $admin AND $proces == 'renovacio_adrs_portal' }", "init": "{ $args.nou_portal = $operacio == 'proposta' ? false : true; }", "messages": [ { "app": "data", "payload": "{ $args }" }, { "app": "payment", "payload": { "asset": "{ $_unitat }", "outputs": [ { "address": "{ $generics._Accions }", "amount": "{ $qt }" } ] } }, { "app": "data", "payload": "{ $args }" }, { "app": "payment", "payload": { "asset": "{ $_unitat }", "outputs": [ { "address": "{ $generics._Getons }", "amount": "{ $qt }" } ] } }, { "app": "data", "payload": "{ $args }" }, { "app": "payment", "payload": { "asset": "{ $_unitat }", "outputs": [ { "address": "{ $generics._Validadores }", "amount": "{ $qt }" } ] } }, { "app": "data", "payload": "{ $args }" }, { "app": "payment", "payload": { "asset": "{ $_unitat }", "outputs": [ { "address": "{ $generics._Validacions }", "amount": "{ $qt }" } ] } } ] }, { "if": "{ $admin AND $proces == 'copia_dades_portal' }", "messages": [ { "app": "state", "state": "{ $refs_dades = [ 'generics', 'propostes', 'ordinals', 'assignacions', 'conversions', 'retribucions', 'entitats' ]; $dades_portal_actual = var[ $__arg( 'val' )][ 'dades' ]; $renovacions = $dades_portal_actual[ 'renovacions' ] otherwise []; $noves_dades = {}; $__copia_dades = $ref_dades => { $noves_dades[ $ref_dades ] = $dades_portal_actual[ $ref_dades ] otherwise []; }; $copia = map( $refs_dades, 7, $__copia_dades ); if ( $operacio == 'proposta' ) { $dades_proposta = { dades: $noves_dades, proposant: $adr__, temps: timestamp, }; response[ 'proposta' ] = $__nova_proposta( $dades_proposta ); } else { $__valvar = $refvar => { $dades[ $refvar ] = $proposta.dades[ $refvar ] otherwise $noves_dades[ $refvar ]; }; $seleccio = map( $refs_dades, 7, $__valvar ); $dades.renovacions[] = $val; $dades.darrer_portal = $val; response[ 'darrer_portal' ] = $val; response[ 'nombre renovacions' ] = array_length( $renovacions ) + 1; if ( $idprop ) { response[ 'proposta' ] = $idprop; } response[ 'procés' ] = $proces; var[ 'dades' ] = $dades; } }" } ] }, { "if": "{ $admin AND $proces == 'copia_dades' }", "init": "{ $args.copia_dades = $operacio == 'proposta' ? false : true; $args.adr_aa = $generics[ '_' || $args.nom_aa ]; }", "messages": [ { "app": "data", "payload": "{ $args }" }, { "if": "{ $operacio != 'proposta' }", "app": "payment", "payload": { "asset": "{ $_unitat }", "outputs": [ { "address": "{ $args.adr_aa }", "amount": "{ $qt }" } ] } }, { "app": "state", "state": "{ if ( $operacio == 'proposta' ) { $dades_proposta = { nom_aa: $args.nom_aa, proposant: $adr__, temps: timestamp, }; response[ 'proposta' ] = $__nova_proposta( $dades_proposta ); } response[ 'procés' ] = $proces; }" } ] }, { "if": "{ $admin AND $proces == 'esmena_generics' }", "messages": [ { "app": "state", "state": "{ if ( ! $generics AND $ref != 'multiple' ) { bounce( "No hi ha generics" ); } if ( $operacio == 'drecera' ) { if ( $ref == 'multiple' ) { $__resp = $r => { $valvar = $args[ $r ] otherwise $generics[ $r ] otherwise '...'; $generics[ $r ] = $valvar; response[ $r ] = $valvar; }; $refs_generics = [ '_Accions', '_Getons', '_Validacions', '_Validadores', '_FRO', '_Estels', 'Interval', 'Lapse', 'Import_Activacio', 'Import_Subscripcio', 'Import_Renovacio', 'Taxa_Conversio', 'Factor_Conversio', 'Generacio_Minima', 'Nombre_Delegades', 'Nombre_Aprovacions', 'Cicles_Diposit', '_AUT_A', '_AUT_B', '_AUT_C' ]; $generics_AUT_0 = ''; $valora = map( $refs_generics, 21, $__resp ); } else { $generics[ $__arg( 'ref' ) ] = $__arg( 'val' ); $nova_ref = $ref; $nou_val = $val; } } else if ( $operacio == 'confirmacio' ) { $generics[ $proposta.ref ] = $proposta.val; $nova_ref = $proposta.ref; $nou_val = $proposta.val; response[ 'proposta' ] = $idprop; } else { $dades_proposta = { ref: $__arg( 'ref' ), val: $__arg( 'val' ), proposant: $adr__, temps: timestamp, }; response[ 'proposta' ] = $__nova_proposta( $dades_proposta ); $nova_ref = $ref; $nou_val = $val; } if( $nova_ref ) { response[ 'ref' ] = $nova_ref; response[ 'nou valor' ] = $nou_val; } $dades.generics = $generics; var[ 'dades' ] = $dades; response[ 'procés' ] = $proces; }" } ] }, { "if": "{ $args.admin_geto }", "init": "{ $args.operacio = $operacio; $args.proposta = $proposta; }", "messages": [ { "if": "{ $proces == 'nou_geto' AND $operacio != 'proposta' }", "app": "asset", "payload": { "cap": "{ $args.cap otherwise 1e9 }", "is_private": false, "is_transferrable": true, "auto_destroy": "{ !! $args.auto_destroy }", "fixed_denominations": false, "issued_by_definer_only": true, "cosigned_by_definer": false, "spender_attested": false } }, { "if": "{ $proces == 'generacio_getons' AND $operacio != 'proposta' }", "init": "{ if ( $_unitat != $_estels ) { bounce( 'Cal aportar-hi estels' ); } if ( $qt < $generics.Generacio_Minima ) { bounce( 'Cal aportar-hi si més no ' || $generics.Generacio_Minima || ' estels' ); } }", "app": "payment", "payload": { "asset": "{ $idgeto }", "outputs": [ { "address": "{ $getons.constants._FOP }", "amount": "{ $qt * $getons.constants.factor_conversio }" } ] } }, { "app": "data", "payload": "{ $args }" }, { "app": "payment", "payload": { "asset": "{ $_unitat }", "outputs": [ { "address": "{ $generics._Getons }", "amount": "{ $qt }" } ] } } ] }, { "if": "{ $admin AND $proces == 'assignacio' }", "init": "{ $unitat = $proposta.unitat otherwise $args.unitat; $qt_assignacio = $proposta.qt otherwise $args.qt; $receptora = $proposta.receptora otherwise $args.receptora; }", "messages": [ { "if": "{ $operacio != 'proposta' }", "app": "payment", "payload": { "asset": "{ $unitat }", "outputs": [ { "address": "{ $receptora }", "amount": "{ $qt_assignacio }" } ] } }, { "app": "state", "state": "{ if ( $operacio == 'proposta' ) { $dades_proposta = { proposant: $adr__, temps: timestamp, resolucio: $args.resolucio, requeriment: $args.requeriment, qt: $args.qt, receptora: $args.receptora, unitat: $args.unitat }; response[ 'proposta' ] = $__nova_proposta( $dades_proposta ); } else { $id_resolucio = $proposta.resolucio otherwise $args.resolucio; $id_requeriment = $proposta.requeriment otherwise $args.requeriment; $dades.assignacions[ $id_resolucio || '_' || $id_requeriment ] = { proposant: $proposta.id_geto otherwise $adr__, temps: $proposta.temps otherwise timestamp, resolucio: $id_resolucio, requeriment: $id_requeriment, qt: $qt_assignacio, receptora: $receptora, unitat: $unitat }; response[ 'proposta' ] = $idprop; response[ 'qt' ] = $qt_assignacio; response[ 'receptora' ] = $receptora; response[ 'unitat' ] = $unitat; var[ 'dades' ] = $dades; } response[ 'procés' ] = $proces; }" } ] }, { "if": "{ $proces == 'conversio' }", "init": "{ $diposit = $dades_accions.diposits[ $__arg( 'ref' ) ]; if ( ! $diposit ) { bounce( ': Dipòsit inexistent' ); } if ( $adr__ != $diposit.dipositant ) { bounce( ": L'adreça receptora ha de ser la dipositant" ); } if ( $dades.conversions[ $args.ref ] ) { bounce( ': aquest dipòsit ja ha estat convertit' ); } if ( $diposit.cicle_conversio > $cicle_actual ) { bounce( ": Encara no és l'hora" ); } $unitat = $diposit.geto_diposit == $_estels ? "base" : $_estels; }", "messages": [ { "app": "payment", "payload": { "asset": "{ $unitat }", "outputs": [ { "address": "{ $adr__ }", "amount": "{ $diposit.qt_conversio }" } ] } }, { "app": "state", "state": "{ $conversio = { temps: timestamp, qt: $qt, unitat_conversio: $unitat, }; $dades.conversions[ $args.ref ] = $conversio; response[ 'Conversió realitzada' ] = $args.ref; response[ 'procés' ] = $proces; var[ 'dades' ] = $dades; }" } ] }, { "if": "{ $proces == 'retribucio' }", "init": "{ if ( $__arg( 'ref' ) == 'aportacio_activacio' ) { $ref_activacio = 'activacio_' || $adr__ || '_en_' || $_estels; $activacio = $dades_accions.activacions[ $ref_activacio ]; $import = $activacio.qt; $escala = $activacio.escala; } else { $contribucio = $dades_accions.contribucions[ $args.ref ]; if ( ! $contribucio ) { bounce( ': Contribucio inexistent' ); } if ( $adr__ != $contribucio.contribuidora ) { bounce( ": L'adreça receptora ha de ser la contribuidora" ); } $import = $contribucio.qt; $escala = $contribucio.escala; } $ref_retribucio = $args.ref || '_' || $escala_actual; if ( $dades.retribucions[ $ref_retribucio ] ) { bounce( ": aquesta 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 ( $nom_AA || ": Encara no és l'hora" ); } // Determina la qt de la retribucio $qt_retribucio = $import * ( $escala_actual - $escala ); }", "messages": [ { "app": "payment", "payload": { "asset": "{ $_estels }", "outputs": [ { "address": "{ $adr__ }", "amount": "{ $qt_retribucio }" } ] } }, { "app": "state", "state": "{ $retribucio = { receptora: $adr__, qt: $qt_retribucio, temps: timestamp, }; $dades.retribucions[ $ref_retribucio ] = $retribucio; response[ 'Retribució realitzada' ] = $ref_retribucio; response[ 'procés' ] = $proces; var[ 'dades' ] = $dades; }" } ] }, { "if": "{ $operacio AND $operacio == 'proposta' }", "init": "{ $args.proces = 'convocatoria_validadores'; }", "messages": [ { "app": "data", "payload": "{ $args }" }, { "app": "payment", "payload": { "asset": "{ $_unitat }", "outputs": [ { "address": "{ $generics._Validacions }", "amount": "{ $qt }" } ] } } ] }, { "if": "{ $proces == 'decisio_validacio' }", "messages": [ { "app": "data", "payload": "{ $args }" }, { "app": "payment", "payload": { "asset": "{ $_unitat }", "outputs": [ { "address": "{ $generics._Validacions }", "amount": "{ $qt }" } ] } } ] }, { "if": "{ $proces == 'validacio_directa_TEST' AND $_actuant_es_AUT }", "messages": [ { "app": "data", "payload": "{ $args }" }, { "app": "payment", "payload": { "asset": "{ $_unitat }", "outputs": [ { "address": "{ $generics._Validacions }", "amount": "{ $qt }" } ] } } ] }, { "if": "{ $args.admin.entitats }", "messages": [ { "app": "state", "state": "{ if ( $proces == 'nova_entitat' ) { if ( $entitats[ $args.adr ] ) { bounce( "Ja hi ha una entitat amb aquesta adreça" ); } if ( $entitats[ $args.adr ].nom == $__arg( 'nom' ) ) { bounce( "Ja hi ha una entitat amb aquest nom" ); } if ( $operacio == 'proposta' ) { $dades_proposta = { adr: $__arg( 'adr' ), nom: $args.nom, estat: $__arg( 'estat' ) }; } response[ 'proposta' ] = $__nova_proposta( $dades_proposta ); } else { $adr_entitat = $args.adr otherwise $proposta.adr; $entitats[ $adr_entitat ] = { nom: $args.nom otherwise $proposta.nom, estat: $args.estat otherwise $proposta.estat, }; } if ( $proces == 'nou_estat_entitat' ) { if ( ! $entitats[ $args.adr ] ) { bounce( "No hi ha cap entitat amb aquesta adreça" ); } if ( $operacio == 'proposta' ) { $dades_proposta = { estat: $__arg( 'estat' ) }; response[ 'proposta' ] = $__nova_proposta( $dades_proposta ); } else { $entitats[ $args.adr ].estat = $args.estat otherwise $proposta.estat; } } $dades.entitats = $entitats; var[ 'dades' ] = $dades; response[ 'procés' ] = $proces; }" } ] } ] } } ]
Technical information
Fees:
23,729 bytes
(452 headers, 23277 payload)
Level:1846716
Witnessed level:1846709
Main chain index:1838817
Latest included mc index:1838816
Status:stable/confirmed/final