[
"autonomous agent",
{
"init": "{
$_Registre = 'HISFJTKAHZFFDDMG4KW3YLLS2MW2HJOD';
$adr__ = trigger.initial_address;
$args = trigger.data;
$unitat = trigger.output[[ asset != base ]].asset;
// Retorna una dada del Registre
$__dada = $refdada =>
data_feed [[
oracles = $_Registre,
feed_name = $refdada,
ifnone = 0
]];
// Si no se li proporciona l'argument "sentit" és una provisió
$sentit = $args.sentit otherwise 'provisio';
if ( $sentit != 'provisio' ) {
$id_unitat = $unitat == 'none' ? 'base' : $unitat;
$unitat_entrada =
$id_unitat == 'base' ?
'Bytes' :
$id_unitat == $__dada( 'Estels' ) ?
'Estels' :
$__dada( 'geto_' || $id_unitat );
// Si es tracta de la dotació inicial no cal el control d'accés
$dotacio_inicial_feta = var[ 'dotacio_' || $unitat_entrada ];
$es_dotacio_inicial =
! $dotacio_inicial_feta
AND $sentit == 'entrada'
AND ( $unitat_entrada == 'Bytes' OR $unitat_entrada == 'Estels' );
if ( ! $es_dotacio_inicial
AND $__dada( '_Portal' ) != trigger.address
AND $__dada( '_Accions' ) != trigger.address )
bounce( 'Accés interdit' );
$total_entrades =
$__dada( 'total_entrades_' || $unitat_entrada );
$unitat_sortida = $args.unitat_sortida;
$total_sortides =
$__dada( 'total_sortides_' || $unitat_sortida );
$registre = {};
$dades = {};
if ( $sentit == 'entrada' OR $sentit == 'ambdos' ) {
$qt_entrada = trigger.output[[ asset = $id_unitat ]];
$nou_total_entrades = $total_entrades + $qt_entrada;
$ord_entrada = $__dada( 'ordinal_entrada' ) + 1;
$ref_entrada = 'entrada_' || $ord_entrada;
$dades[ $ref_entrada || '_data' ] = timestamp;
$dades[ $ref_entrada || '_qt' ] = $qt_entrada;
$dades[ $ref_entrada || '_emissora' ] =
$args.emissora otherwise $adr__;
$dades[ $ref_entrada || '_unitat' ] = $unitat_entrada;
$dades[ 'total_entrades_' || $unitat_entrada ] =
$nou_total_entrades;
$dades[ 'ordinal_entrada' ] = $ord_entrada;
}
if ( $sentit == 'sortida' OR $sentit == 'ambdos' ) {
$qt_sortida = $args.qt;
$rebedora = $args.rebedora;
$ord_sortida = $__dada( 'ordinal_sortida' ) + 1;
$ref_sortida = 'sortida_' || $ord_sortida;
$nou_total_sortides = $total_sortides + $qt_sortida;
$dades[ $ref_sortida || '_data' ] = timestamp;
$dades[ $ref_sortida || '_qt' ] = $qt_sortida;
$dades[ $ref_sortida || '_actuant' ] = $adr__;
$dades[ $ref_sortida || '_rebedora' ] = $rebedora;
$dades[ $ref_sortida || '_unitat' ] = $unitat_sortida;
$dades[ 'total_sortides_' || $unitat_sortida ] =
$nou_total_sortides;
$dades[ 'ordinal_sortida' ] = $ord_sortida;
}
$registre.dades = $dades;
}
}",
"messages": [
{
"if": "{ $sentit != 'provisio' }",
"app": "data",
"payload": "{ $registre }"
},
{
"if": "{
$sentit == 'entrada' OR
( !! $qt_sortida AND $unitat_sortida != 'Bytes' )
}",
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{ $_Registre }",
"amount": "{ $__dada( 'Provisio' ) }"
}
]
}
},
{
"if": "{ !! $qt_sortida AND $unitat_sortida == 'Bytes' }",
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{ $rebedora }",
"amount": "{ $qt_sortida }"
},
{
"address": "{ $_Registre }",
"amount": "{ $__dada( 'Provisio' ) }"
}
]
}
},
{
"if": "{ !! $qt_sortida AND $unitat_sortida != 'Bytes' }",
"app": "payment",
"payload": {
"asset": "{ $args.id_unitat_sortida }",
"outputs": [
{
"address": "{ $rebedora }",
"amount": "{ $qt_sortida }"
}
]
}
},
{
"app": "state",
"state": "{
if ( $sentit == 'entrada' OR $sentit == 'ambdos' ) {
response[ $ref_entrada ] =
$qt_entrada || ' ' || $unitat_entrada || ' de ' || $adr__;
response[ 'Total entrades en ' || $unitat_entrada ] =
$nou_total_entrades;
if( $unitat_entrada == 'Bytes' )
response[ 'Total entrades en MBytes' ] =
round ( $nou_total_entrades / 1e6 );
}
if ( $sentit == 'sortida' OR $sentit == 'ambdos' ) {
response[ $ref_sortida ] =
$qt_sortida || ' ' || $unitat_sortida || ' a ' || $rebedora;
response[ 'Total sortides en ' || $unitat_sortida ] =
$nou_total_sortides;
}
if ( $es_dotacio_inicial )
var[ 'dotacio_' || $unitat_entrada ] = true;
}"
}
]
}
]