tx · 99wmeESAQgAqHa6i5dsxt5mEaXye1sK7nHhdzUgNC3Pc

3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr:  -0.02000000 Waves

2022.06.01 11:13 [2077029] smart account 3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr > SELF 0.00000000 Waves

{ "type": 13, "id": "99wmeESAQgAqHa6i5dsxt5mEaXye1sK7nHhdzUgNC3Pc", "fee": 2000000, "feeAssetId": null, "timestamp": 1654071216574, "version": 1, "sender": "3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr", "senderPublicKey": "EtZZHS4uqNXY5WPneZ8jY2aA95peXwthJVLzAMxMp379", "proofs": [ "4wjmg6mu5teSeTAtLezaQMPyRvNiZ1HZZ5uNraDz1HbLJYsiajqjbm6ErtRayHiCDJKA2vY94ZdY6DMN9qRE98eQ" ], "script": "base64:AAIFAAAAAAAAAGoIAhIECgIIGBIDCgEIEgUKAwgICBIDCgEIEgMKAQgSAwoBCBIECgIICBIECgIICBIECgIICBIDCgEIEgUKAwgIBBIECgIICBIECgIIBBIDCgEIEgMKARgSBQoDCAgIEgMKAQgSABIDCgEIAAAALgAAAAADU0VQAgAAAAJfXwAAAAAFRU1QVFkCAAAAAAAAAAAOc3RhdHVzVmVyaWZpZWQAAAAAAAAAAAIAAAAAEHN0YXR1c1VudmVyaWZpZWQAAAAAAAAAAAAAAAAAFmxhYmVsQ29tbXVuaXR5VmVyaWZpZWQCAAAAEkNPTU1VTklUWV9WRVJJRklFRAAAAAAMbGFiZWxQb29sc0xwAgAAAAhQT09MU19MUAAAAAANZGVmYXVsdExhYmVscwkABEwAAAACBQAAABZsYWJlbENvbW11bml0eVZlcmlmaWVkCQAETAAAAAIFAAAADGxhYmVsUG9vbHNMcAUAAAADbmlsAAAAABNwb29sTGFiZWxXeEVtaXNzaW9uAgAAAAtXWF9FTUlTU0lPTgAAAAAPdmFsaWRQb29sTGFiZWxzCQAETAAAAAIFAAAAE3Bvb2xMYWJlbFd4RW1pc3Npb24FAAAAA25pbAEAAAAHdGhyb3dQRAAAAAAJAAACAAAAAQIAAAARUGVybWlzc2lvbiBkZW5pZWQBAAAADHRocm93Tm9Bc3NldAAAAAAJAAACAAAAAQIAAAAUQXNzZXQgZG9lc24ndCBleGlzdHMBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABQlc19fbWFuYWdlclB1YmxpY0tleQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAAAAD2tleUFkbWluUHViS2V5cwAAAAACAAAAECVzX19hZG1pblB1YktleXMBAAAAFGtleVVzZXJQb29sc0NvbnRyYWN0AAAAAAIAAAAVJXNfX3VzZXJQb29sc0NvbnRyYWN0AQAAABlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0AAAAAAIAAAAaJXNfX3ZvdGluZ0VtaXNzaW9uQ29udHJhY3QBAAAACmtleUNyZWF0ZWQAAAABAAAAB2Fzc2V0SWQJAAEsAAAAAgkA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Y2FsbGVyBQAAAAR0aGlzBgkBAAAAB3Rocm93UEQAAAAACQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAltdXN0QWRtaW4AAAABAAAAAWkEAAAACGFkbWluUEtzCQAEtQAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQiAAAAAQkBAAAAD2tleUFkbWluUHViS2V5cwAAAAAFAAAABUVNUFRZBQAAAANTRVADCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAIYWRtaW5QS3MJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BgQAAAAJaXNNYW5hZ2VyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAlpc01hbmFnZXIFAAAACWlzTWFuYWdlcgYJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQAAAAlpc0NyZWF0ZWQAAAABAAAAB2Fzc2V0SWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQgAAAAAQkBAAAACmtleUNyZWF0ZWQAAAABBQAAAAdhc3NldElkBwEAAAAQdmVyaWZpZWRUb1N0YXR1cwAAAAEAAAAIdmVyaWZpZWQDBQAAAAh2ZXJpZmllZAUAAAAOc3RhdHVzVmVyaWZpZWQFAAAAEHN0YXR1c1VudmVyaWZpZWQBAAAAD2FkZExhYmVsQWN0aW9ucwAAAAMAAAAHYXNzZXRJZAAAAAVsYWJlbAAAAAx0aHJvd09uRXJyb3IEAAAABmxhYmVscwkBAAAACWdldExhYmVscwAAAAAEAAAAC2Fzc2V0TGFiZWxzCQEAAAAOZ2V0QXNzZXRMYWJlbHMAAAABBQAAAAdhc3NldElkBAAAAApjaGVja0xhYmVsAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAABmxhYmVscwUAAAAFbGFiZWwGCQAAAgAAAAECAAAAE0xhYmVsIGRvZXNuJ3QgZXhpc3QDCQAAAAAAAAIFAAAACmNoZWNrTGFiZWwFAAAACmNoZWNrTGFiZWwEAAAADm5ld0Fzc2V0TGFiZWxzAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAAC2Fzc2V0TGFiZWxzBQAAAAVsYWJlbAMFAAAADHRocm93T25FcnJvcgkAAAIAAAABAgAAABxMYWJlbCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkBQAAAAthc3NldExhYmVscwkABE0AAAACBQAAAAthc3NldExhYmVscwUAAAAFbGFiZWwJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmtleUFzc2V0TGFiZWxzAAAAAQUAAAAHYXNzZXRJZAkABLkAAAACBQAAAA5uZXdBc3NldExhYmVscwUAAAADU0VQBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQAAABJkZWxldGVMYWJlbEFjdGlvbnMAAAADAAAAB2Fzc2V0SWQAAAAFbGFiZWwAAAAMdGhyb3dPbkVycm9yBAAAAAthc3NldExhYmVscwkBAAAADmdldEFzc2V0TGFiZWxzAAAAAQUAAAAHYXNzZXRJZAQAAAAObmV3QXNzZXRMYWJlbHMDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAALYXNzZXRMYWJlbHMFAAAABWxhYmVsCQAEUQAAAAIFAAAAC2Fzc2V0TGFiZWxzCQEAAAAFdmFsdWUAAAABCQAETwAAAAIFAAAAC2Fzc2V0TGFiZWxzBQAAAAVsYWJlbAMFAAAADHRocm93T25FcnJvcgkAAAIAAAABAgAAABJMYWJlbCB3YXNuJ3QgYWRkZWQFAAAAC2Fzc2V0TGFiZWxzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA5rZXlBc3NldExhYmVscwAAAAEFAAAAB2Fzc2V0SWQJAAS5AAAAAgUAAAAObmV3QXNzZXRMYWJlbHMFAAAAA1NFUAUAAAADbmlsAQAAABJzZXRWZXJpZmllZEFjdGlvbnMAAAACAAAAB2Fzc2V0SWQAAAAIdmVyaWZpZWQEAAAAHWxhYmVsQ29tbXVuaXR5VmVyaWZpZWRBY3Rpb25zAwUAAAAIdmVyaWZpZWQJAQAAAA9hZGRMYWJlbEFjdGlvbnMAAAADBQAAAAdhc3NldElkBQAAABZsYWJlbENvbW11bml0eVZlcmlmaWVkBwkBAAAAEmRlbGV0ZUxhYmVsQWN0aW9ucwAAAAMFAAAAB2Fzc2V0SWQFAAAAFmxhYmVsQ29tbXVuaXR5VmVyaWZpZWQHCQAETgAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAlrZXlTdGF0dXMAAAABBQAAAAdhc3NldElkCQEAAAAQdmVyaWZpZWRUb1N0YXR1cwAAAAEFAAAACHZlcmlmaWVkBQAAAANuaWwFAAAAHWxhYmVsQ29tbXVuaXR5VmVyaWZpZWRBY3Rpb25zAQAAABN1cGRhdGVUaWNrZXJBY3Rpb25zAAAAAgAAAAdhc3NldElkAAAABnRpY2tlcgQAAAALY2hlY2tUaWNrZXIEAAAAE2xpbmtlZEFzc2V0SWRPclVuaXQJAAQiAAAAAQkBAAAAEmtleVRpY2tlclRvQXNzZXRJZAAAAAEFAAAABnRpY2tlcgQAAAANdGlja2VySXNWYWxpZAMJAQAAAAIhPQAAAAIFAAAABnRpY2tlcgIAAAAAAwkAAAAAAAACBQAAABNsaW5rZWRBc3NldElkT3JVbml0BQAAAAR1bml0BgkAAAAAAAACCQEAAAAFdmFsdWUAAAABBQAAABNsaW5rZWRBc3NldElkT3JVbml0BQAAAAdhc3NldElkBwMFAAAADXRpY2tlcklzVmFsaWQGCQAAAgAAAAECAAAADkludmFsaWQgdGlja2VyAwkAAAAAAAACBQAAAAtjaGVja1RpY2tlcgUAAAALY2hlY2tUaWNrZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleUFzc2V0SWRUb1RpY2tlcgAAAAEFAAAAB2Fzc2V0SWQFAAAABnRpY2tlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASa2V5VGlja2VyVG9Bc3NldElkAAAAAQUAAAAGdGlja2VyBQAAAAdhc3NldElkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAEwAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAIAAAARdXNlclBvb2xzQ29udHJhY3QAAAAGbGFiZWxzBAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAAA1jaGVja3NBZGRyZXNzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQUAAAARdXNlclBvb2xzQ29udHJhY3QCAAAAD0ludmFsaWQgYWRkcmVzcwMJAAAAAAAAAgUAAAANY2hlY2tzQWRkcmVzcwUAAAANY2hlY2tzQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAUa2V5VXNlclBvb2xzQ29udHJhY3QAAAAABQAAABF1c2VyUG9vbHNDb250cmFjdAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAJa2V5TGFiZWxzAAAAAAkABLkAAAACCQAETgAAAAIFAAAADWRlZmF1bHRMYWJlbHMFAAAABmxhYmVscwUAAAADU0VQBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA1jb25zdHJ1Y3RvclYyAAAAAQAAABZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAAAxjaGVja0FkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABBQAAABZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0AgAAAChpbnZhbGlkIHZvdGluZyBlbWlzc2lvbiBjb250cmFjdCBhZGRyZXNzAwkAAAAAAAACBQAAAAxjaGVja0FkZHJlc3MFAAAADGNoZWNrQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAZa2V5Vm90aW5nRW1pc3Npb25Db250cmFjdAAAAAAFAAAAFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADWFkZEFzc2V0c0xpbmsAAAADAAAAC2Ftb3VudEFzc2V0AAAACnByaWNlQXNzZXQAAAAHbHBBc3NldAQAAAALY2hlY2tDYWxsZXIJAQAAAAltdXN0QWRtaW4AAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAIGtleUFtb3VudEFuZFByaWNlQXNzZXRzVG9McEFzc2V0AAAAAgUAAAALYW1vdW50QXNzZXQFAAAACnByaWNlQXNzZXQFAAAAB2xwQXNzZXQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAIGtleUxwQXNzZXRUb0Ftb3VudEFuZFByaWNlQXNzZXRzAAAAAQUAAAAHbHBBc3NldAkABLkAAAACCQAETAAAAAIFAAAAC2Ftb3VudEFzc2V0CQAETAAAAAIFAAAACnByaWNlQXNzZXQFAAAAA25pbAUAAAADU0VQBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAGGluY3JlYXNlQXNzZXRQb29sc051bWJlcgAAAAEAAAAHYXNzZXRJZAQAAAALY2hlY2tDYWxsZXIJAQAAAAltdXN0QWRtaW4AAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAAE2Fzc2V0UG9vbHNOdW1iZXJLZXkJAQAAABNrZXlBc3NldFBvb2xzTnVtYmVyAAAAAQUAAAAHYXNzZXRJZAQAAAAQYXNzZXRQb29sc051bWJlcgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABBQAAABNhc3NldFBvb2xzTnVtYmVyS2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNhc3NldFBvb2xzTnVtYmVyS2V5CQAAZAAAAAIFAAAAEGFzc2V0UG9vbHNOdW1iZXIAAAAAAAAAAAEFAAAA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AAADCQAAAAAAAAIFAAAACmNoZWNrQXNzZXQFAAAACmNoZWNrQXNzZXQJAQAAABN1cGRhdGVUaWNrZXJBY3Rpb25zAAAAAgUAAAAHYXNzZXRJZAUAAAAGdGlja2VyCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAMZGVsZXRlVGlja2VyAAAAAQAAAAdhc3NldElkBAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAGdGlja2VyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkBAAAAEmtleUFzc2V0SWRUb1RpY2tlcgAAAAEFAAAAB2Fzc2V0SWQCAAAADUludmFsaWQgYXNzZXQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEmtleUFzc2V0SWRUb1RpY2tlcgAAAAEFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEmtleVRpY2tlclRvQXNzZXRJZAAAAAEFAAAABnRpY2tlcgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jcmVhdGVPclVwZGF0ZQAAAAMAAAAHYXNzZXRJZAAAAARsb2dvAAAACHZlcmlmaWVkBAAAAAtjaGVja0NhbGxlcgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAMaXNDcmVhdGVkTm93CQEAAAABIQAAAAEJAQAAAAlpc0NyZWF0ZWQAAAABBQAAAAdhc3NldElkAwkAAAAAAAACBQAAAAxpc0NyZWF0ZWROb3cFAAAADGlzQ3JlYXRlZE5vdwQAAAAOc2V0TG9nb0FjdGlvbnMDCQAAAAAAAAIFAAAABGxvZ28CAAAAAAUAAAADbmlsCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAdrZXlMb2dvAAAAAQUAAAAHYXNzZXRJZAUAAAAEbG9nbwUAAAADbmlsCQAFFAAAAAIJAAROAAAAAgkABE4AAAACCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAAKa2V5Q3JlYXRlZAAAAAEFAAAAB2Fzc2V0SWQGBQAAAANuaWwFAAAADnNldExvZ29BY3Rpb25zCQEAAAASc2V0VmVyaWZpZWRBY3Rpb25zAAAAAgUAAAAHYXNzZXRJZAUAAAAIdmVyaWZpZWQFAAAADGlzQ3JlYXRlZE5vdwkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAB3NldExvZ28AAAACAAAAB2Fzc2V0SWQAAAAEbG9nbwQAAAAGY2hlY2tzCQAETAAAAAIJAQAAAAltdXN0QWRtaW4AAAABBQAAAAFpCQAETAAAAAIDCQEAAAAJaXNDcmVhdGVkAAAAAQUAAAAHYXNzZXRJZAYJAQAAAAx0aHJvd05vQXNzZXQAAAAABQAAAANuaWwDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAdrZXlMb2dvAAAAAQUAAAAHYXNzZXRJZAUAAAAEbG9nbwUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAtzZXRWZXJpZmllZAAAAAIAAAAHYXNzZXRJZAAAAAh2ZXJpZmllZAQAAAAGY2hlY2tzCQAETAAAAAIJAQAAAAltdXN0QWRtaW4AAAABBQAAAAFpCQAETAAAAAIDCQEAAAAJaXNDcmVhdGVkAAAAAQUAAAAHYXNzZXRJZAYJAQAAAAx0aHJvd05vQXNzZXQAAAAABQAAAANuaWwDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzBAAAABVvblZlcmlmaWNhdGlvbkxvc3NJbnYDCQEAAAABIQAAAAEFAAAACHZlcmlmaWVkBAAAABZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkBAAAADGdldFN0ck9yRmFpbAAAAAIFAAAABHRoaXMJAQAAABlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0AAAAAAIAAAAoaW52YWxpZCB2b3RpbmcgZW1pc3Npb24gY29udHJhY3QgYWRkcmVzcwkAA/wAAAAEBQAAABZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0AgAAABJvblZlcmlmaWNhdGlvbkxvc3MJAARMAAAAAgUAAAAHYXNzZXRJZAUAAAADbmlsBQAAAANuaWwFAAAABHVuaXQDCQAAAAAAAAIFAAAAFW9uVmVyaWZpY2F0aW9uTG9zc0ludgUAAAAVb25WZXJpZmljYXRpb25Mb3NzSW52CQAFFAAAAAIJAQAAABJzZXRWZXJpZmllZEFjdGlvbnMAAAACBQAAAAdhc3NldElkBQAAAAh2ZXJpZmllZAUAAAAEdW5pdAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAC29uRWxpbWluYXRlAAAAAQAAAAdhc3NldElkBAAAAAtwb29sc051bWJlcgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABCQEAAAATa2V5QXNzZXRQb29sc051bWJlcgAAAAEFAAAAB2Fzc2V0SWQAAAAAAAAAAAAEAAAAB2FjdGlvbnMDCQAAZgAAAAIFAAAAC3Bvb2xzTnVtYmVyAAAAAAAAAAAABQAAAANuaWwJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAB2tleUxvZ28AAAABBQAAAAdhc3NldElkBQAAAANuaWwJAAUUAAAAAgUAAAAHYWN0aW9ucwUAAAAEdW5pdAAAAAFpAQAAAAlzZXRBZG1pbnMAAAABAAAADGFkbWluUHViS2V5cwQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5QWRtaW5QdWJLZXlzAAAAAAkABLkAAAACBQAAAAxhZG1pblB1YktleXMFAAAAA1NFUAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA1zZXRQb29sTGFiZWxzAAAAAwAAAA1hbW91bnRBc3NldElkAAAADHByaWNlQXNzZXRJZAAAAAVsYWJlbAQAAAALY2hlY2tDYWxsZXIJAQAAAAltdXN0QWRtaW4AAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAADGlzVmFsaWRMYWJlbAMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAA92YWxpZFBvb2xMYWJlbHMFAAAABWxhYmVsBgkAAAIAAAABAgAAABJsYWJlbCBpcyBub3QgdmFsaWQDCQAAAAAAAAIFAAAADGlzVmFsaWRMYWJlbAUAAAAMaXNWYWxpZExhYmVsCQAFFAAAAAIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleVBvb2xMYWJlbHMAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAABWxhYmVsBQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAApzZXRNYW5hZ2VyAAAAAQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQACWQAAAAEFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAAAAAACBQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAOY29uZmlybU1hbmFnZXIAAAAABAAAAAJwbQkBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAFaGFzUE0DCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAFaGFzUE0FAAAABWhhc1BNBAAAAAdjaGVja1BNAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAAB2NoZWNrUE0FAAAAB2NoZWNrUE0JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAACQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAEmlzVmVyaWZpZWRSRUFET05MWQAAAAEAAAAHYXNzZXRJZAkABRQAAAACBQAAAANuaWwJAQAAAAppc1ZlcmlmaWVkAAAAAQUAAAAHYXNzZXRJZAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAD3RhcmdldFB1YmxpY0tleQQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA90YXJnZXRQdWJsaWNLZXlx1cnG", "chainId": 84, "height": 2077029, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5sdHd8R5uGP8sGMX1wXq19bgGrzWsUFN34z4bQnN13GC Next: DV7SomWb19SHHRrvem9oRynJYarjvLvuBuE3ZGLmG1jL Diff:
OldNewDifferences
3737 func keyUserPoolsContract () = "%s__userPoolsContract"
3838
3939
40+func keyVotingEmissionContract () = "%s__votingEmissionContract"
41+
42+
4043 func keyCreated (assetId) = (("created_<" + assetId) + ">")
4144
4245
7174
7275
7376 func keyPoolLabels (amountAssetId,priceAssetId) = makeString(["%s%s%s", "poolLabels", amountAssetId, priceAssetId], SEP)
77+
78+
79+func getValueOrFail (address,key,type) = {
80+ let error = makeString(["mandatory ", toString(address), ".", key, " is not defined"], "")
81+ valueOrErrorMessage( match type {
82+ case str: String =>
83+ getString(address, key)
84+ case int: Int =>
85+ getInteger(address, key)
86+ case _ =>
87+ throw("invalid entry type")
88+ }, error)
89+ }
90+
91+
92+func getStrOrFail (address,key) = {
93+ let @ = getValueOrFail(address, key, 0)
94+ if ($isInstanceOf(@, "String"))
95+ then @
96+ else throw("Couldn't cast Int|String to String")
97+ }
98+
99+
100+func getStrOrUnit (address,key) = {
101+ let @ = getValueOrFail(address, key, 0)
102+ if ($isInstanceOf(@, "String"))
103+ then @
104+ else unit
105+ }
106+
107+
108+func getIntOrFail (address,key) = {
109+ let @ = getValueOrFail(address, key, 0)
110+ if ($isInstanceOf(@, "Int"))
111+ then @
112+ else throw("Couldn't cast Int|String to Int")
113+ }
114+
115+
116+func getIntOrUnit (address,key) = {
117+ let @ = getValueOrFail(address, key, 0)
118+ if ($isInstanceOf(@, "Int"))
119+ then @
120+ else unit
121+ }
74122
75123
76124 func isVerified (assetId) = (valueOrElse(getInteger(keyStatus(assetId)), statusUnverified) == statusVerified)
215263 let checksAddress = valueOrErrorMessage(addressFromString(userPoolsContract), "Invalid address")
216264 if ((checksAddress == checksAddress))
217265 then [StringEntry(keyUserPoolsContract(), userPoolsContract), StringEntry(keyLabels(), makeString((defaultLabels ++ labels), SEP))]
266+ else throw("Strict value is not equal to itself.")
267+ }
268+ else throw("Strict value is not equal to itself.")
269+ }
270+
271+
272+
273+@Callable(i)
274+func constructorV2 (votingEmissionContract) = {
275+ let checkCaller = mustManager(i)
276+ if ((checkCaller == checkCaller))
277+ then {
278+ let checkAddress = valueOrErrorMessage(addressFromString(votingEmissionContract), "invalid voting emission contract address")
279+ if ((checkAddress == checkAddress))
280+ then [StringEntry(keyVotingEmissionContract(), votingEmissionContract)]
218281 else throw("Strict value is not equal to itself.")
219282 }
220283 else throw("Strict value is not equal to itself.")
372435 then true
373436 else throwNoAsset()]
374437 if ((checks == checks))
375- then $Tuple2(setVerifiedActions(assetId, verified), unit)
438+ then {
439+ let onVerificationLossInv = if (!(verified))
440+ then {
441+ let votingEmissionContract = valueOrErrorMessage(addressFromString(getStrOrFail(this, keyVotingEmissionContract())), "invalid voting emission contract address")
442+ invoke(votingEmissionContract, "onVerificationLoss", [assetId], nil)
443+ }
444+ else unit
445+ if ((onVerificationLossInv == onVerificationLossInv))
446+ then $Tuple2(setVerifiedActions(assetId, verified), unit)
447+ else throw("Strict value is not equal to itself.")
448+ }
376449 else throw("Strict value is not equal to itself.")
377450 }
378451
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 let poolLabelWxEmission = "WX_EMISSION"
1919
2020 let validPoolLabels = [poolLabelWxEmission]
2121
2222 func throwPD () = throw("Permission denied")
2323
2424
2525 func throwNoAsset () = throw("Asset doesn't exists")
2626
2727
2828 func keyManagerPublicKey () = "%s__managerPublicKey"
2929
3030
3131 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
3232
3333
3434 func keyAdminPubKeys () = "%s__adminPubKeys"
3535
3636
3737 func keyUserPoolsContract () = "%s__userPoolsContract"
3838
3939
40+func keyVotingEmissionContract () = "%s__votingEmissionContract"
41+
42+
4043 func keyCreated (assetId) = (("created_<" + assetId) + ">")
4144
4245
4346 func keyLogo (assetId) = (("logo_<" + assetId) + ">")
4447
4548
4649 func keyTicker (assetId) = (("ticker_<" + assetId) + ">")
4750
4851
4952 func keyStatus (assetId) = (("status_<" + assetId) + ">")
5053
5154
5255 func keyAssetPoolsNumber (assetId) = makeString(["%s%s", "pools", assetId], SEP)
5356
5457
5558 func keyTickerToAssetId (ticker) = makeString(["%s%s", "ticker2assetId", ticker], SEP)
5659
5760
5861 func keyAssetIdToTicker (assetId) = makeString(["%s%s", "assetId2ticker", assetId], SEP)
5962
6063
6164 func keyAmountAndPriceAssetsToLpAsset (amountAsset,priceAsset) = makeString(["%s%s%s", "amountAndPriceAssetsToLpAsset", amountAsset, priceAsset], SEP)
6265
6366
6467 func keyLpAssetToAmountAndPriceAssets (lpAsset) = makeString(["%s%s", "lpAssetToAmountAndPriceAssets", lpAsset], SEP)
6568
6669
6770 func keyAssetLabels (assetId) = makeString(["%s%s", "labels", assetId], SEP)
6871
6972
7073 func keyLabels () = makeString(["%s", "labels"], SEP)
7174
7275
7376 func keyPoolLabels (amountAssetId,priceAssetId) = makeString(["%s%s%s", "poolLabels", amountAssetId, priceAssetId], SEP)
77+
78+
79+func getValueOrFail (address,key,type) = {
80+ let error = makeString(["mandatory ", toString(address), ".", key, " is not defined"], "")
81+ valueOrErrorMessage( match type {
82+ case str: String =>
83+ getString(address, key)
84+ case int: Int =>
85+ getInteger(address, key)
86+ case _ =>
87+ throw("invalid entry type")
88+ }, error)
89+ }
90+
91+
92+func getStrOrFail (address,key) = {
93+ let @ = getValueOrFail(address, key, 0)
94+ if ($isInstanceOf(@, "String"))
95+ then @
96+ else throw("Couldn't cast Int|String to String")
97+ }
98+
99+
100+func getStrOrUnit (address,key) = {
101+ let @ = getValueOrFail(address, key, 0)
102+ if ($isInstanceOf(@, "String"))
103+ then @
104+ else unit
105+ }
106+
107+
108+func getIntOrFail (address,key) = {
109+ let @ = getValueOrFail(address, key, 0)
110+ if ($isInstanceOf(@, "Int"))
111+ then @
112+ else throw("Couldn't cast Int|String to Int")
113+ }
114+
115+
116+func getIntOrUnit (address,key) = {
117+ let @ = getValueOrFail(address, key, 0)
118+ if ($isInstanceOf(@, "Int"))
119+ then @
120+ else unit
121+ }
74122
75123
76124 func isVerified (assetId) = (valueOrElse(getInteger(keyStatus(assetId)), statusUnverified) == statusVerified)
77125
78126
79127 func getLabels () = match getString(keyLabels()) {
80128 case s: String =>
81129 if ((size(s) == 0))
82130 then nil
83131 else split(s, SEP)
84132 case _ =>
85133 nil
86134 }
87135
88136
89137 func getAssetLabels (assetId) = match getString(keyAssetLabels(assetId)) {
90138 case s: String =>
91139 if ((size(s) == 0))
92140 then nil
93141 else split(s, SEP)
94142 case _ =>
95143 nil
96144 }
97145
98146
99147 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
100148 case s: String =>
101149 fromBase58String(s)
102150 case _: Unit =>
103151 unit
104152 case _ =>
105153 throw("Match error")
106154 }
107155
108156
109157 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
110158 case s: String =>
111159 fromBase58String(s)
112160 case _: Unit =>
113161 unit
114162 case _ =>
115163 throw("Match error")
116164 }
117165
118166
119167 func mustManager (i) = match managerPublicKeyOrUnit() {
120168 case pk: ByteVector =>
121169 if ((i.callerPublicKey == pk))
122170 then true
123171 else throwPD()
124172 case _: Unit =>
125173 if ((i.caller == this))
126174 then true
127175 else throwPD()
128176 case _ =>
129177 throw("Match error")
130178 }
131179
132180
133181 func mustAdmin (i) = {
134182 let adminPKs = split(valueOrElse(getString(keyAdminPubKeys()), EMPTY), SEP)
135183 if (containsElement(adminPKs, toBase58String(i.callerPublicKey)))
136184 then true
137185 else {
138186 let isManager = mustManager(i)
139187 if ((isManager == isManager))
140188 then true
141189 else throw("Strict value is not equal to itself.")
142190 }
143191 }
144192
145193
146194 func isCreated (assetId) = valueOrElse(getBoolean(keyCreated(assetId)), false)
147195
148196
149197 func verifiedToStatus (verified) = if (verified)
150198 then statusVerified
151199 else statusUnverified
152200
153201
154202 func addLabelActions (assetId,label,throwOnError) = {
155203 let labels = getLabels()
156204 let assetLabels = getAssetLabels(assetId)
157205 let checkLabel = if (containsElement(labels, label))
158206 then true
159207 else throw("Label doesn't exist")
160208 if ((checkLabel == checkLabel))
161209 then {
162210 let newAssetLabels = if (containsElement(assetLabels, label))
163211 then if (throwOnError)
164212 then throw("Label has already been added")
165213 else assetLabels
166214 else (assetLabels :+ label)
167215 [StringEntry(keyAssetLabels(assetId), makeString(newAssetLabels, SEP))]
168216 }
169217 else throw("Strict value is not equal to itself.")
170218 }
171219
172220
173221 func deleteLabelActions (assetId,label,throwOnError) = {
174222 let assetLabels = getAssetLabels(assetId)
175223 let newAssetLabels = if (containsElement(assetLabels, label))
176224 then removeByIndex(assetLabels, value(indexOf(assetLabels, label)))
177225 else if (throwOnError)
178226 then throw("Label wasn't added")
179227 else assetLabels
180228 [StringEntry(keyAssetLabels(assetId), makeString(newAssetLabels, SEP))]
181229 }
182230
183231
184232 func setVerifiedActions (assetId,verified) = {
185233 let labelCommunityVerifiedActions = if (verified)
186234 then addLabelActions(assetId, labelCommunityVerified, false)
187235 else deleteLabelActions(assetId, labelCommunityVerified, false)
188236 ([IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))] ++ labelCommunityVerifiedActions)
189237 }
190238
191239
192240 func updateTickerActions (assetId,ticker) = {
193241 let checkTicker = {
194242 let linkedAssetIdOrUnit = getString(keyTickerToAssetId(ticker))
195243 let tickerIsValid = if ((ticker != ""))
196244 then if ((linkedAssetIdOrUnit == unit))
197245 then true
198246 else (value(linkedAssetIdOrUnit) == assetId)
199247 else false
200248 if (tickerIsValid)
201249 then true
202250 else throw("Invalid ticker")
203251 }
204252 if ((checkTicker == checkTicker))
205253 then [StringEntry(keyAssetIdToTicker(assetId), ticker), StringEntry(keyTickerToAssetId(ticker), assetId)]
206254 else throw("Strict value is not equal to itself.")
207255 }
208256
209257
210258 @Callable(i)
211259 func constructor (userPoolsContract,labels) = {
212260 let checkCaller = mustManager(i)
213261 if ((checkCaller == checkCaller))
214262 then {
215263 let checksAddress = valueOrErrorMessage(addressFromString(userPoolsContract), "Invalid address")
216264 if ((checksAddress == checksAddress))
217265 then [StringEntry(keyUserPoolsContract(), userPoolsContract), StringEntry(keyLabels(), makeString((defaultLabels ++ labels), SEP))]
266+ else throw("Strict value is not equal to itself.")
267+ }
268+ else throw("Strict value is not equal to itself.")
269+ }
270+
271+
272+
273+@Callable(i)
274+func constructorV2 (votingEmissionContract) = {
275+ let checkCaller = mustManager(i)
276+ if ((checkCaller == checkCaller))
277+ then {
278+ let checkAddress = valueOrErrorMessage(addressFromString(votingEmissionContract), "invalid voting emission contract address")
279+ if ((checkAddress == checkAddress))
280+ then [StringEntry(keyVotingEmissionContract(), votingEmissionContract)]
218281 else throw("Strict value is not equal to itself.")
219282 }
220283 else throw("Strict value is not equal to itself.")
221284 }
222285
223286
224287
225288 @Callable(i)
226289 func addAssetsLink (amountAsset,priceAsset,lpAsset) = {
227290 let checkCaller = mustAdmin(i)
228291 if ((checkCaller == checkCaller))
229292 then [StringEntry(keyAmountAndPriceAssetsToLpAsset(amountAsset, priceAsset), lpAsset), StringEntry(keyLpAssetToAmountAndPriceAssets(lpAsset), makeString([amountAsset, priceAsset], SEP))]
230293 else throw("Strict value is not equal to itself.")
231294 }
232295
233296
234297
235298 @Callable(i)
236299 func increaseAssetPoolsNumber (assetId) = {
237300 let checkCaller = mustAdmin(i)
238301 if ((checkCaller == checkCaller))
239302 then {
240303 let assetPoolsNumberKey = keyAssetPoolsNumber(assetId)
241304 let assetPoolsNumber = valueOrElse(getInteger(assetPoolsNumberKey), 0)
242305 [IntegerEntry(assetPoolsNumberKey, (assetPoolsNumber + 1))]
243306 }
244307 else throw("Strict value is not equal to itself.")
245308 }
246309
247310
248311
249312 @Callable(i)
250313 func createLabel (label) = {
251314 let labels = getLabels()
252315 let checkCaller = mustManager(i)
253316 if ((checkCaller == checkCaller))
254317 then {
255318 let checkLabel = [if (!(contains(label, SEP)))
256319 then true
257320 else throw("Invalid label name"), if (!(containsElement(labels, label)))
258321 then true
259322 else throw("Label exists")]
260323 if ((checkLabel == checkLabel))
261324 then [StringEntry(keyLabels(), makeString((labels :+ label), SEP))]
262325 else throw("Strict value is not equal to itself.")
263326 }
264327 else throw("Strict value is not equal to itself.")
265328 }
266329
267330
268331
269332 @Callable(i)
270333 func dropLabel (label) = {
271334 let labels = getLabels()
272335 let checkCaller = mustManager(i)
273336 if ((checkCaller == checkCaller))
274337 then {
275338 let checkLabel = if (containsElement(labels, label))
276339 then true
277340 else throw("Label doesn't exist")
278341 if ((checkLabel == checkLabel))
279342 then [StringEntry(keyLabels(), makeString(removeByIndex(labels, value(indexOf(labels, label))), SEP))]
280343 else throw("Strict value is not equal to itself.")
281344 }
282345 else throw("Strict value is not equal to itself.")
283346 }
284347
285348
286349
287350 @Callable(i)
288351 func addLabel (assetId,label) = {
289352 let checkCaller = mustAdmin(i)
290353 if ((checkCaller == checkCaller))
291354 then addLabelActions(assetId, label, true)
292355 else throw("Strict value is not equal to itself.")
293356 }
294357
295358
296359
297360 @Callable(i)
298361 func deleteLabel (assetId,label) = {
299362 let checkCaller = mustAdmin(i)
300363 if ((checkCaller == checkCaller))
301364 then deleteLabelActions(assetId, label, true)
302365 else throw("Strict value is not equal to itself.")
303366 }
304367
305368
306369
307370 @Callable(i)
308371 func updateTicker (assetId,ticker) = {
309372 let checkCaller = mustAdmin(i)
310373 if ((checkCaller == checkCaller))
311374 then {
312375 let checkAsset = if (isCreated(assetId))
313376 then true
314377 else throwNoAsset()
315378 if ((checkAsset == checkAsset))
316379 then updateTickerActions(assetId, ticker)
317380 else throw("Strict value is not equal to itself.")
318381 }
319382 else throw("Strict value is not equal to itself.")
320383 }
321384
322385
323386
324387 @Callable(i)
325388 func deleteTicker (assetId) = {
326389 let checkCaller = mustAdmin(i)
327390 if ((checkCaller == checkCaller))
328391 then {
329392 let ticker = valueOrErrorMessage(getString(keyAssetIdToTicker(assetId)), "Invalid asset")
330393 [DeleteEntry(keyAssetIdToTicker(assetId)), DeleteEntry(keyTickerToAssetId(ticker))]
331394 }
332395 else throw("Strict value is not equal to itself.")
333396 }
334397
335398
336399
337400 @Callable(i)
338401 func createOrUpdate (assetId,logo,verified) = {
339402 let checkCaller = mustAdmin(i)
340403 if ((checkCaller == checkCaller))
341404 then {
342405 let isCreatedNow = !(isCreated(assetId))
343406 if ((isCreatedNow == isCreatedNow))
344407 then {
345408 let setLogoActions = if ((logo == ""))
346409 then nil
347410 else [StringEntry(keyLogo(assetId), logo)]
348411 $Tuple2((([BooleanEntry(keyCreated(assetId), true)] ++ setLogoActions) ++ setVerifiedActions(assetId, verified)), isCreatedNow)
349412 }
350413 else throw("Strict value is not equal to itself.")
351414 }
352415 else throw("Strict value is not equal to itself.")
353416 }
354417
355418
356419
357420 @Callable(i)
358421 func setLogo (assetId,logo) = {
359422 let checks = [mustAdmin(i), if (isCreated(assetId))
360423 then true
361424 else throwNoAsset()]
362425 if ((checks == checks))
363426 then [StringEntry(keyLogo(assetId), logo)]
364427 else throw("Strict value is not equal to itself.")
365428 }
366429
367430
368431
369432 @Callable(i)
370433 func setVerified (assetId,verified) = {
371434 let checks = [mustAdmin(i), if (isCreated(assetId))
372435 then true
373436 else throwNoAsset()]
374437 if ((checks == checks))
375- then $Tuple2(setVerifiedActions(assetId, verified), unit)
438+ then {
439+ let onVerificationLossInv = if (!(verified))
440+ then {
441+ let votingEmissionContract = valueOrErrorMessage(addressFromString(getStrOrFail(this, keyVotingEmissionContract())), "invalid voting emission contract address")
442+ invoke(votingEmissionContract, "onVerificationLoss", [assetId], nil)
443+ }
444+ else unit
445+ if ((onVerificationLossInv == onVerificationLossInv))
446+ then $Tuple2(setVerifiedActions(assetId, verified), unit)
447+ else throw("Strict value is not equal to itself.")
448+ }
376449 else throw("Strict value is not equal to itself.")
377450 }
378451
379452
380453
381454 @Callable(i)
382455 func onEliminate (assetId) = {
383456 let poolsNumber = valueOrElse(getInteger(keyAssetPoolsNumber(assetId)), 0)
384457 let actions = if ((poolsNumber > 0))
385458 then nil
386459 else [DeleteEntry(keyLogo(assetId))]
387460 $Tuple2(actions, unit)
388461 }
389462
390463
391464
392465 @Callable(i)
393466 func setAdmins (adminPubKeys) = {
394467 let checkCaller = mustManager(i)
395468 if ((checkCaller == checkCaller))
396469 then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
397470 else throw("Strict value is not equal to itself.")
398471 }
399472
400473
401474
402475 @Callable(i)
403476 func setPoolLabels (amountAssetId,priceAssetId,label) = {
404477 let checkCaller = mustAdmin(i)
405478 if ((checkCaller == checkCaller))
406479 then {
407480 let isValidLabel = if (containsElement(validPoolLabels, label))
408481 then true
409482 else throw("label is not valid")
410483 if ((isValidLabel == isValidLabel))
411484 then $Tuple2([StringEntry(keyPoolLabels(amountAssetId, priceAssetId), label)], unit)
412485 else throw("Strict value is not equal to itself.")
413486 }
414487 else throw("Strict value is not equal to itself.")
415488 }
416489
417490
418491
419492 @Callable(i)
420493 func setManager (pendingManagerPublicKey) = {
421494 let checkCaller = mustManager(i)
422495 if ((checkCaller == checkCaller))
423496 then {
424497 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
425498 if ((checkManagerPublicKey == checkManagerPublicKey))
426499 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
427500 else throw("Strict value is not equal to itself.")
428501 }
429502 else throw("Strict value is not equal to itself.")
430503 }
431504
432505
433506
434507 @Callable(i)
435508 func confirmManager () = {
436509 let pm = pendingManagerPublicKeyOrUnit()
437510 let hasPM = if (isDefined(pm))
438511 then true
439512 else throw("No pending manager")
440513 if ((hasPM == hasPM))
441514 then {
442515 let checkPM = if ((i.callerPublicKey == value(pm)))
443516 then true
444517 else throw("You are not pending manager")
445518 if ((checkPM == checkPM))
446519 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
447520 else throw("Strict value is not equal to itself.")
448521 }
449522 else throw("Strict value is not equal to itself.")
450523 }
451524
452525
453526
454527 @Callable(i)
455528 func isVerifiedREADONLY (assetId) = $Tuple2(nil, isVerified(assetId))
456529
457530
458531 @Verifier(tx)
459532 func verify () = {
460533 let targetPublicKey = match managerPublicKeyOrUnit() {
461534 case pk: ByteVector =>
462535 pk
463536 case _: Unit =>
464537 tx.senderPublicKey
465538 case _ =>
466539 throw("Match error")
467540 }
468541 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
469542 }
470543

github/deemru/w8io/873ac7e 
46.29 ms