Definition: [
"autonomous agent",
{
"init": "{
$nom_AA = 'Validacions';
// Portal
//$_Portal = '5WVBJQHTEP54AEYUJGTQKWTXTXZSJQWA';
$_Portal = trigger.address; // * només x tests
if ( $_Portal != trigger.address ) bounce ( 'Portal no reconegut' );
// Principals
$args = trigger.data;
$adr__ = trigger.initial_address;
$_unitat = trigger.output[[ asset != base ]].asset;
$qt = 1; // Pendent de definició!!!
$proces = $args.proces;
$idprop = $args.idprop;
$dades = $args.dades otherwise {};
// Funcions
$__dada = $refval =>
data_feed[[ oracles = $args._Registre, feed_name = $refval, ifnone = '' ]];
$__arg = $arg =>
$args[ $arg ] otherwise
bounce ( "Cal proporcionar el valor de: " || $arg );
// Comprovacions
// La proposta encara no pot estar validada
$resultat_validacio = $__dada( 'validacio_' || $idprop ) otherwise '';
if ( $resultat_validacio != '' )
bounce( 'La proposta ja ha estat ' || $resultat_validacio );
if ( ! $__dada( $idprop ) )
bounce( 'No hi ha cap proposta amb aquesta id' );
// Processos
if ( $proces == 'convocatoria_validadores' ) {
// La convocatòria encara no pot haver estat efectuada
$convocatoria_efectuada = $__dada( 'convocatoria_' || $idprop ) otherwise '';
if ( $convocatoria_efectuada != '' )
bounce( "La convocatoria d'aquesta proposta ja ha estat efectuada" );
$__ord_aleatori = ( $ord, $nombre ) => {
$num_aleatori = number_from_seed( ( timestamp + $ord ), 1000 );
round( $num_aleatori / 1000 * $nombre )
};
$convocs_i = [ 1, 2, 3, 4, 5, 6, 7, 8 ];
$nombre_isox = $__dada( 'ordinal_isox' );
$selec_isox = [];
$llista_isox = [];
$__isox_aleatori = $x => {
$ordinal_aleatori = $__ord_aleatori( $x, $nombre_isox );
$_isox = $__dada( 'isox_' || $ordinal_aleatori );
$estat_isox = $__dada( 'isox_' || $_isox || '_estat' ) otherwise '';
if( $estat_isox == 'habilitat' AND ! contains( $llista_isox[0], $_isox ) ) {
$selec_isox[] = $_isox;
$llista_isox[0] = $_isox || ':' || $llista_isox[0];
$dades[ 'convocatoria_' || $idprop || '_validadora_isox_' || $x ] = $_isox;
}
};
foreach( $convocs_i, 8, $__isox_aleatori );
$convocs_d = [ 1, 2, 3 ]; // Nombre limitat per als TESTS
$nombre_entitats = $__dada( 'ordinal_Entitat' );
$selec_delegades = [];
$llista_entitats = [];
$llista_delegades = [];
$__entitat_aleatoria = $x => {
$ord_entitat_aleatoria = $__ord_aleatori( $x, $nombre_entitats );
$ref_entitat = $__dada( 'entitat_' || $ord_entitat_aleatoria );
$estat_entitat = $__dada( $ref_entitat || '_estat' ) otherwise '';
if( $estat_entitat == 'operatiu' AND ! contains( $llista_entitats[0], $ref_entitat ) ) {
$ord_delegada_aleatoria = number_from_seed( ( timestamp + $x ), 3 );
$ref_delegada = $ref_entitat || '_delegada_' || $ord_delegada_aleatoria;
$_delegada = $__dada( $ref_delegada ) otherwise '';
$llista_entitats[0] = $ref_entitat || ':' || $llista_entitats[0];
if( $_delegada != '' AND ! contains( $llista_delegades[0], $_delegada ) ) {
$selec_delegades[] = $_delegada;
$llista_delegades[0] = $_delegada || ':' || $llista_delegades[0];
$dades[ 'convocatoria' || $idprop || '_validadora_delegada_' || $x ] = $_delegada;
}
}
};
foreach( $convocs_d, 3, $__entitat_aleatoria );
$selec_valoradores = $selec_isox || $selec_delegades;
$convocacions = [];
$__convocacions_seleccionades = $adr_valoradora => {
if( !! $adr_valoradora ) {
$convocacio = {
address : $adr_valoradora,
amount : $qt
};
$convocacions[] = $convocacio;
}
};
foreach( $selec_valoradores, 16, $__convocacions_seleccionades );
$dades[ 'convocatoria_' || $idprop ] = timestamp;
}
if ( $proces == 'decisio_validacio' ) {
$convocatoria = $__dada( 'convocatoria_' || $idprop );
$validacio = $__dada( 'validacio_' || $idprop );
$refus = $__dada( 'refus_' || $idprop );
$convocs = [ 1, 2, 3, 4, 5, 6, 7, 8 ];
// 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_convocada = [];
$semiref_isox = 'convocatoria_' || $idprop || '_validadora_isox_';
$__troba_convocatoria_isox = $o => {
$adr_convo = $__dada( $semiref_isox || $o ) otherwise '';
if (
! $_isox_convocada[0]
AND $adr_convo == $adr__
)
$_isox_convocada[0] = $o;
};
foreach( $convocs, 8, $__troba_convocatoria_isox );
$_delegada_convocada = [];
$semiref_delegada = 'convocatoria_' || $idprop || '_validadora_delegada_';
$__troba_convocatoria_delegada = $o => {
$adr_convo = $__dada( $semiref_delegada || $o ) otherwise '';
if (
! $_delegada_convocada[0]
AND $adr_convo == $adr__
)
$_delegada_convocada[0] = $o;
};
foreach( $convocs, 8, $__troba_convocatoria_delegada );
// adr__ actuant ha estat convocada
//if ( ! $_isox_convocada[0] AND ! $_delegada_convocada[0] )
if ( ! $_isox_convocada[0] ) // per als TESTs
bounce( 'Adreça no convocada' );
if ( !! $_isox_convocada[0] ) $grup = 'isox';
if ( !! $_delegada_convocada[0] ) $grup = 'delegades';
$secc_ref_decisio = $idprop || '_' || $grup;
if ( !! $__dada( $secc_ref_decisio || '_' || $adr__ ) )
bounce( "Ja hi consta una decisió d'aquesta adreça per a aquesta proposta" );
// Deliberació en curs
$decisio_grup = $__dada( $secc_ref_decisio );
if ( !! $decisio_grup )
bounce( 'Decisió del grup ' || $grup || ' ja pronunciada: ' || $decisio_grup );
if ( $__arg( 'decisio' ) == 'refusada' ) {
$dades[ $secc_ref_decisio || '_' || $adr__ ] = 'refusada';
$dades[ $secc_ref_decisio ] = 'refusada';
$dades[ 'refus_' || $idprop ] = timestamp;
}
if ( $__arg( 'decisio' ) == 'aprovada' ) {
$ref_nombre_aprovacions = 'nombre_aprovacions_' || $grup || '_' || $idprop;
$nombre_aprovacions = $__dada( $ref_nombre_aprovacions ) otherwise 0;
$dades[ $secc_ref_decisio || '_' || $adr__ ] = 'aprovada';
$dades[ $ref_nombre_aprovacions ] = $nombre_aprovacions + 1;
if ( $nombre_aprovacions == $__dada( 'Nombre_Aprovacions' ) ) {
$dades[ $secc_ref_decisio ] = 'aprovada';
$alter_grup = $grup == 'isox' ? 'delegades' : 'isox';
$decisio_alter_grup =
$__dada( $idprop || '_' || $alter_grup ) otherwise '';
if ( $decisio_alter_grup == 'aprovada' )
$dades[ 'validacio_' || $idprop ] = timestamp;
}
}
}
// Temporalment, per als TESTS!!!...............................
if ( $proces == 'validacio_directa_TEST' )
$dades[ 'validacio_' || $idprop ] = timestamp;
$registre = {};
$registre.dades = $dades;
}",
"messages": [
{
"if": "{ $proces == 'convocatoria_validadores' }",
"init": "{
$payload =
{
asset : $_unitat,
outputs : $convocacions
};
}",
"app": "payment",
"payload": "{ $payload }"
},
{
"app": "data",
"payload": "{ $registre }"
},
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{ $args._Registre }",
"amount": "{ $__dada( 'Provisio' ) }"
}
]
}
},
{
"app": "state",
"state": "{
response[ 'Procés' ] = $proces;
response[ 'Proposta' ] = $idprop;
if ( $proces == 'convocatoria_validadores' )
response[ 'Nombre Isox' ] = $nombre_isox;
if ( $proces == 'decisio_validacio' ) {
response[ 'Validació' ] =
$__arg( 'decisio' ) || ' per ' || $adr__;
$decisio_presa = $dades[ $secc_ref_decisio ] otherwise '';
if ( $decisio_presa != '' )
response[ 'Validació' ] = $decisio_presa || ' per ' || $grup;
if ( !! $dades[ 'validacio_' || $idprop ] )
response[ 'Validació' ] = 'aprovada';
if ( !! $dades[ 'refus_' || $idprop ] )
response[ 'Validació' ] = 'refusada';
}
}"
}
]
}
]