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 = 10; // Pendent de definició!!!
$proces = $args.proces;
$idprop = $args.idprop;
$entitats = var[ $_Portal ][ 'entitats' ] otherwise {};
$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
if ( $__dada( 'validacio_' || $idprop ) != '' )
bounce( 'Ja validada' );
// La proposta ha d'existir
/*if ( ! $__dada( $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, 0 ];
$nombre_isox = $__dada( 'ordinal_isox' );
$selec_isox = [];
$llista = [];
$__isox_aleatori = $x => {
$ordinal_aleatori =
number_from_seed( ( timestamp + $x ), $nombre_isox );
$_isox = $__dada( 'isox_' || $ordinal_aleatori );
$estat_isox = $__dada( 'isox_' || $_isox || '_estat' ) otherwise '';
if( $estat_isox == 'habilitat' AND ! contains( $llista[0], $_isox ) ) {
$selec_isox[] = $_isox;
$llista[0] = $_isox || ':' || $llista[0];
$dades['convocatoria_' || $idprop || '_validadora_isox_' || $x ] = $_isox;
}
};
foreach( $convocs, 10, $__isox_aleatori );
/*
$nombre_entitats = $__dada( 'ordinal_entitat' );
$selec_delegades = [];
$__entitat_aleatoria = $x => {
$ord_entitat_aleatoria =
number_from_seed( ( timestamp + $x ), $nombre_entitats );
$ref_entitat = $__dada( 'entitat_' || $ord_entitat_aleatoria );
$estat_entitat = $__dada( $ref_entitat || '_estat' ) otherwise '';
if( $estat_entitat == 'operatiu' ) {
$ord_delegada_aleatoria = number_from_seed( ( timestamp + $x ), 5 );
$ref_delegada = $ref_entitat || '_delegada_' || $ord_delegada_aleatoria;
$_delegada = $__dada( $ref_delegada );
if( $_delegada != '' ) {
$selec_delegades[] = $_delegada;
$dades['convocatoria' || $idprop || '_validadora_delegada_' || $x ] = $_delegada;
}
}
};
foreach( $convocs, 10, $__entitat_aleatoria );
$selec_valoradores = $selec_isox || $selec_delegades;
*/
$selec_valoradores = $selec_isox; // || $selec_delegades;
$avisos = [];
$__avisos_seleccionades = $adr_valoradora => {
if( $adr_valoradora ) {
$avis_convocatoria = {
address : $adr_valoradora,
amount : $qt
};
$avisos[] = $avis_convocatoria;
}
};
foreach( $selec_valoradores, 20, $__avisos_seleccionades );
}
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;
$dades[ 'refus_' || $idprop ] = timestamp;
}
if ( $__arg( 'decisio' ) == 'aprovada' ) {
$deliberacio[ $grup ].aprovacions[] = $adr__;
$resp = 'aprovada per' || $adr__;
$nombre_aprovacions = $deliberacio[ $grup ].aprovacions;
if ( array_length( $nombre_aprovacions == $__dada( 'Nombre_Aprovacions' ))) {
$deliberacio[ $grup ].aprovada = timestamp;
}
}
if ( $deliberacio.isox.aprovada AND $deliberacio.delegades.aprovada ) {
$dades[ 'validacio_' || $idprop ] = timestamp;
}
}
// Temporalment, per als TESTS!!!...............................
if ( $proces == 'validacio_directa_TEST' ) {
$dades[ 'validacio_' || $idprop ] = timestamp;
}
$registre = {};
$registre.dades = $dades;
}",
"messages": [
{
"app": "data",
"payload": "{ $registre }"
},
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{ $args._Registre }",
"amount": "{ $__dada( 'Provisio' ) }"
}
]
}
},
{
"if": "{ $proces == 'convocatoria_validadores' }",
"init": "{
$payload =
{
asset : 'base',
outputs : $avisos
};
}",
"app": "payment",
"payload": "{ $payload }"
},
{
"if": "{ $proces == 'test_outputs' }",
"init": "{
$outputs_test = [
{
address : $args._deri,
amount : $qt
},
{
address : $args._testori,
amount : $qt * 2
}
];
//$outputs = $seleccio_isox || $seleccio_delegades;
//$outputs = $seleccio_isox;
$payload =
{
asset : 'base',
outputs : $outputs_test
};
}",
"app": "payment",
"payload": "{ $payload }"
},
{
"app": "state",
"state": "{
response[ 'Procés' ] = $proces;
response[ 'Proposta' ] = $idprop;
if ( $proces == 'convocatoria_validadores' ) {
response[ 'Nombre Isox' ] = $nombre_isox;
$__isox_seleccionades = $n => {
response[ 'Isox seleccionada ' || $n ] = $selec_isox[ $n ];
};
foreach( $convocs, 10, $__isox_seleccionades );
$__isox_convocades = $n => {
if( $selec_isox[ $n ] ) {
response[ 'Valoradora convocada ' || $n ] = $selec_isox[ $n ];
}
};
foreach( $convocs, 10, $__isox_convocades );
/*
$__delegades_seleccionades = $n => {
response[ 'Isox seleccionada ' || $n ] = $seleccio_delegades[ $n ][0];
};
$llista_delegades = map( $convocs, 10, $__delegades_seleccionades );
*/
}
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';
}
if ( $__arg( 'decisio' ) == 'refusada' ) {
response[ 'Validació' ] = 'refusada';
}
var[ 'deliberacio_' || $idprop ] = $deliberacio;
}
}"
}
]
}
]