tx · EkMZZLkUaGoDBV6t3FsxRLdybhLoWFGopBezN1P96oCQ

3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr:  -0.01400000 Waves

2022.04.13 13:24 [2006680] smart account 3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr > SELF 0.00000000 Waves

{ "type": 13, "id": "EkMZZLkUaGoDBV6t3FsxRLdybhLoWFGopBezN1P96oCQ", "fee": 1400000, "feeAssetId": null, "timestamp": 1649845467823, "version": 1, "sender": "3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr", "senderPublicKey": "EtZZHS4uqNXY5WPneZ8jY2aA95peXwthJVLzAMxMp379", "proofs": [ "5meDr9JH3Sr1Gc2w2PKnYrYa1aMJWZp4X9SC8yPLmDasfvAiQjvQ6ghH75RUybu7S49EYBeLKpWA5GwuvdUeCk5g" ], "script": "base64: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BUVNUFRZBQAAAANTRVADCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAIYWRtaW5QS3MJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BgQAAAAJaXNNYW5hZ2VyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAlpc01hbmFnZXIFAAAACWlzTWFuYWdlcgYJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQAAAAlpc0NyZWF0ZWQAAAABAAAAB2Fzc2V0SWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQgAAAAAQkBAAAACmtleUNyZWF0ZWQAAAABBQAAAAdhc3NldElkBwEAAAAQdmVyaWZpZWRUb1N0YXR1cwAAAAEAAAAIdmVyaWZpZWQDBQAAAAh2ZXJpZmllZAAAAAAAAAAAAgAAAAAAAAAAAAAAABAAAAABaQEAAAALY29uc3RydWN0b3IAAAABAAAAEXVzZXJQb29sc0NvbnRyYWN0BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAAA1jaGVja3NBZGRyZXNzCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAABF1c2VyUG9vbHNDb250cmFjdAMJAAAAAAAAAgUAAAANY2hlY2tzQWRkcmVzcwUAAAANY2hlY2tzQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAUa2V5VXNlclBvb2xzQ29udHJhY3QAAAAABQAAABF1c2VyUG9vbHNDb250cmFjdAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAANYWRkQXNzZXRzTGluawAAAAMAAAALYW1vdW50QXNzZXQAAAAKcHJpY2VBc3NldAAAAAdscEFzc2V0BAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAga2V5QW1vdW50QW5kUHJpY2VBc3NldHNUb0xwQXNzZXQAAAACBQAAAAthbW91bnRBc3NldAUAAAAKcHJpY2VBc3NldAUAAAAHbHBBc3NldAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAga2V5THBBc3NldFRvQW1vdW50QW5kUHJpY2VBc3NldHMAAAABBQAAAAdscEFzc2V0CQAEuQAAAAIJAARMAAAAAgUAAAALYW1vdW50QXNzZXQJAARMAAAAAgUAAAAKcHJpY2VBc3NldAUAAAADbmlsBQAAAANTRVAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAYaW5jcmVhc2VBc3NldFBvb2xzTnVtYmVyAAAAAQAAAAdhc3NldElkBAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAATYXNzZXRQb29sc051bWJlcktleQkBAAAAE2tleUFzc2V0UG9vbHNOdW1iZXIAAAABBQAAAAdhc3NldElkBAAAABBhc3NldFBvb2xzTnVtYmVyCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEFAAAAE2Fzc2V0UG9vbHNOdW1iZXJLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2Fzc2V0UG9vbHNOdW1iZXJLZXkJAABkAAAAAgUAAAAQYXNzZXRQb29sc051bWJlcgAAAAAAAAAAAQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAtjcmVhdGVMYWJlbAAAAAEAAAAFbGFiZWwEAAAABmxhYmVscwkBAAAACWdldExhYmVscwAAAAAEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVz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aGVja1RpY2tlcgUAAAALY2hlY2tUaWNrZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleUFzc2V0SWRUb1RpY2tlcgAAAAEFAAAAB2Fzc2V0SWQFAAAABnRpY2tlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASa2V5VGlja2VyVG9Bc3NldElkAAAAAQUAAAAGdGlja2VyBQAAAAdhc3NldElkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAxkZWxldGVUaWNrZXIAAAABAAAAB2Fzc2V0SWQEAAAAC2NoZWNrQ2FsbGVyCQEAAAAJbXVzdEFkbWluAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAAAZ0aWNrZXIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQEAAAASa2V5QXNzZXRJZFRvVGlja2VyAAAAAQUAAAAHYXNzZXRJZAIAAAANSW52YWxpZCBhc3NldAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAASa2V5QXNzZXRJZFRvVGlja2VyAAAAAQUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAASa2V5VGlja2VyVG9Bc3NldElkAAAAAQUAAAAGdGlja2VyBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADmNyZWF0ZU9yVXBkYXRlAAAABAAAAAdhc3NldElkAAAABnRpY2tlcgAAAARsb2dvAAAACHZlcmlmaWVkBAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAMY2hlY2tBc3NldElkCQEAAAATdmFsdWVPckVycm9yTWVz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AAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAAACAAAAAQIAAAASTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAVoYXNQTQUAAAAFaGFzUE0EAAAAB2NoZWNrUE0DCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkBAAAABXZhbHVlAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAHY2hlY2tQTQUAAAAHY2hlY2tQTQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAACcG0JAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAA90YXJnZXRQdWJsaWNLZXkEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDAFAAAAAnBrAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5CQAAAgAAAAECAAAAC01hdGNoIGVycm9yCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAPdGFyZ2V0UHVibGljS2V5yD0LMA==", "chainId": 84, "height": 2006680, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: C3u7eSPBMjRRXmuBTaGQpsPTuzh7bajo9pbk9KMZ9CqV Next: 9Gq7wffDneikUcXQp374y2voaYE7y2aXbTCS9xLQwv2 Diff:
OldNewDifferences
2020 func keyAdminPubKeys () = "%s__adminPubKeys"
2121
2222
23+func keyUserPoolsContract () = "%s__userPoolsContract"
24+
25+
2326 func keyCreated (assetId) = (("created_<" + assetId) + ">")
2427
2528
3033
3134
3235 func keyStatus (assetId) = (("status_<" + assetId) + ">")
36+
37+
38+func keyAssetPoolsNumber (assetId) = makeString(["%s%s", "pools", assetId], SEP)
39+
40+
41+func keyTickerToAssetId (ticker) = makeString(["%s%s", "ticker2assetId", ticker], SEP)
42+
43+
44+func keyAssetIdToTicker (assetId) = makeString(["%s%s", "assetId2ticker", assetId], SEP)
45+
46+
47+func keyAmountAndPriceAssetsToLpAsset (amountAsset,priceAsset) = makeString(["%s%s%s", "amountAndPriceAssetsToLpAsset", amountAsset, priceAsset], SEP)
48+
49+
50+func keyLpAssetToAmountAndPriceAssets (lpAsset) = makeString(["%s%s", "lpAssetToAmountAndPriceAssets", lpAsset], SEP)
51+
52+
53+func keyAssetLabels (assetId) = makeString(["%s%s", "labels", assetId], SEP)
54+
55+
56+func keyLabels () = makeString(["%s", "labels"], SEP)
57+
58+
59+func getLabels () = split(valueOrElse(getString(keyLabels()), ""), SEP)
60+
61+
62+func getAssetLabels (assetId) = split(valueOrElse(getString(keyAssetLabels(assetId)), ""), SEP)
3363
3464
3565 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
88118
89119
90120 @Callable(i)
121+func constructor (userPoolsContract) = {
122+ let checkCaller = mustManager(i)
123+ if ((checkCaller == checkCaller))
124+ then {
125+ let checksAddress = addressFromStringValue(userPoolsContract)
126+ if ((checksAddress == checksAddress))
127+ then [StringEntry(keyUserPoolsContract(), userPoolsContract)]
128+ else throw("Strict value is not equal to itself.")
129+ }
130+ else throw("Strict value is not equal to itself.")
131+ }
132+
133+
134+
135+@Callable(i)
136+func addAssetsLink (amountAsset,priceAsset,lpAsset) = {
137+ let checkCaller = mustAdmin(i)
138+ if ((checkCaller == checkCaller))
139+ then [StringEntry(keyAmountAndPriceAssetsToLpAsset(amountAsset, priceAsset), lpAsset), StringEntry(keyLpAssetToAmountAndPriceAssets(lpAsset), makeString([amountAsset, priceAsset], SEP))]
140+ else throw("Strict value is not equal to itself.")
141+ }
142+
143+
144+
145+@Callable(i)
146+func increaseAssetPoolsNumber (assetId) = {
147+ let checkCaller = mustAdmin(i)
148+ if ((checkCaller == checkCaller))
149+ then {
150+ let assetPoolsNumberKey = keyAssetPoolsNumber(assetId)
151+ let assetPoolsNumber = valueOrElse(getInteger(assetPoolsNumberKey), 0)
152+[IntegerEntry(assetPoolsNumberKey, (assetPoolsNumber + 1))]
153+ }
154+ else throw("Strict value is not equal to itself.")
155+ }
156+
157+
158+
159+@Callable(i)
160+func createLabel (label) = {
161+ let labels = getLabels()
162+ let checkCaller = mustManager(i)
163+ if ((checkCaller == checkCaller))
164+ then {
165+ let checkLabel = [if (!(contains(label, SEP)))
166+ then true
167+ else throw("Invalid label name"), if (!(containsElement(labels, label)))
168+ then true
169+ else throw("Label exists")]
170+ if ((checkLabel == checkLabel))
171+ then [StringEntry(keyLabels(), makeString((labels :+ label), SEP))]
172+ else throw("Strict value is not equal to itself.")
173+ }
174+ else throw("Strict value is not equal to itself.")
175+ }
176+
177+
178+
179+@Callable(i)
180+func dropLabel (label) = {
181+ let labels = getLabels()
182+ let checkCaller = mustManager(i)
183+ if ((checkCaller == checkCaller))
184+ then {
185+ let checkLabel = if (containsElement(labels, label))
186+ then true
187+ else throw("Label doesn't exist")
188+ if ((checkLabel == checkLabel))
189+ then [StringEntry(keyLabels(), makeString(removeByIndex(labels, value(indexOf(labels, label))), SEP))]
190+ else throw("Strict value is not equal to itself.")
191+ }
192+ else throw("Strict value is not equal to itself.")
193+ }
194+
195+
196+
197+@Callable(i)
198+func addLabel (assetId,label) = {
199+ let labels = getLabels()
200+ let assetLabels = getAssetLabels(assetId)
201+ let checkCaller = mustAdmin(i)
202+ if ((checkCaller == checkCaller))
203+ then {
204+ let checkLabel = [if (!(containsElement(assetLabels, label)))
205+ then true
206+ else "Label has already been added", if (containsElement(labels, label))
207+ then true
208+ else throw("Label doesn't exist")]
209+ if ((checkLabel == checkLabel))
210+ then [StringEntry(keyAssetLabels(assetId), makeString((assetLabels :+ label), 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 deleteLabel (assetId,label) = {
220+ let assetLabels = getAssetLabels(assetId)
221+ let checkCaller = mustAdmin(i)
222+ if ((checkCaller == checkCaller))
223+ then {
224+ let checkLabel = if (containsElement(assetLabels, label))
225+ then true
226+ else throw("Label wasn't added")
227+ if ((checkLabel == checkLabel))
228+ then [StringEntry(keyAssetLabels(assetId), makeString(removeByIndex(assetLabels, value(indexOf(assetLabels, label))), SEP))]
229+ else throw("Strict value is not equal to itself.")
230+ }
231+ else throw("Strict value is not equal to itself.")
232+ }
233+
234+
235+
236+@Callable(i)
237+func updateTicker (assetId,ticker) = {
238+ let checkCaller = mustAdmin(i)
239+ if ((checkCaller == checkCaller))
240+ then {
241+ let checkTicker = {
242+ let linkedAssetIdOrUnit = getString(keyTickerToAssetId(ticker))
243+ let tickerIsValid = if ((ticker != ""))
244+ then if ((linkedAssetIdOrUnit == unit))
245+ then true
246+ else (value(linkedAssetIdOrUnit) == assetId)
247+ else false
248+ if (tickerIsValid)
249+ then true
250+ else throw("Invalid ticker")
251+ }
252+ if ((checkTicker == checkTicker))
253+ then [StringEntry(keyAssetIdToTicker(assetId), ticker), StringEntry(keyTickerToAssetId(ticker), assetId)]
254+ else throw("Strict value is not equal to itself.")
255+ }
256+ else throw("Strict value is not equal to itself.")
257+ }
258+
259+
260+
261+@Callable(i)
262+func deleteTicker (assetId) = {
263+ let checkCaller = mustAdmin(i)
264+ if ((checkCaller == checkCaller))
265+ then {
266+ let ticker = valueOrErrorMessage(getString(keyAssetIdToTicker(assetId)), "Invalid asset")
267+[DeleteEntry(keyAssetIdToTicker(assetId)), DeleteEntry(keyTickerToAssetId(ticker))]
268+ }
269+ else throw("Strict value is not equal to itself.")
270+ }
271+
272+
273+
274+@Callable(i)
91275 func createOrUpdate (assetId,ticker,logo,verified) = {
92276 let checkCaller = mustAdmin(i)
93277 if ((checkCaller == checkCaller))
142326 then true
143327 else throwNoAsset()]
144328 if ((checks == checks))
145- then [IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))]
329+ then {
330+ let priceAssets = match invoke(addressFromStringValue(getStringValue(keyUserPoolsContract())), "priceAssetsREADONLY", nil, nil) {
331+ case a: List[Any] =>
332+ let checkPriceAssetsSize = if ((size(a) > 0))
333+ then true
334+ else throw("Invalid price assets")
335+ if ((checkPriceAssetsSize == checkPriceAssetsSize))
336+ then a
337+ else throw("Strict value is not equal to itself.")
338+ case _ =>
339+ throw("Incorrect invoke result")
340+ }
341+ func cb (acc,item) = {
342+ let priceAssetId = match item {
343+ case s: String =>
344+ s
345+ case _ =>
346+ throw("Invalid price asset")
347+ }
348+ let lpAssetIdOrUnit = getString(keyAmountAndPriceAssetsToLpAsset(assetId, priceAssetId))
349+ let action = if ((lpAssetIdOrUnit == unit))
350+ then nil
351+ else IntegerEntry(keyStatus(value(lpAssetIdOrUnit)), verifiedToStatus(verified))
352+ (acc :+ action)
353+ }
354+
355+ let lpTokensActions = {
356+ let $l = priceAssets
357+ let $s = size($l)
358+ let $acc0 = nil
359+ func $f0_1 ($a,$i) = if (($i >= $s))
360+ then $a
361+ else cb($a, $l[$i])
362+
363+ func $f0_2 ($a,$i) = if (($i >= $s))
364+ then $a
365+ else throw("List size exceeds 10")
366+
367+ $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)
368+ }
369+ ([IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))] ++ lpTokensActions)
370+ }
146371 else throw("Strict value is not equal to itself.")
147372 }
148373
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let EMPTY = ""
77
88 func throwPD () = throw("Permission denied")
99
1010
1111 func throwNoAsset () = throw("Asset doesn't exists")
1212
1313
1414 func keyManagerPublicKey () = "%s__managerPublicKey"
1515
1616
1717 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
1818
1919
2020 func keyAdminPubKeys () = "%s__adminPubKeys"
2121
2222
23+func keyUserPoolsContract () = "%s__userPoolsContract"
24+
25+
2326 func keyCreated (assetId) = (("created_<" + assetId) + ">")
2427
2528
2629 func keyLogo (assetId) = (("logo_<" + assetId) + ">")
2730
2831
2932 func keyTicker (assetId) = (("ticker_<" + assetId) + ">")
3033
3134
3235 func keyStatus (assetId) = (("status_<" + assetId) + ">")
36+
37+
38+func keyAssetPoolsNumber (assetId) = makeString(["%s%s", "pools", assetId], SEP)
39+
40+
41+func keyTickerToAssetId (ticker) = makeString(["%s%s", "ticker2assetId", ticker], SEP)
42+
43+
44+func keyAssetIdToTicker (assetId) = makeString(["%s%s", "assetId2ticker", assetId], SEP)
45+
46+
47+func keyAmountAndPriceAssetsToLpAsset (amountAsset,priceAsset) = makeString(["%s%s%s", "amountAndPriceAssetsToLpAsset", amountAsset, priceAsset], SEP)
48+
49+
50+func keyLpAssetToAmountAndPriceAssets (lpAsset) = makeString(["%s%s", "lpAssetToAmountAndPriceAssets", lpAsset], SEP)
51+
52+
53+func keyAssetLabels (assetId) = makeString(["%s%s", "labels", assetId], SEP)
54+
55+
56+func keyLabels () = makeString(["%s", "labels"], SEP)
57+
58+
59+func getLabels () = split(valueOrElse(getString(keyLabels()), ""), SEP)
60+
61+
62+func getAssetLabels (assetId) = split(valueOrElse(getString(keyAssetLabels(assetId)), ""), SEP)
3363
3464
3565 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
3666 case s: String =>
3767 fromBase58String(s)
3868 case _: Unit =>
3969 unit
4070 case _ =>
4171 throw("Match error")
4272 }
4373
4474
4575 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
4676 case s: String =>
4777 fromBase58String(s)
4878 case _: Unit =>
4979 unit
5080 case _ =>
5181 throw("Match error")
5282 }
5383
5484
5585 func mustManager (i) = match managerPublicKeyOrUnit() {
5686 case pk: ByteVector =>
5787 if ((i.callerPublicKey == pk))
5888 then true
5989 else throwPD()
6090 case _: Unit =>
6191 if ((i.caller == this))
6292 then true
6393 else throwPD()
6494 case _ =>
6595 throw("Match error")
6696 }
6797
6898
6999 func mustAdmin (i) = {
70100 let adminPKs = split(valueOrElse(getString(keyAdminPubKeys()), EMPTY), SEP)
71101 if (containsElement(adminPKs, toBase58String(i.callerPublicKey)))
72102 then true
73103 else {
74104 let isManager = mustManager(i)
75105 if ((isManager == isManager))
76106 then true
77107 else throw("Strict value is not equal to itself.")
78108 }
79109 }
80110
81111
82112 func isCreated (assetId) = valueOrElse(getBoolean(keyCreated(assetId)), false)
83113
84114
85115 func verifiedToStatus (verified) = if (verified)
86116 then 2
87117 else 0
88118
89119
90120 @Callable(i)
121+func constructor (userPoolsContract) = {
122+ let checkCaller = mustManager(i)
123+ if ((checkCaller == checkCaller))
124+ then {
125+ let checksAddress = addressFromStringValue(userPoolsContract)
126+ if ((checksAddress == checksAddress))
127+ then [StringEntry(keyUserPoolsContract(), userPoolsContract)]
128+ else throw("Strict value is not equal to itself.")
129+ }
130+ else throw("Strict value is not equal to itself.")
131+ }
132+
133+
134+
135+@Callable(i)
136+func addAssetsLink (amountAsset,priceAsset,lpAsset) = {
137+ let checkCaller = mustAdmin(i)
138+ if ((checkCaller == checkCaller))
139+ then [StringEntry(keyAmountAndPriceAssetsToLpAsset(amountAsset, priceAsset), lpAsset), StringEntry(keyLpAssetToAmountAndPriceAssets(lpAsset), makeString([amountAsset, priceAsset], SEP))]
140+ else throw("Strict value is not equal to itself.")
141+ }
142+
143+
144+
145+@Callable(i)
146+func increaseAssetPoolsNumber (assetId) = {
147+ let checkCaller = mustAdmin(i)
148+ if ((checkCaller == checkCaller))
149+ then {
150+ let assetPoolsNumberKey = keyAssetPoolsNumber(assetId)
151+ let assetPoolsNumber = valueOrElse(getInteger(assetPoolsNumberKey), 0)
152+[IntegerEntry(assetPoolsNumberKey, (assetPoolsNumber + 1))]
153+ }
154+ else throw("Strict value is not equal to itself.")
155+ }
156+
157+
158+
159+@Callable(i)
160+func createLabel (label) = {
161+ let labels = getLabels()
162+ let checkCaller = mustManager(i)
163+ if ((checkCaller == checkCaller))
164+ then {
165+ let checkLabel = [if (!(contains(label, SEP)))
166+ then true
167+ else throw("Invalid label name"), if (!(containsElement(labels, label)))
168+ then true
169+ else throw("Label exists")]
170+ if ((checkLabel == checkLabel))
171+ then [StringEntry(keyLabels(), makeString((labels :+ label), SEP))]
172+ else throw("Strict value is not equal to itself.")
173+ }
174+ else throw("Strict value is not equal to itself.")
175+ }
176+
177+
178+
179+@Callable(i)
180+func dropLabel (label) = {
181+ let labels = getLabels()
182+ let checkCaller = mustManager(i)
183+ if ((checkCaller == checkCaller))
184+ then {
185+ let checkLabel = if (containsElement(labels, label))
186+ then true
187+ else throw("Label doesn't exist")
188+ if ((checkLabel == checkLabel))
189+ then [StringEntry(keyLabels(), makeString(removeByIndex(labels, value(indexOf(labels, label))), SEP))]
190+ else throw("Strict value is not equal to itself.")
191+ }
192+ else throw("Strict value is not equal to itself.")
193+ }
194+
195+
196+
197+@Callable(i)
198+func addLabel (assetId,label) = {
199+ let labels = getLabels()
200+ let assetLabels = getAssetLabels(assetId)
201+ let checkCaller = mustAdmin(i)
202+ if ((checkCaller == checkCaller))
203+ then {
204+ let checkLabel = [if (!(containsElement(assetLabels, label)))
205+ then true
206+ else "Label has already been added", if (containsElement(labels, label))
207+ then true
208+ else throw("Label doesn't exist")]
209+ if ((checkLabel == checkLabel))
210+ then [StringEntry(keyAssetLabels(assetId), makeString((assetLabels :+ label), 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 deleteLabel (assetId,label) = {
220+ let assetLabels = getAssetLabels(assetId)
221+ let checkCaller = mustAdmin(i)
222+ if ((checkCaller == checkCaller))
223+ then {
224+ let checkLabel = if (containsElement(assetLabels, label))
225+ then true
226+ else throw("Label wasn't added")
227+ if ((checkLabel == checkLabel))
228+ then [StringEntry(keyAssetLabels(assetId), makeString(removeByIndex(assetLabels, value(indexOf(assetLabels, label))), SEP))]
229+ else throw("Strict value is not equal to itself.")
230+ }
231+ else throw("Strict value is not equal to itself.")
232+ }
233+
234+
235+
236+@Callable(i)
237+func updateTicker (assetId,ticker) = {
238+ let checkCaller = mustAdmin(i)
239+ if ((checkCaller == checkCaller))
240+ then {
241+ let checkTicker = {
242+ let linkedAssetIdOrUnit = getString(keyTickerToAssetId(ticker))
243+ let tickerIsValid = if ((ticker != ""))
244+ then if ((linkedAssetIdOrUnit == unit))
245+ then true
246+ else (value(linkedAssetIdOrUnit) == assetId)
247+ else false
248+ if (tickerIsValid)
249+ then true
250+ else throw("Invalid ticker")
251+ }
252+ if ((checkTicker == checkTicker))
253+ then [StringEntry(keyAssetIdToTicker(assetId), ticker), StringEntry(keyTickerToAssetId(ticker), assetId)]
254+ else throw("Strict value is not equal to itself.")
255+ }
256+ else throw("Strict value is not equal to itself.")
257+ }
258+
259+
260+
261+@Callable(i)
262+func deleteTicker (assetId) = {
263+ let checkCaller = mustAdmin(i)
264+ if ((checkCaller == checkCaller))
265+ then {
266+ let ticker = valueOrErrorMessage(getString(keyAssetIdToTicker(assetId)), "Invalid asset")
267+[DeleteEntry(keyAssetIdToTicker(assetId)), DeleteEntry(keyTickerToAssetId(ticker))]
268+ }
269+ else throw("Strict value is not equal to itself.")
270+ }
271+
272+
273+
274+@Callable(i)
91275 func createOrUpdate (assetId,ticker,logo,verified) = {
92276 let checkCaller = mustAdmin(i)
93277 if ((checkCaller == checkCaller))
94278 then {
95279 let checkAssetId = valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "Invalid asset ID")
96280 if ((checkAssetId == checkAssetId))
97281 then {
98282 let isCreatedNow = !(isCreated(assetId))
99283 if ((isCreatedNow == isCreatedNow))
100284 then {
101285 let setLogoActions = if ((logo == ""))
102286 then nil
103287 else [StringEntry(keyLogo(assetId), logo)]
104288 $Tuple2(([BooleanEntry(keyCreated(assetId), true), StringEntry(keyTicker(assetId), ticker), IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))] ++ setLogoActions), isCreatedNow)
105289 }
106290 else throw("Strict value is not equal to itself.")
107291 }
108292 else throw("Strict value is not equal to itself.")
109293 }
110294 else throw("Strict value is not equal to itself.")
111295 }
112296
113297
114298
115299 @Callable(i)
116300 func setTicker (assetId,ticker) = {
117301 let checks = [mustAdmin(i), if (isCreated(assetId))
118302 then true
119303 else throwNoAsset()]
120304 if ((checks == checks))
121305 then [StringEntry(keyTicker(assetId), ticker)]
122306 else throw("Strict value is not equal to itself.")
123307 }
124308
125309
126310
127311 @Callable(i)
128312 func setLogo (assetId,logo) = {
129313 let checks = [mustAdmin(i), if (isCreated(assetId))
130314 then true
131315 else throwNoAsset()]
132316 if ((checks == checks))
133317 then [StringEntry(keyLogo(assetId), logo)]
134318 else throw("Strict value is not equal to itself.")
135319 }
136320
137321
138322
139323 @Callable(i)
140324 func setVerified (assetId,verified) = {
141325 let checks = [mustAdmin(i), if (isCreated(assetId))
142326 then true
143327 else throwNoAsset()]
144328 if ((checks == checks))
145- then [IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))]
329+ then {
330+ let priceAssets = match invoke(addressFromStringValue(getStringValue(keyUserPoolsContract())), "priceAssetsREADONLY", nil, nil) {
331+ case a: List[Any] =>
332+ let checkPriceAssetsSize = if ((size(a) > 0))
333+ then true
334+ else throw("Invalid price assets")
335+ if ((checkPriceAssetsSize == checkPriceAssetsSize))
336+ then a
337+ else throw("Strict value is not equal to itself.")
338+ case _ =>
339+ throw("Incorrect invoke result")
340+ }
341+ func cb (acc,item) = {
342+ let priceAssetId = match item {
343+ case s: String =>
344+ s
345+ case _ =>
346+ throw("Invalid price asset")
347+ }
348+ let lpAssetIdOrUnit = getString(keyAmountAndPriceAssetsToLpAsset(assetId, priceAssetId))
349+ let action = if ((lpAssetIdOrUnit == unit))
350+ then nil
351+ else IntegerEntry(keyStatus(value(lpAssetIdOrUnit)), verifiedToStatus(verified))
352+ (acc :+ action)
353+ }
354+
355+ let lpTokensActions = {
356+ let $l = priceAssets
357+ let $s = size($l)
358+ let $acc0 = nil
359+ func $f0_1 ($a,$i) = if (($i >= $s))
360+ then $a
361+ else cb($a, $l[$i])
362+
363+ func $f0_2 ($a,$i) = if (($i >= $s))
364+ then $a
365+ else throw("List size exceeds 10")
366+
367+ $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)
368+ }
369+ ([IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))] ++ lpTokensActions)
370+ }
146371 else throw("Strict value is not equal to itself.")
147372 }
148373
149374
150375
151376 @Callable(i)
152377 func setAdmins (adminPubKeys) = {
153378 let checkCaller = mustManager(i)
154379 if ((checkCaller == checkCaller))
155380 then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
156381 else throw("Strict value is not equal to itself.")
157382 }
158383
159384
160385
161386 @Callable(i)
162387 func setManager (pendingManagerPublicKey) = {
163388 let checkCaller = mustManager(i)
164389 if ((checkCaller == checkCaller))
165390 then {
166391 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
167392 if ((checkManagerPublicKey == checkManagerPublicKey))
168393 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
169394 else throw("Strict value is not equal to itself.")
170395 }
171396 else throw("Strict value is not equal to itself.")
172397 }
173398
174399
175400
176401 @Callable(i)
177402 func confirmManager () = {
178403 let pm = pendingManagerPublicKeyOrUnit()
179404 let hasPM = if (isDefined(pm))
180405 then true
181406 else throw("No pending manager")
182407 if ((hasPM == hasPM))
183408 then {
184409 let checkPM = if ((i.callerPublicKey == value(pm)))
185410 then true
186411 else throw("You are not pending manager")
187412 if ((checkPM == checkPM))
188413 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
189414 else throw("Strict value is not equal to itself.")
190415 }
191416 else throw("Strict value is not equal to itself.")
192417 }
193418
194419
195420 @Verifier(tx)
196421 func verify () = {
197422 let targetPublicKey = match managerPublicKeyOrUnit() {
198423 case pk: ByteVector =>
199424 pk
200425 case _: Unit =>
201426 tx.senderPublicKey
202427 case _ =>
203428 throw("Match error")
204429 }
205430 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
206431 }
207432

github/deemru/w8io/873ac7e 
56.19 ms