tx · BsKGvZso6JoBp7NubG1FPi6m6m7JHCKBJBVEmGeXv8c

3N4LqYvK8toVfW83bVrzvm4VoA55PB21Bmy:  -0.14000000 Waves

2021.11.09 12:04 [1783264] smart account 3N4LqYvK8toVfW83bVrzvm4VoA55PB21Bmy > SELF 0.00000000 Waves

{ "type": 13, "id": "BsKGvZso6JoBp7NubG1FPi6m6m7JHCKBJBVEmGeXv8c", "fee": 14000000, "feeAssetId": null, "timestamp": 1636448690947, "version": 2, "chainId": 84, "sender": "3N4LqYvK8toVfW83bVrzvm4VoA55PB21Bmy", "senderPublicKey": "9NPkhjF6pssidKGhnMzHn9auzo5q5fPBaabRQBx7CaFq", "proofs": [ "56oNzEikcUcgtK37amtfZrKNgqQoAJB41y24F9V3NznmienjgujSK7mxVrG6qw3gAqdMhQjhedF1vijwQzdkiHeL", "3uTMSmjDbK9tKFRw9gDnqwhQP1bXvj98CrXU77zXxrSeV3UuQXKoA8WoaM1Jk7StS85ZDxZEPsE6TSHe3U8Uu6Bd" ], "script": "base64:AAIFAAAAAAAAAB4IAhIAEgQKAgEBEgMKAQESABIDCgEBEgASABIAEgAAAAAeAAAAAAxhZG1pblB1YktleTEBAAAAIHxYa3tSxaWNZxxr9KlqtCKnmcTlLLl7jg3ENEFozVB4AAAAAAxhZG1pblB1YktleTIBAAAAIHxYa3tSxaWNZxxr9KlqtCKnmcTlLLl7jg3ENEFozVB4AAAAAAxhZG1pblB1YktleTMBAAAAIHxYa3tSxaWNZxxr9KlqtCKnmcTlLLl7jg3ENEFozVB4AAAAABRhZG1pblB1YktleVN0YXJ0U3RvcAEAAAAgfFhre1LFpY1nHGv0qWq0IqeZxOUsuXuODcQ0QWjNUHgAAAAACWtleUFjdGl2ZQIAAAAGYWN0aXZlAAAAAAhrZXlDYXVzZQIAAAAOc2h1dGRvd25fY2F1c2UAAAAADGtleVZvdGVTdGFydAIAAAARdm90ZV9zdGFydF9oZWlnaHQAAAAACmtleVZvdGVFbmQCAAAAD3ZvdGVfZW5kX2hlaWdodAAAAAAKa2V5Vm90ZVllcwIAAAAKeWVzX2Ftb3VudAAAAAAQa2V5VXNlckVOTk9Wb3RlZAIAAAAKX0VOTk9fdm90ZQAAAAAWa2V5VXNlckVOTk9Wb3RlZEhlaWdodAIAAAARX0VOTk9fdm90ZV9oZWlnaHQAAAAAFWtleVVzZXJFTk5PVm90ZWRWYWx1ZQIAAAAQX0VOTk9fdm90ZV92YWx1ZQAAAAAYa2V5VXNlckVOTk9Wb3RlZFlFU1ZhbHVlAgAAABRfRU5OT192b3RlX3llc19zaGFyZQAAAAAQa2V5VG90YWxZZXNWb3RlZAIAAAATdG90YWxfRU5OT192b3RlX3llcwAAAAARa2V5VXNlckVOTk9Mb2NrZWQCAAAADF9FTk5PX2Ftb3VudAAAAAASa2V5VG90YWxFTk5PTG9ja2VkAgAAABF0b3RhbF9FTk5PX2Ftb3VudAAAAAAYa2V5VXNlckVOTk9DbGFpbWVkQW1vdW50AgAAABRfRU5OT19jbGFpbWVkX2Ftb3VudAAAAAAca2V5VXNlckVOTk9MYXN0Q2xhaW1lZEFtb3VudAIAAAAZX0VOTk9fbGFzdF9jbGFpbWVkX2Ftb3VudAAAAAAUa2V5VXNlckVOTk9Mb2NrZWRUYWcCAAAABnNoYXJlXwAA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T1ZvdGVkCQEAAAAPZ2V0VXNlclZvdGVEYXRhAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAABBrZXlVc2VyRU5OT1ZvdGVkBAAAAA51c2VyRU5OT0xvY2tlZAkBAAAAD2dldFVzZXJWb3RlRGF0YQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAARa2V5VXNlckVOTk9Mb2NrZWQEAAAAEHVzZXJFTk5PVm90ZWROZXcJAABkAAAAAgUAAAANdXNlckVOTk9Wb3RlZAUAAAAKdm90ZUFtb3VudAMJAABmAAAAAgAAAAAAAAAAAAUAAAAQdXNlckVOTk9Wb3RlZE5ldwkAAAIAAAABAgAAACNWb3RlIGFtb3VudCBpcyBtb3JlIHRoYW4gYXZhaWxhYmxlLgQAAAANYXZhaWxhYmxlVm90ZQkAAGUAAAACBQAAAA51c2VyRU5OT0xvY2tlZAUAAAANdXNlckVOTk9Wb3RlZAQAAAANdXNlclZvdGVWYWx1ZQkBAAAACHNldFNoYXJlAAAAAQUAAAAKdm90ZUFtb3VudAMJAABmAAAAAgUAAAAKdm90ZUFtb3VudAUAAAANYXZhaWxhYmxlVm90ZQkAAAIAAAABAgAAACNWb3RlIGFtb3VudCBpcyBtb3JlIHRoYW4gYXZhaWxhYmxlLgQAAAAVdXNlckVOTk9Wb3RlZE5ld1NoYXJlCQAAZAAAAAIFAAAADHVzZXJWb3RlZFllcwUAAAANdXNlclZvdGVWYWx1ZQQAAAAQbmV3VG90YWxZZXNWb3RlZAkAAGQAAAACBQAAAAh0b3RhbFllcwUAAAAVdXNlckVOTk9Wb3RlZE5ld1NoYXJlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABhrZXlVc2VyRU5OT1ZvdGVkWUVTVmFsdWUFAAAAFXVzZXJFTk5PVm90ZWROZXdTaGFyZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAQa2V5VXNlckVOTk9Wb3RlZAUAAAAQdXNlckVOTk9Wb3RlZE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAQa2V5VG90YWxZZXNWb3RlZAUAAAAQbmV3VG90YWxZZXNWb3RlZAUAAAADbmlsAAAAAWkBAAAACGxvY2tFTk5PAAAAAAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAQAAAALJHQwNDY3NDQ3NDkJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAAskdDA0Njc0NDc0OQAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAACyR0MDQ2NzQ0NzQ5AAAAAl8yAwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAERU5OTwkAAAIAAAABAgAAADRJbmNvcnJlY3QgcGF5bWVudCBhc3NldElkIG9ubHkgRW5ubyBDYXNoIGlzIGFsbG93ZWQuBAAAAA51c2VyRU5OT0xvY2tlZAkBAAAAEWdldFVzZXJFTk5PTG9ja2VkAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABF1c2VyRU5OT0xvY2tlZE5ldwkAAGQAAAACBQAAAA51c2VyRU5OT0xvY2tlZAUAAAAJcG10QW1vdW50BAAAAA90b3RhbEVOTk9Mb2NrZWQJAQAAABJnZXRUb3RhbEVOTk9Mb2NrZWQAAAAABAAAABJ0b3RhbEVOTk9Mb2NrZWROZXcJAABkAAAAAgUAAAAPdG90YWxFTk5PTG9ja2VkBQAAAAlwbXRBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAEWtleVVzZXJFTk5PTG9ja2VkBQAAABF1c2VyRU5OT0xvY2tlZE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAASa2V5VG90YWxFTk5PTG9ja2VkBQAAABJ0b3RhbEVOTk9Mb2NrZWROZXcFAAAAA25pbAAAAAFpAQAAAAx3aXRoZHJhd0VOTk8AAAABAAAADndpdGhkcmF3QW1vdW50AwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkAAGcAAAACAAAAAAAAAAAABQAAAA53aXRoZHJhd0Ftb3VudAkAAAIAAAABAgAAABN3aXRoZHJhd0Ftb3VudCA8PSAwBAAAAA90b3RhbEVOTk9Mb2NrZWQJAQAAABJnZXRUb3RhbEVOTk9Mb2NrZWQAAAAABAAAAA51c2VyRU5OT0xvY2tlZAkBAAAAEWdldFVzZXJFTk5PTG9ja2VkAAAAAQgFAAAAAWkAAAAGY2FsbGVyAwkAAGYAAAACBQAAAA53aXRoZHJhd0Ftb3VudAUAAAAPdG90YWxFTk5PTG9ja2VkCQAAAgAAAAECAAAAMXdpdGhkcmF3QW1vdW50IGlzIG1vcmUgdGhhbiBhdmFpbGFibGUgdG8gd2l0aGRyYXcDCQAAZgAAAAIFAAAADndpdGhkcmF3QW1vdW50BQAAAA51c2VyRU5OT0xvY2tlZAkAAAIAAAABAgAAADRZb3UgYXJlIHRyeWluZyB0byB1bnN0YWtlIG1vcmUgdGhhbiB5b3UgaGF2ZSBzdGFrZWQuBAAAABJ0b3RhbEVOTk9Mb2NrZWROZXcJAABlAAAAAgUAAAAPdG90YWxFTk5PTG9ja2VkBQAAAA53aXRoZHJhd0Ftb3VudAQAAAARdXNlckVOTk9hbW91bnROZXcJAABlAAAAAgUAAAAOdXNlckVOTk9Mb2NrZWQFAAAADndpdGhkcmF3QW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABFrZXlVc2VyRU5OT0xvY2tlZAUAAAARdXNlckVOTk9hbW91bnROZXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEmtleVRvdGFsRU5OT0xvY2tlZAUAAAASdG90YWxFTk5PTG9ja2VkTmV3CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAOd2l0aGRyYXdBbW91bnQFAAAABEVOTk8FAAAAA25pbAAAAAFpAQAAABRjbGFpbUFuZFdpdGhkcmF3RU5OTwAAAAADCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQEAAAACXVzZXJTaGFyZQkBAAAADmdldENhbGxlclNoYXJlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBAAAABF1c2VyQ2xhaW1lZEFtb3VudAkBAAAAEGdldENsYWltZWRBbW91bnQAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIEAAAAC2NsYWltQW1vdW50CQAAZQAAAAIFAAAACXVzZXJTaGFyZQUAAAARdXNlckNsYWltZWRBbW91bnQEAAAAD3RvdGFsRU5OT0xvY2tlZAkBAAAAEmdldFRvdGFsRU5OT0xvY2tlZAAAAAADCQAAZgAAAAIFAAAAC2NsYWltQW1vdW50BQAAAA90b3RhbEVOTk9Mb2NrZWQJAAACAAAAAQIAAAAuY2xhaW1BbW91bnQgaXMgbW9yZSB0aGFuIGF2YWlsYWJsZSB0byB3aXRoZHJhdwMJAABnAAAAAgAAAAAAAAAAAAUAAAALY2xhaW1BbW91bnQJAAACAAAAAQIAAAAiQ2xhaW0gYW1vdW50IG11c3QgYmUgYmlnZ2VyIHRoYW4gMAQAAAAUdXNlckNsYWltZWRBbW91bnROZXcJAABkAAAAAgUAAAARdXNlckNsYWltZWRBbW91bnQFAAAAC2NsYWltQW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBQAAABhrZXlVc2VyRU5OT0NsYWltZWRBbW91bnQFAAAAFHVzZXJDbGFpbWVkQW1vdW50TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBQAAABxrZXlVc2VyRU5OT0xhc3RDbGFpbWVkQW1vdW50BQAAAAtjbGFpbUFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIFAAAAC2NsYWltQW1vdW50BQAAAARFTk5PBQAAAANuaWwAAAABaQEAAAARY2xhaW1BbmRTdGFrZUVOTk8AAAAAAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50BAAAAAl1c2VyU2hhcmUJAQAAAA5nZXRDYWxsZXJTaGFyZQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgQAAAARdXNlckNsYWltZWRBbW91bnQJAQAAABBnZXRDbGFpbWVkQW1vdW50AAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBAAAAAtjbGFpbUFtb3VudAkAAGUAAAACBQAAAAl1c2VyU2hhcmUFAAAAEXVzZXJDbGFpbWVkQW1vdW50AwkAAGcAAAACAAAAAAAAAAAABQAAAAtjbGFpbUFtb3VudAkAAAIAAAABAgAAACJDbGFpbSBhbW91bnQgbXVzdCBiZSBiaWdnZXIgdGhhbiAwBAAAABR1c2VyQ2xhaW1lZEFtb3VudE5ldwkAAGQAAAACBQAAABF1c2VyQ2xhaW1lZEFtb3VudAUAAAALY2xhaW1BbW91bnQEAAAADnVzZXJFTk5PTG9ja2VkCQEAAAARZ2V0VXNlckVOTk9Mb2NrZWQAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIEAAAAEXVzZXJFTk5PTG9ja2VkTmV3CQAAZAAAAAIFAAAADnVzZXJFTk5PTG9ja2VkBQAAAAtjbGFpbUFtb3VudAQAAAAPdG90YWxFTk5PTG9ja2VkCQEAAAASZ2V0VG90YWxFTk5PTG9ja2VkAAAAAAQAAAASdG90YWxFTk5PTG9ja2VkTmV3CQAAZAAAAAIFAAAAD3RvdGFsRU5OT0xvY2tlZAUAAAALY2xhaW1BbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIFAAAAEWtleVVzZXJFTk5PTG9ja2VkBQAAABF1c2VyRU5OT0xvY2tlZE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgUAAAAYa2V5VXNlckVOTk9DbGFpbWVkQW1vdW50BQAAABR1c2VyQ2xhaW1lZEFtb3VudE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgUAAAAca2V5VXNlckVOTk9MYXN0Q2xhaW1lZEFtb3VudAUAAAALY2xhaW1BbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEmtleVRvdGFsRU5OT0xvY2tlZAUAAAASdG90YWxFTk5PTG9ja2VkTmV3BQAAAANuaWwAAAABaQEAAAAIc2h1dGRvd24AAAAAAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABCQABLAAAAAICAAAAIkRBcHAgaXMgYWxyZWFkeSBzdXNwZW5kZWQuIENhdXNlOiAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAIa2V5Q2F1c2UCAAAAGnRoZSBjYXVzZSB3YXNuJ3Qgc3BlY2lmaWVkAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwkABEwAAAACBQAAABRhZG1pblB1YktleVN0YXJ0U3RvcAUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQEAAAAHc3VzcGVuZAAAAAECAAAAD1BhdXNlZCBieSBhZG1pbgAAAAFpAQAAAAhhY3RpdmF0ZQAAAAADBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAABZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwkABEwAAAACBQAAABRhZG1pblB1YktleVN0YXJ0U3RvcAUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAlrZXlBY3RpdmUGCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAACGtleUNhdXNlBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAABJhZG1pblB1YktleTFTaWduZWQDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAMYWRtaW5QdWJLZXkxAAAAAAAAAAABAAAAAAAAAAAABAAAABJhZG1pblB1YktleTJTaWduZWQDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAQUAAAAMYWRtaW5QdWJLZXkyAAAAAAAAAAABAAAAAAAAAAAABAAAABJhZG1pblB1YktleTNTaWduZWQDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAgUAAAAMYWRtaW5QdWJLZXkzAAAAAAAAAAABAAAAAAAAAAAACQAAZwAAAAIJAABkAAAAAgkAAGQAAAACBQAAABJhZG1pblB1YktleTFTaWduZWQFAAAAEmFkbWluUHViS2V5MlNpZ25lZAUAAAASYWRtaW5QdWJLZXkzU2lnbmVkAAAAAAAAAAACnKgR4w==", "height": 1783264, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3HnUh8ntpaoWexXQJ6Df9NTGZSBHmph5usMR3R3p2peJ Next: 641TTH9Y9VbZBCMbcXjn6UNfKYhMqos6Z6WTci6F1qUQ Diff:
OldNewDifferences
3232 let keyUserENNOLocked = "_ENNO_amount"
3333
3434 let keyTotalENNOLocked = "total_ENNO_amount"
35-
36-let keyTotalVoted = "total_ENNO_vote"
3735
3836 let keyUserENNOClaimedAmount = "_ENNO_claimed_amount"
3937
10098 @Callable(i)
10199 func claimAirdrop () = if (!(isActive))
102100 then throw("DApp is inactive at this moment")
103- else [DeleteEntry((toString(i.caller) + keyUserENNOVotedYESValue)), DeleteEntry((toString(i.caller) + keyUserENNOVoted))]
101+ else [DeleteEntry((toString(i.caller) + keyUserENNOVotedYESValue)), DeleteEntry((toString(i.caller) + keyUserENNOVoted)), DeleteEntry("total_ENNO_vote")]
104102
105103
106104
107105 @Callable(i)
108106 func initVote (start,end) = if (!(isActive))
109107 then throw("DApp is inactive at this moment")
110- else [IntegerEntry(keyVoteStart, start), IntegerEntry(keyVoteEnd, end), IntegerEntry(keyTotalVoted, 0), IntegerEntry(keyTotalYesVoted, 0)]
108+ else [IntegerEntry(keyVoteStart, start), IntegerEntry(keyVoteEnd, end), IntegerEntry(keyTotalYesVoted, 0)]
111109
112110
113111
134132 else {
135133 let userENNOVotedNewShare = (userVotedYes + userVoteValue)
136134 let newTotalYesVoted = (totalYes + userENNOVotedNewShare)
137- let totalENNOVoted = getVal(keyTotalVoted)
138- let totalENNOVotedNew = (totalENNOVoted + userVoteValue)
139-[IntegerEntry((toString(i.caller) + keyUserENNOVotedYESValue), userENNOVotedNewShare), IntegerEntry((toString(i.caller) + keyUserENNOVoted), userENNOVotedNew), IntegerEntry(keyTotalVoted, totalENNOVotedNew), IntegerEntry(keyTotalYesVoted, newTotalYesVoted)]
135+[IntegerEntry((toString(i.caller) + keyUserENNOVotedYESValue), userENNOVotedNewShare), IntegerEntry((toString(i.caller) + keyUserENNOVoted), userENNOVotedNew), IntegerEntry(keyTotalYesVoted, newTotalYesVoted)]
140136 }
141137 }
142138 }
147143 func lockENNO () = if (!(isActive))
148144 then throw("DApp is inactive at this moment")
149145 else {
150- let $t049685043 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
151- let pmtAmount = $t049685043._1
152- let pmtAssetId = $t049685043._2
146+ let $t046744749 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
147+ let pmtAmount = $t046744749._1
148+ let pmtAssetId = $t046744749._2
153149 if ((pmtAssetId != ENNO))
154150 then throw("Incorrect payment assetId only Enno Cash is allowed.")
155151 else {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let adminPubKey1 = base58'9NPkhjF6pssidKGhnMzHn9auzo5q5fPBaabRQBx7CaFq'
55
66 let adminPubKey2 = base58'9NPkhjF6pssidKGhnMzHn9auzo5q5fPBaabRQBx7CaFq'
77
88 let adminPubKey3 = base58'9NPkhjF6pssidKGhnMzHn9auzo5q5fPBaabRQBx7CaFq'
99
1010 let adminPubKeyStartStop = base58'9NPkhjF6pssidKGhnMzHn9auzo5q5fPBaabRQBx7CaFq'
1111
1212 let keyActive = "active"
1313
1414 let keyCause = "shutdown_cause"
1515
1616 let keyVoteStart = "vote_start_height"
1717
1818 let keyVoteEnd = "vote_end_height"
1919
2020 let keyVoteYes = "yes_amount"
2121
2222 let keyUserENNOVoted = "_ENNO_vote"
2323
2424 let keyUserENNOVotedHeight = "_ENNO_vote_height"
2525
2626 let keyUserENNOVotedValue = "_ENNO_vote_value"
2727
2828 let keyUserENNOVotedYESValue = "_ENNO_vote_yes_share"
2929
3030 let keyTotalYesVoted = "total_ENNO_vote_yes"
3131
3232 let keyUserENNOLocked = "_ENNO_amount"
3333
3434 let keyTotalENNOLocked = "total_ENNO_amount"
35-
36-let keyTotalVoted = "total_ENNO_vote"
3735
3836 let keyUserENNOClaimedAmount = "_ENNO_claimed_amount"
3937
4038 let keyUserENNOLastClaimedAmount = "_ENNO_last_claimed_amount"
4139
4240 let keyUserENNOLockedTag = "share_"
4341
4442 let isActive = valueOrElse(getBoolean(this, keyActive), true)
4543
4644 let shareData = base58'9NPkhjF6pssidKGhnMzHn9auzo5q5fPBaabRQBx7CaFq'
4745
4846 let ENNO = base58'6TmLfry3GRQoVSaesGSnp6NtZKveYgEopTLsjaGgXoso'
4947
5048 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
5149
5250
5351 func getUserENNOLocked (user) = valueOrElse(getInteger(this, (toString(user) + keyUserENNOLocked)), 0)
5452
5553
5654 func getTotalENNOLocked () = valueOrElse(getInteger(this, keyTotalENNOLocked), 0)
5755
5856
5957 func getUserVoteData (user,key) = valueOrElse(getInteger(this, (toString(user) + key)), 0)
6058
6159
6260 func getVal (key) = valueOrElse(getInteger(this, key), 0)
6361
6462
6563 func getCallerShare (caller) = {
6664 let callerShare = getInteger(addressFromPublicKey(shareData), (keyUserENNOLockedTag + toString(caller)))
6765 let callerShareAmount = match callerShare {
6866 case share: Int =>
6967 share
7068 case share: Unit =>
7169 throw("Only governance qualifiers can call this function.")
7270 case _ =>
7371 throw("Match error")
7472 }
7573 callerShareAmount
7674 }
7775
7876
7977 func getClaimedAmount (caller) = {
8078 let callerWithdrawn = getInteger(this, (toString(caller) + keyUserENNOClaimedAmount))
8179 let callerWithdrawnAmount = match callerWithdrawn {
8280 case share: Int =>
8381 share
8482 case share: Unit =>
8583 0
8684 case _ =>
8785 throw("Match error")
8886 }
8987 callerWithdrawnAmount
9088 }
9189
9290
9391 func setShare (amount) = {
9492 let deltaHeight = (getVal(keyVoteEnd) - height)
9593 let share = fraction(amount, deltaHeight, 100000000)
9694 share
9795 }
9896
9997
10098 @Callable(i)
10199 func claimAirdrop () = if (!(isActive))
102100 then throw("DApp is inactive at this moment")
103- else [DeleteEntry((toString(i.caller) + keyUserENNOVotedYESValue)), DeleteEntry((toString(i.caller) + keyUserENNOVoted))]
101+ else [DeleteEntry((toString(i.caller) + keyUserENNOVotedYESValue)), DeleteEntry((toString(i.caller) + keyUserENNOVoted)), DeleteEntry("total_ENNO_vote")]
104102
105103
106104
107105 @Callable(i)
108106 func initVote (start,end) = if (!(isActive))
109107 then throw("DApp is inactive at this moment")
110- else [IntegerEntry(keyVoteStart, start), IntegerEntry(keyVoteEnd, end), IntegerEntry(keyTotalVoted, 0), IntegerEntry(keyTotalYesVoted, 0)]
108+ else [IntegerEntry(keyVoteStart, start), IntegerEntry(keyVoteEnd, end), IntegerEntry(keyTotalYesVoted, 0)]
111109
112110
113111
114112 @Callable(i)
115113 func vote (voteAmount) = if (!(isActive))
116114 then throw("DApp is inactive at this moment")
117115 else if ((getVal(keyVoteStart) > height))
118116 then throw("Voting has not started yet.")
119117 else if ((height > getVal(keyVoteEnd)))
120118 then throw("Voting has already ended.")
121119 else {
122120 let totalYes = getVal(keyTotalYesVoted)
123121 let userVotedYes = getUserVoteData(i.caller, keyUserENNOVotedYESValue)
124122 let userENNOVoted = getUserVoteData(i.caller, keyUserENNOVoted)
125123 let userENNOLocked = getUserVoteData(i.caller, keyUserENNOLocked)
126124 let userENNOVotedNew = (userENNOVoted + voteAmount)
127125 if ((0 > userENNOVotedNew))
128126 then throw("Vote amount is more than available.")
129127 else {
130128 let availableVote = (userENNOLocked - userENNOVoted)
131129 let userVoteValue = setShare(voteAmount)
132130 if ((voteAmount > availableVote))
133131 then throw("Vote amount is more than available.")
134132 else {
135133 let userENNOVotedNewShare = (userVotedYes + userVoteValue)
136134 let newTotalYesVoted = (totalYes + userENNOVotedNewShare)
137- let totalENNOVoted = getVal(keyTotalVoted)
138- let totalENNOVotedNew = (totalENNOVoted + userVoteValue)
139-[IntegerEntry((toString(i.caller) + keyUserENNOVotedYESValue), userENNOVotedNewShare), IntegerEntry((toString(i.caller) + keyUserENNOVoted), userENNOVotedNew), IntegerEntry(keyTotalVoted, totalENNOVotedNew), IntegerEntry(keyTotalYesVoted, newTotalYesVoted)]
135+[IntegerEntry((toString(i.caller) + keyUserENNOVotedYESValue), userENNOVotedNewShare), IntegerEntry((toString(i.caller) + keyUserENNOVoted), userENNOVotedNew), IntegerEntry(keyTotalYesVoted, newTotalYesVoted)]
140136 }
141137 }
142138 }
143139
144140
145141
146142 @Callable(i)
147143 func lockENNO () = if (!(isActive))
148144 then throw("DApp is inactive at this moment")
149145 else {
150- let $t049685043 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
151- let pmtAmount = $t049685043._1
152- let pmtAssetId = $t049685043._2
146+ let $t046744749 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
147+ let pmtAmount = $t046744749._1
148+ let pmtAssetId = $t046744749._2
153149 if ((pmtAssetId != ENNO))
154150 then throw("Incorrect payment assetId only Enno Cash is allowed.")
155151 else {
156152 let userENNOLocked = getUserENNOLocked(i.caller)
157153 let userENNOLockedNew = (userENNOLocked + pmtAmount)
158154 let totalENNOLocked = getTotalENNOLocked()
159155 let totalENNOLockedNew = (totalENNOLocked + pmtAmount)
160156 [IntegerEntry((toString(i.caller) + keyUserENNOLocked), userENNOLockedNew), IntegerEntry(keyTotalENNOLocked, totalENNOLockedNew)]
161157 }
162158 }
163159
164160
165161
166162 @Callable(i)
167163 func withdrawENNO (withdrawAmount) = if (!(isActive))
168164 then throw("DApp is inactive at this moment")
169165 else if ((0 >= withdrawAmount))
170166 then throw("withdrawAmount <= 0")
171167 else {
172168 let totalENNOLocked = getTotalENNOLocked()
173169 let userENNOLocked = getUserENNOLocked(i.caller)
174170 if ((withdrawAmount > totalENNOLocked))
175171 then throw("withdrawAmount is more than available to withdraw")
176172 else if ((withdrawAmount > userENNOLocked))
177173 then throw("You are trying to unstake more than you have staked.")
178174 else {
179175 let totalENNOLockedNew = (totalENNOLocked - withdrawAmount)
180176 let userENNOamountNew = (userENNOLocked - withdrawAmount)
181177 [IntegerEntry((toString(i.caller) + keyUserENNOLocked), userENNOamountNew), IntegerEntry(keyTotalENNOLocked, totalENNOLockedNew), ScriptTransfer(i.caller, withdrawAmount, ENNO)]
182178 }
183179 }
184180
185181
186182
187183 @Callable(i)
188184 func claimAndWithdrawENNO () = if (!(isActive))
189185 then throw("DApp is inactive at this moment")
190186 else {
191187 let userShare = getCallerShare(i.originCaller)
192188 let userClaimedAmount = getClaimedAmount(i.originCaller)
193189 let claimAmount = (userShare - userClaimedAmount)
194190 let totalENNOLocked = getTotalENNOLocked()
195191 if ((claimAmount > totalENNOLocked))
196192 then throw("claimAmount is more than available to withdraw")
197193 else if ((0 >= claimAmount))
198194 then throw("Claim amount must be bigger than 0")
199195 else {
200196 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
201197 [IntegerEntry((toString(i.originCaller) + keyUserENNOClaimedAmount), userClaimedAmountNew), IntegerEntry((toString(i.originCaller) + keyUserENNOLastClaimedAmount), claimAmount), ScriptTransfer(i.originCaller, claimAmount, ENNO)]
202198 }
203199 }
204200
205201
206202
207203 @Callable(i)
208204 func claimAndStakeENNO () = if (!(isActive))
209205 then throw("DApp is inactive at this moment")
210206 else {
211207 let userShare = getCallerShare(i.originCaller)
212208 let userClaimedAmount = getClaimedAmount(i.originCaller)
213209 let claimAmount = (userShare - userClaimedAmount)
214210 if ((0 >= claimAmount))
215211 then throw("Claim amount must be bigger than 0")
216212 else {
217213 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
218214 let userENNOLocked = getUserENNOLocked(i.originCaller)
219215 let userENNOLockedNew = (userENNOLocked + claimAmount)
220216 let totalENNOLocked = getTotalENNOLocked()
221217 let totalENNOLockedNew = (totalENNOLocked + claimAmount)
222218 [IntegerEntry((toString(i.originCaller) + keyUserENNOLocked), userENNOLockedNew), IntegerEntry((toString(i.originCaller) + keyUserENNOClaimedAmount), userClaimedAmountNew), IntegerEntry((toString(i.originCaller) + keyUserENNOLastClaimedAmount), claimAmount), IntegerEntry(keyTotalENNOLocked, totalENNOLockedNew)]
223219 }
224220 }
225221
226222
227223
228224 @Callable(i)
229225 func shutdown () = if (!(isActive))
230226 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
231227 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
232228 then throw("Only admin can call this function")
233229 else suspend("Paused by admin")
234230
235231
236232
237233 @Callable(i)
238234 func activate () = if (isActive)
239235 then throw("DApp is already active")
240236 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
241237 then throw("Only admin can call this function")
242238 else [BooleanEntry(keyActive, true), DeleteEntry(keyCause)]
243239
244240
245241 @Verifier(tx)
246242 func verify () = {
247243 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
248244 then 1
249245 else 0
250246 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
251247 then 1
252248 else 0
253249 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
254250 then 1
255251 else 0
256252 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
257253 }
258254

github/deemru/w8io/873ac7e 
50.83 ms