tx · 3CHb7RSN6keK1absxqNEuyKqMwa6KrP8VNmFN6zaiHCF

3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T:  -0.01400000 Waves

2022.05.13 16:24 [2049972] smart account 3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T > SELF 0.00000000 Waves

{ "type": 13, "id": "3CHb7RSN6keK1absxqNEuyKqMwa6KrP8VNmFN6zaiHCF", "fee": 1400000, "feeAssetId": null, "timestamp": 1652448312292, "version": 1, "sender": "3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T", "senderPublicKey": "7iXEgsFNsnbLZ3ca4tmz8jffnyxMu9keuBV6CuQPJLuA", "proofs": [ "SQ17qmM4SfsuynHSyBH5KfWdo52Jqm615x2CKW2N8uzqqcMzwf6UGaKiNmCFwQ5cBHH688ruUqkHrP2qqQWxbgh" ], "script": "base64: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bnRyYWN0AAAAABB1c2VyUG9vbENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAATa2V5VXNlclBvb2xDb250cmFjdAAAAAAQYm9vc3RpbmdDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAAE2tleUJvb3N0aW5nQ29udHJhY3QAAAAAE2Fzc2V0c1N0b3JlQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAABZrZXlBc3NldHNTdG9yZUNvbnRyYWN0AQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAAR1bml0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAC211c3RNYW5hZ2VyAAAAAQAAAAFpBAAAAAJwZAkAAAIAAAABAgAAABFwZXJtaXNzaW9uIGRlbmllZAQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAAJwawYFAAAAAnBkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0AwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMGBQAAAAJwZAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAFYXNJbnQAAAABAAAAA3ZhbAQAAAAHJG1hdGNoMAUAAAADdmFsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABnZhbEludAUAAAAHJG1hdGNoMAUAAAAGdmFsSW50CQAAAgAAAAECAAAAG2ZhaWxlZCB0byBjYXN0IGludG8gSW50ZWdlcgAAAAgAAAABaQEAAAALY29uc3RydWN0b3IAAAAJAAAAFmFzc2V0c1N0b3JlQ29udHJhY3RQcm0AAAATdXNlclBvb2xDb250cmFjdFBybQAAABNib29zdGluZ0NvbnRyYWN0UHJtAAAAE2VtaXNzaW9uQ29udHJhY3RQcm0AAAAMZmVlQW1vdW50UHJtAAAADHd4QXNzZXRJZFBybQAAABF2b3RpbmdEdXJhdGlvblBybQAAAA51c2RuQXNzZXRJZFBybQAAABFmaW5hbGl6ZVJld2FyZFBybQQAAAAGY2hlY2tzCQAETAAAAAIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEJgAAAAEFAAAAFmFzc2V0c1N0b3JlQ29udHJhY3RQcm0GCQAAAgAAAAECAAAAJEludmFsaWQgYXNzZXRfc3RvcmUgY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQmAAAAAQUAAAATYm9vc3RpbmdDb250cmFjdFBybQYJAAACAAAAAQIAAAAhSW52YWxpZCBib29zdGluZyBjb250cmFjdCBhZGRyZXNzCQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkABCYAAAABBQAAABN1c2VyUG9vbENvbnRyYWN0UHJtBgkAAAIAAAABAgAAACNJbnZhbGlkIHVzZXJfcG9vbHMgY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAA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AQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIJAAACAAAAAQIAAAAVYXNzZXQgaXMgbm90IHZlcmlmaWVkAwkAAAAAAAACBQAAABllbnN1cmVBbW91bnRBc3NldFZlcmlmaWVkBQAAABllbnN1cmVBbW91bnRBc3NldFZlcmlmaWVkBAAAAApidXJuRmVlSW52CQAD/AAAAAQFAAAAEGVtaXNzaW9uQ29udHJhY3QCAAAABGJ1cm4FAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAgFAAAAB3BheW1lbnQAAAAGYW1vdW50BQAAAANuaWwDCQAAAAAAAAIFAAAACmJ1cm5GZWVJbnYFAAAACmJ1cm5GZWVJbnYEAAAAD25ld1N1Z2dlc3RJbmRleAQAAAAHJG1hdGNoMAkABB8AAAABCQEAAAAPa2V5U3VnZ2VzdEluZGV4AAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAA2ludAUAAAAHJG1hdGNoMAkAAGQAAAACBQAAAANpbnQAAAAAAAAAAAEAAAAAAAAAAAAJAAUUAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAAD25ld1N1Z2dlc3RJbmRleAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADmtleVN0YXJ0SGVpZ2h0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAA9uZXdTdWdnZXN0SW5kZXgFAAAABmhlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5Vm90aW5nUmVzdWx0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAA9uZXdTdWdnZXN0SW5kZXgJAQAAAAp0b3RhbFZvdGVzAAAAAgIAAAAB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dGVUeXBlU2ltaWxhcgUAAAASaXNWb3RlVmFsdWVTaW1pbGFyBwkAAAIAAAABAgAAABF5b3UgYWxyZWFkeSB2b3RlZAkAA/wAAAAEBQAAAAR0aGlzAgAAAApjYW5jZWxWb3RlCQAETAAAAAIFAAAADWFtb3VudEFzc2V0SWQJAARMAAAAAgUAAAAMcHJpY2VBc3NldElkBQAAAANuaWwFAAAAA25pbAUAAAAQaXNOZXdWb3RlU2ltaWxhcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAABdQUAAAAHJG1hdGNoMAUAAAABdQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgMJAAAAAAAAAgUAAAAEdm90ZQUAAAAEdm90ZQQAAAAMdm90aW5nUmVzdWx0CQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAlzZXBhcmF0b3IEAAAADXBvc2l0aXZlVm90ZXMJAAGRAAAAAgUAAAAMdm90aW5nUmVzdWx0AAAAAAAAAAABBAAAAA1uZWdhdGl2ZVZvdGVzCQABkQAAAAIFAAAADHZvdGluZ1Jlc3VsdAAAAAAAAAAAAgQAAAAbbmV3UG9zaXRpdmVBbmROZWdhdGl2ZVZvdGVzAwUAAAAHaW5GYXZvcgQAAAAQbmV3UG9zaXRpdmVWb3RlcwkAAGQAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAADXBvc2l0aXZlVm90ZXMJAQAAAAVhc0ludAAAAAEFAAAACWd3eEFtb3VudAkABEwAAAACCQABpAAAAAEFAAAAEG5ld1Bvc2l0aXZlVm90ZXMJAARMAAAAAgUAAAANbmVnYXRpdmVWb3RlcwUAAAADbmlsBAAAABBuZXdOZWdhdGl2ZVZvdGVzCQAAZAAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAANbmVnYXRpdmVWb3RlcwkBAAAABWFzSW50AAAAAQUAAAAJZ3d4QW1vdW50CQAETAAAAAIFAAAADXBvc2l0aXZlVm90ZXMJAARMAAAAAgkAAaQAAAABBQAAABBuZXdOZWdhdGl2ZVZvdGVzBQAAAANuaWwEAAAAB3ZvdGVLZXkJAQAAAAdrZXlWb3RlAAAABAUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxzdWdnZXN0SW5kZXgJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAl2b3RlVmFsdWUJAQAAAAxrZXlWb3RlVmFsdWUAAAACCQABpAAAAAEJAQAAAAVhc0ludAAAAAEFAAAACWd3eEFtb3VudAUAAAAHaW5GYXZvcgkABRQAAAACCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9rZXlWb3RpbmdSZXN1bHQAAAADBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAkBAAAACnRvdGFsVm90ZXMAAAACCQABkQAAAAIFAAAAG25ld1Bvc2l0aXZlQW5kTmVnYXRpdmVWb3RlcwAAAAAAAAAAAAkAAZEAAAACBQAAABtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAAAAAAAAAAEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAHdm90ZUtleQUAAAAJdm90ZVZhbHVlBQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKY2FuY2VsVm90ZQAAAAIAAAANYW1vdW50QXNzZXRJZAAAAAxwcmljZUFzc2V0SWQEAAAADHN1Z2dlc3RJbmRleAkBAAAABXZhbHVlAAAAAQkABB8AAAABCQEAAAAQa2V5SW5MaXN0QXNzZXRJZAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAQAAAAGY2hlY2tzCQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkABCIAAAABCQEAAAAPa2V5Vm90aW5nUmVzdWx0AAAAAwUAAAANYW1v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AgAAAA1hbW91bnRBc3NldElkAAAADHByaWNlQXNzZXRJZAQAAAAMc3VnZ2VzdEluZGV4CQEAAAAFdmFsdWUAAAABCQAEHwAAAAEJAQAAABBrZXlJbkxpc3RBc3NldElkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBAAAABJ2b3RpbmdGaW5pc2hIZWlnaHQJAABkAAAAAgkBAAAABXZhbHVlAAAAAQkABB8AAAABCQEAAAAOa2V5U3RhcnRIZWlnaHQAAAADBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAkBAAAABXZhbHVlAAAAAQkABB8AAAABBQAAAA5rZXlFcG9jaExlbmd0aAQAAAAGY2hlY2tzCQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkABB8AAAABCQEAAAAQa2V5SW5MaXN0QXNzZXRJZAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAYJAAACAAAAAQIAAAAObm8gYXNzZXRzIHBhaXIJAARMAAAAAgMJAABnAAAAAgUAAAAGaGVpZ2h0BQAAABJ2b3RpbmdGaW5pc2hIZWlnaHQGCQAAAgAAAAECAAAAImluc3VmZmljaWVudCBoZWlnaHQgZm9yIGNvbXBsZXRpb24FAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAADHZvdGluZ1Jlc3VsdAkABLUAAAACCQEAAAAFdmFsdWUAAAABCQAEIgAAAAEJAQAAAA9rZXlWb3RpbmdSZXN1bHQAAAADBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAUAAAAJc2VwYXJhdG9yBAAAAA1wb3NpdGl2ZVZvdGVzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdm90aW5nUmVzdWx0AAAAAAAAAAABBAAAAA1uZWdhdGl2ZVZvdGVzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdm90aW5nUmVzdWx0AAAAAAAAAAACBAAAAAdhY3Rpb25zAwkAAGYAAAACBQAAAA1wb3NpdGl2ZVZvdGVzBQAAAA1uZWdhdGl2ZVZvdGVzBAAAAANyZXMJAAP8AAAABAUAAAATYXNzZXRzU3RvcmVDb250cmFjdAIAAAANc2V0UG9vbExhYmVscwkABEwAAAACBQAAAA1hbW91bnRBc3NldElkCQAETAAAAAIFAAAADHByaWNlQXNzZXRJZAkABEwAAAACAgAAAAtXWF9FTUlTU0lPTgUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAA3JlcwUAAAADcmVzCQAFFAAAAAIJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAAA25pbAUAAAAEdW5pdAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAUUAAAAAgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQa2V5SW5MaXN0QXNzZXRJZAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAADbmlsBQAAAAR1bml0BQAAAAdhY3Rpb25zCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAApzZXRNYW5hZ2VyAAAAAQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQACWQAAAAEFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAAAAAACBQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAOY29uZmlybU1hbmFnZXIAAAAABAAAAAJwbQkBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAFaGFzUE0DCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAEm5vIHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAFaGFzUE0FAAAABWhhc1BNBAAAAAdjaGVja1BNAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABt5b3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAAB2NoZWNrUE0FAAAAB2NoZWNrUE0JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAACQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAPdGFyZ2V0UHVibGljS2V5BAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwBQAAAAJwawMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAD3RhcmdldFB1YmxpY0tlee5tCq0=", "chainId": 84, "height": 2049972, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GpnKgyEdHQSXFUmQtwwH4EJcmjxjubkkwQm7TvFPjVKs Next: EoViFdk61e5pQUHAEN4zQGX4SkxCWBH6J8Cq8S9q4E7g Diff:
OldNewDifferences
200200 func vote (amountAssetId,priceAssetId,inFavor) = {
201201 let suggestIndex = value(getInteger(keyInListAssetId(amountAssetId, priceAssetId)))
202202 let votingFinishHeight = (value(getInteger(keyStartHeight(amountAssetId, priceAssetId, suggestIndex))) + value(getInteger(keyEpochLength)))
203- let checks = [if ((getString(keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))) == unit))
204- then true
205- else throw("you already voted"), if (isDefined(getInteger(keyInListAssetId(amountAssetId, priceAssetId))))
203+ let checks = [if (isDefined(getInteger(keyInListAssetId(amountAssetId, priceAssetId))))
206204 then true
207205 else throw("the token isn't on the voting list"), if ((votingFinishHeight > height))
208206 then true
209207 else throw("too late to vote")]
210208 if ((checks == checks))
211209 then {
212- let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
213- let positiveVotes = votingResult[1]
214- let negativeVotes = votingResult[2]
215210 let gwxAmount = invoke(boostingContract, "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), votingFinishHeight], nil)
216211 let notZero = if ((asInt(gwxAmount) > 0))
217212 then true
218213 else throw("you don't have gwx")
219214 if ((notZero == notZero))
220215 then {
221- let entries = if (inFavor)
216+ let vote = match getString(keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))) {
217+ case s: String =>
218+ let vote = split(s, separator)
219+ let voteValue = vote[1]
220+ let voteType = vote[2]
221+ let isVoteTypeSimilar = if (if (if ((voteType == "yes"))
222+ then (inFavor == true)
223+ else false)
224+ then true
225+ else if ((voteType == "no"))
226+ then (inFavor == false)
227+ else false)
228+ then true
229+ else false
230+ let isVoteValueSimilar = if (if (isVoteTypeSimilar)
231+ then (asInt(gwxAmount) == parseIntValue(voteValue))
232+ else false)
233+ then true
234+ else false
235+ let isNewVoteSimilar = if (if (isVoteTypeSimilar)
236+ then isVoteValueSimilar
237+ else false)
238+ then throw("you already voted")
239+ else invoke(this, "cancelVote", [amountAssetId, priceAssetId], nil)
240+ isNewVoteSimilar
241+ case u: Unit =>
242+ u
243+ case _ =>
244+ throw("Match error")
245+ }
246+ if ((vote == vote))
222247 then {
223- let newPositiveVotes = (parseIntValue(positiveVotes) + asInt(gwxAmount))
224- let yesVoteKey = keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))
225- let yesVoteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
226- $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(toString(newPositiveVotes), negativeVotes)), StringEntry(yesVoteKey, yesVoteValue)], unit)
248+ let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
249+ let positiveVotes = votingResult[1]
250+ let negativeVotes = votingResult[2]
251+ let newPositiveAndNegativeVotes = if (inFavor)
252+ then {
253+ let newPositiveVotes = (parseIntValue(positiveVotes) + asInt(gwxAmount))
254+[toString(newPositiveVotes), negativeVotes]
255+ }
256+ else {
257+ let newNegativeVotes = (parseIntValue(negativeVotes) + asInt(gwxAmount))
258+[positiveVotes, toString(newNegativeVotes)]
259+ }
260+ let voteKey = keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))
261+ let voteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
262+ $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(newPositiveAndNegativeVotes[0], newPositiveAndNegativeVotes[1])), StringEntry(voteKey, voteValue)], unit)
227263 }
228- else {
229- let newNegativeVotes = (parseIntValue(negativeVotes) + asInt(gwxAmount))
230- let noVoteKey = keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))
231- let noVoteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
232- $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(positiveVotes, toString(newNegativeVotes))), StringEntry(noVoteKey, noVoteValue)], unit)
233- }
234- entries
264+ else throw("Strict value is not equal to itself.")
235265 }
236266 else throw("Strict value is not equal to itself.")
237267 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "__"
55
66 let keyFeeAmount = makeString(["%s", "fee"], separator)
77
88 let keyUsdnAssetId = makeString(["%s", "usdnAssetId"], separator)
99
1010 let keyEpochLength = makeString(["%s", "epochLength"], separator)
1111
1212 let keyFinalizeReward = makeString(["%s", "finalizeReward"], separator)
1313
1414 let keyWxAssetId = makeString(["%s", "wxAssetId"], separator)
1515
1616 let keyAssetsStoreContract = makeString(["%s", "assetsStoreContract"], separator)
1717
1818 let keyUserPoolContract = makeString(["%s", "userPoolContract"], separator)
1919
2020 let keyEmissionContract = makeString(["%s", "emissionContract"], separator)
2121
2222 let keyBoostingContract = makeString(["%s", "boostingContract"], separator)
2323
2424 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (key + " is not defined"))
2525
2626
2727 func keyInListAssetId (amountAssetId,priceAssetId) = makeString(["%s%s%s", "inList", amountAssetId, priceAssetId], separator)
2828
2929
3030 func keySuggestIndex (amountAssetId,priceAssetId) = makeString(["%s%s%s", "suggestIndex", amountAssetId, priceAssetId], separator)
3131
3232
3333 func keyStartHeight (amountAssetId,priceAssetId,suggestIndex) = makeString(["%s%s%s%d", "startHeight", amountAssetId, priceAssetId, toString(suggestIndex)], separator)
3434
3535
3636 func keyVotingResult (amountAssetId,priceAssetId,suggestIndex) = makeString(["%s%s%s%d", "votingResult", amountAssetId, priceAssetId, toString(suggestIndex)], separator)
3737
3838
3939 func totalVotes (totalYes,totalNo) = makeString(["%d%d", totalYes, totalNo], separator)
4040
4141
4242 func keyVote (amountAssetId,priceAssetId,suggestIndex,voterAddress) = makeString(["%s%s%s%d%s", "vote", amountAssetId, priceAssetId, toString(suggestIndex), voterAddress], separator)
4343
4444
4545 func keyVoteValue (gwxAmount,vote) = {
4646 let key = if (vote)
4747 then makeString(["%d%s", gwxAmount, "yes"], separator)
4848 else makeString(["%d%s", gwxAmount, "no"], separator)
4949 key
5050 }
5151
5252
5353 func keyManagerPublicKey () = "%s__managerPublicKey"
5454
5555
5656 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
5757
5858
5959 let emissionContract = addressFromStringValue(getStringOrFail(keyEmissionContract))
6060
6161 let userPoolContract = addressFromStringValue(getStringOrFail(keyUserPoolContract))
6262
6363 let boostingContract = addressFromStringValue(getStringOrFail(keyBoostingContract))
6464
6565 let assetsStoreContract = addressFromStringValue(getStringOrFail(keyAssetsStoreContract))
6666
6767 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
6868 case s: String =>
6969 fromBase58String(s)
7070 case _: Unit =>
7171 unit
7272 case _ =>
7373 throw("Match error")
7474 }
7575
7676
7777 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
7878 case s: String =>
7979 fromBase58String(s)
8080 case _: Unit =>
8181 unit
8282 case _ =>
8383 throw("Match error")
8484 }
8585
8686
8787 func mustManager (i) = {
8888 let pd = throw("permission denied")
8989 match managerPublicKeyOrUnit() {
9090 case pk: ByteVector =>
9191 if ((i.callerPublicKey == pk))
9292 then true
9393 else pd
9494 case _: Unit =>
9595 if ((i.caller == this))
9696 then true
9797 else pd
9898 case _ =>
9999 throw("Match error")
100100 }
101101 }
102102
103103
104104 func asInt (val) = match val {
105105 case valInt: Int =>
106106 valInt
107107 case _ =>
108108 throw("failed to cast into Integer")
109109 }
110110
111111
112112 @Callable(i)
113113 func constructor (assetsStoreContractPrm,userPoolContractPrm,boostingContractPrm,emissionContractPrm,feeAmountPrm,wxAssetIdPrm,votingDurationPrm,usdnAssetIdPrm,finalizeRewardPrm) = {
114114 let checks = [mustManager(i), if (isDefined(addressFromString(assetsStoreContractPrm)))
115115 then true
116116 else throw("Invalid asset_store contract address"), if (isDefined(addressFromString(boostingContractPrm)))
117117 then true
118118 else throw("Invalid boosting contract address"), if (isDefined(addressFromString(userPoolContractPrm)))
119119 then true
120120 else throw("Invalid user_pools contract address"), if (isDefined(addressFromString(emissionContractPrm)))
121121 then true
122122 else throw("Invalid emission contract address"), if ((feeAmountPrm >= 0))
123123 then true
124124 else throw("Invalid fee amount"), if ((votingDurationPrm > 0))
125125 then true
126126 else throw("Invalid voting duration"), if ((finalizeRewardPrm > 0))
127127 then true
128128 else throw("Invalid finalize reward"), if (isDefined(assetInfo(fromBase58String(wxAssetIdPrm))))
129129 then true
130130 else throw("Invalid WX asset ID"), if (isDefined(assetInfo(fromBase58String(usdnAssetIdPrm))))
131131 then true
132132 else throw("Invalid USDN asset ID")]
133133 if ((checks == checks))
134134 then $Tuple2([StringEntry(keyAssetsStoreContract, assetsStoreContractPrm), StringEntry(keyUserPoolContract, userPoolContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), IntegerEntry(keyFeeAmount, feeAmountPrm), IntegerEntry(keyEpochLength, votingDurationPrm), IntegerEntry(keyFinalizeReward, finalizeRewardPrm), StringEntry(keyWxAssetId, wxAssetIdPrm), StringEntry(keyUsdnAssetId, usdnAssetIdPrm), StringEntry(keyBoostingContract, boostingContractPrm)], unit)
135135 else throw("Strict value is not equal to itself.")
136136 }
137137
138138
139139
140140 @Callable(i)
141141 func suggest (amountAssetId,priceAssetId) = {
142142 let payment = value(i.payments[0])
143143 let info = valueOrErrorMessage(assetInfo(fromBase58String(amountAssetId)), "invalid amountAssetId ID")
144144 let checks = [if ((info.issuer == i.caller))
145145 then true
146146 else throw("asset can only be suggested by its issuer"), if ((info.scripted == false))
147147 then true
148148 else throw("asset is smart"), if ((toBase58String(value(payment.assetId)) == value(getString(keyWxAssetId))))
149149 then true
150150 else throw("invalid fee asset"), if ((payment.amount == value(getInteger(keyFeeAmount))))
151151 then true
152152 else throw("invalid fee amount"), if ((priceAssetId == value(getString(keyUsdnAssetId))))
153153 then true
154154 else throw("priceAssetId is not USDN"), if ((getInteger(keyInListAssetId(amountAssetId, priceAssetId)) == unit))
155155 then true
156156 else throw("already in voting list")]
157157 if ((checks == checks))
158158 then {
159159 let ensureActive = match invoke(userPoolContract, "statusREADONLY", [amountAssetId, priceAssetId], nil) {
160160 case s: String =>
161161 if ((s == "active"))
162162 then true
163163 else throw("user pool is not active")
164164 case _ =>
165165 throw("user pool is not active")
166166 }
167167 if ((ensureActive == ensureActive))
168168 then {
169169 let ensureAmountAssetVerified = match invoke(assetsStoreContract, "isVerifiedREADONLY", [amountAssetId], nil) {
170170 case b: Boolean =>
171171 b
172172 case _ =>
173173 throw("asset is not verified")
174174 }
175175 if ((ensureAmountAssetVerified == ensureAmountAssetVerified))
176176 then {
177177 let burnFeeInv = invoke(emissionContract, "burn", nil, [AttachedPayment(payment.assetId, payment.amount)])
178178 if ((burnFeeInv == burnFeeInv))
179179 then {
180180 let newSuggestIndex = match getInteger(keySuggestIndex(amountAssetId, priceAssetId)) {
181181 case int: Int =>
182182 (int + 1)
183183 case _ =>
184184 0
185185 }
186186 $Tuple2([IntegerEntry(keyInListAssetId(amountAssetId, priceAssetId), newSuggestIndex), IntegerEntry(keyStartHeight(amountAssetId, priceAssetId, newSuggestIndex), height), StringEntry(keyVotingResult(amountAssetId, priceAssetId, newSuggestIndex), totalVotes("0", "0")), IntegerEntry(keySuggestIndex(amountAssetId, priceAssetId), newSuggestIndex)], unit)
187187 }
188188 else throw("Strict value is not equal to itself.")
189189 }
190190 else throw("Strict value is not equal to itself.")
191191 }
192192 else throw("Strict value is not equal to itself.")
193193 }
194194 else throw("Strict value is not equal to itself.")
195195 }
196196
197197
198198
199199 @Callable(i)
200200 func vote (amountAssetId,priceAssetId,inFavor) = {
201201 let suggestIndex = value(getInteger(keyInListAssetId(amountAssetId, priceAssetId)))
202202 let votingFinishHeight = (value(getInteger(keyStartHeight(amountAssetId, priceAssetId, suggestIndex))) + value(getInteger(keyEpochLength)))
203- let checks = [if ((getString(keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))) == unit))
204- then true
205- else throw("you already voted"), if (isDefined(getInteger(keyInListAssetId(amountAssetId, priceAssetId))))
203+ let checks = [if (isDefined(getInteger(keyInListAssetId(amountAssetId, priceAssetId))))
206204 then true
207205 else throw("the token isn't on the voting list"), if ((votingFinishHeight > height))
208206 then true
209207 else throw("too late to vote")]
210208 if ((checks == checks))
211209 then {
212- let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
213- let positiveVotes = votingResult[1]
214- let negativeVotes = votingResult[2]
215210 let gwxAmount = invoke(boostingContract, "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), votingFinishHeight], nil)
216211 let notZero = if ((asInt(gwxAmount) > 0))
217212 then true
218213 else throw("you don't have gwx")
219214 if ((notZero == notZero))
220215 then {
221- let entries = if (inFavor)
216+ let vote = match getString(keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))) {
217+ case s: String =>
218+ let vote = split(s, separator)
219+ let voteValue = vote[1]
220+ let voteType = vote[2]
221+ let isVoteTypeSimilar = if (if (if ((voteType == "yes"))
222+ then (inFavor == true)
223+ else false)
224+ then true
225+ else if ((voteType == "no"))
226+ then (inFavor == false)
227+ else false)
228+ then true
229+ else false
230+ let isVoteValueSimilar = if (if (isVoteTypeSimilar)
231+ then (asInt(gwxAmount) == parseIntValue(voteValue))
232+ else false)
233+ then true
234+ else false
235+ let isNewVoteSimilar = if (if (isVoteTypeSimilar)
236+ then isVoteValueSimilar
237+ else false)
238+ then throw("you already voted")
239+ else invoke(this, "cancelVote", [amountAssetId, priceAssetId], nil)
240+ isNewVoteSimilar
241+ case u: Unit =>
242+ u
243+ case _ =>
244+ throw("Match error")
245+ }
246+ if ((vote == vote))
222247 then {
223- let newPositiveVotes = (parseIntValue(positiveVotes) + asInt(gwxAmount))
224- let yesVoteKey = keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))
225- let yesVoteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
226- $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(toString(newPositiveVotes), negativeVotes)), StringEntry(yesVoteKey, yesVoteValue)], unit)
248+ let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
249+ let positiveVotes = votingResult[1]
250+ let negativeVotes = votingResult[2]
251+ let newPositiveAndNegativeVotes = if (inFavor)
252+ then {
253+ let newPositiveVotes = (parseIntValue(positiveVotes) + asInt(gwxAmount))
254+[toString(newPositiveVotes), negativeVotes]
255+ }
256+ else {
257+ let newNegativeVotes = (parseIntValue(negativeVotes) + asInt(gwxAmount))
258+[positiveVotes, toString(newNegativeVotes)]
259+ }
260+ let voteKey = keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))
261+ let voteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
262+ $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(newPositiveAndNegativeVotes[0], newPositiveAndNegativeVotes[1])), StringEntry(voteKey, voteValue)], unit)
227263 }
228- else {
229- let newNegativeVotes = (parseIntValue(negativeVotes) + asInt(gwxAmount))
230- let noVoteKey = keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))
231- let noVoteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
232- $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(positiveVotes, toString(newNegativeVotes))), StringEntry(noVoteKey, noVoteValue)], unit)
233- }
234- entries
264+ else throw("Strict value is not equal to itself.")
235265 }
236266 else throw("Strict value is not equal to itself.")
237267 }
238268 else throw("Strict value is not equal to itself.")
239269 }
240270
241271
242272
243273 @Callable(i)
244274 func cancelVote (amountAssetId,priceAssetId) = {
245275 let suggestIndex = value(getInteger(keyInListAssetId(amountAssetId, priceAssetId)))
246276 let checks = [if (isDefined(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))))
247277 then true
248278 else throw("no vote for assets pair")]
249279 if ((checks == checks))
250280 then {
251281 let vote = split(value(getString(keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller)))), separator)
252282 let voteValue = vote[1]
253283 let voteType = vote[2]
254284 let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
255285 let positiveVotes = votingResult[1]
256286 let negativeVotes = votingResult[2]
257287 let actions = if ((voteType == "yes"))
258288 then {
259289 let newPositiveVotes = (parseIntValue(positiveVotes) - parseIntValue(voteValue))
260290 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(toString(newPositiveVotes), negativeVotes)), DeleteEntry(keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller)))], unit)
261291 }
262292 else {
263293 let newNegativeVotes = (parseIntValue(negativeVotes) - parseIntValue(voteValue))
264294 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(positiveVotes, toString(newNegativeVotes))), DeleteEntry(keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller)))], unit)
265295 }
266296 actions
267297 }
268298 else throw("Strict value is not equal to itself.")
269299 }
270300
271301
272302
273303 @Callable(i)
274304 func setFee (newFee) = {
275305 let checks = [mustManager(i)]
276306 if ((checks == checks))
277307 then [IntegerEntry(keyFeeAmount, newFee)]
278308 else throw("Strict value is not equal to itself.")
279309 }
280310
281311
282312
283313 @Callable(i)
284314 func finalize (amountAssetId,priceAssetId) = {
285315 let suggestIndex = value(getInteger(keyInListAssetId(amountAssetId, priceAssetId)))
286316 let votingFinishHeight = (value(getInteger(keyStartHeight(amountAssetId, priceAssetId, suggestIndex))) + value(getInteger(keyEpochLength)))
287317 let checks = [if (isDefined(getInteger(keyInListAssetId(amountAssetId, priceAssetId))))
288318 then true
289319 else throw("no assets pair"), if ((height >= votingFinishHeight))
290320 then true
291321 else throw("insufficient height for completion")]
292322 if ((checks == checks))
293323 then {
294324 let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
295325 let positiveVotes = parseIntValue(votingResult[1])
296326 let negativeVotes = parseIntValue(votingResult[2])
297327 let actions = if ((positiveVotes > negativeVotes))
298328 then {
299329 let res = invoke(assetsStoreContract, "setPoolLabels", [amountAssetId, priceAssetId, "WX_EMISSION"], nil)
300330 if ((res == res))
301331 then $Tuple2([DeleteEntry(keyInListAssetId(amountAssetId, priceAssetId))], unit)
302332 else throw("Strict value is not equal to itself.")
303333 }
304334 else $Tuple2([DeleteEntry(keyInListAssetId(amountAssetId, priceAssetId))], unit)
305335 actions
306336 }
307337 else throw("Strict value is not equal to itself.")
308338 }
309339
310340
311341
312342 @Callable(i)
313343 func setManager (pendingManagerPublicKey) = {
314344 let checkCaller = mustManager(i)
315345 if ((checkCaller == checkCaller))
316346 then {
317347 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
318348 if ((checkManagerPublicKey == checkManagerPublicKey))
319349 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
320350 else throw("Strict value is not equal to itself.")
321351 }
322352 else throw("Strict value is not equal to itself.")
323353 }
324354
325355
326356
327357 @Callable(i)
328358 func confirmManager () = {
329359 let pm = pendingManagerPublicKeyOrUnit()
330360 let hasPM = if (isDefined(pm))
331361 then true
332362 else throw("no pending manager")
333363 if ((hasPM == hasPM))
334364 then {
335365 let checkPM = if ((i.callerPublicKey == value(pm)))
336366 then true
337367 else throw("you are not pending manager")
338368 if ((checkPM == checkPM))
339369 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
340370 else throw("Strict value is not equal to itself.")
341371 }
342372 else throw("Strict value is not equal to itself.")
343373 }
344374
345375
346376 @Verifier(tx)
347377 func verify () = {
348378 let targetPublicKey = match managerPublicKeyOrUnit() {
349379 case pk: ByteVector =>
350380 pk
351381 case _: Unit =>
352382 tx.senderPublicKey
353383 case _ =>
354384 throw("Match error")
355385 }
356386 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
357387 }
358388

github/deemru/w8io/169f3d6 
51.57 ms