tx · GXSzJwK1ziiscB3pY1gXGsEadsuy3guGsKPGbjAjtN6u 3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua: -0.01400000 Waves 2021.03.28 16:25 [1457667] smart account 3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua > SELF 0.00000000 Waves
{ "type": 13, "id": "GXSzJwK1ziiscB3pY1gXGsEadsuy3guGsKPGbjAjtN6u", "fee": 1400000, "feeAssetId": null, "timestamp": 1616937983055, "version": 2, "chainId": 84, "sender": "3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua", "senderPublicKey": "CTyHhnVTxf16Z4CmGGneAK8WB5g2QyT4MB8kUn8vPPcu", "proofs": [ "3w69hGeizXwdKi5UteE8eGDme3nCt87NyqQqi7YVhYNG8SKi1dk2TKLbchKdHVd7SjoHJhouC3ndeByxFoFQ54Sg" ], "script": "base64:AAIEAAAAAAAAABAIAhIECgIICBIECgIICBIAAAAAGAAAAAAEc2VsZgkABCUAAAABBQAAAAR0aGlzAAAAAA1nZW5lc2lzSGVpZ2h0AAAAAAAAFjhmAAAAAAd3YXZlc0lkAgAAAAVXQVZFUwAAAAAGbWF4SW50AH/////////9AAAAAA5tYXhEYXRhS2V5U2l6ZQAAAAAAAAABkAAAAAATbWF4RGVzY3JpcHRpb25CeXRlcwAAAAAAAAAD6AAAAAAMY29udHJhY3ROYW1lAgAAAA1WYXVsdENvbnRyYWN0AAAAAAxjb250cmFjdFRleHQJAAEsAAAAAgkAASwAAAACAgAAAEREb24ndCB0cnVzdCwgdmVyaWZ5ICEgVGhlIE5GVCBJc3N1ZXIgYW5kIGRBcHAgYXJlIHRoZSBzYW1lIGFkZHJlc3MgPAUAAAAEc2VsZgIAAAACPi4AAAAAEWNvbnRyYWN0U2VwYXJhdG9yAgAAAANfX18AAAAAC3JlY2VpcHROYW1lAgAAAAxWYXVsdFJlY2VpcHQAAAAAC3JlY2VpcHRUZXh0AgAAAAhmdWNrIG9mZgAAAAAMdmVyaWZpZXJOYW1lAgAAAA1WYXVsdFZlcmlmaWVyAAAAAA12ZXJpZmllclRleHQxAgAAAAhBZGRyZXNzOgAAAAANdmVyaWZpZXJUZXh0MgIAAAAXU0hBMjU2IEJhc2U1OCBDaGVja3N1bToAAAAADXZlcmlmaWVyVGV4dDMCAAAAB0Vycm9yczoAAAAADnJ1bGVzU2VwYXJhdG9yAgAAAAFfAAAAABRydWxlc05lc3RlZFNlcGFyYXRvcgIAAAABKwAAAAAOcnVsZXNVbmRlZmluZWQCAAAABG51bGwAAAAAD2Vycm9yc1NlcGFyYXRvcgIAAAABfAAAAAAIa2V5UnVsZXMCAAAABl9ydWxlcwAAAAANa2V5Tm9uY2VDb3VudAIAAAALTk9OQ0VfQ09VTlQBAAAACWlzSW5SYW5nZQAAAAEAAAAGbnVtYmVyAwkAAGcAAAACBQAAAAZudW1iZXIAAAAAAAAAAAAJAABmAAAAAgUAAAAGbWF4SW50BQAAAAZudW1iZXIHAQAAAA1nZW5lcmF0ZU5vbmNlAAAAAAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAA1rZXlOb25jZUNv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AAtkZXNjcmlwdGlvbgUAAAARY29udHJhY3RTZXBhcmF0b3IEAAAADmNvbnRyYWN0SGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAATY29udHJhY3REZXNjcmlwdGlvbgAAAAAAAAAAAQQAAAAVY29udHJhY3RDYWxsZXJBZGRyZXNzCQABkQAAAAIFAAAAE2NvbnRyYWN0RGVzY3JpcHRpb24AAAAAAAAAAAIEAAAAD2NvbnRyYWN0QXNzZXRJZAkAAZEAAAACBQAAABNjb250cmFjdERlc2NyaXB0aW9uAAAAAAAAAAADBAAAABVjb250cmFjdEFzc2V0UXVhbnRpdHkJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABNjb250cmFjdERlc2NyaXB0aW9uAAAAAAAAAAAEBAAAABFjb250cmFjdEFzc2V0SW5mbwQAAAAHJG1hdGNoMAkAA+wAAAABCQACWQAAAAEFAAAAD2NvbnRyYWN0QXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAFQXNzZXQEAAAAB2lzQXNzZXQFAAAAByRtYXRjaDAFAAAAB2lzQXNzZXQJAAACAAAAAQIAAAAURVJST1I6IFVua25vd24gQXNzZXQDCQEAAAACIT0AAAACCQABkAAAAAEFAAAAE2NvbnRyYWN0RGVzY3JpcHRpb24AAAAAAAAAAAUJAAACAAAAAQIAAAAbRVJST1I6IENvbnRyYWN0IGRlc2NyaXB0aW9uAwMJAABnAAAAAgUAAAANZ2VuZXNpc0hlaWdodAUAAAAOY29udHJhY3RIZWlnaHQGCQAAZwAAAAIFAAAADmNvbnRyYWN0SGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQIAAAANRVJST1I6IEhlaWdodAMDCQAAZgAAAAIAAAAAAAAAAAEFAAAAFWNvbnRyYWN0QXNzZXRRdWFudGl0eQYJAABmAAAAAgUAAAAVY29udHJhY3RBc3NldFF1YW50aXR5CAUAAAARY29udHJhY3RBc3NldEluZm8AAAAIcXVhbnRpdHkJAAACAAAAAQIAAAAVRVJST1I6IEFzc2V0IHF1YW50aXR5AwkAAGYAAAACBQAAABVjb250cmFjdEFzc2V0UXVhbnRpdHkJAAPwAAAAAgUAAAAEdGhpcwgFAAAAEWNvbnRyYWN0QXNzZXRJbmZvAAAAAmlkCQAAAgAAAAECAAAAFEVSUk9SOiBWYXVsdCBiYWxhbmNlBAAAAAVub25jZQkBAAAADWdlbmVyYXRlTm9uY2UAAAAABAAAABJyZWNlaXB0RGVzY3JpcHRpb24JAAS5AAAAAgkABEwAAAACBQAAAAtyZWNlaXB0VGV4dAkABEwAAAACCQABpAAAAAEFAAAADmNvbnRyYWN0SGVpZ2h0CQAETAAAAAIJAAGkAAAAAQUAAAAGaGVpZ2h0CQAETAAAAAIJAAJYAAAAAQUAAAAUY29udHJhY3RJZEJ5dGVWZWN0b3IJAARMAAAAAgUAAAAVY29udHJhY3RDYWxsZXJBZGRyZXNzCQAETAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQAETAAAAAIFAAAAD2NvbnRyYWN0QXNzZXRJZAkABEwAAAACCQABpAAAAAEFAAAAFWNvbnRyYWN0QXNzZXRRdWFudGl0eQUAAAADbmlsBQAAABFjb250cmFjdFNlcGFyYXRvcgQAAAAMcmVjZWlwdElzc3VlCQAEQwAAAAcFAAAAC3JlY2VpcHROYW1lBQAAABJyZWNlaXB0RGVzY3JpcHRpb24AAAAAAAAAAAEAAAAAAAAAAAAHBQAAAAR1bml0BQAAAAVub25jZQQAAAAJcmVjZWlwdElkCQAEOAAAAAEFAAAADHJlY2VpcHRJc3N1ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANa2V5Tm9uY2VDb3VudAUAAAAFbm9uY2UJAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAABRjb250cmFjdElkQnl0ZVZlY3RvcgAAAAAAAAAAAQkABEwAAAACBQAAAAxyZWNlaXB0SXNzdWUJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyCAUAAAAMcmVjZWlwdElzc3VlAAAACHF1YW50aXR5BQAAAAlyZWNlaXB0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABVjb250cmFjdEFzc2V0UXVhbnRpdHkIBQAAABFjb250cmFjdEFzc2V0SW5mbwAAAAJpZAUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXmGa0FV", "height": 1457667, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: J7JCxTJQJwWdHUzAg5VUuLmdZA7o76K4X7mLFKXqdLhM Next: 6ewY79aKdvCVLerKshymQxyaiB83oXpJqb8BYg9xv7aQ Diff:
Old | New | Differences | |
---|---|---|---|
8 | 8 | let wavesId = "WAVES" | |
9 | 9 | ||
10 | 10 | let maxInt = 9223372036854775805 | |
11 | + | ||
12 | + | let maxDataKeySize = 400 | |
11 | 13 | ||
12 | 14 | let maxDescriptionBytes = 1000 | |
13 | 15 | ||
94 | 96 | then throw("ERROR: Self-invoke is forbidden") | |
95 | 97 | else { | |
96 | 98 | let rulerAddress = Address(fromBase58String(incRulerAddress)) | |
97 | - | let rulesString = match getString(rulerAddress, (incRulerKey + keyRules)) { | |
98 | - | case isString: String => | |
99 | - | isString | |
100 | - | case _ => | |
101 | - | throw("ERROR: Data not found") | |
102 | - | } | |
103 | - | let rulesList = split(rulesString, rulesSeparator) | |
104 | - | if ((size(rulesList) != 15)) | |
105 | - | then throw("ERROR: Wrong amount of rules") | |
99 | + | let rulerKeyRules = (incRulerKey + keyRules) | |
100 | + | if ((size(toBytes(rulerKeyRules)) >= maxDataKeySize)) | |
101 | + | then throw("ERROR: Key size too long") | |
106 | 102 | else { | |
107 | - | let errorsList = { | |
108 | - | let $list34453480 = rulesList | |
109 | - | let $size34453480 = size($list34453480) | |
110 | - | let $acc034453480 = nil | |
111 | - | if (($size34453480 == 0)) | |
112 | - | then $acc034453480 | |
113 | - | else { | |
114 | - | let $acc134453480 = verifyRule($acc034453480, $list34453480[0]) | |
115 | - | if (($size34453480 == 1)) | |
116 | - | then $acc134453480 | |
103 | + | let rulesString = match getString(rulerAddress, rulerKeyRules) { | |
104 | + | case isString: String => | |
105 | + | isString | |
106 | + | case _ => | |
107 | + | throw("ERROR: Data not found") | |
108 | + | } | |
109 | + | let rulesList = split(rulesString, rulesSeparator) | |
110 | + | if ((size(rulesList) != 15)) | |
111 | + | then throw("ERROR: Wrong amount of rules") | |
112 | + | else { | |
113 | + | let errorsList = { | |
114 | + | let $list37323767 = rulesList | |
115 | + | let $size37323767 = size($list37323767) | |
116 | + | let $acc037323767 = nil | |
117 | + | if (($size37323767 == 0)) | |
118 | + | then $acc037323767 | |
117 | 119 | else { | |
118 | - | let $ | |
119 | - | if (($ | |
120 | - | then $ | |
120 | + | let $acc137323767 = verifyRule($acc037323767, $list37323767[0]) | |
121 | + | if (($size37323767 == 1)) | |
122 | + | then $acc137323767 | |
121 | 123 | else { | |
122 | - | let $ | |
123 | - | if (($ | |
124 | - | then $ | |
124 | + | let $acc237323767 = verifyRule($acc137323767, $list37323767[1]) | |
125 | + | if (($size37323767 == 2)) | |
126 | + | then $acc237323767 | |
125 | 127 | else { | |
126 | - | let $ | |
127 | - | if (($ | |
128 | - | then $ | |
128 | + | let $acc337323767 = verifyRule($acc237323767, $list37323767[2]) | |
129 | + | if (($size37323767 == 3)) | |
130 | + | then $acc337323767 | |
129 | 131 | else { | |
130 | - | let $ | |
131 | - | if (($ | |
132 | - | then $ | |
132 | + | let $acc437323767 = verifyRule($acc337323767, $list37323767[3]) | |
133 | + | if (($size37323767 == 4)) | |
134 | + | then $acc437323767 | |
133 | 135 | else { | |
134 | - | let $ | |
135 | - | if (($ | |
136 | - | then $ | |
136 | + | let $acc537323767 = verifyRule($acc437323767, $list37323767[4]) | |
137 | + | if (($size37323767 == 5)) | |
138 | + | then $acc537323767 | |
137 | 139 | else { | |
138 | - | let $ | |
139 | - | if (($ | |
140 | - | then $ | |
140 | + | let $acc637323767 = verifyRule($acc537323767, $list37323767[5]) | |
141 | + | if (($size37323767 == 6)) | |
142 | + | then $acc637323767 | |
141 | 143 | else { | |
142 | - | let $ | |
143 | - | if (($ | |
144 | - | then $ | |
144 | + | let $acc737323767 = verifyRule($acc637323767, $list37323767[6]) | |
145 | + | if (($size37323767 == 7)) | |
146 | + | then $acc737323767 | |
145 | 147 | else { | |
146 | - | let $ | |
147 | - | if (($ | |
148 | - | then $ | |
148 | + | let $acc837323767 = verifyRule($acc737323767, $list37323767[7]) | |
149 | + | if (($size37323767 == 8)) | |
150 | + | then $acc837323767 | |
149 | 151 | else { | |
150 | - | let $ | |
151 | - | if (($ | |
152 | - | then $ | |
152 | + | let $acc937323767 = verifyRule($acc837323767, $list37323767[8]) | |
153 | + | if (($size37323767 == 9)) | |
154 | + | then $acc937323767 | |
153 | 155 | else { | |
154 | - | let $ | |
155 | - | if (($ | |
156 | - | then $ | |
156 | + | let $acc1037323767 = verifyRule($acc937323767, $list37323767[9]) | |
157 | + | if (($size37323767 == 10)) | |
158 | + | then $acc1037323767 | |
157 | 159 | else { | |
158 | - | let $ | |
159 | - | if (($ | |
160 | - | then $ | |
160 | + | let $acc1137323767 = verifyRule($acc1037323767, $list37323767[10]) | |
161 | + | if (($size37323767 == 11)) | |
162 | + | then $acc1137323767 | |
161 | 163 | else { | |
162 | - | let $ | |
163 | - | if (($ | |
164 | - | then $ | |
164 | + | let $acc1237323767 = verifyRule($acc1137323767, $list37323767[11]) | |
165 | + | if (($size37323767 == 12)) | |
166 | + | then $acc1237323767 | |
165 | 167 | else { | |
166 | - | let $ | |
167 | - | if (($ | |
168 | - | then $ | |
168 | + | let $acc1337323767 = verifyRule($acc1237323767, $list37323767[12]) | |
169 | + | if (($size37323767 == 13)) | |
170 | + | then $acc1337323767 | |
169 | 171 | else { | |
170 | - | let $ | |
171 | - | if (($ | |
172 | - | then $ | |
172 | + | let $acc1437323767 = verifyRule($acc1337323767, $list37323767[13]) | |
173 | + | if (($size37323767 == 14)) | |
174 | + | then $acc1437323767 | |
173 | 175 | else { | |
174 | - | let $acc1634453480 = verifyRule($acc1534453480, $list34453480[15]) | |
175 | - | throw("List size exceed 15") | |
176 | + | let $acc1537323767 = verifyRule($acc1437323767, $list37323767[14]) | |
177 | + | if (($size37323767 == 15)) | |
178 | + | then $acc1537323767 | |
179 | + | else { | |
180 | + | let $acc1637323767 = verifyRule($acc1537323767, $list37323767[15]) | |
181 | + | throw("List size exceed 15") | |
182 | + | } | |
176 | 183 | } | |
177 | 184 | } | |
178 | 185 | } | |
189 | 196 | } | |
190 | 197 | } | |
191 | 198 | } | |
192 | - | } | |
193 | - | let errorsString = makeString(errorsList, errorsSeparator) | |
194 | - | let nonce = generateNonce() | |
195 | - | let rulesSHA256 = toBase58String(sha256(toBytes(rulesString))) | |
196 | - | let verifierDescription = ((((((((((verifierText1 + " <") + incRulerAddress) + "> ") + verifierText2) + " <") + rulesSHA256) + "> ") + verifierText3) + " ") + errorsString) | |
197 | - | if ((size(toBytes(verifierDescription)) > maxDescriptionBytes)) | |
198 | - | then throw("ERROR: Too much errors") | |
199 | - | else { | |
200 | - | let veriferIssue = Issue(verifierName, verifierDescription, 1, 0, false, unit, nonce) | |
201 | - | let verifierId = calculateAssetId(veriferIssue) | |
199 | + | let errorsString = makeString(errorsList, errorsSeparator) | |
200 | + | let nonce = generateNonce() | |
201 | + | let rulesSHA256 = toBase58String(sha256(toBytes(rulesString))) | |
202 | + | let verifierDescription = ((((((((((verifierText1 + " <") + incRulerAddress) + "> ") + verifierText2) + " <") + rulesSHA256) + "> ") + verifierText3) + " ") + errorsString) | |
203 | + | if ((size(toBytes(verifierDescription)) > maxDescriptionBytes)) | |
204 | + | then throw("ERROR: Too much errors") | |
205 | + | else { | |
206 | + | let veriferIssue = Issue(verifierName, verifierDescription, 1, 0, false, unit, nonce) | |
207 | + | let verifierId = calculateAssetId(veriferIssue) | |
202 | 208 | [IntegerEntry(keyNonceCount, nonce), veriferIssue, ScriptTransfer(i.caller, veriferIssue.quantity, verifierId)] | |
209 | + | } | |
203 | 210 | } | |
204 | 211 | } | |
205 | 212 | } |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let self = toString(this) | |
5 | 5 | ||
6 | 6 | let genesisHeight = 1456230 | |
7 | 7 | ||
8 | 8 | let wavesId = "WAVES" | |
9 | 9 | ||
10 | 10 | let maxInt = 9223372036854775805 | |
11 | + | ||
12 | + | let maxDataKeySize = 400 | |
11 | 13 | ||
12 | 14 | let maxDescriptionBytes = 1000 | |
13 | 15 | ||
14 | 16 | let contractName = "VaultContract" | |
15 | 17 | ||
16 | 18 | let contractText = (("Don't trust, verify ! The NFT Issuer and dApp are the same address <" + self) + ">.") | |
17 | 19 | ||
18 | 20 | let contractSeparator = "___" | |
19 | 21 | ||
20 | 22 | let receiptName = "VaultReceipt" | |
21 | 23 | ||
22 | 24 | let receiptText = "fuck off" | |
23 | 25 | ||
24 | 26 | let verifierName = "VaultVerifier" | |
25 | 27 | ||
26 | 28 | let verifierText1 = "Address:" | |
27 | 29 | ||
28 | 30 | let verifierText2 = "SHA256 Base58 Checksum:" | |
29 | 31 | ||
30 | 32 | let verifierText3 = "Errors:" | |
31 | 33 | ||
32 | 34 | let rulesSeparator = "_" | |
33 | 35 | ||
34 | 36 | let rulesNestedSeparator = "+" | |
35 | 37 | ||
36 | 38 | let rulesUndefined = "null" | |
37 | 39 | ||
38 | 40 | let errorsSeparator = "|" | |
39 | 41 | ||
40 | 42 | let keyRules = "_rules" | |
41 | 43 | ||
42 | 44 | let keyNonceCount = "NONCE_COUNT" | |
43 | 45 | ||
44 | 46 | func isInRange (number) = if ((number >= 0)) | |
45 | 47 | then (maxInt > number) | |
46 | 48 | else false | |
47 | 49 | ||
48 | 50 | ||
49 | 51 | func generateNonce () = match getInteger(this, keyNonceCount) { | |
50 | 52 | case isInt: Int => | |
51 | 53 | if ((isInt >= maxInt)) | |
52 | 54 | then 1 | |
53 | 55 | else (isInt + 1) | |
54 | 56 | case _ => | |
55 | 57 | 1 | |
56 | 58 | } | |
57 | 59 | ||
58 | 60 | ||
59 | 61 | func verifyRule (acc,rule) = if ((rule == rulesUndefined)) | |
60 | 62 | then acc | |
61 | 63 | else { | |
62 | 64 | let ruleValues = split(rule, rulesNestedSeparator) | |
63 | 65 | if ((size(ruleValues) != 4)) | |
64 | 66 | then (("<" + rule) + "> Broken structure") :: acc | |
65 | 67 | else match parseInt(ruleValues[0]) { | |
66 | 68 | case blockStart: Int => | |
67 | 69 | if ((isInRange(blockStart) != true)) | |
68 | 70 | then (("<" + rule) + "> blockStart out-of-range") :: acc | |
69 | 71 | else match parseInt(ruleValues[1]) { | |
70 | 72 | case blockEnd: Int => | |
71 | 73 | if ((isInRange(blockEnd) != true)) | |
72 | 74 | then (("<" + rule) + "> blockEnd out-of-range") :: acc | |
73 | 75 | else match parseInt(ruleValues[2]) { | |
74 | 76 | case isWhitelist: Int => | |
75 | 77 | if (if ((isWhitelist != 0)) | |
76 | 78 | then (isWhitelist != 1) | |
77 | 79 | else false) | |
78 | 80 | then (("<" + rule) + "> isWhitelist is 0 (false) or 1 (true)") :: acc | |
79 | 81 | else acc | |
80 | 82 | case _ => | |
81 | 83 | (("<" + rule) + "> isWhitelist not Integer") :: acc | |
82 | 84 | } | |
83 | 85 | case _ => | |
84 | 86 | (("<" + rule) + "> blockEnd not Integer") :: acc | |
85 | 87 | } | |
86 | 88 | case _ => | |
87 | 89 | (("<" + rule) + "> blockStart not Integer") :: acc | |
88 | 90 | } | |
89 | 91 | } | |
90 | 92 | ||
91 | 93 | ||
92 | 94 | @Callable(i) | |
93 | 95 | func verifyRules (incRulerAddress,incRulerKey) = if ((this == i.caller)) | |
94 | 96 | then throw("ERROR: Self-invoke is forbidden") | |
95 | 97 | else { | |
96 | 98 | let rulerAddress = Address(fromBase58String(incRulerAddress)) | |
97 | - | let rulesString = match getString(rulerAddress, (incRulerKey + keyRules)) { | |
98 | - | case isString: String => | |
99 | - | isString | |
100 | - | case _ => | |
101 | - | throw("ERROR: Data not found") | |
102 | - | } | |
103 | - | let rulesList = split(rulesString, rulesSeparator) | |
104 | - | if ((size(rulesList) != 15)) | |
105 | - | then throw("ERROR: Wrong amount of rules") | |
99 | + | let rulerKeyRules = (incRulerKey + keyRules) | |
100 | + | if ((size(toBytes(rulerKeyRules)) >= maxDataKeySize)) | |
101 | + | then throw("ERROR: Key size too long") | |
106 | 102 | else { | |
107 | - | let errorsList = { | |
108 | - | let $list34453480 = rulesList | |
109 | - | let $size34453480 = size($list34453480) | |
110 | - | let $acc034453480 = nil | |
111 | - | if (($size34453480 == 0)) | |
112 | - | then $acc034453480 | |
113 | - | else { | |
114 | - | let $acc134453480 = verifyRule($acc034453480, $list34453480[0]) | |
115 | - | if (($size34453480 == 1)) | |
116 | - | then $acc134453480 | |
103 | + | let rulesString = match getString(rulerAddress, rulerKeyRules) { | |
104 | + | case isString: String => | |
105 | + | isString | |
106 | + | case _ => | |
107 | + | throw("ERROR: Data not found") | |
108 | + | } | |
109 | + | let rulesList = split(rulesString, rulesSeparator) | |
110 | + | if ((size(rulesList) != 15)) | |
111 | + | then throw("ERROR: Wrong amount of rules") | |
112 | + | else { | |
113 | + | let errorsList = { | |
114 | + | let $list37323767 = rulesList | |
115 | + | let $size37323767 = size($list37323767) | |
116 | + | let $acc037323767 = nil | |
117 | + | if (($size37323767 == 0)) | |
118 | + | then $acc037323767 | |
117 | 119 | else { | |
118 | - | let $ | |
119 | - | if (($ | |
120 | - | then $ | |
120 | + | let $acc137323767 = verifyRule($acc037323767, $list37323767[0]) | |
121 | + | if (($size37323767 == 1)) | |
122 | + | then $acc137323767 | |
121 | 123 | else { | |
122 | - | let $ | |
123 | - | if (($ | |
124 | - | then $ | |
124 | + | let $acc237323767 = verifyRule($acc137323767, $list37323767[1]) | |
125 | + | if (($size37323767 == 2)) | |
126 | + | then $acc237323767 | |
125 | 127 | else { | |
126 | - | let $ | |
127 | - | if (($ | |
128 | - | then $ | |
128 | + | let $acc337323767 = verifyRule($acc237323767, $list37323767[2]) | |
129 | + | if (($size37323767 == 3)) | |
130 | + | then $acc337323767 | |
129 | 131 | else { | |
130 | - | let $ | |
131 | - | if (($ | |
132 | - | then $ | |
132 | + | let $acc437323767 = verifyRule($acc337323767, $list37323767[3]) | |
133 | + | if (($size37323767 == 4)) | |
134 | + | then $acc437323767 | |
133 | 135 | else { | |
134 | - | let $ | |
135 | - | if (($ | |
136 | - | then $ | |
136 | + | let $acc537323767 = verifyRule($acc437323767, $list37323767[4]) | |
137 | + | if (($size37323767 == 5)) | |
138 | + | then $acc537323767 | |
137 | 139 | else { | |
138 | - | let $ | |
139 | - | if (($ | |
140 | - | then $ | |
140 | + | let $acc637323767 = verifyRule($acc537323767, $list37323767[5]) | |
141 | + | if (($size37323767 == 6)) | |
142 | + | then $acc637323767 | |
141 | 143 | else { | |
142 | - | let $ | |
143 | - | if (($ | |
144 | - | then $ | |
144 | + | let $acc737323767 = verifyRule($acc637323767, $list37323767[6]) | |
145 | + | if (($size37323767 == 7)) | |
146 | + | then $acc737323767 | |
145 | 147 | else { | |
146 | - | let $ | |
147 | - | if (($ | |
148 | - | then $ | |
148 | + | let $acc837323767 = verifyRule($acc737323767, $list37323767[7]) | |
149 | + | if (($size37323767 == 8)) | |
150 | + | then $acc837323767 | |
149 | 151 | else { | |
150 | - | let $ | |
151 | - | if (($ | |
152 | - | then $ | |
152 | + | let $acc937323767 = verifyRule($acc837323767, $list37323767[8]) | |
153 | + | if (($size37323767 == 9)) | |
154 | + | then $acc937323767 | |
153 | 155 | else { | |
154 | - | let $ | |
155 | - | if (($ | |
156 | - | then $ | |
156 | + | let $acc1037323767 = verifyRule($acc937323767, $list37323767[9]) | |
157 | + | if (($size37323767 == 10)) | |
158 | + | then $acc1037323767 | |
157 | 159 | else { | |
158 | - | let $ | |
159 | - | if (($ | |
160 | - | then $ | |
160 | + | let $acc1137323767 = verifyRule($acc1037323767, $list37323767[10]) | |
161 | + | if (($size37323767 == 11)) | |
162 | + | then $acc1137323767 | |
161 | 163 | else { | |
162 | - | let $ | |
163 | - | if (($ | |
164 | - | then $ | |
164 | + | let $acc1237323767 = verifyRule($acc1137323767, $list37323767[11]) | |
165 | + | if (($size37323767 == 12)) | |
166 | + | then $acc1237323767 | |
165 | 167 | else { | |
166 | - | let $ | |
167 | - | if (($ | |
168 | - | then $ | |
168 | + | let $acc1337323767 = verifyRule($acc1237323767, $list37323767[12]) | |
169 | + | if (($size37323767 == 13)) | |
170 | + | then $acc1337323767 | |
169 | 171 | else { | |
170 | - | let $ | |
171 | - | if (($ | |
172 | - | then $ | |
172 | + | let $acc1437323767 = verifyRule($acc1337323767, $list37323767[13]) | |
173 | + | if (($size37323767 == 14)) | |
174 | + | then $acc1437323767 | |
173 | 175 | else { | |
174 | - | let $acc1634453480 = verifyRule($acc1534453480, $list34453480[15]) | |
175 | - | throw("List size exceed 15") | |
176 | + | let $acc1537323767 = verifyRule($acc1437323767, $list37323767[14]) | |
177 | + | if (($size37323767 == 15)) | |
178 | + | then $acc1537323767 | |
179 | + | else { | |
180 | + | let $acc1637323767 = verifyRule($acc1537323767, $list37323767[15]) | |
181 | + | throw("List size exceed 15") | |
182 | + | } | |
176 | 183 | } | |
177 | 184 | } | |
178 | 185 | } | |
179 | 186 | } | |
180 | 187 | } | |
181 | 188 | } | |
182 | 189 | } | |
183 | 190 | } | |
184 | 191 | } | |
185 | 192 | } | |
186 | 193 | } | |
187 | 194 | } | |
188 | 195 | } | |
189 | 196 | } | |
190 | 197 | } | |
191 | 198 | } | |
192 | - | } | |
193 | - | let errorsString = makeString(errorsList, errorsSeparator) | |
194 | - | let nonce = generateNonce() | |
195 | - | let rulesSHA256 = toBase58String(sha256(toBytes(rulesString))) | |
196 | - | let verifierDescription = ((((((((((verifierText1 + " <") + incRulerAddress) + "> ") + verifierText2) + " <") + rulesSHA256) + "> ") + verifierText3) + " ") + errorsString) | |
197 | - | if ((size(toBytes(verifierDescription)) > maxDescriptionBytes)) | |
198 | - | then throw("ERROR: Too much errors") | |
199 | - | else { | |
200 | - | let veriferIssue = Issue(verifierName, verifierDescription, 1, 0, false, unit, nonce) | |
201 | - | let verifierId = calculateAssetId(veriferIssue) | |
199 | + | let errorsString = makeString(errorsList, errorsSeparator) | |
200 | + | let nonce = generateNonce() | |
201 | + | let rulesSHA256 = toBase58String(sha256(toBytes(rulesString))) | |
202 | + | let verifierDescription = ((((((((((verifierText1 + " <") + incRulerAddress) + "> ") + verifierText2) + " <") + rulesSHA256) + "> ") + verifierText3) + " ") + errorsString) | |
203 | + | if ((size(toBytes(verifierDescription)) > maxDescriptionBytes)) | |
204 | + | then throw("ERROR: Too much errors") | |
205 | + | else { | |
206 | + | let veriferIssue = Issue(verifierName, verifierDescription, 1, 0, false, unit, nonce) | |
207 | + | let verifierId = calculateAssetId(veriferIssue) | |
202 | 208 | [IntegerEntry(keyNonceCount, nonce), veriferIssue, ScriptTransfer(i.caller, veriferIssue.quantity, verifierId)] | |
209 | + | } | |
203 | 210 | } | |
204 | 211 | } | |
205 | 212 | } | |
206 | 213 | ||
207 | 214 | ||
208 | 215 | ||
209 | 216 | @Callable(i) | |
210 | 217 | func deposit (incRulerAddress,incRulerTag) = if ((genesisHeight > height)) | |
211 | 218 | then throw(("ERROR: Deposits are denied until block " + toString(genesisHeight))) | |
212 | 219 | else if ((this == i.caller)) | |
213 | 220 | then throw("ERROR: Self-invoke is forbidden") | |
214 | 221 | else if ((size(i.payments) != 1)) | |
215 | 222 | then throw("ERROR: Attached Payment != 1") | |
216 | 223 | else if (if ((1 > i.payments[0].amount)) | |
217 | 224 | then true | |
218 | 225 | else (i.payments[0].amount > maxInt)) | |
219 | 226 | then throw("ERROR: Payment amount") | |
220 | 227 | else { | |
221 | 228 | let contractAssetId = match i.payments[0].assetId { | |
222 | 229 | case isByteVector: ByteVector => | |
223 | 230 | match assetInfo(isByteVector) { | |
224 | 231 | case isAsset: Asset => | |
225 | 232 | toBase58String(isAsset.id) | |
226 | 233 | case _ => | |
227 | 234 | throw("ERROR: Asset not found") | |
228 | 235 | } | |
229 | 236 | case isWaves: Unit => | |
230 | 237 | wavesId | |
231 | 238 | case _ => | |
232 | 239 | throw("ERROR: Unknown Asset type") | |
233 | 240 | } | |
234 | 241 | let nonce = generateNonce() | |
235 | 242 | let contractDescription = makeString([contractText, toString(height), toString(i.caller), contractAssetId, toString(i.payments[0].amount)], contractSeparator) | |
236 | 243 | if ((size(toBytes(contractDescription)) > maxDescriptionBytes)) | |
237 | 244 | then throw("ERROR: Too long contract") | |
238 | 245 | else { | |
239 | 246 | let contractIssue = Issue(contractName, contractDescription, 1, 0, false, unit, nonce) | |
240 | 247 | let contractId = calculateAssetId(contractIssue) | |
241 | 248 | [IntegerEntry(keyNonceCount, nonce), contractIssue, ScriptTransfer(i.caller, contractIssue.quantity, contractId)] | |
242 | 249 | } | |
243 | 250 | } | |
244 | 251 | ||
245 | 252 | ||
246 | 253 | ||
247 | 254 | @Callable(i) | |
248 | 255 | func withdraw () = if ((this == i.caller)) | |
249 | 256 | then throw("ERROR: Self-invoke is forbidden") | |
250 | 257 | else if ((size(i.payments) != 1)) | |
251 | 258 | then throw("ERROR: Attached Payment != 1") | |
252 | 259 | else if ((i.payments[0].amount != 1)) | |
253 | 260 | then throw("ERROR: Payment amount != 1") | |
254 | 261 | else { | |
255 | 262 | let contractIdByteVector = match i.payments[0].assetId { | |
256 | 263 | case isByteVector: ByteVector => | |
257 | 264 | isByteVector | |
258 | 265 | case _ => | |
259 | 266 | throw("ERROR: Contract type") | |
260 | 267 | } | |
261 | 268 | let contractInfo = match assetInfo(contractIdByteVector) { | |
262 | 269 | case isAsset: Asset => | |
263 | 270 | isAsset | |
264 | 271 | case _ => | |
265 | 272 | throw("ERROR: Unknown Contract") | |
266 | 273 | } | |
267 | 274 | if ((contractInfo.issuer != this)) | |
268 | 275 | then throw("ERROR: Contract Issuer") | |
269 | 276 | else if ((contractInfo.name != contractName)) | |
270 | 277 | then throw("ERROR: Contract name") | |
271 | 278 | else if (if (if (if ((contractInfo.decimals != 0)) | |
272 | 279 | then true | |
273 | 280 | else (contractInfo.quantity != 1)) | |
274 | 281 | then true | |
275 | 282 | else (contractInfo.reissuable != false)) | |
276 | 283 | then true | |
277 | 284 | else (contractInfo.scripted != false)) | |
278 | 285 | then throw("ERROR: Contract not NFT") | |
279 | 286 | else { | |
280 | 287 | let contractDescription = split(contractInfo.description, contractSeparator) | |
281 | 288 | let contractHeight = parseIntValue(contractDescription[1]) | |
282 | 289 | let contractCallerAddress = contractDescription[2] | |
283 | 290 | let contractAssetId = contractDescription[3] | |
284 | 291 | let contractAssetQuantity = parseIntValue(contractDescription[4]) | |
285 | 292 | let contractAssetInfo = match assetInfo(fromBase58String(contractAssetId)) { | |
286 | 293 | case isAsset: Asset => | |
287 | 294 | isAsset | |
288 | 295 | case _ => | |
289 | 296 | throw("ERROR: Unknown Asset") | |
290 | 297 | } | |
291 | 298 | if ((size(contractDescription) != 5)) | |
292 | 299 | then throw("ERROR: Contract description") | |
293 | 300 | else if (if ((genesisHeight >= contractHeight)) | |
294 | 301 | then true | |
295 | 302 | else (contractHeight >= height)) | |
296 | 303 | then throw("ERROR: Height") | |
297 | 304 | else if (if ((1 > contractAssetQuantity)) | |
298 | 305 | then true | |
299 | 306 | else (contractAssetQuantity > contractAssetInfo.quantity)) | |
300 | 307 | then throw("ERROR: Asset quantity") | |
301 | 308 | else if ((contractAssetQuantity > assetBalance(this, contractAssetInfo.id))) | |
302 | 309 | then throw("ERROR: Vault balance") | |
303 | 310 | else { | |
304 | 311 | let nonce = generateNonce() | |
305 | 312 | let receiptDescription = makeString([receiptText, toString(contractHeight), toString(height), toBase58String(contractIdByteVector), contractCallerAddress, toString(i.caller), contractAssetId, toString(contractAssetQuantity)], contractSeparator) | |
306 | 313 | let receiptIssue = Issue(receiptName, receiptDescription, 1, 0, false, unit, nonce) | |
307 | 314 | let receiptId = calculateAssetId(receiptIssue) | |
308 | 315 | [IntegerEntry(keyNonceCount, nonce), Burn(contractIdByteVector, 1), receiptIssue, ScriptTransfer(i.caller, receiptIssue.quantity, receiptId), ScriptTransfer(i.caller, contractAssetQuantity, contractAssetInfo.id)] | |
309 | 316 | } | |
310 | 317 | } | |
311 | 318 | } | |
312 | 319 | ||
313 | 320 | ||
314 | 321 | @Verifier(tx) | |
315 | 322 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
316 | 323 |
github/deemru/w8io/169f3d6 165.07 ms ◑![]()