tx · A2KPHrUzY5kKT43doKejafVX4BEp6akvvb5zJ8cATxuF

3N5qejBhCedYyTbK7Qgqxn2T6kubSeHt7pu:  -0.14000000 Waves

2021.10.27 13:59 [1764611] smart account 3N5qejBhCedYyTbK7Qgqxn2T6kubSeHt7pu > SELF 0.00000000 Waves

{ "type": 13, "id": "A2KPHrUzY5kKT43doKejafVX4BEp6akvvb5zJ8cATxuF", "fee": 14000000, "feeAssetId": null, "timestamp": 1635332371903, "version": 2, "chainId": 84, "sender": "3N5qejBhCedYyTbK7Qgqxn2T6kubSeHt7pu", "senderPublicKey": "Ese6jz6mtrhgwJWdXbAxHNHg2qzae5D2xXWuVF7tLfs8", "proofs": [ "2yBPWUGQYbwWDKAXHS57WMFXm5P2gdfsiPPpTCj9A6hh9k62zJWmoh5W41Ank9X1JQQRjqqXr8xQWe42YYB99CWc", "3ocggKfY8G59WEezSfPUNGyuELuVZ46w9qvhDHtmBBgGgoHhydFwGABoiwjeLZCBp9MZk3r6qJuArQj2JCM3UkQu" ], "script": "base64:AAIFAAAAAAAAABEIAhIAEgMKAQESABIAEgASAAAAABMAAAAADGFkbWluUHViS2V5MQEAAAAgziDrH6xfwdIN/6jc9LbpeFKW8n6DL11Crgzyd6TZbxsAAAAADGFkbWluUHViS2V5MgEAAAAgziDrH6xfwdIN/6jc9LbpeFKW8n6DL11Crgzyd6TZbxsAAAAADGFkbWluUHViS2V5MwEAAAAgziDrH6xfwdIN/6jc9LbpeFKW8n6DL11Crgzyd6TZbxsAAAAAFGFkbWluUHViS2V5U3RhcnRTdG9wAQAAACDOIOsfrF/B0g3/qNz0tul4UpbyfoMvXUKuDPJ3pNlvGwAAAAAJa2V5QWN0aXZlAgAAAAZhY3RpdmUAAAAACGtleUNhdXNlAgAAAA5zaHV0ZG93bl9jYXVzZQAAAAARa2V5VXNlckVOTk9Mb2NrZWQCAAAADF9FTk5PX2Ftb3VudAAAAAASa2V5VG90YWxFTk5PTG9ja2VkAgAAABF0b3RhbF9FTk5PX2Ftb3VudAAAAAAYa2V5VXNlckVOTk9DbGFpbWVkQW1vdW50AgAAABRfRU5OT19jbGFpbWVkX2Ftb3VudAAAAAAca2V5VXNlckVOTk9MYXN0Q2xhaW1lZEFtb3VudAIAAAAZX0VOTk9fbGFzdF9jbGFpbWVkX2Ftb3VudAAAAAAUa2V5VXNlckVOTk9Mb2NrZWRUYWcCAAAABnNoYXJlXwAAAAAIaXNBY3RpdmUJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAAJa2V5QWN0aXZlBgAAAAAJc2hhcmVEYXRhAQAAACBbQ+QzUMC1aF2T3qieo6NeRn/NixQZhgbin5TRqlXoWQAAAAAERU5OTwEAAAAgFbvcV9OA6rL+53m/DeV6nxGYIu+IXr9brrnP32tIN3ABAAAAB3N1c3BlbmQAAAABAAAABWNhdXNlCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAlrZXlBY3RpdmUHCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACGtleUNhdXNlBQAAAAVjYXVzZQUAAAADbmlsAQAAABFnZXRVc2VyRU5OT0xvY2tlZAAAAAEAAAAEdXNlcgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAQlAAAAAQUAAAAEdXNlcgUAAAARa2V5VXNlckVOTk9Mb2NrZWQAAAAAAAAAAAABAAAAEmdldFRvdGFsRU5OT0xvY2tlZAAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAASa2V5VG90YWxFTk5PTG9ja2VkAAAAAAAAAAAAAQAAAA5nZXRDYWxsZXJTaGFyZQAAAAEAAAAGY2FsbGVyBAAAAAtjYWxsZXJTaGFyZQkABBoAAAACCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAAlzaGFyZURhdGEJAAEsAAAAAgUAAAAUa2V5VXNlckVOTk9Mb2NrZWRUYWcJAAQlAAAAAQUAAAAGY2FsbGVyBAAAABFjYWxsZXJTaGFyZUFtb3VudAQAAAAHJG1hdGNoMAUAAAALY2FsbGVyU2hhcmUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAFc2hhcmUFAAAAByRtYXRjaDAFAAAABXNoYXJlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAVzaGFyZQUAAAAHJG1hdGNoMAkAAAIAAAABAgAAADJPbmx5IGdvdmVybmFuY2UgcXVhbGlmaWVycyBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uLgkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgUAAAARY2FsbGVyU2hhcmVBbW91bnQBAAAAEGdldENsYWltZWRBbW91bnQAAAABAAAABmNhbGxlcgQAAAAPY2FsbGVyV2l0aGRyYXduCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkABCUAAAABBQAAAAZjYWxsZXIFAAAAGGtleVVzZXJFTk5PQ2xhaW1lZEFtb3VudAQAAAAVY2FsbGVyV2l0aGRyYXduQW1vdW50BAAAAAckbWF0Y2gwBQAAAA9jYWxsZXJXaXRoZHJhd24DCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAFc2hhcmUFAAAAByRtYXRjaDAFAAAABXNoYXJlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAVzaGFyZQUAAAAHJG1hdGNoMAAAAAAAAAAAAAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgUAAAAVY2FsbGVyV2l0aGRyYXduQW1vdW50AAAABgAAAAFpAQAAAAhsb2NrRU5OTwAAAAADCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQEAAAACyR0MDE4OTMxOTY4CQAFFAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAJcG10QW1vdW50CAUAAAALJHQwMTg5MzE5NjgAAAACXzEEAAAACnBtdEFzc2V0SWQIBQAAAAskdDAxODkzMTk2OAAAAAJfMgMJAQAAAAIhPQAAAAIFAAAACnBtdEFzc2V0SWQFAAAABEVOTk8JAAACAAAAAQIAAAAUSW5jb3JyZWN0IHBtdEFzc2V0SWQEAAAADnVzZXJFTk5PTG9ja2VkCQEAAAARZ2V0VXNlckVOTk9Mb2NrZWQAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIEAAAAEXVzZXJFTk5PTG9ja2VkTmV3CQAAZAAAAAIFAAAADnVzZXJFTk5PTG9ja2VkBQAAAAlwbXRBbW91bnQEAAAAD3RvdGFsRU5OT0xvY2tlZAkBAAAAEmdldFRvdGFsRU5OT0xvY2tlZAAAAAAEAAAAEnRvdGFsRU5OT0xvY2tlZE5ldwkAAGQAAAACBQAAAA90b3RhbEVOTk9Mb2NrZWQFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgUAAAARa2V5VXNlckVOTk9Mb2NrZWQFAAAAEXVzZXJFTk5PTG9ja2VkTmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJrZXlUb3RhbEVOTk9Mb2NrZWQFAAAAEnRvdGFsRU5OT0xvY2tlZE5ldwUAAAADbmlsAAAAAWkBAAAADHdpdGhkcmF3RU5OTwAAAAEAAAAOd2l0aGRyYXdBbW91bnQDCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDCQAAZwAAAAIAAAAAAAAAAAAFAAAADndpdGhkcmF3QW1vdW50CQAAAgAAAAECAAAAE3dpdGhkcmF3QW1vdW50IDw9IDAEAAAAD3RvdGFsRU5OT0xvY2tlZAkBAAAAEmdldFRvdGFsRU5OT0xvY2tlZAAAAAAEAAAADnVzZXJFTk5PTG9ja2VkCQEAAAARZ2V0VXNlckVOTk9Mb2NrZWQAAAABCAUAAAABaQAAAAZjYWxsZXIDCQAAZgAAAAIFAAAADndpdGhkcmF3QW1vdW50BQAAAA51c2VyRU5OT0xvY2tlZAkAAAIAAAABAgAAACN3aXRoZHJhd0Ftb3VudCA+IGF2YWlsYWJsZVRvVW5zdGFrZQQAAAASdG90YWxFTk5PTG9ja2VkTmV3CQAAZQAAAAIFAAAAD3RvdGFsRU5OT0xvY2tlZAUAAAAOd2l0aGRyYXdBbW91bnQEAAAAEXVzZXJFTk5PYW1vdW50TmV3CQAAZQAAAAIFAAAADnVzZXJFTk5PTG9ja2VkBQAAAA53aXRoZHJhd0Ftb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAARa2V5VXNlckVOTk9Mb2NrZWQFAAAAEXVzZXJFTk5PYW1vdW50TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJrZXlUb3RhbEVOTk9Mb2NrZWQFAAAAEnRvdGFsRU5OT0xvY2tlZE5ldwkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADndpdGhkcmF3QW1vdW50BQAAAARFTk5PBQAAAANuaWwAAAABaQEAAAAUY2xhaW1BbmRXaXRoZHJhd0VOTk8AAAAAAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50BAAAAAl1c2VyU2hhcmUJAQAAAA5nZXRDYWxsZXJTaGFyZQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAARdXNlckNsYWltZWRBbW91bnQJAQAAABBnZXRDbGFpbWVkQW1vdW50AAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAtjbGFpbUFtb3VudAkAAGUAAAACBQAAAAl1c2VyU2hhcmUFAAAAEXVzZXJDbGFpbWVkQW1vdW50AwkAAGcAAAACAAAAAAAAAAAABQAAAAtjbGFpbUFtb3VudAkAAAIAAAABAgAAACJDbGFpbSBhbW91bnQgbXVzdCBiZSBiaWdnZXIgdGhhbiAwBAAAABR1c2VyQ2xhaW1lZEFtb3VudE5ldwkAAGQAAAACBQAAABF1c2VyQ2xhaW1lZEFtb3VudAUAAAALY2xhaW1BbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAtjbGFpbUFtb3VudAUAAAAERU5OTwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAYa2V5VXNlckVOTk9DbGFpbWVkQW1vdW50BQAAABR1c2VyQ2xhaW1lZEFtb3VudE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAca2V5VXNlckVOTk9MYXN0Q2xhaW1lZEFtb3VudAUAAAALY2xhaW1BbW91bnQFAAAAA25pbAAAAAFpAQAAABFjbGFpbUFuZFN0YWtlRU5OTwAAAAADCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQEAAAACXVzZXJTaGFyZQkBAAAADmdldENhbGxlclNoYXJlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABF1c2VyQ2xhaW1lZEFtb3VudAkBAAAAEGdldENsYWltZWRBbW91bnQAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAC2NsYWltQW1vdW50CQAAZQAAAAIFAAAACXVzZXJTaGFyZQUAAAARdXNlckNsYWltZWRBbW91bnQDCQAAZwAAAAIAAAAAAAAAAAAFAAAAC2NsYWltQW1vdW50CQAAAgAAAAECAAAAIkNsYWltIGFtb3VudCBtdXN0IGJlIGJpZ2dlciB0aGFuIDAEAAAAFHVzZXJDbGFpbWVkQW1vdW50TmV3CQAAZAAAAAIFAAAAEXVzZXJDbGFpbWVkQW1vdW50BQAAAAtjbGFpbUFtb3VudAQAAAAOdXNlckVOTk9Mb2NrZWQJAQAAABFnZXRVc2VyRU5OT0xvY2tlZAAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAARdXNlckVOTk9Mb2NrZWROZXcJAABkAAAAAgUAAAAOdXNlckVOTk9Mb2NrZWQFAAAAC2NsYWltQW1vdW50BAAAAA90b3RhbEVOTk9Mb2NrZWQJAQAAABJnZXRUb3RhbEVOTk9Mb2NrZWQAAAAABAAAABJ0b3RhbEVOTk9Mb2NrZWROZXcJAABkAAAAAgUAAAAPdG90YWxFTk5PTG9ja2VkBQAAAAtjbGFpbUFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAARa2V5VXNlckVOTk9Mb2NrZWQFAAAAEXVzZXJFTk5PTG9ja2VkTmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJrZXlUb3RhbEVOTk9Mb2NrZWQFAAAAEnRvdGFsRU5OT0xvY2tlZE5ldwUAAAADbmlsAAAAAWkBAAAACHNodXRkb3duAAAAAAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQkAASwAAAACAgAAACJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAACGtleUNhdXNlAgAAABp0aGUgY2F1c2Ugd2Fzbid0IHNwZWNpZmllZAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAAUYWRtaW5QdWJLZXlTdGFydFN0b3AFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkBAAAAB3N1c3BlbmQAAAABAgAAAA9QYXVzZWQgYnkgYWRtaW4AAAABaQEAAAAIYWN0aXZhdGUAAAAAAwUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAAUYWRtaW5QdWJLZXlTdGFydFN0b3AFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAJa2V5QWN0aXZlBgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAhrZXlDYXVzZQUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAASYWRtaW5QdWJLZXkxU2lnbmVkAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAADGFkbWluUHViS2V5MQAAAAAAAAAAAQAAAAAAAAAAAAQAAAASYWRtaW5QdWJLZXkyU2lnbmVkAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAEFAAAADGFkbWluUHViS2V5MgAAAAAAAAAAAQAAAAAAAAAAAAQAAAASYWRtaW5QdWJLZXkzU2lnbmVkAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAIFAAAADGFkbWluUHViS2V5MwAAAAAAAAAAAQAAAAAAAAAAAAkAAGcAAAACCQAAZAAAAAIJAABkAAAAAgUAAAASYWRtaW5QdWJLZXkxU2lnbmVkBQAAABJhZG1pblB1YktleTJTaWduZWQFAAAAEmFkbWluUHViS2V5M1NpZ25lZAAAAAAAAAAAAhL4RxY=", "height": 1764611, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HgCWcPF9xikzzS5dZ1QfdJDYskbR18vpt6sozTaRCoHS Next: GbznBGgfwacLpZXqqXWdoGfd3AAYrbt9pXZi4BiPhecs Diff:
OldNewDifferences
1717
1818 let keyTotalENNOLocked = "total_ENNO_amount"
1919
20+let keyUserENNOClaimedAmount = "_ENNO_claimed_amount"
21+
22+let keyUserENNOLastClaimedAmount = "_ENNO_last_claimed_amount"
23+
24+let keyUserENNOLockedTag = "share_"
25+
2026 let isActive = valueOrElse(getBoolean(this, keyActive), true)
27+
28+let shareData = base58'79G9MRTWPsir5gThDeuicpBuQxx8UFNqVaDUYcRfWtPA'
2129
2230 let ENNO = base58'2Tqhz5PWbkijnzYpdLxLDFfVDw5ALQWm2rmxQ79ooMRZ'
2331
3038 func getTotalENNOLocked () = valueOrElse(getInteger(this, keyTotalENNOLocked), 0)
3139
3240
41+func getCallerShare (caller) = {
42+ let callerShare = getInteger(addressFromPublicKey(shareData), (keyUserENNOLockedTag + toString(caller)))
43+ let callerShareAmount = match callerShare {
44+ case share: Int =>
45+ share
46+ case share: Unit =>
47+ throw("Only governance qualifiers can call this function.")
48+ case _ =>
49+ throw("Match error")
50+ }
51+ callerShareAmount
52+ }
53+
54+
55+func getClaimedAmount (caller) = {
56+ let callerWithdrawn = getInteger(this, (toString(caller) + keyUserENNOClaimedAmount))
57+ let callerWithdrawnAmount = match callerWithdrawn {
58+ case share: Int =>
59+ share
60+ case share: Unit =>
61+ 0
62+ case _ =>
63+ throw("Match error")
64+ }
65+ callerWithdrawnAmount
66+ }
67+
68+
3369 @Callable(i)
3470 func lockENNO () = if (!(isActive))
3571 then throw("DApp is inactive at this moment")
3672 else {
37- let $t010381113 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
38- let pmtAmount = $t010381113._1
39- let pmtAssetId = $t010381113._2
73+ let $t018931968 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
74+ let pmtAmount = $t018931968._1
75+ let pmtAssetId = $t018931968._2
4076 if ((pmtAssetId != ENNO))
4177 then throw("Incorrect pmtAssetId")
4278 else {
66102 [IntegerEntry((toString(i.caller) + keyUserENNOLocked), userENNOamountNew), IntegerEntry(keyTotalENNOLocked, totalENNOLockedNew), ScriptTransfer(i.caller, withdrawAmount, ENNO)]
67103 }
68104 }
105+
106+
107+
108+@Callable(i)
109+func claimAndWithdrawENNO () = if (!(isActive))
110+ then throw("DApp is inactive at this moment")
111+ else {
112+ let userShare = getCallerShare(i.caller)
113+ let userClaimedAmount = getClaimedAmount(i.caller)
114+ let claimAmount = (userShare - userClaimedAmount)
115+ if ((0 >= claimAmount))
116+ then throw("Claim amount must be bigger than 0")
117+ else {
118+ let userClaimedAmountNew = (userClaimedAmount + claimAmount)
119+[ScriptTransfer(i.caller, claimAmount, ENNO), IntegerEntry((toString(i.caller) + keyUserENNOClaimedAmount), userClaimedAmountNew), IntegerEntry((toString(i.caller) + keyUserENNOLastClaimedAmount), claimAmount)]
120+ }
121+ }
122+
123+
124+
125+@Callable(i)
126+func claimAndStakeENNO () = if (!(isActive))
127+ then throw("DApp is inactive at this moment")
128+ else {
129+ let userShare = getCallerShare(i.caller)
130+ let userClaimedAmount = getClaimedAmount(i.caller)
131+ let claimAmount = (userShare - userClaimedAmount)
132+ if ((0 >= claimAmount))
133+ then throw("Claim amount must be bigger than 0")
134+ else {
135+ let userClaimedAmountNew = (userClaimedAmount + claimAmount)
136+ let userENNOLocked = getUserENNOLocked(i.caller)
137+ let userENNOLockedNew = (userENNOLocked + claimAmount)
138+ let totalENNOLocked = getTotalENNOLocked()
139+ let totalENNOLockedNew = (totalENNOLocked + claimAmount)
140+[IntegerEntry((toString(i.caller) + keyUserENNOLocked), userENNOLockedNew), IntegerEntry(keyTotalENNOLocked, totalENNOLockedNew)]
141+ }
142+ }
69143
70144
71145
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let adminPubKey1 = base58'Ese6jz6mtrhgwJWdXbAxHNHg2qzae5D2xXWuVF7tLfs8'
55
66 let adminPubKey2 = base58'Ese6jz6mtrhgwJWdXbAxHNHg2qzae5D2xXWuVF7tLfs8'
77
88 let adminPubKey3 = base58'Ese6jz6mtrhgwJWdXbAxHNHg2qzae5D2xXWuVF7tLfs8'
99
1010 let adminPubKeyStartStop = base58'Ese6jz6mtrhgwJWdXbAxHNHg2qzae5D2xXWuVF7tLfs8'
1111
1212 let keyActive = "active"
1313
1414 let keyCause = "shutdown_cause"
1515
1616 let keyUserENNOLocked = "_ENNO_amount"
1717
1818 let keyTotalENNOLocked = "total_ENNO_amount"
1919
20+let keyUserENNOClaimedAmount = "_ENNO_claimed_amount"
21+
22+let keyUserENNOLastClaimedAmount = "_ENNO_last_claimed_amount"
23+
24+let keyUserENNOLockedTag = "share_"
25+
2026 let isActive = valueOrElse(getBoolean(this, keyActive), true)
27+
28+let shareData = base58'79G9MRTWPsir5gThDeuicpBuQxx8UFNqVaDUYcRfWtPA'
2129
2230 let ENNO = base58'2Tqhz5PWbkijnzYpdLxLDFfVDw5ALQWm2rmxQ79ooMRZ'
2331
2432 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
2533
2634
2735 func getUserENNOLocked (user) = valueOrElse(getInteger(this, (toString(user) + keyUserENNOLocked)), 0)
2836
2937
3038 func getTotalENNOLocked () = valueOrElse(getInteger(this, keyTotalENNOLocked), 0)
3139
3240
41+func getCallerShare (caller) = {
42+ let callerShare = getInteger(addressFromPublicKey(shareData), (keyUserENNOLockedTag + toString(caller)))
43+ let callerShareAmount = match callerShare {
44+ case share: Int =>
45+ share
46+ case share: Unit =>
47+ throw("Only governance qualifiers can call this function.")
48+ case _ =>
49+ throw("Match error")
50+ }
51+ callerShareAmount
52+ }
53+
54+
55+func getClaimedAmount (caller) = {
56+ let callerWithdrawn = getInteger(this, (toString(caller) + keyUserENNOClaimedAmount))
57+ let callerWithdrawnAmount = match callerWithdrawn {
58+ case share: Int =>
59+ share
60+ case share: Unit =>
61+ 0
62+ case _ =>
63+ throw("Match error")
64+ }
65+ callerWithdrawnAmount
66+ }
67+
68+
3369 @Callable(i)
3470 func lockENNO () = if (!(isActive))
3571 then throw("DApp is inactive at this moment")
3672 else {
37- let $t010381113 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
38- let pmtAmount = $t010381113._1
39- let pmtAssetId = $t010381113._2
73+ let $t018931968 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
74+ let pmtAmount = $t018931968._1
75+ let pmtAssetId = $t018931968._2
4076 if ((pmtAssetId != ENNO))
4177 then throw("Incorrect pmtAssetId")
4278 else {
4379 let userENNOLocked = getUserENNOLocked(i.originCaller)
4480 let userENNOLockedNew = (userENNOLocked + pmtAmount)
4581 let totalENNOLocked = getTotalENNOLocked()
4682 let totalENNOLockedNew = (totalENNOLocked + pmtAmount)
4783 [IntegerEntry((toString(i.originCaller) + keyUserENNOLocked), userENNOLockedNew), IntegerEntry(keyTotalENNOLocked, totalENNOLockedNew)]
4884 }
4985 }
5086
5187
5288
5389 @Callable(i)
5490 func withdrawENNO (withdrawAmount) = if (!(isActive))
5591 then throw("DApp is inactive at this moment")
5692 else if ((0 >= withdrawAmount))
5793 then throw("withdrawAmount <= 0")
5894 else {
5995 let totalENNOLocked = getTotalENNOLocked()
6096 let userENNOLocked = getUserENNOLocked(i.caller)
6197 if ((withdrawAmount > userENNOLocked))
6298 then throw("withdrawAmount > availableToUnstake")
6399 else {
64100 let totalENNOLockedNew = (totalENNOLocked - withdrawAmount)
65101 let userENNOamountNew = (userENNOLocked - withdrawAmount)
66102 [IntegerEntry((toString(i.caller) + keyUserENNOLocked), userENNOamountNew), IntegerEntry(keyTotalENNOLocked, totalENNOLockedNew), ScriptTransfer(i.caller, withdrawAmount, ENNO)]
67103 }
68104 }
105+
106+
107+
108+@Callable(i)
109+func claimAndWithdrawENNO () = if (!(isActive))
110+ then throw("DApp is inactive at this moment")
111+ else {
112+ let userShare = getCallerShare(i.caller)
113+ let userClaimedAmount = getClaimedAmount(i.caller)
114+ let claimAmount = (userShare - userClaimedAmount)
115+ if ((0 >= claimAmount))
116+ then throw("Claim amount must be bigger than 0")
117+ else {
118+ let userClaimedAmountNew = (userClaimedAmount + claimAmount)
119+[ScriptTransfer(i.caller, claimAmount, ENNO), IntegerEntry((toString(i.caller) + keyUserENNOClaimedAmount), userClaimedAmountNew), IntegerEntry((toString(i.caller) + keyUserENNOLastClaimedAmount), claimAmount)]
120+ }
121+ }
122+
123+
124+
125+@Callable(i)
126+func claimAndStakeENNO () = if (!(isActive))
127+ then throw("DApp is inactive at this moment")
128+ else {
129+ let userShare = getCallerShare(i.caller)
130+ let userClaimedAmount = getClaimedAmount(i.caller)
131+ let claimAmount = (userShare - userClaimedAmount)
132+ if ((0 >= claimAmount))
133+ then throw("Claim amount must be bigger than 0")
134+ else {
135+ let userClaimedAmountNew = (userClaimedAmount + claimAmount)
136+ let userENNOLocked = getUserENNOLocked(i.caller)
137+ let userENNOLockedNew = (userENNOLocked + claimAmount)
138+ let totalENNOLocked = getTotalENNOLocked()
139+ let totalENNOLockedNew = (totalENNOLocked + claimAmount)
140+[IntegerEntry((toString(i.caller) + keyUserENNOLocked), userENNOLockedNew), IntegerEntry(keyTotalENNOLocked, totalENNOLockedNew)]
141+ }
142+ }
69143
70144
71145
72146 @Callable(i)
73147 func shutdown () = if (!(isActive))
74148 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
75149 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
76150 then throw("Only admin can call this function")
77151 else suspend("Paused by admin")
78152
79153
80154
81155 @Callable(i)
82156 func activate () = if (isActive)
83157 then throw("DApp is already active")
84158 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
85159 then throw("Only admin can call this function")
86160 else [BooleanEntry(keyActive, true), DeleteEntry(keyCause)]
87161
88162
89163 @Verifier(tx)
90164 func verify () = {
91165 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
92166 then 1
93167 else 0
94168 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
95169 then 1
96170 else 0
97171 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
98172 then 1
99173 else 0
100174 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
101175 }
102176

github/deemru/w8io/873ac7e 
47.75 ms