tx · wezhnd8qh2PMcg5vd38KEd2GSsp4ws3iqxzgWbci2YT

3MvebeGZYw4DzztAuqcdxyT22s6rB3yMNj7:  -0.01000000 Waves

2022.03.16 21:09 [1966850] smart account 3MvebeGZYw4DzztAuqcdxyT22s6rB3yMNj7 > SELF 0.00000000 Waves

{ "type": 13, "id": "wezhnd8qh2PMcg5vd38KEd2GSsp4ws3iqxzgWbci2YT", "fee": 1000000, "feeAssetId": null, "timestamp": 1647454049939, "version": 2, "chainId": 84, "sender": "3MvebeGZYw4DzztAuqcdxyT22s6rB3yMNj7", "senderPublicKey": "J283pC8bzRfJ3j1oxPrgDH8hjUVhFZS2CiRcPTmzQukz", "proofs": [ "4u4cBWbZQ9UpBbvGWTqVPtxDTAhMQEYLTSRu6Vykj2ibqfDEPWZLccxQkphWKfyqmhJado9sgctvd3qEnLRyu81k" ], "script": "base64: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LAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAFfBQAAAAlyaWNoaWVzdGECAAAAAV8EAAAACmtleUNvdW50ZXIJAAEsAAAAAgUAAAAJa2V5UHJlZml4BQAAABBmaWVsZE5hbWVDb3VudGVyBAAAAAxtYXhSaWNoaWVzdGEJAQAAAAhteUdldEludAAAAAIFAAAACmtleUNvdW50ZXICAAAAMUxhIHJpY2hpZXN0YSBmYXR0YSBub24gw6ggc3RhdGEgYW5jb3JhIHJlZ2lzdHJhdGEEAAAAD251bWVyb1JpY2hpZXN0YQMJAABnAAAAAgAAAAAAAAAAAAUAAAAGbnVtZXJvBQAAAAxtYXhSaWNoaWVzdGEDCQAAZwAAAAIFAAAADG1heFJpY2hpZXN0YQUAAAAGbnVtZXJvBQAAAAZudW1lcm8JAAACAAAAAQIAAAAqTm9uIGVzaXN0ZSB1bmEgcmljaGllc3RhIGNvbiBxdWVzdG8gbnVtZXJvBAAAAAprZXlQcmVmaXhOCQABLAAAAAIJAAEsAAAAAgUAAAAJa2V5UHJlZml4CQABpAAAAAEFAAAAD251bWVyb1JpY2hpZXN0YQIAAAABXwQAAAAMa2V5UmlzdWx0YXRvCQABLAAAAAIFAAAACmtleVByZWZpeE4FAAAAEmZpZWxkTmFtZVJpc3VsdGF0bwQAAAAKaXNFc3RyYXR0bwQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAAxrZXlSaXN1bHRhdG8DCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABdAUAAAAHJG1hdGNoMAkAAAIAAAABCQABLAAAAAICAAAAJ1Jpc3VsdGF0byBnacOgIHByZXNlbnRlIGluIGJsb2NrY2hhaW46IAUAAAAMa2V5UmlzdWx0YXRvBwMJAQAAAAEhAAAAAQUAAAAKaXNFc3RyYXR0bwQAAAAVaGVpZ2h0QmxvY2NvQ2FuZGlkYXRvCQEAAAAIbXlHZXRJbnQAAAACCQABLAAAAAIFAAAACmtleVByZWZpeE4FAAAAGWZpZWxkTmFtZUhlaWdodEV4dHJhY3Rpb24CAAAAJ0Vycm9yZSBnZW5lcmljbyBzdSBkYXRpIGRlbGxhIHJpY2hpZXN0YQMJAABmAAAAAgUAAAAVaGVpZ2h0QmxvY2NvQ2FuZGlkYXRvBQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACAgAAABlEZXZpIGFzcGV0dGFyZSBpbCBibG9jY28gCQABpAAAAAEFAAAAFWhlaWdodEJsb2Njb0NhbmRpZGF0bwQAAAAHa2V5U2VtZQkAASwAAAACBQAAAAprZXlQcmVmaXhOBQAAAA1maWVsZE5hbWVTZWVkBAAAAARzZWVkBAAAAAckbWF0Y2gwCQAEHAAAAAIFAAAABHRoaXMFAAAAB2tleVNlbWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAXQFAAAAByRtYXRjaDAFAAAAAXQJAAACAAAAAQIAAAAsU2VtZSBub24gdHJvdmF0by4gUXVhbGNvc2Egw6ggYW5kYXRhIHN0b3J0YSEEAAAAD2Jsb2Njb0NhbmRpZGF0bwQAAAAHJG1hdGNoMAkAA+0AAAABBQAAABVoZWlnaHRCbG9jY29DYW5kaWRhdG8DCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACUJsb2NrSW5mbwQAAAAFYmxvY2sFAAAAByRtYXRjaDAFAAAABWJsb2NrCQAAAgAAAAECAAAAKkVycm9yZTogSWwgYmxvY2NvIGRpIGVzdHJhemlvbmUgbm9uIGVzaXN0ZQQAAAAIdnJmVmFsdWUEAAAAByRtYXRjaDAIBQAAAA9ibG9jY29DYW5kaWRhdG8AAAADdnJmAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAF0BQAAAAckbWF0Y2gwBQAAAAF0CQAAAgAAAAECAAAAIUJsb2NjbyBub24gaW4gdmVyc2lvbmUgNSByaXRlbnRhLgQAAAAEcmFuZAkAAMsAAAACCQAAywAAAAIJAADLAAAAAgUAAAAEc2VlZAgFAAAAD2Jsb2Njb0NhbmRpZGF0bwAAABNnZW5lcmF0aW9uU2lnbmF0dXJlCAUAAAAPYmxvY2NvQ2FuZGlkYXRvAAAAEmdlbmVyYXRvclB1YmxpY0tleQUAAAAIdnJmVmFsdWUEAAAAA3NoYQkAAlwAAAABCQALVAAAAAEJAAtUAAAAAQUAAAAEcmFuZAQAAAAOc3RyQ2FyZGluYWxpdGEJAAGkAAAAAQkBAAAACG15R2V0SW50AAAAAgkAASwAAAACBQAAAAprZXlQcmVmaXhOBQAAABRmaWVsZE5hbWVDYXJkaW5hbGl0YQIAAAAbRXJyb3JlIGxldHR1cmEgY2FyZGluYWxpdMOgBAAAABBzdHJEYXRhUmljaGllc3RhCQABpAAAAAEJAQAAAAhteUdldEludAAAAAIJAAEsAAAAAgUAAAAKa2V5UHJlZml4TgUAAAAWZmllbGROYW1lRGF0YVJpY2hpZXN0YQIAAAAcRXJyb3JlIGxldHR1cmEgRGF0YVJpY2hpZXN0YQQAAAANc3RyRXN0cmF6aW9uaQkAAaQAAAABCQEAAAAIbXlHZXRJbnQAAAACCQABLAAAAAIFAAAACmtleVByZWZpeE4FAAAAE2ZpZWxkTmFtZUVzdHJhemlvbmkCAAAAGUVycm9yZSBsZXR0dXJhIEVzdHJhemlvbmkEAAAABGpzb24JAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQEAAAAIb3Blbkpzb24AAAACBQAAABJmaWVsZE5hbWVJZENvdW50ZXIJAAGkAAAAAQUAAAAPbnVtZXJvUmljaGllc3RhCQEAAAAHYWRkSnNvbgAAAAIFAAAAEGZpZWxkTmFtZUNvdW50ZXIJAAGkAAAAAQUAAAAMbWF4UmljaGllc3RhCQEAAAAHYWRkSnNvbgAAAAIFAAAAEmZpZWxkTmFtZVJpY2hpZXN0YQUAAAAJcmljaGllc3RhCQEAAAAHYWRkSnNvbgAAAAIFAAAAFGZpZWxkTmFtZUNhcmRpbmFsaXRhBQAAAA5zdHJDYXJkaW5hbGl0YQkBAAAAB2FkZEpzb24AAAACBQAAABNmaWVsZE5hbWVFc3RyYXppb25pBQAAAA1zdHJFc3RyYXppb25pCQEAAAAHYWRkSnNvbgAAAAIFAAAAFmZpZWxkTmFtZURhdGFSaWNoaWVzdGEFAAAAEHN0ckRhdGFSaWNoaWVzdGEJAQAAAAdhZGRKc29uAAAAAgUAAAAQZmllbGROYW1lU2VlZEIxNgkAAlwAAAABBQAAAARzZWVkCQEAAAAHYWRkSnNvbgAAAAIFAAAAGWZpZWxkTmFtZUhlaWdodEV4dHJhY3Rpb24JAAGkAAAAAQUAAAAVaGVpZ2h0QmxvY2NvQ2FuZGlkYXRvCQEAAAAJY2xvc2VKc29uAAAAAgUAAAASZmllbGROYW1lUmlzdWx0YXRvBQAAAANzaGEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACBQAAAAprZXlQcmVmaXhOBQAAAA1maWVsZE5hbWVKc29uBQAAAARqc29uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADGtleVJpc3VsdGF0bwUAAAADc2hhBQAAAANuaWwJAAACAAAAAQIAAAAkRXJyb3JlOiBub24gZG92cmVzdGkgcGFzc2FyZSBkYSBxdcOsAAAAAWkBAAAACHJlZ2lzdHJhAAAAAwAAAAlyaWNoaWVzdGEAAAALY2FyZGluYWxpdGEAAAAKZXN0cmF6aW9uaQQAAAAJa2V5UHJlZml4CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwUAAAAJcmljaGllc3RhAgAAAAFfBAAAAAprZXlDb3VudGVyCQABLAAAAAIFAAAACWtleVByZWZpeAUAAAAQZmllbGROYW1lQ291bnRlcgQAAAAKblJpY2hpZXN0YQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAAprZXlDb3VudGVyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWMFAAAAByRtYXRjaDAJAABkAAAAAgUAAAABYwAAAAAAAAAAAQAAAAAAAAAAAQQAAAAKa2V5UHJlZml4TgkAASwAAAACCQABLAAAAAIFAAAACWtleVByZWZpeAkAAaQAAAABBQAAAApuUmljaGllc3RhAgAAAAFfBAAAAARzZWVkCQEAAAAKcmFuZG9taXplcgAAAAEFAAAAAWkEAAAACGN1cnJEYXRlCQEAAAAMZ2V0VGltZXN0YW1wAAAAAAQAAAAQaGVpZ2h0RXh0cmFjdGlvbgkAAGQAAAACBQAAAAZoZWlnaHQFAAAACmRlbGF5QmxvY2sJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACmtleUNvdW50ZXIFAAAACm5SaWNoaWVzdGEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACBQAAAAprZXlQcmVmaXhOBQAAABBmaWVsZE5hbWVTZWVkQjE2CQACXAAAAAEFAAAABHNlZWQJAARMAAAAAgkBAAAAC0JpbmFyeUVudHJ5AAAAAgkAASwAAAACBQAAAAprZXlQcmVmaXhOBQAAAA1maWVsZE5hbWVTZWVkBQAAAARzZWVkCQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAICAAAACHRlc3RfdnJmCQEAAAAGZ2V0VnJmAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAprZXlQcmVmaXhOBQAAABlmaWVsZE5hbWVIZWlnaHRFeHRyYWN0aW9uBQAAABBoZWlnaHRFeHRyYWN0aW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACmtleVByZWZpeE4FAAAAFGZpZWxkTmFtZUNhcmRpbmFsaXRhBQAAAAtjYXJkaW5hbGl0YQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAprZXlQcmVmaXhOBQAAABNmaWVsZE5hbWVFc3RyYXppb25pBQAAAAplc3RyYXppb25pCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACmtleVByZWZpeE4FAAAAFmZpZWxkTmFtZURhdGFSaWNoaWVzdGEFAAAACGN1cnJEYXRlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgUAAAAKa2V5UHJlZml4TgUAAAASZmllbGROYW1lUmljaGllc3RhBQAAAAlyaWNoaWVzdGEFAAAAA25pbAAAAACu+YzZ", "height": 1966850, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CAWs2EsgwsSVsZh5gxnPbvYZgWF2fkzT418sB3b1aXd3 Next: 44CX2X8qrFLSWUnJfyuia4Zeju9FynME48hBGLXkxb6s Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let delayBlock = 1
55
6-let endKeyRisultato = "_seme_estratto"
6+let fieldNameRisultato = "seme_estratto"
77
8-let endKeySeed = "_seed"
8+let fieldNameSeed = "seed"
99
10-let endKeyHeightExtraction = "_height_extraction"
10+let fieldNameSeedB16 = "seed_b16"
1111
12-let endKeyJson = "_json"
12+let fieldNameHeightExtraction = "height_extraction"
1313
14-let endKeyCardinalita = "_cardinalita"
14+let fieldNameJson = "json"
1515
16-let endKeyDataRichiesta = "_data_richiesta"
16+let fieldNameCardinalita = "cardinalita"
17+
18+let fieldNameDataRichiesta = "data_richiesta"
19+
20+let fieldNameEstrazioni = "estrazioni"
21+
22+let fieldNameRichiesta = "richiesta"
23+
24+let fieldNameCounter = "counter"
25+
26+let fieldNameIdCounter = "id_richiesta"
1727
1828 func openJson (key,value) = ((("{\"" + key) + "\":\"") + value)
1929
4050 case x: BlockInfo =>
4151 x.timestamp
4252 case _ =>
43- throw("Blocco non trovato!")
53+ throw("Alla ricerca del `timestamp`: Blocco non trovato!")
54+ }
55+ block
56+ }
57+
58+
59+func getVrf () = {
60+ let block = match blockInfoByHeight(height) {
61+ case x: BlockInfo =>
62+ match x.vrf {
63+ case t: ByteVector =>
64+ t
65+ case _ =>
66+ throw("Alla ricerca del `vrf`: Blocco non trovato!")
67+ }
68+ case _ =>
69+ throw("Alla ricerca del `vrf`: Blocco non trovato!")
4470 }
4571 block
4672 }
4773
4874
4975 func randomizer (inv) = {
50- let rand = ((((inv.transactionId + inv.callerPublicKey) + lastBlock.generationSignature) + toBytes(lastBlock.timestamp)) + toBytes(lastBlock.height))
51- sha256_16Kb(rand)
76+ let rand = (((((getVrf() + inv.transactionId) + inv.callerPublicKey) + lastBlock.generationSignature) + toBytes(lastBlock.timestamp)) + toBytes(lastBlock.height))
77+ sha256_16Kb(sha256_16Kb(rand))
5278 }
5379
5480
5581 @Callable(i)
5682 func estrai (richiesta,numero) = {
5783 let keyPrefix = (((toString(i.caller) + "_") + richiesta) + "_")
58- let keyCounter = (keyPrefix + "counter")
84+ let keyCounter = (keyPrefix + fieldNameCounter)
5985 let maxRichiesta = myGetInt(keyCounter, "La richiesta fatta non è stata ancora registrata")
6086 let numeroRichiesta = if ((0 >= numero))
6187 then maxRichiesta
6288 else if ((maxRichiesta >= numero))
6389 then numero
6490 else throw("Non esiste una richiesta con questo numero")
65- let keyPrefixN = (keyPrefix + toString(numeroRichiesta))
66- let keyRisultato = (keyPrefixN + endKeyRisultato)
91+ let keyPrefixN = ((keyPrefix + toString(numeroRichiesta)) + "_")
92+ let keyRisultato = (keyPrefixN + fieldNameRisultato)
6793 let isEstratto = match getString(this, keyRisultato) {
6894 case t: String =>
6995 throw(("Risultato già presente in blockchain: " + keyRisultato))
7298 }
7399 if (!(isEstratto))
74100 then {
75- let heigthBloccoCandidato = myGetInt((keyPrefixN + endKeyHeightExtraction), "Errore generico su dati della richiesta")
76- if ((heigthBloccoCandidato > height))
77- then throw("Devi aspettare il blocco ")
101+ let heightBloccoCandidato = myGetInt((keyPrefixN + fieldNameHeightExtraction), "Errore generico su dati della richiesta")
102+ if ((heightBloccoCandidato > height))
103+ then throw(("Devi aspettare il blocco " + toString(heightBloccoCandidato)))
78104 else {
79- let keySeme = (keyPrefixN + endKeySeed)
105+ let keySeme = (keyPrefixN + fieldNameSeed)
80106 let seed = match getBinary(this, keySeme) {
81107 case t: ByteVector =>
82108 t
83109 case _ =>
84- throw("")
110+ throw("Seme non trovato. Qualcosa è andata storta!")
85111 }
86- let bloccoCandidato = match blockInfoByHeight(heigthBloccoCandidato) {
112+ let bloccoCandidato = match blockInfoByHeight(heightBloccoCandidato) {
87113 case block: BlockInfo =>
88114 block
89115 case _ =>
97123 }
98124 let rand = (((seed + bloccoCandidato.generationSignature) + bloccoCandidato.generatorPublicKey) + vrfValue)
99125 let sha = toBase16String(sha256_16Kb(sha256_16Kb(rand)))
100- let keyCardinalita = (keyPrefixN + endKeyCardinalita)
101- let strCardinalita = match getInteger(this, keyCardinalita) {
102- case t: Int =>
103- toString(t)
104- case _ =>
105- throw("Errore lettura cardinalità")
106- }
107- let strDataRichiesta = match getInteger(this, (keyPrefixN + endKeyDataRichiesta)) {
108- case t: Int =>
109- toString(t)
110- case _ =>
111- throw("Errore lettura DataRichiesta")
112- }
113- let json = (((((((openJson("n_richiesta", toString(numero)) + addJson("counter", strCardinalita)) + addJson("height_extraction", toString(heigthBloccoCandidato))) + addJson("data_richiesta", strDataRichiesta)) + addJson("cardinalita", strCardinalita)) + addJson("estrazioni", strCardinalita)) + addJson("seme_estratto", strCardinalita)) + closeJson("richiesta", richiesta))
114-[StringEntry((keyPrefixN + endKeyJson), json), StringEntry(keyRisultato, sha)]
126+ let strCardinalita = toString(myGetInt((keyPrefixN + fieldNameCardinalita), "Errore lettura cardinalità"))
127+ let strDataRichiesta = toString(myGetInt((keyPrefixN + fieldNameDataRichiesta), "Errore lettura DataRichiesta"))
128+ let strEstrazioni = toString(myGetInt((keyPrefixN + fieldNameEstrazioni), "Errore lettura Estrazioni"))
129+ let json = ((((((((openJson(fieldNameIdCounter, toString(numeroRichiesta)) + addJson(fieldNameCounter, toString(maxRichiesta))) + addJson(fieldNameRichiesta, richiesta)) + addJson(fieldNameCardinalita, strCardinalita)) + addJson(fieldNameEstrazioni, strEstrazioni)) + addJson(fieldNameDataRichiesta, strDataRichiesta)) + addJson(fieldNameSeedB16, toBase16String(seed))) + addJson(fieldNameHeightExtraction, toString(heightBloccoCandidato))) + closeJson(fieldNameRisultato, sha))
130+[StringEntry((keyPrefixN + fieldNameJson), json), StringEntry(keyRisultato, sha)]
115131 }
116132 }
117133 else throw("Errore: non dovresti passare da quì")
122138 @Callable(i)
123139 func registra (richiesta,cardinalita,estrazioni) = {
124140 let keyPrefix = (((toString(i.caller) + "_") + richiesta) + "_")
125- let keyCounter = (keyPrefix + "counter")
141+ let keyCounter = (keyPrefix + fieldNameCounter)
126142 let nRichiesta = match getInteger(this, keyCounter) {
127143 case c: Int =>
128144 (c + 1)
129145 case _ =>
130146 1
131147 }
132- let keyPrefixN = (keyPrefix + toString(nRichiesta))
148+ let keyPrefixN = ((keyPrefix + toString(nRichiesta)) + "_")
133149 let seed = randomizer(i)
134150 let currDate = getTimestamp()
135151 let heightExtraction = (height + delayBlock)
136-[IntegerEntry(keyCounter, nRichiesta), BinaryEntry((keyPrefixN + endKeySeed), seed), IntegerEntry((keyPrefixN + endKeyHeightExtraction), heightExtraction), IntegerEntry((keyPrefixN + "_cardinalita"), cardinalita), IntegerEntry((keyPrefixN + "_estrazioni"), estrazioni), IntegerEntry((keyPrefixN + endKeyDataRichiesta), currDate), StringEntry((keyPrefixN + "_richiesta"), richiesta)]
152+[IntegerEntry(keyCounter, nRichiesta), StringEntry((keyPrefixN + fieldNameSeedB16), toBase16String(seed)), BinaryEntry((keyPrefixN + fieldNameSeed), seed), BinaryEntry("test_vrf", getVrf()), IntegerEntry((keyPrefixN + fieldNameHeightExtraction), heightExtraction), IntegerEntry((keyPrefixN + fieldNameCardinalita), cardinalita), IntegerEntry((keyPrefixN + fieldNameEstrazioni), estrazioni), IntegerEntry((keyPrefixN + fieldNameDataRichiesta), currDate), StringEntry((keyPrefixN + fieldNameRichiesta), richiesta)]
137153 }
138154
139155
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let delayBlock = 1
55
6-let endKeyRisultato = "_seme_estratto"
6+let fieldNameRisultato = "seme_estratto"
77
8-let endKeySeed = "_seed"
8+let fieldNameSeed = "seed"
99
10-let endKeyHeightExtraction = "_height_extraction"
10+let fieldNameSeedB16 = "seed_b16"
1111
12-let endKeyJson = "_json"
12+let fieldNameHeightExtraction = "height_extraction"
1313
14-let endKeyCardinalita = "_cardinalita"
14+let fieldNameJson = "json"
1515
16-let endKeyDataRichiesta = "_data_richiesta"
16+let fieldNameCardinalita = "cardinalita"
17+
18+let fieldNameDataRichiesta = "data_richiesta"
19+
20+let fieldNameEstrazioni = "estrazioni"
21+
22+let fieldNameRichiesta = "richiesta"
23+
24+let fieldNameCounter = "counter"
25+
26+let fieldNameIdCounter = "id_richiesta"
1727
1828 func openJson (key,value) = ((("{\"" + key) + "\":\"") + value)
1929
2030
2131 func addJson (key,value) = ((("\", \"" + key) + "\":\" ") + value)
2232
2333
2434 func closeJson (key,value) = (((("\", \"" + key) + "\":\" ") + value) + "\"}")
2535
2636
2737 func myGetInt (key,msg) = {
2838 let myInt = match getInteger(this, key) {
2939 case t: Int =>
3040 t
3141 case _ =>
3242 throw(msg)
3343 }
3444 myInt
3545 }
3646
3747
3848 func getTimestamp () = {
3949 let block = match blockInfoByHeight(height) {
4050 case x: BlockInfo =>
4151 x.timestamp
4252 case _ =>
43- throw("Blocco non trovato!")
53+ throw("Alla ricerca del `timestamp`: Blocco non trovato!")
54+ }
55+ block
56+ }
57+
58+
59+func getVrf () = {
60+ let block = match blockInfoByHeight(height) {
61+ case x: BlockInfo =>
62+ match x.vrf {
63+ case t: ByteVector =>
64+ t
65+ case _ =>
66+ throw("Alla ricerca del `vrf`: Blocco non trovato!")
67+ }
68+ case _ =>
69+ throw("Alla ricerca del `vrf`: Blocco non trovato!")
4470 }
4571 block
4672 }
4773
4874
4975 func randomizer (inv) = {
50- let rand = ((((inv.transactionId + inv.callerPublicKey) + lastBlock.generationSignature) + toBytes(lastBlock.timestamp)) + toBytes(lastBlock.height))
51- sha256_16Kb(rand)
76+ let rand = (((((getVrf() + inv.transactionId) + inv.callerPublicKey) + lastBlock.generationSignature) + toBytes(lastBlock.timestamp)) + toBytes(lastBlock.height))
77+ sha256_16Kb(sha256_16Kb(rand))
5278 }
5379
5480
5581 @Callable(i)
5682 func estrai (richiesta,numero) = {
5783 let keyPrefix = (((toString(i.caller) + "_") + richiesta) + "_")
58- let keyCounter = (keyPrefix + "counter")
84+ let keyCounter = (keyPrefix + fieldNameCounter)
5985 let maxRichiesta = myGetInt(keyCounter, "La richiesta fatta non è stata ancora registrata")
6086 let numeroRichiesta = if ((0 >= numero))
6187 then maxRichiesta
6288 else if ((maxRichiesta >= numero))
6389 then numero
6490 else throw("Non esiste una richiesta con questo numero")
65- let keyPrefixN = (keyPrefix + toString(numeroRichiesta))
66- let keyRisultato = (keyPrefixN + endKeyRisultato)
91+ let keyPrefixN = ((keyPrefix + toString(numeroRichiesta)) + "_")
92+ let keyRisultato = (keyPrefixN + fieldNameRisultato)
6793 let isEstratto = match getString(this, keyRisultato) {
6894 case t: String =>
6995 throw(("Risultato già presente in blockchain: " + keyRisultato))
7096 case _ =>
7197 false
7298 }
7399 if (!(isEstratto))
74100 then {
75- let heigthBloccoCandidato = myGetInt((keyPrefixN + endKeyHeightExtraction), "Errore generico su dati della richiesta")
76- if ((heigthBloccoCandidato > height))
77- then throw("Devi aspettare il blocco ")
101+ let heightBloccoCandidato = myGetInt((keyPrefixN + fieldNameHeightExtraction), "Errore generico su dati della richiesta")
102+ if ((heightBloccoCandidato > height))
103+ then throw(("Devi aspettare il blocco " + toString(heightBloccoCandidato)))
78104 else {
79- let keySeme = (keyPrefixN + endKeySeed)
105+ let keySeme = (keyPrefixN + fieldNameSeed)
80106 let seed = match getBinary(this, keySeme) {
81107 case t: ByteVector =>
82108 t
83109 case _ =>
84- throw("")
110+ throw("Seme non trovato. Qualcosa è andata storta!")
85111 }
86- let bloccoCandidato = match blockInfoByHeight(heigthBloccoCandidato) {
112+ let bloccoCandidato = match blockInfoByHeight(heightBloccoCandidato) {
87113 case block: BlockInfo =>
88114 block
89115 case _ =>
90116 throw("Errore: Il blocco di estrazione non esiste")
91117 }
92118 let vrfValue = match bloccoCandidato.vrf {
93119 case t: ByteVector =>
94120 t
95121 case _ =>
96122 throw("Blocco non in versione 5 ritenta.")
97123 }
98124 let rand = (((seed + bloccoCandidato.generationSignature) + bloccoCandidato.generatorPublicKey) + vrfValue)
99125 let sha = toBase16String(sha256_16Kb(sha256_16Kb(rand)))
100- let keyCardinalita = (keyPrefixN + endKeyCardinalita)
101- let strCardinalita = match getInteger(this, keyCardinalita) {
102- case t: Int =>
103- toString(t)
104- case _ =>
105- throw("Errore lettura cardinalità")
106- }
107- let strDataRichiesta = match getInteger(this, (keyPrefixN + endKeyDataRichiesta)) {
108- case t: Int =>
109- toString(t)
110- case _ =>
111- throw("Errore lettura DataRichiesta")
112- }
113- let json = (((((((openJson("n_richiesta", toString(numero)) + addJson("counter", strCardinalita)) + addJson("height_extraction", toString(heigthBloccoCandidato))) + addJson("data_richiesta", strDataRichiesta)) + addJson("cardinalita", strCardinalita)) + addJson("estrazioni", strCardinalita)) + addJson("seme_estratto", strCardinalita)) + closeJson("richiesta", richiesta))
114-[StringEntry((keyPrefixN + endKeyJson), json), StringEntry(keyRisultato, sha)]
126+ let strCardinalita = toString(myGetInt((keyPrefixN + fieldNameCardinalita), "Errore lettura cardinalità"))
127+ let strDataRichiesta = toString(myGetInt((keyPrefixN + fieldNameDataRichiesta), "Errore lettura DataRichiesta"))
128+ let strEstrazioni = toString(myGetInt((keyPrefixN + fieldNameEstrazioni), "Errore lettura Estrazioni"))
129+ let json = ((((((((openJson(fieldNameIdCounter, toString(numeroRichiesta)) + addJson(fieldNameCounter, toString(maxRichiesta))) + addJson(fieldNameRichiesta, richiesta)) + addJson(fieldNameCardinalita, strCardinalita)) + addJson(fieldNameEstrazioni, strEstrazioni)) + addJson(fieldNameDataRichiesta, strDataRichiesta)) + addJson(fieldNameSeedB16, toBase16String(seed))) + addJson(fieldNameHeightExtraction, toString(heightBloccoCandidato))) + closeJson(fieldNameRisultato, sha))
130+[StringEntry((keyPrefixN + fieldNameJson), json), StringEntry(keyRisultato, sha)]
115131 }
116132 }
117133 else throw("Errore: non dovresti passare da quì")
118134 }
119135
120136
121137
122138 @Callable(i)
123139 func registra (richiesta,cardinalita,estrazioni) = {
124140 let keyPrefix = (((toString(i.caller) + "_") + richiesta) + "_")
125- let keyCounter = (keyPrefix + "counter")
141+ let keyCounter = (keyPrefix + fieldNameCounter)
126142 let nRichiesta = match getInteger(this, keyCounter) {
127143 case c: Int =>
128144 (c + 1)
129145 case _ =>
130146 1
131147 }
132- let keyPrefixN = (keyPrefix + toString(nRichiesta))
148+ let keyPrefixN = ((keyPrefix + toString(nRichiesta)) + "_")
133149 let seed = randomizer(i)
134150 let currDate = getTimestamp()
135151 let heightExtraction = (height + delayBlock)
136-[IntegerEntry(keyCounter, nRichiesta), BinaryEntry((keyPrefixN + endKeySeed), seed), IntegerEntry((keyPrefixN + endKeyHeightExtraction), heightExtraction), IntegerEntry((keyPrefixN + "_cardinalita"), cardinalita), IntegerEntry((keyPrefixN + "_estrazioni"), estrazioni), IntegerEntry((keyPrefixN + endKeyDataRichiesta), currDate), StringEntry((keyPrefixN + "_richiesta"), richiesta)]
152+[IntegerEntry(keyCounter, nRichiesta), StringEntry((keyPrefixN + fieldNameSeedB16), toBase16String(seed)), BinaryEntry((keyPrefixN + fieldNameSeed), seed), BinaryEntry("test_vrf", getVrf()), IntegerEntry((keyPrefixN + fieldNameHeightExtraction), heightExtraction), IntegerEntry((keyPrefixN + fieldNameCardinalita), cardinalita), IntegerEntry((keyPrefixN + fieldNameEstrazioni), estrazioni), IntegerEntry((keyPrefixN + fieldNameDataRichiesta), currDate), StringEntry((keyPrefixN + fieldNameRichiesta), richiesta)]
137153 }
138154
139155

github/deemru/w8io/873ac7e 
38.35 ms