| 1 | [ |
| 2 | "autonomous agent", |
| 3 | { |
| 4 | "init": "{\r |
| 5 | $nom_AA = 'Validadores';\r |
| 6 | \r |
| 7 | |
| 8 | |
| 9 | $_Portal = trigger.address; |
| 10 | if ( $_Portal != trigger.address ) bounce ( 'Portal no reconegut' );\r |
| 11 | \r |
| 12 | $args = trigger.data;\r |
| 13 | $adr__ = trigger.initial_address;\r |
| 14 | $proces = $args.proces;\r |
| 15 | $dades = $args.dades otherwise {};\r |
| 16 | \r |
| 17 | $__dada = $refval => {\r |
| 18 | data_feed[[ oracles = $args._Registre, feed_name = $refval, ifnone = false ]]\r |
| 19 | };\r |
| 20 | \r |
| 21 | |
| 22 | $__ordinal = $rf => {\r |
| 23 | $ord = $__dada( 'ordinal_' || $rf );\r |
| 24 | $ord ? $ord + 1 : 1\r |
| 25 | };\r |
| 26 | \r |
| 27 | \r |
| 28 | |
| 29 | if ( $proces == 'nou_isox' OR $proces == 'esmena_estat_isox' ) {\r |
| 30 | $ord_isox = $__ordinal( 'isox' );\r |
| 31 | $_actuant_es_isox_000 = $__dada( 'isox_000' ) == $adr__ ;\r |
| 32 | $_estat_isox_actuant = $__dada( 'isox_' || $adr__ || '_estat' ) otherwise '';\r |
| 33 | $autoritzacio = $_actuant_es_isox_000 OR $_estat_isox_actuant == 'habilitat';\r |
| 34 | \r |
| 35 | if ( ! $autoritzacio ) bounce ( 'No autoritzada per a no isox' );\r |
| 36 | \r |
| 37 | $index_baules_isox = $__dada( 'isox_' || $adr__ || '_index_baules' ) otherwise 1;\r |
| 38 | $mitjana_index_baules = $__dada( 'mitjana_index_baules' ) otherwise 1;\r |
| 39 | $factor_topall_index_baules = $__dada( 'Factor_Topall_Index_Baules' ) otherwise 1.5;\r |
| 40 | if ( $index_baules_isox > $mitjana_index_baules * $factor_topall_index_baules )\r |
| 41 | bounce ( 'No autoritzada per massa baules' );\r |
| 42 | }\r |
| 43 | \r |
| 44 | if ( $proces == 'nou_isox' ) {\r |
| 45 | $estat_isox = $__dada( 'isox_' || $args.adr || '_estat') otherwise '';\r |
| 46 | if ( $estat_isox == 'habilitat' )\r |
| 47 | bounce ( 'Ja hi consta una isox habilitada amb aquesta adreça' );\r |
| 48 | \r |
| 49 | $_aspirant = $__dada( 'aspirant_' || $args.adr );\r |
| 50 | \r |
| 51 | if ( $_actuant_es_isox_000 ) {\r |
| 52 | $index_baules_nou_isox = $args.index_baules otherwise $mitjana_index_baules;\r |
| 53 | $dades_alta = [ 'isox_000', 'isox_000', 1, $index_baules_nou_isox ];\r |
| 54 | \r |
| 55 | } else {\r |
| 56 | $nombre_avals =\r |
| 57 | $__dada( 'isox_' || $adr__ || '_aval_2' ) ? 2 :\r |
| 58 | $__dada( 'isox_' || $adr__ || '_aval_1' ) ? 1 :\r |
| 59 | 0;\r |
| 60 | \r |
| 61 | if ( $nombre_avals == 2 ) bounce ( "Ja n'has avalat 2" );\r |
| 62 | \r |
| 63 | if ( !! $_aspirant ) {\r |
| 64 | $_proposant = $__dada( 'aspirant_' || $args.adr || '_proposant' );\r |
| 65 | \r |
| 66 | if ( $_proposant == $adr__ )\r |
| 67 | bounce ( "Els dos avals han de provenir d'adreces diferents" );\r |
| 68 | \r |
| 69 | $index_baules_proposant =\r |
| 70 | $__dada( 'isox_' || $_proposant || '_index_baules' ) otherwise 1;\r |
| 71 | $index_baules_nouisox = 1 + round( ( $index_baules_proposant + $index_baules_isox ) / 2 );\r |
| 72 | \r |
| 73 | $index_absolut = $index_baules_nouisox + ( $mitjana_index_baules * ( $ord_isox - 1 ) );\r |
| 74 | $nova_mitjana_index_baules = round( $index_absolut / $ord_isox );\r |
| 75 | \r |
| 76 | $dades[ 'isox_' || $adr__ || '_aval_' || ( $nombre_avals + 1 ) ] = $args.adr;\r |
| 77 | $dades_alta = [ $_proposant, $adr__, $index_baules_nouisox, $nova_mitjana_index_baules ];\r |
| 78 | \r |
| 79 | } else {\r |
| 80 | $dades[ 'aspirant_' || $args.adr ] = timestamp;\r |
| 81 | $dades[ 'aspirant_' || $args.adr || '_proposant' ] = $adr__;\r |
| 82 | $dades[ 'isox_' || $adr__ || '_aval_' || ( $nombre_avals + 1 ) ] = $args.adr;\r |
| 83 | }\r |
| 84 | }\r |
| 85 | \r |
| 86 | if ( !! $dades_alta[0] ) {\r |
| 87 | $dades[ 'ordinal_isox' ] = $ord_isox;\r |
| 88 | $dades[ 'isox_' || $ord_isox ] = $args.adr;\r |
| 89 | $dades[ 'isox_' || $args.adr || '_ordinal' ] = 'isox_' || $ord_isox;\r |
| 90 | $dades[ 'isox_' || $args.adr || '_proposant' ] = $dades_alta[0];\r |
| 91 | $dades[ 'isox_' || $args.adr || '_confirmant' ] = $dades_alta[1];\r |
| 92 | $dades[ 'isox_' || $args.adr || '_data' ] = timestamp;\r |
| 93 | $dades[ 'isox_' || $args.adr || '_estat' ] = 'habilitat';\r |
| 94 | $dades[ 'isox_' || $args.adr || '_index_baules' ] = $dades_alta[2];\r |
| 95 | $dades[ 'mitjana_index_baules' ] = $dades_alta[3];\r |
| 96 | }\r |
| 97 | }\r |
| 98 | \r |
| 99 | if ( $proces == 'esmena_estat_isox' ) {\r |
| 100 | \r |
| 101 | $estat_actual = $__dada( 'isox_' || $args.adr || '_estat' );\r |
| 102 | \r |
| 103 | if ( ! $estat_actual )\r |
| 104 | bounce ( 'No hi consta cap isox amb aquesta adreça' );\r |
| 105 | \r |
| 106 | if ( $estat_actual == $args.estat )\r |
| 107 | bounce ( "L'estat actual és el mateix que el proposat" );\r |
| 108 | \r |
| 109 | $index_baules = $__dada( 'isox_' || $args.adr || '_index_baules' );\r |
| 110 | \r |
| 111 | if ( $args.estat == 'habilitat' )\r |
| 112 | $nova_mitjana_index_baules =\r |
| 113 | round( ( ( $mitjana_index_baules * ( $ord_isox - 1 ) ) + $index_baules ) / $ord_isox );\r |
| 114 | else\r |
| 115 | $nova_mitjana_index_baules =\r |
| 116 | round( ( ( $mitjana_index_baules * ( $ord_isox - 1 ) ) - $index_baules ) / $ord_isox );\r |
| 117 | \r |
| 118 | $dades[ 'isox_' || $args.adr || '_estat' ] = $args.estat;\r |
| 119 | $dades[ 'mitjana_index_baules' ] = $nova_mitjana_index_baules;\r |
| 120 | }\r |
| 121 | \r |
| 122 | \r |
| 123 | |
| 124 | if ( $proces == 'nova_delegacio' OR $proces == 'final_delegacio' ) {\r |
| 125 | $ref_entitat = $__dada( 'Entitat_' || $args.ordinal );\r |
| 126 | $adr_entitat = $__dada( $ref_entitat || '_adr' ) otherwise '';\r |
| 127 | $semiref_delegada = $ref_entitat || '_delegada_';\r |
| 128 | \r |
| 129 | if ( ! $adr_entitat ) bounce ( 'Entitat inexistent');\r |
| 130 | \r |
| 131 | if ( $adr_entitat != $adr__ )\r |
| 132 | bounce ( "L'adreça actuant no és la de l'entitat" );\r |
| 133 | \r |
| 134 | $ords = [ "1", "2", "3", "4", "5" ];\r |
| 135 | \r |
| 136 | $ord_delegada_trobada = [];\r |
| 137 | $__troba_delegada = $o => {\r |
| 138 | $adr_delegada = $__dada( $semiref_delegada || $o ) otherwise '';\r |
| 139 | if (\r |
| 140 | ! $ord_delegada_trobada[0] \r |
| 141 | AND $adr_delegada == $args.adr\r |
| 142 | )\r |
| 143 | $ord_delegada_trobada[0] = $o;\r |
| 144 | };\r |
| 145 | \r |
| 146 | foreach( $ords, 5, $__troba_delegada );\r |
| 147 | \r |
| 148 | if ( $proces == 'nova_delegacio' ) {\r |
| 149 | if ( !! $ord_delegada_trobada[0] )\r |
| 150 | bounce ( 'Ja hi consta una delegada amb aquesta adreça' );\r |
| 151 | \r |
| 152 | $lloc_trobat = [];\r |
| 153 | $__troba_lloc_lliure = $o => {\r |
| 154 | if (\r |
| 155 | ! $__dada( $semiref_delegada || $o ) AND\r |
| 156 | ! $lloc_trobat[0]\r |
| 157 | ) {\r |
| 158 | $dades[ $semiref_delegada || $o ] = $args.adr;\r |
| 159 | $lloc_trobat[0] = $o;\r |
| 160 | }\r |
| 161 | };\r |
| 162 | \r |
| 163 | $troba_lloc_lliure = map( $ords, 5, $__troba_lloc_lliure );\r |
| 164 | \r |
| 165 | if ( ! $lloc_trobat[0] )\r |
| 166 | bounce( 'Ja hi consten 5 delegacions habilitades' );\r |
| 167 | }\r |
| 168 | \r |
| 169 | if ( $proces == 'final_delegacio' ) {\r |
| 170 | if ( ! $ord_delegada_trobada[0] )\r |
| 171 | bounce ( 'No hi consta cap delegada amb aquesta adreça' );\r |
| 172 | \r |
| 173 | $dades[ $semiref_delegada || $ord_delegada_trobada[0] ] = '';\r |
| 174 | }\r |
| 175 | }\r |
| 176 | \r |
| 177 | $registre = {};\r |
| 178 | $registre.dades = $dades;\r |
| 179 | }", |
| 180 | "messages": [ |
| 181 | { |
| 182 | "app": "data", |
| 183 | "payload": "{ $registre }" |
| 184 | }, |
| 185 | { |
| 186 | "app": "payment", |
| 187 | "payload": { |
| 188 | "asset": "base", |
| 189 | "outputs": [ |
| 190 | { |
| 191 | "address": "{ $args._Registre }", |
| 192 | "amount": "{ $__dada( 'Provisio' ) }" |
| 193 | } |
| 194 | ] |
| 195 | } |
| 196 | }, |
| 197 | { |
| 198 | "app": "state", |
| 199 | "state": "{\r |
| 200 | response[ 'procés' ] = $proces;\r |
| 201 | if ( $proces == 'nou_isox' ) {\r |
| 202 | if ( !! $_aspirant ) {\r |
| 203 | response[ 'Isox_' || $ord_isox ] = $args.adr;\r |
| 204 | response[ 'Confirmant' ] = $dades_alta[1];\r |
| 205 | response[ 'Estat' ] = 'habilitat';\r |
| 206 | response[ 'Index_baules' ] = $dades_alta[2];\r |
| 207 | } else {\r |
| 208 | response[ 'Proposant' ] = $dades_alta[0] otherwise $adr__;\r |
| 209 | response[ 'Mitjana índex baules' ] = $dades_alta[3];\r |
| 210 | }\r |
| 211 | if ( $adr__ != $__dada( 'isox_000' ) )\r |
| 212 | response[ 'Nombre avals de ' || $adr__ ] = ( $nombre_avals + 1 );\r |
| 213 | }\r |
| 214 | \r |
| 215 | if ( $proces == 'esmena_estat_isox' ) {\r |
| 216 | response[ 'Nou estat isox ' || $args.adr ] = $args.estat;\r |
| 217 | response[ 'Mitjana índex baules anterior' ] = $mitjana_index_baules;\r |
| 218 | response[ 'Mitjana índex baules actual' ] = $nova_mitjana_index_baules;\r |
| 219 | }\r |
| 220 | \r |
| 221 | if ( $proces == 'nova_delegacio' )\r |
| 222 | response[ 'Nova delegació' ] = \r |
| 223 | 'entitat_' || $adr__ || '_delegada_' || $ord_delegada_trobada[0];\r |
| 224 | \r |
| 225 | if ( $proces == 'final_delegacio' )\r |
| 226 | response[ 'Final delegació' ] =\r |
| 227 | 'entitat_' || $adr__ || '_delegada_' || $ord_delegada_trobada[0];\r |
| 228 | }" |
| 229 | } |
| 230 | ] |
| 231 | } |
| 232 | ] |