tx · FauhTV3t1uKipTbcvoFgNQJJeBu7ZNnSzhSCch6HpHzk

3P38c43ME7gAtDWoM9NqA6juRMzjF2Uxz3b:  -0.01000000 Waves

2022.11.26 16:41 [3399611] smart account 3P38c43ME7gAtDWoM9NqA6juRMzjF2Uxz3b > SELF 0.00000000 Waves

{ "type": 13, "id": "FauhTV3t1uKipTbcvoFgNQJJeBu7ZNnSzhSCch6HpHzk", "fee": 1000000, "feeAssetId": null, "timestamp": 1669470130863, "version": 2, "chainId": 87, "sender": "3P38c43ME7gAtDWoM9NqA6juRMzjF2Uxz3b", "senderPublicKey": "736nx537Ug8JwwEykQDqQ4Grp4QqYmec6SfQ29hQkq4U", "proofs": [ "4WQnsci7uHuNkGRD4YMVWerkqyvuQGLjZmLLcughycEjpwx6BS6FuoAS9wyHt3iwHkjdhop4SvrLEGcfocACURd" ], "script": "base64:BgIXCAISAwoBCBIDCgEIEgASABIDCgEIEgAcARV0cnlHZXRJbnRlZ2VyRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCaCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCdCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAENdHJ5R2V0Qm9vbGVhbgEDa2V5BAckbWF0Y2gwCQCgCAEFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBwENdHJ5R2V0SW50ZWdlcgEDa2V5CQEVdHJ5R2V0SW50ZWdlckV4dGVybmFsAgUEdGhpcwUDa2V5AQx0cnlHZXRTdHJpbmcBA2tleQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgUEdGhpcwUDa2V5ARBnZXRWb3RlSGVpZ2h0S2V5AQppZGVudGlmaWVyCQCsAgICElZPVEVfSEVJR0hUX1NUQVJUXwUKaWRlbnRpZmllcgEKdG90YWxWb3RlZAEKaWRlbnRpZmllcgkArAICAg1BTU9VTlRfVk9URVNfBQppZGVudGlmaWVyAQ50b3RhbFByb2Nlc3NlZAEKaWRlbnRpZmllcgkArAICAhdBTU9VTlRfVk9URVNfUFJPQ0VTU0VEXwUKaWRlbnRpZmllcgEaZ2V0QWN0aXZlVm90ZUlkZW50aWZpZXJLZXkAAhdDVVJSRU5UX1ZPVEVfSURFTlRJRklFUgEOZ2V0RHVyYXRpb25LZXkAAg1WT1RFX0RVUkFUSU9OAQ9nZXRWb3RlUG93ZXJLZXkBB2FkZHJlc3MJAKwCAgkArAICAgV1c2VyXwUHYWRkcmVzcwILX3ZvdGUtcG93ZXIBG2dldFVzZXJWb3RlRm9ySWRlbnRpZmllcktleQIHYWRkcmVzcwppZGVudGlmaWVyCQCsAgIJAKwCAgkArAICCQCsAgICBXVzZXJfBQdhZGRyZXNzAgxfaWRlbnRpZmllcl8FCmlkZW50aWZpZXICBV92b3RlASBnZXRVc2VyUHJvY2Vzc2VkRm9ySWRlbnRpZmllcktleQIHYWRkcmVzcwppZGVudGlmaWVyCQCsAgIJAKwCAgkArAICCQCsAgICBXVzZXJfBQdhZGRyZXNzAgxfaWRlbnRpZmllcl8FCmlkZW50aWZpZXICCl9wcm9jZXNzZWQBIWdldFZvdGVzRm9ySWRlbnRpZmllckFuZE9wdGlvbktleQIKaWRlbnRpZmllcgZvcHRpb24JAKwCAgkArAICCQCsAgICDHRvdGFsX3ZvdGVzXwUKaWRlbnRpZmllcgIIX29wdGlvbl8FBm9wdGlvbgEJZ2V0T3JhY2xlAAkBB0FkZHJlc3MBCQDZBAEJAQx0cnlHZXRTdHJpbmcBAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwENZ2V0RWdnQXNzZXRJZAAJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACEXN0YXRpY19lZ2dBc3NldElkAQtnZXREdXJhdGlvbgADCQAAAgkBFXRyeUdldEludGVnZXJFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEOZ2V0RHVyYXRpb25LZXkAAAAAkE4JARV0cnlHZXRJbnRlZ2VyRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBDmdldER1cmF0aW9uS2V5AAENZ2V0Vm90ZUhlaWdodAEKaWRlbnRpZmllcgkBDXRyeUdldEludGVnZXIBCQEQZ2V0Vm90ZUhlaWdodEtleQEFCmlkZW50aWZpZXIBF2dldEFjdGl2ZVZvdGVJZGVudGlmaWVyAAkBDHRyeUdldFN0cmluZwEJARpnZXRBY3RpdmVWb3RlSWRlbnRpZmllcktleQABDGdldFZvdGVQb3dlcgEHYWRkcmVzcwkBDXRyeUdldEludGVnZXIBCQEPZ2V0Vm90ZVBvd2VyS2V5AQUHYWRkcmVzcwEQZ2V0VXNlclZvdGVQb3dlcgEHYWRkcmVzcwkBDXRyeUdldEludGVnZXIBCQEPZ2V0Vm90ZVBvd2VyS2V5AQUHYWRkcmVzcwEYZ2V0VXNlclZvdGVGb3JJZGVudGlmaWVyAgdhZGRyZXNzCmlkZW50aWZpZXIJAQx0cnlHZXRTdHJpbmcBCQEbZ2V0VXNlclZvdGVGb3JJZGVudGlmaWVyS2V5AgUHYWRkcmVzcwUKaWRlbnRpZmllcgENZ2V0VG90YWxWb3RlZAEKaWRlbnRpZmllcgkBDXRyeUdldEludGVnZXIBCQEKdG90YWxWb3RlZAEFCmlkZW50aWZpZXIBEWdldFRvdGFsUHJvY2Vzc2VkAQppZGVudGlmaWVyCQENdHJ5R2V0SW50ZWdlcgEJAQ50b3RhbFByb2Nlc3NlZAEFCmlkZW50aWZpZXIBHWdldFVzZXJQcm9jZXNzZWRGb3JJZGVudGlmaWVyAgdhZGRyZXNzCmlkZW50aWZpZXIJAQ10cnlHZXRCb29sZWFuAQkBIGdldFVzZXJQcm9jZXNzZWRGb3JJZGVudGlmaWVyS2V5AgUHYWRkcmVzcwUKaWRlbnRpZmllcgEeZ2V0Vm90ZXNGb3JJZGVudGlmaWVyQW5kT3B0aW9uAgppZGVudGlmaWVyBm9wdGlvbgkBDXRyeUdldEludGVnZXIBCQEhZ2V0Vm90ZXNGb3JJZGVudGlmaWVyQW5kT3B0aW9uS2V5AgUKaWRlbnRpZmllcgUGb3B0aW9uAQx2b3RlSXNBY3RpdmUABAppZGVudGlmaWVyCQEXZ2V0QWN0aXZlVm90ZUlkZW50aWZpZXIAAwkAAAIFCmlkZW50aWZpZXICAAcECnZvdGVIZWlnaHQJAQ1nZXRWb3RlSGVpZ2h0AQUKaWRlbnRpZmllcgkAZgIJAGQCBQp2b3RlSGVpZ2h0CQELZ2V0RHVyYXRpb24ABQZoZWlnaHQBDnZvdGVQcm9jZXNzaW5nAgFpBHZvdGUDCQEBIQEJAQx2b3RlSXNBY3RpdmUACQACAQIhRlZQOiBObyB2b3RlIGlzIGN1cnJlbnRseSBydW5uaW5nBAppZGVudGlmaWVyCQEXZ2V0QWN0aXZlVm90ZUlkZW50aWZpZXIABAZmcFVzZXIJARBnZXRVc2VyVm90ZVBvd2VyAQkApQgBCAUBaQZjYWxsZXIDCQAAAgUGZnBVc2VyAAAJAAIBAiNGVlA6IFBsZWFzZSBzdGFrZSBzb21lIGR1Y2tzIGZpcnN0IQQHb2xkVm90ZQkBGGdldFVzZXJWb3RlRm9ySWRlbnRpZmllcgIJAKUIAQgFAWkGY2FsbGVyBQppZGVudGlmaWVyBAt1bmlxdWVWb3RlcwMJAAACBQdvbGRWb3RlAgAJAGQCCQENZ2V0VG90YWxWb3RlZAEFCmlkZW50aWZpZXIAAQkBDWdldFRvdGFsVm90ZWQBBQppZGVudGlmaWVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKdG90YWxWb3RlZAEFCmlkZW50aWZpZXIFC3VuaXF1ZVZvdGVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARtnZXRVc2VyVm90ZUZvcklkZW50aWZpZXJLZXkCCQClCAEIBQFpBmNhbGxlcgUKaWRlbnRpZmllcgkApQMBBQR2b3RlBQNuaWwGAWkBD2NvbmZpZ3VyZU9yYWNsZQEGb3JhY2xlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIPUkNPOiBhZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQICFHN0YXRpY19vcmFjbGVBZGRyZXNzBQZvcmFjbGUFA25pbAFpAQlzdGFydFZvdGUBCmlkZW50aWZpZXIDCQECIT0CCAUBaQZjYWxsZXIJAQlnZXRPcmFjbGUACQACAQkArAICCQCsAgIJAKwCAgIuRVNWOiBPbmx5IHRoZSBhZG1pbiBjYW4gc3RhcnQgYSB2b3RlIGZvciBub3chIAkApQgBCAUBaQZjYWxsZXICASAJAKUIAQkBCWdldE9yYWNsZQADCQEMdm90ZUlzQWN0aXZlAAkAAgECJUNTVjogVGhlcmUgaXMgYWxyZWFkeSBhIHZvdGUgcnVubmluZyEJAMwIAgkBC1N0cmluZ0VudHJ5AgIXQ1VSUkVOVF9WT1RFX0lERU5USUZJRVIFCmlkZW50aWZpZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgISVk9URV9IRUlHSFRfU1RBUlRfBQppZGVudGlmaWVyBQZoZWlnaHQFA25pbAFpAQd2b3RlWWVzAAkBDnZvdGVQcm9jZXNzaW5nAgUBaQYBaQEGdm90ZU5vAAkBDnZvdGVQcm9jZXNzaW5nAgUBaQcBaQEOY2FsY3VsYXRlVm90ZXMBB3dhbGxldHMECmlkZW50aWZpZXIJARdnZXRBY3RpdmVWb3RlSWRlbnRpZmllcgADCQAAAgUKaWRlbnRpZmllcgIACQACAQIcRkNWOiBObyBhY3RpdmUgdm90ZSBydW5uaW5nIQQKdm90ZUhlaWdodAkBDWdldFZvdGVIZWlnaHQBBQppZGVudGlmaWVyAwkAZgIJAGQCBQp2b3RlSGVpZ2h0CQELZ2V0RHVyYXRpb24ABQZoZWlnaHQJAAIBAh5GRlY6IFZvdGUgaXMgbm90IGZpbmlzaGVkIHlldCEEC3dhbGxldHNMaXN0CQC1CQIFB3dhbGxldHMCATsKAQxoYW5kbGVWb3RlcnMCA2FjYwV2b3RlcgQEdXNlcgUFdm90ZXIDCQEdZ2V0VXNlclByb2Nlc3NlZEZvcklkZW50aWZpZXICBQR1c2VyBQppZGVudGlmaWVyCQACAQkArAICCQCsAgICBUZDVjogBQR1c2VyAhYgaXMgYWxyZWFkeSBwcm9jZXNzZWQhBAZ1c2VyRlAJARBnZXRVc2VyVm90ZVBvd2VyAQUEdXNlcgQEdm90ZQkBGGdldFVzZXJWb3RlRm9ySWRlbnRpZmllcgIFBHVzZXIFCmlkZW50aWZpZXIDCQAAAgUEdm90ZQIACQACAQkArAICCQCsAgICBUZDVjogBQR1c2VyAg4gZGlkIG5vdCB2b3RlIQQHdm90ZUtleQkBIWdldFZvdGVzRm9ySWRlbnRpZmllckFuZE9wdGlvbktleQIFCmlkZW50aWZpZXIFBHZvdGUEB3ZvdGVTVW0DCQAAAgUEdm90ZQIEdHJ1ZQkAZAIIBQNhY2MCXzIFBnVzZXJGUAkAZAIIBQNhY2MCXzMFBnVzZXJGUAMJAAACBQd2b3RlU1VtBQd2b3RlU1VtCQDOCAIIBQNhY2MCXzEJAMwIAgkBDEJvb2xlYW5FbnRyeQIJASBnZXRVc2VyUHJvY2Vzc2VkRm9ySWRlbnRpZmllcktleQIFBHVzZXIFCmlkZW50aWZpZXIGBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EBnJlc3VsdAoAAiRsBQt3YWxsZXRzTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsCQEeZ2V0Vm90ZXNGb3JJZGVudGlmaWVyQW5kT3B0aW9uAgUKaWRlbnRpZmllcgIEdHJ1ZQkBHmdldFZvdGVzRm9ySWRlbnRpZmllckFuZE9wdGlvbgIFCmlkZW50aWZpZXICBWZhbHNlCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxoYW5kbGVWb3RlcnMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQRbmV3VG90YWxQcm9jZXNzZWQJAGQCCQERZ2V0VG90YWxQcm9jZXNzZWQBBQppZGVudGlmaWVyCQCQAwEFC3dhbGxldHNMaXN0CQDOCAIIBQZyZXN1bHQCXzEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b3RhbFByb2Nlc3NlZAEFCmlkZW50aWZpZXIFEW5ld1RvdGFsUHJvY2Vzc2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEhZ2V0Vm90ZXNGb3JJZGVudGlmaWVyQW5kT3B0aW9uS2V5AgUKaWRlbnRpZmllcgIEdHJ1ZQgFBnJlc3VsdAJfMgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBIWdldFZvdGVzRm9ySWRlbnRpZmllckFuZE9wdGlvbktleQIFCmlkZW50aWZpZXICBWZhbHNlCAUGcmVzdWx0Al8zBQNuaWwBaQEMZmluYWxpemVWb3RlAAQKaWRlbnRpZmllcgkBF2dldEFjdGl2ZVZvdGVJZGVudGlmaWVyAAMJAAACBQppZGVudGlmaWVyAgAJAAIBAhxGRlY6IE5vIGFjdGl2ZSB2b3RlIHJ1bm5pbmchBAp2b3RlSGVpZ2h0CQENZ2V0Vm90ZUhlaWdodAEFCmlkZW50aWZpZXIDCQBmAgkAZAIFCnZvdGVIZWlnaHQJAQtnZXREdXJhdGlvbgAFBmhlaWdodAkAAgECHkZGVjogVm90ZSBpcyBub3QgZmluaXNoZWQgeWV0IQQKZmluaXNoVm90ZQkAAAIJARFnZXRUb3RhbFByb2Nlc3NlZAEFCmlkZW50aWZpZXIJAQ1nZXRUb3RhbFZvdGVkAQUKaWRlbnRpZmllcgMJAQEhAQUKZmluaXNoVm90ZQkAAgECHUZGVjogVm90ZSBpcyBub3QgY291bnRlZCB5ZXQhBAZyZXN1bHQJAGYCCQEeZ2V0Vm90ZXNGb3JJZGVudGlmaWVyQW5kT3B0aW9uAgUKaWRlbnRpZmllcgIEdHJ1ZQkBHmdldFZvdGVzRm9ySWRlbnRpZmllckFuZE9wdGlvbgIFCmlkZW50aWZpZXICBWZhbHNlCQDMCAIJAQtEZWxldGVFbnRyeQEJARpnZXRBY3RpdmVWb3RlSWRlbnRpZmllcktleQAJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAgdSRVNVTFRfBQppZGVudGlmaWVyCQClAwEFBnJlc3VsdAUDbmlsAGcoYDM=", "height": 3399611, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FEXUm49QDeJrV5y4i6MdWE3Jzy1bPF1p5tY5bvQZoum1 Next: E11H3hHudnqg3kuujnqoxevaiS9iYMgU87vX7htH4c8k Diff:
OldNewDifferences
172172 then throw((("FCV: " + user) + " did not vote!"))
173173 else {
174174 let voteKey = getVotesForIdentifierAndOptionKey(identifier, vote)
175- let currentVoteAmount = getVotesForIdentifierAndOption(identifier, vote)
176- (acc ++ [BooleanEntry(getUserProcessedForIdentifierKey(user, identifier), true), IntegerEntry(voteKey, (currentVoteAmount + userFP))])
175+ let voteSUm = if ((vote == "true"))
176+ then (acc._2 + userFP)
177+ else (acc._3 + userFP)
178+ if ((voteSUm == voteSUm))
179+ then (acc._1 ++ [BooleanEntry(getUserProcessedForIdentifierKey(user, identifier), true)])
180+ else throw("Strict value is not equal to itself.")
177181 }
178182 }
179183 }
181185 let result = {
182186 let $l = walletsList
183187 let $s = size($l)
184- let $acc0 = nil
188+ let $acc0 = $Tuple3(nil, getVotesForIdentifierAndOption(identifier, "true"), getVotesForIdentifierAndOption(identifier, "false"))
185189 func $f0_1 ($a,$i) = if (($i >= $s))
186190 then $a
187191 else handleVoters($a, $l[$i])
193197 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
194198 }
195199 let newTotalProcessed = (getTotalProcessed(identifier) + size(walletsList))
196- (result ++ [IntegerEntry(totalProcessed(identifier), newTotalProcessed)])
200+ (result._1 ++ [IntegerEntry(totalProcessed(identifier), newTotalProcessed), IntegerEntry(getVotesForIdentifierAndOptionKey(identifier, "true"), result._2), IntegerEntry(getVotesForIdentifierAndOptionKey(identifier, "false"), result._3)])
197201 }
198202 }
199203 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func tryGetIntegerExternal (address,key) = match getInteger(address, key) {
55 case b: Int =>
66 b
77 case _ =>
88 0
99 }
1010
1111
1212 func tryGetStringExternal (address,key) = match getString(address, key) {
1313 case a: String =>
1414 a
1515 case _ =>
1616 ""
1717 }
1818
1919
2020 func tryGetBoolean (key) = match getBoolean(key) {
2121 case b: Boolean =>
2222 b
2323 case _ =>
2424 false
2525 }
2626
2727
2828 func tryGetInteger (key) = tryGetIntegerExternal(this, key)
2929
3030
3131 func tryGetString (key) = tryGetStringExternal(this, key)
3232
3333
3434 func getVoteHeightKey (identifier) = ("VOTE_HEIGHT_START_" + identifier)
3535
3636
3737 func totalVoted (identifier) = ("AMOUNT_VOTES_" + identifier)
3838
3939
4040 func totalProcessed (identifier) = ("AMOUNT_VOTES_PROCESSED_" + identifier)
4141
4242
4343 func getActiveVoteIdentifierKey () = "CURRENT_VOTE_IDENTIFIER"
4444
4545
4646 func getDurationKey () = "VOTE_DURATION"
4747
4848
4949 func getVotePowerKey (address) = (("user_" + address) + "_vote-power")
5050
5151
5252 func getUserVoteForIdentifierKey (address,identifier) = (((("user_" + address) + "_identifier_") + identifier) + "_vote")
5353
5454
5555 func getUserProcessedForIdentifierKey (address,identifier) = (((("user_" + address) + "_identifier_") + identifier) + "_processed")
5656
5757
5858 func getVotesForIdentifierAndOptionKey (identifier,option) = ((("total_votes_" + identifier) + "_option_") + option)
5959
6060
6161 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
6262
6363
6464 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
6565
6666
6767 func getDuration () = if ((tryGetIntegerExternal(getOracle(), getDurationKey()) == 0))
6868 then 10000
6969 else tryGetIntegerExternal(getOracle(), getDurationKey())
7070
7171
7272 func getVoteHeight (identifier) = tryGetInteger(getVoteHeightKey(identifier))
7373
7474
7575 func getActiveVoteIdentifier () = tryGetString(getActiveVoteIdentifierKey())
7676
7777
7878 func getVotePower (address) = tryGetInteger(getVotePowerKey(address))
7979
8080
8181 func getUserVotePower (address) = tryGetInteger(getVotePowerKey(address))
8282
8383
8484 func getUserVoteForIdentifier (address,identifier) = tryGetString(getUserVoteForIdentifierKey(address, identifier))
8585
8686
8787 func getTotalVoted (identifier) = tryGetInteger(totalVoted(identifier))
8888
8989
9090 func getTotalProcessed (identifier) = tryGetInteger(totalProcessed(identifier))
9191
9292
9393 func getUserProcessedForIdentifier (address,identifier) = tryGetBoolean(getUserProcessedForIdentifierKey(address, identifier))
9494
9595
9696 func getVotesForIdentifierAndOption (identifier,option) = tryGetInteger(getVotesForIdentifierAndOptionKey(identifier, option))
9797
9898
9999 func voteIsActive () = {
100100 let identifier = getActiveVoteIdentifier()
101101 if ((identifier == ""))
102102 then false
103103 else {
104104 let voteHeight = getVoteHeight(identifier)
105105 ((voteHeight + getDuration()) > height)
106106 }
107107 }
108108
109109
110110 func voteProcessing (i,vote) = if (!(voteIsActive()))
111111 then throw("FVP: No vote is currently running")
112112 else {
113113 let identifier = getActiveVoteIdentifier()
114114 let fpUser = getUserVotePower(toString(i.caller))
115115 if ((fpUser == 0))
116116 then throw("FVP: Please stake some ducks first!")
117117 else {
118118 let oldVote = getUserVoteForIdentifier(toString(i.caller), identifier)
119119 let uniqueVotes = if ((oldVote == ""))
120120 then (getTotalVoted(identifier) + 1)
121121 else getTotalVoted(identifier)
122122 [IntegerEntry(totalVoted(identifier), uniqueVotes), StringEntry(getUserVoteForIdentifierKey(toString(i.caller), identifier), toString(vote))]
123123 }
124124 }
125125
126126
127127 @Callable(i)
128128 func configureOracle (oracle) = if ((i.caller != this))
129129 then throw("RCO: admin only")
130130 else [StringEntry("static_oracleAddress", oracle)]
131131
132132
133133
134134 @Callable(i)
135135 func startVote (identifier) = if ((i.caller != getOracle()))
136136 then throw(((("ESV: Only the admin can start a vote for now! " + toString(i.caller)) + " ") + toString(getOracle())))
137137 else if (voteIsActive())
138138 then throw("CSV: There is already a vote running!")
139139 else [StringEntry("CURRENT_VOTE_IDENTIFIER", identifier), IntegerEntry(("VOTE_HEIGHT_START_" + identifier), height)]
140140
141141
142142
143143 @Callable(i)
144144 func voteYes () = voteProcessing(i, true)
145145
146146
147147
148148 @Callable(i)
149149 func voteNo () = voteProcessing(i, false)
150150
151151
152152
153153 @Callable(i)
154154 func calculateVotes (wallets) = {
155155 let identifier = getActiveVoteIdentifier()
156156 if ((identifier == ""))
157157 then throw("FCV: No active vote running!")
158158 else {
159159 let voteHeight = getVoteHeight(identifier)
160160 if (((voteHeight + getDuration()) > height))
161161 then throw("FFV: Vote is not finished yet!")
162162 else {
163163 let walletsList = split(wallets, ";")
164164 func handleVoters (acc,voter) = {
165165 let user = voter
166166 if (getUserProcessedForIdentifier(user, identifier))
167167 then throw((("FCV: " + user) + " is already processed!"))
168168 else {
169169 let userFP = getUserVotePower(user)
170170 let vote = getUserVoteForIdentifier(user, identifier)
171171 if ((vote == ""))
172172 then throw((("FCV: " + user) + " did not vote!"))
173173 else {
174174 let voteKey = getVotesForIdentifierAndOptionKey(identifier, vote)
175- let currentVoteAmount = getVotesForIdentifierAndOption(identifier, vote)
176- (acc ++ [BooleanEntry(getUserProcessedForIdentifierKey(user, identifier), true), IntegerEntry(voteKey, (currentVoteAmount + userFP))])
175+ let voteSUm = if ((vote == "true"))
176+ then (acc._2 + userFP)
177+ else (acc._3 + userFP)
178+ if ((voteSUm == voteSUm))
179+ then (acc._1 ++ [BooleanEntry(getUserProcessedForIdentifierKey(user, identifier), true)])
180+ else throw("Strict value is not equal to itself.")
177181 }
178182 }
179183 }
180184
181185 let result = {
182186 let $l = walletsList
183187 let $s = size($l)
184- let $acc0 = nil
188+ let $acc0 = $Tuple3(nil, getVotesForIdentifierAndOption(identifier, "true"), getVotesForIdentifierAndOption(identifier, "false"))
185189 func $f0_1 ($a,$i) = if (($i >= $s))
186190 then $a
187191 else handleVoters($a, $l[$i])
188192
189193 func $f0_2 ($a,$i) = if (($i >= $s))
190194 then $a
191195 else throw("List size exceeds 20")
192196
193197 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
194198 }
195199 let newTotalProcessed = (getTotalProcessed(identifier) + size(walletsList))
196- (result ++ [IntegerEntry(totalProcessed(identifier), newTotalProcessed)])
200+ (result._1 ++ [IntegerEntry(totalProcessed(identifier), newTotalProcessed), IntegerEntry(getVotesForIdentifierAndOptionKey(identifier, "true"), result._2), IntegerEntry(getVotesForIdentifierAndOptionKey(identifier, "false"), result._3)])
197201 }
198202 }
199203 }
200204
201205
202206
203207 @Callable(i)
204208 func finalizeVote () = {
205209 let identifier = getActiveVoteIdentifier()
206210 if ((identifier == ""))
207211 then throw("FFV: No active vote running!")
208212 else {
209213 let voteHeight = getVoteHeight(identifier)
210214 if (((voteHeight + getDuration()) > height))
211215 then throw("FFV: Vote is not finished yet!")
212216 else {
213217 let finishVote = (getTotalProcessed(identifier) == getTotalVoted(identifier))
214218 if (!(finishVote))
215219 then throw("FFV: Vote is not counted yet!")
216220 else {
217221 let result = (getVotesForIdentifierAndOption(identifier, "true") > getVotesForIdentifierAndOption(identifier, "false"))
218222 [DeleteEntry(getActiveVoteIdentifierKey()), StringEntry(("RESULT_" + identifier), toString(result))]
219223 }
220224 }
221225 }
222226 }
223227
224228

github/deemru/w8io/3ef1775 
37.37 ms