tx · nJ8AUT8N1vUDwkfN5ZBmZRQmMMREzxg48wZpUd8r6Vq 3NA6gug1TT67nGzrAGa36rG5nzTzUGtFQG9: -0.01300000 Waves 2024.10.08 09:24 [3317488] smart account 3NA6gug1TT67nGzrAGa36rG5nzTzUGtFQG9 > SELF 0.00000000 Waves
{ "type": 13, "id": "nJ8AUT8N1vUDwkfN5ZBmZRQmMMREzxg48wZpUd8r6Vq", "fee": 1300000, "feeAssetId": null, "timestamp": 1728368658729, "version": 2, "chainId": 84, "sender": "3NA6gug1TT67nGzrAGa36rG5nzTzUGtFQG9", "senderPublicKey": "3gX6tHzxt5SFVKDcuDS9r5RxJ9erHrBxGwv3dZoi4SAW", "proofs": [ "3QRPgJeHA8HV2qqa1T2h6wt2QcJRg8oCks1aKtfmeUSrtAM7AUBth5a9jPmFQEsr1XxYz8tV5zBxR6hJXAFkGEvm" ], "script": "base64:AAIFAAAAAAAAABYIAhIDCgEIEgASAwoBCBIAEgQKAgEIAAAAFgEAAAAHZ2V0Qm9vbAAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgcBAAAACWlzVGVzdEVudgAAAAAJAQAAAAdnZXRCb29sAAAAAQIAAAAHVEVTVEVOVgEAAAAXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAAAAAgAAABRzdGF0aWNfb3JhY2xlQWRkcmVzcwEAAAAWc3RhdGljS2V5X2l0ZW1zQWRkcmVzcwAAAAACAAAAE3N0YXRpY19pdGVtc0FkZHJlc3MBAAAAHnN0YXRpY0tleV9tdXRhbnRGYXJtaW5nQWRkcmVzcwAAAAACAAAAG3N0YXRpY19tdXRhbnRGYXJtaW5nQWRkcmVzcwEAAAASc3RhdGljS2V5X2V4dHJhRmVlAAAAAAIAAAAPc3RhdGljX2V4dHJhRmVlAQAAABdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgAAAAACAAAAFHN0YXRpY19mZWVBZ2dyZWdhdG9yAQAAABBrZXlVbnN0YWtlSGVpZ2h0AAAAAgAAAAxhcnRlZmFjdE5hbWUAAAAKYXJ0ZWZhY3RJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAMYXJ0ZWZhY3ROYW1lAgAAAAFfBQAAAAphcnRlZmFjdElkAgAAAA9fdW5zdGFrZV9oZWlnaHQBAAAAEGtleUFydGVmYWN0T3duZXIAAAACAAAADGFydGVmYWN0TmFtZQAAAAVvd25lcgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAMYXJ0ZWZhY3ROYW1lAgAAAAFfBQAAAAVvd25lcgIAAAAGX293bmVyAQAAAAxrZXlGZWVkTGltaXQAAAABAAAABW93bmVyCQABLAAAAAICAAAABmxpbWl0XwUAAAAFb3duZXIAAAAACXN0YWtlYWJsZQkABEwAAAACAgAAAAhBUlQtTEFLRQkABEwAAAACAgAAAAlBUlQtWFRSRUUJAARMAAAAAgIAAAAJQVJULVhTT0NLCQAETAAAAAICAAAACkFSVC1YTUlTVEwFAAAAA25pbAEAAAAMdHJ5R2V0U3RyaW5nAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAANdHJ5R2V0SW50ZWdlcgAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQEAAAAXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAAAAAQAAAA9nZXRJdGVtc0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAAAAAEAAAAQZ2V0RmVlQWdncmVnYXRvcgAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAAAAAEAAAAXZ2V0TXV0YW50RmFybWluZ0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAAB5zdGF0aWNLZXlfbXV0YW50RmFybWluZ0FkZHJlc3MAAAAAAQAAAAhhc1N0cmluZwAAAAEAAAAFdmFsdWUEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnN0cmluZwUAAAAHJG1hdGNoMAUAAAAGc3RyaW5nCQAAAgAAAAECAAAAHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBAAAABWFzSW50AAAAAQAAAAV2YWx1ZQQAAAAHJG1hdGNoMAUAAAAFdmFsdWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAADaW50BQAAAAckbWF0Y2gwBQAAAANpbnQJAAACAAAAAQIAAAAZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEAAAAWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAAAAAEAAAAHcGF5bWVudAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAAHcGF5bWVudAAAAAdhc3NldElkCQAAAgAAAAECAAAAGVdDQVA6IFBsZWFzZSBhdHRhY2ggd2F2ZXMEAAAACWZlZUFtb3VudAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABJzdGF0aWNLZXlfZXh0cmFGZWUAAAAAAwkBAAAAAiE9AAAAAggFAAAAB3BheW1lbnQAAAAGYW1vdW50BQAAAAlmZWVBbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAHFdDQVA6IFBsZWFzZSBhdHRhY2ggZXhhY3RseSAJAAGkAAAAAQUAAAAJZmVlQW1vdW50AgAAABMgYW1vdW50IG9mIHdhdmVsZXRzCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABBnZXRGZWVBZ2dyZWdhdG9yAAAAAAUAAAAJZmVlQW1vdW50BQAAAAR1bml0BQAAAANuaWwBAAAAEGl0ZW1Jc0luQ29vbERvd24AAAACAAAADGFydGVmYWN0TmFtZQAAAAphcnRlZmFjdElkBAAAABF1bnN0YWtlSGVpZ2h0TGFzdAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAQa2V5VW5zdGFrZUhlaWdodAAAAAIFAAAA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", "height": 3317488, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 5 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | func getBool (key) = match getBoolean(this, key) { | |
5 | + | case b: Boolean => | |
6 | + | b | |
7 | + | case _ => | |
8 | + | false | |
9 | + | } | |
10 | + | ||
11 | + | ||
12 | + | func isTestEnv () = getBool("TESTENV") | |
13 | + | ||
14 | + | ||
15 | + | func staticKey_oracleAddress () = "static_oracleAddress" | |
16 | + | ||
17 | + | ||
18 | + | func staticKey_itemsAddress () = "static_itemsAddress" | |
19 | + | ||
20 | + | ||
21 | + | func staticKey_mutantFarmingAddress () = "static_mutantFarmingAddress" | |
22 | + | ||
23 | + | ||
24 | + | func staticKey_extraFee () = "static_extraFee" | |
25 | + | ||
26 | + | ||
27 | + | func staticKey_feeAggregator () = "static_feeAggregator" | |
28 | + | ||
29 | + | ||
30 | + | func keyUnstakeHeight (artefactName,artefactId) = (((artefactName + "_") + artefactId) + "_unstake_height") | |
31 | + | ||
32 | + | ||
33 | + | func keyArtefactOwner (artefactName,owner) = (((artefactName + "_") + owner) + "_owner") | |
34 | + | ||
35 | + | ||
36 | + | func keyFeedLimit (owner) = ("limit_" + owner) | |
37 | + | ||
38 | + | ||
39 | + | let stakeable = ["ART-LAKE", "ART-XTREE", "ART-XSOCK", "ART-XMISTL"] | |
40 | + | ||
41 | + | func tryGetString (key) = match getString(this, key) { | |
42 | + | case a: String => | |
43 | + | a | |
44 | + | case _ => | |
45 | + | "" | |
46 | + | } | |
47 | + | ||
48 | + | ||
49 | + | func tryGetInteger (key) = match getInteger(this, key) { | |
50 | + | case a: Int => | |
51 | + | a | |
52 | + | case _ => | |
53 | + | 0 | |
54 | + | } | |
55 | + | ||
56 | + | ||
57 | + | func tryGetStringExternal (address,key) = match getString(address, key) { | |
58 | + | case a: String => | |
59 | + | a | |
60 | + | case _ => | |
61 | + | "" | |
62 | + | } | |
63 | + | ||
64 | + | ||
65 | + | func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress()))) | |
66 | + | ||
67 | + | ||
68 | + | func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress()))) | |
69 | + | ||
70 | + | ||
71 | + | func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator()))) | |
72 | + | ||
73 | + | ||
74 | + | func getMutantFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_mutantFarmingAddress()))) | |
75 | + | ||
76 | + | ||
77 | + | func asString (value) = match value { | |
78 | + | case string: String => | |
79 | + | string | |
80 | + | case _ => | |
81 | + | throw("wrong type, expected: String") | |
82 | + | } | |
83 | + | ||
84 | + | ||
85 | + | func asInt (value) = match value { | |
86 | + | case int: Int => | |
87 | + | int | |
88 | + | case _ => | |
89 | + | throw("wrong type, expected: Int") | |
90 | + | } | |
91 | + | ||
92 | + | ||
93 | + | func checkAdditionalPayment (payment) = if (isDefined(payment.assetId)) | |
94 | + | then throw("WCAP: Please attach waves") | |
95 | + | else { | |
96 | + | let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee()) | |
97 | + | if ((payment.amount != feeAmount)) | |
98 | + | then throw((("WCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets")) | |
99 | + | else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)] | |
100 | + | } | |
101 | + | ||
102 | + | ||
103 | + | func itemIsInCoolDown (artefactName,artefactId) = { | |
104 | + | let unstakeHeightLast = tryGetInteger(keyUnstakeHeight(artefactName, artefactId)) | |
105 | + | let cooldownPeriod = 240 | |
106 | + | if ((height > (unstakeHeightLast + cooldownPeriod))) | |
107 | + | then false | |
108 | + | else true | |
109 | + | } | |
110 | + | ||
111 | + | ||
112 | + | @Callable(i) | |
113 | + | func configureOracle (oracle) = if ((i.caller != this)) | |
114 | + | then throw("admin only") | |
115 | + | else [StringEntry(staticKey_oracleAddress(), oracle)] | |
116 | + | ||
117 | + | ||
118 | + | ||
119 | + | @Callable(i) | |
120 | + | func stakeItem () = { | |
121 | + | let validPayment = checkAdditionalPayment(i.payments[1]) | |
122 | + | if (!(if ((size(i.payments) == 2)) | |
123 | + | then (i.payments[0].amount == 1) | |
124 | + | else false)) | |
125 | + | then throw("Invalid payment") | |
126 | + | else { | |
127 | + | let assetId = value(i.payments[0].assetId) | |
128 | + | let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil)) | |
129 | + | if ((artefactName == artefactName)) | |
130 | + | then if (!(containsElement(stakeable, artefactName))) | |
131 | + | then throw("You can't stake this artafect") | |
132 | + | else if (itemIsInCoolDown(artefactName, toBase58String(assetId))) | |
133 | + | then throw("Item can't be staked yet, it's in cooldown") | |
134 | + | else { | |
135 | + | let invoker = toString(i.caller) | |
136 | + | let artefactId = tryGetString(keyArtefactOwner(artefactName, invoker)) | |
137 | + | if ((artefactId != "")) | |
138 | + | then throw(("You are already staking " + artefactName)) | |
139 | + | else { | |
140 | + | let boostDuck = if ((artefactName == "ART-LAKE")) | |
141 | + | then invoke(getItemsAddress(), "manipulateBoostAccount", [2, invoker], nil) | |
142 | + | else if ((artefactName == "ART-XTREE")) | |
143 | + | then invoke(getItemsAddress(), "manipulateBoostAccount", [3, invoker], nil) | |
144 | + | else nil | |
145 | + | if ((boostDuck == boostDuck)) | |
146 | + | then ([StringEntry(keyArtefactOwner(artefactName, invoker), toBase58String(assetId))] ++ validPayment) | |
147 | + | else throw("Strict value is not equal to itself.") | |
148 | + | } | |
149 | + | } | |
150 | + | else throw("Strict value is not equal to itself.") | |
151 | + | } | |
152 | + | } | |
153 | + | ||
154 | + | ||
155 | + | ||
156 | + | @Callable(i) | |
157 | + | func unstakeItem (artefactName) = { | |
158 | + | let validPayment = checkAdditionalPayment(i.payments[0]) | |
159 | + | if (!(containsElement(stakeable, artefactName))) | |
160 | + | then throw("This artefact doesn't exist") | |
161 | + | else { | |
162 | + | let invoker = toString(i.caller) | |
163 | + | let artefactId = tryGetString(keyArtefactOwner(artefactName, invoker)) | |
164 | + | if ((artefactId == "ART-XSOCK")) | |
165 | + | then throw("You can not unstake ART-XSOCK anymore") | |
166 | + | else if ((artefactId == "")) | |
167 | + | then throw(("You didnt stake " + artefactName)) | |
168 | + | else { | |
169 | + | let boostDuck = if ((artefactName == "ART-LAKE")) | |
170 | + | then invoke(getItemsAddress(), "manipulateBoostAccount", [-2, invoker], nil) | |
171 | + | else if ((artefactName == "ART-XTREE")) | |
172 | + | then invoke(getItemsAddress(), "manipulateBoostAccount", [-3, invoker], nil) | |
173 | + | else nil | |
174 | + | if ((boostDuck == boostDuck)) | |
175 | + | then ([IntegerEntry(keyUnstakeHeight(artefactName, artefactId), height), ScriptTransfer(i.caller, 1, fromBase58String(artefactId)), DeleteEntry(keyArtefactOwner(artefactName, invoker))] ++ validPayment) | |
176 | + | else throw("Strict value is not equal to itself.") | |
177 | + | } | |
178 | + | } | |
179 | + | } | |
180 | + | ||
181 | + | ||
182 | + | ||
183 | + | @Callable(i) | |
184 | + | func oneTimeUseFeed () = { | |
185 | + | let validPayment = checkAdditionalPayment(i.payments[1]) | |
186 | + | if (!(if ((size(i.payments) == 2)) | |
187 | + | then (i.payments[0].amount == 1) | |
188 | + | else false)) | |
189 | + | then throw("Invalid payment") | |
190 | + | else { | |
191 | + | let assetId = value(i.payments[0].assetId) | |
192 | + | let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil)) | |
193 | + | if ((artefactName == artefactName)) | |
194 | + | then if (!(contains(artefactName, "ART-FEED"))) | |
195 | + | then throw("You can't use this artafect to earn feedlimit!") | |
196 | + | else { | |
197 | + | let invoker = toString(i.caller) | |
198 | + | let amount = drop(artefactName, 8) | |
199 | + | let intValue = parseIntValue(amount) | |
200 | + | let topup = invoke(getMutantFarmingAddress(), "topUpReward", ["FEED", (intValue / 2)], nil) | |
201 | + | if ((topup == topup)) | |
202 | + | then ([IntegerEntry(keyFeedLimit(invoker), (tryGetInteger(keyFeedLimit(invoker)) + intValue)), Burn(assetId, 1)] ++ validPayment) | |
203 | + | else throw("Strict value is not equal to itself.") | |
204 | + | } | |
205 | + | else throw("Strict value is not equal to itself.") | |
206 | + | } | |
207 | + | } | |
208 | + | ||
209 | + | ||
210 | + | ||
211 | + | @Callable(i) | |
212 | + | func addFeedLimit (amount,address) = if ((i.caller != getMutantFarmingAddress())) | |
213 | + | then throw("admin only") | |
214 | + | else [IntegerEntry(keyFeedLimit(address), (tryGetInteger(keyFeedLimit(address)) + amount))] | |
215 | + | ||
216 | + | ||
217 | + | @Verifier(tx) | |
218 | + | func verify () = if (isTestEnv()) | |
219 | + | then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
220 | + | else { | |
221 | + | let firstUser = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4' | |
222 | + | let secondUser = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8' | |
223 | + | let thirdUser = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3' | |
224 | + | let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser)) | |
225 | + | then 1 | |
226 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser)) | |
227 | + | then 1 | |
228 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser)) | |
229 | + | then 1 | |
230 | + | else 0 | |
231 | + | let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser)) | |
232 | + | then 1 | |
233 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser)) | |
234 | + | then 1 | |
235 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser)) | |
236 | + | then 1 | |
237 | + | else 0 | |
238 | + | let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser)) | |
239 | + | then 1 | |
240 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser)) | |
241 | + | then 1 | |
242 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser)) | |
243 | + | then 1 | |
244 | + | else 0 | |
245 | + | let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned) | |
246 | + | match tx { | |
247 | + | case _ => | |
248 | + | (signaturesCount >= 2) | |
249 | + | } | |
250 | + | } | |
251 | + |
github/deemru/w8io/026f985 21.01 ms ◑