tx · HLrdFpXRNpLHu8hmniA4zvZ2ecxbyn9coMKwEMPKtgge

3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr:  -0.01400000 Waves

2022.04.15 11:47 [2009451] smart account 3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr > SELF 0.00000000 Waves

{ "type": 13, "id": "HLrdFpXRNpLHu8hmniA4zvZ2ecxbyn9coMKwEMPKtgge", "fee": 1400000, "feeAssetId": null, "timestamp": 1650012471178, "version": 1, "sender": "3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr", "senderPublicKey": "EtZZHS4uqNXY5WPneZ8jY2aA95peXwthJVLzAMxMp379", "proofs": [ "4o8pTBZDWCHkqf8UcPTumZzK6C7mTZUVdMpXqb9u49sckrngjZXUZkHGSgZQJk1MeZvSjotHkk1n31R9RVhLQMcA" ], "script": "base64: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bAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAlrZXlTdGF0dXMAAAABBQAAAAdhc3NldElkCQEAAAAQdmVyaWZpZWRUb1N0YXR1cwAAAAEFAAAACHZlcmlmaWVkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACXNldEFkbWlucwAAAAEAAAAMYWRtaW5QdWJLZXlzBAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9rZXlBZG1pblB1YktleXMAAAAACQAEuQAAAAIFAAAADGFkbWluUHViS2V5cwUAAAADU0VQBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACnNldE1hbmFnZXIAAAABAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAAACAAAAAQIAAAASTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAVoYXNQTQUAAAAFaGFzUE0EAAAAB2NoZWNrUE0DCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkBAAAABXZhbHVlAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAHY2hlY2tQTQUAAAAHY2hlY2tQTQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAACcG0JAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAA90YXJnZXRQdWJsaWNLZXkEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDAFAAAAAnBrAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5CQAAAgAAAAECAAAAC01hdGNoIGVycm9yCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAPdGFyZ2V0UHVibGljS2V5qFXlFQ==", "chainId": 84, "height": 2009451, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3Be7trJ81xMmtaH8h9b8qGmFjWrtXeF8wQ7ahigW29yt Next: AhcPUACPcS4xWbNT7HfAtBbaYtycEizqajqp1gUg6BKd Diff:
OldNewDifferences
44 let SEP = "__"
55
66 let EMPTY = ""
7-
8-let statusVerified = 2
9-
10-let statusUnverified = 0
11-
12-let labelCommunityVerified = "COMMUNITY_VERIFIED"
13-
14-let labelPoolsLp = "POOLS_LP"
15-
16-let defaultLabels = [labelCommunityVerified, labelPoolsLp]
177
188 func throwPD () = throw("Permission denied")
199
3020 func keyAdminPubKeys () = "%s__adminPubKeys"
3121
3222
33-func keyUserPoolsContract () = "%s__userPoolsContract"
34-
35-
3623 func keyCreated (assetId) = (("created_<" + assetId) + ">")
3724
3825
4330
4431
4532 func keyStatus (assetId) = (("status_<" + assetId) + ">")
46-
47-
48-func keyAssetPoolsNumber (assetId) = makeString(["%s%s", "pools", assetId], SEP)
49-
50-
51-func keyTickerToAssetId (ticker) = makeString(["%s%s", "ticker2assetId", ticker], SEP)
52-
53-
54-func keyAssetIdToTicker (assetId) = makeString(["%s%s", "assetId2ticker", assetId], SEP)
55-
56-
57-func keyAmountAndPriceAssetsToLpAsset (amountAsset,priceAsset) = makeString(["%s%s%s", "amountAndPriceAssetsToLpAsset", amountAsset, priceAsset], SEP)
58-
59-
60-func keyLpAssetToAmountAndPriceAssets (lpAsset) = makeString(["%s%s", "lpAssetToAmountAndPriceAssets", lpAsset], SEP)
61-
62-
63-func keyAssetLabels (assetId) = makeString(["%s%s", "labels", assetId], SEP)
64-
65-
66-func keyLabels () = makeString(["%s", "labels"], SEP)
67-
68-
69-func isVerified (assetId) = (valueOrElse(getInteger(keyStatus(assetId)), statusUnverified) == statusVerified)
70-
71-
72-func getLabels () = match getString(keyLabels()) {
73- case s: String =>
74- if ((size(s) == 0))
75- then nil
76- else split(s, SEP)
77- case _ =>
78- nil
79-}
80-
81-
82-func getAssetLabels (assetId) = match getString(keyAssetLabels(assetId)) {
83- case s: String =>
84- if ((size(s) == 0))
85- then nil
86- else split(s, SEP)
87- case _ =>
88- nil
89-}
9033
9134
9235 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
14083
14184
14285 func verifiedToStatus (verified) = if (verified)
143- then statusVerified
144- else statusUnverified
145-
146-
147-func addLabelActions (assetId,label,throwOnError) = {
148- let labels = getLabels()
149- let assetLabels = getAssetLabels(assetId)
150- let checkLabel = if (containsElement(labels, label))
151- then true
152- else throw("Label doesn't exist")
153- if ((checkLabel == checkLabel))
154- then {
155- let newAssetLabels = if (containsElement(assetLabels, label))
156- then if (throwOnError)
157- then throw("Label has already been added")
158- else assetLabels
159- else (assetLabels :+ label)
160-[StringEntry(keyAssetLabels(assetId), makeString(newAssetLabels, SEP))]
161- }
162- else throw("Strict value is not equal to itself.")
163- }
164-
165-
166-func deleteLabelActions (assetId,label,throwOnError) = {
167- let assetLabels = getAssetLabels(assetId)
168- let newAssetLabels = if (containsElement(assetLabels, label))
169- then removeByIndex(assetLabels, value(indexOf(assetLabels, label)))
170- else if (throwOnError)
171- then throw("Label wasn't added")
172- else assetLabels
173-[StringEntry(keyAssetLabels(assetId), makeString(newAssetLabels, SEP))]
174- }
175-
176-
177-func setVerifiedActions (assetId,verified) = {
178- let labelCommunityVerifiedActions = if (verified)
179- then addLabelActions(assetId, labelCommunityVerified, false)
180- else deleteLabelActions(assetId, labelCommunityVerified, false)
181- ([IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))] ++ labelCommunityVerifiedActions)
182- }
183-
184-
185-func updateTickerActions (assetId,ticker) = {
186- let checkTicker = {
187- let linkedAssetIdOrUnit = getString(keyTickerToAssetId(ticker))
188- let tickerIsValid = if ((ticker != ""))
189- then if ((linkedAssetIdOrUnit == unit))
190- then true
191- else (value(linkedAssetIdOrUnit) == assetId)
192- else false
193- if (tickerIsValid)
194- then true
195- else throw("Invalid ticker")
196- }
197- if ((checkTicker == checkTicker))
198- then [StringEntry(keyAssetIdToTicker(assetId), ticker), StringEntry(keyTickerToAssetId(ticker), assetId)]
199- else throw("Strict value is not equal to itself.")
200- }
201-
202-
203-@Callable(i)
204-func constructor (userPoolsContract,labels) = {
205- let checkCaller = mustManager(i)
206- if ((checkCaller == checkCaller))
207- then {
208- let checksAddress = valueOrErrorMessage(addressFromString(userPoolsContract), "Invalid address")
209- if ((checksAddress == checksAddress))
210- then [StringEntry(keyUserPoolsContract(), userPoolsContract), StringEntry(keyLabels(), makeString((defaultLabels ++ labels), SEP))]
211- else throw("Strict value is not equal to itself.")
212- }
213- else throw("Strict value is not equal to itself.")
214- }
215-
216-
217-
218-@Callable(i)
219-func addAssetsLink (amountAsset,priceAsset,lpAsset) = {
220- let checkCaller = mustAdmin(i)
221- if ((checkCaller == checkCaller))
222- then [StringEntry(keyAmountAndPriceAssetsToLpAsset(amountAsset, priceAsset), lpAsset), StringEntry(keyLpAssetToAmountAndPriceAssets(lpAsset), makeString([amountAsset, priceAsset], SEP))]
223- else throw("Strict value is not equal to itself.")
224- }
225-
226-
227-
228-@Callable(i)
229-func increaseAssetPoolsNumber (assetId) = {
230- let checkCaller = mustAdmin(i)
231- if ((checkCaller == checkCaller))
232- then {
233- let assetPoolsNumberKey = keyAssetPoolsNumber(assetId)
234- let assetPoolsNumber = valueOrElse(getInteger(assetPoolsNumberKey), 0)
235-[IntegerEntry(assetPoolsNumberKey, (assetPoolsNumber + 1))]
236- }
237- else throw("Strict value is not equal to itself.")
238- }
239-
240-
241-
242-@Callable(i)
243-func createLabel (label) = {
244- let labels = getLabels()
245- let checkCaller = mustManager(i)
246- if ((checkCaller == checkCaller))
247- then {
248- let checkLabel = [if (!(contains(label, SEP)))
249- then true
250- else throw("Invalid label name"), if (!(containsElement(labels, label)))
251- then true
252- else throw("Label exists")]
253- if ((checkLabel == checkLabel))
254- then [StringEntry(keyLabels(), makeString((labels :+ label), SEP))]
255- else throw("Strict value is not equal to itself.")
256- }
257- else throw("Strict value is not equal to itself.")
258- }
259-
260-
261-
262-@Callable(i)
263-func dropLabel (label) = {
264- let labels = getLabels()
265- let checkCaller = mustManager(i)
266- if ((checkCaller == checkCaller))
267- then {
268- let checkLabel = if (containsElement(labels, label))
269- then true
270- else throw("Label doesn't exist")
271- if ((checkLabel == checkLabel))
272- then [StringEntry(keyLabels(), makeString(removeByIndex(labels, value(indexOf(labels, label))), SEP))]
273- else throw("Strict value is not equal to itself.")
274- }
275- else throw("Strict value is not equal to itself.")
276- }
277-
278-
279-
280-@Callable(i)
281-func addLabel (assetId,label) = {
282- let checkCaller = mustAdmin(i)
283- if ((checkCaller == checkCaller))
284- then addLabelActions(assetId, label, true)
285- else throw("Strict value is not equal to itself.")
286- }
287-
288-
289-
290-@Callable(i)
291-func deleteLabel (assetId,label) = {
292- let checkCaller = mustAdmin(i)
293- if ((checkCaller == checkCaller))
294- then deleteLabelActions(assetId, label, true)
295- else throw("Strict value is not equal to itself.")
296- }
297-
298-
299-
300-@Callable(i)
301-func updateTicker (assetId,ticker) = {
302- let checkCaller = mustAdmin(i)
303- if ((checkCaller == checkCaller))
304- then {
305- let checkAsset = if (isCreated(assetId))
306- then true
307- else throwNoAsset()
308- if ((checkAsset == checkAsset))
309- then updateTickerActions(assetId, ticker)
310- else throw("Strict value is not equal to itself.")
311- }
312- else throw("Strict value is not equal to itself.")
313- }
314-
315-
316-
317-@Callable(i)
318-func deleteTicker (assetId) = {
319- let checkCaller = mustAdmin(i)
320- if ((checkCaller == checkCaller))
321- then {
322- let ticker = valueOrErrorMessage(getString(keyAssetIdToTicker(assetId)), "Invalid asset")
323-[DeleteEntry(keyAssetIdToTicker(assetId)), DeleteEntry(keyTickerToAssetId(ticker))]
324- }
325- else throw("Strict value is not equal to itself.")
326- }
327-
86+ then 2
87+ else 0
32888
32989
33090 @Callable(i)
341101 let setLogoActions = if ((logo == ""))
342102 then nil
343103 else [StringEntry(keyLogo(assetId), logo)]
344- $Tuple2(((([BooleanEntry(keyCreated(assetId), true)] ++ updateTickerActions(assetId, ticker)) ++ setLogoActions) ++ setVerifiedActions(assetId, verified)), isCreatedNow)
104+ $Tuple2(([BooleanEntry(keyCreated(assetId), true), StringEntry(keyTicker(assetId), ticker), IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))] ++ setLogoActions), isCreatedNow)
345105 }
346106 else throw("Strict value is not equal to itself.")
347107 }
348108 else throw("Strict value is not equal to itself.")
349109 }
110+ else throw("Strict value is not equal to itself.")
111+ }
112+
113+
114+
115+@Callable(i)
116+func setTicker (assetId,ticker) = {
117+ let checks = [mustAdmin(i), if (isCreated(assetId))
118+ then true
119+ else throwNoAsset()]
120+ if ((checks == checks))
121+ then [StringEntry(keyTicker(assetId), ticker)]
350122 else throw("Strict value is not equal to itself.")
351123 }
352124
370142 then true
371143 else throwNoAsset()]
372144 if ((checks == checks))
373- then {
374- let priceAssets = match invoke(addressFromStringValue(getStringValue(keyUserPoolsContract())), "priceAssetsREADONLY", nil, nil) {
375- case assets: List[Any] =>
376- let checkPriceAssetsSize = if ((size(assets) > 0))
377- then true
378- else throw("Invalid price assets")
379- if ((checkPriceAssetsSize == checkPriceAssetsSize))
380- then assets
381- else throw("Strict value is not equal to itself.")
382- case _ =>
383- throw("Incorrect invoke result")
384- }
385- func cb (acc,item) = {
386- let priceAssetId = match item {
387- case s: String =>
388- s
389- case _ =>
390- throw("Invalid price asset")
391- }
392- let lpAssetIdOrUnit = getString(keyAmountAndPriceAssetsToLpAsset(assetId, priceAssetId))
393- let action = if ((lpAssetIdOrUnit == unit))
394- then nil
395- else setVerifiedActions(value(lpAssetIdOrUnit), verified)
396- (acc ++ action)
397- }
398-
399- let tokensActions = {
400- let $l = priceAssets
401- let $s = size($l)
402- let $acc0 = setVerifiedActions(assetId, verified)
403- func $f0_1 ($a,$i) = if (($i >= $s))
404- then $a
405- else cb($a, $l[$i])
406-
407- func $f0_2 ($a,$i) = if (($i >= $s))
408- then $a
409- else throw("List size exceeds 10")
410-
411- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
412- }
413- $Tuple2(tokensActions, unit)
414- }
145+ then [IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))]
415146 else throw("Strict value is not equal to itself.")
416147 }
417148
461192 }
462193
463194
464-
465-@Callable(i)
466-func isVerifiedREADONLY (assetId) = $Tuple2(nil, isVerified(assetId))
467-
468-
469195 @Verifier(tx)
470196 func verify () = {
471197 let targetPublicKey = match managerPublicKeyOrUnit() {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let EMPTY = ""
7-
8-let statusVerified = 2
9-
10-let statusUnverified = 0
11-
12-let labelCommunityVerified = "COMMUNITY_VERIFIED"
13-
14-let labelPoolsLp = "POOLS_LP"
15-
16-let defaultLabels = [labelCommunityVerified, labelPoolsLp]
177
188 func throwPD () = throw("Permission denied")
199
2010
2111 func throwNoAsset () = throw("Asset doesn't exists")
2212
2313
2414 func keyManagerPublicKey () = "%s__managerPublicKey"
2515
2616
2717 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
2818
2919
3020 func keyAdminPubKeys () = "%s__adminPubKeys"
3121
3222
33-func keyUserPoolsContract () = "%s__userPoolsContract"
34-
35-
3623 func keyCreated (assetId) = (("created_<" + assetId) + ">")
3724
3825
3926 func keyLogo (assetId) = (("logo_<" + assetId) + ">")
4027
4128
4229 func keyTicker (assetId) = (("ticker_<" + assetId) + ">")
4330
4431
4532 func keyStatus (assetId) = (("status_<" + assetId) + ">")
46-
47-
48-func keyAssetPoolsNumber (assetId) = makeString(["%s%s", "pools", assetId], SEP)
49-
50-
51-func keyTickerToAssetId (ticker) = makeString(["%s%s", "ticker2assetId", ticker], SEP)
52-
53-
54-func keyAssetIdToTicker (assetId) = makeString(["%s%s", "assetId2ticker", assetId], SEP)
55-
56-
57-func keyAmountAndPriceAssetsToLpAsset (amountAsset,priceAsset) = makeString(["%s%s%s", "amountAndPriceAssetsToLpAsset", amountAsset, priceAsset], SEP)
58-
59-
60-func keyLpAssetToAmountAndPriceAssets (lpAsset) = makeString(["%s%s", "lpAssetToAmountAndPriceAssets", lpAsset], SEP)
61-
62-
63-func keyAssetLabels (assetId) = makeString(["%s%s", "labels", assetId], SEP)
64-
65-
66-func keyLabels () = makeString(["%s", "labels"], SEP)
67-
68-
69-func isVerified (assetId) = (valueOrElse(getInteger(keyStatus(assetId)), statusUnverified) == statusVerified)
70-
71-
72-func getLabels () = match getString(keyLabels()) {
73- case s: String =>
74- if ((size(s) == 0))
75- then nil
76- else split(s, SEP)
77- case _ =>
78- nil
79-}
80-
81-
82-func getAssetLabels (assetId) = match getString(keyAssetLabels(assetId)) {
83- case s: String =>
84- if ((size(s) == 0))
85- then nil
86- else split(s, SEP)
87- case _ =>
88- nil
89-}
9033
9134
9235 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
9336 case s: String =>
9437 fromBase58String(s)
9538 case _: Unit =>
9639 unit
9740 case _ =>
9841 throw("Match error")
9942 }
10043
10144
10245 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
10346 case s: String =>
10447 fromBase58String(s)
10548 case _: Unit =>
10649 unit
10750 case _ =>
10851 throw("Match error")
10952 }
11053
11154
11255 func mustManager (i) = match managerPublicKeyOrUnit() {
11356 case pk: ByteVector =>
11457 if ((i.callerPublicKey == pk))
11558 then true
11659 else throwPD()
11760 case _: Unit =>
11861 if ((i.caller == this))
11962 then true
12063 else throwPD()
12164 case _ =>
12265 throw("Match error")
12366 }
12467
12568
12669 func mustAdmin (i) = {
12770 let adminPKs = split(valueOrElse(getString(keyAdminPubKeys()), EMPTY), SEP)
12871 if (containsElement(adminPKs, toBase58String(i.callerPublicKey)))
12972 then true
13073 else {
13174 let isManager = mustManager(i)
13275 if ((isManager == isManager))
13376 then true
13477 else throw("Strict value is not equal to itself.")
13578 }
13679 }
13780
13881
13982 func isCreated (assetId) = valueOrElse(getBoolean(keyCreated(assetId)), false)
14083
14184
14285 func verifiedToStatus (verified) = if (verified)
143- then statusVerified
144- else statusUnverified
145-
146-
147-func addLabelActions (assetId,label,throwOnError) = {
148- let labels = getLabels()
149- let assetLabels = getAssetLabels(assetId)
150- let checkLabel = if (containsElement(labels, label))
151- then true
152- else throw("Label doesn't exist")
153- if ((checkLabel == checkLabel))
154- then {
155- let newAssetLabels = if (containsElement(assetLabels, label))
156- then if (throwOnError)
157- then throw("Label has already been added")
158- else assetLabels
159- else (assetLabels :+ label)
160-[StringEntry(keyAssetLabels(assetId), makeString(newAssetLabels, SEP))]
161- }
162- else throw("Strict value is not equal to itself.")
163- }
164-
165-
166-func deleteLabelActions (assetId,label,throwOnError) = {
167- let assetLabels = getAssetLabels(assetId)
168- let newAssetLabels = if (containsElement(assetLabels, label))
169- then removeByIndex(assetLabels, value(indexOf(assetLabels, label)))
170- else if (throwOnError)
171- then throw("Label wasn't added")
172- else assetLabels
173-[StringEntry(keyAssetLabels(assetId), makeString(newAssetLabels, SEP))]
174- }
175-
176-
177-func setVerifiedActions (assetId,verified) = {
178- let labelCommunityVerifiedActions = if (verified)
179- then addLabelActions(assetId, labelCommunityVerified, false)
180- else deleteLabelActions(assetId, labelCommunityVerified, false)
181- ([IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))] ++ labelCommunityVerifiedActions)
182- }
183-
184-
185-func updateTickerActions (assetId,ticker) = {
186- let checkTicker = {
187- let linkedAssetIdOrUnit = getString(keyTickerToAssetId(ticker))
188- let tickerIsValid = if ((ticker != ""))
189- then if ((linkedAssetIdOrUnit == unit))
190- then true
191- else (value(linkedAssetIdOrUnit) == assetId)
192- else false
193- if (tickerIsValid)
194- then true
195- else throw("Invalid ticker")
196- }
197- if ((checkTicker == checkTicker))
198- then [StringEntry(keyAssetIdToTicker(assetId), ticker), StringEntry(keyTickerToAssetId(ticker), assetId)]
199- else throw("Strict value is not equal to itself.")
200- }
201-
202-
203-@Callable(i)
204-func constructor (userPoolsContract,labels) = {
205- let checkCaller = mustManager(i)
206- if ((checkCaller == checkCaller))
207- then {
208- let checksAddress = valueOrErrorMessage(addressFromString(userPoolsContract), "Invalid address")
209- if ((checksAddress == checksAddress))
210- then [StringEntry(keyUserPoolsContract(), userPoolsContract), StringEntry(keyLabels(), makeString((defaultLabels ++ labels), SEP))]
211- else throw("Strict value is not equal to itself.")
212- }
213- else throw("Strict value is not equal to itself.")
214- }
215-
216-
217-
218-@Callable(i)
219-func addAssetsLink (amountAsset,priceAsset,lpAsset) = {
220- let checkCaller = mustAdmin(i)
221- if ((checkCaller == checkCaller))
222- then [StringEntry(keyAmountAndPriceAssetsToLpAsset(amountAsset, priceAsset), lpAsset), StringEntry(keyLpAssetToAmountAndPriceAssets(lpAsset), makeString([amountAsset, priceAsset], SEP))]
223- else throw("Strict value is not equal to itself.")
224- }
225-
226-
227-
228-@Callable(i)
229-func increaseAssetPoolsNumber (assetId) = {
230- let checkCaller = mustAdmin(i)
231- if ((checkCaller == checkCaller))
232- then {
233- let assetPoolsNumberKey = keyAssetPoolsNumber(assetId)
234- let assetPoolsNumber = valueOrElse(getInteger(assetPoolsNumberKey), 0)
235-[IntegerEntry(assetPoolsNumberKey, (assetPoolsNumber + 1))]
236- }
237- else throw("Strict value is not equal to itself.")
238- }
239-
240-
241-
242-@Callable(i)
243-func createLabel (label) = {
244- let labels = getLabels()
245- let checkCaller = mustManager(i)
246- if ((checkCaller == checkCaller))
247- then {
248- let checkLabel = [if (!(contains(label, SEP)))
249- then true
250- else throw("Invalid label name"), if (!(containsElement(labels, label)))
251- then true
252- else throw("Label exists")]
253- if ((checkLabel == checkLabel))
254- then [StringEntry(keyLabels(), makeString((labels :+ label), SEP))]
255- else throw("Strict value is not equal to itself.")
256- }
257- else throw("Strict value is not equal to itself.")
258- }
259-
260-
261-
262-@Callable(i)
263-func dropLabel (label) = {
264- let labels = getLabels()
265- let checkCaller = mustManager(i)
266- if ((checkCaller == checkCaller))
267- then {
268- let checkLabel = if (containsElement(labels, label))
269- then true
270- else throw("Label doesn't exist")
271- if ((checkLabel == checkLabel))
272- then [StringEntry(keyLabels(), makeString(removeByIndex(labels, value(indexOf(labels, label))), SEP))]
273- else throw("Strict value is not equal to itself.")
274- }
275- else throw("Strict value is not equal to itself.")
276- }
277-
278-
279-
280-@Callable(i)
281-func addLabel (assetId,label) = {
282- let checkCaller = mustAdmin(i)
283- if ((checkCaller == checkCaller))
284- then addLabelActions(assetId, label, true)
285- else throw("Strict value is not equal to itself.")
286- }
287-
288-
289-
290-@Callable(i)
291-func deleteLabel (assetId,label) = {
292- let checkCaller = mustAdmin(i)
293- if ((checkCaller == checkCaller))
294- then deleteLabelActions(assetId, label, true)
295- else throw("Strict value is not equal to itself.")
296- }
297-
298-
299-
300-@Callable(i)
301-func updateTicker (assetId,ticker) = {
302- let checkCaller = mustAdmin(i)
303- if ((checkCaller == checkCaller))
304- then {
305- let checkAsset = if (isCreated(assetId))
306- then true
307- else throwNoAsset()
308- if ((checkAsset == checkAsset))
309- then updateTickerActions(assetId, ticker)
310- else throw("Strict value is not equal to itself.")
311- }
312- else throw("Strict value is not equal to itself.")
313- }
314-
315-
316-
317-@Callable(i)
318-func deleteTicker (assetId) = {
319- let checkCaller = mustAdmin(i)
320- if ((checkCaller == checkCaller))
321- then {
322- let ticker = valueOrErrorMessage(getString(keyAssetIdToTicker(assetId)), "Invalid asset")
323-[DeleteEntry(keyAssetIdToTicker(assetId)), DeleteEntry(keyTickerToAssetId(ticker))]
324- }
325- else throw("Strict value is not equal to itself.")
326- }
327-
86+ then 2
87+ else 0
32888
32989
33090 @Callable(i)
33191 func createOrUpdate (assetId,ticker,logo,verified) = {
33292 let checkCaller = mustAdmin(i)
33393 if ((checkCaller == checkCaller))
33494 then {
33595 let checkAssetId = valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "Invalid asset ID")
33696 if ((checkAssetId == checkAssetId))
33797 then {
33898 let isCreatedNow = !(isCreated(assetId))
33999 if ((isCreatedNow == isCreatedNow))
340100 then {
341101 let setLogoActions = if ((logo == ""))
342102 then nil
343103 else [StringEntry(keyLogo(assetId), logo)]
344- $Tuple2(((([BooleanEntry(keyCreated(assetId), true)] ++ updateTickerActions(assetId, ticker)) ++ setLogoActions) ++ setVerifiedActions(assetId, verified)), isCreatedNow)
104+ $Tuple2(([BooleanEntry(keyCreated(assetId), true), StringEntry(keyTicker(assetId), ticker), IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))] ++ setLogoActions), isCreatedNow)
345105 }
346106 else throw("Strict value is not equal to itself.")
347107 }
348108 else throw("Strict value is not equal to itself.")
349109 }
110+ else throw("Strict value is not equal to itself.")
111+ }
112+
113+
114+
115+@Callable(i)
116+func setTicker (assetId,ticker) = {
117+ let checks = [mustAdmin(i), if (isCreated(assetId))
118+ then true
119+ else throwNoAsset()]
120+ if ((checks == checks))
121+ then [StringEntry(keyTicker(assetId), ticker)]
350122 else throw("Strict value is not equal to itself.")
351123 }
352124
353125
354126
355127 @Callable(i)
356128 func setLogo (assetId,logo) = {
357129 let checks = [mustAdmin(i), if (isCreated(assetId))
358130 then true
359131 else throwNoAsset()]
360132 if ((checks == checks))
361133 then [StringEntry(keyLogo(assetId), logo)]
362134 else throw("Strict value is not equal to itself.")
363135 }
364136
365137
366138
367139 @Callable(i)
368140 func setVerified (assetId,verified) = {
369141 let checks = [mustAdmin(i), if (isCreated(assetId))
370142 then true
371143 else throwNoAsset()]
372144 if ((checks == checks))
373- then {
374- let priceAssets = match invoke(addressFromStringValue(getStringValue(keyUserPoolsContract())), "priceAssetsREADONLY", nil, nil) {
375- case assets: List[Any] =>
376- let checkPriceAssetsSize = if ((size(assets) > 0))
377- then true
378- else throw("Invalid price assets")
379- if ((checkPriceAssetsSize == checkPriceAssetsSize))
380- then assets
381- else throw("Strict value is not equal to itself.")
382- case _ =>
383- throw("Incorrect invoke result")
384- }
385- func cb (acc,item) = {
386- let priceAssetId = match item {
387- case s: String =>
388- s
389- case _ =>
390- throw("Invalid price asset")
391- }
392- let lpAssetIdOrUnit = getString(keyAmountAndPriceAssetsToLpAsset(assetId, priceAssetId))
393- let action = if ((lpAssetIdOrUnit == unit))
394- then nil
395- else setVerifiedActions(value(lpAssetIdOrUnit), verified)
396- (acc ++ action)
397- }
398-
399- let tokensActions = {
400- let $l = priceAssets
401- let $s = size($l)
402- let $acc0 = setVerifiedActions(assetId, verified)
403- func $f0_1 ($a,$i) = if (($i >= $s))
404- then $a
405- else cb($a, $l[$i])
406-
407- func $f0_2 ($a,$i) = if (($i >= $s))
408- then $a
409- else throw("List size exceeds 10")
410-
411- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
412- }
413- $Tuple2(tokensActions, unit)
414- }
145+ then [IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))]
415146 else throw("Strict value is not equal to itself.")
416147 }
417148
418149
419150
420151 @Callable(i)
421152 func setAdmins (adminPubKeys) = {
422153 let checkCaller = mustManager(i)
423154 if ((checkCaller == checkCaller))
424155 then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
425156 else throw("Strict value is not equal to itself.")
426157 }
427158
428159
429160
430161 @Callable(i)
431162 func setManager (pendingManagerPublicKey) = {
432163 let checkCaller = mustManager(i)
433164 if ((checkCaller == checkCaller))
434165 then {
435166 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
436167 if ((checkManagerPublicKey == checkManagerPublicKey))
437168 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
438169 else throw("Strict value is not equal to itself.")
439170 }
440171 else throw("Strict value is not equal to itself.")
441172 }
442173
443174
444175
445176 @Callable(i)
446177 func confirmManager () = {
447178 let pm = pendingManagerPublicKeyOrUnit()
448179 let hasPM = if (isDefined(pm))
449180 then true
450181 else throw("No pending manager")
451182 if ((hasPM == hasPM))
452183 then {
453184 let checkPM = if ((i.callerPublicKey == value(pm)))
454185 then true
455186 else throw("You are not pending manager")
456187 if ((checkPM == checkPM))
457188 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
458189 else throw("Strict value is not equal to itself.")
459190 }
460191 else throw("Strict value is not equal to itself.")
461192 }
462193
463194
464-
465-@Callable(i)
466-func isVerifiedREADONLY (assetId) = $Tuple2(nil, isVerified(assetId))
467-
468-
469195 @Verifier(tx)
470196 func verify () = {
471197 let targetPublicKey = match managerPublicKeyOrUnit() {
472198 case pk: ByteVector =>
473199 pk
474200 case _: Unit =>
475201 tx.senderPublicKey
476202 case _ =>
477203 throw("Match error")
478204 }
479205 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
480206 }
481207

github/deemru/w8io/873ac7e 
50.76 ms