tx · FhjKQR8dGfqnh4AUo9Um3a46Ne5dgHkzjSVigY4rMwMj

3N8HydXY8jaCSmkRTG8H4kwfhep4HhYM2dt:  -0.05000000 Waves

2023.10.06 13:31 [2786641] smart account 3N8HydXY8jaCSmkRTG8H4kwfhep4HhYM2dt > SELF 0.00000000 Waves

{ "type": 13, "id": "FhjKQR8dGfqnh4AUo9Um3a46Ne5dgHkzjSVigY4rMwMj", "fee": 5000000, "feeAssetId": null, "timestamp": 1696588276403, "version": 1, "sender": "3N8HydXY8jaCSmkRTG8H4kwfhep4HhYM2dt", "senderPublicKey": "521QUi2sucT3arBFJNbe36VKKiyfW6Vv46KmMLYs6SGy", "proofs": [ "4nx4qwieaAGmgMrioicsQqSjrd24AQgTjkfiSFYAghFf83hVoE1vzwZsjnxWgkztKDLxQ5N59i9yboFZNajwLcUh" ], "script": "base64:AAIFAAAAAAAAACEIAhIDCgEIEgQKAggIEgMKAQgSAwoBCBIDCgEIEgMKAQgAAAAwAQAAAAd0aHJvd0lmAAAAAgAAAAljb25kaXRpb24AAAAFZXJyb3IDBQAAAAljb25kaXRpb24JAAACAAAAAQUAAAAFZXJyb3IGAQAAAAh3cml0ZUludAAAAAIAAAADa2V5AAAABXZhbHVlAwkAAGYAAAACAAAAAAAAAAAABQAAAAV2YWx1ZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABd3cml0aW5nIG5lZ2F0aXZlIHZhbHVlIAkAAaQAAAABBQAAAAV2YWx1ZQIAAAAJIGZvciBrZXkgBQAAAANrZXkJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAANrZXkFAAAABXZhbHVlAQAAABB3cml0ZUNvbnN0U3RyaW5nAAAAAgAAAANrZXkAAAAFdmFsdWUDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAADa2V5BQAAAAV2YWx1ZQkAAAIAAAABCQABLAAAAAICAAAAFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUAAAADa2V5AQAAAA13cml0ZUNvbnN0SW50AAAAAgAAAANrZXkAAAAFdmFsdWUDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAA2tleQUAAAAFdmFsdWUJAAACAAAAAQkAASwAAAACAgAAABBhbHJlYWR5IGV4aXN0czogBQAAAANrZXkBAAAACGNoYW5nZUJ5AAAAAgAAAANrZXkAAAAFdmFsdWUJAQAAAAh3cml0ZUludAAAAAIFAAAAA2tleQkAAGQAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQAAAAAAAAAAAAUAAAAFdmFsdWUBAAAABWFzSW50AAAAAQAAAAV2YWx1ZQQAAAAHJG1hdGNoMAUAAAAFdmFsdWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAADaW50BQAAAAckbWF0Y2gwBQAAAANpbnQJAAACAAAAAQIAAAAZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAAAAAASY29uZmlnQWRkcmVzc1N0b3JlAgAAAA1jb25maWdBZGRyZXNzAAAAAA1jb25maWdBZGRyZXNzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAEmNvbmZpZ0FkZHJlc3NTdG9yZQIAAAAfbW90aGVyIHZvdGluZzogbm8gY29uZmlnQWRkcmVzcwIAAAAWaW52YWxpZCBjb25maWcgYWRkcmVzcwAAAAAUdm90aW5nUmVzdWx0Q29udHJhY3QJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAANY29uZmlnQWRkcmVzcwIAAAAWY29udHJhY3Rfdm90aW5nX3Jlc3VsdAIAAAAZbm8gY29udHJhY3Rfdm90aW5nX3Jlc3VsdAIAAAAeaW52YWxpZCBjb250cmFjdF92b3RpbmdfcmVzdWx0AAAAABV2b3RpbmdSZXdhcmRzQ29udHJhY3QJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAANY29uZmlnQWRkcmVzcwIAAAAXY29udHJhY3Rfdm90aW5nX3Jld2FyZHMCAAAAGm5vIGNvbnRyYWN0X3ZvdGluZ19yZXdhcmRzAgAAAB9pbnZhbGlkIGNvbnRyYWN0X3ZvdGluZ19yZXdhcmRzAAAAAA9zdGFraW5nQ29udHJhY3QJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAANY29uZmlnQWRkcmVzcwIAAAAQY29udHJhY3Rfc3Rha2luZwIAAAATbm8gc3Rha2luZ19jb250cmFjdAIAAAAXaW52YWxpZCBzdGFraW5nQ29udHJhY3QAAAAABkhFSUdIVAUAAAAGaGVpZ2h0AQAAAAZhZHZpc2UAAAAACQABLAAAAAICAAAACGhlaWdodDogCQABpAAAAAEFAAAABkhFSUdIVAAAAAAEQkFTRQAAAAAAAAAD6AEAAAAJb3BBbGxvd2VkAAAAAQAAAAJvcAQAAAABYQkAA/wAAAAEBQAAAA1jb25maWdBZGRyZXNzAgAAAAlvcEFsbG93ZWQJAARMAAAAAgUAAAACb3AFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAFhBQAAAAFhBgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAAAAFHByb3Bvc2FsQWRkcmVzc1N0b3JlAAAAAQAAAAJpZAkAASwAAAACAgAAABFwcm9wb3NhbF9hZGRyZXNzXwUAAAACaWQBAAAAE3Byb3Bvc2FsSGVpZ2h0U3RvcmUAAAABAAAAAmlkCQABLAAAAAICAAAAEHByb3Bvc2FsX2hlaWdodF8FAAAAAmlkAQAAABhwcm9wb3NhbFZvdGluZ1N0YXJ0U3RvcmUAAAABAAAAAmlkCQABLAAAAAICAAAAFXByb3Bvc2FsX3ZvdGluZ3N0YXJ0XwUAAAACaWQBAAAAFnByb3Bvc2FsVm90aW5nRW5kU3RvcmUAAAABAAAAAmlkCQABLAAAAAICAAAAE3Byb3Bvc2FsX3ZvdGluZ2VuZF8FAAAAAmlkAQAAAA9wcm9wb3NhbEJ5U3RvcmUAAAABAAAAAmlkCQABLAAAAAICAAAADHByb3Bvc2FsX2J5XwUAAAACaWQBAAAAF3Byb3Bvc2FsVG90YWxQb3dlclN0b3JlAAAAAQAAAAJpZAkAASwAAAACAgAAAA9wcm9wb3NhbF9wb3dlcl8FAAAAAmlkAQAAABVwcm9wb3NhbFRvdGFsWWVzU3RvcmUAAAABAAAAAmlkCQABLAAAAAICAAAADXByb3Bvc2FsX3llc18FAAAAAmlkAQAAABRwcm9wb3NhbFRvdGFsTm9TdG9yZQAAAAEAAAACaWQJAAEsAAAAAgIAAAAMcHJvcG9zYWxfbm9fBQAAAAJpZAEAAAAUcHJvcG9zYWxVc2VyWWVzU3RvcmUAAAACAAAABHVzZXIAAAACaWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEnVzZXJfcHJvcG9zYWxfeWVzXwUAAAAEdXNlcgIAAAABXwUAAAACaWQBAAAAE3Byb3Bvc2FsVXNlck5vU3RvcmUAAAACAAAABHVzZXIAAAACaWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEXVzZXJfcHJvcG9zYWxfbm9fBQAAAAR1c2VyAgAAAAFfBQAAAAJpZAEAAAAadXNlckxhc3RQcm9wb3NlSGVpZ2h0U3RvcmUAAAABAAAABHVzZXIJAAEsAAAAAgIAAAATcHJvcG9zZV9sYXN0aGVpZ2h0XwUAAAAEdXNlcgEAAAAHdXNlclllcwAAAAIAAAAEdXNlcgAAAAJpZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAUcHJvcG9zYWxVc2VyWWVzU3RvcmUAAAACBQAAAAR1c2VyBQAAAAJpZAAAAAAAAAAAAAEAAAAGdXNlck5vAAAAAgAAAAR1c2VyAAAAAmlkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABNwcm9wb3NhbFVzZXJOb1N0b3JlAAAAAgUAAAAEdXNlcgUAAAACaWQAAAAAAAAAAAABAAAAFXVzZXJMYXN0UHJvcG9zZUhlaWdodAAAAAEAAAAEdXNlcgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAadXNlckxhc3RQcm9wb3NlSGVpZ2h0U3RvcmUAAAABBQAAAAR1c2VyAP//////////AAAAAAt0aGlzQWRkcmVzcwkABCUAAAABBQAAAAR0aGlzAAAAABB1c2VyUHJvcG9zZURlbGF5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwkAASwAAAACBQAAAAt0aGlzQWRkcmVzcwIAAAATX3VzZXJfcHJvcG9zZV9kZWxheQIAAAAhdXNlcl9wcm9wb3NlX2RlbGF5IGlzIG5vdCBkZWZpbmVkAAAAAAtxdW9ydW1SYXRpbwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADWNvbmZpZ0FkZHJlc3MJAAEsAAAAAgUAAAALdGhpc0FkZHJlc3MCAAAAFl9wcm9wb3NhbF9xdW9ydW1fcmF0aW8CAAAAInByb3Bvc2FsUXVvcnVtUmF0aW8gaXMgbm90IGRlZmluZWQAAAAAC3Bhc3NlZFJhdGlvCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwkAASwAAAACBQAAAAt0aGlzQWRkcmVzcwIAAAAWX3Byb3Bvc2FsX3Bhc3NlZF9yYXRpbwIAAAAlcHJvcG9zYWxUaHJlc2hvbGRSYXRpbyBpcyBub3QgZGVmaW5lZAAAAAATcHJvcG9zYWxNaW5SZXF1aXJlZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADWNvbmZpZ0FkZHJlc3MJAAEsAAAAAgUAAAALdGhpc0FkZHJlc3MCAAAAHF9wcm9wb3NhbF9taW5fcG93ZXJfcmVxdWlyZWQCAAAAG21pbiByZXF1aXJlZCBpcyBub3QgZGVmaW5lZAAAAAARdm90aW5nU3RhcnRPZmZzZXQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA1jb25maWdBZGRyZXNzCQABLAAAAAIFAAAAC3RoaXNBZGRyZXNzAgAAABxfcHJvcG9zYWxfdm90aW5nc3RhcnRfb2Zmc2V0AgAAACpwcm9wb3NhbF92b3RpbmdzdGFydF9vZmZzZXQgaXMgbm90IGRlZmluZWQAAAAAD3ZvdGluZ0VuZE9mZnNldAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADWNvbmZpZ0FkZHJlc3MJAAEsAAAAAgUAAAALdGhpc0FkZHJlc3MCAAAAGl9wcm9wb3NhbF92b3RpbmdlbmRfb2Zmc2V0AgAAAChwcm9wb3NhbF92b3RpbmdlbmRfb2Zmc2V0IGlzIG5vdCBkZWZpbmVkAQAAAAp1c2VyU2hhcmVzAAAAAQAAAAR1c2VyCQEAAAAFYXNJbnQAAAABCQAD/AAAAAQFAAAAD3N0YWtpbmdDb250cmFjdAIAAAAKdXNlclNoYXJlcwkABEwAAAACBQAAAAR1c2VyBQAAAANuaWwFAAAAA25pbAEAAAAJdXNlclBvd2VyAAAAAQAAAAR1c2VyCQEA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AAIJAABoAAAAAgUAAAAKdG90YWxWb3RlcwUAAAAEQkFTRQUAAAAKdG90YWxQb3dlcgUAAAALcXVvcnVtUmF0aW8EAAAACWhhc1Bhc3NlZAkAAGcAAAACCQAAaQAAAAIJAABoAAAAAgUAAAAIdm90ZXNZZXMFAAAABEJBU0UFAAAACnRvdGFsVm90ZXMFAAAAC3Bhc3NlZFJhdGlvAwUAAAAJaGFzUXVvcnVtBQAAAAloYXNQYXNzZWQHAQAAAA5hZHZpc2VQcm9wb3NhbAAAAAEAAAAEdHhJZAQAAAAOcHJvcG9zYWxIZWlnaHQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB8AAAABCQEAAAATcHJvcG9zYWxIZWlnaHRTdG9yZQAAAAEFAAAABHR4SWQCAAAAC25vIHByb3Bvc2FsBAAAAAt2b3RpbmdTdGFydAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAQAAABhwcm9wb3NhbFZvdGluZ1N0YXJ0U3RvcmUAAAABBQAAAAR0eElkAgAAAAtubyBwcm9wb3NhbAQAAAAJdm90aW5nRW5kCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQkBAAAAFnByb3Bvc2FsVm90aW5nRW5kU3RvcmUAAAABBQAAAAR0eElkAgAAAAtubyBwcm9wb3NhbAQAAAAIdm90ZXNZZXMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQfAAAAAQkBAAAAFXByb3Bvc2FsVG90YWxZZXNTdG9yZQAAAAEFAAAABHR4SWQAAAAAAAAAAAAEAAAAB3ZvdGVzTm8JAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQfAAAAAQkBAAAAFHByb3Bvc2FsVG90YWxOb1N0b3JlAAAAAQUAAAAEdHhJZAAAAAAAAAAAAAQAAAAOdG90YWxQb3dlclNuYXAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQfAAAAAQkBAAAAF3Byb3Bvc2FsVG90YWxQb3dlclN0b3JlAAAAAQUAAAAEdHhJZAAAAAAAAAAAAAQAAAAKdG90YWxWb3RlcwkAAGQAAAACBQAAAAh2b3Rlc1llcwUAAAAHdm90ZXNObwQAAAAJaGFzUXVvcnVtAwkAAGYAAAACBQAA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cmV0cmFjdFByb3Bvc2FsAAAAAQAAAAR0eElkBAAAAAZjaGVja3MDCQEAAAAJb3BBbGxvd2VkAAAAAQIAAAAeZ292ZXJuYW5jZV9yZXRyYWN0X3Byb3Bvc2FsX3R4CQEAAAAUcHJvcG9zYWxCZWZvcmVWb3RpbmcAAAABBQAAAAR0eElkBwMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAAAmJ5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAD3Byb3Bvc2FsQnlTdG9yZQAAAAEFAAAABHR4SWQCAAAAFnByb3Bvc2FsIGRvZXNuJ3QgZXhpc3QEAAAABHVzZXIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAwkBAAAAAiE9AAAAAgUAAAACYnkFAAAABHVzZXIJAAACAAAAAQIAAAAfb25seSBvd25lciBjYW4gcmV0cmFjdCBwcm9wb3NhbAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAATcHJvcG9zYWxIZWlnaHRTdG9yZQAAAAEFAAAABHR4SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAGHByb3Bvc2FsVm90aW5nU3RhcnRTdG9yZQAAAAEFAAAABHR4SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAFnByb3Bvc2FsVm90aW5nRW5kU3RvcmUAAAABBQAAAAR0eElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA9wcm9wb3NhbEJ5U3RvcmUAAAABBQAAAAR0eElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABdwcm9wb3NhbFRvdGFsUG93ZXJTdG9yZQAAAAEFAAAABHR4SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAFXByb3Bvc2FsVG90YWxZZXNTdG9yZQAAAAEFAAAABHR4SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAFHByb3Bvc2FsVG90YWxOb1N0b3JlAAAAAQUAAAAEdHhJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAUcHJvcG9zYWxVc2VyWWVzU3RvcmUAAAACBQAAAAR1c2VyBQAAAAR0eElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABNwcm9wb3NhbFVzZXJOb1N0b3JlAAAAAgUAAAAEdXNlcgUAAAAEdHhJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAadXNlckxhc3RQcm9wb3NlSGVpZ2h0U3RvcmUAAAABBQAAAAR1c2VyCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABRwcm9wb3NhbEFkZHJlc3NTdG9yZQAAAAEFAAAABHR4SWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAAAg9+xhQ==", "chainId": 84, "height": 2786641, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func throwIf (condition,error) = if (condition)
5+ then throw(error)
6+ else true
7+
8+
9+func writeInt (key,value) = if ((0 > value))
10+ then throw(((("writing negative value " + toString(value)) + " for key ") + key))
11+ else IntegerEntry(key, value)
12+
13+
14+func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
15+ then StringEntry(key, value)
16+ else throw(("already initialized: " + key))
17+
18+
19+func writeConstInt (key,value) = if (!(isDefined(getInteger(this, key))))
20+ then IntegerEntry(key, value)
21+ else throw(("already exists: " + key))
22+
23+
24+func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value))
25+
26+
27+func asInt (value) = match value {
28+ case int: Int =>
29+ int
30+ case _ =>
31+ throw("wrong type, expected: Int")
32+}
33+
34+
35+let configAddressStore = "configAddress"
36+
37+let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configAddressStore), "mother voting: no configAddress")), "invalid config address")
38+
39+let votingResultContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "contract_voting_result"), "no contract_voting_result")), "invalid contract_voting_result")
40+
41+let votingRewardsContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "contract_voting_rewards"), "no contract_voting_rewards")), "invalid contract_voting_rewards")
42+
43+let stakingContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "contract_staking"), "no staking_contract")), "invalid stakingContract")
44+
45+let HEIGHT = height
46+
47+func advise () = ("height: " + toString(HEIGHT))
48+
49+
50+let BASE = 1000
51+
52+func opAllowed (op) = {
53+ let a = invoke(configAddress, "opAllowed", [op], nil)
54+ if ((a == a))
55+ then true
56+ else throw("Strict value is not equal to itself.")
57+ }
58+
59+
60+func proposalAddressStore (id) = ("proposal_address_" + id)
61+
62+
63+func proposalHeightStore (id) = ("proposal_height_" + id)
64+
65+
66+func proposalVotingStartStore (id) = ("proposal_votingstart_" + id)
67+
68+
69+func proposalVotingEndStore (id) = ("proposal_votingend_" + id)
70+
71+
72+func proposalByStore (id) = ("proposal_by_" + id)
73+
74+
75+func proposalTotalPowerStore (id) = ("proposal_power_" + id)
76+
77+
78+func proposalTotalYesStore (id) = ("proposal_yes_" + id)
79+
80+
81+func proposalTotalNoStore (id) = ("proposal_no_" + id)
82+
83+
84+func proposalUserYesStore (user,id) = ((("user_proposal_yes_" + user) + "_") + id)
85+
86+
87+func proposalUserNoStore (user,id) = ((("user_proposal_no_" + user) + "_") + id)
88+
89+
90+func userLastProposeHeightStore (user) = ("propose_lastheight_" + user)
91+
92+
93+func userYes (user,id) = valueOrElse(getInteger(this, proposalUserYesStore(user, id)), 0)
94+
95+
96+func userNo (user,id) = valueOrElse(getInteger(this, proposalUserNoStore(user, id)), 0)
97+
98+
99+func userLastProposeHeight (user) = valueOrElse(getInteger(this, userLastProposeHeightStore(user)), -1)
100+
101+
102+let thisAddress = toString(this)
103+
104+let userProposeDelay = valueOrErrorMessage(getInteger(configAddress, (thisAddress + "_user_propose_delay")), "user_propose_delay is not defined")
105+
106+let quorumRatio = valueOrErrorMessage(getInteger(configAddress, (thisAddress + "_proposal_quorum_ratio")), "proposalQuorumRatio is not defined")
107+
108+let passedRatio = valueOrErrorMessage(getInteger(configAddress, (thisAddress + "_proposal_passed_ratio")), "proposalThresholdRatio is not defined")
109+
110+let proposalMinRequired = valueOrErrorMessage(getInteger(configAddress, (thisAddress + "_proposal_min_power_required")), "min required is not defined")
111+
112+let votingStartOffset = valueOrErrorMessage(getInteger(configAddress, (thisAddress + "_proposal_votingstart_offset")), "proposal_votingstart_offset is not defined")
113+
114+let votingEndOffset = valueOrErrorMessage(getInteger(configAddress, (thisAddress + "_proposal_votingend_offset")), "proposal_votingend_offset is not defined")
115+
116+func userShares (user) = asInt(invoke(stakingContract, "userShares", [user], nil))
117+
118+
119+func userPower (user) = asInt(invoke(stakingContract, "userPower", [user], nil))
120+
121+
122+func proposalExists (txId) = match getInteger(this, proposalHeightStore(txId)) {
123+ case start: Int =>
124+ true
125+ case _ =>
126+ false
127+}
128+
129+
130+func proposalOnVoting (txId) = {
131+ let nonExistErr = "proposal doesn't exist"
132+ if (!(proposalExists(txId)))
133+ then throw(nonExistErr)
134+ else {
135+ let votingStart = valueOrErrorMessage(getInteger(this, proposalVotingStartStore(txId)), nonExistErr)
136+ let votingEnd = valueOrErrorMessage(getInteger(this, proposalVotingEndStore(txId)), nonExistErr)
137+ if ((votingStart > HEIGHT))
138+ then throw(((("voting not started yet, discussion is in progress, voting will start at block " + toString(votingStart)) + ", now it's ") + toString(HEIGHT)))
139+ else if ((HEIGHT > votingEnd))
140+ then throw(((("voting ended at block " + toString(votingEnd)) + ", now it's ") + toString(HEIGHT)))
141+ else true
142+ }
143+ }
144+
145+
146+func proposalBeforeVoting (txId) = {
147+ let nonExistErr = "proposal doesn't exist"
148+ if (!(proposalExists(txId)))
149+ then throw(nonExistErr)
150+ else {
151+ let votingStart = valueOrErrorMessage(getInteger(this, proposalVotingStartStore(txId)), nonExistErr)
152+ if ((HEIGHT >= votingStart))
153+ then throw("voting start is already happened")
154+ else true
155+ }
156+ }
157+
158+
159+func totalVotingPower () = asInt(invoke(stakingContract, "totalShares", nil, nil))
160+
161+
162+func canBroadcast (id,yesInc,noInc) = {
163+ let votesYes = (valueOrElse(getInteger(("proposal_yes_" + id)), 0) + yesInc)
164+ let votesNo = (valueOrElse(getInteger(("proposal_no_" + id)), 0) + noInc)
165+ let totalPower = totalVotingPower()
166+ let totalVotes = (votesYes + votesNo)
167+ let hasQuorum = (((totalVotes * BASE) / totalPower) >= quorumRatio)
168+ let hasPassed = (((votesYes * BASE) / totalVotes) >= passedRatio)
169+ if (hasQuorum)
170+ then hasPassed
171+ else false
172+ }
173+
174+
175+func adviseProposal (txId) = {
176+ let proposalHeight = valueOrErrorMessage(getInteger(proposalHeightStore(txId)), "no proposal")
177+ let votingStart = valueOrErrorMessage(getInteger(proposalVotingStartStore(txId)), "no proposal")
178+ let votingEnd = valueOrErrorMessage(getInteger(proposalVotingEndStore(txId)), "no proposal")
179+ let votesYes = valueOrElse(getInteger(proposalTotalYesStore(txId)), 0)
180+ let votesNo = valueOrElse(getInteger(proposalTotalNoStore(txId)), 0)
181+ let totalPowerSnap = valueOrElse(getInteger(proposalTotalPowerStore(txId)), 0)
182+ let totalVotes = (votesYes + votesNo)
183+ let hasQuorum = if ((totalVotes > 0))
184+ then (((totalVotes * BASE) / totalPowerSnap) >= quorumRatio)
185+ else false
186+ let hasPassed = if ((totalVotes > 0))
187+ then (((votesYes * BASE) / totalVotes) >= passedRatio)
188+ else false
189+ let inBlockchainHeight = valueOrElse(transactionHeightById(fromBase58String(txId)), 0)
190+ let status = if ((votingStart > HEIGHT))
191+ then "discussion"
192+ else if ((votingEnd >= HEIGHT))
193+ then "voting"
194+ else if (!(hasQuorum))
195+ then "noQuorum"
196+ else if (!(hasPassed))
197+ then "votingFailed"
198+ else if ((inBlockchainHeight > 0))
199+ then "inBlockchain"
200+ else "waitingForTx"
201+ ((((((((((((((((((((("proposal_id: " + txId) + ", proposal_address: ") + valueOrErrorMessage(proposalAddressStore(txId), "no address")) + ", proposal_status: ") + status) + ", proposal_by: ") + valueOrErrorMessage(getString(this, proposalByStore(txId)), "no proposal")) + ", proposal_height: ") + toString(proposalHeight)) + ", proposal_txheight: ") + toString(inBlockchainHeight)) + ", proposal_votingstart: ") + toString(votingStart)) + ", proposal_votingend: ") + toString(votingEnd)) + ", proposal_power: ") + toString(totalPowerSnap)) + ", vote_yes: ") + toString(votesYes)) + ", vote_no: ") + toString(votesNo))
202+ }
203+
204+
205+func broadcastHeight (txId) = (getIntegerValue(proposalVotingEndStore(txId)) + 1)
206+
207+
208+func rewards (user,votes) = invoke(votingRewardsContract, "countVote", [user, votes], nil)
209+
210+
211+func setResult (txAddress,txId,result) = invoke(votingResultContract, "setResult", [txAddress, txId, result, broadcastHeight(txId)], nil)
212+
213+
214+func setPower (txId) = IntegerEntry(proposalTotalPowerStore(txId), totalVotingPower())
215+
216+
217+@Callable(i)
218+func init (config) = [writeConstString(configAddressStore, config)]
219+
220+
221+
222+@Callable(i)
223+func propose (address,txId) = {
224+ let checks = opAllowed("governance_propose_tx")
225+ if ((checks == checks))
226+ then {
227+ let user = toString(i.caller)
228+ let gv = userPower(user)
229+ if ((proposalMinRequired > gv))
230+ then throw((((("not enough staked power to make proposal." + " Minimum required = ") + toString(proposalMinRequired)) + ", actual: = ") + toString(gv)))
231+ else {
232+ let last = userLastProposeHeight(user)
233+ if (if ((last > -1))
234+ then ((last + userProposeDelay) > HEIGHT)
235+ else false)
236+ then throw(((("can't propose too often, last proroposal height: " + toString(last)) + ", blocks to wait: ") + toString(((last + userProposeDelay) - HEIGHT))))
237+ else {
238+ let votingEnds = (HEIGHT + votingEndOffset)
239+ let e = invoke(votingRewardsContract, "votingEnds", [votingEnds], nil)
240+ if ((e == e))
241+ then [writeConstInt(proposalHeightStore(txId), HEIGHT), writeConstInt(proposalVotingStartStore(txId), (HEIGHT + votingStartOffset)), writeConstInt(proposalVotingEndStore(txId), votingEnds), writeConstString(proposalByStore(txId), toString(i.caller)), writeInt(userLastProposeHeightStore(user), HEIGHT), writeConstString(proposalAddressStore(txId), address)]
242+ else throw("Strict value is not equal to itself.")
243+ }
244+ }
245+ }
246+ else throw("Strict value is not equal to itself.")
247+ }
248+
249+
250+
251+@Callable(i)
252+func voteYes (txId) = {
253+ let checks = if (opAllowed("governance_vote_tx"))
254+ then proposalOnVoting(txId)
255+ else false
256+ if ((checks == checks))
257+ then {
258+ let user = toString(i.caller)
259+ if ((userNo(user, txId) > 0))
260+ then throw("already voted against, please retract your vote first")
261+ else {
262+ let yesDelta = (userShares(user) - userYes(user, txId))
263+ let restake = invoke(stakingContract, "restakeFor", [user], nil)
264+ if ((restake == restake))
265+ then {
266+ let txAddress = valueOrErrorMessage(getString(proposalAddressStore(txId)), "proposal address not found")
267+ let result = canBroadcast(txId, yesDelta, 0)
268+ let s = setResult(txAddress, txId, result)
269+ if ((s == s))
270+ then {
271+ let r = rewards(user, yesDelta)
272+ if ((r == r))
273+ then [setPower(txId), changeBy(proposalUserYesStore(user, txId), yesDelta), changeBy(proposalTotalYesStore(txId), yesDelta)]
274+ else throw("Strict value is not equal to itself.")
275+ }
276+ else throw("Strict value is not equal to itself.")
277+ }
278+ else throw("Strict value is not equal to itself.")
279+ }
280+ }
281+ else throw("Strict value is not equal to itself.")
282+ }
283+
284+
285+
286+@Callable(i)
287+func voteNo (txId) = {
288+ let checks = if (opAllowed("governance_vote_tx"))
289+ then proposalOnVoting(txId)
290+ else false
291+ if ((checks == checks))
292+ then {
293+ let user = toString(i.caller)
294+ if ((userYes(user, txId) > 0))
295+ then throw("already voted for, please retract your vote first")
296+ else {
297+ let noDelta = (userShares(user) - userNo(user, txId))
298+ let restake = invoke(stakingContract, "restakeFor", [user], nil)
299+ if ((restake == restake))
300+ then {
301+ let txAddress = valueOrErrorMessage(getString(proposalAddressStore(txId)), "proposal address not found")
302+ let result = canBroadcast(txId, 0, noDelta)
303+ let s = setResult(txAddress, txId, result)
304+ if ((s == s))
305+ then {
306+ let r = rewards(user, noDelta)
307+ if ((r == r))
308+ then [setPower(txId), changeBy(proposalUserNoStore(user, txId), noDelta), changeBy(proposalTotalNoStore(txId), noDelta)]
309+ else throw("Strict value is not equal to itself.")
310+ }
311+ else throw("Strict value is not equal to itself.")
312+ }
313+ else throw("Strict value is not equal to itself.")
314+ }
315+ }
316+ else throw("Strict value is not equal to itself.")
317+ }
318+
319+
320+
321+@Callable(i)
322+func retract (txId) = {
323+ let checks = if (opAllowed("governance_retract_vote"))
324+ then proposalOnVoting(txId)
325+ else false
326+ if ((checks == checks))
327+ then {
328+ let user = toString(i.caller)
329+ let yes = userYes(user, txId)
330+ let no = userNo(user, txId)
331+ let txAddress = valueOrErrorMessage(getString(proposalAddressStore(txId)), "proposal address not found")
332+ let result = canBroadcast(txId, -(yes), -(no))
333+ let s = setResult(txAddress, txId, result)
334+ if ((s == s))
335+ then {
336+ let r = rewards(user, (-(yes) - no))
337+ if ((r == r))
338+ then [changeBy(proposalTotalYesStore(txId), -(yes)), changeBy(proposalTotalNoStore(txId), -(no)), DeleteEntry(proposalUserYesStore(user, txId)), DeleteEntry(proposalUserNoStore(user, txId))]
339+ else throw("Strict value is not equal to itself.")
340+ }
341+ else throw("Strict value is not equal to itself.")
342+ }
343+ else throw("Strict value is not equal to itself.")
344+ }
345+
346+
347+
348+@Callable(i)
349+func retractProposal (txId) = {
350+ let checks = if (opAllowed("governance_retract_proposal_tx"))
351+ then proposalBeforeVoting(txId)
352+ else false
353+ if ((checks == checks))
354+ then {
355+ let by = valueOrErrorMessage(getString(this, proposalByStore(txId)), "proposal doesn't exist")
356+ let user = toString(i.caller)
357+ if ((by != user))
358+ then throw("only owner can retract proposal")
359+ else [DeleteEntry(proposalHeightStore(txId)), DeleteEntry(proposalVotingStartStore(txId)), DeleteEntry(proposalVotingEndStore(txId)), DeleteEntry(proposalByStore(txId)), DeleteEntry(proposalTotalPowerStore(txId)), DeleteEntry(proposalTotalYesStore(txId)), DeleteEntry(proposalTotalNoStore(txId)), DeleteEntry(proposalUserYesStore(user, txId)), DeleteEntry(proposalUserNoStore(user, txId)), DeleteEntry(userLastProposeHeightStore(user)), DeleteEntry(proposalAddressStore(txId))]
360+ }
361+ else throw("Strict value is not equal to itself.")
362+ }
363+
364+

github/deemru/w8io/fabc49c 
30.47 ms