tx · ABdxTLsoFNu7X7gGWvQiFB1YaWr7WJWGNgq39jEnhxVq

3N7pxeiRGQcKGQrQqicxXG6vMPhJ525NQG3:  -0.01000000 Waves

2022.03.03 18:03 [1947947] smart account 3N7pxeiRGQcKGQrQqicxXG6vMPhJ525NQG3 > SELF 0.00000000 Waves

{ "type": 13, "id": "ABdxTLsoFNu7X7gGWvQiFB1YaWr7WJWGNgq39jEnhxVq", "fee": 1000000, "feeAssetId": null, "timestamp": 1646319819111, "version": 2, "chainId": 84, "sender": "3N7pxeiRGQcKGQrQqicxXG6vMPhJ525NQG3", "senderPublicKey": "A5n4FVGd7NYd7eGpGVAUyEbSYtykfNmwEy19DBUcitFR", "proofs": [ "oHxTj3BeEzrz2zehrRMSMy7xZaWGdc13M8Fhqdrsin6d1gf2WMzndMobS5Cas1g27FRk6gmmF2dxNuYN5sZrQq5" ], "script": "base64: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ZXRJbnRlZ2VyT3JGYWlsAAAAAQUAAAARa2V5Vm90aW5nRHVyYXRpb24AAAAAFXZvdGVCZWZvcmVFbGltaW5hdGlvbgkBAAAAEGdldEludGVnZXJPckZhaWwAAAABBQAAABhrZXlWb3RlQmVmb3JlRWxpbWluYXRpb24AAAAAC3N0YXJ0SGVpZ2h0CQEAAAAQZ2V0SW50ZWdlck9yRmFpbAAAAAEFAAAADmtleVN0YXJ0SGVpZ2h0AAAAAA1jdXJyZW50UGVyaW9kCQEAAAAQZ2V0SW50ZWdlck9yRmFpbAAAAAEFAAAAEGtleUN1cnJlbnRQZXJpb2QAAAAAEGJvb3N0aW5nQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAABNrZXlCb29zdGluZ0NvbnRyYWN0AAAAABBlbWlzc2lvbkNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAATa2V5RW1pc3Npb25Db250cmFjdAEAAAASZ2V0UGVyaW9kRW5kSGVpZ2h0AAAAAQAAAAZwZXJpb2QJAABkAAAAAgUAAAALc3RhcnRIZWlnaHQJAABoAAAAAgkAAGQAAAACBQAAAAZwZXJpb2QAAAAAAAAAAAEFAAAADnZvdGluZ0R1cmF0aW9uAQAAABlnZXRDdXJyZW50UGVyaW9kRW5kSGVpZ2h0AAAAAAkBAAAAEmdldFBlcmlvZEVuZEhlaWdodAAAAAEFAAAADWN1cnJlbnRQZXJpb2QBAAAAGGdldFVzZXJHd3hBbW91bnRBdEhlaWdodAAAAAIAAAALdXNlckFkZHJlc3MAAAAMdGFyZ2V0SGVpZ2h0BAAAAAlnd3hBbW91bnQJAAP8AAAABAUAAAAQYm9vc3RpbmdDb250cmFjdAIAAAAgZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0UkVBRE9OTFkJAARMAAAAAgUAAAALdXNlckFkZHJlc3MJAARMAAAAAgUAAAAMdGFyZ2V0SGVpZ2h0BQAAAANuaWwFAAAAA25pbAkBAAAABWFzSW50AAAAAQUAAAAJZ3d4QW1vdW50AQAAAAxjb250YWluc05vZGUAAAACAAAA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dHJpbmdFbnRyeQAAAAIFAAAAE2tleUVtaXNzaW9uQ29udHJhY3QFAAAAE2VtaXNzaW9uQ29udHJhY3RQcm0JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGtleUZlZUFtb3VudAUAAAAMZmVlQW1vdW50UHJtCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADGtleVd4QXNzZXRJZAUAAAAMd3hBc3NldElkUHJtCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJrZXlWb3RpbmdUaHJlc2hvbGQFAAAAEnZvdGluZ1RocmVzaG9sZFBybQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa2V5Vm90aW5nRHVyYXRpb24FAAAAEXZvdGluZ0R1cmF0aW9uUHJtCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABhrZXlWb3RlQmVmb3JlRWxpbWluYXRpb24FAAAAGHZvdGVCZWZvcmVFbGltaW5hdGlvblBybQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAOa2V5U3RhcnRIZWlnaHQFAAAADnN0YXJ0SGVpZ2h0UHJtCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABBrZXlDdXJyZW50UGVyaW9kAAAAAAAAAAAABQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAB3N1Z2dlc3QAAAACAAAAB2Fzc2V0SWQAAAAKYXNzZXRJbWFnZQQAAAAEaW5mbwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD7AAAAAEJAAJZAAAAAQUAAAAHYXNzZXRJZAIAAAAQSW52YWxpZCBhc3NldCBJRAQAAAAHcGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAGY2hlY2tzCQAETAAAAAIDCQAAAAAAAAIIBQAAAARpbmZvAAAABmlzc3VlcggFAAAAAWkAAAAGY2FsbGVyBgkAAAIAAAABAgAAAClBc3NldCBjYW4gb25seSBiZSBzdWdnZXN0ZWQgYnkgaXRzIGlzc3VlcgkABEwAAAACAwkAAAAAAAACCQEAAAAFdmFsdWUAAAABCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAAl3eEFzc2V0SWQGCQAAAgAAAAECAAAAEUludmFsaWQgZmVlIGFzc2V0CQAETAAAAAIDCQAAAAAAAAIIBQAAAAdwYXltZW50AAAABmFtb3VudAUAAAAJZmVlQW1vdW50BgkAAAIAAAABAgAAABJJbnZhbGlkIGZlZSBhbW91bnQFAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAACmJ1cm5GZWVJbnYJAAP8AAAABAUAAAAQZW1pc3Npb25Db250cmFjdAIAAAAEYnVybgUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkCAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAAA25pbAMJAAAAAAAAAgUAAAAKYnVybkZlZUludgUAAAAKYnVybkZlZUludgQAAAAPYWRkQXNzZXRBY3Rpb25zCQEAAAAKaW5zZXJ0Tm9kZQAAAAIFAAAADmFzc2V0c0xpc3ROYW1lBQAAAAdhc3NldElkCQAFFAAAAAIJAARNAAAAAgUAAAAPYWRkQXNzZXRBY3Rpb25zCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5QXNzZXRJbWFnZQAAAAEFAAAAB2Fzc2V0SWQFAAAACmFzc2V0SW1hZ2UFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAR2b3RlAAAAAgAAAAdhc3NldElkAAAAB2luRmF2b3IEAAAACWVuZEhlaWdodAkAAGQAAAACBQAAAAtzdGFydEhlaWdodAUAAAAOdm90aW5nRHVyYXRpb24EAAAACmNoZWNrQXNzZXQDCQEAAAAMY29udGFpbnNOb2RlAAAAAgUAAAAOYXNzZXRzTGlzdE5hbWUFAAAAB2Fzc2V0SWQGCQAAAgAAAAECAAAADUludmFsaWQgYXNzZXQDCQAAAAAAAAIFAAAACmNoZWNrQXNzZXQFAAAACmNoZWNrQXNzZXQEAAAAC2NoZWNrSGVpZ2h0AwkAAGYAAAACBQAAAAllbmRIZWlnaHQFAAAABmhlaWdodAYJAAACAAAAAQIAAAA0Q3VycmVudCB2b3RpbmcgaXMgb3ZlciBidXQgcmVzdWx0cyBhcmUgbm90IGZpbmFsaXplZAMJAAAAAAAAAgUAAAALY2hlY2tIZWlnaHQFAAAAC2NoZWNrSGVpZ2h0BAAAAAt1c2VyQWRkcmVzcwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADmd3eEFtb3VudEF0RW5kCQEAAAAYZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0AAAAAgUAAAALdXNlckFkZHJlc3MFAAAACWVuZEhlaWdodAQAAAATY2hlY2tHd3hBbW91bnRBdEVuZAMJAABmAAAAAgUAAAAOZ3d4QW1vdW50QXRFbmQAAAAAAAAAAAAGCQAAAgAAAAECAAAAKFlvdSdsbCBub3QgaGF2ZSBnV1ggYXQgdGhlIGVuZCBvZiB2b3RpbmcDCQAAAAAAAAIFAAAAE2NoZWNrR3d4QW1vdW50QXRFbmQFAAAAE2NoZWNrR3d4QW1vdW50QXRFbmQEAAAADXZvdGVzTGlzdE5hbWUJAQAAABBnZXRWb3Rlc0xpc3ROYW1lAAAAAQUAAAAHYXNzZXRJZAQAAAALdXNlclZvdGVLZXkJAQAAABNrZXlVc2VyVm90ZUJ5UGVyaW9kAAAAAwUAAAALdXNlckFkZHJlc3MFAAAAB2Fzc2V0SWQFAAAADWN1cnJlbnRQZXJpb2QEAAAADnVzZXJWb3RlT3JVbml0CQAEIgAAAAEFAAAAC3VzZXJWb3RlS2V5BAAAAA91c2VyVm90ZUFjdGlvbnMJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAALdXNlclZvdGVLZXkJAQAAAA5mb3JtYXRVc2VyVm90ZQAAAAIFAAAADmd3eEFtb3VudEF0RW5kBQAAAAdpbkZhdm9yBQAAAANuaWwEAAAAEHZvdGVzTGlzdEFjdGlvbnMDCQAAAAAAAAIFAAAADnVzZXJWb3RlT3JVbml0BQAAAAR1bml0CQEAAAAKaW5zZXJ0Tm9kZQAAAAIFAAAADXZvdGVzTGlzdE5hbWUFAAAAC3VzZXJBZGRyZXNzBQAAAANuaWwJAAUUAAAAAgkABE4AAAACBQAAABB2b3Rlc0xpc3RBY3Rpb25zBQAAAA91c2VyVm90ZUFjdGlvbnMFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKY2FuY2VsVm90ZQAAAAEAAAAHYXNzZXRJZAQAAAALdXNlckFkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAA12b3Rlc0xpc3ROYW1lCQEAAAAQZ2V0Vm90ZXNMaXN0TmFtZQAAAAEFAAAAB2Fzc2V0SWQEAAAAC3VzZXJWb3RlS2V5CQEAAAATa2V5VXNlclZvdGVCeVBlcmlvZAAAAAMFAAAAC3VzZXJBZGRyZXNzBQAAAAdhc3NldElkBQAAAA1jdXJyZW50UGVyaW9kBAAAAA51c2VyVm90ZU9yVW5pdAkABCIAAAABBQAAAAt1c2VyVm90ZUtleQQAAAAJY2hlY2tWb3RlCQEAAAALdmFsdWVPckVsc2UAAAACCQAEIgAAAAEFAAAAC3VzZXJWb3RlS2V5AgAAABFOb3RoaW5nIHRvIGNhbmNlbAMJAAAAAAAAAgUAAAAJY2hlY2tWb3RlBQAAAAljaGVja1ZvdGUEAAAAEHZvdGVzTGlzdEFjdGlvbnMJAQAAAApkZWxldGVOb2RlAAAAAgUAAAANdm90ZXNMaXN0TmFtZQUAAAALdXNlckFkZHJlc3MEAAAAD3VzZXJWb3RlQWN0aW9ucwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAt1c2VyVm90ZUtleQUAAAADbmlsCQAFFAAAAAIJAAROAAAAAgUAAAAQdm90ZXNMaXN0QWN0aW9ucwUAAAAPdXNlclZvdGVBY3Rpb25zBQAAAAR1bml0CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5maW5hbGl6ZVZvdGluZwAAAAEAAAAHYXNzZXRJZAkABRQAAAACBQAAAANuaWwFAAAABHVuaXQAAAABaQEAAAASc2V0Vm90aW5nVGhyZXNob2xkAAAAAQAAAAxuZXdUaHJlc2hvbGQEAAAAC2NoZWNrQ2FsbGVyCQEAAAAIdGhpc09ubHkAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAAUUAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAASa2V5Vm90aW5nVGhyZXNob2xkBQAAAAxuZXdUaHJlc2hvbGQFAAAAA25pbAUAAAAEdW5pdAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAGc2V0RmVlAAAAAQAAAAZuZXdGZWUEAAAAC2NoZWNrQ2FsbGVyCQEAAAAIdGhpc09ubHkAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAAUUAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMa2V5RmVlQW1vdW50BQAAAAZuZXdGZWUFAAAAA25pbAUAAAAEdW5pdAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAbZ3d4QXZhaWxhYmxlRm9yVm90ZVJFQURPTkxZAAAAAQAAAAdhZGRyZXNzCQAFFAAAAAIFAAAAA25pbAUAAAAEdW5pdAAAAABeKwD7", "height": 1947947, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6BXxbAekpMYDP1RwLSeBovPvEJRdUsUNFJou2qjKaLWx Next: none Diff:
OldNewDifferences
201201 then true
202202 else throw("Invalid start height")]
203203 if ((checks == checks))
204- then $Tuple2([StringEntry(keyBoostingContract, boostingContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), IntegerEntry(keyFeeAmount, feeAmountPrm), StringEntry(keyWxAssetId, wxAssetIdPrm), IntegerEntry(keyVotingThreshold, votingThresholdPrm), IntegerEntry(keyVotingDuration, votingDurationPrm), IntegerEntry(keyVoteBeforeElimination, voteBeforeElimination), IntegerEntry(keyStartHeight, startHeightPrm), IntegerEntry(keyCurrentPeriod, 0)], unit)
204+ then $Tuple2([StringEntry(keyBoostingContract, boostingContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), IntegerEntry(keyFeeAmount, feeAmountPrm), StringEntry(keyWxAssetId, wxAssetIdPrm), IntegerEntry(keyVotingThreshold, votingThresholdPrm), IntegerEntry(keyVotingDuration, votingDurationPrm), IntegerEntry(keyVoteBeforeElimination, voteBeforeEliminationPrm), IntegerEntry(keyStartHeight, startHeightPrm), IntegerEntry(keyCurrentPeriod, 0)], unit)
205205 else throw("Strict value is not equal to itself.")
206206 }
207207
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "__"
55
66 func asInt (val) = match val {
77 case valInt: Int =>
88 valInt
99 case _ =>
1010 throw("Failed to cast into Int")
1111 }
1212
1313
1414 let keyFeeAmount = makeString(["%s", "fee"], separator)
1515
1616 let keyWxAssetId = makeString(["%s", "wxAssetId"], separator)
1717
1818 let keyVotingThreshold = makeString(["%s", "votingThreshold"], separator)
1919
2020 let keyVotingDuration = makeString(["%s", "epochLength"], separator)
2121
2222 let keyVoteBeforeElimination = makeString(["%s", "voteBeforeElimination"], separator)
2323
2424 let keyStartHeight = makeString(["%s", "currentVotingHeightStart"], separator)
2525
2626 let keyCurrentPeriod = makeString(["%s", "currentEpoch"], separator)
2727
2828 let keyBoostingContract = makeString(["%s", "boostingContract"], separator)
2929
3030 let keyEmissionContract = makeString(["%s", "emissionContract"], separator)
3131
3232 func keyAssetImage (assetId) = makeString(["%s", "assetImage"], separator)
3333
3434
3535 let assetsListName = "__assets"
3636
3737 func getVotesListName (assetId) = ("%s__votes__" + assetId)
3838
3939
4040 func keyListHead (listName) = makeString([("%s%s" + listName), "head"], separator)
4141
4242
4343 func keyListSize (listName) = makeString([("%s%s" + listName), "size"], separator)
4444
4545
4646 func keyListPrev (listName,id) = makeString([("%s%s%s" + listName), id, "prev"], separator)
4747
4848
4949 func keyListNext (listName,id) = makeString([("%s%s%s" + listName), id, "next"], separator)
5050
5151
5252 func keyUserVoteByPeriod (userAddress,assetId,period) = makeString(["%s%d%s%s", "vru", toString(period), assetId, userAddress], separator)
5353
5454
5555 func formatUserVote (total,inFavor) = {
5656 let totalYes = if (inFavor)
5757 then total
5858 else 0
5959 let totalNo = if (inFavor)
6060 then 0
6161 else total
6262 makeString(["%d%d", toString(totalYes), toString(totalNo)], separator)
6363 }
6464
6565
6666 func parseUserVote (input) = {
6767 let parts = split(input, separator)
6868 let totalYesIdx = 1
6969 let totalNoIdx = 2
7070 let totalYes = parseIntValue(parts[totalYesIdx])
7171 let totalNo = parseIntValue(parts[totalNoIdx])
7272 let inFavor = if ((totalYes > 0))
7373 then (totalNo == 0)
7474 else false
7575 let against = if ((totalYes == 0))
7676 then (totalNo > 0)
7777 else false
7878 let checkTotals = if (if (inFavor)
7979 then true
8080 else against)
8181 then true
8282 else throw("Invalid user vote value")
8383 if ((checkTotals == checkTotals))
8484 then {
8585 let total = if (inFavor)
8686 then totalYes
8787 else totalNo
8888 $Tuple2(total, inFavor)
8989 }
9090 else throw("Strict value is not equal to itself.")
9191 }
9292
9393
9494 func thisOnly (i) = if ((i.caller == this))
9595 then true
9696 else throw("Permission denied")
9797
9898
9999 func getIntegerOrZero (key) = valueOrElse(getInteger(this, key), 0)
100100
101101
102102 func getIntegerOrFail (key) = valueOrErrorMessage(getInteger(this, key), (key + " is not defined"))
103103
104104
105105 func getStringOrEmpty (key) = valueOrElse(getString(this, key), "")
106106
107107
108108 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (key + " is not defined"))
109109
110110
111111 let feeAmount = getIntegerOrFail(keyFeeAmount)
112112
113113 let wxAssetId = fromBase58String(getStringOrFail(keyWxAssetId))
114114
115115 let votingThreshold = getIntegerOrFail(keyVotingThreshold)
116116
117117 let votingDuration = getIntegerOrFail(keyVotingDuration)
118118
119119 let voteBeforeElimination = getIntegerOrFail(keyVoteBeforeElimination)
120120
121121 let startHeight = getIntegerOrFail(keyStartHeight)
122122
123123 let currentPeriod = getIntegerOrFail(keyCurrentPeriod)
124124
125125 let boostingContract = addressFromStringValue(getStringOrFail(keyBoostingContract))
126126
127127 let emissionContract = addressFromStringValue(getStringOrFail(keyEmissionContract))
128128
129129 func getPeriodEndHeight (period) = (startHeight + ((period + 1) * votingDuration))
130130
131131
132132 func getCurrentPeriodEndHeight () = getPeriodEndHeight(currentPeriod)
133133
134134
135135 func getUserGwxAmountAtHeight (userAddress,targetHeight) = {
136136 let gwxAmount = invoke(boostingContract, "getUserGwxAmountAtHeightREADONLY", [userAddress, targetHeight], nil)
137137 asInt(gwxAmount)
138138 }
139139
140140
141141 func containsNode (listName,id) = {
142142 let head = getString(this, keyListHead(listName))
143143 let prev = getString(this, keyListPrev(listName, id))
144144 let next = getString(this, keyListNext(listName, id))
145145 if (if ((id == head))
146146 then true
147147 else (prev != unit))
148148 then true
149149 else (next != unit)
150150 }
151151
152152
153153 func insertNode (listName,id) = {
154154 let head = getString(this, keyListHead(listName))
155155 let listSize = valueOrElse(getInteger(this, keyListSize(listName)), 0)
156156 let checkNode = if (!(containsNode(listName, id)))
157157 then true
158158 else throw("Node exists")
159159 if ((checkNode == checkNode))
160160 then (([IntegerEntry(keyListSize(listName), (listSize + 1))] ++ (if (isDefined(head))
161161 then [StringEntry(keyListNext(listName, id), value(head)), StringEntry(keyListPrev(listName, value(head)), id)]
162162 else nil)) ++ [StringEntry(keyListHead(listName), id)])
163163 else throw("Strict value is not equal to itself.")
164164 }
165165
166166
167167 func deleteNode (listName,id) = {
168168 let head = getString(this, keyListHead(listName))
169169 let listSize = valueOrElse(getInteger(this, keyListSize(listName)), 0)
170170 let prev = getString(this, keyListPrev(listName, id))
171171 let next = getString(this, keyListNext(listName, id))
172172 ([IntegerEntry(keyListSize(listName), (listSize - 1))] ++ (if (if (isDefined(prev))
173173 then isDefined(next)
174174 else false)
175175 then [StringEntry(keyListNext(listName, value(prev)), value(next)), StringEntry(keyListPrev(listName, value(next)), value(prev)), DeleteEntry(keyListPrev(listName, id)), DeleteEntry(keyListNext(listName, id))]
176176 else if (isDefined(next))
177177 then [StringEntry(keyListHead(listName), value(next)), DeleteEntry(keyListNext(listName, id)), DeleteEntry(keyListPrev(listName, value(next)))]
178178 else if (isDefined(prev))
179179 then [DeleteEntry(keyListPrev(listName, id)), DeleteEntry(keyListNext(listName, value(prev)))]
180180 else if ((id == head))
181181 then [DeleteEntry(keyListHead(listName))]
182182 else throw("Invalid node")))
183183 }
184184
185185
186186 @Callable(i)
187187 func constructor (boostingContractPrm,emissionContractPrm,feeAmountPrm,wxAssetIdPrm,votingThresholdPrm,votingDurationPrm,voteBeforeEliminationPrm,startHeightPrm) = {
188188 let checks = [thisOnly(i), if (isDefined(addressFromString(boostingContractPrm)))
189189 then true
190190 else throw("Invalid boosting contract address"), if (isDefined(addressFromString(emissionContractPrm)))
191191 then true
192192 else throw("Invalid emission contract address"), if ((feeAmountPrm >= 0))
193193 then true
194194 else throw("Invalid fee amount"), if (isDefined(assetInfo(fromBase58String(wxAssetIdPrm))))
195195 then true
196196 else throw("Invalid WX asset ID"), if ((votingThresholdPrm >= 0))
197197 then true
198198 else throw("Invalid voting threshold"), if ((votingDurationPrm > 0))
199199 then true
200200 else throw("Invalid voting duration"), if (((startHeightPrm + votingDurationPrm) > height))
201201 then true
202202 else throw("Invalid start height")]
203203 if ((checks == checks))
204- then $Tuple2([StringEntry(keyBoostingContract, boostingContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), IntegerEntry(keyFeeAmount, feeAmountPrm), StringEntry(keyWxAssetId, wxAssetIdPrm), IntegerEntry(keyVotingThreshold, votingThresholdPrm), IntegerEntry(keyVotingDuration, votingDurationPrm), IntegerEntry(keyVoteBeforeElimination, voteBeforeElimination), IntegerEntry(keyStartHeight, startHeightPrm), IntegerEntry(keyCurrentPeriod, 0)], unit)
204+ then $Tuple2([StringEntry(keyBoostingContract, boostingContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), IntegerEntry(keyFeeAmount, feeAmountPrm), StringEntry(keyWxAssetId, wxAssetIdPrm), IntegerEntry(keyVotingThreshold, votingThresholdPrm), IntegerEntry(keyVotingDuration, votingDurationPrm), IntegerEntry(keyVoteBeforeElimination, voteBeforeEliminationPrm), IntegerEntry(keyStartHeight, startHeightPrm), IntegerEntry(keyCurrentPeriod, 0)], unit)
205205 else throw("Strict value is not equal to itself.")
206206 }
207207
208208
209209
210210 @Callable(i)
211211 func suggest (assetId,assetImage) = {
212212 let info = valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "Invalid asset ID")
213213 let payment = value(i.payments[0])
214214 let checks = [if ((info.issuer == i.caller))
215215 then true
216216 else throw("Asset can only be suggested by its issuer"), if ((value(payment.assetId) == wxAssetId))
217217 then true
218218 else throw("Invalid fee asset"), if ((payment.amount == feeAmount))
219219 then true
220220 else throw("Invalid fee amount")]
221221 if ((checks == checks))
222222 then {
223223 let burnFeeInv = invoke(emissionContract, "burn", nil, [AttachedPayment(payment.assetId, payment.amount)])
224224 if ((burnFeeInv == burnFeeInv))
225225 then {
226226 let addAssetActions = insertNode(assetsListName, assetId)
227227 $Tuple2((addAssetActions :+ StringEntry(keyAssetImage(assetId), assetImage)), unit)
228228 }
229229 else throw("Strict value is not equal to itself.")
230230 }
231231 else throw("Strict value is not equal to itself.")
232232 }
233233
234234
235235
236236 @Callable(i)
237237 func vote (assetId,inFavor) = {
238238 let endHeight = (startHeight + votingDuration)
239239 let checkAsset = if (containsNode(assetsListName, assetId))
240240 then true
241241 else throw("Invalid asset")
242242 if ((checkAsset == checkAsset))
243243 then {
244244 let checkHeight = if ((endHeight > height))
245245 then true
246246 else throw("Current voting is over but results are not finalized")
247247 if ((checkHeight == checkHeight))
248248 then {
249249 let userAddress = toString(i.caller)
250250 let gwxAmountAtEnd = getUserGwxAmountAtHeight(userAddress, endHeight)
251251 let checkGwxAmountAtEnd = if ((gwxAmountAtEnd > 0))
252252 then true
253253 else throw("You'll not have gWX at the end of voting")
254254 if ((checkGwxAmountAtEnd == checkGwxAmountAtEnd))
255255 then {
256256 let votesListName = getVotesListName(assetId)
257257 let userVoteKey = keyUserVoteByPeriod(userAddress, assetId, currentPeriod)
258258 let userVoteOrUnit = getString(userVoteKey)
259259 let userVoteActions = [StringEntry(userVoteKey, formatUserVote(gwxAmountAtEnd, inFavor))]
260260 let votesListActions = if ((userVoteOrUnit == unit))
261261 then insertNode(votesListName, userAddress)
262262 else nil
263263 $Tuple2((votesListActions ++ userVoteActions), unit)
264264 }
265265 else throw("Strict value is not equal to itself.")
266266 }
267267 else throw("Strict value is not equal to itself.")
268268 }
269269 else throw("Strict value is not equal to itself.")
270270 }
271271
272272
273273
274274 @Callable(i)
275275 func cancelVote (assetId) = {
276276 let userAddress = toString(i.caller)
277277 let votesListName = getVotesListName(assetId)
278278 let userVoteKey = keyUserVoteByPeriod(userAddress, assetId, currentPeriod)
279279 let userVoteOrUnit = getString(userVoteKey)
280280 let checkVote = valueOrElse(getString(userVoteKey), "Nothing to cancel")
281281 if ((checkVote == checkVote))
282282 then {
283283 let votesListActions = deleteNode(votesListName, userAddress)
284284 let userVoteActions = [DeleteEntry(userVoteKey)]
285285 $Tuple2((votesListActions ++ userVoteActions), unit)
286286 }
287287 else throw("Strict value is not equal to itself.")
288288 }
289289
290290
291291
292292 @Callable(i)
293293 func finalizeVoting (assetId) = $Tuple2(nil, unit)
294294
295295
296296
297297 @Callable(i)
298298 func setVotingThreshold (newThreshold) = {
299299 let checkCaller = thisOnly(i)
300300 if ((checkCaller == checkCaller))
301301 then $Tuple2([IntegerEntry(keyVotingThreshold, newThreshold)], unit)
302302 else throw("Strict value is not equal to itself.")
303303 }
304304
305305
306306
307307 @Callable(i)
308308 func setFee (newFee) = {
309309 let checkCaller = thisOnly(i)
310310 if ((checkCaller == checkCaller))
311311 then $Tuple2([IntegerEntry(keyFeeAmount, newFee)], unit)
312312 else throw("Strict value is not equal to itself.")
313313 }
314314
315315
316316
317317 @Callable(i)
318318 func gwxAvailableForVoteREADONLY (address) = $Tuple2(nil, unit)
319319
320320

github/deemru/w8io/3ef1775 
68.71 ms