tx · GJyRJfvep246z95N8QrM5uMoVKYfRL2TE1hfEocroDhe

3MrqFfv385KAzAqqdQyprR7FMLSapeifggB:  -0.01300000 Waves

2022.11.23 14:53 [2329711] smart account 3MrqFfv385KAzAqqdQyprR7FMLSapeifggB > SELF 0.00000000 Waves

{ "type": 13, "id": "GJyRJfvep246z95N8QrM5uMoVKYfRL2TE1hfEocroDhe", "fee": 1300000, "feeAssetId": null, "timestamp": 1669204392750, "version": 1, "sender": "3MrqFfv385KAzAqqdQyprR7FMLSapeifggB", "senderPublicKey": "8Tqc64F7G2nACr6yk8egBWCVAp9ZLxjTeWYdXoyQvMAN", "proofs": [ "Sb16D1Cdp9yRKaD75URKdpznQuU8gNDbqziCK9dPitZMe1V5HjYXYDj8ceC5CF29F1vesRw47uWtVrEnd5kyVPi" ], "script": "base64:BgIlCAISAwoBCBIFCgMIAQESBAoCAQQSAwoBARIDCgEBEgMKAQgSABUAA1NFUAICX18BE2tleU1hbmFnZXJQdWJsaWNLZXkAAhQlc19fbWFuYWdlclB1YmxpY0tleQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBEGJsb2NrSGVpZ2h0RXJyb3IACQACAQIvVGhlIGJsb2NrJ3MgaGVpZ2h0IGlzIHRvbyBiaWcgZm9yIHRoaXMgcHJvcG9zYWwBEGFscmVhZHlWb3RlRXJyb3IACQACAQIWWW91IGhhdmUgYWxyZWFkeSB2b3RlZAELbm9Wb3RlRXJyb3IACQACAQIaWW91IGhhdmUgbm90IGFscmVhZHkgdm90ZWQBEmd3eENvbnRyYWN0QWRkcmVzcwAJALkJAgkAzAgCAgIlcwkAzAgCAhJnd3hDb250cmFjdEFkZHJlc3MFA25pbAUDU0VQAQ9rZXlDdXJyZW50SW5kZXgACQC5CQIJAMwIAgICJXMJAMwIAgIMY3VycmVudEluZGV4BQNuaWwFA1NFUAEWa2V5UHJvcG9zYWxEZXNjcmlwdGlvbgEGbnVtYmVyCQC5CQIJAMwIAgIEJXMlZAkAzAgCAhNwcm9wb3NhbERlc2NyaXB0aW9uCQDMCAIJAKQDAQUGbnVtYmVyBQNuaWwFA1NFUAEOa2V5UHJvcG9zYWxFbmQBBm51bWJlcgkAuQkCCQDMCAICBCVzJWQJAMwIAgILcHJvcG9zYWxFbmQJAMwIAgkApAMBBQZudW1iZXIFA25pbAUDU0VQAR5rZXlUb3RhbFBvc2l0aXZlVm90ZUJ5UHJvcG9zYWwBBm51bWJlcgkAuQkCCQDMCAICBCVzJWQJAMwIAgIfcHJvcG9zYWxUb3RhbFBvc2l0aXZlVm90ZU51bWJlcgkAzAgCCQCkAwEFBm51bWJlcgUDbmlsBQNTRVABHmtleVRvdGFsTmVnYXRpdmVWb3RlQnlQcm9wb3NhbAEGbnVtYmVyCQC5CQIJAMwIAgIEJXMlZAkAzAgCAh9wcm9wb3NhbFRvdGFsTmVnYXRpdmVWb3RlTnVtYmVyCQDMCAIJAKQDAQUGbnVtYmVyBQNuaWwFA1NFUAENa2V5VXNlckNob2ljZQIGbnVtYmVyBHVzZXIJALkJAgkAzAgCAgYlcyVkJXMJAMwIAgIVdXNlcnNDaG9pY2VieVByb3Bvc2FsCQDMCAIJAKQDAQUGbnVtYmVyCQDMCAIFBHVzZXIFA25pbAUDU0VQAR9rZXlVc2VyTnVtYmVyVm90ZXNHd3hJblByb3Bvc2FsAgZudW1iZXIEdXNlcgkAuQkCCQDMCAICBiVzJWQlcwkAzAgCAhJ1c2Vyc0dXWGJ5UHJvcG9zYWwJAMwIAgkApAMBBQZudW1iZXIJAMwIAgUEdXNlcgUDbmlsBQNTRVABEWtleVF1b3J1bVF1YW50aXR5AQZudW1iZXIJALkJAgkAzAgCAgQlcyVkCQDMCAICDnF1b3J1bVF1YW50aXR5CQDMCAIJAKQDAQUGbnVtYmVyBQNuaWwFA1NFUAEPZ2V0Q3VycmVudEluZGV4AAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBD2tleUN1cnJlbnRJbmRleAABBWFzSW50AQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAgNJbnQEBnZhbEludAUHJG1hdGNoMAUGdmFsSW50CQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50ARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAQHJG1hdGNoMAkAoggBCQETa2V5TWFuYWdlclB1YmxpY0tleQADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQDZBAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAR1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAEByRtYXRjaDAJAKIIAQkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBCWlzTWFuYWdlcgEBaQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwCQAAAggFAWkPY2FsbGVyUHVibGljS2V5BQJwawMJAAECBQckbWF0Y2gwAgRVbml0CQAAAggFAWkGY2FsbGVyBQR0aGlzCQACAQILTWF0Y2ggZXJyb3IBC211c3RNYW5hZ2VyAQFpAwkBCWlzTWFuYWdlcgEFAWkGCQACAQIRcGVybWlzc2lvbiBkZW5pZWQHAWkBC2NvbnN0cnVjdG9yARJnd3hDb250cmFjdEFkZHJlc3MEBWNoZWNrCQELbXVzdE1hbmFnZXIBBQFpAwkAAAIFBWNoZWNrBQVjaGVjawkAzAgCCQELU3RyaW5nRW50cnkCCQESZ3d4Q29udHJhY3RBZGRyZXNzAAUSZ3d4Q29udHJhY3RBZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5Q3VycmVudEluZGV4AAAABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMc3RhcnROZXdWb3RlAwtkZXNjcmlwdGlvbhBleHBpcmF0aW9uSGVpZ2h0DHF1b3J1bU51bWJlcgQGY2hlY2tzCQDMCAIJAQttdXN0TWFuYWdlcgEFAWkFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQIdGhlSW5kZXgJAQ9nZXRDdXJyZW50SW5kZXgACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5Q3VycmVudEluZGV4AAkAZAIFCHRoZUluZGV4AAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleVByb3Bvc2FsRGVzY3JpcHRpb24BBQh0aGVJbmRleAULZGVzY3JpcHRpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5rZXlQcm9wb3NhbEVuZAEFCHRoZUluZGV4CQBkAggFCWxhc3RCbG9jawZoZWlnaHQFEGV4cGlyYXRpb25IZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlUb3RhbFBvc2l0aXZlVm90ZUJ5UHJvcG9zYWwBBQh0aGVJbmRleAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5VG90YWxOZWdhdGl2ZVZvdGVCeVByb3Bvc2FsAQUIdGhlSW5kZXgAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEWtleVF1b3J1bVF1YW50aXR5AQUIdGhlSW5kZXgFDHF1b3J1bU51bWJlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB3ZvdGVGb3ICDXByb3Bvc2FsSW5kZXgGY2hvaWNlBAZjaGVja3MJAMwIAgMJAGYCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOa2V5UHJvcG9zYWxFbmQBBQ1wcm9wb3NhbEluZGV4CAUJbGFzdEJsb2NrBmhlaWdodAYJARBibG9ja0hlaWdodEVycm9yAAkAzAgCAwkAAAIJAJ0IAgUEdGhpcwkBH2tleVVzZXJOdW1iZXJWb3Rlc0d3eEluUHJvcG9zYWwCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgUEdW5pdAYJARBhbHJlYWR5Vm90ZUVycm9yAAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAlnd3hOdW1iZXIJAQVhc0ludAEJAPwHBAkBBXZhbHVlAQkApggBCQESZ3d4Q29udHJhY3RBZGRyZXNzAAIZY2FsY1VzZXJHd3hBbW91bnRBdEhlaWdodAkAzAgCCAUBaQZjYWxsZXIJAMwIAgkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVByb3Bvc2FsRW5kAQUNcHJvcG9zYWxJbmRleAUDbmlsBQNuaWwECyR0MDM0MDYzOTg3AwUGY2hvaWNlBAdhY3Rpb24xCQEMSW50ZWdlckVudHJ5AgkBDWtleVVzZXJDaG9pY2UCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgABBAdhY3Rpb24yCQEMSW50ZWdlckVudHJ5AgkBHmtleVRvdGFsUG9zaXRpdmVWb3RlQnlQcm9wb3NhbAEFDXByb3Bvc2FsSW5kZXgJAGQCCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEea2V5VG90YWxQb3NpdGl2ZVZvdGVCeVByb3Bvc2FsAQUNcHJvcG9zYWxJbmRleAUJZ3d4TnVtYmVyCQCUCgIFB2FjdGlvbjEFB2FjdGlvbjIEB2FjdGlvbjEJAQxJbnRlZ2VyRW50cnkCCQENa2V5VXNlckNob2ljZQIFDXByb3Bvc2FsSW5kZXgJAKUIAQgFAWkGY2FsbGVyAAAEB2FjdGlvbjIJAQxJbnRlZ2VyRW50cnkCCQEea2V5VG90YWxOZWdhdGl2ZVZvdGVCeVByb3Bvc2FsAQUNcHJvcG9zYWxJbmRleAkAZAIJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAR5rZXlUb3RhbE5lZ2F0aXZlVm90ZUJ5UHJvcG9zYWwBBQ1wcm9wb3NhbEluZGV4BQlnd3hOdW1iZXIJAJQKAgUHYWN0aW9uMQUHYWN0aW9uMgQHYWN0aW9uMQgFCyR0MDM0MDYzOTg3Al8xBAdhY3Rpb24yCAULJHQwMzQwNjM5ODcCXzIJAMwIAgkBDEludGVnZXJFbnRyeQIJAR9rZXlVc2VyTnVtYmVyVm90ZXNHd3hJblByb3Bvc2FsAgUNcHJvcG9zYWxJbmRleAkApQgBCAUBaQZjYWxsZXIFCWd3eE51bWJlcgkAzAgCBQdhY3Rpb24xCQDMCAIFB2FjdGlvbjIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpkZWxldGVWb3RlAQ1wcm9wb3NhbEluZGV4BAZjaGVja3MJAMwIAgMJAGYCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOa2V5UHJvcG9zYWxFbmQBBQ1wcm9wb3NhbEluZGV4CAUJbGFzdEJsb2NrBmhlaWdodAYJARBibG9ja0hlaWdodEVycm9yAAkAzAgCAwkBAiE9AgkAnwgBCQEfa2V5VXNlck51bWJlclZvdGVzR3d4SW5Qcm9wb3NhbAIFDXByb3Bvc2FsSW5kZXgJAKUIAQgFAWkGY2FsbGVyBQR1bml0BgkBC25vVm90ZUVycm9yAAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAZhY3Rpb24DCQAAAgkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDWtleVVzZXJDaG9pY2UCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgABCQEMSW50ZWdlckVudHJ5AgkBHmtleVRvdGFsUG9zaXRpdmVWb3RlQnlQcm9wb3NhbAEFDXByb3Bvc2FsSW5kZXgJAGUCCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEea2V5VG90YWxQb3NpdGl2ZVZvdGVCeVByb3Bvc2FsAQUNcHJvcG9zYWxJbmRleAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBH2tleVVzZXJOdW1iZXJWb3Rlc0d3eEluUHJvcG9zYWwCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgkBDEludGVnZXJFbnRyeQIJAR5rZXlUb3RhbE5lZ2F0aXZlVm90ZUJ5UHJvcG9zYWwBBQ1wcm9wb3NhbEluZGV4CQBlAgkBEUBleHRyTmF0aXZlKDEwNTUpAQkBHmtleVRvdGFsTmVnYXRpdmVWb3RlQnlQcm9wb3NhbAEFDXByb3Bvc2FsSW5kZXgJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAR9rZXlVc2VyTnVtYmVyVm90ZXNHd3hJblByb3Bvc2FsAgUNcHJvcG9zYWxJbmRleAkApQgBCAUBaQZjYWxsZXIJAMwIAgUGYWN0aW9uCQDMCAIJAQtEZWxldGVFbnRyeQEJAR9rZXlVc2VyTnVtYmVyVm90ZXNHd3hJblByb3Bvc2FsAgUNcHJvcG9zYWxJbmRleAkApQgBCAUBaQZjYWxsZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleVVzZXJDaG9pY2UCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWdldFJlc3VsdFJFQURPTkxZAQ1wcm9wb3NhbEluZGV4BA1wb3NpdGl2ZVZvdGVzCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEea2V5VG90YWxQb3NpdGl2ZVZvdGVCeVByb3Bvc2FsAQUNcHJvcG9zYWxJbmRleAQNbmVnYXRpdmVWb3RlcwkBEUBleHRyTmF0aXZlKDEwNTUpAQkBHmtleVRvdGFsTmVnYXRpdmVWb3RlQnlQcm9wb3NhbAEFDXByb3Bvc2FsSW5kZXgJAJQKAgUDbmlsCQDMCAIFDXBvc2l0aXZlVm90ZXMJAMwIAgUNbmVnYXRpdmVWb3RlcwUDbmlsAWkBCnNldE1hbmFnZXIBF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEFWNoZWNrTWFuYWdlclB1YmxpY0tleQkA2QQBBRdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQMJAAACBRVjaGVja01hbmFnZXJQdWJsaWNLZXkFFWNoZWNrTWFuYWdlclB1YmxpY0tleQkAzAgCCQELU3RyaW5nRW50cnkCCQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkABRdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmNvbmZpcm1NYW5hZ2VyAAQCcG0JAR1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAEBWhhc1BNAwkBCWlzRGVmaW5lZAEFAnBtBgkAAgECEm5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQVoYXNQTQUFaGFzUE0EB2NoZWNrUE0DCQAAAggFAWkPY2FsbGVyUHVibGljS2V5CQEFdmFsdWUBBQJwbQYJAAIBAht5b3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUHY2hlY2tQTQUHY2hlY2tQTQkAzAgCCQELU3RyaW5nRW50cnkCCQETa2V5TWFuYWdlclB1YmxpY0tleQAJANgEAQkBBXZhbHVlAQUCcG0JAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQPdGFyZ2V0UHVibGljS2V5BAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQIBQJ0eA9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUPdGFyZ2V0UHVibGljS2V5yug7CA==", "chainId": 84, "height": 2329711, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4zE9PNUoRjMANVxkxx79UtZ2ykUrH1sjFYixqXD2ogcF Next: En37yv1qCQ5tF3qDDjLHwsmmBVzqeKByehiyEJdzUDj2 Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let SEP = "__"
5+
6+func keyManagerPublicKey () = "%s__managerPublicKey"
47
58
9+func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
10+
11+
12+func blockHeightError () = throw("The block's height is too big for this proposal")
13+
14+
15+func alreadyVoteError () = throw("You have already voted")
16+
17+
18+func noVoteError () = throw("You have not already voted")
19+
20+
21+func gwxContractAddress () = makeString(["%s", "gwxContractAddress"], SEP)
22+
23+
24+func keyCurrentIndex () = makeString(["%s", "currentIndex"], SEP)
25+
26+
27+func keyProposalDescription (number) = makeString(["%s%d", "proposalDescription", toString(number)], SEP)
28+
29+
30+func keyProposalEnd (number) = makeString(["%s%d", "proposalEnd", toString(number)], SEP)
31+
32+
33+func keyTotalPositiveVoteByProposal (number) = makeString(["%s%d", "proposalTotalPositiveVoteNumber", toString(number)], SEP)
34+
35+
36+func keyTotalNegativeVoteByProposal (number) = makeString(["%s%d", "proposalTotalNegativeVoteNumber", toString(number)], SEP)
37+
38+
39+func keyUserChoice (number,user) = makeString(["%s%d%s", "usersChoicebyProposal", toString(number), user], SEP)
40+
41+
42+func keyUserNumberVotesGwxInProposal (number,user) = makeString(["%s%d%s", "usersGWXbyProposal", toString(number), user], SEP)
43+
44+
45+func keyQuorumQuantity (number) = makeString(["%s%d", "quorumQuantity", toString(number)], SEP)
46+
47+
48+func getCurrentIndex () = getIntegerValue(this, keyCurrentIndex())
49+
50+
51+func asInt (val) = match val {
52+ case valInt: Int =>
53+ valInt
54+ case _ =>
55+ throw("fail to cast into Int")
56+}
57+
58+
59+func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
60+ case s: String =>
61+ fromBase58String(s)
62+ case _: Unit =>
63+ unit
64+ case _ =>
65+ throw("Match error")
66+}
67+
68+
69+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
70+ case s: String =>
71+ fromBase58String(s)
72+ case _: Unit =>
73+ unit
74+ case _ =>
75+ throw("Match error")
76+}
77+
78+
79+func isManager (i) = match managerPublicKeyOrUnit() {
80+ case pk: ByteVector =>
81+ (i.callerPublicKey == pk)
82+ case _: Unit =>
83+ (i.caller == this)
84+ case _ =>
85+ throw("Match error")
86+}
87+
88+
89+func mustManager (i) = if (isManager(i))
90+ then true
91+ else throw("permission denied")
92+
93+
94+@Callable(i)
95+func constructor (gwxContractAddress) = {
96+ let check = mustManager(i)
97+ if ((check == check))
98+ then [StringEntry(gwxContractAddress(), gwxContractAddress), IntegerEntry(keyCurrentIndex(), 0)]
99+ else throw("Strict value is not equal to itself.")
100+ }
101+
102+
103+
104+@Callable(i)
105+func startNewVote (description,expirationHeight,quorumNumber) = {
106+ let checks = [mustManager(i)]
107+ if ((checks == checks))
108+ then {
109+ let theIndex = getCurrentIndex()
110+[IntegerEntry(keyCurrentIndex(), (theIndex + 1)), StringEntry(keyProposalDescription(theIndex), description), IntegerEntry(keyProposalEnd(theIndex), (lastBlock.height + expirationHeight)), IntegerEntry(keyTotalPositiveVoteByProposal(theIndex), 0), IntegerEntry(keyTotalNegativeVoteByProposal(theIndex), 0), IntegerEntry(keyQuorumQuantity(theIndex), quorumNumber)]
111+ }
112+ else throw("Strict value is not equal to itself.")
113+ }
114+
115+
116+
117+@Callable(i)
118+func voteFor (proposalIndex,choice) = {
119+ let checks = [if ((getIntegerValue(this, keyProposalEnd(proposalIndex)) > lastBlock.height))
120+ then true
121+ else blockHeightError(), if ((getString(this, keyUserNumberVotesGwxInProposal(proposalIndex, toString(i.caller))) == unit))
122+ then true
123+ else alreadyVoteError()]
124+ if ((checks == checks))
125+ then {
126+ let gwxNumber = asInt(invoke(value(addressFromString(gwxContractAddress())), "calcUserGwxAmountAtHeight", [i.caller, getIntegerValue(keyProposalEnd(proposalIndex))], nil))
127+ let $t034063987 = if (choice)
128+ then {
129+ let action1 = IntegerEntry(keyUserChoice(proposalIndex, toString(i.caller)), 1)
130+ let action2 = IntegerEntry(keyTotalPositiveVoteByProposal(proposalIndex), (getIntegerValue(keyTotalPositiveVoteByProposal(proposalIndex)) + gwxNumber))
131+ $Tuple2(action1, action2)
132+ }
133+ else {
134+ let action1 = IntegerEntry(keyUserChoice(proposalIndex, toString(i.caller)), 0)
135+ let action2 = IntegerEntry(keyTotalNegativeVoteByProposal(proposalIndex), (getIntegerValue(keyTotalNegativeVoteByProposal(proposalIndex)) + gwxNumber))
136+ $Tuple2(action1, action2)
137+ }
138+ let action1 = $t034063987._1
139+ let action2 = $t034063987._2
140+[IntegerEntry(keyUserNumberVotesGwxInProposal(proposalIndex, toString(i.caller)), gwxNumber), action1, action2]
141+ }
142+ else throw("Strict value is not equal to itself.")
143+ }
144+
145+
146+
147+@Callable(i)
148+func deleteVote (proposalIndex) = {
149+ let checks = [if ((getIntegerValue(this, keyProposalEnd(proposalIndex)) > lastBlock.height))
150+ then true
151+ else blockHeightError(), if ((getInteger(keyUserNumberVotesGwxInProposal(proposalIndex, toString(i.caller))) != unit))
152+ then true
153+ else noVoteError()]
154+ if ((checks == checks))
155+ then {
156+ let action = if ((getIntegerValue(keyUserChoice(proposalIndex, toString(i.caller))) == 1))
157+ then IntegerEntry(keyTotalPositiveVoteByProposal(proposalIndex), (getIntegerValue(keyTotalPositiveVoteByProposal(proposalIndex)) - getIntegerValue(keyUserNumberVotesGwxInProposal(proposalIndex, toString(i.caller)))))
158+ else IntegerEntry(keyTotalNegativeVoteByProposal(proposalIndex), (getIntegerValue(keyTotalNegativeVoteByProposal(proposalIndex)) - getIntegerValue(keyUserNumberVotesGwxInProposal(proposalIndex, toString(i.caller)))))
159+[action, DeleteEntry(keyUserNumberVotesGwxInProposal(proposalIndex, toString(i.caller))), DeleteEntry(keyUserChoice(proposalIndex, toString(i.caller)))]
160+ }
161+ else throw("Strict value is not equal to itself.")
162+ }
163+
164+
165+
166+@Callable(i)
167+func getResultREADONLY (proposalIndex) = {
168+ let positiveVotes = getIntegerValue(keyTotalPositiveVoteByProposal(proposalIndex))
169+ let negativeVotes = getIntegerValue(keyTotalNegativeVoteByProposal(proposalIndex))
170+ $Tuple2(nil, [positiveVotes, negativeVotes])
171+ }
172+
173+
174+
175+@Callable(i)
176+func setManager (pendingManagerPublicKey) = {
177+ let checkCaller = mustManager(i)
178+ if ((checkCaller == checkCaller))
179+ then {
180+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
181+ if ((checkManagerPublicKey == checkManagerPublicKey))
182+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
183+ else throw("Strict value is not equal to itself.")
184+ }
185+ else throw("Strict value is not equal to itself.")
186+ }
187+
188+
189+
190+@Callable(i)
191+func confirmManager () = {
192+ let pm = pendingManagerPublicKeyOrUnit()
193+ let hasPM = if (isDefined(pm))
194+ then true
195+ else throw("no pending manager")
196+ if ((hasPM == hasPM))
197+ then {
198+ let checkPM = if ((i.callerPublicKey == value(pm)))
199+ then true
200+ else throw("you are not pending manager")
201+ if ((checkPM == checkPM))
202+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
203+ else throw("Strict value is not equal to itself.")
204+ }
205+ else throw("Strict value is not equal to itself.")
206+ }
207+
208+
209+@Verifier(tx)
210+func verify () = {
211+ let targetPublicKey = match managerPublicKeyOrUnit() {
212+ case pk: ByteVector =>
213+ pk
214+ case _: Unit =>
215+ tx.senderPublicKey
216+ case _ =>
217+ throw("Match error")
218+ }
219+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
220+ }
6221

github/deemru/w8io/873ac7e 
82.66 ms