| 1 | [ |
| 2 | "autonomous agent", |
| 3 | { |
| 4 | "init": "{ |
| 5 | $nom_AA = 'Portal'; |
| 6 | $versio = '0.1.2'; |
| 7 | |
| 8 | $_AUT_000 = 'C4KIJSUWVM7BGWTLXKX3K4PNRXV7OY4W'; |
| 9 | |
| 10 | $adr__ = trigger.address; |
| 11 | $args = trigger.data; |
| 12 | $idgeto = trigger.output[[ asset != base ]].asset; |
| 13 | $qt = trigger.output[[ asset = $idgeto ]]; |
| 14 | |
| 15 | $generics = var[ 'Generics' ]; |
| 16 | $propostes = var[ 'Propostes' ]; |
| 17 | $validacions = var[ 'Validacions' ]; |
| 18 | $ordinals = var[ 'Ordinals' ]; |
| 19 | $getons = var[ 'Getons' ]; |
| 20 | $alteracions = var[ 'Alteracions' ]; |
| 21 | $geto = $getons[ $args.id_geto ]; |
| 22 | |
| 23 | |
| 24 | $_actuant_es_AUT_000 = $adr__ == $_AUT_000; |
| 25 | |
| 26 | $_actuant_es_AUT = |
| 27 | $_actuant_es_AUT_000 AND ! $generics._AUT_0 |
| 28 | OR $adr__ == $generics._AUT_A |
| 29 | OR $adr__ == $generics._AUT_0 |
| 30 | OR $adr__ == $generics._AUT_B |
| 31 | OR $adr__ == $generics._AUT_C; |
| 32 | |
| 33 | $_actuant_es_AUT_geto = |
| 34 | $_actuant_es_AUT AND ! $geto.variables._AUT_0 |
| 35 | OR $adr__ == $geto.constants._AUT_A |
| 36 | OR $adr__ == $geto.variables._AUT_0 |
| 37 | OR $adr__ == $geto.variables._AUT_B |
| 38 | OR $adr__ == $geto.variables._AUT_C; |
| 39 | |
| 40 | |
| 41 | $__bota = $txt => bounce ( $nom_AA || ' >>> ' || $txt ); |
| 42 | |
| 43 | $__ordinal = $rf => $ordinals[ $rf ] ? $ordinals[ $rf ] + 1 : 1; |
| 44 | |
| 45 | $__idprop = $rf => { |
| 46 | $ordinals[ $rf ] = $__ordinal( $rf ); |
| 47 | $rf || '_' || $ordinals[ $rf ] |
| 48 | }; |
| 49 | |
| 50 | $__data_confirmacio = () => timestamp_to_string( timestamp + $generics.Lapse ); |
| 51 | |
| 52 | |
| 53 | |
| 54 | $__arg = $arg => |
| 55 | $args[ $arg ] otherwise |
| 56 | $__bota( "Cal proporcionar el valor de: " || $arg ); |
| 57 | |
| 58 | |
| 59 | if ( $args.admin ) { |
| 60 | |
| 61 | if ( $args.admin_geto ) { |
| 62 | |
| 63 | |
| 64 | if ( ! $geto OR $geto.estat != 'actiu' ) |
| 65 | { $__bota( 'Getó inexistent o inactiu' ); } |
| 66 | |
| 67 | if ( ! $_actuant_es_AUT_geto ) |
| 68 | { $__bota( 'No autoritzada' ); } |
| 69 | |
| 70 | } else { |
| 71 | |
| 72 | if ( ! $_actuant_es_AUT ) |
| 73 | { $__bota( 'No autoritzada' ); } |
| 74 | } |
| 75 | |
| 76 | |
| 77 | |
| 78 | if ( ! $_actuant_es_AUT_000 |
| 79 | OR ( $_actuant_es_AUT_000 AND $generics._AUT_0 ) |
| 80 | OR ( $_actuant_es_AUT_000 AND $geto.variables._AUT_0 ) |
| 81 | ) { |
| 82 | |
| 83 | if ( $args.tasca == 'confirmacio' ) { |
| 84 | $proposta = $propostes[ $args.idprop ]; |
| 85 | |
| 86 | |
| 87 | if ( ! $proposta ) |
| 88 | { $__bota( "No hi ha cap proposta amb aquesta ref" ); } |
| 89 | |
| 90 | |
| 91 | if ( $proposta.proposant == $adr__ ) |
| 92 | { $__bota( "El procés de confirmació l'ha d'endegar una altra AUT" ); } |
| 93 | |
| 94 | |
| 95 | if ( $generics.Lapse > timestamp - $proposta.temps ) |
| 96 | { $__bota( "Encara no es pot confirmar la proposta" ); } |
| 97 | |
| 98 | |
| 99 | if ( ! $validacions[ $args.idprop ] ) |
| 100 | { $__bota( "La proposta encara no ha estat validada" ); } |
| 101 | |
| 102 | $tasca = 'confirmacio'; |
| 103 | |
| 104 | } else { |
| 105 | |
| 106 | $ref = $__arg( 'ref' ); |
| 107 | $val = $__arg( 'val' ); |
| 108 | |
| 109 | |
| 110 | $sufix = $args.admin_geto ? '_' || $args.id_geto : ''; |
| 111 | $ordinal = $ordinals[ $ref || $sufix ]; |
| 112 | $darrera_prop = $propostes[ $ref || '_' || $ordinal || $sufix ]; |
| 113 | |
| 114 | if ( $darrera_prop AND $darrera_prop.val == $val ) |
| 115 | { $__bota( "El valor proposat coincideix amb el de la darrera proposta" ); } |
| 116 | |
| 117 | $tasca = 'proposta'; |
| 118 | } |
| 119 | } else { |
| 120 | $ref = $__arg( 'ref' ); |
| 121 | $val = $__arg( 'val' ); |
| 122 | $tasca = 'drecera'; } |
| 123 | } |
| 124 | |
| 125 | }", |
| 126 | "messages": { |
| 127 | "cases": [ |
| 128 | { |
| 129 | "if": "{ $args.proces == 'acces' }", |
| 130 | "init": "{ |
| 131 | $args._Portal = this_address; |
| 132 | $args._FOP = $generics._FOP; |
| 133 | $args._Estels = $generics._Estels; |
| 134 | |
| 135 | $args.geto = $idgeto; |
| 136 | $args.qt = $qt; |
| 137 | }", |
| 138 | "messages": [ |
| 139 | { |
| 140 | "app": "data", |
| 141 | "payload": "{ $args }" |
| 142 | }, |
| 143 | { |
| 144 | "app": "payment", |
| 145 | "payload": { |
| 146 | "asset": "{ 'base' }", |
| 147 | "outputs": [ |
| 148 | { |
| 149 | "address": "{ $generics._Acces }", |
| 150 | "amount": "{ $args.qt }" |
| 151 | } |
| 152 | ] |
| 153 | } |
| 154 | } |
| 155 | ] |
| 156 | }, |
| 157 | { |
| 158 | "if": "{ $args.admin AND $args.proces == 'nou_portal' }", |
| 159 | "messages": [ |
| 160 | { |
| 161 | "app": "state", |
| 162 | "state": "{ |
| 163 | $darrer_portal = var[ $__arg( 'val' ) ]; |
| 164 | $dades = { |
| 165 | Generics : $darrer_portal.Generics, |
| 166 | Propostes : $darrer_portal.Propostes, |
| 167 | Validacions : $darrer_portal.Validacions, |
| 168 | Getons : $darrer_portal.Getons, |
| 169 | Ordinals : $darrer_portal.Ordinals, |
| 170 | Alteracions : $darrer_portal.Alteracions, |
| 171 | Darrer_Portal : $darrer_portal |
| 172 | }; |
| 173 | |
| 174 | if ( $tasca == 'drecera' ) { |
| 175 | var[ 'Generics' ] = $dades.Generics; |
| 176 | var[ 'Propostes' ] = $dades.Propostes; |
| 177 | var[ 'Validacions' ] = $dades.Validacions; |
| 178 | var[ 'Getons' ] = $dades.Getons; |
| 179 | var[ 'Ordinals' ] = $dades.Ordinals; |
| 180 | var[ 'Alteracions' ] = $dades.Alteracions; |
| 181 | var[ 'Darrer_Portal' ] = $dades.Darrer_Portal; |
| 182 | } |
| 183 | |
| 184 | if ( $tasca == 'confirmacio' ) { |
| 185 | $prop = $propostes[ $args.idprop ]; |
| 186 | var[ 'Generics' ] = $prop.dades.Generics; |
| 187 | var[ 'Propostes' ] = $prop.dades.Propostes; |
| 188 | var[ 'Validacions' ] = $prop.dades.Validacions; |
| 189 | var[ 'Getons' ] = $prop.dades.Getons; |
| 190 | var[ 'Ordinals' ] = $prop.dades.Ordinals; |
| 191 | var[ 'Alteracions' ] = $prop.dades.Alteracions; |
| 192 | var[ 'Darrer_Portal' ] = $prop.dades.Darrer_Portal; |
| 193 | response[ 'proposta' ] = $args.idprop; |
| 194 | } |
| 195 | if ( $tasca == 'proposta' ) { |
| 196 | $idprop = $__idprop( $args.proces ); |
| 197 | |
| 198 | $propostes[ $idprop ] = |
| 199 | { |
| 200 | dades: $dades, |
| 201 | proposant: $adr__, |
| 202 | temps: timestamp, |
| 203 | }; |
| 204 | var[ 'Propostes' ] = $propostes; |
| 205 | var[ 'Ordinals' ] = $ordinals; |
| 206 | response[ 'proposta' ] = $idprop; |
| 207 | response[ 'data confirmació'] = $__data_confirmacio(); |
| 208 | } |
| 209 | response[ 'tasca' ] = $tasca; |
| 210 | }" |
| 211 | } |
| 212 | ] |
| 213 | }, |
| 214 | { |
| 215 | "if": "{ $args.admin AND $args.proces == 'esmena_generics' }", |
| 216 | "messages": [ |
| 217 | { |
| 218 | "app": "state", |
| 219 | "state": "{ |
| 220 | if ( ! $generics AND $ref != 'multiple' ) |
| 221 | { $__bota( "No hi ha generics" ); } |
| 222 | |
| 223 | if ( $tasca == 'drecera' ) { |
| 224 | if ( $ref == 'multiple' ) { |
| 225 | |
| 226 | $variables = {}; |
| 227 | $__resp = $r => { |
| 228 | $valvar = $args[ $r ] otherwise $geto.variables[ $r ]; |
| 229 | $variables[ $r ] = $valvar; |
| 230 | response[ $r ] = $valvar; |
| 231 | }; |
| 232 | |
| 233 | $__resp( '_Acces' ); |
| 234 | $__resp( '_Getons' ); |
| 235 | $__resp( '_FRO' ); |
| 236 | $__resp( '_FOP' ); |
| 237 | $__resp( '_FDIP' ); |
| 238 | $__resp( '_Estels' ); |
| 239 | $__resp( 'Interval' ); |
| 240 | $__resp( '_Transfer' ); |
| 241 | $__resp( '_Capacitacio' ); |
| 242 | $__resp( '_Avis' ); |
| 243 | $__resp( 'Import_Activacio' ); |
| 244 | $__resp( 'Import_Subscripcio' ); |
| 245 | $__resp( 'Import_Renovacio' ); |
| 246 | $__resp( 'Taxa_Conversio' ); |
| 247 | $__resp( 'Factor_Conversio' ); |
| 248 | $__resp( 'Generacio_Minima' ); |
| 249 | $__resp( 'Cicles_Latencia' ); |
| 250 | $__resp( '_AUT_0' ); |
| 251 | $__resp( '_AUT_A' ); |
| 252 | $__resp( '_AUT_B' ); |
| 253 | $__resp( '_AUT_C' ); |
| 254 | |
| 255 | var[ 'Generics' ] = $variables; |
| 256 | |
| 257 | $__valvar = $refvar => |
| 258 | var[ $refvar ] otherwise {}; |
| 259 | |
| 260 | var[ 'Getons' ] = $__valvar( 'Getons' ); |
| 261 | var[ 'Propostes' ] = $__valvar( 'Propostes' ); |
| 262 | var[ 'Validacions' ] = $__valvar( 'Validacions' ); |
| 263 | var[ 'Ordinals' ] = $__valvar( 'Ordinals' ); |
| 264 | |
| 265 | } else { |
| 266 | $generics[ $ref ] = $val; |
| 267 | $nova_ref = $ref; |
| 268 | $nou_val = $val; |
| 269 | } |
| 270 | } else if ( $tasca == 'confirmacio' ) { |
| 271 | $generics[ $proposta.ref ] = $proposta.val; |
| 272 | $idprop = $args.idprop; |
| 273 | $nova_ref = $proposta.ref; |
| 274 | $nou_val = $proposta.val; |
| 275 | } else { |
| 276 | $idprop = $__idprop( $ref ); |
| 277 | $propostes[ $idprop ] = |
| 278 | { |
| 279 | ref: $ref, |
| 280 | val: $val, |
| 281 | proposant: $adr__, |
| 282 | temps: timestamp, |
| 283 | }; |
| 284 | var[ 'Propostes' ] = $propostes; |
| 285 | var[ 'Ordinals' ] = $ordinals; |
| 286 | $nova_ref = $ref; |
| 287 | $nou_val = $val; |
| 288 | response[ 'data confirmació'] = $__data_confirmacio(); |
| 289 | |
| 290 | } |
| 291 | var[ 'Generics' ] = $generics otherwise var[ 'Generics' ]; |
| 292 | response[ 'procés' ] = $args.proces; |
| 293 | response[ 'tasca' ] = $tasca; |
| 294 | response[ 'proposta' ] = $idprop otherwise '...'; |
| 295 | response[ 'nova ref' ] = $nova_ref otherwise '...'; |
| 296 | response[ 'nou val' ] = $nou_val otherwise '...'; |
| 297 | }" |
| 298 | } |
| 299 | ] |
| 300 | }, |
| 301 | { |
| 302 | "if": "{ $args.admin AND $args.proces == 'nou_geto' }", |
| 303 | "messages": [ |
| 304 | { |
| 305 | "if": "{ $tasca != 'proposta' }", |
| 306 | "app": "asset", |
| 307 | "payload": { |
| 308 | "cap": "{ $args.cap otherwise 1e9 }", |
| 309 | "is_private": false, |
| 310 | "is_transferrable": true, |
| 311 | "auto_destroy": "{ !! $args.auto_destroy }", |
| 312 | "fixed_denominations": false, |
| 313 | "issued_by_definer_only": true, |
| 314 | "cosigned_by_definer": false, |
| 315 | "spender_attested": false |
| 316 | } |
| 317 | }, |
| 318 | { |
| 319 | "app": "state", |
| 320 | "state": "{ |
| 321 | if ( $tasca != 'confirmacio' ) { |
| 322 | $constants = { id : response_unit }; |
| 323 | |
| 324 | $__const = $r => { |
| 325 | $constants[ $r ] = $__arg( $r ); |
| 326 | }; |
| 327 | $__const( '_FOG' ); |
| 328 | $__const( '_AUT_A' ); |
| 329 | $__const( 'factor_conversio' ); |
| 330 | $__const( 'activacions_restringides' ); |
| 331 | $__const( 'subscripcions_restringides' ); |
| 332 | $__const( 'recepcions_restringides' ); |
| 333 | $__const( 'conversions_restringides' ); |
| 334 | $__const( 'valors_esmenables' ); |
| 335 | $__const( 'llistats_editables' ); |
| 336 | $__const( 'bloqueig_possible' ); |
| 337 | |
| 338 | $variables = {}; |
| 339 | |
| 340 | $__vari = $r => { |
| 341 | $variables[ $r ] = $__arg( $r ); |
| 342 | }; |
| 343 | $__vari( 'import_activacio' ); |
| 344 | $__vari( 'import_subscripcio' ); |
| 345 | $__vari( 'import_renovacio' ); |
| 346 | $__vari( 'taxa_conversio' ); |
| 347 | $__vari( 'derivacio_aFOG' ); |
| 348 | $__vari( '_AUT_0' ); |
| 349 | $__vari( '_AUT_B' ); |
| 350 | $__vari( '_AUT_C' ); |
| 351 | } |
| 352 | if ( $tasca == 'drecera' ) { |
| 353 | $getons[ response_unit ] = |
| 354 | { |
| 355 | proposant: $adr__, |
| 356 | confirmant: $adr__, |
| 357 | temps: timestamp, |
| 358 | estat: 'actiu', |
| 359 | constants: $constants, |
| 360 | variables: $variables |
| 361 | }; |
| 362 | response[ 'Getó operatiu' ] = response_unit; |
| 363 | } |
| 364 | if ( $tasca == 'confirmacio' ) { |
| 365 | $idprop = $args.idprop; |
| 366 | $prop = $propostes[ $idprop ]; |
| 367 | $getons[ response_unit ] = |
| 368 | { |
| 369 | proposant: $prop.proposant, |
| 370 | confirmant: $adr__, |
| 371 | temps: timestamp, |
| 372 | estat: 'actiu', |
| 373 | constants: $prop.constants, |
| 374 | variables: $prop.variables |
| 375 | }; |
| 376 | response[ 'Getó operatiu' ] = $args.idprop; |
| 377 | } |
| 378 | if ( $tasca == 'proposta' ) { |
| 379 | $idprop = $__idprop( $args.proces ); |
| 380 | |
| 381 | $propostes[ $idprop ] = |
| 382 | { |
| 383 | proposant: $adr__, |
| 384 | temps: timestamp, |
| 385 | constants: $constants, |
| 386 | variables: $variables |
| 387 | }; |
| 388 | var[ 'Propostes' ] = $propostes; |
| 389 | var[ 'Ordinals' ] = $ordinals; |
| 390 | response[ 'data confirmació'] = $__data_confirmacio(); |
| 391 | } |
| 392 | var[ 'Getons' ] = $getons otherwise var[ 'Getons' ]; |
| 393 | response[ 'procés' ] = $args.proces; |
| 394 | response[ 'tasca' ] = $tasca; |
| 395 | response[ 'proposta' ] = $idprop otherwise '...'; |
| 396 | }" |
| 397 | } |
| 398 | ] |
| 399 | }, |
| 400 | { |
| 401 | "if": "{ $args.admin AND $args.proces == 'nou_estat_geto' }", |
| 402 | "messages": [ |
| 403 | { |
| 404 | "app": "state", |
| 405 | "state": "{ |
| 406 | if ( $tasca == 'drecera' ) { |
| 407 | $getons[ $args.id_geto ].estat = $args.nou_estat; |
| 408 | response[ 'Nou estat getó ' || $args.id_geto ] = $args.nou_estat; |
| 409 | } |
| 410 | if ( $tasca == 'confirmacio' ) { |
| 411 | $idprop = $args.idprop; |
| 412 | $prop = $propostes[ $idprop ]; |
| 413 | |
| 414 | $getons[ $prop.id_geto ].estat = $prop.estat; |
| 415 | response[ 'Nou estat getó ' || $prop.id_geto ] = $prop.estat; |
| 416 | } |
| 417 | if ( $tasca == 'proposta' ) { |
| 418 | $idprop = $__idprop( $args.proces ); |
| 419 | |
| 420 | $propostes[ $idprop ] = |
| 421 | { |
| 422 | proposant: $adr__, |
| 423 | temps: timestamp, |
| 424 | id_geto: $args.id_geto, |
| 425 | estat: $args.estat |
| 426 | }; |
| 427 | var[ 'Propostes' ] = $propostes; |
| 428 | var[ 'Ordinals' ] = $ordinals; |
| 429 | response[ 'data confirmació'] = $__data_confirmacio(); |
| 430 | } |
| 431 | var[ 'Getons' ] = $getons otherwise var[ 'Getons' ]; |
| 432 | response[ 'procés' ] = $args.proces; |
| 433 | response[ 'tasca' ] = $tasca; |
| 434 | response[ 'proposta' ] = $idprop otherwise '...'; |
| 435 | }" |
| 436 | } |
| 437 | ] |
| 438 | }, |
| 439 | { |
| 440 | "if": "{ $args.admin AND $args.proces == 'validacio' }", |
| 441 | "init": "{ |
| 442 | |
| 443 | |
| 444 | |
| 445 | |
| 446 | |
| 447 | |
| 448 | |
| 449 | |
| 450 | }", |
| 451 | "messages": [ |
| 452 | { |
| 453 | "app": "state", |
| 454 | "state": "{ |
| 455 | $validacions[ $args.idprop ] = timestamp; |
| 456 | var[ 'Validacions' ] = $validacions; |
| 457 | response[ 'Ref proposta validada' ] = $args.idprop; |
| 458 | }" |
| 459 | } |
| 460 | ] |
| 461 | }, |
| 462 | { |
| 463 | "if": "{ $args.admin AND $args.proces == 'esmena_geto' }", |
| 464 | "messages": [ |
| 465 | { |
| 466 | "app": "state", |
| 467 | "state": "{ |
| 468 | if ( $tasca == 'confirmacio' ) { |
| 469 | |
| 470 | $variables = {}; |
| 471 | $__vari = $r => { |
| 472 | $variables[ $r ] = $args[ $r ] otherwise $geto.variables[ $r ]; |
| 473 | }; |
| 474 | |
| 475 | $__vari( 'import_activacio' ); |
| 476 | $__vari( 'import_subscripcio' ); |
| 477 | $__vari( 'import_renovacio' ); |
| 478 | $__vari( 'taxa_conversio' ); |
| 479 | $__vari( 'derivacio_aFOG' ); |
| 480 | $__vari( '_AUT_0' ); |
| 481 | $__vari( '_AUT_B' ); |
| 482 | $__vari( '_AUT_C' ); |
| 483 | |
| 484 | $getons[ $args.id_geto ].variables = $variables; |
| 485 | |
| 486 | var[ 'Getons' ] = $getons; |
| 487 | response[ 'proposta' ] = $args.idprop; |
| 488 | response[ 'nova ref' ] = $proposta.ref; |
| 489 | response[ 'nou val' ] = $proposta.val; |
| 490 | } |
| 491 | if ( $tasca == 'proposta' ) { |
| 492 | $idprop = $__idprop( $args.proces ); |
| 493 | $propostes[ $idprop ] = |
| 494 | { |
| 495 | ref: $ref, |
| 496 | val: $val, |
| 497 | proposant: $adr__, |
| 498 | temps: timestamp, |
| 499 | }; |
| 500 | var[ 'Propostes' ] = $propostes; |
| 501 | var[ 'Ordinals' ] = $ordinals; |
| 502 | response[ 'proposta' ] = $idprop; |
| 503 | response[ 'nova ref' ] = $ref; |
| 504 | response[ 'nou val' ] = $val; |
| 505 | response[ 'data confirmació'] = $__data_confirmacio(); |
| 506 | } |
| 507 | response[ 'tasca' ] = $tasca; |
| 508 | }" |
| 509 | } |
| 510 | ] |
| 511 | }, |
| 512 | { |
| 513 | "if": "{ $args.proces == 'generacio_getons' }", |
| 514 | "init": "{ |
| 515 | if ( ! $_actuant_es_AUT_geto ) |
| 516 | { $__bota( 'No autoritzada' ); } |
| 517 | |
| 518 | if ( $idgeto != $generics._Estels ) |
| 519 | { $__bota( 'Cal aportar-hi estels' ); } |
| 520 | |
| 521 | |
| 522 | $geto_conv = $getons[ $__arg( 'id_geto' ) ]; |
| 523 | if ( ! $geto_conv OR $geto_conv.estat != 'actiu' ) |
| 524 | { $__bota( 'Getó inexistent o inactiu' ); } |
| 525 | |
| 526 | if ( $qt < $generics.Generacio_Minima ) |
| 527 | { $__bota( 'Cal aportar-hi si més no ' |
| 528 | || $generics.Generacio_Minima || ' estels' ); } |
| 529 | |
| 530 | }", |
| 531 | "messages": [ |
| 532 | { |
| 533 | "app": "payment", |
| 534 | "payload": { |
| 535 | "asset": "{ $args.id_geto }", |
| 536 | "outputs": [ |
| 537 | { |
| 538 | "address": "{ $getons.constants._FOG }", |
| 539 | "amount": "{ $qt * $getons.constants.factor_conversio }" |
| 540 | } |
| 541 | ] |
| 542 | } |
| 543 | } |
| 544 | ] |
| 545 | } |
| 546 | ] |
| 547 | } |
| 548 | } |
| 549 | ] |