tx · 8BZtmbAJyhrRnuMJDKjgy3P9gScSui6wsFKcJoUywNBh

3Mpwh8Q1gGv6gwtzViR9mgruFyy6Jdm4GCG:  -0.04200000 Waves

2024.12.20 10:25 [3422553] smart account 3Mpwh8Q1gGv6gwtzViR9mgruFyy6Jdm4GCG > SELF 0.00000000 Waves

{ "type": 13, "id": "8BZtmbAJyhrRnuMJDKjgy3P9gScSui6wsFKcJoUywNBh", "fee": 4200000, "feeAssetId": null, "timestamp": 1734679566289, "version": 2, "chainId": 84, "sender": "3Mpwh8Q1gGv6gwtzViR9mgruFyy6Jdm4GCG", "senderPublicKey": "FLnBQATnBGWeMDB5MhixoEef8W61cnZUFXeCcwWAWQaR", "proofs": [ "4491qjBuSZbKp1faHke3StBdBsLdDXAHtGtBEGotY6qbDb1n2ve7fTK8xdxgR5b44CmdN3KUigcUHfWFrSoFH4yC" ], "script": "base64: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ZG1pblBLcwkABLUAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEIgAAAAEJAQAAAA9rZXlBZG1pblB1YktleXMAAAAABQAAAAVFTVBUWQUAAAADU0VQAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACGFkbWluUEtzCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQYJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkBAAAACWlzQ3JlYXRlZAAAAAEAAAAHYXNzZXRJZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABCAAAAABCQEAAAAKa2V5Q3JlYXRlZAAAAAEFAAAAB2Fzc2V0SWQHAQAAABFpc01lbWVQb29sRmFjdG9yeQAAAAEAAAABaQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzCQEAAAASa2V5RmFjdG9yeUNvbnRyYWN0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAA5mYWN0b3J5QWRkcmVzcwUAAAAHJG1hdGNoMAQAAAAHJG1hdGNoMQkABCYAAAABBQAAAA5mYWN0b3J5QWRkcmVzcwMJAAABAAAAAgUAAAAHJG1hdGNoMQIAAAAHQWRkcmVzcwQAAAAPZmFjdG9yeUNvbnRyYWN0BQAAAAckbWF0Y2gxBAAAAAckbWF0Y2gyCQAEHQAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAEmtleU1lbWVQb29sRmFjdG9yeQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDICAAAABlN0cmluZwQAAAAWbWVtZVBvb2xGYWN0b3J5QWRkcmVzcwUAAAAHJG1hdGNoMgkAAAAAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAWbWVtZVBvb2xGYWN0b3J5QWRkcmVzcwcHBwEAAAAQdmVyaWZpZWRUb1N0YXR1cwAAAAEAAAAIdmVyaWZpZWQDBQAAAAh2ZXJpZmllZAUAAAAOc3RhdHVzVmVyaWZpZWQFAAAAEHN0YXR1c1VudmVyaWZpZWQBAAAAD2FkZExhYmVsQWN0aW9ucwAAAAMAAAAHYXNzZXRJZAAAAAVsYWJlbAAAAAx0aHJvd09uRXJyb3IEAAAABmxhYmVscwkBAAAACWdldExhYmVscwAAAAAEAAAAC2Fzc2V0TGFiZWxzCQEAAAAOZ2V0QXNzZXRMYWJlbHMAAAABBQAAAAdhc3NldElkBAAAAApjaGVja0xhYmVsAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAABmxhYmVscwUAAAAFbGFiZWwGCQAAAgAAAAECAAAAE0xhYmVsIGRvZXNuJ3QgZXhpc3QDCQAAAAAAAAIFAAAACmNoZWNrTGFiZWwFAAAACmNoZWNrTGFiZWwEAAAADm5ld0Fzc2V0TGFiZWxzAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAAC2Fzc2V0TGFiZWxzBQAAAAVsYWJlbAMFAAAADHRocm93T25FcnJvcgkAAAIAAAABAgAAABxMYWJlbCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkBQAAAAthc3NldExhYmVscwkABE0AAAACBQAAAAthc3NldExhYmVscwUAAAAFbGFiZWwJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmtleUFzc2V0TGFiZWxzAAAAAQUAAAAHYXNzZXRJZAkABLkAAAACBQAAAA5uZXdBc3NldExhYmVscwUAAAADU0VQBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQAAABJkZWxldGVMYWJlbEFjdGlvbnMAAAADAAAAB2Fzc2V0SWQAAAAFbGFiZWwAAAAMdGhyb3dPbkVycm9yBAAAAAthc3NldExhYmVscwkBAAAADmdldEFzc2V0TGFiZWxzAAAAAQUAAAAHYXNzZXRJZAQAAAAObmV3QXNzZXRMYWJlbHMDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAALYXNzZXRMYWJlbHMFAAAABWxhYmVsCQAEUQAAAAIFAAAAC2Fzc2V0TGFiZWxzCQEAAAAFdmFsdWUAAAABCQAETwAAAAIFAAAAC2Fzc2V0TGFiZWxzBQAAAAVsYWJlbAMFAAAADHRocm93T25FcnJvcgkAAAIAAAABAgAAABJMYWJlbCB3YXNuJ3QgYWRkZWQFAAAAC2Fzc2V0TGFiZWxzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA5rZXlBc3NldExhYmVscwAAAAEFAAAAB2Fzc2V0SWQJAAS5AAAAAgUAAAAObmV3QXNzZXRMYWJlbHMFAAAAA1NFUAUAAAADbmlsAQAAABJzZXRWZXJpZmllZEFjdGlvbnMAAAACAAAAB2Fzc2V0SWQAAAAIdmVyaWZpZWQEAAAAHWxhYmVsQ29tbXVuaXR5VmVyaWZpZWRBY3Rpb25zAwUAAAAIdmVyaWZpZWQJAQAAAA9hZGRMYWJlbEFjdGlvbnMAAAADBQAAAAdhc3NldElkBQAAABZsYWJlbENvbW11bml0eVZlcmlmaWVkBwkBAAAAEmRlbGV0ZUxhYmVsQWN0aW9ucwAAAAMFAAAAB2Fzc2V0SWQFAAAAFmxhYmVsQ29tbXVuaXR5VmVyaWZpZWQHCQAETgAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAlrZXlTdGF0dXMAAAABBQAAAAdhc3NldElkCQEAAAAQdmVyaWZpZWRUb1N0YXR1cwAAAAEFAAAACHZlcmlmaWVkBQAAAANuaWwFAAAAHWxhYmVsQ29tbXVuaXR5VmVyaWZpZWRBY3Rpb25zAAAAFAAAAAFpAQAAAAxzZXRBc3NldE5hbWUAAAACAAAAB2Fzc2V0SUQAAAAJYXNzZXROYW1lBAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAMa2V5QXNzZXROYW1lAAAAAQUAAAAHYXNzZXRJRAUAAAAJYXNzZXROYW1lBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAE3NldEFzc2V0RGVzY3JpcHRpb24AAAACAAAAB2Fzc2V0SUQAAAAQYXNzZXREZXNjcmlwdGlvbgQAAAALY2hlY2tDYWxsZXIJAQAAAAltdXN0QWRtaW4AAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleUFzc2V0RGVzY3JpcHRpb24AAAABBQAAAAdhc3NldElEBQAAABBhc3NldERlc2NyaXB0aW9uBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAAAgAAABF1c2VyUG9vbHNDb250cmFjdAAAAAZsYWJlbHMEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAADWNoZWNrc0FkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABBQAAABF1c2VyUG9vbHNDb250cmFjdAIAAAAPSW52YWxpZCBhZGRyZXNzAwkAAAAAAAACBQAAAA1jaGVja3NBZGRyZXNzBQAAAA1jaGVja3NBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABRrZXlVc2VyUG9vbHNDb250cmFjdAAAAAAFAAAAEXVzZXJQb29sc0NvbnRyYWN0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAlrZXlMYWJlbHMAAAAACQAEuQAAAAIJAAROAAAAAgUAAAANZGVmYXVsdExhYmVscwUAAAAGbGFiZWxzBQAAAANTRVAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADWNvbnN0cnVjdG9yVjIAAAABAAAAD2ZhY3RvcnlDb250cmFjdAQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAMY2hlY2tBZGRyZXNzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQUAAAAPZmFjdG9yeUNvbnRyYWN0AgAAACBpbnZhbGlkIGZhY3RvcnkgY29udHJhY3QgYWRkcmVzcwMJAAAAAAAAAgUAAAAMY2hlY2tBZGRyZXNzBQAAAAxjaGVja0FkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleUZhY3RvcnlDb250cmFjdAAAAAAFAAAAD2ZhY3RvcnlDb250cmFjdAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAANYWRkQXNzZXRzTGluawAAAAMAAAALYW1vdW50QXNzZXQAAAAKcHJpY2VBc3NldAAAAAdscEFzc2V0BAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAga2V5QW1vdW50QW5kUHJpY2VBc3NldHNUb0xwQXNzZXQAAAACBQAAAAthbW91bnRBc3NldAUAAAAKcHJpY2VBc3NldAUAAAAHbHBBc3NldAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAga2V5THBBc3NldFRvQW1vdW50QW5kUHJpY2VBc3NldHMAAAABBQAAAAdscEFzc2V0CQAEuQAAAAIJAARMAAAAAgUAAAALYW1vdW50QXNzZXQJAARMAAAAAgUAAAAKcHJpY2VBc3NldAUAAAADbmlsBQAAAANTRVAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAYaW5jcmVhc2VBc3NldFBvb2xzTnVtYmVyAAAAAQAAAAdhc3NldElkBAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAATYXNzZXRQb29sc051bWJlcktleQkBAAAAE2tleUFzc2V0UG9v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b3IEAAAADXVwZGF0ZUFjdGlvbnMJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleUFzc2V0SWRUb1RpY2tlcgAAAAEFAAAAB2Fzc2V0SWQFAAAABnRpY2tlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASa2V5VGlja2VyVG9Bc3NldElkAAAAAQUAAAAGdGlja2VyBQAAAAdhc3NldElkBQAAAANuaWwJAAROAAAAAgUAAAANZGVsZXRlQWN0aW9ucwUAAAANdXBkYXRlQWN0aW9ucwkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAxkZWxldGVUaWNrZXIAAAABAAAAB2Fzc2V0SWQEAAAAC2NoZWNrQ2FsbGVyCQEAAAAJbXVzdEFkbWluAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAAAZ0aWNrZXIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQEAAAASa2V5QXNzZXRJZFRvVGlja2VyAAAAAQUAAAAHYXNzZXRJZAIAAAANSW52YWxpZCBhc3NldAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAASa2V5QXNzZXRJZFRvVGlja2VyAAAAAQUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAASa2V5VGlja2VyVG9Bc3NldElkAAAAAQUAAAAGdGlja2VyBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADmNyZWF0ZU9yVXBkYXRlAAAAAwAAAAdhc3NldElkAAAABGxvZ28AAAAIdmVyaWZpZWQEAAAAC2NoZWNrQ2FsbGVyAwkBAAAAEWlzTWVtZVBvb2xGYWN0b3J5AAAA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dG9yeUNvbnRyYWN0BgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAAAlscEFzc2V0SWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQiAAAAAQkBAAAAIGtleUFtb3VudEFuZFByaWNlQXNzZXRzVG9McEFzc2V0AAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkAgAAAAAEAAAAFXBvb2xLZXlzRGVsZXRlQWN0aW9ucwMJAAAAAAAAAgUAAAAJbHBBc3NldElkAgAAAAAFAAAAA25pbAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAga2V5THBBc3NldFRvQW1vdW50QW5kUHJpY2VBc3NldHMAAAABBQAAAAlscEFzc2V0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAADmtleUFzc2V0TGFiZWxzAAAAAQUAAAAJbHBBc3NldElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAxrZXlBc3NldE5hbWUAAAABBQAAAAlscEFzc2V0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAE2tleUFzc2V0RGVzY3JpcHRpb24AAAABBQAAAAlscEFzc2V0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACmtleUNyZWF0ZWQAAAABBQAAAAlscEFzc2V0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACWtleVN0YXR1cwAAAAEFAAAACWxwQXNzZXRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAHa2V5TG9nbwAAAAEFAAAACWxwQXNzZXRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAJa2V5VGlja2VyAAAAAQUAAAAJbHBBc3NldElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAACBrZXlBbW91bnRBbmRQcmljZUFzc2V0c1RvTHBBc3NldAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAADbmlsBQAAABVwb29sS2V5c0RlbGV0ZUFjdGlvbnMJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAPdGFyZ2V0UHVibGljS2V5BAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwBQAAAAJwawMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAD3RhcmdldFB1YmxpY0tleWJtXUg=", "height": 3422553, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 73ikuEeWgxYdou33Afud9GkKLeA5JEEHdAWxGfRnvEXD Next: none Diff:
OldNewDifferences
7676
7777
7878 func keyAssetDescription (assetId) = makeString(["%s%s", "assetDescription", assetId], SEP)
79+
80+
81+func keyMemePoolFactory () = makeString(["%s", "memePoolFactory"], SEP)
7982
8083
8184 func getValueOrFail (address,key,type) = {
175178
176179
177180 func isCreated (assetId) = valueOrElse(getBoolean(keyCreated(assetId)), false)
181+
182+
183+func isMemePoolFactory (i) = match getString(this, keyFactoryContract()) {
184+ case factoryAddress: String =>
185+ match addressFromString(factoryAddress) {
186+ case factoryContract: Address =>
187+ match getString(factoryContract, keyMemePoolFactory()) {
188+ case memePoolFactoryAddress: String =>
189+ (toString(i.caller) == memePoolFactoryAddress)
190+ case _ =>
191+ false
192+ }
193+ case _ =>
194+ false
195+ }
196+ case _ =>
197+ false
198+}
178199
179200
180201 func verifiedToStatus (verified) = if (verified)
409430
410431 @Callable(i)
411432 func createOrUpdate (assetId,logo,verified) = {
412- let checkCaller = mustAdmin(i)
433+ let checkCaller = if (isMemePoolFactory(i))
434+ then true
435+ else mustAdmin(i)
413436 if ((checkCaller == checkCaller))
414437 then {
415438 let isCreatedNow = !(isCreated(assetId))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let EMPTY = ""
77
88 let statusVerified = 2
99
1010 let statusUnverified = 0
1111
1212 let labelCommunityVerified = "COMMUNITY_VERIFIED"
1313
1414 let labelPoolsLp = "POOLS_LP"
1515
1616 let defaultLabels = [labelCommunityVerified, labelPoolsLp]
1717
1818 func throwPD () = throw("Permission denied")
1919
2020
2121 func throwNoAsset () = throw("Asset doesn't exists")
2222
2323
2424 func throwInvalidTicker () = throw("Invalid ticker")
2525
2626
2727 func keyAdminPubKeys () = "%s__adminPubKeys"
2828
2929
3030 func keyUserPoolsContract () = "%s__userPoolsContract"
3131
3232
3333 func keyFactoryContract () = "%s__factoryContract"
3434
3535
3636 func keyCreated (assetId) = (("created_<" + assetId) + ">")
3737
3838
3939 func keyLogo (assetId) = (("logo_<" + assetId) + ">")
4040
4141
4242 func keyTicker (assetId) = (("ticker_<" + assetId) + ">")
4343
4444
4545 func keyStatus (assetId) = (("status_<" + assetId) + ">")
4646
4747
4848 func keyAssetPoolsNumber (assetId) = makeString(["%s%s", "pools", assetId], SEP)
4949
5050
5151 func keyTickerToAssetId (ticker) = makeString(["%s%s", "ticker2assetId", ticker], SEP)
5252
5353
5454 func keyAssetIdToTicker (assetId) = makeString(["%s%s", "assetId2ticker", assetId], SEP)
5555
5656
5757 func keyAmountAndPriceAssetsToLpAsset (amountAsset,priceAsset) = makeString(["%s%s%s", "amountAndPriceAssetsToLpAsset", amountAsset, priceAsset], SEP)
5858
5959
6060 func keyLpAssetToAmountAndPriceAssets (lpAsset) = makeString(["%s%s", "lpAssetToAmountAndPriceAssets", lpAsset], SEP)
6161
6262
6363 func keyAssetLabels (assetId) = makeString(["%s%s", "labels", assetId], SEP)
6464
6565
6666 func keyLabels () = makeString(["%s", "labels"], SEP)
6767
6868
6969 func keyAssetName (assetId) = makeString(["%s%s", "assetName", assetId], SEP)
7070
7171
7272 func keyManagerVaultAddress () = "%s__managerVaultAddress"
7373
7474
7575 func keyManagerPublicKey () = "%s__managerPublicKey"
7676
7777
7878 func keyAssetDescription (assetId) = makeString(["%s%s", "assetDescription", assetId], SEP)
79+
80+
81+func keyMemePoolFactory () = makeString(["%s", "memePoolFactory"], SEP)
7982
8083
8184 func getValueOrFail (address,key,type) = {
8285 let error = makeString(["mandatory ", toString(address), ".", key, " is not defined"], "")
8386 valueOrErrorMessage( match type {
8487 case str: String =>
8588 getString(address, key)
8689 case int: Int =>
8790 getInteger(address, key)
8891 case _ =>
8992 throw("invalid entry type")
9093 }, error)
9194 }
9295
9396
9497 func getStrOrFail (address,key) = {
9598 let @ = getValueOrFail(address, key, "")
9699 if ($isInstanceOf(@, "String"))
97100 then @
98101 else throw("Couldn't cast Int|String to String")
99102 }
100103
101104
102105 func getIntOrFail (address,key) = {
103106 let @ = getValueOrFail(address, key, 0)
104107 if ($isInstanceOf(@, "Int"))
105108 then @
106109 else throw("Couldn't cast Int|String to Int")
107110 }
108111
109112
110113 func isVerified (assetId) = (valueOrElse(getInteger(keyStatus(assetId)), statusUnverified) == statusVerified)
111114
112115
113116 func getLabels () = match getString(keyLabels()) {
114117 case s: String =>
115118 if ((size(s) == 0))
116119 then nil
117120 else split(s, SEP)
118121 case _ =>
119122 nil
120123 }
121124
122125
123126 func getAssetLabels (assetId) = match getString(keyAssetLabels(assetId)) {
124127 case s: String =>
125128 if ((size(s) == 0))
126129 then nil
127130 else split(s, SEP)
128131 case _ =>
129132 nil
130133 }
131134
132135
133136 func getManagerVaultAddressOrThis () = match getString(keyManagerVaultAddress()) {
134137 case s: String =>
135138 addressFromStringValue(s)
136139 case _ =>
137140 this
138141 }
139142
140143
141144 func managerPublicKeyOrUnit () = {
142145 let managerVaultAddress = getManagerVaultAddressOrThis()
143146 match getString(managerVaultAddress, keyManagerPublicKey()) {
144147 case s: String =>
145148 fromBase58String(s)
146149 case _: Unit =>
147150 unit
148151 case _ =>
149152 throw("Match error")
150153 }
151154 }
152155
153156
154157 func isManager (i) = match managerPublicKeyOrUnit() {
155158 case pk: ByteVector =>
156159 (i.callerPublicKey == pk)
157160 case _: Unit =>
158161 (i.caller == this)
159162 case _ =>
160163 throw("Match error")
161164 }
162165
163166
164167 func mustManager (i) = if (isManager(i))
165168 then true
166169 else throw("permission denied")
167170
168171
169172 func mustAdmin (i) = {
170173 let adminPKs = split(valueOrElse(getString(keyAdminPubKeys()), EMPTY), SEP)
171174 if (containsElement(adminPKs, toBase58String(i.callerPublicKey)))
172175 then true
173176 else mustManager(i)
174177 }
175178
176179
177180 func isCreated (assetId) = valueOrElse(getBoolean(keyCreated(assetId)), false)
181+
182+
183+func isMemePoolFactory (i) = match getString(this, keyFactoryContract()) {
184+ case factoryAddress: String =>
185+ match addressFromString(factoryAddress) {
186+ case factoryContract: Address =>
187+ match getString(factoryContract, keyMemePoolFactory()) {
188+ case memePoolFactoryAddress: String =>
189+ (toString(i.caller) == memePoolFactoryAddress)
190+ case _ =>
191+ false
192+ }
193+ case _ =>
194+ false
195+ }
196+ case _ =>
197+ false
198+}
178199
179200
180201 func verifiedToStatus (verified) = if (verified)
181202 then statusVerified
182203 else statusUnverified
183204
184205
185206 func addLabelActions (assetId,label,throwOnError) = {
186207 let labels = getLabels()
187208 let assetLabels = getAssetLabels(assetId)
188209 let checkLabel = if (containsElement(labels, label))
189210 then true
190211 else throw("Label doesn't exist")
191212 if ((checkLabel == checkLabel))
192213 then {
193214 let newAssetLabels = if (containsElement(assetLabels, label))
194215 then if (throwOnError)
195216 then throw("Label has already been added")
196217 else assetLabels
197218 else (assetLabels :+ label)
198219 [StringEntry(keyAssetLabels(assetId), makeString(newAssetLabels, SEP))]
199220 }
200221 else throw("Strict value is not equal to itself.")
201222 }
202223
203224
204225 func deleteLabelActions (assetId,label,throwOnError) = {
205226 let assetLabels = getAssetLabels(assetId)
206227 let newAssetLabels = if (containsElement(assetLabels, label))
207228 then removeByIndex(assetLabels, value(indexOf(assetLabels, label)))
208229 else if (throwOnError)
209230 then throw("Label wasn't added")
210231 else assetLabels
211232 [StringEntry(keyAssetLabels(assetId), makeString(newAssetLabels, SEP))]
212233 }
213234
214235
215236 func setVerifiedActions (assetId,verified) = {
216237 let labelCommunityVerifiedActions = if (verified)
217238 then addLabelActions(assetId, labelCommunityVerified, false)
218239 else deleteLabelActions(assetId, labelCommunityVerified, false)
219240 ([IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))] ++ labelCommunityVerifiedActions)
220241 }
221242
222243
223244 @Callable(i)
224245 func setAssetName (assetID,assetName) = {
225246 let checkCaller = mustAdmin(i)
226247 if ((checkCaller == checkCaller))
227248 then [StringEntry(keyAssetName(assetID), assetName)]
228249 else throw("Strict value is not equal to itself.")
229250 }
230251
231252
232253
233254 @Callable(i)
234255 func setAssetDescription (assetID,assetDescription) = {
235256 let checkCaller = mustAdmin(i)
236257 if ((checkCaller == checkCaller))
237258 then [StringEntry(keyAssetDescription(assetID), assetDescription)]
238259 else throw("Strict value is not equal to itself.")
239260 }
240261
241262
242263
243264 @Callable(i)
244265 func constructor (userPoolsContract,labels) = {
245266 let checkCaller = mustManager(i)
246267 if ((checkCaller == checkCaller))
247268 then {
248269 let checksAddress = valueOrErrorMessage(addressFromString(userPoolsContract), "Invalid address")
249270 if ((checksAddress == checksAddress))
250271 then [StringEntry(keyUserPoolsContract(), userPoolsContract), StringEntry(keyLabels(), makeString((defaultLabels ++ labels), SEP))]
251272 else throw("Strict value is not equal to itself.")
252273 }
253274 else throw("Strict value is not equal to itself.")
254275 }
255276
256277
257278
258279 @Callable(i)
259280 func constructorV2 (factoryContract) = {
260281 let checkCaller = mustManager(i)
261282 if ((checkCaller == checkCaller))
262283 then {
263284 let checkAddress = valueOrErrorMessage(addressFromString(factoryContract), "invalid factory contract address")
264285 if ((checkAddress == checkAddress))
265286 then [StringEntry(keyFactoryContract(), factoryContract)]
266287 else throw("Strict value is not equal to itself.")
267288 }
268289 else throw("Strict value is not equal to itself.")
269290 }
270291
271292
272293
273294 @Callable(i)
274295 func addAssetsLink (amountAsset,priceAsset,lpAsset) = {
275296 let checkCaller = mustAdmin(i)
276297 if ((checkCaller == checkCaller))
277298 then [StringEntry(keyAmountAndPriceAssetsToLpAsset(amountAsset, priceAsset), lpAsset), StringEntry(keyLpAssetToAmountAndPriceAssets(lpAsset), makeString([amountAsset, priceAsset], SEP))]
278299 else throw("Strict value is not equal to itself.")
279300 }
280301
281302
282303
283304 @Callable(i)
284305 func increaseAssetPoolsNumber (assetId) = {
285306 let checkCaller = mustAdmin(i)
286307 if ((checkCaller == checkCaller))
287308 then {
288309 let assetPoolsNumberKey = keyAssetPoolsNumber(assetId)
289310 let assetPoolsNumber = valueOrElse(getInteger(assetPoolsNumberKey), 0)
290311 [IntegerEntry(assetPoolsNumberKey, (assetPoolsNumber + 1))]
291312 }
292313 else throw("Strict value is not equal to itself.")
293314 }
294315
295316
296317
297318 @Callable(i)
298319 func createLabel (label) = {
299320 let labels = getLabels()
300321 let checkCaller = mustAdmin(i)
301322 if ((checkCaller == checkCaller))
302323 then {
303324 let checkLabel = [if (!(contains(label, SEP)))
304325 then true
305326 else throw("Invalid label name"), if (!(containsElement(labels, label)))
306327 then true
307328 else throw("Label exists")]
308329 if ((checkLabel == checkLabel))
309330 then [StringEntry(keyLabels(), makeString((labels :+ label), SEP))]
310331 else throw("Strict value is not equal to itself.")
311332 }
312333 else throw("Strict value is not equal to itself.")
313334 }
314335
315336
316337
317338 @Callable(i)
318339 func dropLabel (label) = {
319340 let labels = getLabels()
320341 let checkCaller = mustManager(i)
321342 if ((checkCaller == checkCaller))
322343 then {
323344 let checkLabel = if (containsElement(labels, label))
324345 then true
325346 else throw("Label doesn't exist")
326347 if ((checkLabel == checkLabel))
327348 then [StringEntry(keyLabels(), makeString(removeByIndex(labels, value(indexOf(labels, label))), SEP))]
328349 else throw("Strict value is not equal to itself.")
329350 }
330351 else throw("Strict value is not equal to itself.")
331352 }
332353
333354
334355
335356 @Callable(i)
336357 func addLabel (assetId,label) = {
337358 let checkCaller = mustAdmin(i)
338359 if ((checkCaller == checkCaller))
339360 then addLabelActions(assetId, label, true)
340361 else throw("Strict value is not equal to itself.")
341362 }
342363
343364
344365
345366 @Callable(i)
346367 func deleteLabel (assetId,label) = {
347368 let checkCaller = mustAdmin(i)
348369 if ((checkCaller == checkCaller))
349370 then deleteLabelActions(assetId, label, true)
350371 else throw("Strict value is not equal to itself.")
351372 }
352373
353374
354375
355376 @Callable(i)
356377 func updateTicker (assetId,ticker) = {
357378 let checkCaller = mustAdmin(i)
358379 if ((checkCaller == checkCaller))
359380 then {
360381 let checkAsset = if (isCreated(assetId))
361382 then true
362383 else throwNoAsset()
363384 if ((checkAsset == checkAsset))
364385 then {
365386 let checkTicker = if ((ticker != ""))
366387 then true
367388 else throwInvalidTicker()
368389 if ((checkTicker == checkTicker))
369390 then {
370391 let deleteActions = ( match getString(keyTickerToAssetId(ticker)) {
371392 case assetIdOld: String =>
372393 [DeleteEntry(keyAssetIdToTicker(assetIdOld))]
373394 case _: Unit =>
374395 nil
375396 case _ =>
376397 throw("Match error")
377398 } ++ match getString(keyAssetIdToTicker(assetId)) {
378399 case tickerOld: String =>
379400 [DeleteEntry(keyTickerToAssetId(tickerOld))]
380401 case _: Unit =>
381402 nil
382403 case _ =>
383404 throw("Match error")
384405 })
385406 let updateActions = [StringEntry(keyAssetIdToTicker(assetId), ticker), StringEntry(keyTickerToAssetId(ticker), assetId)]
386407 (deleteActions ++ updateActions)
387408 }
388409 else throw("Strict value is not equal to itself.")
389410 }
390411 else throw("Strict value is not equal to itself.")
391412 }
392413 else throw("Strict value is not equal to itself.")
393414 }
394415
395416
396417
397418 @Callable(i)
398419 func deleteTicker (assetId) = {
399420 let checkCaller = mustAdmin(i)
400421 if ((checkCaller == checkCaller))
401422 then {
402423 let ticker = valueOrErrorMessage(getString(keyAssetIdToTicker(assetId)), "Invalid asset")
403424 [DeleteEntry(keyAssetIdToTicker(assetId)), DeleteEntry(keyTickerToAssetId(ticker))]
404425 }
405426 else throw("Strict value is not equal to itself.")
406427 }
407428
408429
409430
410431 @Callable(i)
411432 func createOrUpdate (assetId,logo,verified) = {
412- let checkCaller = mustAdmin(i)
433+ let checkCaller = if (isMemePoolFactory(i))
434+ then true
435+ else mustAdmin(i)
413436 if ((checkCaller == checkCaller))
414437 then {
415438 let isCreatedNow = !(isCreated(assetId))
416439 if ((isCreatedNow == isCreatedNow))
417440 then {
418441 let setLogoActions = if ((logo == ""))
419442 then nil
420443 else [StringEntry(keyLogo(assetId), logo)]
421444 $Tuple2((([BooleanEntry(keyCreated(assetId), true)] ++ setLogoActions) ++ setVerifiedActions(assetId, verified)), isCreatedNow)
422445 }
423446 else throw("Strict value is not equal to itself.")
424447 }
425448 else throw("Strict value is not equal to itself.")
426449 }
427450
428451
429452
430453 @Callable(i)
431454 func setLogo (assetId,logo) = {
432455 let checks = [mustAdmin(i), if (isCreated(assetId))
433456 then true
434457 else throwNoAsset()]
435458 if ((checks == checks))
436459 then {
437460 let action = if ((logo == ""))
438461 then DeleteEntry(keyLogo(assetId))
439462 else StringEntry(keyLogo(assetId), logo)
440463 [action]
441464 }
442465 else throw("Strict value is not equal to itself.")
443466 }
444467
445468
446469
447470 @Callable(i)
448471 func getAssetLogoREADONLY (assetId) = {
449472 let logo = valueOrElse(getString(keyLogo(assetId)), "")
450473 $Tuple2(nil, logo)
451474 }
452475
453476
454477
455478 @Callable(i)
456479 func setVerified (assetId,verified) = {
457480 let checks = [mustAdmin(i), if (isCreated(assetId))
458481 then true
459482 else throwNoAsset()]
460483 if ((checks == checks))
461484 then {
462485 let onVerificationLossInv = if (!(verified))
463486 then {
464487 let factoryContract = valueOrErrorMessage(addressFromString(getStrOrFail(this, keyFactoryContract())), "invalid factory contract address")
465488 invoke(factoryContract, "onVerificationLoss", [assetId], nil)
466489 }
467490 else unit
468491 if ((onVerificationLossInv == onVerificationLossInv))
469492 then $Tuple2(setVerifiedActions(assetId, verified), unit)
470493 else throw("Strict value is not equal to itself.")
471494 }
472495 else throw("Strict value is not equal to itself.")
473496 }
474497
475498
476499
477500 @Callable(i)
478501 func onEliminate (assetId) = {
479502 let poolsNumber = valueOrElse(getInteger(keyAssetPoolsNumber(assetId)), 0)
480503 let actions = if ((poolsNumber > 0))
481504 then nil
482505 else [DeleteEntry(keyLogo(assetId))]
483506 $Tuple2(actions, unit)
484507 }
485508
486509
487510
488511 @Callable(i)
489512 func setAdmins (adminPubKeys) = {
490513 let checkCaller = mustManager(i)
491514 if ((checkCaller == checkCaller))
492515 then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
493516 else throw("Strict value is not equal to itself.")
494517 }
495518
496519
497520
498521 @Callable(i)
499522 func isVerifiedREADONLY (assetId) = $Tuple2(nil, isVerified(assetId))
500523
501524
502525
503526 @Callable(i)
504527 func deletePool (amountAssetId,priceAssetId) = {
505528 let factoryContract = addressFromStringValue(getStringValue(keyFactoryContract()))
506529 let checkCaller = if ((i.caller == factoryContract))
507530 then true
508531 else mustManager(i)
509532 if ((checkCaller == checkCaller))
510533 then {
511534 let lpAssetId = valueOrElse(getString(keyAmountAndPriceAssetsToLpAsset(amountAssetId, priceAssetId)), "")
512535 let poolKeysDeleteActions = if ((lpAssetId == ""))
513536 then nil
514537 else [DeleteEntry(keyLpAssetToAmountAndPriceAssets(lpAssetId)), DeleteEntry(keyAssetLabels(lpAssetId)), DeleteEntry(keyAssetName(lpAssetId)), DeleteEntry(keyAssetDescription(lpAssetId)), DeleteEntry(keyCreated(lpAssetId)), DeleteEntry(keyStatus(lpAssetId)), DeleteEntry(keyLogo(lpAssetId)), DeleteEntry(keyTicker(lpAssetId)), DeleteEntry(keyAmountAndPriceAssetsToLpAsset(amountAssetId, priceAssetId))]
515538 poolKeysDeleteActions
516539 }
517540 else throw("Strict value is not equal to itself.")
518541 }
519542
520543
521544 @Verifier(tx)
522545 func verify () = {
523546 let targetPublicKey = match managerPublicKeyOrUnit() {
524547 case pk: ByteVector =>
525548 pk
526549 case _: Unit =>
527550 tx.senderPublicKey
528551 case _ =>
529552 throw("Match error")
530553 }
531554 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
532555 }
533556

github/deemru/w8io/169f3d6 
54.58 ms