tx · 48gAxAAvWgTpPDpZyLzaWA8ygiNnuh17zYVRQpdU77js

3MvebeGZYw4DzztAuqcdxyT22s6rB3yMNj7:  -0.01000000 Waves

2022.03.20 21:00 [1972591] smart account 3MvebeGZYw4DzztAuqcdxyT22s6rB3yMNj7 > SELF 0.00000000 Waves

{ "type": 13, "id": "48gAxAAvWgTpPDpZyLzaWA8ygiNnuh17zYVRQpdU77js", "fee": 1000000, "feeAssetId": null, "timestamp": 1647799052896, "version": 2, "chainId": 84, "sender": "3MvebeGZYw4DzztAuqcdxyT22s6rB3yMNj7", "senderPublicKey": "J283pC8bzRfJ3j1oxPrgDH8hjUVhFZS2CiRcPTmzQukz", "proofs": [ "6pMbUq7rj51EMYTkRvL4SH45cmXgw6gzyNXuCmEQknpowxZ1YrvsTiqHzo9XE23hQxvBQdoG4KHoDTu6YzaFE5s" ], "script": "base64:AAIFAAAAAAAAABAIAhIECgIIARIGCgQIAQEIAAAAHQAAAAAKZGVsYXlCbG9jawAAAAAAAAAAAQAAAAAKbWluUGF5bWVudAAAAAAAAAAACgAAAAAMbWluUGF5bWVudFVNAgAAABcgY2VudGVzaW1pIGRpIGJtc0NvaW4uIAAAAAARYWNjZXB0YWJsZUFzc2V0SWQBAAAAIOT6RnVqPSdR234gmuyFI/LTbOebUSkrj4D2gqClrfbKAAAAAAxtc2dQYWdhbWVudG8JAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAgRGV2aSBlZmZldHR1YXJlIHVuIHBhZ2FtZW50byBpbiAJAAJYAAAAAQUAAAARYWNjZXB0YWJsZUFzc2V0SWQCAAAACyBkaSBhbG1lbm8gCQABpAAAAAEFAAAACm1pblBheW1lbnQFAAAADG1pblBheW1lbnRVTQAAAAASZmllbGROYW1lUmlzdWx0YXRvAgAAAA1zZW1lX2VzdHJhdHRvAAAAAA1maWVsZE5hbWVTZWVkAgAAAARzZWVkAAAAABBmaWVsZE5hbWVTZWVkQjE2AgAAAAhzZWVkX2IxNgAAAAAZZmllbGROYW1lSGVpZ2h0RXh0cmFjdGlvbgIAAAARaGVpZ2h0X2V4dHJhY3Rpb24AAAAADWZpZWxkTmFtZUpzb24CAAAABGpzb24AAAAAFGZpZWxkTmFtZUNhcmRpbmFsaXRhAgAAAAtjYXJkaW5hbGl0YQAAAAAWZmllbGROYW1lRGF0YVJpY2hpZXN0YQIAAAAOZGF0YV9yaWNoaWVzdGEAAAAAE2ZpZWxkTmFtZUVzdHJhemlvbmkCAAAACmVzdHJhemlvbmkAAAAAEmZpZWxkTmFtZVJpY2hpZXN0YQIAAAAJcmljaGllc3RhAAAAABNmaWVsZE5hbWVFc2NsdXNpb25pAgAAAAplc2NsdXNpb25pAAAAABBmaWVsZE5hbWVDb3VudGVyAgAAAAdjb3VudGVyAAAAABJmaWVsZE5hbWVJZENvdW50ZXICAAAADGlkX3JpY2hpZXN0YQAAAAARZmllbGROYW1lUHJvdmlkZXICAAAACHByb3ZpZGVyAQAAAAtpc1BheW1lbnRPawAAAAEAAAABaQMJAAAAAAAAAgkAAZAAAAABCAUAAAABaQAAAAhw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bG9jY28gZGkgZXN0cmF6aW9uZSBub24gZXNpc3RlBAAAAAh2cmZWYWx1ZQQAAAAHJG1hdGNoMAgFAAAAD2Jsb2Njb0NhbmRpZGF0bwAAAAN2cmYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAXQFAAAAByRtYXRjaDAFAAAAAXQJAAACAAAAAQIAAAAhQmxvY2NvIG5vbiBpbiB2ZXJzaW9uZSA1IHJpdGVudGEuBAAAAARyYW5kCQAAywAAAAIJAADLAAAAAgkAAMsAAAACBQAAAARzZWVkCAUAAAAPYmxvY2NvQ2FuZGlkYXRvAAAAE2dlbmVyYXRpb25TaWduYXR1cmUIBQAAAA9ibG9jY29DYW5kaWRhdG8AAAASZ2VuZXJhdG9yUHVibGljS2V5CQEAAAAGZ2V0VnJmAAAAAQUAAAAPYmxvY2NvQ2FuZGlkYXRvBAAAAANzaGEJAAJcAAAAAQkAC1QAAAABCQALVAAAAAEFAAAABHJhbmQEAAAADnN0ckNhcmRpbmFsaXRhCQABpAAAAAEJAQAAAAhteUdldEludAAAAAIJAAEsAAAAAgUAAAAKa2V5UHJlZml4TgUAAAAUZmllbGROYW1lQ2FyZGluYWxpdGECAAAAG0Vycm9yZSBsZXR0dXJhIGNhcmRpbmFsaXTDoAQAAAAQc3RyRGF0YVJpY2hpZXN0YQkAAaQAAAABCQEAAAAIbXlHZXRJbnQAAAACCQABLAAAAAIFAAAACmtleVByZWZpeE4FAAAAFmZpZWxkTmFtZURhdGFSaWNoaWVzdGECAAAAHEVycm9yZSBsZXR0dXJhIERhdGFSaWNoaWVzdGEEAAAADXN0ckVzdHJhemlvbmkJAAGkAAAAAQkBAAAACG15R2V0SW50AAAAAgkAASwAAAACBQAAAAprZXlQcmVmaXhOBQAAABNmaWVsZE5hbWVFc3RyYXppb25pAgAAABlFcnJvcmUgbGV0dHVyYSBFc3RyYXppb25pBAAAAAplc2NsdXNpb25pBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAKa2V5UHJlZml4TgUAAAATZmllbGROYW1lRXNjbHVzaW9uaQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAF0BQAAAAckbWF0Y2gwBQAAAAF0CQAAAgAAAAECAAAAJkVycm9yZTogZWxlbmNvIGVzY2x1c2lvbmkgbm9uIHByZXNlbnRlBAAAAARqc29uCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAQAAAAhvcGVuSnNvbgAAAAIFAAAAEmZpZWxkTmFtZUlkQ291bnRlcgkAAaQAAAABBQAAAA9udW1lcm9SaWNoaWVzdGEJAQAAAAdhZGRKc29uAAAAAgUAAAAQZmllbGROYW1lQ291bnRlcgkAAaQAAAABBQAAAAxtYXhSaWNoaWVzdGEJAQAAAAdhZGRKc29uAAAAAgUAAAARZmllbGROYW1lUHJvdmlkZXIFAAAAD3N0ck93bmVyQWRkcmVzcwkBAAAAB2FkZEpzb24AAAACBQAAABJmaWVsZE5hbWVSaWNoaWVzdGEFAAAACXJpY2hpZXN0YQkBAAAAB2FkZEpzb24AAAACBQAAABRmaWVsZE5hbWVDYXJkaW5hbGl0YQUAAAAOc3RyQ2FyZGluYWxpdGEJAQAAAAdhZGRKc29uAAAAAgUAAAATZmllbGROYW1lRXN0cmF6aW9uaQUAAAANc3RyRXN0cmF6aW9uaQkBAAAAB2FkZEpzb24AAAACBQAAABNmaWVsZE5hbWVFc2NsdXNpb25pBQAAAAplc2NsdXNpb25pCQEAAAAHYWRkSnNvbgAAAAIFAAAAFmZpZWxkTmFtZURhdGFSaWNoaWVzdGEFAAAAEHN0ckRhdGFSaWNoaWVzdGEJAQAAAAdhZGRKc29uAAAAAgUAAAAQZmllbGROYW1lU2VlZEIxNgkAAlwAAAABBQAAAARzZWVkCQEAAAAHYWRkSnNvbgAAAAIFAAAAGWZpZWxkTmFtZUhlaWdodEV4dHJhY3Rpb24JAAGkAAAAAQUAAAAVaGVpZ2h0QmxvY2NvQ2FuZGlkYXRvCQEAAAAJY2xvc2VKc29uAAAAAgUAAAASZmllbGROYW1lUmlzdWx0YXRvBQAAAANzaGEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACBQAAAAprZXlQcmVmaXhOBQAAAA1maWVsZE5hbWVKc29uBQAAAARqc29uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADGtleVJpc3VsdGF0bwUAAAADc2hhBQAAAANuaWwJAAACAAAAAQIAAAAkRXJyb3JlOiBub24gZG92cmVzdGkgcGFzc2FyZSBkYSBxdcOsAQAAAAlyZWdpc3RyYTEAAAAFAAAACXJpY2hpZXN0YQAAAAtjYXJkaW5hbGl0YQAAAAplc3RyYXppb25pAAAACmVzY2x1c2lvbmkAAAABaQQAAAAJa2V5UHJlZml4CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwUAAAAJcmljaGllc3RhAgAAAAFfBAAAAAprZXlDb3VudGVyCQABLAAAAAIFAAAACWtleVByZWZpeAUAAAAQZmllbGROYW1lQ291bnRlcgQAAAAKblJpY2hpZXN0YQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAAprZXlDb3VudGVyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWMFAAAAByRtYXRjaDAJAABkAAAAAgUAAAABYwAAAAAAAAAAAQAAAAAAAAAAAQQAAAAKa2V5UHJlZml4TgkAASwAAAACCQABLAAAAAIFAAAACWtleVByZWZpeAkAAaQAAAABBQAAAApuUmljaGllc3RhAgAAAAFfBAAAAARzZWVkCQEAAAAKcmFuZG9taXplcgAAAAIFAAAAAWkFAAAACXJpY2hpZXN0YQQAAAAIY3VyckRhdGUJAQAAAAxnZXRUaW1lc3RhbXAAAAAABAAAABBoZWlnaHRFeHRyYWN0aW9uCQAAZAAAAAIFAAAABmhlaWdodAUAAAAKZGVsYXlCbG9jawkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAKa2V5Q291bnRlcgUAAAAKblJpY2hpZXN0YQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAprZXlQcmVmaXhOBQAAABlmaWVsZE5hbWVIZWlnaHRFeHRyYWN0aW9uBQAAABBoZWlnaHRFeHRyYWN0aW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACmtleVByZWZpeE4FAAAAFGZpZWxkTmFtZUNhcmRpbmFsaXRhBQAAAAtjYXJkaW5hbGl0YQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAprZXlQcmVmaXhOBQAAABNmaWVsZE5hbWVFc3RyYXppb25pBQAAAAplc3RyYXppb25pCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACmtleVByZWZpeE4FAAAAFmZpZWxkTmFtZURhdGFSaWNoaWVzdGEFAAAACGN1cnJEYXRlCQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAIJAAEsAAAAAgUAAAAKa2V5UHJlZml4TgUAAAANZmllbGROYW1lU2VlZAUAAAAEc2VlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAACmtleVByZWZpeE4FAAAAEGZpZWxkTmFtZVNlZWRCMTYJAAJcAAAAAQUAAAAEc2VlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAACmtleVByZWZpeE4FAAAAE2ZpZWxkTmFtZUVzY2x1c2lvbmkFAAAACmVzY2x1c2lvbmkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACBQAAAAprZXlQcmVmaXhOBQAAABJmaWVsZE5hbWVSaWNoaWVzdGEFAAAACXJpY2hpZXN0YQUAAAADbmlsAAAAAgAAAAFpAQAAAAZlc3RyYWkAAAACAAAACXJpY2hpZXN0YQAAAAZudW1lcm8DCQEAAAALaXNQYXltZW50T2sAAAABBQAAAAFpCQEAAAAHZXN0cmFpMQAAAAMFAAAACXJpY2hpZXN0YQUAAAAGbnVtZXJvBQAAAAFpCQAAAgAAAAEFAAAADG1zZ1BhZ2FtZW50bwAAAAFpAQAAAAhyZWdpc3RyYQAAAAQAAAAJcmljaGllc3RhAAAAC2NhcmRpbmFsaXRhAAAACmVzdHJhemlvbmkAAAAKZXNjbHVzaW9uaQMJAQAAAAtpc1BheW1lbnRPawAAAAEFAAAAAWkJAQAAAAlyZWdpc3RyYTEAAAAFBQAAAAlyaWNoaWVzdGEFAAAAC2NhcmRpbmFsaXRhBQAAAAplc3RyYXppb25pBQAAAAplc2NsdXNpb25pBQAAAAFpCQAAAgAAAAEFAAAADG1zZ1BhZ2FtZW50bwAAAABp1x/T", "height": 1972591, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BMuy4SZfAaEdxDzzQnzV9AwmtjxmLEmVAjrqQM4NmxMN Next: Hh1vb3odMaZVedcgwEbtGSozuc8MPeW5crjjgAsKsXHt Diff:
OldNewDifferences
55
66 let minPayment = 10
77
8+let minPaymentUM = " centesimi di bmsCoin. "
9+
810 let acceptableAssetId = base58'GQqJPRuXvxoyz22DeLqquGcx3cdbYpWi6QdqfQUMbLuf'
911
10-let msgPagamento = ((("Devi effettuare un pagamento in " + toBase58String(acceptableAssetId)) + " di almeno ") + toString(minPayment))
12+let msgPagamento = (((("Devi effettuare un pagamento in " + toBase58String(acceptableAssetId)) + " di almeno ") + toString(minPayment)) + minPaymentUM)
1113
1214 let fieldNameRisultato = "seme_estratto"
1315
103105 }
104106
105107
106-func randomizer (inv) = {
108+func randomizer (inv,richiesta) = {
107109 let currentBlock = getCurrentBlock()
108- let rand = (((((inv.transactionId + inv.callerPublicKey) + getVrf(currentBlock)) + currentBlock.generationSignature) + toBytes(currentBlock.timestamp)) + toBytes(currentBlock.height))
109- sha256_16Kb(sha256_16Kb(rand))
110+ let rand = (((((((((inv.transactionId + inv.callerPublicKey) + getVrf(currentBlock)) + currentBlock.generationSignature) + toBytes(currentBlock.timestamp)) + toBytes(currentBlock.height)) + toBytes(richiesta)) + lastBlock.generationSignature) + toBytes(lastBlock.timestamp)) + toBytes(lastBlock.height))
111+ if ((size(rand) > 1))
112+ then throw(((("Dimensione di " + toBase16String(rand)) + " vale ") + toString(size(rand))))
113+ else sha256_16Kb(sha256_16Kb(rand))
110114 }
111115
112116
182186 1
183187 }
184188 let keyPrefixN = ((keyPrefix + toString(nRichiesta)) + "_")
185- let seed = randomizer(i)
189+ let seed = randomizer(i, richiesta)
186190 let currDate = getTimestamp()
187191 let heightExtraction = (height + delayBlock)
188192 [IntegerEntry(keyCounter, nRichiesta), IntegerEntry((keyPrefixN + fieldNameHeightExtraction), heightExtraction), IntegerEntry((keyPrefixN + fieldNameCardinalita), cardinalita), IntegerEntry((keyPrefixN + fieldNameEstrazioni), estrazioni), IntegerEntry((keyPrefixN + fieldNameDataRichiesta), currDate), BinaryEntry((keyPrefixN + fieldNameSeed), seed), StringEntry((keyPrefixN + fieldNameSeedB16), toBase16String(seed)), StringEntry((keyPrefixN + fieldNameEsclusioni), esclusioni), StringEntry((keyPrefixN + fieldNameRichiesta), richiesta)]
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let delayBlock = 1
55
66 let minPayment = 10
77
8+let minPaymentUM = " centesimi di bmsCoin. "
9+
810 let acceptableAssetId = base58'GQqJPRuXvxoyz22DeLqquGcx3cdbYpWi6QdqfQUMbLuf'
911
10-let msgPagamento = ((("Devi effettuare un pagamento in " + toBase58String(acceptableAssetId)) + " di almeno ") + toString(minPayment))
12+let msgPagamento = (((("Devi effettuare un pagamento in " + toBase58String(acceptableAssetId)) + " di almeno ") + toString(minPayment)) + minPaymentUM)
1113
1214 let fieldNameRisultato = "seme_estratto"
1315
1416 let fieldNameSeed = "seed"
1517
1618 let fieldNameSeedB16 = "seed_b16"
1719
1820 let fieldNameHeightExtraction = "height_extraction"
1921
2022 let fieldNameJson = "json"
2123
2224 let fieldNameCardinalita = "cardinalita"
2325
2426 let fieldNameDataRichiesta = "data_richiesta"
2527
2628 let fieldNameEstrazioni = "estrazioni"
2729
2830 let fieldNameRichiesta = "richiesta"
2931
3032 let fieldNameEsclusioni = "esclusioni"
3133
3234 let fieldNameCounter = "counter"
3335
3436 let fieldNameIdCounter = "id_richiesta"
3537
3638 let fieldNameProvider = "provider"
3739
3840 func isPaymentOk (i) = if ((size(i.payments) == 0))
3941 then throw(msgPagamento)
4042 else {
4143 let p = i.payments[0]
4244 match p.assetId {
4345 case a: ByteVector =>
4446 if ((a == acceptableAssetId))
4547 then (p.amount >= (minPayment * 1000000))
4648 else false
4749 case _ =>
4850 false
4951 }
5052 }
5153
5254
5355 func openJson (key,value) = ((("{\"" + key) + "\": \"") + value)
5456
5557
5658 func addJson (key,value) = ((("\", \"" + key) + "\": \"") + value)
5759
5860
5961 func closeJson (key,value) = (((("\", \"" + key) + "\": \"") + value) + "\"}")
6062
6163
6264 func myGetInt (key,msg) = {
6365 let myInt = match getInteger(this, key) {
6466 case t: Int =>
6567 t
6668 case _ =>
6769 throw(msg)
6870 }
6971 myInt
7072 }
7173
7274
7375 func getCurrentBlock () = {
7476 let block = match blockInfoByHeight(height) {
7577 case x: BlockInfo =>
7678 x
7779 case _ =>
7880 throw("Alla ricerca del blocco corrente: Blocco non trovato!")
7981 }
8082 block
8183 }
8284
8385
8486 func getTimestamp () = {
8587 let block = match blockInfoByHeight(height) {
8688 case x: BlockInfo =>
8789 x.timestamp
8890 case _ =>
8991 throw("Alla ricerca del `timestamp`: Blocco non trovato!")
9092 }
9193 block
9294 }
9395
9496
9597 func getVrf (thisBlock) = {
9698 let vrf = match thisBlock.vrf {
9799 case t: ByteVector =>
98100 t
99101 case _ =>
100102 throw("Alla ricerca del `vrf`: Blocco non trovato o blocco non in versione 5 ritenta.")
101103 }
102104 vrf
103105 }
104106
105107
106-func randomizer (inv) = {
108+func randomizer (inv,richiesta) = {
107109 let currentBlock = getCurrentBlock()
108- let rand = (((((inv.transactionId + inv.callerPublicKey) + getVrf(currentBlock)) + currentBlock.generationSignature) + toBytes(currentBlock.timestamp)) + toBytes(currentBlock.height))
109- sha256_16Kb(sha256_16Kb(rand))
110+ let rand = (((((((((inv.transactionId + inv.callerPublicKey) + getVrf(currentBlock)) + currentBlock.generationSignature) + toBytes(currentBlock.timestamp)) + toBytes(currentBlock.height)) + toBytes(richiesta)) + lastBlock.generationSignature) + toBytes(lastBlock.timestamp)) + toBytes(lastBlock.height))
111+ if ((size(rand) > 1))
112+ then throw(((("Dimensione di " + toBase16String(rand)) + " vale ") + toString(size(rand))))
113+ else sha256_16Kb(sha256_16Kb(rand))
110114 }
111115
112116
113117 func estrai1 (richiesta,numero,i) = {
114118 let strOwnerAddress = toString(i.caller)
115119 let keyPrefix = (((strOwnerAddress + "_") + richiesta) + "_")
116120 let keyCounter = (keyPrefix + fieldNameCounter)
117121 let maxRichiesta = myGetInt(keyCounter, "La richiesta fatta non è stata ancora registrata")
118122 let numeroRichiesta = if ((0 >= numero))
119123 then maxRichiesta
120124 else if ((maxRichiesta >= numero))
121125 then numero
122126 else throw("Non esiste una richiesta con questo numero")
123127 let keyPrefixN = ((keyPrefix + toString(numeroRichiesta)) + "_")
124128 let keyRisultato = (keyPrefixN + fieldNameRisultato)
125129 let isEstratto = match getString(this, keyRisultato) {
126130 case t: String =>
127131 throw(((("Risultato già presente in blockchain: " + keyRisultato) + ": ") + t))
128132 case _ =>
129133 false
130134 }
131135 if (!(isEstratto))
132136 then {
133137 let heightBloccoCandidato = myGetInt((keyPrefixN + fieldNameHeightExtraction), "Errore generico su dati della richiesta")
134138 if ((heightBloccoCandidato > height))
135139 then throw(((("Devi aspettare il blocco " + toString(heightBloccoCandidato)) + ". siamo al blocco ") + toString(height)))
136140 else {
137141 let keySeme = (keyPrefixN + fieldNameSeed)
138142 let seed = match getBinary(this, keySeme) {
139143 case t: ByteVector =>
140144 t
141145 case _ =>
142146 throw("Seme non trovato. Qualcosa è andata storta!")
143147 }
144148 let bloccoCandidato = match blockInfoByHeight(heightBloccoCandidato) {
145149 case block: BlockInfo =>
146150 block
147151 case _ =>
148152 throw("Errore: Il blocco di estrazione non esiste")
149153 }
150154 let vrfValue = match bloccoCandidato.vrf {
151155 case t: ByteVector =>
152156 t
153157 case _ =>
154158 throw("Blocco non in versione 5 ritenta.")
155159 }
156160 let rand = (((seed + bloccoCandidato.generationSignature) + bloccoCandidato.generatorPublicKey) + getVrf(bloccoCandidato))
157161 let sha = toBase16String(sha256_16Kb(sha256_16Kb(rand)))
158162 let strCardinalita = toString(myGetInt((keyPrefixN + fieldNameCardinalita), "Errore lettura cardinalità"))
159163 let strDataRichiesta = toString(myGetInt((keyPrefixN + fieldNameDataRichiesta), "Errore lettura DataRichiesta"))
160164 let strEstrazioni = toString(myGetInt((keyPrefixN + fieldNameEstrazioni), "Errore lettura Estrazioni"))
161165 let esclusioni = match getString(this, (keyPrefixN + fieldNameEsclusioni)) {
162166 case t: String =>
163167 t
164168 case _ =>
165169 throw("Errore: elenco esclusioni non presente")
166170 }
167171 let json = ((((((((((openJson(fieldNameIdCounter, toString(numeroRichiesta)) + addJson(fieldNameCounter, toString(maxRichiesta))) + addJson(fieldNameProvider, strOwnerAddress)) + addJson(fieldNameRichiesta, richiesta)) + addJson(fieldNameCardinalita, strCardinalita)) + addJson(fieldNameEstrazioni, strEstrazioni)) + addJson(fieldNameEsclusioni, esclusioni)) + addJson(fieldNameDataRichiesta, strDataRichiesta)) + addJson(fieldNameSeedB16, toBase16String(seed))) + addJson(fieldNameHeightExtraction, toString(heightBloccoCandidato))) + closeJson(fieldNameRisultato, sha))
168172 [StringEntry((keyPrefixN + fieldNameJson), json), StringEntry(keyRisultato, sha)]
169173 }
170174 }
171175 else throw("Errore: non dovresti passare da quì")
172176 }
173177
174178
175179 func registra1 (richiesta,cardinalita,estrazioni,esclusioni,i) = {
176180 let keyPrefix = (((toString(i.caller) + "_") + richiesta) + "_")
177181 let keyCounter = (keyPrefix + fieldNameCounter)
178182 let nRichiesta = match getInteger(this, keyCounter) {
179183 case c: Int =>
180184 (c + 1)
181185 case _ =>
182186 1
183187 }
184188 let keyPrefixN = ((keyPrefix + toString(nRichiesta)) + "_")
185- let seed = randomizer(i)
189+ let seed = randomizer(i, richiesta)
186190 let currDate = getTimestamp()
187191 let heightExtraction = (height + delayBlock)
188192 [IntegerEntry(keyCounter, nRichiesta), IntegerEntry((keyPrefixN + fieldNameHeightExtraction), heightExtraction), IntegerEntry((keyPrefixN + fieldNameCardinalita), cardinalita), IntegerEntry((keyPrefixN + fieldNameEstrazioni), estrazioni), IntegerEntry((keyPrefixN + fieldNameDataRichiesta), currDate), BinaryEntry((keyPrefixN + fieldNameSeed), seed), StringEntry((keyPrefixN + fieldNameSeedB16), toBase16String(seed)), StringEntry((keyPrefixN + fieldNameEsclusioni), esclusioni), StringEntry((keyPrefixN + fieldNameRichiesta), richiesta)]
189193 }
190194
191195
192196 @Callable(i)
193197 func estrai (richiesta,numero) = if (isPaymentOk(i))
194198 then estrai1(richiesta, numero, i)
195199 else throw(msgPagamento)
196200
197201
198202
199203 @Callable(i)
200204 func registra (richiesta,cardinalita,estrazioni,esclusioni) = if (isPaymentOk(i))
201205 then registra1(richiesta, cardinalita, estrazioni, esclusioni, i)
202206 else throw(msgPagamento)
203207
204208

github/deemru/w8io/169f3d6 
35.60 ms