tx · 3CqyxN32Tzw1gCYiegzS8L2R3iiZwLoEAPFbHXdR7Foj 3N6CYoCsxrcXKe75pQvvV3JqJrwJjm1t4QN: -0.01400000 Waves 2021.04.14 10:22 [1481820] smart account 3N6CYoCsxrcXKe75pQvvV3JqJrwJjm1t4QN > SELF 0.00000000 Waves
{ "type": 13, "id": "3CqyxN32Tzw1gCYiegzS8L2R3iiZwLoEAPFbHXdR7Foj", "fee": 1400000, "feeAssetId": null, "timestamp": 1618384924443, "version": 2, "chainId": 84, "sender": "3N6CYoCsxrcXKe75pQvvV3JqJrwJjm1t4QN", "senderPublicKey": "9NDcimsSfq5LxxqoVoq2nbMd1zPqZhFvr6mVUiXWwtM1", "proofs": [ "2SWCytu4WSTS7LyhK1LCpoVaRHzhAxxT2iLBxkreb7XGpir4DfMHSFkvaZuqjbcNymvuq8pUXkRfWGEHDBeUAhMf" ], "script": "base64:AAIEAAAAAAAAAAgIAhIECgIIAQAAABwAAAAADGFkbWluUHViS2V5MQEAAAAgBM915WTQwQ9OZ7kfE2TEGg3qhCRCMX0zkF1AWAqdk0oAAAAADGFkbWluUHViS2V5MgEAAAAgBM915WTQwQ9OZ7kfE2TEGg3qhCRCMX0zkF1AWAqdk0oAAAAADGFkbWluUHViS2V5MwEAAAAgBM915WTQwQ9OZ7kfE2TEGg3qhCRCMX0zkF1AWAqdk0oAAAAAEWtVc2VyUG9vbFZvdGVTV09QAgAAAAVfdm90ZQAAAAAOa1VzZXJQb29sU3RydWMCAAAAEF91c2VyX3Bvb2xfc3RydWMAAAAAEmtVc2VyVG90YWxWb3RlU1dPUAIAAAAVX3VzZXJfdG90YWxfU1dPUF92b3RlAAAAAA9rVXNlclRvdGFsU3RydWMCAAAAEV91c2VyX3RvdGFsX3N0cnVjAAAAAA1rUG9vbFZvdGVTV09QAgAAAApfdm90ZV9TV09QAAAAAAprUG9vbFN0cnVjAgAAAAtfcG9vbF9zdHJ1YwAAAAAOa1RvdGFsVm90ZVNXT1ACAAAAD3RvdGFsX3ZvdGVfU1dPUAAAAAALa1RvdGFsU3RydWMCAAAAC3RvdGFsX3N0cnVjAAAAAAxrU3RhcnRIZWlnaHQCAAAADHN0YXJ0X2hlaWdodAAAAAALa0Jhc2VQZXJpb2QCAAAAC2Jhc2VfcGVyaW9kAAAAAA1rUGVyaW9kTGVuZ3RoAgAAAA1wZXJpb2RfbGVuZ3RoAAAAABZrRHVyYXRpb25GdWxsVm90ZVBvd2VyAgAAABhkdXJhdGlvbl9mdWxsX3ZvdGVfcG93ZXIAAAAADWtNaW5Wb3RlUG93ZXICAAAADm1pbl92b3RlX3Bvd2VyAAAAAAZzY2FsZTgAAAAAAAX14QAAAAAACmJhc2VQZXJpb2QJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAtrQmFzZVBlcmlvZAIAAAARRW1wdHkga0Jhc2VQZXJpb2QAAAAAC3N0YXJ0SGVpZ2h0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAMa1N0YXJ0SGVpZ2h0AgAAABJFbXB0eSBrU3RhcnRIZWlnaHQAAAAADHBlcmlvZExlbmd0aAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAADWtQZXJpb2RMZW5ndGgCAAAAE0VtcHR5IGtQZXJpb2RMZW5ndGgAAAAAFWR1cmF0aW9uRnVsbFZvdGVQb3dlcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAFmtEdXJhdGlvbkZ1bGxWb3RlUG93ZXICAAAAHEVtcHR5IGtEdXJhdGlvbkZ1bGxWb3RlUG93ZXIAAAAADG1pblZvdGVQb3dlcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAADWtNaW5Wb3RlUG93ZXICAAAAE0VtcHR5IGtNaW5Wb3RlUG93ZXIAAAAAB2dvdkFkZHIJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVRx8VWBtBMlxY2UcH5+sGzX5W+FwiwTPL8AAAAACmN1cnJQZXJpb2QJAABkAAAAAgUAAAAKYmFzZVBlcmlvZAkAAGkAAAACCQAAZQAAAAIFAAAABmhlaWdodAUAAAALc3RhcnRIZWlnaHQFAAAADHBlcmlvZExlbmd0aAEAAAAUaXNDYWxsZXJJbkdvdmVybmFuY2UAAAABAAAABHVzZXIDCQAAZgAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAHZ292QWRkcgkAASwAAAACCQAEJQAAAAEFAAAABHVzZXICAAAADF9TV09QX2Ftb3VudAAAAAAAAAAAAAAAAAAAAAAAAAYHAQAAABJpc1Bvb2xJbkdvdmVybmFuY2UAAAABAAAAC3Bvb2xBZGRyZXNzCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAdnb3ZBZGRyCQABLAAAAAIFAAAAC3Bvb2xBZGRyZXNzAgAAAB1fY3VycmVudF9wb29sX2ZyYWN0aW9uX3Jld2FyZAEAAAAKdm90aW5nQ29lZgAAAAAEAAAADnZvdGluZ0R1cmF0aW9uCQAAZQAAAAIFAAAABmhlaWdodAkAAGQAAAACBQAAAAtzdGFydEhlaWdodAkAAGgAAAACBQAAAApjdXJyUGVyaW9kBQAAAAxwZXJpb2RMZW5ndGgDCQAAZgAAAAIFAAAAFWR1cmF0aW9uRnVsbFZvdGVQb3dlcgUAAAAOdm90aW5nRHVyYXRpb24FAAAABnNjYWxlOAQAAAACeDEFAAAAFWR1cmF0aW9uRnVsbFZvdGVQb3dlcgQAAAACeTEFAAAABnNjYWxlOAQAAAACeDIFAAAADHBlcmlvZExlbmd0aAQAAAACeTIFAAAADG1pblZvdGVQb3dlcgQAAAABawkAAGkAAAACCQAAaAAAAAIJAABlAAAAAgUAAAACeTIFAAAAAnkxBQAAAAZzY2FsZTgJAABlAAAAAgUAAAACeDIFAAAAAngxBAAAAAFiCQAAZQAAAAIJAABoAAAAAgUAAAACeTEFAAAABnNjYWxlOAkAAGgAAAACBQAAAAFrBQAAAAJ4MQkAAGQAAAACCQAAaQAAAAIJAABoAAAAAgUAAAAOdm90aW5nRHVyYXRpb24FAAAAAWsFAAAABnNjYWxlOAkAAGkAAAACBQAAAAFiBQAAAAZzY2FsZTgBAAAAD2NhbGNEZWxldGVFbnRyeQAAAAMAAAAGY2FsbGVyAAAAC3Bvb2xBZGRyZXNzAAAAE3VzZXJQb29sVm90ZVNXT1BuZXcEAAAAGWRlbGV0ZUtleVVzZXJQb29sVm90ZVNXT1ADCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAZjYWxsZXICAAAAAV8FAAAAC3Bvb2xBZGRyZXNzBQAAABFrVXNlclBvb2xWb3RlU1dPUAkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAGY2FsbGVyAgAAAAFfBQAAAAtwb29sQWRkcmVzcwUAAAARa1VzZXJQb29sVm90ZVNXT1AJAQAAAAtEZWxldGVFbnRyeQAAAAECAAAAAS4EAAAAGmRlbGV0ZUtleVVzZXJUb3RhbFZvdGVTV09QAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAZjYWxsZXIFAAAAEmtVc2VyVG90YWxWb3RlU1dPUAkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACBQAAAAZjYWxsZXIFAAAAEmtVc2VyVG90YWxWb3RlU1dPUAkBAAAAC0RlbGV0ZUVudHJ5AAAAAQIAAAABLgQAAAAVZGVsZXRlS2V5UG9vbFZvdGVTV09QAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAtwb29sQWRkcmVzcwUAAAANa1Bvb2xWb3RlU1dPUAkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACBQAAAAtwb29sQWRkcmVzcwUAAAANa1Bvb2xWb3RlU1dPUAkBAAAAC0RlbGV0ZUVudHJ5AAAAAQIAAAABLgQAAAAWZGVsZXRlS2V5VG90YWxWb3RlU1dPUAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAABHRoaXMFAAAADmtUb3RhbFZvdGVTV09QCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAA5rVG90YWxWb3RlU1dPUAkBAAAAC0RlbGV0ZUVudHJ5AAAAAQIAAAABLgkABEwAAAACBQAAABlkZWxldGVLZXlVc2VyUG9vbFZvdGVTV09QCQAETAAAAAIFAAAAGmRlbGV0ZUtleVVzZXJUb3RhbFZvdGVTV09QCQAETAAAAAIFAAAAFWRlbGV0ZUtleVBvb2xWb3RlU1dPUAkABEwAAAACBQAAABZkZWxldGVLZXlUb3RhbFZvdGVTV09QBQAAAANuaWwAAAABAAAAAWkBAAAADnZvdGVQb29sV2VpZ2h0AAAAAgAAAAtwb29sQWRkcmVzcwAAABN1c2VyUG9vbFZvdGVTV09QbmV3BAAAABR1c2VyU1dPUGluR292ZXJuYW5jZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAAB2dvdkFkZHIJAAEsAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXICAAAADF9TV09QX2Ftb3VudAIAAAAiRW1wdHkgX1NXT1BfYW1vdW50IGF0IGdvdi4gYWRkcmVzcwQAAAALJHQwMzU1NjQxOTgDCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwUAAAALcG9vbEFkZHJlc3MFAAAA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AAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAOa1RvdGFsVm90ZVNXT1AAAAAAAAAAAAAJAAUWAAAABAUAAAAOdVRvdGFsVm90ZVNXT1AFAAAADnVUb3RhbFZvdGVTV09QAAAAAAAAAAAAAAAAAAAAAAAABAAAAA10b3RhbFZvdGVTV09QCAUAAAALJHQwNTIzOTU3MTUAAAACXzEEAAAAD3RvdGFsQWN0aXZlU1dPUAgFAAAACyR0MDUyMzk1NzE1AAAAAl8yBAAAAAt0b3RhbFBlcmlvZAgFAAAACyR0MDUyMzk1NzE1AAAAAl8zBAAAAA90b3RhbEZyZWV6ZVNXT1AIBQAAAAskdDA1MjM5NTcxNQAAAAJfNAQAAAAQcG9vbFZvdGVEaWZmU1dPUAkAAGUAAAACBQAAABN1c2VyUG9vbFZvdGVTV09QbmV3BQAAABB1c2VyUG9vbFZvdGVTV09QBAAAABR1c2VyVG90YWxWb3RlU1dPUG5ldwkAAGQAAAACBQAAABF1c2VyVG90YWxWb3RlU1dPUAUAAAAQcG9vbFZvdGVEaWZmU1dPUAMJAQAAAAEhAAAAAQkBAAAAFGlzQ2FsbGVySW5Hb3Zlcm5hbmNlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQAAAgAAAAECAAAAKlRoaXMgYWRkcmVzcyBoYXMgMCBTV09QIGluIEdvdmVybmFuY2UgZEFwcAMJAABmAAAAAgUAAAAUdXNlclRvdGFsVm90ZVNXT1BuZXcFAAAAFHVzZXJTV09QaW5Hb3Zlcm5hbmNlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABBQAAAAR0aGlzAgAAAAUgaGFzIAkAAaQAAAABBQAAABR1c2VyU1dPUGluR292ZXJuYW5jZQIAAAAoIFNXT1AgaW4gZ292ZXJuYW5jZS4gTmV3IFNXT1AgaW4gdm90aW5nIAkAAaQAAAABBQAAABR1c2VyVG90YWxWb3RlU1dPUG5ldwMJAABmAAAAAgAAAAAAAAAAAAUAAAAUdXNlclRvdGFsVm90ZVNXT1BuZXcJAAACAAAAAQIAAAAbTmV3IHVzZXJQb29sVm90ZVNXT1BuZXcgPCAwAwkAAGcAAAACBQAAABN1c2VyUG9vbFZvdGVTV09QbmV3BQAAABB1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AAAAEXBvb2xGcmVlemVTV09QbmV3BAAAAAlwb29sRW50cnkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACBQAAAAtwb29sQWRkcmVzcwUAAAAKa1Bvb2xTdHJ1YwUAAAAMcG9vbFN0cnVjTmV3BQAAAANuaWwEAAAAEHRvdGFsVm90ZVNXT1BuZXcJAABkAAAAAgUAAAANdG90YWxWb3RlU1dPUAUAAAAQcG9vbFZvdGVEaWZmU1dPUAQAAAASdG90YWxBY3RpdmVTV09QbmV3AwkAAAAAAAACBQAAAAt0b3RhbFBlcmlvZAUAAAAKY3VyclBlcmlvZAkAAGQAAAACBQAAAA90b3RhbEFjdGl2ZVNXT1AJAABpAAAAAgkAAGgAAAACBQAAABBwb29sVm90ZURpZmZTV09QBQAAAARjb2VmBQAAAAZzY2FsZTgJAABkAAAAAgUAAAANdG90YWxWb3RlU1dPUAkAAGkAAAACCQAAaAAAAAIFAAAAEHBvb2xWb3RlRGlmZlNXT1AFAAAABGNvZWYFAAAABnNjYWxlOAQAAAASdG90YWxGcmVlemVTV09QbmV3AwkAAAAAAAACBQAAAApwb29sUGVyaW9kBQAAAApjdXJyUGVyaW9kBQAAAA90b3RhbEZyZWV6ZVNXT1AFAAAADXRvdGFsVm90ZVNXT1AEAAAADXRvdGFsU3RydWNOZXcJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAGkAAAAAQUAAAAQdG90YWxWb3RlU1dPUG5ldwIAAAABXwkAAaQAAAABBQAAABJ0b3RhbEFjdGl2ZVNXT1BuZXcCAAAAAV8JAAGkAAAAAQUAAAALdG90YWxQZXJpb2QCAAAAAV8JAAGkAAAAAQUAAAASdG90YWxGcmVlemVTV09QbmV3BAAAAAp0b3RhbEVudHJ5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAC2tUb3RhbFN0cnVjBQAAAA10b3RhbFN0cnVjTmV3BQAAAANuaWwJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAAROAAAAAgUAAAANdXNlclBvb2xFbnRyeQUAAAAOdXNlclRvdGFsRW50cnkFAAAACXBvb2xFbnRyeQUAAAAKdG90YWxFbnRyeQkBAAAAD2NhbGNEZWxldGVFbnRyeQAAAAMJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAtwb29sQWRkcmVzcwUAAAATdXNlclBvb2xWb3RlU1dPUG5ldwQAAAAOcmVtb3ZlUG9vbFZvdGUJAQAAAAEtAAAAAQUAAAAQcG9vbFZvdGVEaWZmU1dPUAQAAAAVdXNlclBvb2xGcmVlemVTV09QbmV3AwkAAAAAAAACBQAAABJ1c2VyUG9vbFZvdGVQZXJpb2QFAAAACmN1cnJQZXJpb2QJAAGXAAAAAQkABEwAAAACBQAAABJ1c2VyUG9vbEZyZWV6ZVNXT1AJAARMAAAAAgUAAAATdXNlclBvb2xWb3RlU1dPUG5ldwUAAAADbmlsBQAAABN1c2VyUG9vbFZvdGVTV09QbmV3BAAAABl1c2VyUG9vbEFjdGl2ZVZvdGVTV09QbmV3AwkAAAAAAAACCQAAZQAAAAIFAAAAEHVzZXJQb29sVm90ZVNXT1AFAAAAEnVzZXJQb29sRnJlZXplU1dPUAAAAAAAAAAAAAAAAAAAAAAAAAkAAGQAAAACBQAAABV1c2VyUG9vbEZyZWV6ZVNXT1BuZXcJAABpAAAAAgkAAGgAAAACCQAAZQAAAAIFAAAAFnVzZXJQb29sQWN0aXZlVm90ZVNXT1AFAAAAEnVzZXJQb29sRnJlZXplU1dPUAkAAGUAAAACBQAAABN1c2VyUG9vbFZvdGVTV09QbmV3BQAAABV1c2VyUG9vbEZyZWV6ZVNXT1BuZXcJAABlAAAAAgUAAAAQdXNlclBvb2xWb3RlU1dPUAUAAAASdXNlclBvb2xGcmVlemVTV09QBAAAAApuZXdVbnZvdGVkCQABlgAAAAEJAARMAAAAAgAAAAAAAAAAAAkABEwAAAACCQAAZQAAAAIFAAAADnJlbW92ZVBvb2xWb3RlAwkAAAAAAAACBQAAABF1c2VyVW52b3RlZFBlcmlvZAUAAAAKY3VyclBlcmlvZAkAAGUAAAACBQAAABB1c2VyUG9vbFZvdGVTV09QBQAAABJ1c2VyUG9vbEZyZWV6ZVNXT1AAAAAAAAAAAAAFAAAAA25pbAQAAAAOdXNlclVudm90ZWROZXcDCQAAAAAAAAIFAAAAEXVzZXJVbnZvdGVkUGVyaW9kBQAAAApj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", "height": 1481820, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: J9ZiRsgTbeNso7hRRCuBaxnkL26g1Kc8iEHXpwNZKTkJ Next: 61xTR5cqZ6tEwMHzpHwYbu4qfVkoqbuiQk3zTi1vD8fV Diff:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let adminPubKey1 = base58' | |
4 | + | let adminPubKey1 = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
5 | 5 | ||
6 | - | let adminPubKey2 = base58' | |
6 | + | let adminPubKey2 = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
7 | 7 | ||
8 | - | let adminPubKey3 = base58' | |
8 | + | let adminPubKey3 = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
9 | 9 | ||
10 | 10 | let kUserPoolVoteSWOP = "_vote" | |
11 | 11 | ||
12 | + | let kUserPoolStruc = "_user_pool_struc" | |
13 | + | ||
12 | 14 | let kUserTotalVoteSWOP = "_user_total_SWOP_vote" | |
15 | + | ||
16 | + | let kUserTotalStruc = "_user_total_struc" | |
13 | 17 | ||
14 | 18 | let kPoolVoteSWOP = "_vote_SWOP" | |
15 | 19 | ||
20 | + | let kPoolStruc = "_pool_struc" | |
21 | + | ||
16 | 22 | let kTotalVoteSWOP = "total_vote_SWOP" | |
23 | + | ||
24 | + | let kTotalStruc = "total_struc" | |
25 | + | ||
26 | + | let kStartHeight = "start_height" | |
27 | + | ||
28 | + | let kBasePeriod = "base_period" | |
29 | + | ||
30 | + | let kPeriodLength = "period_length" | |
31 | + | ||
32 | + | let kDurationFullVotePower = "duration_full_vote_power" | |
33 | + | ||
34 | + | let kMinVotePower = "min_vote_power" | |
35 | + | ||
36 | + | let scale8 = 100000000 | |
37 | + | ||
38 | + | let basePeriod = valueOrErrorMessage(getInteger(this, kBasePeriod), "Empty kBasePeriod") | |
39 | + | ||
40 | + | let startHeight = valueOrErrorMessage(getInteger(this, kStartHeight), "Empty kStartHeight") | |
41 | + | ||
42 | + | let periodLength = valueOrErrorMessage(getInteger(this, kPeriodLength), "Empty kPeriodLength") | |
43 | + | ||
44 | + | let durationFullVotePower = valueOrErrorMessage(getInteger(this, kDurationFullVotePower), "Empty kDurationFullVotePower") | |
45 | + | ||
46 | + | let minVotePower = valueOrErrorMessage(getInteger(this, kMinVotePower), "Empty kMinVotePower") | |
17 | 47 | ||
18 | 48 | let govAddr = Address(base58'3MzJZEn6jzxCPaHEfkrXd7FhbjTyVjdRPLS') | |
19 | 49 | ||
20 | - | ||
21 | - | ||
22 | - | ||
50 | + | let currPeriod = (basePeriod + ((height - startHeight) / periodLength)) | |
51 | + | ||
52 | + | func isCallerInGovernance (user) = if ((valueOrElse(getInteger(govAddr, (toString(user) + "_SWOP_amount")), 0) > 0)) | |
23 | 53 | then true | |
24 | 54 | else false | |
25 | 55 | ||
27 | 57 | func isPoolInGovernance (poolAddress) = isDefined(getInteger(govAddr, (poolAddress + "_current_pool_fraction_reward"))) | |
28 | 58 | ||
29 | 59 | ||
60 | + | func votingCoef () = { | |
61 | + | let votingDuration = (height - (startHeight + (currPeriod * periodLength))) | |
62 | + | if ((durationFullVotePower > votingDuration)) | |
63 | + | then scale8 | |
64 | + | else { | |
65 | + | let x1 = durationFullVotePower | |
66 | + | let y1 = scale8 | |
67 | + | let x2 = periodLength | |
68 | + | let y2 = minVotePower | |
69 | + | let k = (((y2 - y1) * scale8) / (x2 - x1)) | |
70 | + | let b = ((y1 * scale8) - (k * x1)) | |
71 | + | (((votingDuration * k) / scale8) + (b / scale8)) | |
72 | + | } | |
73 | + | } | |
74 | + | ||
75 | + | ||
76 | + | func calcDeleteEntry (caller,poolAddress,userPoolVoteSWOPnew) = { | |
77 | + | let deleteKeyUserPoolVoteSWOP = if (isDefined(getInteger(this, (((caller + "_") + poolAddress) + kUserPoolVoteSWOP)))) | |
78 | + | then DeleteEntry((((caller + "_") + poolAddress) + kUserPoolVoteSWOP)) | |
79 | + | else DeleteEntry(".") | |
80 | + | let deleteKeyUserTotalVoteSWOP = if (isDefined(getInteger(this, (caller + kUserTotalVoteSWOP)))) | |
81 | + | then DeleteEntry((caller + kUserTotalVoteSWOP)) | |
82 | + | else DeleteEntry(".") | |
83 | + | let deleteKeyPoolVoteSWOP = if (isDefined(getInteger(this, (poolAddress + kPoolVoteSWOP)))) | |
84 | + | then DeleteEntry((poolAddress + kPoolVoteSWOP)) | |
85 | + | else DeleteEntry(".") | |
86 | + | let deleteKeyTotalVoteSWOP = if (isDefined(getInteger(this, kTotalVoteSWOP))) | |
87 | + | then DeleteEntry(kTotalVoteSWOP) | |
88 | + | else DeleteEntry(".") | |
89 | + | [deleteKeyUserPoolVoteSWOP, deleteKeyUserTotalVoteSWOP, deleteKeyPoolVoteSWOP, deleteKeyTotalVoteSWOP] | |
90 | + | } | |
91 | + | ||
92 | + | ||
30 | 93 | @Callable(i) | |
31 | - | func votePoolWeight (poolAddresses,poolsVoteSWOPNew) = { | |
32 | - | func calcVoteDiffSWOP (accumulated,poolAddress) = if (!(isPoolInGovernance(poolAddress))) | |
33 | - | then throw("This pool has no _current_pool_fraction_reward in Governance dApp") | |
94 | + | func votePoolWeight (poolAddress,userPoolVoteSWOPnew) = { | |
95 | + | let userSWOPinGovernance = valueOrErrorMessage(getInteger(govAddr, (toString(i.caller) + "_SWOP_amount")), "Empty _SWOP_amount at gov. address") | |
96 | + | let $t035564198 = if (isDefined(getString(this, (((toString(i.caller) + "_") + poolAddress) + kUserPoolStruc)))) | |
97 | + | then { | |
98 | + | let data = split(valueOrErrorMessage(getString(this, (((toString(i.caller) + "_") + poolAddress) + kUserPoolStruc)), "Empty kUserPoolStruc"), "_") | |
99 | + | $Tuple4(parseIntValue(data[0]), parseIntValue(data[1]), parseIntValue(data[2]), parseIntValue(data[3])) | |
100 | + | } | |
34 | 101 | else { | |
35 | - | let poolIndex = value(indexOf(poolAddresses, poolAddress)) | |
36 | - | let userPoolVoteSWOPNew = poolsVoteSWOPNew[poolIndex] | |
37 | - | if ((0 > userPoolVoteSWOPNew)) | |
38 | - | then throw("userPoolVoteSWOPNew < 0") | |
39 | - | else { | |
40 | - | let userPoolVoteSWOP = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + poolAddress) + kUserPoolVoteSWOP)), 0) | |
41 | - | let poolVoteDiffSWOP = (userPoolVoteSWOPNew - userPoolVoteSWOP) | |
42 | - | (accumulated + poolVoteDiffSWOP) | |
43 | - | } | |
102 | + | let uPoolVoteSWOP = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + poolAddress) + kUserPoolVoteSWOP)), 0) | |
103 | + | $Tuple4(uPoolVoteSWOP, uPoolVoteSWOP, currPeriod, 0) | |
44 | 104 | } | |
45 | - | ||
46 | - | func userVoteEntry (accumulated,poolAddress) = { | |
47 | - | let poolIndex = value(indexOf(poolAddresses, poolAddress)) | |
48 | - | let userPoolVoteSWOPNew = poolsVoteSWOPNew[poolIndex] | |
49 | - | IntegerEntry((((toString(i.caller) + "_") + poolAddress) + kUserPoolVoteSWOP), userPoolVoteSWOPNew) :: accumulated | |
50 | - | } | |
51 | - | ||
52 | - | func poolVoteEntry (accumulated,poolAddress) = { | |
53 | - | let poolIndex = value(indexOf(poolAddresses, poolAddress)) | |
54 | - | let userPoolVoteSWOP = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + poolAddress) + kUserPoolVoteSWOP)), 0) | |
55 | - | let userPoolVoteSWOPNew = poolsVoteSWOPNew[poolIndex] | |
56 | - | let poolVoteDiffSWOP = (userPoolVoteSWOPNew - userPoolVoteSWOP) | |
57 | - | let poolVoteSWOP = valueOrElse(getInteger(this, (poolAddress + kPoolVoteSWOP)), 0) | |
58 | - | let poolVoteSWOPnew = (poolVoteSWOP + poolVoteDiffSWOP) | |
59 | - | IntegerEntry((poolAddress + kPoolVoteSWOP), poolVoteSWOPnew) :: accumulated | |
60 | - | } | |
61 | - | ||
105 | + | let userPoolVoteSWOP = $t035564198._1 | |
106 | + | let userPoolActiveVoteSWOP = $t035564198._2 | |
107 | + | let userPoolVotePeriod = $t035564198._3 | |
108 | + | let userPoolFreezeSWOP = $t035564198._4 | |
109 | + | let $t042044721 = if (isDefined(getString(this, (toString(i.caller) + kUserTotalStruc)))) | |
110 | + | then { | |
111 | + | let data = split(valueOrErrorMessage(getString(this, (toString(i.caller) + kUserTotalStruc)), "Empty kUserTotalStruc"), "_") | |
112 | + | $Tuple3(parseIntValue(data[0]), parseIntValue(data[1]), parseIntValue(data[2])) | |
113 | + | } | |
114 | + | else { | |
115 | + | let uPoolTotalSWOP = valueOrElse(getInteger(this, (toString(i.caller) + kUserTotalVoteSWOP)), 0) | |
116 | + | $Tuple3(uPoolTotalSWOP, 0, currPeriod) | |
117 | + | } | |
118 | + | let userTotalVoteSWOP = $t042044721._1 | |
119 | + | let userUnvoted = $t042044721._2 | |
120 | + | let userUnvotedPeriod = $t042044721._3 | |
121 | + | let $t047265233 = if (isDefined(getString(this, (poolAddress + kPoolStruc)))) | |
122 | + | then { | |
123 | + | let data = split(valueOrErrorMessage(getString(this, (poolAddress + kPoolStruc)), "Empty kPoolStruc"), "_") | |
124 | + | $Tuple4(parseIntValue(data[0]), parseIntValue(data[1]), parseIntValue(data[2]), parseIntValue(data[3])) | |
125 | + | } | |
126 | + | else { | |
127 | + | let uPoolVoteSWOP = valueOrElse(getInteger(this, (poolAddress + kPoolVoteSWOP)), 0) | |
128 | + | $Tuple4(uPoolVoteSWOP, uPoolVoteSWOP, 0, 0) | |
129 | + | } | |
130 | + | let poolVoteSWOP = $t047265233._1 | |
131 | + | let poolActiveSWOP = $t047265233._2 | |
132 | + | let poolPeriod = $t047265233._3 | |
133 | + | let poolFreezeSWOP = $t047265233._4 | |
134 | + | let $t052395715 = if (isDefined(getString(this, kTotalStruc))) | |
135 | + | then { | |
136 | + | let data = split(valueOrErrorMessage(getString(this, kTotalStruc), "Empty kTotalStruc"), "_") | |
137 | + | $Tuple4(parseIntValue(data[0]), parseIntValue(data[1]), parseIntValue(data[2]), parseIntValue(data[3])) | |
138 | + | } | |
139 | + | else { | |
140 | + | let uTotalVoteSWOP = valueOrElse(getInteger(this, kTotalVoteSWOP), 0) | |
141 | + | $Tuple4(uTotalVoteSWOP, uTotalVoteSWOP, 0, 0) | |
142 | + | } | |
143 | + | let totalVoteSWOP = $t052395715._1 | |
144 | + | let totalActiveSWOP = $t052395715._2 | |
145 | + | let totalPeriod = $t052395715._3 | |
146 | + | let totalFreezeSWOP = $t052395715._4 | |
147 | + | let poolVoteDiffSWOP = (userPoolVoteSWOPnew - userPoolVoteSWOP) | |
148 | + | let userTotalVoteSWOPnew = (userTotalVoteSWOP + poolVoteDiffSWOP) | |
62 | 149 | if (!(isCallerInGovernance(i.caller))) | |
63 | 150 | then throw("This address has 0 SWOP in Governance dApp") | |
64 | - | else { | |
65 | - | let totalVoteSWOP = valueOrElse(getInteger(this, kTotalVoteSWOP), 0) | |
66 | - | let userTotalVoteSWOP = valueOrElse(getInteger(this, (toString(i.caller) + kUserTotalVoteSWOP)), 0) | |
67 | - | let userSWOPinGovernance = getIntegerValue(govAddr, (toString(i.caller) + "_SWOP_amount")) | |
68 | - | let userVoteDiffSWOP = { | |
69 | - | let $list30203063 = poolAddresses | |
70 | - | let $size30203063 = size($list30203063) | |
71 | - | let $acc030203063 = 0 | |
72 | - | if (($size30203063 == 0)) | |
73 | - | then $acc030203063 | |
151 | + | else if ((userTotalVoteSWOPnew > userSWOPinGovernance)) | |
152 | + | then throw(((((toString(this) + " has ") + toString(userSWOPinGovernance)) + " SWOP in governance. New SWOP in voting ") + toString(userTotalVoteSWOPnew))) | |
153 | + | else if ((0 > userTotalVoteSWOPnew)) | |
154 | + | then throw("New userPoolVoteSWOPnew < 0") | |
155 | + | else if ((userPoolVoteSWOPnew >= userPoolVoteSWOP)) | |
156 | + | then { | |
157 | + | let coef = votingCoef() | |
158 | + | let userPoolActiveVoteSWOPnew = if ((userPoolVotePeriod == currPeriod)) | |
159 | + | then (userPoolActiveVoteSWOP + ((poolVoteDiffSWOP * coef) / scale8)) | |
160 | + | else (userPoolVoteSWOP + ((poolVoteDiffSWOP * coef) / scale8)) | |
161 | + | let userPoolFreezeSWOPnew = if ((userPoolVotePeriod == currPeriod)) | |
162 | + | then userPoolFreezeSWOP | |
163 | + | else userPoolVoteSWOP | |
164 | + | let userUnvotedNew = if ((userUnvoted == currPeriod)) | |
165 | + | then userUnvoted | |
166 | + | else max([0, (userUnvoted - poolVoteDiffSWOP)]) | |
167 | + | let userPoolStrucNew = ((((((toString(userPoolVoteSWOPnew) + "_") + toString(userPoolActiveVoteSWOPnew)) + "_") + toString(currPeriod)) + "_") + toString(userPoolFreezeSWOPnew)) | |
168 | + | let userPoolEntry = [StringEntry((((toString(i.caller) + "_") + poolAddress) + kUserPoolStruc), userPoolStrucNew)] | |
169 | + | let userTotalStrucNew = ((((toString(userTotalVoteSWOPnew) + "_") + toString(userUnvotedNew)) + "_") + toString(currPeriod)) | |
170 | + | let userTotalEntry = [StringEntry((toString(i.caller) + kUserTotalStruc), userTotalStrucNew)] | |
171 | + | let poolVoteSWOPnew = (poolVoteSWOP + poolVoteDiffSWOP) | |
172 | + | let poolActiveSWOPnew = if ((poolPeriod == currPeriod)) | |
173 | + | then (poolActiveSWOP + ((poolVoteDiffSWOP * coef) / scale8)) | |
174 | + | else (poolVoteSWOP + ((poolVoteDiffSWOP * coef) / scale8)) | |
175 | + | let poolFreezeSWOPnew = if ((poolPeriod == currPeriod)) | |
176 | + | then poolFreezeSWOP | |
177 | + | else poolVoteSWOP | |
178 | + | let poolStrucNew = ((((((toString(poolVoteSWOPnew) + "_") + toString(poolActiveSWOPnew)) + "_") + toString(currPeriod)) + "_") + toString(poolFreezeSWOPnew)) | |
179 | + | let poolEntry = [StringEntry((poolAddress + kPoolStruc), poolStrucNew)] | |
180 | + | let totalVoteSWOPnew = (totalVoteSWOP + poolVoteDiffSWOP) | |
181 | + | let totalActiveSWOPnew = if ((totalPeriod == currPeriod)) | |
182 | + | then (totalActiveSWOP + ((poolVoteDiffSWOP * coef) / scale8)) | |
183 | + | else (totalVoteSWOP + ((poolVoteDiffSWOP * coef) / scale8)) | |
184 | + | let totalFreezeSWOPnew = if ((poolPeriod == currPeriod)) | |
185 | + | then totalFreezeSWOP | |
186 | + | else totalVoteSWOP | |
187 | + | let totalStrucNew = ((((((toString(totalVoteSWOPnew) + "_") + toString(totalActiveSWOPnew)) + "_") + toString(totalPeriod)) + "_") + toString(totalFreezeSWOPnew)) | |
188 | + | let totalEntry = [StringEntry(kTotalStruc, totalStrucNew)] | |
189 | + | ((((userPoolEntry ++ userTotalEntry) ++ poolEntry) ++ totalEntry) ++ calcDeleteEntry(toString(i.caller), poolAddress, userPoolVoteSWOPnew)) | |
190 | + | } | |
74 | 191 | else { | |
75 | - | let $acc130203063 = calcVoteDiffSWOP($acc030203063, $list30203063[0]) | |
76 | - | if (($size30203063 == 1)) | |
77 | - | then $acc130203063 | |
78 | - | else { | |
79 | - | let $acc230203063 = calcVoteDiffSWOP($acc130203063, $list30203063[1]) | |
80 | - | if (($size30203063 == 2)) | |
81 | - | then $acc230203063 | |
82 | - | else { | |
83 | - | let $acc330203063 = calcVoteDiffSWOP($acc230203063, $list30203063[2]) | |
84 | - | if (($size30203063 == 3)) | |
85 | - | then $acc330203063 | |
86 | - | else { | |
87 | - | let $acc430203063 = calcVoteDiffSWOP($acc330203063, $list30203063[3]) | |
88 | - | if (($size30203063 == 4)) | |
89 | - | then $acc430203063 | |
90 | - | else { | |
91 | - | let $acc530203063 = calcVoteDiffSWOP($acc430203063, $list30203063[4]) | |
92 | - | if (($size30203063 == 5)) | |
93 | - | then $acc530203063 | |
94 | - | else { | |
95 | - | let $acc630203063 = calcVoteDiffSWOP($acc530203063, $list30203063[5]) | |
96 | - | if (($size30203063 == 6)) | |
97 | - | then $acc630203063 | |
98 | - | else { | |
99 | - | let $acc730203063 = calcVoteDiffSWOP($acc630203063, $list30203063[6]) | |
100 | - | if (($size30203063 == 7)) | |
101 | - | then $acc730203063 | |
102 | - | else { | |
103 | - | let $acc830203063 = calcVoteDiffSWOP($acc730203063, $list30203063[7]) | |
104 | - | if (($size30203063 == 8)) | |
105 | - | then $acc830203063 | |
106 | - | else { | |
107 | - | let $acc930203063 = calcVoteDiffSWOP($acc830203063, $list30203063[8]) | |
108 | - | throw("List size exceed 8") | |
109 | - | } | |
110 | - | } | |
111 | - | } | |
112 | - | } | |
113 | - | } | |
114 | - | } | |
115 | - | } | |
116 | - | } | |
192 | + | let removePoolVote = -(poolVoteDiffSWOP) | |
193 | + | let userPoolFreezeSWOPnew = if ((userPoolVotePeriod == currPeriod)) | |
194 | + | then min([userPoolFreezeSWOP, userPoolVoteSWOPnew]) | |
195 | + | else userPoolVoteSWOPnew | |
196 | + | let userPoolActiveVoteSWOPnew = if (((userPoolVoteSWOP - userPoolFreezeSWOP) == 0)) | |
197 | + | then 0 | |
198 | + | else (userPoolFreezeSWOPnew + (((userPoolActiveVoteSWOP - userPoolFreezeSWOP) * (userPoolVoteSWOPnew - userPoolFreezeSWOPnew)) / (userPoolVoteSWOP - userPoolFreezeSWOP))) | |
199 | + | let newUnvoted = max([0, (removePoolVote - (if ((userUnvotedPeriod == currPeriod)) | |
200 | + | then (userPoolVoteSWOP - userPoolFreezeSWOP) | |
201 | + | else 0))]) | |
202 | + | let userUnvotedNew = if ((userUnvotedPeriod == currPeriod)) | |
203 | + | then userUnvoted | |
204 | + | else (0 + newUnvoted) | |
205 | + | let userUnvotedPeriodNew = if ((newUnvoted > 0)) | |
206 | + | then currPeriod | |
207 | + | else userUnvotedPeriod | |
208 | + | let userPoolStrucNew = ((((((toString(userPoolVoteSWOPnew) + "_") + toString(userPoolActiveVoteSWOPnew)) + "_") + toString(currPeriod)) + "_") + toString(userPoolFreezeSWOPnew)) | |
209 | + | let userPoolEntry = [StringEntry((((toString(i.caller) + "_") + poolAddress) + kUserPoolStruc), userPoolStrucNew)] | |
210 | + | let userTotalStrucNew = ((((toString(userTotalVoteSWOPnew) + "_") + toString(userUnvotedNew)) + "_") + toString(currPeriod)) | |
211 | + | let userTotalEntry = [StringEntry((toString(i.caller) + kUserTotalStruc), userTotalStrucNew)] | |
212 | + | let poolVoteSWOPnew = (poolVoteSWOP - removePoolVote) | |
213 | + | let poolFreezeSWOPnew = if ((poolPeriod == currPeriod)) | |
214 | + | then min([poolFreezeSWOP, poolVoteSWOPnew]) | |
215 | + | else poolVoteSWOPnew | |
216 | + | let poolActiveSWOPnew = if (((poolVoteSWOP - poolFreezeSWOP) == 0)) | |
217 | + | then 0 | |
218 | + | else (poolFreezeSWOPnew + (((poolActiveSWOP - poolFreezeSWOP) * (poolVoteSWOPnew - poolFreezeSWOPnew)) / (poolVoteSWOP - poolFreezeSWOP))) | |
219 | + | let poolStrucNew = ((((((toString(poolVoteSWOPnew) + "_") + toString(poolActiveSWOPnew)) + "_") + toString(currPeriod)) + "_") + toString(poolFreezeSWOPnew)) | |
220 | + | let poolEntry = [StringEntry((poolAddress + kPoolStruc), poolStrucNew)] | |
221 | + | let totalVoteSWOPnew = (totalVoteSWOP - removePoolVote) | |
222 | + | let totalFreezeSWOPnew = if ((totalPeriod == currPeriod)) | |
223 | + | then min([totalFreezeSWOP, totalVoteSWOPnew]) | |
224 | + | else totalVoteSWOPnew | |
225 | + | let totalActiveSWOPnew = if (((totalVoteSWOP - totalFreezeSWOP) == 0)) | |
226 | + | then 0 | |
227 | + | else (totalFreezeSWOPnew + (((totalActiveSWOP - totalFreezeSWOP) * (totalVoteSWOPnew - totalFreezeSWOPnew)) / (totalVoteSWOP - totalFreezeSWOP))) | |
228 | + | let totalStrucNew = ((((((toString(totalVoteSWOPnew) + "_") + toString(totalActiveSWOPnew)) + "_") + toString(totalPeriod)) + "_") + toString(totalFreezeSWOPnew)) | |
229 | + | let totalEntry = [StringEntry(kTotalStruc, totalStrucNew)] | |
230 | + | ((((userPoolEntry ++ userTotalEntry) ++ poolEntry) ++ totalEntry) ++ calcDeleteEntry(toString(i.caller), poolAddress, userPoolVoteSWOPnew)) | |
117 | 231 | } | |
118 | - | } | |
119 | - | let userTotalVoteSWOPNew = (userTotalVoteSWOP + userVoteDiffSWOP) | |
120 | - | let totalVoteSWOPnew = (totalVoteSWOP + userVoteDiffSWOP) | |
121 | - | let userDataEntry = { | |
122 | - | let $list32173258 = poolAddresses | |
123 | - | let $size32173258 = size($list32173258) | |
124 | - | let $acc032173258 = nil | |
125 | - | if (($size32173258 == 0)) | |
126 | - | then $acc032173258 | |
127 | - | else { | |
128 | - | let $acc132173258 = userVoteEntry($acc032173258, $list32173258[0]) | |
129 | - | if (($size32173258 == 1)) | |
130 | - | then $acc132173258 | |
131 | - | else { | |
132 | - | let $acc232173258 = userVoteEntry($acc132173258, $list32173258[1]) | |
133 | - | if (($size32173258 == 2)) | |
134 | - | then $acc232173258 | |
135 | - | else { | |
136 | - | let $acc332173258 = userVoteEntry($acc232173258, $list32173258[2]) | |
137 | - | if (($size32173258 == 3)) | |
138 | - | then $acc332173258 | |
139 | - | else { | |
140 | - | let $acc432173258 = userVoteEntry($acc332173258, $list32173258[3]) | |
141 | - | if (($size32173258 == 4)) | |
142 | - | then $acc432173258 | |
143 | - | else { | |
144 | - | let $acc532173258 = userVoteEntry($acc432173258, $list32173258[4]) | |
145 | - | if (($size32173258 == 5)) | |
146 | - | then $acc532173258 | |
147 | - | else { | |
148 | - | let $acc632173258 = userVoteEntry($acc532173258, $list32173258[5]) | |
149 | - | if (($size32173258 == 6)) | |
150 | - | then $acc632173258 | |
151 | - | else { | |
152 | - | let $acc732173258 = userVoteEntry($acc632173258, $list32173258[6]) | |
153 | - | if (($size32173258 == 7)) | |
154 | - | then $acc732173258 | |
155 | - | else { | |
156 | - | let $acc832173258 = userVoteEntry($acc732173258, $list32173258[7]) | |
157 | - | if (($size32173258 == 8)) | |
158 | - | then $acc832173258 | |
159 | - | else { | |
160 | - | let $acc932173258 = userVoteEntry($acc832173258, $list32173258[8]) | |
161 | - | throw("List size exceed 8") | |
162 | - | } | |
163 | - | } | |
164 | - | } | |
165 | - | } | |
166 | - | } | |
167 | - | } | |
168 | - | } | |
169 | - | } | |
170 | - | } | |
171 | - | } | |
172 | - | let poolDataEntry = { | |
173 | - | let $list32833324 = poolAddresses | |
174 | - | let $size32833324 = size($list32833324) | |
175 | - | let $acc032833324 = nil | |
176 | - | if (($size32833324 == 0)) | |
177 | - | then $acc032833324 | |
178 | - | else { | |
179 | - | let $acc132833324 = poolVoteEntry($acc032833324, $list32833324[0]) | |
180 | - | if (($size32833324 == 1)) | |
181 | - | then $acc132833324 | |
182 | - | else { | |
183 | - | let $acc232833324 = poolVoteEntry($acc132833324, $list32833324[1]) | |
184 | - | if (($size32833324 == 2)) | |
185 | - | then $acc232833324 | |
186 | - | else { | |
187 | - | let $acc332833324 = poolVoteEntry($acc232833324, $list32833324[2]) | |
188 | - | if (($size32833324 == 3)) | |
189 | - | then $acc332833324 | |
190 | - | else { | |
191 | - | let $acc432833324 = poolVoteEntry($acc332833324, $list32833324[3]) | |
192 | - | if (($size32833324 == 4)) | |
193 | - | then $acc432833324 | |
194 | - | else { | |
195 | - | let $acc532833324 = poolVoteEntry($acc432833324, $list32833324[4]) | |
196 | - | if (($size32833324 == 5)) | |
197 | - | then $acc532833324 | |
198 | - | else { | |
199 | - | let $acc632833324 = poolVoteEntry($acc532833324, $list32833324[5]) | |
200 | - | if (($size32833324 == 6)) | |
201 | - | then $acc632833324 | |
202 | - | else { | |
203 | - | let $acc732833324 = poolVoteEntry($acc632833324, $list32833324[6]) | |
204 | - | if (($size32833324 == 7)) | |
205 | - | then $acc732833324 | |
206 | - | else { | |
207 | - | let $acc832833324 = poolVoteEntry($acc732833324, $list32833324[7]) | |
208 | - | if (($size32833324 == 8)) | |
209 | - | then $acc832833324 | |
210 | - | else { | |
211 | - | let $acc932833324 = poolVoteEntry($acc832833324, $list32833324[8]) | |
212 | - | throw("List size exceed 8") | |
213 | - | } | |
214 | - | } | |
215 | - | } | |
216 | - | } | |
217 | - | } | |
218 | - | } | |
219 | - | } | |
220 | - | } | |
221 | - | } | |
222 | - | } | |
223 | - | if ((userTotalVoteSWOPNew > userSWOPinGovernance)) | |
224 | - | then throw(((((toString(this) + " has ") + toString(userSWOPinGovernance)) + " SWOP in governance. New SWOP in voting ") + toString(userTotalVoteSWOPNew))) | |
225 | - | else ((userDataEntry ++ poolDataEntry) ++ [IntegerEntry((toString(i.caller) + kUserTotalVoteSWOP), userTotalVoteSWOPNew), IntegerEntry(kTotalVoteSWOP, totalVoteSWOPnew)]) | |
226 | - | } | |
227 | 232 | } | |
228 | 233 | ||
229 | 234 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let adminPubKey1 = base58' | |
4 | + | let adminPubKey1 = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
5 | 5 | ||
6 | - | let adminPubKey2 = base58' | |
6 | + | let adminPubKey2 = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
7 | 7 | ||
8 | - | let adminPubKey3 = base58' | |
8 | + | let adminPubKey3 = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
9 | 9 | ||
10 | 10 | let kUserPoolVoteSWOP = "_vote" | |
11 | 11 | ||
12 | + | let kUserPoolStruc = "_user_pool_struc" | |
13 | + | ||
12 | 14 | let kUserTotalVoteSWOP = "_user_total_SWOP_vote" | |
15 | + | ||
16 | + | let kUserTotalStruc = "_user_total_struc" | |
13 | 17 | ||
14 | 18 | let kPoolVoteSWOP = "_vote_SWOP" | |
15 | 19 | ||
20 | + | let kPoolStruc = "_pool_struc" | |
21 | + | ||
16 | 22 | let kTotalVoteSWOP = "total_vote_SWOP" | |
23 | + | ||
24 | + | let kTotalStruc = "total_struc" | |
25 | + | ||
26 | + | let kStartHeight = "start_height" | |
27 | + | ||
28 | + | let kBasePeriod = "base_period" | |
29 | + | ||
30 | + | let kPeriodLength = "period_length" | |
31 | + | ||
32 | + | let kDurationFullVotePower = "duration_full_vote_power" | |
33 | + | ||
34 | + | let kMinVotePower = "min_vote_power" | |
35 | + | ||
36 | + | let scale8 = 100000000 | |
37 | + | ||
38 | + | let basePeriod = valueOrErrorMessage(getInteger(this, kBasePeriod), "Empty kBasePeriod") | |
39 | + | ||
40 | + | let startHeight = valueOrErrorMessage(getInteger(this, kStartHeight), "Empty kStartHeight") | |
41 | + | ||
42 | + | let periodLength = valueOrErrorMessage(getInteger(this, kPeriodLength), "Empty kPeriodLength") | |
43 | + | ||
44 | + | let durationFullVotePower = valueOrErrorMessage(getInteger(this, kDurationFullVotePower), "Empty kDurationFullVotePower") | |
45 | + | ||
46 | + | let minVotePower = valueOrErrorMessage(getInteger(this, kMinVotePower), "Empty kMinVotePower") | |
17 | 47 | ||
18 | 48 | let govAddr = Address(base58'3MzJZEn6jzxCPaHEfkrXd7FhbjTyVjdRPLS') | |
19 | 49 | ||
20 | - | ||
21 | - | ||
22 | - | ||
50 | + | let currPeriod = (basePeriod + ((height - startHeight) / periodLength)) | |
51 | + | ||
52 | + | func isCallerInGovernance (user) = if ((valueOrElse(getInteger(govAddr, (toString(user) + "_SWOP_amount")), 0) > 0)) | |
23 | 53 | then true | |
24 | 54 | else false | |
25 | 55 | ||
26 | 56 | ||
27 | 57 | func isPoolInGovernance (poolAddress) = isDefined(getInteger(govAddr, (poolAddress + "_current_pool_fraction_reward"))) | |
28 | 58 | ||
29 | 59 | ||
60 | + | func votingCoef () = { | |
61 | + | let votingDuration = (height - (startHeight + (currPeriod * periodLength))) | |
62 | + | if ((durationFullVotePower > votingDuration)) | |
63 | + | then scale8 | |
64 | + | else { | |
65 | + | let x1 = durationFullVotePower | |
66 | + | let y1 = scale8 | |
67 | + | let x2 = periodLength | |
68 | + | let y2 = minVotePower | |
69 | + | let k = (((y2 - y1) * scale8) / (x2 - x1)) | |
70 | + | let b = ((y1 * scale8) - (k * x1)) | |
71 | + | (((votingDuration * k) / scale8) + (b / scale8)) | |
72 | + | } | |
73 | + | } | |
74 | + | ||
75 | + | ||
76 | + | func calcDeleteEntry (caller,poolAddress,userPoolVoteSWOPnew) = { | |
77 | + | let deleteKeyUserPoolVoteSWOP = if (isDefined(getInteger(this, (((caller + "_") + poolAddress) + kUserPoolVoteSWOP)))) | |
78 | + | then DeleteEntry((((caller + "_") + poolAddress) + kUserPoolVoteSWOP)) | |
79 | + | else DeleteEntry(".") | |
80 | + | let deleteKeyUserTotalVoteSWOP = if (isDefined(getInteger(this, (caller + kUserTotalVoteSWOP)))) | |
81 | + | then DeleteEntry((caller + kUserTotalVoteSWOP)) | |
82 | + | else DeleteEntry(".") | |
83 | + | let deleteKeyPoolVoteSWOP = if (isDefined(getInteger(this, (poolAddress + kPoolVoteSWOP)))) | |
84 | + | then DeleteEntry((poolAddress + kPoolVoteSWOP)) | |
85 | + | else DeleteEntry(".") | |
86 | + | let deleteKeyTotalVoteSWOP = if (isDefined(getInteger(this, kTotalVoteSWOP))) | |
87 | + | then DeleteEntry(kTotalVoteSWOP) | |
88 | + | else DeleteEntry(".") | |
89 | + | [deleteKeyUserPoolVoteSWOP, deleteKeyUserTotalVoteSWOP, deleteKeyPoolVoteSWOP, deleteKeyTotalVoteSWOP] | |
90 | + | } | |
91 | + | ||
92 | + | ||
30 | 93 | @Callable(i) | |
31 | - | func votePoolWeight (poolAddresses,poolsVoteSWOPNew) = { | |
32 | - | func calcVoteDiffSWOP (accumulated,poolAddress) = if (!(isPoolInGovernance(poolAddress))) | |
33 | - | then throw("This pool has no _current_pool_fraction_reward in Governance dApp") | |
94 | + | func votePoolWeight (poolAddress,userPoolVoteSWOPnew) = { | |
95 | + | let userSWOPinGovernance = valueOrErrorMessage(getInteger(govAddr, (toString(i.caller) + "_SWOP_amount")), "Empty _SWOP_amount at gov. address") | |
96 | + | let $t035564198 = if (isDefined(getString(this, (((toString(i.caller) + "_") + poolAddress) + kUserPoolStruc)))) | |
97 | + | then { | |
98 | + | let data = split(valueOrErrorMessage(getString(this, (((toString(i.caller) + "_") + poolAddress) + kUserPoolStruc)), "Empty kUserPoolStruc"), "_") | |
99 | + | $Tuple4(parseIntValue(data[0]), parseIntValue(data[1]), parseIntValue(data[2]), parseIntValue(data[3])) | |
100 | + | } | |
34 | 101 | else { | |
35 | - | let poolIndex = value(indexOf(poolAddresses, poolAddress)) | |
36 | - | let userPoolVoteSWOPNew = poolsVoteSWOPNew[poolIndex] | |
37 | - | if ((0 > userPoolVoteSWOPNew)) | |
38 | - | then throw("userPoolVoteSWOPNew < 0") | |
39 | - | else { | |
40 | - | let userPoolVoteSWOP = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + poolAddress) + kUserPoolVoteSWOP)), 0) | |
41 | - | let poolVoteDiffSWOP = (userPoolVoteSWOPNew - userPoolVoteSWOP) | |
42 | - | (accumulated + poolVoteDiffSWOP) | |
43 | - | } | |
102 | + | let uPoolVoteSWOP = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + poolAddress) + kUserPoolVoteSWOP)), 0) | |
103 | + | $Tuple4(uPoolVoteSWOP, uPoolVoteSWOP, currPeriod, 0) | |
44 | 104 | } | |
45 | - | ||
46 | - | func userVoteEntry (accumulated,poolAddress) = { | |
47 | - | let poolIndex = value(indexOf(poolAddresses, poolAddress)) | |
48 | - | let userPoolVoteSWOPNew = poolsVoteSWOPNew[poolIndex] | |
49 | - | IntegerEntry((((toString(i.caller) + "_") + poolAddress) + kUserPoolVoteSWOP), userPoolVoteSWOPNew) :: accumulated | |
50 | - | } | |
51 | - | ||
52 | - | func poolVoteEntry (accumulated,poolAddress) = { | |
53 | - | let poolIndex = value(indexOf(poolAddresses, poolAddress)) | |
54 | - | let userPoolVoteSWOP = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + poolAddress) + kUserPoolVoteSWOP)), 0) | |
55 | - | let userPoolVoteSWOPNew = poolsVoteSWOPNew[poolIndex] | |
56 | - | let poolVoteDiffSWOP = (userPoolVoteSWOPNew - userPoolVoteSWOP) | |
57 | - | let poolVoteSWOP = valueOrElse(getInteger(this, (poolAddress + kPoolVoteSWOP)), 0) | |
58 | - | let poolVoteSWOPnew = (poolVoteSWOP + poolVoteDiffSWOP) | |
59 | - | IntegerEntry((poolAddress + kPoolVoteSWOP), poolVoteSWOPnew) :: accumulated | |
60 | - | } | |
61 | - | ||
105 | + | let userPoolVoteSWOP = $t035564198._1 | |
106 | + | let userPoolActiveVoteSWOP = $t035564198._2 | |
107 | + | let userPoolVotePeriod = $t035564198._3 | |
108 | + | let userPoolFreezeSWOP = $t035564198._4 | |
109 | + | let $t042044721 = if (isDefined(getString(this, (toString(i.caller) + kUserTotalStruc)))) | |
110 | + | then { | |
111 | + | let data = split(valueOrErrorMessage(getString(this, (toString(i.caller) + kUserTotalStruc)), "Empty kUserTotalStruc"), "_") | |
112 | + | $Tuple3(parseIntValue(data[0]), parseIntValue(data[1]), parseIntValue(data[2])) | |
113 | + | } | |
114 | + | else { | |
115 | + | let uPoolTotalSWOP = valueOrElse(getInteger(this, (toString(i.caller) + kUserTotalVoteSWOP)), 0) | |
116 | + | $Tuple3(uPoolTotalSWOP, 0, currPeriod) | |
117 | + | } | |
118 | + | let userTotalVoteSWOP = $t042044721._1 | |
119 | + | let userUnvoted = $t042044721._2 | |
120 | + | let userUnvotedPeriod = $t042044721._3 | |
121 | + | let $t047265233 = if (isDefined(getString(this, (poolAddress + kPoolStruc)))) | |
122 | + | then { | |
123 | + | let data = split(valueOrErrorMessage(getString(this, (poolAddress + kPoolStruc)), "Empty kPoolStruc"), "_") | |
124 | + | $Tuple4(parseIntValue(data[0]), parseIntValue(data[1]), parseIntValue(data[2]), parseIntValue(data[3])) | |
125 | + | } | |
126 | + | else { | |
127 | + | let uPoolVoteSWOP = valueOrElse(getInteger(this, (poolAddress + kPoolVoteSWOP)), 0) | |
128 | + | $Tuple4(uPoolVoteSWOP, uPoolVoteSWOP, 0, 0) | |
129 | + | } | |
130 | + | let poolVoteSWOP = $t047265233._1 | |
131 | + | let poolActiveSWOP = $t047265233._2 | |
132 | + | let poolPeriod = $t047265233._3 | |
133 | + | let poolFreezeSWOP = $t047265233._4 | |
134 | + | let $t052395715 = if (isDefined(getString(this, kTotalStruc))) | |
135 | + | then { | |
136 | + | let data = split(valueOrErrorMessage(getString(this, kTotalStruc), "Empty kTotalStruc"), "_") | |
137 | + | $Tuple4(parseIntValue(data[0]), parseIntValue(data[1]), parseIntValue(data[2]), parseIntValue(data[3])) | |
138 | + | } | |
139 | + | else { | |
140 | + | let uTotalVoteSWOP = valueOrElse(getInteger(this, kTotalVoteSWOP), 0) | |
141 | + | $Tuple4(uTotalVoteSWOP, uTotalVoteSWOP, 0, 0) | |
142 | + | } | |
143 | + | let totalVoteSWOP = $t052395715._1 | |
144 | + | let totalActiveSWOP = $t052395715._2 | |
145 | + | let totalPeriod = $t052395715._3 | |
146 | + | let totalFreezeSWOP = $t052395715._4 | |
147 | + | let poolVoteDiffSWOP = (userPoolVoteSWOPnew - userPoolVoteSWOP) | |
148 | + | let userTotalVoteSWOPnew = (userTotalVoteSWOP + poolVoteDiffSWOP) | |
62 | 149 | if (!(isCallerInGovernance(i.caller))) | |
63 | 150 | then throw("This address has 0 SWOP in Governance dApp") | |
64 | - | else { | |
65 | - | let totalVoteSWOP = valueOrElse(getInteger(this, kTotalVoteSWOP), 0) | |
66 | - | let userTotalVoteSWOP = valueOrElse(getInteger(this, (toString(i.caller) + kUserTotalVoteSWOP)), 0) | |
67 | - | let userSWOPinGovernance = getIntegerValue(govAddr, (toString(i.caller) + "_SWOP_amount")) | |
68 | - | let userVoteDiffSWOP = { | |
69 | - | let $list30203063 = poolAddresses | |
70 | - | let $size30203063 = size($list30203063) | |
71 | - | let $acc030203063 = 0 | |
72 | - | if (($size30203063 == 0)) | |
73 | - | then $acc030203063 | |
151 | + | else if ((userTotalVoteSWOPnew > userSWOPinGovernance)) | |
152 | + | then throw(((((toString(this) + " has ") + toString(userSWOPinGovernance)) + " SWOP in governance. New SWOP in voting ") + toString(userTotalVoteSWOPnew))) | |
153 | + | else if ((0 > userTotalVoteSWOPnew)) | |
154 | + | then throw("New userPoolVoteSWOPnew < 0") | |
155 | + | else if ((userPoolVoteSWOPnew >= userPoolVoteSWOP)) | |
156 | + | then { | |
157 | + | let coef = votingCoef() | |
158 | + | let userPoolActiveVoteSWOPnew = if ((userPoolVotePeriod == currPeriod)) | |
159 | + | then (userPoolActiveVoteSWOP + ((poolVoteDiffSWOP * coef) / scale8)) | |
160 | + | else (userPoolVoteSWOP + ((poolVoteDiffSWOP * coef) / scale8)) | |
161 | + | let userPoolFreezeSWOPnew = if ((userPoolVotePeriod == currPeriod)) | |
162 | + | then userPoolFreezeSWOP | |
163 | + | else userPoolVoteSWOP | |
164 | + | let userUnvotedNew = if ((userUnvoted == currPeriod)) | |
165 | + | then userUnvoted | |
166 | + | else max([0, (userUnvoted - poolVoteDiffSWOP)]) | |
167 | + | let userPoolStrucNew = ((((((toString(userPoolVoteSWOPnew) + "_") + toString(userPoolActiveVoteSWOPnew)) + "_") + toString(currPeriod)) + "_") + toString(userPoolFreezeSWOPnew)) | |
168 | + | let userPoolEntry = [StringEntry((((toString(i.caller) + "_") + poolAddress) + kUserPoolStruc), userPoolStrucNew)] | |
169 | + | let userTotalStrucNew = ((((toString(userTotalVoteSWOPnew) + "_") + toString(userUnvotedNew)) + "_") + toString(currPeriod)) | |
170 | + | let userTotalEntry = [StringEntry((toString(i.caller) + kUserTotalStruc), userTotalStrucNew)] | |
171 | + | let poolVoteSWOPnew = (poolVoteSWOP + poolVoteDiffSWOP) | |
172 | + | let poolActiveSWOPnew = if ((poolPeriod == currPeriod)) | |
173 | + | then (poolActiveSWOP + ((poolVoteDiffSWOP * coef) / scale8)) | |
174 | + | else (poolVoteSWOP + ((poolVoteDiffSWOP * coef) / scale8)) | |
175 | + | let poolFreezeSWOPnew = if ((poolPeriod == currPeriod)) | |
176 | + | then poolFreezeSWOP | |
177 | + | else poolVoteSWOP | |
178 | + | let poolStrucNew = ((((((toString(poolVoteSWOPnew) + "_") + toString(poolActiveSWOPnew)) + "_") + toString(currPeriod)) + "_") + toString(poolFreezeSWOPnew)) | |
179 | + | let poolEntry = [StringEntry((poolAddress + kPoolStruc), poolStrucNew)] | |
180 | + | let totalVoteSWOPnew = (totalVoteSWOP + poolVoteDiffSWOP) | |
181 | + | let totalActiveSWOPnew = if ((totalPeriod == currPeriod)) | |
182 | + | then (totalActiveSWOP + ((poolVoteDiffSWOP * coef) / scale8)) | |
183 | + | else (totalVoteSWOP + ((poolVoteDiffSWOP * coef) / scale8)) | |
184 | + | let totalFreezeSWOPnew = if ((poolPeriod == currPeriod)) | |
185 | + | then totalFreezeSWOP | |
186 | + | else totalVoteSWOP | |
187 | + | let totalStrucNew = ((((((toString(totalVoteSWOPnew) + "_") + toString(totalActiveSWOPnew)) + "_") + toString(totalPeriod)) + "_") + toString(totalFreezeSWOPnew)) | |
188 | + | let totalEntry = [StringEntry(kTotalStruc, totalStrucNew)] | |
189 | + | ((((userPoolEntry ++ userTotalEntry) ++ poolEntry) ++ totalEntry) ++ calcDeleteEntry(toString(i.caller), poolAddress, userPoolVoteSWOPnew)) | |
190 | + | } | |
74 | 191 | else { | |
75 | - | let $acc130203063 = calcVoteDiffSWOP($acc030203063, $list30203063[0]) | |
76 | - | if (($size30203063 == 1)) | |
77 | - | then $acc130203063 | |
78 | - | else { | |
79 | - | let $acc230203063 = calcVoteDiffSWOP($acc130203063, $list30203063[1]) | |
80 | - | if (($size30203063 == 2)) | |
81 | - | then $acc230203063 | |
82 | - | else { | |
83 | - | let $acc330203063 = calcVoteDiffSWOP($acc230203063, $list30203063[2]) | |
84 | - | if (($size30203063 == 3)) | |
85 | - | then $acc330203063 | |
86 | - | else { | |
87 | - | let $acc430203063 = calcVoteDiffSWOP($acc330203063, $list30203063[3]) | |
88 | - | if (($size30203063 == 4)) | |
89 | - | then $acc430203063 | |
90 | - | else { | |
91 | - | let $acc530203063 = calcVoteDiffSWOP($acc430203063, $list30203063[4]) | |
92 | - | if (($size30203063 == 5)) | |
93 | - | then $acc530203063 | |
94 | - | else { | |
95 | - | let $acc630203063 = calcVoteDiffSWOP($acc530203063, $list30203063[5]) | |
96 | - | if (($size30203063 == 6)) | |
97 | - | then $acc630203063 | |
98 | - | else { | |
99 | - | let $acc730203063 = calcVoteDiffSWOP($acc630203063, $list30203063[6]) | |
100 | - | if (($size30203063 == 7)) | |
101 | - | then $acc730203063 | |
102 | - | else { | |
103 | - | let $acc830203063 = calcVoteDiffSWOP($acc730203063, $list30203063[7]) | |
104 | - | if (($size30203063 == 8)) | |
105 | - | then $acc830203063 | |
106 | - | else { | |
107 | - | let $acc930203063 = calcVoteDiffSWOP($acc830203063, $list30203063[8]) | |
108 | - | throw("List size exceed 8") | |
109 | - | } | |
110 | - | } | |
111 | - | } | |
112 | - | } | |
113 | - | } | |
114 | - | } | |
115 | - | } | |
116 | - | } | |
192 | + | let removePoolVote = -(poolVoteDiffSWOP) | |
193 | + | let userPoolFreezeSWOPnew = if ((userPoolVotePeriod == currPeriod)) | |
194 | + | then min([userPoolFreezeSWOP, userPoolVoteSWOPnew]) | |
195 | + | else userPoolVoteSWOPnew | |
196 | + | let userPoolActiveVoteSWOPnew = if (((userPoolVoteSWOP - userPoolFreezeSWOP) == 0)) | |
197 | + | then 0 | |
198 | + | else (userPoolFreezeSWOPnew + (((userPoolActiveVoteSWOP - userPoolFreezeSWOP) * (userPoolVoteSWOPnew - userPoolFreezeSWOPnew)) / (userPoolVoteSWOP - userPoolFreezeSWOP))) | |
199 | + | let newUnvoted = max([0, (removePoolVote - (if ((userUnvotedPeriod == currPeriod)) | |
200 | + | then (userPoolVoteSWOP - userPoolFreezeSWOP) | |
201 | + | else 0))]) | |
202 | + | let userUnvotedNew = if ((userUnvotedPeriod == currPeriod)) | |
203 | + | then userUnvoted | |
204 | + | else (0 + newUnvoted) | |
205 | + | let userUnvotedPeriodNew = if ((newUnvoted > 0)) | |
206 | + | then currPeriod | |
207 | + | else userUnvotedPeriod | |
208 | + | let userPoolStrucNew = ((((((toString(userPoolVoteSWOPnew) + "_") + toString(userPoolActiveVoteSWOPnew)) + "_") + toString(currPeriod)) + "_") + toString(userPoolFreezeSWOPnew)) | |
209 | + | let userPoolEntry = [StringEntry((((toString(i.caller) + "_") + poolAddress) + kUserPoolStruc), userPoolStrucNew)] | |
210 | + | let userTotalStrucNew = ((((toString(userTotalVoteSWOPnew) + "_") + toString(userUnvotedNew)) + "_") + toString(currPeriod)) | |
211 | + | let userTotalEntry = [StringEntry((toString(i.caller) + kUserTotalStruc), userTotalStrucNew)] | |
212 | + | let poolVoteSWOPnew = (poolVoteSWOP - removePoolVote) | |
213 | + | let poolFreezeSWOPnew = if ((poolPeriod == currPeriod)) | |
214 | + | then min([poolFreezeSWOP, poolVoteSWOPnew]) | |
215 | + | else poolVoteSWOPnew | |
216 | + | let poolActiveSWOPnew = if (((poolVoteSWOP - poolFreezeSWOP) == 0)) | |
217 | + | then 0 | |
218 | + | else (poolFreezeSWOPnew + (((poolActiveSWOP - poolFreezeSWOP) * (poolVoteSWOPnew - poolFreezeSWOPnew)) / (poolVoteSWOP - poolFreezeSWOP))) | |
219 | + | let poolStrucNew = ((((((toString(poolVoteSWOPnew) + "_") + toString(poolActiveSWOPnew)) + "_") + toString(currPeriod)) + "_") + toString(poolFreezeSWOPnew)) | |
220 | + | let poolEntry = [StringEntry((poolAddress + kPoolStruc), poolStrucNew)] | |
221 | + | let totalVoteSWOPnew = (totalVoteSWOP - removePoolVote) | |
222 | + | let totalFreezeSWOPnew = if ((totalPeriod == currPeriod)) | |
223 | + | then min([totalFreezeSWOP, totalVoteSWOPnew]) | |
224 | + | else totalVoteSWOPnew | |
225 | + | let totalActiveSWOPnew = if (((totalVoteSWOP - totalFreezeSWOP) == 0)) | |
226 | + | then 0 | |
227 | + | else (totalFreezeSWOPnew + (((totalActiveSWOP - totalFreezeSWOP) * (totalVoteSWOPnew - totalFreezeSWOPnew)) / (totalVoteSWOP - totalFreezeSWOP))) | |
228 | + | let totalStrucNew = ((((((toString(totalVoteSWOPnew) + "_") + toString(totalActiveSWOPnew)) + "_") + toString(totalPeriod)) + "_") + toString(totalFreezeSWOPnew)) | |
229 | + | let totalEntry = [StringEntry(kTotalStruc, totalStrucNew)] | |
230 | + | ((((userPoolEntry ++ userTotalEntry) ++ poolEntry) ++ totalEntry) ++ calcDeleteEntry(toString(i.caller), poolAddress, userPoolVoteSWOPnew)) | |
117 | 231 | } | |
118 | - | } | |
119 | - | let userTotalVoteSWOPNew = (userTotalVoteSWOP + userVoteDiffSWOP) | |
120 | - | let totalVoteSWOPnew = (totalVoteSWOP + userVoteDiffSWOP) | |
121 | - | let userDataEntry = { | |
122 | - | let $list32173258 = poolAddresses | |
123 | - | let $size32173258 = size($list32173258) | |
124 | - | let $acc032173258 = nil | |
125 | - | if (($size32173258 == 0)) | |
126 | - | then $acc032173258 | |
127 | - | else { | |
128 | - | let $acc132173258 = userVoteEntry($acc032173258, $list32173258[0]) | |
129 | - | if (($size32173258 == 1)) | |
130 | - | then $acc132173258 | |
131 | - | else { | |
132 | - | let $acc232173258 = userVoteEntry($acc132173258, $list32173258[1]) | |
133 | - | if (($size32173258 == 2)) | |
134 | - | then $acc232173258 | |
135 | - | else { | |
136 | - | let $acc332173258 = userVoteEntry($acc232173258, $list32173258[2]) | |
137 | - | if (($size32173258 == 3)) | |
138 | - | then $acc332173258 | |
139 | - | else { | |
140 | - | let $acc432173258 = userVoteEntry($acc332173258, $list32173258[3]) | |
141 | - | if (($size32173258 == 4)) | |
142 | - | then $acc432173258 | |
143 | - | else { | |
144 | - | let $acc532173258 = userVoteEntry($acc432173258, $list32173258[4]) | |
145 | - | if (($size32173258 == 5)) | |
146 | - | then $acc532173258 | |
147 | - | else { | |
148 | - | let $acc632173258 = userVoteEntry($acc532173258, $list32173258[5]) | |
149 | - | if (($size32173258 == 6)) | |
150 | - | then $acc632173258 | |
151 | - | else { | |
152 | - | let $acc732173258 = userVoteEntry($acc632173258, $list32173258[6]) | |
153 | - | if (($size32173258 == 7)) | |
154 | - | then $acc732173258 | |
155 | - | else { | |
156 | - | let $acc832173258 = userVoteEntry($acc732173258, $list32173258[7]) | |
157 | - | if (($size32173258 == 8)) | |
158 | - | then $acc832173258 | |
159 | - | else { | |
160 | - | let $acc932173258 = userVoteEntry($acc832173258, $list32173258[8]) | |
161 | - | throw("List size exceed 8") | |
162 | - | } | |
163 | - | } | |
164 | - | } | |
165 | - | } | |
166 | - | } | |
167 | - | } | |
168 | - | } | |
169 | - | } | |
170 | - | } | |
171 | - | } | |
172 | - | let poolDataEntry = { | |
173 | - | let $list32833324 = poolAddresses | |
174 | - | let $size32833324 = size($list32833324) | |
175 | - | let $acc032833324 = nil | |
176 | - | if (($size32833324 == 0)) | |
177 | - | then $acc032833324 | |
178 | - | else { | |
179 | - | let $acc132833324 = poolVoteEntry($acc032833324, $list32833324[0]) | |
180 | - | if (($size32833324 == 1)) | |
181 | - | then $acc132833324 | |
182 | - | else { | |
183 | - | let $acc232833324 = poolVoteEntry($acc132833324, $list32833324[1]) | |
184 | - | if (($size32833324 == 2)) | |
185 | - | then $acc232833324 | |
186 | - | else { | |
187 | - | let $acc332833324 = poolVoteEntry($acc232833324, $list32833324[2]) | |
188 | - | if (($size32833324 == 3)) | |
189 | - | then $acc332833324 | |
190 | - | else { | |
191 | - | let $acc432833324 = poolVoteEntry($acc332833324, $list32833324[3]) | |
192 | - | if (($size32833324 == 4)) | |
193 | - | then $acc432833324 | |
194 | - | else { | |
195 | - | let $acc532833324 = poolVoteEntry($acc432833324, $list32833324[4]) | |
196 | - | if (($size32833324 == 5)) | |
197 | - | then $acc532833324 | |
198 | - | else { | |
199 | - | let $acc632833324 = poolVoteEntry($acc532833324, $list32833324[5]) | |
200 | - | if (($size32833324 == 6)) | |
201 | - | then $acc632833324 | |
202 | - | else { | |
203 | - | let $acc732833324 = poolVoteEntry($acc632833324, $list32833324[6]) | |
204 | - | if (($size32833324 == 7)) | |
205 | - | then $acc732833324 | |
206 | - | else { | |
207 | - | let $acc832833324 = poolVoteEntry($acc732833324, $list32833324[7]) | |
208 | - | if (($size32833324 == 8)) | |
209 | - | then $acc832833324 | |
210 | - | else { | |
211 | - | let $acc932833324 = poolVoteEntry($acc832833324, $list32833324[8]) | |
212 | - | throw("List size exceed 8") | |
213 | - | } | |
214 | - | } | |
215 | - | } | |
216 | - | } | |
217 | - | } | |
218 | - | } | |
219 | - | } | |
220 | - | } | |
221 | - | } | |
222 | - | } | |
223 | - | if ((userTotalVoteSWOPNew > userSWOPinGovernance)) | |
224 | - | then throw(((((toString(this) + " has ") + toString(userSWOPinGovernance)) + " SWOP in governance. New SWOP in voting ") + toString(userTotalVoteSWOPNew))) | |
225 | - | else ((userDataEntry ++ poolDataEntry) ++ [IntegerEntry((toString(i.caller) + kUserTotalVoteSWOP), userTotalVoteSWOPNew), IntegerEntry(kTotalVoteSWOP, totalVoteSWOPnew)]) | |
226 | - | } | |
227 | 232 | } | |
228 | 233 | ||
229 | 234 | ||
230 | 235 | @Verifier(tx) | |
231 | 236 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
232 | 237 |
github/deemru/w8io/3ef1775 67.68 ms ◑