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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BUVNUFRZBQAAAANTRVADCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAIYWRtaW5QS3MJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BgQAAAAJaXNNYW5hZ2VyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAlpc01hbmFnZXIFAAAACWlzTWFuYWdlcgYJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQAAAAlpc0NyZWF0ZWQAAAABAAAAB2Fzc2V0SWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQgAAAAAQkBAAAACmtleUNyZWF0ZWQAAAABBQAAAAdhc3NldElkBwEAAAAQdmVyaWZpZWRUb1N0YXR1cwAAAAEAAAAIdmVyaWZpZWQDBQAAAAh2ZXJpZmllZAAAAAAAAAAAAgAAAAAAAAAAAAAAABAAAAABaQEAAAALY29uc3RydWN0b3IAAAABAAAAEXVzZXJQb29sc0NvbnRyYWN0BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAAA1jaGVja3NBZGRyZXNzCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAABF1c2VyUG9vbHNDb250cmFjdAMJAAAAAAAAAgUAAAANY2hlY2tzQWRkcmVzcwUAAAANY2hlY2tzQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAUa2V5VXNlclBvb2xzQ29udHJhY3QAAAAABQAAABF1c2VyUG9vbHNDb250cmFjdAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAANYWRkQXNzZXRzTGluawAAAAMAAAALYW1vdW50QXNzZXQAAAAKcHJpY2VBc3NldAAAAAdscEFzc2V0BAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAga2V5QW1vdW50QW5kUHJpY2VBc3NldHNUb0xwQXNzZXQAAAACBQAAAAthbW91bnRBc3NldAUAAAAKcHJpY2VBc3NldAUAAAAHbHBBc3NldAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAga2V5THBBc3NldFRvQW1vdW50QW5kUHJpY2VBc3NldHMAAAABBQAAAAdscEFzc2V0CQAEuQAAAAIJAARMAAAAAgUAAAALYW1vdW50QXNzZXQJAARMAAAAAgUAAAAKcHJpY2VBc3NldAUAAAADbmlsBQAAAANTRVAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAYaW5jcmVhc2VBc3NldFBvb2xzTnVtYmVyAAAAAQAAAAdhc3NldElkBAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAATYXNzZXRQb29sc051bWJlcktleQkBAAAAE2tleUFzc2V0UG9vbHNOdW1iZXIAAAABBQAAAAdhc3NldElkBAAAABBhc3NldFBvb2xzTnVtYmVyCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEFAAAAE2Fzc2V0UG9vbHNOdW1iZXJLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2Fzc2V0UG9vbHNOdW1iZXJLZXkJAABkAAAAAgUAAAAQYXNzZXRQb29sc051bWJlcgAAAAAAAAAAAQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAtjcmVhdGVMYWJlbAAAAAEAAAAFbGFiZWwEAAAABmxhYmVscwkBAAAACWdldExhYmVscwAAAAAEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAACmNoZWNrTGFiZWwJAARMAAAAAgMJAQAAAAEhAAAAAQkBAAAACGNvbnRhaW5zAAAAAgUAAAAFbGFiZWwFAAAAA1NFUAYJAAACAAAAAQIAAAASSW52YWxpZCBsYWJlbCBuYW1lCQAETAAAAAIDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAZsYWJlbHMFAAAABWxhYmVsBgkAAAIAAAABAgAAAAxMYWJlbCBleGlzdHMFAAAAA25pbAMJAAAAAAAAAgUAAAAKY2hlY2tMYWJlbAUAAAAKY2hlY2tMYWJlbAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAJa2V5TGFiZWxzAAAAAAkABLkAAAACCQAETQAAAAIFAAAABmxhYmVscwUAAAAFbGFiZWwFAAAAA1NFUAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAJZHJvcExhYmVsAAAAAQAAAAVsYWJlbAQAAAAGbGFiZWxzCQEAAAAJZ2V0TGFiZWxzAAAAAAQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAKY2hlY2tMYWJlbAMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAZsYWJlbHMFAAAABWxhYmVsBgkAAAIAAAABAgAAABNMYWJlbCBkb2Vzbid0IGV4aXN0AwkAAAAAAAACBQAAAApjaGVja0xhYmVsBQAAAApjaGVja0xhYmVsCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAlrZXlMYWJlbHMAAAAACQAEuQAAAAIJAARRAAAAAgUAAAAGbGFiZWxzCQEAAAAFdmFsdWUAAAABCQAETwAAAAIFAAAABmxhYmVscwUAAAAFbGFiZWwFAAAAA1NFUAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAIYWRkTGFiZWwAAAACAAAAB2Fzc2V0SWQAAAAFbGFiZWwEAAAABmxhYmVscwkBAAAACWdldExhYmVscwAAAAAEAAAAC2Fzc2V0TGFiZWxzCQEAAAAOZ2V0QXNzZXRMYWJlbHMAAAABBQAAAAdhc3NldElkBAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAKY2hlY2tMYWJlbAkABEwAAAACAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAALYXNzZXRMYWJlbHMFAAAABWxhYmVsBgIAAAAcTGFiZWwgaGFzIGFscmVhZHkgYmVlbiBhZGRlZAkABEwAAAACAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAABmxhYmVscwUAAAAFbGFiZWwGCQAAAgAAAAECAAAAE0xhYmVsIGRvZXNuJ3QgZXhpc3QFAAAAA25pbAMJAAAAAAAAAgUAAAAKY2hlY2tMYWJlbAUAAAAKY2hlY2tMYWJlbAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAOa2V5QXNzZXRMYWJlbHMAAAABBQAAAAdhc3NldElkCQAEuQAAAAIJAARNAAAAAgUAAAALYXNzZXRMYWJlbHMFAAAABWxhYmVsBQAAAANTRVAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAC2RlbGV0ZUxhYmVsAAAAAgAAAAdhc3NldElkAAAABWxhYmVsBAAAAAthc3NldExhYmVscwkBAAAADmdldEFzc2V0TGFiZWxzAAAAAQUAAAAHYXNzZXRJZAQAAAALY2hlY2tDYWxsZXIJAQAAAAltdXN0QWRtaW4AAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAACmNoZWNrTGFiZWwDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAALYXNzZXRMYWJlbHMFAAAABWxhYmVsBgkAAAIAAAABAgAAABJMYWJlbCB3YXNuJ3QgYWRkZWQDCQAAAAAAAAIFAAAACmNoZWNrTGFiZWwFAAAACmNoZWNrTGFiZWwJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmtleUFzc2V0TGFiZWxzAAAAAQUAAAAHYXNzZXRJZAkABLkAAAACCQAEUQAAAAIFAAAAC2Fzc2V0TGFiZWxzCQEAAAAFdmFsdWUAAAABCQAETwAAAAIFAAAAC2Fzc2V0TGFiZWxzBQAAAAVsYWJlbAUAAAADU0VQBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAx1cGRhdGVUaWNrZXIAAAACAAAAB2Fzc2V0SWQAAAAGdGlja2VyBAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAALY2hlY2tUaWNrZXIEAAAAE2xpbmtlZEFzc2V0SWRPclVuaXQJAAQiAAAAAQkBAAAAEmtleVRpY2tlclRvQXNzZXRJZAAAAAEFAAAABnRpY2tlcgQAAAANdGlja2VySXNWYWxpZAMJAQAAAAIhPQAAAAIFAAAABnRpY2tlcgIAAAAAAwkAAAAAAAACBQAAABNsaW5rZWRBc3NldElkT3JVbml0BQAAAAR1bml0BgkAAAAAAAACCQEAAAAFdmFsdWUAAAABBQAAABNsaW5rZWRBc3NldElkT3JVbml0BQAAAAdhc3NldElkBwMFAAAADXRpY2tlcklzVmFsaWQGCQAAAgAAAAECAAAADkludmFsaWQgdGlja2VyAwkAAAAAAAACBQAAAAtjaGVja1RpY2tlcgUAAAALY2hlY2tUaWNrZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleUFzc2V0SWRUb1RpY2tlcgAAAAEFAAAAB2Fzc2V0SWQFAAAABnRpY2tlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASa2V5VGlja2VyVG9Bc3NldElkAAAAAQUAAAAGdGlja2VyBQAAAAdhc3NldElkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAxkZWxldGVUaWNrZXIAAAABAAAAB2Fzc2V0SWQEAAAAC2NoZWNrQ2FsbGVyCQEAAAAJbXVzdEFkbWluAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAAAZ0aWNrZXIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQEAAAASa2V5QXNzZXRJZFRvVGlja2VyAAAAAQUAAAAHYXNzZXRJZAIAAAANSW52YWxpZCBhc3NldAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAASa2V5QXNzZXRJZFRvVGlja2VyAAAAAQUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAASa2V5VGlja2VyVG9Bc3NldElkAAAAAQUAAAAGdGlja2VyBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADmNyZWF0ZU9yVXBkYXRlAAAABAAAAAdhc3NldElkAAAABnRpY2tlcgAAAARsb2dvAAAACHZlcmlmaWVkBAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAMY2hlY2tBc3NldElkCQEAAAATdmFsdWVPckVycm9yTWVz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AAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAAACAAAAAQIAAAASTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAVoYXNQTQUAAAAFaGFzUE0EAAAAB2NoZWNrUE0DCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkBAAAABXZhbHVlAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAHY2hlY2tQTQUAAAAHY2hlY2tQTQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAACcG0JAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAA90YXJnZXRQdWJsaWNLZXkEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDAFAAAAAnBrAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5CQAAAgAAAAECAAAAC01hdGNoIGVycm9yCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAPdGFyZ2V0UHVibGljS2V5yD0LMA==", "chainId": 84, "height": 2006680, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: C3u7eSPBMjRRXmuBTaGQpsPTuzh7bajo9pbk9KMZ9CqV Next: 9Gq7wffDneikUcXQp374y2voaYE7y2aXbTCS9xLQwv2 Diff:
Old | New | Differences | |
---|---|---|---|
20 | 20 | func keyAdminPubKeys () = "%s__adminPubKeys" | |
21 | 21 | ||
22 | 22 | ||
23 | + | func keyUserPoolsContract () = "%s__userPoolsContract" | |
24 | + | ||
25 | + | ||
23 | 26 | func keyCreated (assetId) = (("created_<" + assetId) + ">") | |
24 | 27 | ||
25 | 28 | ||
30 | 33 | ||
31 | 34 | ||
32 | 35 | 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) | |
33 | 63 | ||
34 | 64 | ||
35 | 65 | func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) { | |
88 | 118 | ||
89 | 119 | ||
90 | 120 | @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) | |
91 | 275 | func createOrUpdate (assetId,ticker,logo,verified) = { | |
92 | 276 | let checkCaller = mustAdmin(i) | |
93 | 277 | if ((checkCaller == checkCaller)) | |
142 | 326 | then true | |
143 | 327 | else throwNoAsset()] | |
144 | 328 | 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 | + | } | |
146 | 371 | else throw("Strict value is not equal to itself.") | |
147 | 372 | } | |
148 | 373 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let SEP = "__" | |
5 | 5 | ||
6 | 6 | let EMPTY = "" | |
7 | 7 | ||
8 | 8 | func throwPD () = throw("Permission denied") | |
9 | 9 | ||
10 | 10 | ||
11 | 11 | func throwNoAsset () = throw("Asset doesn't exists") | |
12 | 12 | ||
13 | 13 | ||
14 | 14 | func keyManagerPublicKey () = "%s__managerPublicKey" | |
15 | 15 | ||
16 | 16 | ||
17 | 17 | func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey" | |
18 | 18 | ||
19 | 19 | ||
20 | 20 | func keyAdminPubKeys () = "%s__adminPubKeys" | |
21 | 21 | ||
22 | 22 | ||
23 | + | func keyUserPoolsContract () = "%s__userPoolsContract" | |
24 | + | ||
25 | + | ||
23 | 26 | func keyCreated (assetId) = (("created_<" + assetId) + ">") | |
24 | 27 | ||
25 | 28 | ||
26 | 29 | func keyLogo (assetId) = (("logo_<" + assetId) + ">") | |
27 | 30 | ||
28 | 31 | ||
29 | 32 | func keyTicker (assetId) = (("ticker_<" + assetId) + ">") | |
30 | 33 | ||
31 | 34 | ||
32 | 35 | 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) | |
33 | 63 | ||
34 | 64 | ||
35 | 65 | func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) { | |
36 | 66 | case s: String => | |
37 | 67 | fromBase58String(s) | |
38 | 68 | case _: Unit => | |
39 | 69 | unit | |
40 | 70 | case _ => | |
41 | 71 | throw("Match error") | |
42 | 72 | } | |
43 | 73 | ||
44 | 74 | ||
45 | 75 | func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) { | |
46 | 76 | case s: String => | |
47 | 77 | fromBase58String(s) | |
48 | 78 | case _: Unit => | |
49 | 79 | unit | |
50 | 80 | case _ => | |
51 | 81 | throw("Match error") | |
52 | 82 | } | |
53 | 83 | ||
54 | 84 | ||
55 | 85 | func mustManager (i) = match managerPublicKeyOrUnit() { | |
56 | 86 | case pk: ByteVector => | |
57 | 87 | if ((i.callerPublicKey == pk)) | |
58 | 88 | then true | |
59 | 89 | else throwPD() | |
60 | 90 | case _: Unit => | |
61 | 91 | if ((i.caller == this)) | |
62 | 92 | then true | |
63 | 93 | else throwPD() | |
64 | 94 | case _ => | |
65 | 95 | throw("Match error") | |
66 | 96 | } | |
67 | 97 | ||
68 | 98 | ||
69 | 99 | func mustAdmin (i) = { | |
70 | 100 | let adminPKs = split(valueOrElse(getString(keyAdminPubKeys()), EMPTY), SEP) | |
71 | 101 | if (containsElement(adminPKs, toBase58String(i.callerPublicKey))) | |
72 | 102 | then true | |
73 | 103 | else { | |
74 | 104 | let isManager = mustManager(i) | |
75 | 105 | if ((isManager == isManager)) | |
76 | 106 | then true | |
77 | 107 | else throw("Strict value is not equal to itself.") | |
78 | 108 | } | |
79 | 109 | } | |
80 | 110 | ||
81 | 111 | ||
82 | 112 | func isCreated (assetId) = valueOrElse(getBoolean(keyCreated(assetId)), false) | |
83 | 113 | ||
84 | 114 | ||
85 | 115 | func verifiedToStatus (verified) = if (verified) | |
86 | 116 | then 2 | |
87 | 117 | else 0 | |
88 | 118 | ||
89 | 119 | ||
90 | 120 | @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) | |
91 | 275 | func createOrUpdate (assetId,ticker,logo,verified) = { | |
92 | 276 | let checkCaller = mustAdmin(i) | |
93 | 277 | if ((checkCaller == checkCaller)) | |
94 | 278 | then { | |
95 | 279 | let checkAssetId = valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "Invalid asset ID") | |
96 | 280 | if ((checkAssetId == checkAssetId)) | |
97 | 281 | then { | |
98 | 282 | let isCreatedNow = !(isCreated(assetId)) | |
99 | 283 | if ((isCreatedNow == isCreatedNow)) | |
100 | 284 | then { | |
101 | 285 | let setLogoActions = if ((logo == "")) | |
102 | 286 | then nil | |
103 | 287 | else [StringEntry(keyLogo(assetId), logo)] | |
104 | 288 | $Tuple2(([BooleanEntry(keyCreated(assetId), true), StringEntry(keyTicker(assetId), ticker), IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))] ++ setLogoActions), isCreatedNow) | |
105 | 289 | } | |
106 | 290 | else throw("Strict value is not equal to itself.") | |
107 | 291 | } | |
108 | 292 | else throw("Strict value is not equal to itself.") | |
109 | 293 | } | |
110 | 294 | else throw("Strict value is not equal to itself.") | |
111 | 295 | } | |
112 | 296 | ||
113 | 297 | ||
114 | 298 | ||
115 | 299 | @Callable(i) | |
116 | 300 | func setTicker (assetId,ticker) = { | |
117 | 301 | let checks = [mustAdmin(i), if (isCreated(assetId)) | |
118 | 302 | then true | |
119 | 303 | else throwNoAsset()] | |
120 | 304 | if ((checks == checks)) | |
121 | 305 | then [StringEntry(keyTicker(assetId), ticker)] | |
122 | 306 | else throw("Strict value is not equal to itself.") | |
123 | 307 | } | |
124 | 308 | ||
125 | 309 | ||
126 | 310 | ||
127 | 311 | @Callable(i) | |
128 | 312 | func setLogo (assetId,logo) = { | |
129 | 313 | let checks = [mustAdmin(i), if (isCreated(assetId)) | |
130 | 314 | then true | |
131 | 315 | else throwNoAsset()] | |
132 | 316 | if ((checks == checks)) | |
133 | 317 | then [StringEntry(keyLogo(assetId), logo)] | |
134 | 318 | else throw("Strict value is not equal to itself.") | |
135 | 319 | } | |
136 | 320 | ||
137 | 321 | ||
138 | 322 | ||
139 | 323 | @Callable(i) | |
140 | 324 | func setVerified (assetId,verified) = { | |
141 | 325 | let checks = [mustAdmin(i), if (isCreated(assetId)) | |
142 | 326 | then true | |
143 | 327 | else throwNoAsset()] | |
144 | 328 | 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 | + | } | |
146 | 371 | else throw("Strict value is not equal to itself.") | |
147 | 372 | } | |
148 | 373 | ||
149 | 374 | ||
150 | 375 | ||
151 | 376 | @Callable(i) | |
152 | 377 | func setAdmins (adminPubKeys) = { | |
153 | 378 | let checkCaller = mustManager(i) | |
154 | 379 | if ((checkCaller == checkCaller)) | |
155 | 380 | then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))] | |
156 | 381 | else throw("Strict value is not equal to itself.") | |
157 | 382 | } | |
158 | 383 | ||
159 | 384 | ||
160 | 385 | ||
161 | 386 | @Callable(i) | |
162 | 387 | func setManager (pendingManagerPublicKey) = { | |
163 | 388 | let checkCaller = mustManager(i) | |
164 | 389 | if ((checkCaller == checkCaller)) | |
165 | 390 | then { | |
166 | 391 | let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey) | |
167 | 392 | if ((checkManagerPublicKey == checkManagerPublicKey)) | |
168 | 393 | then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)] | |
169 | 394 | else throw("Strict value is not equal to itself.") | |
170 | 395 | } | |
171 | 396 | else throw("Strict value is not equal to itself.") | |
172 | 397 | } | |
173 | 398 | ||
174 | 399 | ||
175 | 400 | ||
176 | 401 | @Callable(i) | |
177 | 402 | func confirmManager () = { | |
178 | 403 | let pm = pendingManagerPublicKeyOrUnit() | |
179 | 404 | let hasPM = if (isDefined(pm)) | |
180 | 405 | then true | |
181 | 406 | else throw("No pending manager") | |
182 | 407 | if ((hasPM == hasPM)) | |
183 | 408 | then { | |
184 | 409 | let checkPM = if ((i.callerPublicKey == value(pm))) | |
185 | 410 | then true | |
186 | 411 | else throw("You are not pending manager") | |
187 | 412 | if ((checkPM == checkPM)) | |
188 | 413 | then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())] | |
189 | 414 | else throw("Strict value is not equal to itself.") | |
190 | 415 | } | |
191 | 416 | else throw("Strict value is not equal to itself.") | |
192 | 417 | } | |
193 | 418 | ||
194 | 419 | ||
195 | 420 | @Verifier(tx) | |
196 | 421 | func verify () = { | |
197 | 422 | let targetPublicKey = match managerPublicKeyOrUnit() { | |
198 | 423 | case pk: ByteVector => | |
199 | 424 | pk | |
200 | 425 | case _: Unit => | |
201 | 426 | tx.senderPublicKey | |
202 | 427 | case _ => | |
203 | 428 | throw("Match error") | |
204 | 429 | } | |
205 | 430 | sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey) | |
206 | 431 | } | |
207 | 432 |
github/deemru/w8io/873ac7e 56.19 ms ◑![]()