tx · 2q6zYwVuDTeVHdNGgMaBiXudUG8VF5PRZCMvNbkFRsHy 3PM9SV8qsubjwfxENgsLJvP1BG2Wc2VAd7b: -0.01100000 Waves 2023.10.13 16:32 [3862751] smart account 3PM9SV8qsubjwfxENgsLJvP1BG2Wc2VAd7b > SELF 0.00000000 Waves
{ "type": 13, "id": "2q6zYwVuDTeVHdNGgMaBiXudUG8VF5PRZCMvNbkFRsHy", "fee": 1100000, "feeAssetId": null, "timestamp": 1697203910211, "version": 1, "sender": "3PM9SV8qsubjwfxENgsLJvP1BG2Wc2VAd7b", "senderPublicKey": "FTQkMdCbr2PCN4TSfAom6UTonzkrV1EEVrbK9u2zk3zD", "proofs": [ "4RLrSfkgcmpX7EJ1iLwmK95MpJYfhz3j3EM4upfN5GVBg5rYm9YcCzzqkuiPdeQnEF4S4ciCAZFkrNmjCufGFxbr" ], "script": "base64:AAIFAAAAAAAAACQIAhIDCgEIEgMKAQESBAoCCAESBAoCCAESBAoCCAESBAoCCAEAAAATAAAAAAV2aXJlcwAAAAAABfXhAAAAAAABSwAAAAAAAAAD6AAAAAAHTUlOVENBUAkAAGgAAAACCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAACgUAAAABSwUAAAABSwUAAAAFdmlyZXMBAAAAEHdyaXRlQ29uc3RTdHJpbmcAAAACAAAAA2tleQAAAAV2YWx1ZQMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5CQEAAAALU3RyaW5nRW50cnkAAAACBQAAAANrZXkFAAAABXZhbHVlCQAAAgAAAAEJAAEsAAAAAgIAAAAVYWxyZWFkeSBpbml0aWFsaXplZDogBQAAAANrZXkAAAAAE2xwTG9ja2VyTWludGVkU3RvcmUCAAAAD2xwbG9ja2VyX21pbnRlZAAAAAAWZGlzdHJpYnV0b3JNaW50ZWRTdG9yZQIAAAASZGlzdHJpYnV0b3JfbWludGVkAAAAABFzdGFrZXJNaW50ZWRTdG9yZQIAAAANc3Rha2VyX21pbnRlZAAAAAANZWJNaW50ZWRTdG9yZQIAAAAJZWJfbWludGVkAAAAABF2aXJlc0Fzc2V0SWRTdG9yZQIAAAAHYXNzZXRJZAAAAAALY29uZmlnU3RvcmUCAAAABmNvbmZpZwAAAAAMdmlyZXNBc3NldElkCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAJZAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAEXZpcmVzQXNzZXRJZFN0b3JlAgAAABFhc3NldElkIG5vdCBmb3VuZAIAAAAPaW52YWxpZCBhc3NldElkAAAAAA1jb25maWdBZGRyZXNzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAC2NvbmZpZ1N0b3JlAgAAAB52aXJlcy1taW50ZXI6IG5vIGNvbmZpZ0FkZHJlc3MCAAAAFmludmFsaWQgY29uZmln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AQAAAAZhbW91bnQDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAGZGVuaWVkCQEAAAAEbWludAAAAAMCAAAACXYyX21pbnRlZAIAAAAjM1BEVGNXQlhTaXJ4UmpTODFWOE5FVnVoM2RyV3lLbUY5dWoFAAAABmFtb3VudAAAAAFpAQAAAAhtaW50VG9FQgAAAAIAAAAJcmVjaXBpZW50AAAABmFtb3VudAQAAAAGY2hlY2tzCQEAAAAJYWRtaW5Pbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MJAQAAAARtaW50AAAAAwUAAAANZWJNaW50ZWRTdG9yZQUAAAAJcmVjaXBpZW50BQAAAAZhbW91bnQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADGxwTG9ja2VyTWludAAAAAIAAAAJcmVjaXBpZW50AAAABmFtb3VudAQAAAAGY2hlY2tzCQEAAAAMbHBMb2NrZXJPbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MJAQAAAARtaW50AAAAAwUAAAATbHBMb2NrZXJNaW50ZWRTdG9yZQUAAAAJcmVjaXBpZW50BQAAAAZhbW91bnQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAD2Rpc3RyaWJ1dG9yTWludAAAAAIAAAAJcmVjaXBpZW50AAAABmFtb3VudAQAAAAGY2hlY2tzCQEAAAAPZGlzdHJpYnV0b3JPbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MJAQAAAARtaW50AAAAAwUAAAAWZGlzdHJpYnV0b3JNaW50ZWRTdG9yZQUAAAAJcmVjaXBpZW50BQAAAAZhbW91bnQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACnN0YWtlck1pbnQAAAACAAAACXJlY2lwaWVudAAAAAZhbW91bnQEAAAABmNoZWNrcwkBAAAACnN0YWtlck9ubHkAAAABBQAAAAFpAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwkBAAAABG1pbnQAAAADBQAAABFzdGFrZXJNaW50ZWRTdG9yZQUAAAAJcmVjaXBpZW50BQAAAAZhbW91bnQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAASbWF5YmVPcmFjbGVBZGRyZXNzBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAADWNvbmZpZ0FkZHJlc3MCAAAADm9yYWNsZV9hZGRyZXNzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAQmAAAAAQUAAAABcwUAAAAEdW5pdAQAAAAGSEVJR0hUBQAAAAZoZWlnaHQEAAAABEJBU0UAAAAAAAAAA+gEAAAAC3F1b3J1bVJhdGlvCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwIAAAAVcHJvcG9zYWxfcXVvcnVtX3JhdGlvAgAAACJwcm9wb3NhbFF1b3J1bVJhdGlvIGlzIG5vdCBkZWZpbmVkBAAAAAtwYXNzZWRSYXRpbwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADWNvbmZpZ0FkZHJlc3MCAAAAFXByb3Bvc2FsX3Bhc3NlZF9yYXRpbwIAAAAlcHJvcG9zYWxUaHJlc2hvbGRSYXRpbyBpcyBub3QgZGVmaW5lZAQAAAAOZ1ZpcmVzQ29udHJhY3QJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAANY29uZmlnQWRkcmVzcwIAAAASZGl2aWRlbmRzX2NvbnRyYWN0AgAAABVubyBkaXZpZGVuZHNfY29udHJhY3QCAAAAGmludmFsaWQgZGl2aWRlbmRzX2NvbnRyYWN0BAAAAA52b3RpbmdDb250cmFjdAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA1jb25maWdBZGRyZXNzAgAAAA92b3RpbmdfY29udHJhY3QCAAAAEm5vIHZvdGluZ19jb250cmFjdAIAAAAXaW52YWxpZCB2b3RpbmdfY29udHJhY3QEAAAAAmlkCQACWAAAAAEIBQAAAAJ0eAAAAAJpZAQAAAAIdm90ZXNZZXMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAOdm90aW5nQ29udHJhY3QJAAEsAAAAAgIAAAANcHJvcG9zYWxfeWVzXwUAAAACaWQAAAAAAAAAAAAEAAAAB3ZvdGVzTm8JAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAOdm90aW5nQ29udHJhY3QJAAEsAAAAAgIAAAAMcHJvcG9zYWxfbm9fBQAAAAJpZAAAAAAAAAAAAAQAAAAOcHJvcG9zYWxIZWlnaHQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA52b3RpbmdDb250cmFjdAkAASwAAAACAgAAABBwcm9wb3NhbF9oZWlnaHRfBQAAAAJpZAIAAAAXcHJvcG9zYWwgbm90IHJlZ2lzdGVyZWQEAAAACmFwcGx5U3RhcnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAOdm90aW5nQ29udHJhY3QJAAEsAAAAAgIAAAAUcHJvcG9zYWxfYXBwbHlzdGFydF8FAAAAAmlkAAAAAAAAAAAABAAAAAhhcHBseUVuZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAA52b3RpbmdDb250cmFjdAkAASwAAAACAgAAABJwcm9wb3NhbF9hcHBseWVuZF8FAAAAAmlkAAAAAAAAAAAABAAAAAt0b3RhbEdWaXJlcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAA52b3RpbmdDb250cmFjdAkAASwAAAACAgAAABBwcm9wb3NhbF9ndmlyZXNfBQAAAAJpZAAAAAAAAAAAAAQAAAAHZW5hYmxlZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAA1jb25maWdBZGRyZXNzAgAAAB1vcF9nb3Zlcm5hbmNlX2FwcGx5X3R4X3BhdXNlZAcEAAAAB3ZvdGVZZXMFAAAACHZvdGVzWWVzBAAAAAZ2b3RlTm8FAAAAB3ZvdGVzTm8EAAAACnRvdGFsVm90ZXMJAABkAAAAAgUAAAAHdm90ZVllcwUAAAAGdm90ZU5vBAAAAAloYXNRdW9ydW0JAABnAAAAAgkAAGkAAAACCQAAaAAAAAIFAAAACnRvdGFsVm90ZXMFAAAABEJBU0UFAAAAC3RvdGFsR1ZpcmVzBQAAAAtxdW9ydW1SYXRpbwQAAAAJaGFzUGFzc2VkCQAAZwAAAAIJAABpAAAAAgkAAGgAAAACBQAAAAd2b3RlWWVzBQAAAARCQVNFBQAAAAp0b3RhbFZvdGVzBQAAAAtwYXNzZWRSYXRpbwQAAAAIdG9vRWFybHkJAABnAAAAAgUAAAAKYXBwbHlTdGFydAUAAAAGSEVJR0hUBAAAAAd0b29MYXRlCQAAZwAAAAIFAAAABkhFSUdIVAUAAAAIYXBwbHlFbmQEAAAACXRpbWVEZWJ1ZwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABFwcm9wb3NhbEhlaWdodCA9IAkAAaQAAAABBQAAAA5wcm9wb3NhbEhlaWdodAIAAAAPLCBhcHBseVN0YXJ0ID0gCQABpAAAAAEFAAAACmFwcGx5U3RhcnQCAAAADSwgYXBwbHlFbmQgPSAJAAGkAAAAAQUAAAAIYXBwbHlFbmQCAAAACywgSEVJR0hUID0gCQABpAAAAAEFAAAABkhFSUdIVAQAAAAIYnlWb3RpbmcDCQEAAAABIQAAAAEFAAAAB2VuYWJsZWQJAAACAAAAAQIAAAArdHggYXBwbGljYXRpb24gdGhyb3cgZ292ZXJuYW5jZSBub3QgZW5hYmxlZAMFAAAACHRvb0Vhcmx5CQAAAgAAAAEJAAEsAAAAAgIAAAAucHJvcG9zYWwgY2FuJ3QgYmUgZXhlY3V0ZWQgYXMgaXQncyB0b28gZWFybHk6IAUAAAAJdGltZURlYnVnAwUAAAAHdG9vTGF0ZQkAAAIAAAABCQABLAAAAAICAAAALHByb3Bvc2FsIGNhbid0IGJlIGV4ZWN1dGVkIGFzIGl0J3MgdG9vIGxhdGU6BQAAAAl0aW1lRGVidWcDCQEAAAABIQAAAAEFAAAACWhhc1F1b3J1bQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtubyBxdW9ydW06IAIAAAAMdG90YWxWb3RlczogCQABpAAAAAEFAAAACnRvdGFsVm90ZXMCAAAADywgdG90YWxHVmlyZXM6IAkAAaQAAAABBQAAAAt0b3RhbEdWaXJlcwIAAAAPLCBxdW9ydW1SYXRpbzogCQABpAAAAAEFAAAAC3F1b3J1bVJhdGlvAwkBAAAAASEAAAABBQAAAAloYXNQYXNzZWQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAXbm8gdGhyZXNob2xkIGFjaGlldmVkOiACAAAACXZvdGVZZXM6IAkAAaQAAAABBQAAAAd2b3RlWWVzAgAAAAosIHZvdGVObzogCQABpAAAAAEFAAAABnZvdGVObwIAAAAPLCBwYXNzZWRSYXRpbzogCQABpAAAAAEFAAAAC3Bhc3NlZFJhdGlvBgMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5BgUAAAAIYnlWb3RpbmeO35SP", "chainId": 87, "height": 3862751, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CFwjseftqCt1ApjQoXX1MyarbCdQ8QNaVCnuksM1HHJD Next: none Diff:
Old | New | Differences | |
---|---|---|---|
67 | 67 | let assetId = calculateAssetId(viresTokenIssue) | |
68 | 68 | [viresTokenIssue, writeConstString(configStore, configAddress), writeConstString(viresAssetIdStore, toBase58String(assetId))] | |
69 | 69 | } | |
70 | + | ||
71 | + | ||
72 | + | ||
73 | + | @Callable(i) | |
74 | + | func mintToV2 (amount) = if ((i.caller != this)) | |
75 | + | then throw("denied") | |
76 | + | else mint("v2_minted", "3PDTcWBXSirxRjS81V8NEVuh3drWyKmF9uj", amount) | |
70 | 77 | ||
71 | 78 | ||
72 | 79 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let vires = 100000000 | |
5 | 5 | ||
6 | 6 | let K = 1000 | |
7 | 7 | ||
8 | 8 | let MINTCAP = (((10 * K) * K) * vires) | |
9 | 9 | ||
10 | 10 | func writeConstString (key,value) = if (!(isDefined(getString(this, key)))) | |
11 | 11 | then StringEntry(key, value) | |
12 | 12 | else throw(("already initialized: " + key)) | |
13 | 13 | ||
14 | 14 | ||
15 | 15 | let lpLockerMintedStore = "lplocker_minted" | |
16 | 16 | ||
17 | 17 | let distributorMintedStore = "distributor_minted" | |
18 | 18 | ||
19 | 19 | let stakerMintedStore = "staker_minted" | |
20 | 20 | ||
21 | 21 | let ebMintedStore = "eb_minted" | |
22 | 22 | ||
23 | 23 | let viresAssetIdStore = "assetId" | |
24 | 24 | ||
25 | 25 | let configStore = "config" | |
26 | 26 | ||
27 | 27 | let viresAssetId = valueOrErrorMessage(fromBase58String(valueOrErrorMessage(getString(this, viresAssetIdStore), "assetId not found")), "invalid assetId") | |
28 | 28 | ||
29 | 29 | let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configStore), "vires-minter: no configAddress")), "invalid config address") | |
30 | 30 | ||
31 | 31 | func throwIf (condition,error) = if (condition) | |
32 | 32 | then throw(error) | |
33 | 33 | else true | |
34 | 34 | ||
35 | 35 | ||
36 | 36 | func checkCaller (a,i,store) = if ((i.caller != valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(a, store), (("no " + store) + " in config"))), (("invalid " + store) + " address")))) | |
37 | 37 | then throw((("only " + store) + " can do")) | |
38 | 38 | else true | |
39 | 39 | ||
40 | 40 | ||
41 | 41 | func lpLockerOnly (i) = checkCaller(configAddress, i, "lp_locker") | |
42 | 42 | ||
43 | 43 | ||
44 | 44 | func distributorOnly (i) = checkCaller(configAddress, i, "vires_distributor") | |
45 | 45 | ||
46 | 46 | ||
47 | 47 | func stakerOnly (i) = checkCaller(configAddress, i, "vires_staker") | |
48 | 48 | ||
49 | 49 | ||
50 | 50 | func adminOnly (i) = checkCaller(configAddress, i, "admin") | |
51 | 51 | ||
52 | 52 | ||
53 | 53 | func mint (store,recipient,amount) = { | |
54 | 54 | let totalStore = "total_minted" | |
55 | 55 | let alreadyMinted = valueOrElse(getInteger(this, totalStore), 0) | |
56 | 56 | if (((alreadyMinted + amount) > MINTCAP)) | |
57 | 57 | then throw("breaching MINTCAP = 10M") | |
58 | 58 | else if ((0 >= amount)) | |
59 | 59 | then throw("mint amount must be > 0") | |
60 | 60 | else [IntegerEntry(totalStore, (alreadyMinted + amount)), IntegerEntry(store, (valueOrElse(getInteger(this, store), 0) + amount)), Reissue(viresAssetId, amount, true), ScriptTransfer(addressFromStringValue(recipient), amount, viresAssetId)] | |
61 | 61 | } | |
62 | 62 | ||
63 | 63 | ||
64 | 64 | @Callable(i) | |
65 | 65 | func init (configAddress) = { | |
66 | 66 | let viresTokenIssue = Issue("VIRES", "Vires.Finance Protocol Governance Token", 0, 8, true) | |
67 | 67 | let assetId = calculateAssetId(viresTokenIssue) | |
68 | 68 | [viresTokenIssue, writeConstString(configStore, configAddress), writeConstString(viresAssetIdStore, toBase58String(assetId))] | |
69 | 69 | } | |
70 | + | ||
71 | + | ||
72 | + | ||
73 | + | @Callable(i) | |
74 | + | func mintToV2 (amount) = if ((i.caller != this)) | |
75 | + | then throw("denied") | |
76 | + | else mint("v2_minted", "3PDTcWBXSirxRjS81V8NEVuh3drWyKmF9uj", amount) | |
70 | 77 | ||
71 | 78 | ||
72 | 79 | ||
73 | 80 | @Callable(i) | |
74 | 81 | func mintToEB (recipient,amount) = { | |
75 | 82 | let checks = adminOnly(i) | |
76 | 83 | if ((checks == checks)) | |
77 | 84 | then mint(ebMintedStore, recipient, amount) | |
78 | 85 | else throw("Strict value is not equal to itself.") | |
79 | 86 | } | |
80 | 87 | ||
81 | 88 | ||
82 | 89 | ||
83 | 90 | @Callable(i) | |
84 | 91 | func lpLockerMint (recipient,amount) = { | |
85 | 92 | let checks = lpLockerOnly(i) | |
86 | 93 | if ((checks == checks)) | |
87 | 94 | then mint(lpLockerMintedStore, recipient, amount) | |
88 | 95 | else throw("Strict value is not equal to itself.") | |
89 | 96 | } | |
90 | 97 | ||
91 | 98 | ||
92 | 99 | ||
93 | 100 | @Callable(i) | |
94 | 101 | func distributorMint (recipient,amount) = { | |
95 | 102 | let checks = distributorOnly(i) | |
96 | 103 | if ((checks == checks)) | |
97 | 104 | then mint(distributorMintedStore, recipient, amount) | |
98 | 105 | else throw("Strict value is not equal to itself.") | |
99 | 106 | } | |
100 | 107 | ||
101 | 108 | ||
102 | 109 | ||
103 | 110 | @Callable(i) | |
104 | 111 | func stakerMint (recipient,amount) = { | |
105 | 112 | let checks = stakerOnly(i) | |
106 | 113 | if ((checks == checks)) | |
107 | 114 | then mint(stakerMintedStore, recipient, amount) | |
108 | 115 | else throw("Strict value is not equal to itself.") | |
109 | 116 | } | |
110 | 117 | ||
111 | 118 | ||
112 | 119 | @Verifier(tx) | |
113 | 120 | func verify () = { | |
114 | 121 | let maybeOracleAddress = match getString(configAddress, "oracle_address") { | |
115 | 122 | case s: String => | |
116 | 123 | addressFromString(s) | |
117 | 124 | case _ => | |
118 | 125 | unit | |
119 | 126 | } | |
120 | 127 | let HEIGHT = height | |
121 | 128 | let BASE = 1000 | |
122 | 129 | let quorumRatio = valueOrErrorMessage(getInteger(configAddress, "proposal_quorum_ratio"), "proposalQuorumRatio is not defined") | |
123 | 130 | let passedRatio = valueOrErrorMessage(getInteger(configAddress, "proposal_passed_ratio"), "proposalThresholdRatio is not defined") | |
124 | 131 | let gViresContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "dividends_contract"), "no dividends_contract")), "invalid dividends_contract") | |
125 | 132 | let votingContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "voting_contract"), "no voting_contract")), "invalid voting_contract") | |
126 | 133 | let id = toBase58String(tx.id) | |
127 | 134 | let votesYes = valueOrElse(getInteger(votingContract, ("proposal_yes_" + id)), 0) | |
128 | 135 | let votesNo = valueOrElse(getInteger(votingContract, ("proposal_no_" + id)), 0) | |
129 | 136 | let proposalHeight = valueOrErrorMessage(getInteger(votingContract, ("proposal_height_" + id)), "proposal not registered") | |
130 | 137 | let applyStart = valueOrElse(getInteger(votingContract, ("proposal_applystart_" + id)), 0) | |
131 | 138 | let applyEnd = valueOrElse(getInteger(votingContract, ("proposal_applyend_" + id)), 0) | |
132 | 139 | let totalGVires = valueOrElse(getInteger(votingContract, ("proposal_gvires_" + id)), 0) | |
133 | 140 | let enabled = valueOrElse(getBoolean(configAddress, "op_governance_apply_tx_paused"), false) | |
134 | 141 | let voteYes = votesYes | |
135 | 142 | let voteNo = votesNo | |
136 | 143 | let totalVotes = (voteYes + voteNo) | |
137 | 144 | let hasQuorum = (((totalVotes * BASE) / totalGVires) >= quorumRatio) | |
138 | 145 | let hasPassed = (((voteYes * BASE) / totalVotes) >= passedRatio) | |
139 | 146 | let tooEarly = (applyStart >= HEIGHT) | |
140 | 147 | let tooLate = (HEIGHT >= applyEnd) | |
141 | 148 | let timeDebug = ((((((("proposalHeight = " + toString(proposalHeight)) + ", applyStart = ") + toString(applyStart)) + ", applyEnd = ") + toString(applyEnd)) + ", HEIGHT = ") + toString(HEIGHT)) | |
142 | 149 | let byVoting = if (!(enabled)) | |
143 | 150 | then throw("tx application throw governance not enabled") | |
144 | 151 | else if (tooEarly) | |
145 | 152 | then throw(("proposal can't be executed as it's too early: " + timeDebug)) | |
146 | 153 | else if (tooLate) | |
147 | 154 | then throw(("proposal can't be executed as it's too late:" + timeDebug)) | |
148 | 155 | else if (!(hasQuorum)) | |
149 | 156 | then throw((((((("no quorum: " + "totalVotes: ") + toString(totalVotes)) + ", totalGVires: ") + toString(totalGVires)) + ", quorumRatio: ") + toString(quorumRatio))) | |
150 | 157 | else if (!(hasPassed)) | |
151 | 158 | then throw((((((("no threshold achieved: " + "voteYes: ") + toString(voteYes)) + ", voteNo: ") + toString(voteNo)) + ", passedRatio: ") + toString(passedRatio))) | |
152 | 159 | else true | |
153 | 160 | if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)) | |
154 | 161 | then true | |
155 | 162 | else byVoting | |
156 | 163 | } | |
157 | 164 |
github/deemru/w8io/3ef1775 45.04 ms ◑