[
"autonomous agent",
{
"init": "{
$nom_AA = 'Validacions';
$darrera_versio = '0000000000';
//$_Portal_original = '0000000000';
$_Portal_original = trigger.address; //Hauria de ser fix amb adr darrer Portal
$_Portal_actual = var[ 'nou_portal' ] otherwise $_Portal_original;
if ( $_Portal_actual != trigger.address )
{
$_Portal = substring( var[ $_Portal_actual ][ 'versions' ], 0, 32 );
if( $_Portal != trigger.address )
{ bounce ( 'Portal no reconegut' ); }
} else {
$_Portal = $_Portal_actual;
}
// Principals
$args = trigger.data;
$adr__ = trigger.initial_address;
$_unitat = trigger.output[[ asset != base ]].asset;
$qt = 10; // Pendent de definició!!!
$proces = $args.proces;
$idprop = $args.idprop;
$generics = var[ $_Portal ][ 'generics' ];
$entitats = var[ $_Portal ][ 'entitats' ];
$versions_portal = var[ $_Portal ][ 'versions' ] otherwise $_Portal;
$versions_validacions = var[ $_Portal ][ 'versions_validacions' ] otherwise this_address;
// Funcions
// Si no s'ha lliurat l'argument especificat bota l'accés
$__arg = $arg =>
$args[ $arg ] otherwise
bounce( "Cal proporcionar el valor de: " || $arg );
$__dada = $refval => {
data_feed[[ oracles = $versions_validacions, feed_name = $refval, ifnone = false ]]
};
$__dada_proposta = $refval => {
data_feed[[ oracles = $versions_portal, feed_name = $refval, ifnone = false ]]
};
// Comprovacions
// La proposta encara no pot estar validada
if ( $__dada_proposta( 'validacio_' || $idprop ) )
{ bounce( 'Ja validada' ); }
// La proposta ha d'existir
if ( ! $__dada_proposta( $idprop ) )
{ bounce( 'No hi ha cap proposta amb aquesta id' ); }
// Processos
if ( $proces == 'convocatoria_validadores' ) {
$convocs = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
$nombre_isox = $__dada( 'darrer_isox' );
$ordinal_base = number_from_seed( timestamp, $nombre_isox );
$__isox_aleatori = $x => {
$ord_isox_aleatori =
$ordinal_base + $x > $nombre_isox ?
$ordinal_base + $x - $nombre_isox :
$ordinal_base + $x;
$isox_seleccionat = $__dada( 'isox_' || $ord_isox_aleatori );
$isox_seleccionat AND $__dada( 'isox_' || $ord_isox_aleatori ) == 'habilitat' ?
$isox_seleccionat : ''
};
$preseleccio_isox = map( $convocs, 8, $__isox_aleatori );
$seleccio_isox =
array_length( $preseleccio_isox ) < 10 ?
$preseleccio_isox :
$preseleccio_isox || map( $convocs, 10, $__isox_aleatori );
$__entitat_aleatoria = $x => {
$ord_entitat_aleatoria =
number_from_seed( timestamp, array_length( $entitats ) );
$entitat_seleccionada = $entitats[ $ord_entitat_aleatoria ];
$entitats[ $entitat_seleccionada ].estat == 'habilitada' ?
$entitat_seleccionada : ''
};
$preseleccio_entitats = map( $convocs, 10, $__entitat_aleatoria );
$seleccio_entitats =
array_length( $preseleccio_entitats ) < 10 ?
$preseleccio_entitats :
$preseleccio_entitats || map( $convocs, 10, $__entitat_aleatoria );
$__delegada_aleatoria = $x => {
$ord_delegada_aleatoria =
number_from_seed( timestamp, $generics.Nombre_Delegades );
$seleccio_entitats[ $ord_delegada_aleatoria ]
};
$seleccio_delegades = map( $seleccio_entitats, 12, $__delegada_aleatoria );
$nova_convocatoria = {
isox: $seleccio_isox,
delegades: $seleccio_delegades,
temps: timestamp
};
}
if ( $proces == 'decisio_validacio' ) {
$convocatoria = var[ 'convocatoria_' || $idprop ];
$validacio = $__dada( 'validacio_' || $idprop );
$deliberacio = var[ 'deliberacio_' || $idprop ];
$refus = $__dada( 'refus_' || $idprop );
// La convocatoria ha d'existir
if ( ! $convocatoria )
{ bounce( 'No hi ha cap convocatoria amb aquesta id' ); }
// Tractament proposta encara pendent
if ( $validacio OR $refus )
{ bounce( 'Aquesta proposta ja ha estat tractada' ); }
$_isox = $convocatoria.isox[ $adr__ ] ? $adr__ : false;
$_delegada = $convocatoria.delegades[ $adr__ ] ? $adr__ : false;
// adr__ actuant ha estat convocada
if ( ! $_isox AND ! $_delegada )
{ bounce( 'Adreça no convocada' ); }
// adr__ actuant pendent decisió
if (
$deliberacio.isox.aprovacions[ $adr__ ] OR
$deliberacio.delegades.aprovacions[ $adr__ ] )
{ bounce( "Ja hi consta una decisió d'aquesta adreça per a aquesta proposta" ); }
$grup = $_isox ? 'isox' : $_delegada ? 'delegades' : bounce( 'error' );
// Deliberació pendent
if ( $deliberacio[ $grup ].refusada OR $deliberacio[ $grup ].aprovada )
{ bounce( 'Deliberacio de ' || $grup || ' ja enllestida' ); }
if ( $__arg( 'decisio' ) == 'refusada' ) {
$deliberacio[ $grup ].refus = $adr__;
$deliberacio[ $grup ].refusada = timestamp;
$validacio_refusada = true;
}
if ( $__arg( 'decisio' ) == 'aprovada' ) {
$deliberacio[ $grup ].aprovacions[] = $adr__;
$resp = 'aprovada per' || $adr__;
$nombre_aprovacions = $deliberacio[ $grup ].aprovacions;
if ( array_length( $nombre_aprovacions == $generics.Nombre_Aprovacions ) ) {
$deliberacio[ $grup ].aprovada = timestamp;
}
}
if ( $deliberacio.isox.aprovada AND $deliberacio.delegades.aprovada ) {
$validacio_aprovada = true;
}
}
// Temporalment, per als TESTS!!!...............................
if ( $proces == 'validacio_directa_TEST' ) {
$validacio_aprovada = true;
}
}",
"messages": [
{
"app": "data",
"payload": "{ $args }"
},
{
"if": "{ $proces == 'convocatoria_validadores' }",
"app": "payment",
"payload": {
"asset": "{ $_unitat }",
"outputs": [
{
"if": "{ $seleccio_isox[0] }",
"address": "{ $seleccio_isox[0] }",
"amount": "{ $qt }"
},
{
"if": "{ $seleccio_isox[1] }",
"address": "{ $seleccio_isox[1] }",
"amount": "{ $qt }"
},
{
"if": "{ $seleccio_isox[2] }",
"address": "{ $seleccio_isox[2] }",
"amount": "{ $qt }"
},
{
"if": "{ $seleccio_isox[3] }",
"address": "{ $seleccio_isox[3] }",
"amount": "{ $qt }"
},
{
"if": "{ $seleccio_isox[4] }",
"address": "{ $seleccio_isox[4] }",
"amount": "{ $qt }"
},
{
"if": "{ $seleccio_isox[5] }",
"address": "{ $seleccio_isox[5] }",
"amount": "{ $qt }"
},
{
"if": "{ $seleccio_isox[6] }",
"address": "{ $seleccio_isox[6] }",
"amount": "{ $qt }"
},
{
"if": "{ $seleccio_isox[7] }",
"address": "{ $seleccio_isox[7] }",
"amount": "{ $qt }"
},
{
"if": "{ $seleccio_isox[8] }",
"address": "{ $seleccio_isox[8] }",
"amount": "{ $qt }"
},
{
"if": "{ $seleccio_isox[9] }",
"address": "{ $seleccio_isox[9] }",
"amount": "{ $qt }"
}
]
}
},
{
"if": "{ $validacio_aprovada }",
"app": "data_feed",
"payload": {
"{ 'validacio_' || $idprop }": "{ timestamp }"
}
},
{
"if": "{ $validacio_refusada }",
"app": "data_feed",
"payload": {
"{ 'refus_' || $idprop }": "{ timestamp }"
}
},
{
"app": "state",
"state": "{
response[ 'Procés' ] = $proces;
response[ 'Proposta' ] = $idprop;
if ( $nova_convocatoria ) {
var[ 'convocatoria_' || $idprop ] = $nova_convocatoria;
}
if ( $proces == 'decisio_validacio' ) {
response[ 'Validació' ] =
$__arg( 'decisio' ) || ' per ' || $adr__;
if ( $deliberacio[ $grup ].aprovada ) {
response[ 'Validació' ] = ' aprovada per ' || $grup;
}
if ( $deliberacio.isox.aprovada AND $deliberacio.delegades.aprovada ) {
response[ 'Validació' ] = 'aprovada';
}
var[ 'deliberacio_' || $idprop ] = $deliberacio;
}
// -- Nou Portal
if ( $_Portal != $_Portal_actual ) {
var[ 'anterior_portal' ] = var[ 'nou_portal' ];
var[ 'nou_portal' ] = $_Portal;
response[ 'Nou portal' ] = $_Portal;
}
}"
}
]
}
]