Unit ID
aM8qCTnWBwlXi75WV31S0UdQOsESRj+mNBkBH4TpypY=
Received
23.12.2020 20:36:33
Confirmation delay (full node)
3 minutes 36 seconds
Messages
Definition
Definition: [ "autonomous agent", { "init": "{ $nom_AA = 'Portal'; $versio = '0.1.2'; $_AUT_000 = 'C4KIJSUWVM7BGWTLXKX3K4PNRXV7OY4W'; $adr__ = trigger.address; $args = trigger.data; $idgeto = trigger.output[[ asset != base ]].asset; $qt = trigger.output[[ asset = $idgeto ]]; $generics = var[ 'Generics' ]; $propostes = var[ 'Propostes' ]; $validacions = var[ 'Validacions' ]; $ordinals = var[ 'Ordinals' ]; $getons = var[ 'Getons' ]; // Autoritzacions $_actuant_es_AUT_000 = $adr__ == $_AUT_000; $_actuant_es_AUT = $_actuant_es_AUT_000 AND ! $generics._AUT_0 OR $adr__ == $generics._AUT_A OR $adr__ == $generics._AUT_B OR $adr__ == $generics._AUT_C OR ( $generics._AUT_0 AND $adr__ == $generics._AUT_0 ); // Funcions $__bota = $txt => bounce ( $nom_AA || ' >>> ' || $txt ); $__ordinal = $rf => $ordinals[ $rf ] ? $ordinals[ $rf ] + 1 : 1; $__idprop = $rf => { $ordinals[ $rf ] = $__ordinal( $rf ); $rf || '_' || $ordinals[ $rf ] }; $__data_confirmacio = () => timestamp_to_string( timestamp + $generics.Lapse ); // Funció: Retorna valor argument lliurat si el troba. Altrament, s'atura $__arg = $arg => $args[ $arg ] otherwise $__bota( "Cal proporcionar el valor de: " || $arg ); // Admin if ( $args.admin ) { // Bloc Autoritzacions if ( $args.admin_geto ) { $geto = $getons[ $args.id_geto ]; $_actuant_es_AUT_geto = $_actuant_es_AUT AND ! $geto.variables._AUT_0 OR $adr__ == $geto.constants._AUT_A OR $adr__ == $geto.variables._AUT_0 OR $adr__ == $geto.variables._AUT_B OR $adr__ == $geto.variables._AUT_C; // El getó ha d'existir i constar com a actiu if ( ! $geto OR $geto.estat != 'actiu' ) { $__bota( 'Getó inexistent o inactiu' ); } if ( ! $_actuant_es_AUT_geto ) { $__bota( 'No autoritzada' ); } } else { if ( ! $_actuant_es_AUT ) { $__bota( 'No autoritzada' ); } // Excepcionalment per als TESTS if ( $args.ref AND $args.ref == 'multiple' AND ! $_actuant_es_AUT_000 ) { $__bota( 'No autoritzada per a esmena múltiple' ); } } // Bloc Validació // _AUT_000 pot saltar-se procés validació mentre no existeixi _AUT_0 if ( ! $_actuant_es_AUT_000 OR ( $_actuant_es_AUT_000 AND $generics._AUT_0 ) ) { if ( $args.tasca == 'confirmacio' ) { $proposta = $propostes[ $args.idprop ]; // La proposta ha d'existir if ( ! $proposta ) { $__bota( "No hi ha cap proposta amb aquesta ref" ); } // La confirmació l'ha de fer una AUT diferent a la proposant if ( $proposta.proposant == $adr__ ) { $__bota( "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 ) { $__bota( "Encara no es pot confirmar la proposta" ); } // La proposta ha de constar com a validada if ( ! $validacions[ $args.idprop ] ) { $__bota( "La proposta encara no ha estat validada" ); } $tasca = 'confirmacio'; } else { $ref = $__arg( 'ref' ); $val = $__arg( 'val' ); // El valor proporcionat no ha de coincidir amb el de la darrera proposta $sufix = $args.admin_geto ? '_' || $args.id_geto : ''; $ordinal = $ordinals[ $ref || $sufix ]; $darrera_prop = $propostes[ $ref || '_' || $ordinal || $sufix ]; if ( $darrera_prop AND $darrera_prop.val == $val ) { $__bota( "El valor proposat coincideix amb el de la darrera proposta" ); } $tasca = 'proposta'; } } else { $ref = $__arg( 'ref' ); $val = $__arg( 'val' ); $tasca = 'drecera'; } } }", "messages": { "cases": [ { "if": "{ $args.proces == 'acces' }", "init": "{ $args._Portal = this_address; $args._FOP = $generics._FOP; $args._Estels = $generics._Estels; $args.geto = $idgeto; $args.qt = $qt; }", "messages": [ { "app": "data", "payload": "{ $args }" }, { "app": "payment", "payload": { "asset": "{ 'base' }", "outputs": [ { "address": "{ $generics._Acces }", "amount": "{ $args.qt }" } ] } } ] }, { "if": "{ $args.admin AND $args.proces == 'nou_portal' }", "messages": [ { "app": "state", "state": "{ $darrer_portal = $__arg( 'val' ); $dades = { Generics : var[ $darrer_portal ][ 'Generics' ], Propostes : var[ $darrer_portal ][ 'Propostes' ], Validacions : var[ $darrer_portal ][ 'Validacions' ], Getons : var[ $darrer_portal ][ 'Getons' ], Ordinals : var[ $darrer_portal ][ 'Ordinals' ], Alteracions : var[ $darrer_portal ][ 'Alteracions' ], Darrer_Portal : $darrer_portal }; if ( $tasca == 'drecera' ) { var[ 'Generics' ] = $dades.Generics; var[ 'Propostes' ] = $dades.Propostes; var[ 'Validacions' ] = $dades.Validacions; var[ 'Getons' ] = $dades.Getons; var[ 'Ordinals' ] = $dades.Ordinals; var[ 'Darrer_Portal' ] = $dades.Darrer_Portal; response[ 'darrer_portal' ] = $darrer_portal; } if ( $tasca == 'confirmacio' ) { $prop = $propostes[ $args.idprop ]; var[ 'Generics' ] = $prop.dades.Generics; var[ 'Propostes' ] = $prop.dades.Propostes; var[ 'Validacions' ] = $prop.dades.Validacions; var[ 'Getons' ] = $prop.dades.Getons; var[ 'Ordinals' ] = $prop.dades.Ordinals; var[ 'Darrer_Portal' ] = $prop.dades.Darrer_Portal; response[ 'proposta' ] = $args.idprop; } if ( $tasca == 'proposta' ) { $idprop = $__idprop( $args.proces ); $propostes[ $idprop ] = { dades: $dades, proposant: $adr__, temps: timestamp, }; var[ 'Propostes' ] = $propostes; var[ 'Ordinals' ] = $ordinals; response[ 'proposta' ] = $idprop; response[ 'data confirmació'] = $__data_confirmacio(); } response[ 'tasca' ] = $tasca; }" } ] }, { "if": "{ $args.admin AND $args.proces == 'esmena_generics' }", "messages": [ { "app": "state", "state": "{ if ( ! $generics AND $ref != 'multiple' ) { $__bota( "No hi ha generics" ); } if ( $tasca == 'drecera' ) { if ( $ref == 'multiple' ) { $variables = {}; $__resp = $r => { $valvar = $args[ $r ] otherwise $generics[ $r ] otherwise '...'; $variables[ $r ] = $valvar; response[ $r ] = $valvar; }; $__resp( '_Acces' ); $__resp( '_Getons' ); $__resp( '_FRO' ); $__resp( '_FOP' ); $__resp( '_FDIP' ); $__resp( '_Estels' ); $__resp( 'Interval' ); $__resp( 'Lapse' ); $__resp( '_Transfer' ); $__resp( '_Capacitacio' ); $__resp( '_Avis' ); $__resp( 'Import_Activacio' ); $__resp( 'Import_Subscripcio' ); $__resp( 'Import_Renovacio' ); $__resp( 'Taxa_Conversio' ); $__resp( 'Factor_Conversio' ); $__resp( 'Generacio_Minima' ); $__resp( 'Cicles_Latencia' ); $__resp( '_AUT_0' ); $__resp( '_AUT_A' ); $__resp( '_AUT_B' ); $__resp( '_AUT_C' ); var[ 'Generics' ] = $variables; $__valvar = $refvar => var[ $refvar ] otherwise {}; var[ 'Getons' ] = $__valvar( 'Getons' ); var[ 'Propostes' ] = $__valvar( 'Propostes' ); var[ 'Validacions' ] = $__valvar( 'Validacions' ); var[ 'Ordinals' ] = $__valvar( 'Ordinals' ); } else { $generics[ $ref ] = $val; $nova_ref = $ref; $nou_val = $val; } } else if ( $tasca == 'confirmacio' ) { $generics[ $proposta.ref ] = $proposta.val; $idprop = $args.idprop; $nova_ref = $proposta.ref; $nou_val = $proposta.val; } else { $idprop = $__idprop( $ref ); $propostes[ $idprop ] = { ref: $ref, val: $val, proposant: $adr__, temps: timestamp, }; var[ 'Propostes' ] = $propostes; var[ 'Ordinals' ] = $ordinals; $nova_ref = $ref; $nou_val = $val; response[ 'data confirmació'] = $__data_confirmacio(); } var[ 'Generics' ] = $generics otherwise var[ 'Generics' ]; response[ 'procés' ] = $args.proces; response[ 'tasca' ] = $tasca; response[ 'proposta' ] = $idprop otherwise '...'; response[ 'nova ref' ] = $nova_ref otherwise '...'; response[ 'nou val' ] = $nou_val otherwise '...'; }" } ] }, { "if": "{ $args.admin AND $args.proces == 'nou_geto' }", "messages": [ { "if": "{ $tasca != '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 } }, { "app": "state", "state": "{ if ( $tasca != 'confirmacio' ) { $constants = { id : response_unit }; // Afegeix constant amb valor argument homònim proporcionat $__const = $r => { $constants[ $r ] = $__arg( $r ); }; $__const( '_FOG' ); $__const( '_AUT_A' ); $__const( 'factor_conversio' ); $__const( 'activacions_restringides' ); $__const( 'subscripcions_restringides' ); $__const( 'recepcions_restringides' ); $__const( 'conversions_restringides' ); $__const( 'valors_esmenables' ); $__const( 'llistats_editables' ); $__const( 'bloqueig_possible' ); $variables = {}; // Afegeix constant amb valor argument homònim proporcionat $__vari = $r => { $variables[ $r ] = $__arg( $r ); }; $__vari( 'import_activacio' ); $__vari( 'import_subscripcio' ); $__vari( 'import_renovacio' ); $__vari( 'taxa_conversio' ); $__vari( 'derivacio_aFOG' ); $__vari( '_AUT_0' ); $__vari( '_AUT_B' ); $__vari( '_AUT_C' ); } if ( $tasca == 'drecera' ) { $getons[ response_unit ] = { proposant: $adr__, confirmant: $adr__, temps: timestamp, estat: 'actiu', constants: $constants, variables: $variables }; response[ 'Getó operatiu' ] = response_unit; } if ( $tasca == 'confirmacio' ) { $idprop = $args.idprop; $prop = $propostes[ $idprop ]; $getons[ response_unit ] = { proposant: $prop.proposant, confirmant: $adr__, temps: timestamp, estat: 'actiu', constants: $prop.constants, variables: $prop.variables }; response[ 'Getó operatiu' ] = $args.idprop; } if ( $tasca == 'proposta' ) { $idprop = $__idprop( $args.proces ); $propostes[ $idprop ] = { proposant: $adr__, temps: timestamp, constants: $constants, variables: $variables }; var[ 'Propostes' ] = $propostes; var[ 'Ordinals' ] = $ordinals; response[ 'data confirmació'] = $__data_confirmacio(); } var[ 'Getons' ] = $getons otherwise var[ 'Getons' ]; response[ 'procés' ] = $args.proces; response[ 'tasca' ] = $tasca; response[ 'proposta' ] = $idprop otherwise '...'; }" } ] }, { "if": "{ $args.admin AND $args.proces == 'nou_estat_geto' }", "messages": [ { "app": "state", "state": "{ if ( $tasca == 'drecera' ) { $getons[ $args.id_geto ].estat = $args.nou_estat; response[ 'Nou estat getó ' || $args.id_geto ] = $args.nou_estat; } if ( $tasca == 'confirmacio' ) { $idprop = $args.idprop; $prop = $propostes[ $idprop ]; $getons[ $prop.id_geto ].estat = $prop.estat; response[ 'Nou estat getó ' || $prop.id_geto ] = $prop.estat; } if ( $tasca == 'proposta' ) { $idprop = $__idprop( $args.proces ); $propostes[ $idprop ] = { proposant: $adr__, temps: timestamp, id_geto: $args.id_geto, estat: $args.estat }; var[ 'Propostes' ] = $propostes; var[ 'Ordinals' ] = $ordinals; response[ 'data confirmació'] = $__data_confirmacio(); } var[ 'Getons' ] = $getons otherwise var[ 'Getons' ]; response[ 'procés' ] = $args.proces; response[ 'tasca' ] = $tasca; response[ 'proposta' ] = $idprop otherwise '...'; }" } ] }, { "if": "{ $args.admin AND $args.proces == 'validacio' }", "init": "{ // La confirmació només es pot fer si compte amb el suport d'un nombre // mínim d'ids isox avaluadores d'entre les escollides aleatòriament // La confirmació només es pot fer si compte amb el suport d'un nombre // mínim d'entitats suportants d'entre les escollides aleatòriament //... altres requeriments }", "messages": [ { "app": "state", "state": "{ $validacions[ $args.val ] = timestamp; var[ 'Validacions' ] = $validacions; response[ 'Ref proposta validada' ] = $args.val; }" } ] }, { "if": "{ $args.admin AND $args.proces == 'esmena_geto' }", "messages": [ { "app": "state", "state": "{ if ( $tasca == 'confirmacio' ) { $variables = {}; $__vari = $r => { $variables[ $r ] = $args[ $r ] otherwise $geto.variables[ $r ]; }; $__vari( 'import_activacio' ); $__vari( 'import_subscripcio' ); $__vari( 'import_renovacio' ); $__vari( 'taxa_conversio' ); $__vari( 'derivacio_aFOG' ); $__vari( '_AUT_0' ); $__vari( '_AUT_B' ); $__vari( '_AUT_C' ); $getons[ $args.id_geto ].variables = $variables; var[ 'Getons' ] = $getons; response[ 'proposta' ] = $args.idprop; response[ 'nova ref' ] = $proposta.ref; response[ 'nou val' ] = $proposta.val; } if ( $tasca == 'proposta' ) { $idprop = $__idprop( $args.proces ); $propostes[ $idprop ] = { ref: $ref, val: $val, proposant: $adr__, temps: timestamp, }; var[ 'Propostes' ] = $propostes; var[ 'Ordinals' ] = $ordinals; response[ 'proposta' ] = $idprop; response[ 'nova ref' ] = $ref; response[ 'nou val' ] = $val; response[ 'data confirmació'] = $__data_confirmacio(); } response[ 'tasca' ] = $tasca; }" } ] }, { "if": "{ $args.proces == 'generacio_getons' }", "init": "{ if ( $idgeto != $generics._Estels ) { $__bota( 'Cal aportar-hi estels' ); } // El getó ha d'existir i constar com a actiu $geto_conv = $getons[ $__arg( 'id_geto' ) ]; if ( ! $geto_conv OR $geto_conv.estat != 'actiu' ) { $__bota( 'Getó inexistent o inactiu' ); } $_actuant_es_AUT_geto_conv = $_actuant_es_AUT AND ! $geto.variables._AUT_0 OR $adr__ == $geto_conv.constants._AUT_A OR $adr__ == $geto_conv.variables._AUT_0 OR $adr__ == $geto_conv.variables._AUT_B OR $adr__ == $geto_conv.variables._AUT_C; if ( ! $_actuant_es_AUT_geto_conv ) { $__bota( 'No autoritzada' ); } if ( $qt < $generics.Generacio_Minima ) { $__bota( 'Cal aportar-hi si més no ' || $generics.Generacio_Minima || ' estels' ); } }", "messages": [ { "app": "payment", "payload": { "asset": "{ $args.id_geto }", "outputs": [ { "address": "{ $getons.constants._FOG }", "amount": "{ $qt * $getons.constants.factor_conversio }" } ] } } ] } ] } } ]
Technical information
Fees:
22,102 bytes
(452 headers, 21650 payload)
Level:1812626
Witnessed level:1812619
Main chain index:1804754
Latest included mc index:1804753
Status:stable/confirmed/final