tx · AhcPUACPcS4xWbNT7HfAtBbaYtycEizqajqp1gUg6BKd

3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr:  -0.01400000 Waves

2022.04.15 12:53 [2009521] smart account 3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr > SELF 0.00000000 Waves

{ "type": 13, "id": "AhcPUACPcS4xWbNT7HfAtBbaYtycEizqajqp1gUg6BKd", "fee": 1400000, "feeAssetId": null, "timestamp": 1650016385640, "version": 1, "sender": "3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr", "senderPublicKey": "EtZZHS4uqNXY5WPneZ8jY2aA95peXwthJVLzAMxMp379", "proofs": [ "5ku9GihLJSuR2H4pjFncTX25fpEWMBPsYNKNipH81HGxZwc6hhVtsLNEapKew3zByNmG52cMrkXus6k527TtZ5Lt" ], "script": "base64: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BQAAAA5zdGF0dXNWZXJpZmllZAUAAAAQc3RhdHVzVW52ZXJpZmllZAEAAAAPYWRkTGFiZWxBY3Rpb25zAAAAAwAAAAdhc3NldElkAAAABWxhYmVsAAAADHRocm93T25FcnJvcgQAAAAGbGFiZWxzCQEAAAAJZ2V0TGFiZWxzAAAAAAQAAAALYXNzZXRMYWJlbHMJAQAAAA5nZXRBc3NldExhYmVscwAAAAEFAAAAB2Fzc2V0SWQEAAAACmNoZWNrTGFiZWwDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAGbGFiZWxzBQAAAAVsYWJlbAYJAAACAAAAAQIAAAATTGFiZWwgZG9lc24ndCBleGlzdAMJAAAAAAAAAgUAAAAKY2hlY2tMYWJlbAUAAAAKY2hlY2tMYWJlbAQAAAAObmV3QXNzZXRMYWJlbHMDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAALYXNzZXRMYWJlbHMFAAAABWxhYmVsAwUAAAAMdGhyb3dPbkVycm9yCQAAAgAAAAECAAAAHExhYmVsIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQFAAAAC2Fzc2V0TGFiZWxzCQAETQAAAAIFAAAAC2Fzc2V0TGFiZWxzBQAAAAVsYWJlbAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAOa2V5QXNzZXRMYWJlbHMAAAABBQAAAAdhc3NldElkCQAEuQAAAAIFAAAADm5ld0Fzc2V0TGFiZWxzBQAAAANTRVAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAAAAEmRlbGV0ZUxhYmVsQWN0aW9ucwAAAAMAAAAHYXNzZXRJZAAAAAVsYWJlbAAAAAx0aHJvd09uRXJyb3IEAAAAC2Fzc2V0TGFiZWxzCQEAAAAOZ2V0QXNzZXRMYWJlbHMAAAABBQAAAAdhc3NldElkBAAAAA5uZXdBc3NldExhYmVscwMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAthc3NldExhYmVscwUAAAAFbGFiZWwJAARRAAAAAgUAAAALYXNzZXRMYWJlbHMJAQAAAAV2YWx1ZQAAAAEJAARPAAAAAgUAAAALYXNzZXRMYWJlbHMFAAAABWxhYmVsAwUAAAAMdGhyb3dPbkVycm9yCQAAAgAAAAECAAAAEkxhYmVsIHdhc24ndCBhZGRlZAUAAAALYXNzZXRMYWJlbHMJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmtleUFzc2V0TGFiZWxzAAAAAQUAAAAHYXNzZXRJZAkABLkAAAACBQAAAA5uZXdBc3NldExhYmVscwUAAAADU0VQBQAAAANuaWwBAAAAEnNldFZlcmlmaWVkQWN0aW9ucwAAAAIAAAAHYXNzZXRJZAAAAAh2ZXJpZmllZAQAAAAdbGFiZWxDb21tdW5pdHlWZXJpZmllZEFjdGlvbnMDBQAAAAh2ZXJpZmllZAkBAAAAD2FkZExhYmVsQWN0aW9ucwAAAAMFAAAAB2Fzc2V0SWQFAAAAFmxhYmVsQ29tbXVuaXR5VmVyaWZpZWQHCQEAAAASZGVsZXRlTGFiZWxBY3Rpb25zAAAAAwUAAAAHYXNzZXRJZAUAAAAWbGFiZWxDb21tdW5pdHlWZXJpZmllZAcJAAROAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAACWtleVN0YXR1cwAAAAEFAAAAB2Fzc2V0SWQJAQAAABB2ZXJpZmllZFRvU3RhdHVzAAAAAQUAAAAIdmVyaWZpZWQFAAAAA25pbAUAAAAdbGFiZWxDb21tdW5pdHlWZXJpZmllZEFjdGlvbnMBAAAAE3VwZGF0ZVRpY2tlckFjdGlvbnMAAAACAAAAB2Fzc2V0SWQAAAAGdGlja2VyBAAAAAtjaGVja1RpY2tlcgQAAAATbGlua2VkQXNzZXRJZE9yVW5pdAkABCIAAAABCQEAAAASa2V5VGlja2VyVG9Bc3NldElkAAAAAQUAAAAGdGlja2VyBAAAAA10aWNrZXJJc1ZhbGlkAwkBAAAAAiE9AAAAAgUAAAAGdGlja2VyAgAAAAADCQAAAAAAAAIFAAAAE2xpbmtlZEFzc2V0SWRPclVuaXQFAAAABHVuaXQGCQAAAAAAAAIJAQAAAAV2YWx1ZQAAAAEFAAAAE2xpbmtlZEFzc2V0SWRPclVuaXQFAAAAB2Fzc2V0SWQHAwUAAAANdGlja2VySXNWYWxpZAYJAAACAAAAAQIAAAAOSW52YWxpZCB0aWNrZXIDCQAAAAAAAAIFAAAAC2NoZWNrVGlja2VyBQAAAAtjaGVja1RpY2tlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASa2V5QXNzZXRJZFRvVGlja2VyAAAAAQUAAAAHYXNzZXRJZAUAAAAGdGlja2VyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlUaWNrZXJUb0Fzc2V0SWQAAAABBQAAAAZ0aWNrZXIFAAAAB2Fzc2V0SWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAAQAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAAAgAAABF1c2VyUG9vbHNDb250cmFjdAAAAAZsYWJlbHMEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAADWNoZWNrc0FkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABBQAAABF1c2VyUG9vbHNDb250cmFjdAIAAAAPSW52YWxpZCBhZGRyZXNzAwkAAAAAAAACBQAAAA1jaGVja3NBZGRyZXNzBQAAAA1jaGVja3NBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABRrZXlVc2VyUG9vbHNDb250cmFjdAAAAAAFAAAAEXVzZXJQb29sc0NvbnRyYWN0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAlrZXlMYWJlbHMAAAAACQAEuQAAAAIJAAROAAAAAgUAAAANZGVmYXVsdExhYmVscwUAAAAGbGFiZWxzBQAAAANTRVAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADWFkZEFzc2V0c0xpbmsAAAADAAAAC2Ftb3VudEFzc2V0AAAACnByaWNlQXNzZXQAAAAHbHBBc3NldAQAAAALY2hlY2tDYWxsZXIJAQAAAAltdXN0QWRtaW4AAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAIGtleUFtb3VudEFuZFByaWNlQXNzZXRzVG9McEFzc2V0AAAAAgUAAAALYW1vdW50QXNzZXQFAAAACnByaWNlQXNzZXQFAAAAB2xwQXNzZXQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAIGtleUxwQXNzZXRUb0Ftb3VudEFuZFByaWNlQXNzZXRzAAAAAQUAAAAHbHBBc3NldAkABLkAAAACCQAETAAAAAIFAAAAC2Ftb3VudEFzc2V0CQAETAAAAAIFAAAACnByaWNlQXNzZXQFAAAAA25pbAUAAAADU0VQBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAGGluY3JlYXNlQXNzZXRQb29sc051bWJlcgAAAAEAAAAHYXNzZXRJZAQAAAALY2hlY2tDYWxsZXIJAQAAAAltdXN0QWRtaW4AAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAAE2Fzc2V0UG9vbHNOdW1iZXJLZXkJAQAAABNrZXlBc3NldFBvb2xzTnVtYmVyAAAAAQUAAAAHYXNzZXRJZAQAAAAQYXNzZXRQb29sc051bWJlcgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABBQAAABNhc3NldFBvb2xzTnVtYmVyS2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNhc3NldFBvb2xzTnVtYmVyS2V5CQAAZAAAAAIFAAAAEGFzc2V0UG9vbHNOdW1iZXIAAAAAAAAAAAEFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAALY3JlYXRlTGFiZWwAAAABAAAABWxhYmVsBAAAAAZsYWJlbHMJAQAAAAlnZXRMYWJlbHMAAAAABAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAAApjaGVja0xhYmVsCQAETAAAAAIDCQEAAAABIQAAAAEJAQAAAAhjb250YWlucwAAAAIFAAAABWxhYmVsBQAAAANTRVAGCQAAAgAAAAECAAAAEkludmFsaWQgbGFiZWwgbmFtZQkABEwAAAACAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAGbGFiZWxzBQAAAAVsYWJlbAYJAAACAAAAAQIAAAAMTGFiZWwgZXhpc3RzBQAAAANuaWwDCQAAAAAAAAIFAAAACmNoZWNrTGFiZWwFAAAACmNoZWNrTGFiZWwJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACWtleUxhYmVscwAAAAAJAAS5AAAAAgkABE0AAAACBQAAAAZsYWJlbHMFAAAABWxhYmVsBQAAAANTRVAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACWRyb3BMYWJlbAAAAAEAAAAFbGFiZWwEAAAABmxhYmVscwkBAAAACWdldExhYmVscwAAAAAEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAACmNoZWNrTGFiZWwDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAGbGFiZWxzBQAAAAVsYWJlbAYJAAACAAAAAQIAAAATTGFiZWwgZG9lc24ndCBleGlzdAMJAAAAAAAAAgUAAAAKY2hlY2tMYWJlbAUAAAAKY2hlY2tMYWJlbAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAJa2V5TGFiZWxzAAAAAAkABLkAAAACCQAEUQAAAAIFAAAABmxhYmVscwkBAAAABXZhbHVlAAAAAQkABE8AAAACBQAAAAZsYWJlbHMFAAAABWxhYmVsBQAAAANTRVAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACGFkZExhYmVsAAAAAgAAAAdhc3NldElkAAAABWxhYmVsBAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkBAAAAD2FkZExhYmVsQWN0aW9ucwAAAAMFAAAAB2Fzc2V0SWQFAAAABWxhYmVsBgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAALZGVsZXRlTGFiZWwAAAACAAAAB2Fzc2V0SWQAAAAFbGFiZWwEAAAAC2NoZWNrQ2FsbGVyCQEAAAAJbXVzdEFkbWluAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQEAAAASZGVsZXRlTGFiZWxBY3Rpb25zAAAAAwUAAAAHYXNzZXRJZAUAAAAFbGFiZWwGCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAx1cGRhdGVUaWNrZXIAAAACAAAAB2Fzc2V0SWQAAAAGdGlja2VyBAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAKY2hlY2tBc3NldAMJAQAAAAlpc0NyZWF0ZWQAAAABBQAAAAdhc3NldElkBgkBAAAADHRocm93Tm9Bc3NldAAAAAADCQAAAAAAAAIFAAAACmNoZWNrQXNzZXQFAAAACmNoZWNrQXNzZXQJAQAAABN1cGRhdGVUaWNrZXJBY3Rpb25zAAAAAgUAAAAHYXNzZXRJZAUAAAAGdGlja2VyCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAMZGVsZXRlVGlja2VyAAAAAQAAAAdhc3NldElkBAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAGdGlja2VyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkBAAAAEmtleUFzc2V0SWRUb1RpY2tlcgAAAAEFAAAAB2Fzc2V0SWQCAAAADUludmFsaWQgYXNzZXQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEmtleUFzc2V0SWRUb1RpY2tlcgAAAAEFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEmtleVRpY2tlclRvQXNzZXRJZAAAAAEFAAAABnRpY2tlcgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jcmVhdGVPclVwZGF0ZQAAAAQAAAAHYXNzZXRJZAAAAAZ0aWNrZXIAAAAEbG9nbwAAAAh2ZXJpZmllZAQAAAALY2hlY2tDYWxsZXIJAQAAAAltdXN0QWRtaW4AAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAADGNoZWNrQXNzZXRJZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD7AAAAAEJAAJZAAAAAQUAAAAHYXNzZXRJZAIAAAAQSW52YWxpZCBhc3NldCBJRAMJAAAAAAAAAgUAAAAMY2hlY2tBc3NldElkBQAAAAxjaGVja0Fzc2V0SWQEAAAADGlzQ3JlYXRlZE5vdwkBAAAAASEAAAABCQEAAAAJaXNDcmVhdGVkAAAAAQUAAAAHYXNzZXRJZAMJAAAAAAAAAgUAAAAMaXNDcmVhdGVkTm93BQAAAAxpc0NyZWF0ZWROb3cEAAAADnNldExvZ29BY3Rpb25z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RW50cnkAAAACCQEAAAAPa2V5QWRtaW5QdWJLZXlzAAAAAAkABLkAAAACBQAAAAxhZG1pblB1YktleXMFAAAAA1NFUAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAApzZXRNYW5hZ2VyAAAAAQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQACWQAAAAEFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAAAAAACBQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAOY29uZmlybU1hbmFnZXIAAAAABAAAAAJwbQkBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAFaGFzUE0DCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAFaGFzUE0FAAAABWhhc1BNBAAAAAdjaGVja1BNAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAAB2NoZWNrUE0FAAAAB2NoZWNrUE0JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAACQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAEmlzVmVyaWZpZWRSRUFET05MWQAAAAEAAAAHYXNzZXRJZAkABRQAAAACBQAAAANuaWwJAQAAAAppc1ZlcmlmaWVkAAAAAQUAAAAHYXNzZXRJZAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAD3RhcmdldFB1YmxpY0tleQQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA90YXJnZXRQdWJsaWNLZXmNVxzL", "chainId": 84, "height": 2009521, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HLrdFpXRNpLHu8hmniA4zvZ2ecxbyn9coMKwEMPKtgge Next: 4yF8bE6CetRyZSLWkwneD7EetbHSwoTwc22TqPPNcN8m Diff:
OldNewDifferences
44 let SEP = "__"
55
66 let EMPTY = ""
7+
8+let statusVerified = 2
9+
10+let statusUnverified = 0
11+
12+let labelCommunityVerified = "COMMUNITY_VERIFIED"
13+
14+let labelPoolsLp = "POOLS_LP"
15+
16+let defaultLabels = [labelCommunityVerified, labelPoolsLp]
717
818 func throwPD () = throw("Permission denied")
919
2030 func keyAdminPubKeys () = "%s__adminPubKeys"
2131
2232
33+func keyUserPoolsContract () = "%s__userPoolsContract"
34+
35+
2336 func keyCreated (assetId) = (("created_<" + assetId) + ">")
2437
2538
3043
3144
3245 func keyStatus (assetId) = (("status_<" + assetId) + ">")
46+
47+
48+func keyAssetPoolsNumber (assetId) = makeString(["%s%s", "pools", assetId], SEP)
49+
50+
51+func keyTickerToAssetId (ticker) = makeString(["%s%s", "ticker2assetId", ticker], SEP)
52+
53+
54+func keyAssetIdToTicker (assetId) = makeString(["%s%s", "assetId2ticker", assetId], SEP)
55+
56+
57+func keyAmountAndPriceAssetsToLpAsset (amountAsset,priceAsset) = makeString(["%s%s%s", "amountAndPriceAssetsToLpAsset", amountAsset, priceAsset], SEP)
58+
59+
60+func keyLpAssetToAmountAndPriceAssets (lpAsset) = makeString(["%s%s", "lpAssetToAmountAndPriceAssets", lpAsset], SEP)
61+
62+
63+func keyAssetLabels (assetId) = makeString(["%s%s", "labels", assetId], SEP)
64+
65+
66+func keyLabels () = makeString(["%s", "labels"], SEP)
67+
68+
69+func isVerified (assetId) = (valueOrElse(getInteger(keyStatus(assetId)), statusUnverified) == statusVerified)
70+
71+
72+func getLabels () = match getString(keyLabels()) {
73+ case s: String =>
74+ if ((size(s) == 0))
75+ then nil
76+ else split(s, SEP)
77+ case _ =>
78+ nil
79+}
80+
81+
82+func getAssetLabels (assetId) = match getString(keyAssetLabels(assetId)) {
83+ case s: String =>
84+ if ((size(s) == 0))
85+ then nil
86+ else split(s, SEP)
87+ case _ =>
88+ nil
89+}
3390
3491
3592 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
83140
84141
85142 func verifiedToStatus (verified) = if (verified)
86- then 2
87- else 0
143+ then statusVerified
144+ else statusUnverified
145+
146+
147+func addLabelActions (assetId,label,throwOnError) = {
148+ let labels = getLabels()
149+ let assetLabels = getAssetLabels(assetId)
150+ let checkLabel = if (containsElement(labels, label))
151+ then true
152+ else throw("Label doesn't exist")
153+ if ((checkLabel == checkLabel))
154+ then {
155+ let newAssetLabels = if (containsElement(assetLabels, label))
156+ then if (throwOnError)
157+ then throw("Label has already been added")
158+ else assetLabels
159+ else (assetLabels :+ label)
160+[StringEntry(keyAssetLabels(assetId), makeString(newAssetLabels, SEP))]
161+ }
162+ else throw("Strict value is not equal to itself.")
163+ }
164+
165+
166+func deleteLabelActions (assetId,label,throwOnError) = {
167+ let assetLabels = getAssetLabels(assetId)
168+ let newAssetLabels = if (containsElement(assetLabels, label))
169+ then removeByIndex(assetLabels, value(indexOf(assetLabels, label)))
170+ else if (throwOnError)
171+ then throw("Label wasn't added")
172+ else assetLabels
173+[StringEntry(keyAssetLabels(assetId), makeString(newAssetLabels, SEP))]
174+ }
175+
176+
177+func setVerifiedActions (assetId,verified) = {
178+ let labelCommunityVerifiedActions = if (verified)
179+ then addLabelActions(assetId, labelCommunityVerified, false)
180+ else deleteLabelActions(assetId, labelCommunityVerified, false)
181+ ([IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))] ++ labelCommunityVerifiedActions)
182+ }
183+
184+
185+func updateTickerActions (assetId,ticker) = {
186+ let checkTicker = {
187+ let linkedAssetIdOrUnit = getString(keyTickerToAssetId(ticker))
188+ let tickerIsValid = if ((ticker != ""))
189+ then if ((linkedAssetIdOrUnit == unit))
190+ then true
191+ else (value(linkedAssetIdOrUnit) == assetId)
192+ else false
193+ if (tickerIsValid)
194+ then true
195+ else throw("Invalid ticker")
196+ }
197+ if ((checkTicker == checkTicker))
198+ then [StringEntry(keyAssetIdToTicker(assetId), ticker), StringEntry(keyTickerToAssetId(ticker), assetId)]
199+ else throw("Strict value is not equal to itself.")
200+ }
201+
202+
203+@Callable(i)
204+func constructor (userPoolsContract,labels) = {
205+ let checkCaller = mustManager(i)
206+ if ((checkCaller == checkCaller))
207+ then {
208+ let checksAddress = valueOrErrorMessage(addressFromString(userPoolsContract), "Invalid address")
209+ if ((checksAddress == checksAddress))
210+ then [StringEntry(keyUserPoolsContract(), userPoolsContract), StringEntry(keyLabels(), makeString((defaultLabels ++ labels), SEP))]
211+ else throw("Strict value is not equal to itself.")
212+ }
213+ else throw("Strict value is not equal to itself.")
214+ }
215+
216+
217+
218+@Callable(i)
219+func addAssetsLink (amountAsset,priceAsset,lpAsset) = {
220+ let checkCaller = mustAdmin(i)
221+ if ((checkCaller == checkCaller))
222+ then [StringEntry(keyAmountAndPriceAssetsToLpAsset(amountAsset, priceAsset), lpAsset), StringEntry(keyLpAssetToAmountAndPriceAssets(lpAsset), makeString([amountAsset, priceAsset], SEP))]
223+ else throw("Strict value is not equal to itself.")
224+ }
225+
226+
227+
228+@Callable(i)
229+func increaseAssetPoolsNumber (assetId) = {
230+ let checkCaller = mustAdmin(i)
231+ if ((checkCaller == checkCaller))
232+ then {
233+ let assetPoolsNumberKey = keyAssetPoolsNumber(assetId)
234+ let assetPoolsNumber = valueOrElse(getInteger(assetPoolsNumberKey), 0)
235+[IntegerEntry(assetPoolsNumberKey, (assetPoolsNumber + 1))]
236+ }
237+ else throw("Strict value is not equal to itself.")
238+ }
239+
240+
241+
242+@Callable(i)
243+func createLabel (label) = {
244+ let labels = getLabels()
245+ let checkCaller = mustManager(i)
246+ if ((checkCaller == checkCaller))
247+ then {
248+ let checkLabel = [if (!(contains(label, SEP)))
249+ then true
250+ else throw("Invalid label name"), if (!(containsElement(labels, label)))
251+ then true
252+ else throw("Label exists")]
253+ if ((checkLabel == checkLabel))
254+ then [StringEntry(keyLabels(), makeString((labels :+ label), SEP))]
255+ else throw("Strict value is not equal to itself.")
256+ }
257+ else throw("Strict value is not equal to itself.")
258+ }
259+
260+
261+
262+@Callable(i)
263+func dropLabel (label) = {
264+ let labels = getLabels()
265+ let checkCaller = mustManager(i)
266+ if ((checkCaller == checkCaller))
267+ then {
268+ let checkLabel = if (containsElement(labels, label))
269+ then true
270+ else throw("Label doesn't exist")
271+ if ((checkLabel == checkLabel))
272+ then [StringEntry(keyLabels(), makeString(removeByIndex(labels, value(indexOf(labels, label))), SEP))]
273+ else throw("Strict value is not equal to itself.")
274+ }
275+ else throw("Strict value is not equal to itself.")
276+ }
277+
278+
279+
280+@Callable(i)
281+func addLabel (assetId,label) = {
282+ let checkCaller = mustAdmin(i)
283+ if ((checkCaller == checkCaller))
284+ then addLabelActions(assetId, label, true)
285+ else throw("Strict value is not equal to itself.")
286+ }
287+
288+
289+
290+@Callable(i)
291+func deleteLabel (assetId,label) = {
292+ let checkCaller = mustAdmin(i)
293+ if ((checkCaller == checkCaller))
294+ then deleteLabelActions(assetId, label, true)
295+ else throw("Strict value is not equal to itself.")
296+ }
297+
298+
299+
300+@Callable(i)
301+func updateTicker (assetId,ticker) = {
302+ let checkCaller = mustAdmin(i)
303+ if ((checkCaller == checkCaller))
304+ then {
305+ let checkAsset = if (isCreated(assetId))
306+ then true
307+ else throwNoAsset()
308+ if ((checkAsset == checkAsset))
309+ then updateTickerActions(assetId, ticker)
310+ else throw("Strict value is not equal to itself.")
311+ }
312+ else throw("Strict value is not equal to itself.")
313+ }
314+
315+
316+
317+@Callable(i)
318+func deleteTicker (assetId) = {
319+ let checkCaller = mustAdmin(i)
320+ if ((checkCaller == checkCaller))
321+ then {
322+ let ticker = valueOrErrorMessage(getString(keyAssetIdToTicker(assetId)), "Invalid asset")
323+[DeleteEntry(keyAssetIdToTicker(assetId)), DeleteEntry(keyTickerToAssetId(ticker))]
324+ }
325+ else throw("Strict value is not equal to itself.")
326+ }
327+
88328
89329
90330 @Callable(i)
101341 let setLogoActions = if ((logo == ""))
102342 then nil
103343 else [StringEntry(keyLogo(assetId), logo)]
104- $Tuple2(([BooleanEntry(keyCreated(assetId), true), StringEntry(keyTicker(assetId), ticker), IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))] ++ setLogoActions), isCreatedNow)
344+ $Tuple2(((([BooleanEntry(keyCreated(assetId), true)] ++ updateTickerActions(assetId, ticker)) ++ setLogoActions) ++ setVerifiedActions(assetId, verified)), isCreatedNow)
105345 }
106346 else throw("Strict value is not equal to itself.")
107347 }
108348 else throw("Strict value is not equal to itself.")
109349 }
110- else throw("Strict value is not equal to itself.")
111- }
112-
113-
114-
115-@Callable(i)
116-func setTicker (assetId,ticker) = {
117- let checks = [mustAdmin(i), if (isCreated(assetId))
118- then true
119- else throwNoAsset()]
120- if ((checks == checks))
121- then [StringEntry(keyTicker(assetId), ticker)]
122350 else throw("Strict value is not equal to itself.")
123351 }
124352
142370 then true
143371 else throwNoAsset()]
144372 if ((checks == checks))
145- then [IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))]
373+ then {
374+ let priceAssets = match invoke(addressFromStringValue(getStringValue(keyUserPoolsContract())), "priceAssetsREADONLY", nil, nil) {
375+ case assets: List[Any] =>
376+ let checkPriceAssetsSize = if ((size(assets) > 0))
377+ then true
378+ else throw("Invalid price assets")
379+ if ((checkPriceAssetsSize == checkPriceAssetsSize))
380+ then assets
381+ else throw("Strict value is not equal to itself.")
382+ case _ =>
383+ throw("Incorrect invoke result")
384+ }
385+ func cb (acc,item) = {
386+ let priceAssetId = match item {
387+ case s: String =>
388+ s
389+ case _ =>
390+ throw("Invalid price asset")
391+ }
392+ let lpAssetIdOrUnit = getString(keyAmountAndPriceAssetsToLpAsset(assetId, priceAssetId))
393+ let action = if ((lpAssetIdOrUnit == unit))
394+ then nil
395+ else setVerifiedActions(value(lpAssetIdOrUnit), verified)
396+ (acc ++ action)
397+ }
398+
399+ let tokensActions = {
400+ let $l = priceAssets
401+ let $s = size($l)
402+ let $acc0 = setVerifiedActions(assetId, verified)
403+ func $f0_1 ($a,$i) = if (($i >= $s))
404+ then $a
405+ else cb($a, $l[$i])
406+
407+ func $f0_2 ($a,$i) = if (($i >= $s))
408+ then $a
409+ else throw("List size exceeds 10")
410+
411+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
412+ }
413+ $Tuple2(tokensActions, unit)
414+ }
146415 else throw("Strict value is not equal to itself.")
147416 }
148417
192461 }
193462
194463
464+
465+@Callable(i)
466+func isVerifiedREADONLY (assetId) = $Tuple2(nil, isVerified(assetId))
467+
468+
195469 @Verifier(tx)
196470 func verify () = {
197471 let targetPublicKey = match managerPublicKeyOrUnit() {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let EMPTY = ""
7+
8+let statusVerified = 2
9+
10+let statusUnverified = 0
11+
12+let labelCommunityVerified = "COMMUNITY_VERIFIED"
13+
14+let labelPoolsLp = "POOLS_LP"
15+
16+let defaultLabels = [labelCommunityVerified, labelPoolsLp]
717
818 func throwPD () = throw("Permission denied")
919
1020
1121 func throwNoAsset () = throw("Asset doesn't exists")
1222
1323
1424 func keyManagerPublicKey () = "%s__managerPublicKey"
1525
1626
1727 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
1828
1929
2030 func keyAdminPubKeys () = "%s__adminPubKeys"
2131
2232
33+func keyUserPoolsContract () = "%s__userPoolsContract"
34+
35+
2336 func keyCreated (assetId) = (("created_<" + assetId) + ">")
2437
2538
2639 func keyLogo (assetId) = (("logo_<" + assetId) + ">")
2740
2841
2942 func keyTicker (assetId) = (("ticker_<" + assetId) + ">")
3043
3144
3245 func keyStatus (assetId) = (("status_<" + assetId) + ">")
46+
47+
48+func keyAssetPoolsNumber (assetId) = makeString(["%s%s", "pools", assetId], SEP)
49+
50+
51+func keyTickerToAssetId (ticker) = makeString(["%s%s", "ticker2assetId", ticker], SEP)
52+
53+
54+func keyAssetIdToTicker (assetId) = makeString(["%s%s", "assetId2ticker", assetId], SEP)
55+
56+
57+func keyAmountAndPriceAssetsToLpAsset (amountAsset,priceAsset) = makeString(["%s%s%s", "amountAndPriceAssetsToLpAsset", amountAsset, priceAsset], SEP)
58+
59+
60+func keyLpAssetToAmountAndPriceAssets (lpAsset) = makeString(["%s%s", "lpAssetToAmountAndPriceAssets", lpAsset], SEP)
61+
62+
63+func keyAssetLabels (assetId) = makeString(["%s%s", "labels", assetId], SEP)
64+
65+
66+func keyLabels () = makeString(["%s", "labels"], SEP)
67+
68+
69+func isVerified (assetId) = (valueOrElse(getInteger(keyStatus(assetId)), statusUnverified) == statusVerified)
70+
71+
72+func getLabels () = match getString(keyLabels()) {
73+ case s: String =>
74+ if ((size(s) == 0))
75+ then nil
76+ else split(s, SEP)
77+ case _ =>
78+ nil
79+}
80+
81+
82+func getAssetLabels (assetId) = match getString(keyAssetLabels(assetId)) {
83+ case s: String =>
84+ if ((size(s) == 0))
85+ then nil
86+ else split(s, SEP)
87+ case _ =>
88+ nil
89+}
3390
3491
3592 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
3693 case s: String =>
3794 fromBase58String(s)
3895 case _: Unit =>
3996 unit
4097 case _ =>
4198 throw("Match error")
4299 }
43100
44101
45102 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
46103 case s: String =>
47104 fromBase58String(s)
48105 case _: Unit =>
49106 unit
50107 case _ =>
51108 throw("Match error")
52109 }
53110
54111
55112 func mustManager (i) = match managerPublicKeyOrUnit() {
56113 case pk: ByteVector =>
57114 if ((i.callerPublicKey == pk))
58115 then true
59116 else throwPD()
60117 case _: Unit =>
61118 if ((i.caller == this))
62119 then true
63120 else throwPD()
64121 case _ =>
65122 throw("Match error")
66123 }
67124
68125
69126 func mustAdmin (i) = {
70127 let adminPKs = split(valueOrElse(getString(keyAdminPubKeys()), EMPTY), SEP)
71128 if (containsElement(adminPKs, toBase58String(i.callerPublicKey)))
72129 then true
73130 else {
74131 let isManager = mustManager(i)
75132 if ((isManager == isManager))
76133 then true
77134 else throw("Strict value is not equal to itself.")
78135 }
79136 }
80137
81138
82139 func isCreated (assetId) = valueOrElse(getBoolean(keyCreated(assetId)), false)
83140
84141
85142 func verifiedToStatus (verified) = if (verified)
86- then 2
87- else 0
143+ then statusVerified
144+ else statusUnverified
145+
146+
147+func addLabelActions (assetId,label,throwOnError) = {
148+ let labels = getLabels()
149+ let assetLabels = getAssetLabels(assetId)
150+ let checkLabel = if (containsElement(labels, label))
151+ then true
152+ else throw("Label doesn't exist")
153+ if ((checkLabel == checkLabel))
154+ then {
155+ let newAssetLabels = if (containsElement(assetLabels, label))
156+ then if (throwOnError)
157+ then throw("Label has already been added")
158+ else assetLabels
159+ else (assetLabels :+ label)
160+[StringEntry(keyAssetLabels(assetId), makeString(newAssetLabels, SEP))]
161+ }
162+ else throw("Strict value is not equal to itself.")
163+ }
164+
165+
166+func deleteLabelActions (assetId,label,throwOnError) = {
167+ let assetLabels = getAssetLabels(assetId)
168+ let newAssetLabels = if (containsElement(assetLabels, label))
169+ then removeByIndex(assetLabels, value(indexOf(assetLabels, label)))
170+ else if (throwOnError)
171+ then throw("Label wasn't added")
172+ else assetLabels
173+[StringEntry(keyAssetLabels(assetId), makeString(newAssetLabels, SEP))]
174+ }
175+
176+
177+func setVerifiedActions (assetId,verified) = {
178+ let labelCommunityVerifiedActions = if (verified)
179+ then addLabelActions(assetId, labelCommunityVerified, false)
180+ else deleteLabelActions(assetId, labelCommunityVerified, false)
181+ ([IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))] ++ labelCommunityVerifiedActions)
182+ }
183+
184+
185+func updateTickerActions (assetId,ticker) = {
186+ let checkTicker = {
187+ let linkedAssetIdOrUnit = getString(keyTickerToAssetId(ticker))
188+ let tickerIsValid = if ((ticker != ""))
189+ then if ((linkedAssetIdOrUnit == unit))
190+ then true
191+ else (value(linkedAssetIdOrUnit) == assetId)
192+ else false
193+ if (tickerIsValid)
194+ then true
195+ else throw("Invalid ticker")
196+ }
197+ if ((checkTicker == checkTicker))
198+ then [StringEntry(keyAssetIdToTicker(assetId), ticker), StringEntry(keyTickerToAssetId(ticker), assetId)]
199+ else throw("Strict value is not equal to itself.")
200+ }
201+
202+
203+@Callable(i)
204+func constructor (userPoolsContract,labels) = {
205+ let checkCaller = mustManager(i)
206+ if ((checkCaller == checkCaller))
207+ then {
208+ let checksAddress = valueOrErrorMessage(addressFromString(userPoolsContract), "Invalid address")
209+ if ((checksAddress == checksAddress))
210+ then [StringEntry(keyUserPoolsContract(), userPoolsContract), StringEntry(keyLabels(), makeString((defaultLabels ++ labels), SEP))]
211+ else throw("Strict value is not equal to itself.")
212+ }
213+ else throw("Strict value is not equal to itself.")
214+ }
215+
216+
217+
218+@Callable(i)
219+func addAssetsLink (amountAsset,priceAsset,lpAsset) = {
220+ let checkCaller = mustAdmin(i)
221+ if ((checkCaller == checkCaller))
222+ then [StringEntry(keyAmountAndPriceAssetsToLpAsset(amountAsset, priceAsset), lpAsset), StringEntry(keyLpAssetToAmountAndPriceAssets(lpAsset), makeString([amountAsset, priceAsset], SEP))]
223+ else throw("Strict value is not equal to itself.")
224+ }
225+
226+
227+
228+@Callable(i)
229+func increaseAssetPoolsNumber (assetId) = {
230+ let checkCaller = mustAdmin(i)
231+ if ((checkCaller == checkCaller))
232+ then {
233+ let assetPoolsNumberKey = keyAssetPoolsNumber(assetId)
234+ let assetPoolsNumber = valueOrElse(getInteger(assetPoolsNumberKey), 0)
235+[IntegerEntry(assetPoolsNumberKey, (assetPoolsNumber + 1))]
236+ }
237+ else throw("Strict value is not equal to itself.")
238+ }
239+
240+
241+
242+@Callable(i)
243+func createLabel (label) = {
244+ let labels = getLabels()
245+ let checkCaller = mustManager(i)
246+ if ((checkCaller == checkCaller))
247+ then {
248+ let checkLabel = [if (!(contains(label, SEP)))
249+ then true
250+ else throw("Invalid label name"), if (!(containsElement(labels, label)))
251+ then true
252+ else throw("Label exists")]
253+ if ((checkLabel == checkLabel))
254+ then [StringEntry(keyLabels(), makeString((labels :+ label), SEP))]
255+ else throw("Strict value is not equal to itself.")
256+ }
257+ else throw("Strict value is not equal to itself.")
258+ }
259+
260+
261+
262+@Callable(i)
263+func dropLabel (label) = {
264+ let labels = getLabels()
265+ let checkCaller = mustManager(i)
266+ if ((checkCaller == checkCaller))
267+ then {
268+ let checkLabel = if (containsElement(labels, label))
269+ then true
270+ else throw("Label doesn't exist")
271+ if ((checkLabel == checkLabel))
272+ then [StringEntry(keyLabels(), makeString(removeByIndex(labels, value(indexOf(labels, label))), SEP))]
273+ else throw("Strict value is not equal to itself.")
274+ }
275+ else throw("Strict value is not equal to itself.")
276+ }
277+
278+
279+
280+@Callable(i)
281+func addLabel (assetId,label) = {
282+ let checkCaller = mustAdmin(i)
283+ if ((checkCaller == checkCaller))
284+ then addLabelActions(assetId, label, true)
285+ else throw("Strict value is not equal to itself.")
286+ }
287+
288+
289+
290+@Callable(i)
291+func deleteLabel (assetId,label) = {
292+ let checkCaller = mustAdmin(i)
293+ if ((checkCaller == checkCaller))
294+ then deleteLabelActions(assetId, label, true)
295+ else throw("Strict value is not equal to itself.")
296+ }
297+
298+
299+
300+@Callable(i)
301+func updateTicker (assetId,ticker) = {
302+ let checkCaller = mustAdmin(i)
303+ if ((checkCaller == checkCaller))
304+ then {
305+ let checkAsset = if (isCreated(assetId))
306+ then true
307+ else throwNoAsset()
308+ if ((checkAsset == checkAsset))
309+ then updateTickerActions(assetId, ticker)
310+ else throw("Strict value is not equal to itself.")
311+ }
312+ else throw("Strict value is not equal to itself.")
313+ }
314+
315+
316+
317+@Callable(i)
318+func deleteTicker (assetId) = {
319+ let checkCaller = mustAdmin(i)
320+ if ((checkCaller == checkCaller))
321+ then {
322+ let ticker = valueOrErrorMessage(getString(keyAssetIdToTicker(assetId)), "Invalid asset")
323+[DeleteEntry(keyAssetIdToTicker(assetId)), DeleteEntry(keyTickerToAssetId(ticker))]
324+ }
325+ else throw("Strict value is not equal to itself.")
326+ }
327+
88328
89329
90330 @Callable(i)
91331 func createOrUpdate (assetId,ticker,logo,verified) = {
92332 let checkCaller = mustAdmin(i)
93333 if ((checkCaller == checkCaller))
94334 then {
95335 let checkAssetId = valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "Invalid asset ID")
96336 if ((checkAssetId == checkAssetId))
97337 then {
98338 let isCreatedNow = !(isCreated(assetId))
99339 if ((isCreatedNow == isCreatedNow))
100340 then {
101341 let setLogoActions = if ((logo == ""))
102342 then nil
103343 else [StringEntry(keyLogo(assetId), logo)]
104- $Tuple2(([BooleanEntry(keyCreated(assetId), true), StringEntry(keyTicker(assetId), ticker), IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))] ++ setLogoActions), isCreatedNow)
344+ $Tuple2(((([BooleanEntry(keyCreated(assetId), true)] ++ updateTickerActions(assetId, ticker)) ++ setLogoActions) ++ setVerifiedActions(assetId, verified)), isCreatedNow)
105345 }
106346 else throw("Strict value is not equal to itself.")
107347 }
108348 else throw("Strict value is not equal to itself.")
109349 }
110- else throw("Strict value is not equal to itself.")
111- }
112-
113-
114-
115-@Callable(i)
116-func setTicker (assetId,ticker) = {
117- let checks = [mustAdmin(i), if (isCreated(assetId))
118- then true
119- else throwNoAsset()]
120- if ((checks == checks))
121- then [StringEntry(keyTicker(assetId), ticker)]
122350 else throw("Strict value is not equal to itself.")
123351 }
124352
125353
126354
127355 @Callable(i)
128356 func setLogo (assetId,logo) = {
129357 let checks = [mustAdmin(i), if (isCreated(assetId))
130358 then true
131359 else throwNoAsset()]
132360 if ((checks == checks))
133361 then [StringEntry(keyLogo(assetId), logo)]
134362 else throw("Strict value is not equal to itself.")
135363 }
136364
137365
138366
139367 @Callable(i)
140368 func setVerified (assetId,verified) = {
141369 let checks = [mustAdmin(i), if (isCreated(assetId))
142370 then true
143371 else throwNoAsset()]
144372 if ((checks == checks))
145- then [IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))]
373+ then {
374+ let priceAssets = match invoke(addressFromStringValue(getStringValue(keyUserPoolsContract())), "priceAssetsREADONLY", nil, nil) {
375+ case assets: List[Any] =>
376+ let checkPriceAssetsSize = if ((size(assets) > 0))
377+ then true
378+ else throw("Invalid price assets")
379+ if ((checkPriceAssetsSize == checkPriceAssetsSize))
380+ then assets
381+ else throw("Strict value is not equal to itself.")
382+ case _ =>
383+ throw("Incorrect invoke result")
384+ }
385+ func cb (acc,item) = {
386+ let priceAssetId = match item {
387+ case s: String =>
388+ s
389+ case _ =>
390+ throw("Invalid price asset")
391+ }
392+ let lpAssetIdOrUnit = getString(keyAmountAndPriceAssetsToLpAsset(assetId, priceAssetId))
393+ let action = if ((lpAssetIdOrUnit == unit))
394+ then nil
395+ else setVerifiedActions(value(lpAssetIdOrUnit), verified)
396+ (acc ++ action)
397+ }
398+
399+ let tokensActions = {
400+ let $l = priceAssets
401+ let $s = size($l)
402+ let $acc0 = setVerifiedActions(assetId, verified)
403+ func $f0_1 ($a,$i) = if (($i >= $s))
404+ then $a
405+ else cb($a, $l[$i])
406+
407+ func $f0_2 ($a,$i) = if (($i >= $s))
408+ then $a
409+ else throw("List size exceeds 10")
410+
411+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
412+ }
413+ $Tuple2(tokensActions, unit)
414+ }
146415 else throw("Strict value is not equal to itself.")
147416 }
148417
149418
150419
151420 @Callable(i)
152421 func setAdmins (adminPubKeys) = {
153422 let checkCaller = mustManager(i)
154423 if ((checkCaller == checkCaller))
155424 then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
156425 else throw("Strict value is not equal to itself.")
157426 }
158427
159428
160429
161430 @Callable(i)
162431 func setManager (pendingManagerPublicKey) = {
163432 let checkCaller = mustManager(i)
164433 if ((checkCaller == checkCaller))
165434 then {
166435 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
167436 if ((checkManagerPublicKey == checkManagerPublicKey))
168437 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
169438 else throw("Strict value is not equal to itself.")
170439 }
171440 else throw("Strict value is not equal to itself.")
172441 }
173442
174443
175444
176445 @Callable(i)
177446 func confirmManager () = {
178447 let pm = pendingManagerPublicKeyOrUnit()
179448 let hasPM = if (isDefined(pm))
180449 then true
181450 else throw("No pending manager")
182451 if ((hasPM == hasPM))
183452 then {
184453 let checkPM = if ((i.callerPublicKey == value(pm)))
185454 then true
186455 else throw("You are not pending manager")
187456 if ((checkPM == checkPM))
188457 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
189458 else throw("Strict value is not equal to itself.")
190459 }
191460 else throw("Strict value is not equal to itself.")
192461 }
193462
194463
464+
465+@Callable(i)
466+func isVerifiedREADONLY (assetId) = $Tuple2(nil, isVerified(assetId))
467+
468+
195469 @Verifier(tx)
196470 func verify () = {
197471 let targetPublicKey = match managerPublicKeyOrUnit() {
198472 case pk: ByteVector =>
199473 pk
200474 case _: Unit =>
201475 tx.senderPublicKey
202476 case _ =>
203477 throw("Match error")
204478 }
205479 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
206480 }
207481

github/deemru/w8io/873ac7e 
40.79 ms