[
"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.val 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 }"
}
]
}
}
]
}
]
}
}
]