tx · Gs8gNDo52ebruJCoiaueamMTtZ8ksTPjtPM37kWppyL1 3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy: -0.00900000 Waves 2022.09.23 15:22 [2241779] smart account 3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy > SELF 0.00000000 Waves
{ "type": 13, "id": "Gs8gNDo52ebruJCoiaueamMTtZ8ksTPjtPM37kWppyL1", "fee": 900000, "feeAssetId": null, "timestamp": 1663935743642, "version": 2, "chainId": 84, "sender": "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy", "senderPublicKey": "C3PaRKeL8AUKbwUqdniMQtThgcTh5DYHV1777Hkxy7rp", "proofs": [ "52ugCBKkLe2vtGXaf5ZVbUvR1a78e92NYCntUc1GM21X4erkTJD8n5BgGCTQ41VVg15AtKwE61fLVoiff6Voz299" ], "script": "base64:BgIoCAISBgoECAgBARIHCgUICAEBGBIECgIBCBIDCgEBEgMKAQESAwoBAS0AC3JldmlzaW9uTnVtAgAAA1NFUAICX18ADURFRkFVTFRRVU9SVU0AoMIeABBnb3ZJZHhQcm9wb3NhbElkAAEAEmdvdklkeFByb3Bvc2FsVHhJZAACAApnb3ZJZHhUeXBlAAMADGdvdklkeEF1dGhvcgAEAAlnb3ZJZHhVcmwABQALZ292SWR4VGl0bGUABgALZ292SWR4U3RhcnQABwAJZ292SWR4RW5kAAgADGdvdklkeFN0YXR1cwAJAAtnb3ZJZHhUeElkcwAKAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAEMZ2V0SW50T3JFbHNlAgNrZXkKZGVmYXVsdFZhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkFCmRlZmF1bHRWYWwAGUlkeENvbnRyb2xDZmdOZXV0cmlub0RhcHAAAQAYSWR4Q29udHJvbENmZ0F1Y3Rpb25EYXBwAAIAFElkeENvbnRyb2xDZmdScGREYXBwAAMAFUlkeENvbnRyb2xDZmdNYXRoRGFwcAAEABxJZHhDb250cm9sQ2ZnTGlxdWlkYXRpb25EYXBwAAUAFUlkeENvbnRyb2xDZmdSZXN0RGFwcAAGAB1JZHhDb250cm9sQ2ZnTm9kZVJlZ2lzdHJ5RGFwcAAHABxJZHhDb250cm9sQ2ZnTnNidFN0YWtpbmdEYXBwAAgAGUlkeENvbnRyb2xDZmdNZWRpYXRvckRhcHAACQAcSWR4Q29udHJvbENmZ1N1cmZTdGFraW5nRGFwcAAKACBJZHhDb250cm9sQ2ZnR25zYnRDb250cm9sbGVyRGFwcAALARFrZXlDb250cm9sQWRkcmVzcwACHCVzJXNfX2NvbmZpZ19fY29udHJvbEFkZHJlc3MBDWtleUNvbnRyb2xDZmcAAhElc19fY29udHJvbENvbmZpZwEUcmVhZENvbnRyb2xDZmdPckZhaWwBB2NvbnRyb2wJALUJAgkBD2dldFN0cmluZ09yRmFpbAIFB2NvbnRyb2wJAQ1rZXlDb250cm9sQ2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCCmNvbnRyb2xDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQpjb250cm9sQ2ZnBQNpZHgJAKwCAgItQ29udHJvbCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAPY29udHJvbENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJARFrZXlDb250cm9sQWRkcmVzcwACIzNQNUJmZDU4UFBmTnZCTTJIeThRZmJjRHFNZU50emc3S2ZQAApjb250cm9sQ2ZnCQEUcmVhZENvbnRyb2xDZmdPckZhaWwBBQ9jb250cm9sQ29udHJhY3QAF2duc2J0Q29udHJvbGxlckNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUgSWR4Q29udHJvbENmZ0duc2J0Q29udHJvbGxlckRhcHABDWtleVByb3Bvc2FsSWQAAg4lc19fcHJvcG9zYWxJZAERa2V5UHJvcG9zYWxRdW9ydW0AAhIlc19fcXVvcnVtUmVxdWlyZWQBE2tleVByb3Bvc2FsRGF0YUJ5SWQBCnByb3Bvc2FsSWQJAKwCAgIUJXMlZF9fcHJvcG9zYWxEYXRhX18JAKQDAQUKcHJvcG9zYWxJZAEXa2V5UHJvcG9zYWxZZXNWb3Rlc0J5SWQBCnByb3Bvc2FsSWQJAKwCAgITJXMlZF9fcHJvcG9zYWxZZXNfXwkApAMBBQpwcm9wb3NhbElkARZrZXlQcm9wb3NhbE5vVm90ZXNCeUlkAQpwcm9wb3NhbElkCQCsAgICEiVzJWRfX3Byb3Bvc2FsTm9fXwkApAMBBQpwcm9wb3NhbElkARlrZXlQcm9wb3NhbFllc0J5SWRBbmRVc2VyAgpwcm9wb3NhbElkCHVzZXJBZGRyCQC5CQIJAMwIAgIGJXMlZCVzCQDMCAICD3Byb3Bvc2FsVXNlclllcwkAzAgCCQCkAwEFCnByb3Bvc2FsSWQJAMwIAgUIdXNlckFkZHIFA25pbAUDU0VQARhrZXlQcm9wb3NhbE5vQnlJZEFuZFVzZXICCnByb3Bvc2FsSWQIdXNlckFkZHIJALkJAgkAzAgCAgYlcyVkJXMJAMwIAgIOcHJvcG9zYWxVc2VyTm8JAMwIAgkApAMBBQpwcm9wb3NhbElkCQDMCAIFCHVzZXJBZGRyBQNuaWwFA1NFUAEJYXNBbnlMaXN0AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQBbAUHJG1hdGNoMAUBbAkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFpBQckbWF0Y2gwBQFpCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQxwcm9wb3NhbERhdGELCnByb3Bvc2FsSWQMcHJvcG9zYWxUeElkBHR5cGUGYXV0aG9yCWZvcnVtTGluawV0aXRsZQxwcm9wb3NhbFRpbWUPdm90aW5nU3RhcnRUaW1lDXZvdGluZ0VuZFRpbWUGc3RhdHVzBXR4SWRzCQC5CQIJAMwIAgIWJWQlcyVzJXMlcyVzJWQlZCVkJXMlcwkAzAgCCQCkAwEFCnByb3Bvc2FsSWQJAMwIAgUMcHJvcG9zYWxUeElkCQDMCAIFBHR5cGUJAMwIAgUGYXV0aG9yCQDMCAIFCWZvcnVtTGluawkAzAgCBQV0aXRsZQkAzAgCCQCkAwEFDHByb3Bvc2FsVGltZQkAzAgCCQCkAwEFD3ZvdGluZ1N0YXJ0VGltZQkAzAgCCQCkAwEFDXZvdGluZ0VuZFRpbWUJAMwIAgUGc3RhdHVzCQDMCAIJALkJAgUFdHhJZHMCAToFA25pbAUDU0VQAQ5pbml0aWF0ZVZvdGluZwkMcHJvcG9zYWxUeElkBHR5cGUGYXV0aG9yCWZvcnVtTGluawV0aXRsZQ92b3RpbmdTdGFydFRpbWUNdm90aW5nRW5kVGltZQZzdGF0dXMFdHhJZHMECnByb3Bvc2FsSWQJAGQCCQEMZ2V0SW50T3JFbHNlAgkBDWtleVByb3Bvc2FsSWQAAAAAAQQGcXVvcnVtCQEMZ2V0SW50T3JFbHNlAgkBEWtleVByb3Bvc2FsUXVvcnVtAAUNREVGQVVMVFFVT1JVTQQMcHJvcG9zYWxUaW1lCAkBBXZhbHVlAQkA7QcBBQZoZWlnaHQJdGltZXN0YW1wCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlQcm9wb3NhbElkAAUKcHJvcG9zYWxJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBF2tleVByb3Bvc2FsWWVzVm90ZXNCeUlkAQUKcHJvcG9zYWxJZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5UHJvcG9zYWxOb1ZvdGVzQnlJZAEFCnByb3Bvc2FsSWQAAAkAzAgCCQELU3RyaW5nRW50cnkCCQETa2V5UHJvcG9zYWxEYXRhQnlJZAEFCnByb3Bvc2FsSWQJAQxwcm9wb3NhbERhdGELBQpwcm9wb3NhbElkBQxwcm9wb3NhbFR4SWQFBHR5cGUFBmF1dGhvcgUJZm9ydW1MaW5rBQV0aXRsZQUMcHJvcG9zYWxUaW1lBQ92b3RpbmdTdGFydFRpbWUFDXZvdGluZ0VuZFRpbWUFBnN0YXR1cwUFdHhJZHMFA25pbAUMcHJvcG9zYWxUeElkAQhjYXN0Vm90ZQQKcHJvcG9zYWxJZA51c2VyQWRkcmVzc1N0cgd5ZXNEaWZmBm5vRGlmZgQKb2xkVXNlclllcwkBDGdldEludE9yRWxzZQIJARlrZXlQcm9wb3NhbFllc0J5SWRBbmRVc2VyAgUKcHJvcG9zYWxJZAUOdXNlckFkZHJlc3NTdHIAAAQJb2xkVXNlck5vCQEMZ2V0SW50T3JFbHNlAgkBGGtleVByb3Bvc2FsTm9CeUlkQW5kVXNlcgIFCnByb3Bvc2FsSWQFDnVzZXJBZGRyZXNzU3RyAAAEC29sZFRvdGFsWWVzCQEMZ2V0SW50T3JFbHNlAgkBF2tleVByb3Bvc2FsWWVzVm90ZXNCeUlkAQUKcHJvcG9zYWxJZAAABApvbGRUb3RhbE5vCQEMZ2V0SW50T3JFbHNlAgkBFmtleVByb3Bvc2FsTm9Wb3Rlc0J5SWQBBQpwcm9wb3NhbElkAAAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGWtleVByb3Bvc2FsWWVzQnlJZEFuZFVzZXICBQpwcm9wb3NhbElkBQ51c2VyQWRkcmVzc1N0cgUHeWVzRGlmZgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGGtleVByb3Bvc2FsTm9CeUlkQW5kVXNlcgIFCnByb3Bvc2FsSWQFDnVzZXJBZGRyZXNzU3RyBQZub0RpZmYJAMwIAgkBDEludGVnZXJFbnRyeQIJARdrZXlQcm9wb3NhbFllc1ZvdGVzQnlJZAEFCnByb3Bvc2FsSWQJAGQCCQBlAgULb2xkVG90YWxZZXMFCm9sZFVzZXJZZXMFB3llc0RpZmYJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlQcm9wb3NhbE5vVm90ZXNCeUlkAQUKcHJvcG9zYWxJZAkAZAIJAGUCBQpvbGRUb3RhbE5vBQlvbGRVc2VyTm8FBm5vRGlmZgUDbmlsBQR1bml0BgFpARJpbml0aWF0ZUlkZWFWb3RpbmcECWZvcnVtTGluawV0aXRsZQ92b3RpbmdTdGFydFRpbWUNdm90aW5nRW5kVGltZQkBDmluaXRpYXRlVm90aW5nCQkA2AQBCAUBaQ10cmFuc2FjdGlvbklkAgRJREVBCQClCAEIBQFpBmNhbGxlcgUJZm9ydW1MaW5rBQV0aXRsZQUPdm90aW5nU3RhcnRUaW1lBQ12b3RpbmdFbmRUaW1lAgdQRU5ESU5HBQNuaWwBaQEUaW5pdGlhdGVVcGRhdGVWb3RpbmcFCWZvcnVtTGluawV0aXRsZQ92b3RpbmdTdGFydFRpbWUNdm90aW5nRW5kVGltZQV0eElkcwkBDmluaXRpYXRlVm90aW5nCQkA2AQBCAUBaQ10cmFuc2FjdGlvbklkAgZVUERBVEUJAKUIAQgFAWkGY2FsbGVyBQlmb3J1bUxpbmsFBXRpdGxlBQ92b3RpbmdTdGFydFRpbWUFDXZvdGluZ0VuZFRpbWUCB1BFTkRJTkcFBXR4SWRzAWkBDGNhbmNlbFZvdGluZwIKcHJvcG9zYWxJZAZyZWFzb24JAJQKAgUDbmlsBQR1bml0AWkBB3ZvdGVZZXMBCnByb3Bvc2FsSWQEDnVzZXJBZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQJZ25zYnREYXRhCQEJYXNBbnlMaXN0AQkA/AcEBRdnbnNidENvbnRyb2xsZXJDb250cmFjdAIUZ25zYnRJbmZvU1lTUkVBRE9OTFkJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgAACQDMCAIAAAUDbmlsBQNuaWwECGduc2J0QW10CQEFYXNJbnQBCQCRAwIFCWduc2J0RGF0YQAACQEIY2FzdFZvdGUEBQpwcm9wb3NhbElkBQ51c2VyQWRkcmVzc1N0cgUIZ25zYnRBbXQAAAFpAQZ2b3RlTm8BCnByb3Bvc2FsSWQEDnVzZXJBZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQJZ25zYnREYXRhCQEJYXNBbnlMaXN0AQkA/AcEBRdnbnNidENvbnRyb2xsZXJDb250cmFjdAIUZ25zYnRJbmZvU1lTUkVBRE9OTFkJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgAACQDMCAIAAAUDbmlsBQNuaWwECGduc2J0QW10CQEFYXNJbnQBCQCRAwIFCWduc2J0RGF0YQAACQEIY2FzdFZvdGUEBQpwcm9wb3NhbElkBQ51c2VyQWRkcmVzc1N0cgAABQhnbnNidEFtdAFpAQthcHBseVZvdGluZwEKcHJvcG9zYWxJZAkAlAoCBQNuaWwFBHVuaXQAtW/iiw==", "height": 2241779, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BZoUdp1G8t5XH8xGDSuxsNxVQNhBbw2Unj74AAgGiXS Next: HXDyrG1adHJ6Z78hcKyawZqaW8kTCFLxFfpuLjbXdhr3 Diff:
Old | New | Differences | |
---|---|---|---|
85 | 85 | func keyProposalYesVotesById (proposalId) = ("%s%d__proposalYes__" + toString(proposalId)) | |
86 | 86 | ||
87 | 87 | ||
88 | - | func keyProposalNoVotesById (proposalId) = ("%s%d__ | |
88 | + | func keyProposalNoVotesById (proposalId) = ("%s%d__proposalNo__" + toString(proposalId)) | |
89 | 89 | ||
90 | 90 | ||
91 | 91 | func keyProposalYesByIdAndUser (proposalId,userAddr) = makeString(["%s%d%s", "proposalUserYes", toString(proposalId), userAddr], SEP) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let revisionNum = "" | |
5 | 5 | ||
6 | 6 | let SEP = "__" | |
7 | 7 | ||
8 | 8 | let DEFAULTQUORUM = 500000 | |
9 | 9 | ||
10 | 10 | let govIdxProposalId = 1 | |
11 | 11 | ||
12 | 12 | let govIdxProposalTxId = 2 | |
13 | 13 | ||
14 | 14 | let govIdxType = 3 | |
15 | 15 | ||
16 | 16 | let govIdxAuthor = 4 | |
17 | 17 | ||
18 | 18 | let govIdxUrl = 5 | |
19 | 19 | ||
20 | 20 | let govIdxTitle = 6 | |
21 | 21 | ||
22 | 22 | let govIdxStart = 7 | |
23 | 23 | ||
24 | 24 | let govIdxEnd = 8 | |
25 | 25 | ||
26 | 26 | let govIdxStatus = 9 | |
27 | 27 | ||
28 | 28 | let govIdxTxIds = 10 | |
29 | 29 | ||
30 | 30 | func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], "")) | |
31 | 31 | ||
32 | 32 | ||
33 | 33 | func getIntOrElse (key,defaultVal) = valueOrElse(getInteger(this, key), defaultVal) | |
34 | 34 | ||
35 | 35 | ||
36 | 36 | let IdxControlCfgNeutrinoDapp = 1 | |
37 | 37 | ||
38 | 38 | let IdxControlCfgAuctionDapp = 2 | |
39 | 39 | ||
40 | 40 | let IdxControlCfgRpdDapp = 3 | |
41 | 41 | ||
42 | 42 | let IdxControlCfgMathDapp = 4 | |
43 | 43 | ||
44 | 44 | let IdxControlCfgLiquidationDapp = 5 | |
45 | 45 | ||
46 | 46 | let IdxControlCfgRestDapp = 6 | |
47 | 47 | ||
48 | 48 | let IdxControlCfgNodeRegistryDapp = 7 | |
49 | 49 | ||
50 | 50 | let IdxControlCfgNsbtStakingDapp = 8 | |
51 | 51 | ||
52 | 52 | let IdxControlCfgMediatorDapp = 9 | |
53 | 53 | ||
54 | 54 | let IdxControlCfgSurfStakingDapp = 10 | |
55 | 55 | ||
56 | 56 | let IdxControlCfgGnsbtControllerDapp = 11 | |
57 | 57 | ||
58 | 58 | func keyControlAddress () = "%s%s__config__controlAddress" | |
59 | 59 | ||
60 | 60 | ||
61 | 61 | func keyControlCfg () = "%s__controlConfig" | |
62 | 62 | ||
63 | 63 | ||
64 | 64 | func readControlCfgOrFail (control) = split(getStringOrFail(control, keyControlCfg()), SEP) | |
65 | 65 | ||
66 | 66 | ||
67 | 67 | func getContractAddressOrFail (controlCfg,idx) = valueOrErrorMessage(addressFromString(controlCfg[idx]), ("Control cfg doesn't contain address at index " + toString(idx))) | |
68 | 68 | ||
69 | 69 | ||
70 | 70 | let controlContract = addressFromStringValue(valueOrElse(getString(this, keyControlAddress()), "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP")) | |
71 | 71 | ||
72 | 72 | let controlCfg = readControlCfgOrFail(controlContract) | |
73 | 73 | ||
74 | 74 | let gnsbtControllerContract = getContractAddressOrFail(controlCfg, IdxControlCfgGnsbtControllerDapp) | |
75 | 75 | ||
76 | 76 | func keyProposalId () = "%s__proposalId" | |
77 | 77 | ||
78 | 78 | ||
79 | 79 | func keyProposalQuorum () = "%s__quorumRequired" | |
80 | 80 | ||
81 | 81 | ||
82 | 82 | func keyProposalDataById (proposalId) = ("%s%d__proposalData__" + toString(proposalId)) | |
83 | 83 | ||
84 | 84 | ||
85 | 85 | func keyProposalYesVotesById (proposalId) = ("%s%d__proposalYes__" + toString(proposalId)) | |
86 | 86 | ||
87 | 87 | ||
88 | - | func keyProposalNoVotesById (proposalId) = ("%s%d__ | |
88 | + | func keyProposalNoVotesById (proposalId) = ("%s%d__proposalNo__" + toString(proposalId)) | |
89 | 89 | ||
90 | 90 | ||
91 | 91 | func keyProposalYesByIdAndUser (proposalId,userAddr) = makeString(["%s%d%s", "proposalUserYes", toString(proposalId), userAddr], SEP) | |
92 | 92 | ||
93 | 93 | ||
94 | 94 | func keyProposalNoByIdAndUser (proposalId,userAddr) = makeString(["%s%d%s", "proposalUserNo", toString(proposalId), userAddr], SEP) | |
95 | 95 | ||
96 | 96 | ||
97 | 97 | func asAnyList (v) = match v { | |
98 | 98 | case l: List[Any] => | |
99 | 99 | l | |
100 | 100 | case _ => | |
101 | 101 | throw("fail to cast into List[Any]") | |
102 | 102 | } | |
103 | 103 | ||
104 | 104 | ||
105 | 105 | func asInt (v) = match v { | |
106 | 106 | case i: Int => | |
107 | 107 | i | |
108 | 108 | case _ => | |
109 | 109 | throw("fail to cast into Int") | |
110 | 110 | } | |
111 | 111 | ||
112 | 112 | ||
113 | 113 | func proposalData (proposalId,proposalTxId,type,author,forumLink,title,proposalTime,votingStartTime,votingEndTime,status,txIds) = makeString(["%d%s%s%s%s%s%d%d%d%s%s", toString(proposalId), proposalTxId, type, author, forumLink, title, toString(proposalTime), toString(votingStartTime), toString(votingEndTime), status, makeString(txIds, ":")], SEP) | |
114 | 114 | ||
115 | 115 | ||
116 | 116 | func initiateVoting (proposalTxId,type,author,forumLink,title,votingStartTime,votingEndTime,status,txIds) = { | |
117 | 117 | let proposalId = (getIntOrElse(keyProposalId(), 0) + 1) | |
118 | 118 | let quorum = getIntOrElse(keyProposalQuorum(), DEFAULTQUORUM) | |
119 | 119 | let proposalTime = value(blockInfoByHeight(height)).timestamp | |
120 | 120 | $Tuple2([IntegerEntry(keyProposalId(), proposalId), IntegerEntry(keyProposalYesVotesById(proposalId), 0), IntegerEntry(keyProposalNoVotesById(proposalId), 0), StringEntry(keyProposalDataById(proposalId), proposalData(proposalId, proposalTxId, type, author, forumLink, title, proposalTime, votingStartTime, votingEndTime, status, txIds))], proposalTxId) | |
121 | 121 | } | |
122 | 122 | ||
123 | 123 | ||
124 | 124 | func castVote (proposalId,userAddressStr,yesDiff,noDiff) = { | |
125 | 125 | let oldUserYes = getIntOrElse(keyProposalYesByIdAndUser(proposalId, userAddressStr), 0) | |
126 | 126 | let oldUserNo = getIntOrElse(keyProposalNoByIdAndUser(proposalId, userAddressStr), 0) | |
127 | 127 | let oldTotalYes = getIntOrElse(keyProposalYesVotesById(proposalId), 0) | |
128 | 128 | let oldTotalNo = getIntOrElse(keyProposalNoVotesById(proposalId), 0) | |
129 | 129 | $Tuple2([IntegerEntry(keyProposalYesByIdAndUser(proposalId, userAddressStr), yesDiff), IntegerEntry(keyProposalNoByIdAndUser(proposalId, userAddressStr), noDiff), IntegerEntry(keyProposalYesVotesById(proposalId), ((oldTotalYes - oldUserYes) + yesDiff)), IntegerEntry(keyProposalNoVotesById(proposalId), ((oldTotalNo - oldUserNo) + noDiff))], unit) | |
130 | 130 | } | |
131 | 131 | ||
132 | 132 | ||
133 | 133 | @Callable(i) | |
134 | 134 | func initiateIdeaVoting (forumLink,title,votingStartTime,votingEndTime) = initiateVoting(toBase58String(i.transactionId), "IDEA", toString(i.caller), forumLink, title, votingStartTime, votingEndTime, "PENDING", nil) | |
135 | 135 | ||
136 | 136 | ||
137 | 137 | ||
138 | 138 | @Callable(i) | |
139 | 139 | func initiateUpdateVoting (forumLink,title,votingStartTime,votingEndTime,txIds) = initiateVoting(toBase58String(i.transactionId), "UPDATE", toString(i.caller), forumLink, title, votingStartTime, votingEndTime, "PENDING", txIds) | |
140 | 140 | ||
141 | 141 | ||
142 | 142 | ||
143 | 143 | @Callable(i) | |
144 | 144 | func cancelVoting (proposalId,reason) = $Tuple2(nil, unit) | |
145 | 145 | ||
146 | 146 | ||
147 | 147 | ||
148 | 148 | @Callable(i) | |
149 | 149 | func voteYes (proposalId) = { | |
150 | 150 | let userAddressStr = toString(i.caller) | |
151 | 151 | let gnsbtData = asAnyList(invoke(gnsbtControllerContract, "gnsbtInfoSYSREADONLY", [userAddressStr, 0, 0], nil)) | |
152 | 152 | let gnsbtAmt = asInt(gnsbtData[0]) | |
153 | 153 | castVote(proposalId, userAddressStr, gnsbtAmt, 0) | |
154 | 154 | } | |
155 | 155 | ||
156 | 156 | ||
157 | 157 | ||
158 | 158 | @Callable(i) | |
159 | 159 | func voteNo (proposalId) = { | |
160 | 160 | let userAddressStr = toString(i.caller) | |
161 | 161 | let gnsbtData = asAnyList(invoke(gnsbtControllerContract, "gnsbtInfoSYSREADONLY", [userAddressStr, 0, 0], nil)) | |
162 | 162 | let gnsbtAmt = asInt(gnsbtData[0]) | |
163 | 163 | castVote(proposalId, userAddressStr, 0, gnsbtAmt) | |
164 | 164 | } | |
165 | 165 | ||
166 | 166 | ||
167 | 167 | ||
168 | 168 | @Callable(i) | |
169 | 169 | func applyVoting (proposalId) = $Tuple2(nil, unit) | |
170 | 170 | ||
171 | 171 |
github/deemru/w8io/873ac7e 30.67 ms ◑![]()