2022.11.30 15:55 [3405331] smart account 3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP > SELF 0.00000000 Waves

{ "type": 13, "id": "52aBVp65DXHa3B9Dbdtwcwqnqg5UUNqWfdZzm94jbY3G", "fee": 2000000, "feeAssetId": null, "timestamp": 1669815453860, "version": 1, "sender": "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP", "senderPublicKey": "GqXuX2WHNr3WUqTaeH2YCySFY45NAJoE9RmY9bEWkzh", "proofs": [ "", "2oyDgkPQFAiUyCyDyrQJGJxvRUzQVApeK312UqUc7sC8o7rsWHVA31USKNwFVjQ8wLeqh8K4rjxTbc1VeRbtn7Af", "", "2XJWziQxU8G9j3YtEsL6qQRs1touUiGmpsRCBz1mEG4mVd1UsfnDKZpcAXU6AiRx37Awm66wy3oiXruVD7peUotQ" ], "script": "base64:AAIEAAAAAAAAACYIAhIPCg0ICAgICAgICAgICAgIEgMKAQgSDAoKAQIBAgECAQIBAgAAACoAAAAAC3JldmlzaW9uTnVtAgAAAChjNTU2ZGQ3ZTVmNmU4M2RiMDcyYWVjNjk4YjdiMTJiMmI5NDJhMzk1AAAAAANTRVACAAAAAl9fAAAAABlJZHhDb250cm9sQ2ZnTmV1dHJpbm9EYXBwAAAAAAAAAAABAAAAABhJZHhDb250cm9sQ2ZnQXVjdGlvbkRhcHAAAAAAAAAAAAIAAAAAFElkeENvbnRyb2xDZmdScGREYXBwAAAAAAAAAAADAAAAABVJZHhDb250cm9sQ2ZnTWF0aERhcHAAAAAAAAAAAAQAAAAAHElkeENvbnRyb2xDZmdMaXF1aWRhdGlvbkRhcHAAAAAAAAAAAAUAAAAAFUlkeENvbnRyb2xDZmdSZXN0RGFwcAAAAAAAAAAABgAAAAAdSWR4Q29udHJvbENmZ05vZGVSZWdpc3RyeURhcHAAAAAAAAAAAAcAAAAAHElkeENvbnRyb2xDZmdOc2J0U3Rha2luZ0RhcHAAAAAAAAAAAAgAAAAAGUlkeENvbnRyb2xDZmdNZWRpYXRvckRhcHAAAAAAAAAAAAkAAAAAHElkeENvbnRyb2xDZmdTdXJmU3Rha2luZ0RhcHAAAAAAAAAAAAoAAAAAIElkeENvbnRyb2xDZmdHbnNidENvbnRyb2xsZXJEYXBwAAAAAAAAAAALAAAAABdJZHhDb250cm9sQ2ZnUmVzdFYyRGFwcAAAAAAAAAAADAAAAAAbSWR4Q29udHJvbENmZ0dvdmVybmFuY2VEYXBwAAAAAAAAAAANAQAAABBrZXlDb250cm9sQ29uZmlnAAAAAAIAAAARJXNfX2NvbnRyb2xDb25maWcBAAAADmRhdGFDb250cm9sQ2ZnAAAADQAAABBuZXV0cmlub0NvbnRyYWN0AAAAD2F1Y3Rpb25Db250cmFjdAAAAAtycGRDb250cmFjdAAAAAxtYXRoQ29udHJhY3QAAAATbGlxdWlkYXRpb25Db250cmFjdAAAAAxyZXN0Q29udHJhY3QAAAAUbm9kZVJlZ2lzdHJ5Q29udHJhY3QAAAATbnNidFN0YWtpbmdDb250cmFjdAAAABBtZWRpYXRvckNvbnRyYWN0AAAAE3N1cmZTdGFr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dENvbnRyYWN0QWRkcmVzc09yRmFpbAAAAAIAAAAKY29udHJvbENmZwAAAANpZHgJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQABkQAAAAIFAAAACmNvbnRyb2xDZmcFAAAAA2lkeAkAASwAAAACAgAAAC1Db250cm9sIGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAAGkAAAAAQUAAAADaWR4AAAAAApjb250cm9sQ2ZnCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzCQEAAAAQa2V5Q29udHJvbENvbmZpZwAAAAAFAAAAA1NFUAAAAAASZ292ZXJuYW5jZUNvbnRyYWN0CQEAAAAYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAAAAAgUAAAAKY29udHJvbENmZwUAAAAbSWR4Q29udHJvbENmZ0dvdmVybmFuY2VEYXBwAAAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAPbmV1dHJpbm9BZGRyZXNzAgAAABViYWxhbmNlX2xvY2tfbmV1dHJpbm8AAAAAAAAAAAAAAAAAEndhdmVzTG9ja2VkQmFsYW5jZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAA9uZXV0cmlub0FkZHJlc3MCAAAAEmJhbGFuY2VfbG9ja193YXZlcwAAAAAAAAAAAAAAAAAHcmVzZXJ2ZQkAAGUAAAACCAkAA+8AAAABBQAAAA9uZXV0cmlub0FkZHJlc3MAAAAHcmVndWxhcgUAAAASd2F2ZXNMb2NrZWRCYWxhbmNlAAAAAA5uZXV0cmlub1N1cHBseQkAAGUAAAACCQAAZQAAAAIJAABkAAAAAgUAAAAVbmV1dHJpbm9Mb2NrZWRCYWxhbmNlCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAA1uZXV0cmlub0Fzc2V0AAAACHF1YW50aXR5CQAD8AAAAAIFAAAAD25ldXRyaW5vQWRkcmVzcwUAAAANbmV1dHJpbm9Bc3NldAkAA/AAAAACBQAAABJsaXF1aWRhdGlvbkFkZHJlc3MFAAAADW5ldXRyaW5vQXNzZXQA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AGYAAAACBQAAAANwNDEFAAAAD21pblBlcmNlbnRCb3VuZAcJAARMAAAAAgAAAAAAAAAAAQUAAAAGYXJyYXkxBQAAAAZhcnJheTEEAAAABmFycmF5MwMDCQAAZgAAAAIFAAAAD21heFBlcmNlbnRCb3VuZAUAAAADcDQyCQAAZgAAAAIFAAAAA3A0MgUAAAAPbWluUGVyY2VudEJvdW5kBwkABEwAAAACAAAAAAAAAAACBQAAAAZhcnJheTIFAAAABmFycmF5MgMDCQAAZgAAAAIFAAAAD21heFBlcmNlbnRCb3VuZAUAAAADcDQzCQAAZgAAAAIFAAAAA3A0MwUAAAAPbWluUGVyY2VudEJvdW5kBwkABEwAAAACAAAAAAAAAAADBQAAAAZhcnJheTMFAAAABmFycmF5MwEAAAASZm9ybWF0dGluZ1ByaWNlTXNnAAAAAQAAAAVwcmljZQkAAZsAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAE1dBVkVTTkVVVFJJTk9QUkVGSVgCAAAAAV8JAAGkAAAAAQUAAAAGaGVpZ2h0AgAAAAFfCQABpAAAAAEFAAAABXByaWNlAAAAAwAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAA0AAAAQbmV1dHJpbm9Db250cmFjdAAAAA9hdWN0aW9uQ29udHJhY3QAAAALcnBkQ29udHJhY3QAAAAMbWF0aENvbnRyYWN0AAAAE2xpcXVpZGF0aW9uQ29udHJhY3QAAAAMcmVzdENvbnRyYWN0AAAAFG5vZGVSZWdpc3RyeUNvbnRyYWN0AAAAE25zYnRTdGFraW5nQ29udHJhY3QAAAAQbWVkaWF0b3JDb250cmFjdAAAABNzdXJmU3Rha2luZ0NvbnRyYWN0AAAAF2duc2J0Q29udHJvbGxlckNvbnRyYWN0AAAADnJlc3RWMkNvbnRyYWN0AAAAEmdvdmVybmFuY2VDb250cmFjdAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABJwZXJtaXNzaW9ucyBkZW5pZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGtleUNvbnRyb2xDb25maWcAAAAACQEAAAAOZGF0YUNvbnRyb2xDZmcAAAANBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAAA9hdWN0aW9uQ29udHJhY3QFAAAAC3JwZENvbnRyYWN0BQAAAAxtYXRoQ29udHJhY3QFAAAAE2xpcXVpZGF0aW9uQ29udHJhY3QFAAAADHJlc3RDb250cmFjdAUAAAAUbm9kZVJlZ2lzdHJ5Q29udHJhY3QFAAAAE25zYnRTdGFraW5nQ29udHJhY3QFAAAAEG1lZGlhdG9yQ29udHJhY3QFAAAAE3N1cmZTdGFraW5nQ29udHJhY3QFAAAAF2duc2J0Q29udHJvbGxlckNvbnRyYWN0BQAAAA5yZXN0VjJDb250cmFjdAUAAAASZ292ZXJuYW5jZUNvbnRyYWN0BQAAAANuaWwAAAABaQEAAAAVY2FsbEVtZXJnZW5jeVNodXRkb3duAAAAAQAAAAZyZWFzb24EAAAAGkF1dG9FbWVyZ2VuY3lPcmFjbGVBZGRyZXNzAgAAACMzUDdpaEZWeEJOYkhLMjM3VE5kUHhUMXhIRXU4cEhleFhUcgQAAAANY2FsbGVyQWRkcmVzcwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIDAwkBAAAAAiE9AAAAAgUAAAAaQXV0b0VtZXJnZW5jeU9yYWNsZUFkZHJlc3MFAAAADWNhbGxlckFkZHJlc3MJAQAAAAIhPQAAAAIJAAQlAAAAAQUAAAASZ292ZXJuYW5jZUNvbnRyYWN0BQAAAA1jYWxsZXJBZGRyZXNzBwkAAAIAAAABAgAAAD1jYWxsZXIgbXVzdCBiZSBvbmUgYW4gZW1lcmdlbmN5IG9yYWNsZSBvciBHb3Zlcm5hbmNlIGNvbnRyYWN0CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACAgAAAAppc19ibG9ja2VkBgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAABFpc19ibG9ja2VkX2NhbGxlcgUAAAANY2FsbGVyQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAABFpc19ibG9ja2VkX3JlYXNvbgUAAAAGcmVhc29uBQAAAANuaWwAAAABaQEAAAAUZmluYWxpemVDdXJyZW50UHJpY2UAAAAKAAAABnByaWNlMQAAAAVzaWduMQAAAAZwcmljZTIA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", "chainId": 87, "height": 3405331, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HAMtLxM5X4F1WkjyhjRRPZ9Mq7PZmxSUKNn5ezr2ZKxT Next: 8tfCXyHzAqtZCd9UaJBN6rvv4J77hYNsBzjDwiTVSErb Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let revisionNum = "b3ff7472a1d54a9f0c8f6d6665c4458c36a31e48"
4+let revisionNum = "c556dd7e5f6e83db072aec698b7b12b2b942a395"
55
66 let SEP = "__"
7+
8+let IdxControlCfgNeutrinoDapp = 1
9+
10+let IdxControlCfgAuctionDapp = 2
11+
12+let IdxControlCfgRpdDapp = 3
13+
14+let IdxControlCfgMathDapp = 4
15+
16+let IdxControlCfgLiquidationDapp = 5
17+
18+let IdxControlCfgRestDapp = 6
19+
20+let IdxControlCfgNodeRegistryDapp = 7
21+
22+let IdxControlCfgNsbtStakingDapp = 8
23+
24+let IdxControlCfgMediatorDapp = 9
25+
26+let IdxControlCfgSurfStakingDapp = 10
27+
28+let IdxControlCfgGnsbtControllerDapp = 11
29+
30+let IdxControlCfgRestV2Dapp = 12
31+
32+let IdxControlCfgGovernanceDapp = 13
33+
34+func keyControlConfig () = "%s__controlConfig"
35+
36+
37+func dataControlCfg (neutrinoContract,auctionContract,rpdContract,mathContract,liquidationContract,restContract,nodeRegistryContract,nsbtStakingContract,mediatorContract,surfStakingContract,gnsbtControllerContract,restV2Contract,governanceContract) = makeString(["%s%s%s%s%s%s%s%s%s%s%s%s%s", neutrinoContract, auctionContract, rpdContract, mathContract, liquidationContract, restContract, nodeRegistryContract, nsbtStakingContract, mediatorContract, surfStakingContract, gnsbtControllerContract, restV2Contract, governanceContract], SEP)
38+
739
840 func convertWavesToNeutrino (amount,price) = fraction(fraction(amount, price, 1000000), 1000000, 100000000)
941
3668 let neutrinoAsset = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
3769
3870 let controlContract = this
71+
72+func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
73+
74+
75+func getContractAddressOrFail (controlCfg,idx) = valueOrErrorMessage(addressFromString(controlCfg[idx]), ("Control cfg doesn't contain address at index " + toString(idx)))
76+
77+
78+let controlCfg = split(getStringOrFail(this, keyControlConfig()), SEP)
79+
80+let governanceContract = getContractAddressOrFail(controlCfg, IdxControlCfgGovernanceDapp)
3981
4082 let neutrinoLockedBalance = valueOrElse(getInteger(neutrinoAddress, "balance_lock_neutrino"), 0)
4183
218260
219261
220262 @Callable(i)
263+func constructor (neutrinoContract,auctionContract,rpdContract,mathContract,liquidationContract,restContract,nodeRegistryContract,nsbtStakingContract,mediatorContract,surfStakingContract,gnsbtControllerContract,restV2Contract,governanceContract) = if ((i.caller != this))
264+ then throw("permissions denied")
265+ else [StringEntry(keyControlConfig(), dataControlCfg(neutrinoContract, auctionContract, rpdContract, mathContract, liquidationContract, restContract, nodeRegistryContract, nsbtStakingContract, mediatorContract, surfStakingContract, gnsbtControllerContract, restV2Contract, governanceContract))]
266+
267+
268+
269+@Callable(i)
221270 func callEmergencyShutdown (reason) = {
222271 let AutoEmergencyOracleAddress = "3P7ihFVxBNbHK237TNdPxT1xHEu8pHexXTr"
223272 let callerAddress = toString(i.caller)
224- if ((AutoEmergencyOracleAddress != callerAddress))
225- then throw("caller must be one an emergency oracle")
273+ if (if ((AutoEmergencyOracleAddress != callerAddress))
274+ then (toString(governanceContract) != callerAddress)
275+ else false)
276+ then throw("caller must be one an emergency oracle or Governance contract")
226277 else [BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", callerAddress), StringEntry("is_blocked_reason", reason)]
227278 }
228279
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let revisionNum = "b3ff7472a1d54a9f0c8f6d6665c4458c36a31e48"
4+let revisionNum = "c556dd7e5f6e83db072aec698b7b12b2b942a395"
55
66 let SEP = "__"
7+
8+let IdxControlCfgNeutrinoDapp = 1
9+
10+let IdxControlCfgAuctionDapp = 2
11+
12+let IdxControlCfgRpdDapp = 3
13+
14+let IdxControlCfgMathDapp = 4
15+
16+let IdxControlCfgLiquidationDapp = 5
17+
18+let IdxControlCfgRestDapp = 6
19+
20+let IdxControlCfgNodeRegistryDapp = 7
21+
22+let IdxControlCfgNsbtStakingDapp = 8
23+
24+let IdxControlCfgMediatorDapp = 9
25+
26+let IdxControlCfgSurfStakingDapp = 10
27+
28+let IdxControlCfgGnsbtControllerDapp = 11
29+
30+let IdxControlCfgRestV2Dapp = 12
31+
32+let IdxControlCfgGovernanceDapp = 13
33+
34+func keyControlConfig () = "%s__controlConfig"
35+
36+
37+func dataControlCfg (neutrinoContract,auctionContract,rpdContract,mathContract,liquidationContract,restContract,nodeRegistryContract,nsbtStakingContract,mediatorContract,surfStakingContract,gnsbtControllerContract,restV2Contract,governanceContract) = makeString(["%s%s%s%s%s%s%s%s%s%s%s%s%s", neutrinoContract, auctionContract, rpdContract, mathContract, liquidationContract, restContract, nodeRegistryContract, nsbtStakingContract, mediatorContract, surfStakingContract, gnsbtControllerContract, restV2Contract, governanceContract], SEP)
38+
739
840 func convertWavesToNeutrino (amount,price) = fraction(fraction(amount, price, 1000000), 1000000, 100000000)
941
1042
1143 func getNumberByAddressAndKey (address,key) = valueOrElse(getInteger(addressFromStringValue(address), key), 0)
1244
1345
1446 func getStringByAddressAndKey (address,key) = valueOrElse(getString(address, key), "")
1547
1648
1749 func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
1850
1951
2052 let price = valueOrElse(getInteger(this, "price"), 0)
2153
2254 let priceIndex = valueOrElse(getInteger(this, "price_index"), 0)
2355
2456 let isBlocked = valueOrElse(getBoolean(this, "is_blocked"), false)
2557
2658 let percentPriceOffset = 7
2759
2860 let pubKeyOracles = valueOrElse(getString(this, "oracles"), "")
2961
3062 let pubKeyOraclesList = convertJsonArrayToList(pubKeyOracles)
3163
3264 let neutrinoAddress = Address(base58'3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo')
3365
3466 let liquidationAddress = Address(base58'3P4PCxsJqMzQBALo8zANHtBDZRRquobHQp7')
3567
3668 let neutrinoAsset = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
3769
3870 let controlContract = this
71+
72+func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
73+
74+
75+func getContractAddressOrFail (controlCfg,idx) = valueOrErrorMessage(addressFromString(controlCfg[idx]), ("Control cfg doesn't contain address at index " + toString(idx)))
76+
77+
78+let controlCfg = split(getStringOrFail(this, keyControlConfig()), SEP)
79+
80+let governanceContract = getContractAddressOrFail(controlCfg, IdxControlCfgGovernanceDapp)
3981
4082 let neutrinoLockedBalance = valueOrElse(getInteger(neutrinoAddress, "balance_lock_neutrino"), 0)
4183
4284 let wavesLockedBalance = valueOrElse(getInteger(neutrinoAddress, "balance_lock_waves"), 0)
4385
4486 let reserve = (wavesBalance(neutrinoAddress).regular - wavesLockedBalance)
4587
4688 let neutrinoSupply = (((neutrinoLockedBalance + value(assetInfo(neutrinoAsset)).quantity) - assetBalance(neutrinoAddress, neutrinoAsset)) - assetBalance(liquidationAddress, neutrinoAsset))
4789
4890 let deficit = (neutrinoSupply - convertWavesToNeutrino(reserve, price))
4991
5092 func findPricesInRange (prices) = {
5193 let minPercentBound = 90
5294 let maxPercentBound = 110
5395 let p0 = prices[0]
5496 let check0 = if ((0 >= prices[0]))
5597 then [0]
5698 else {
5799 let p01 = ((prices[1] * 100) / p0)
58100 let p02 = ((prices[2] * 100) / p0)
59101 let p03 = ((prices[3] * 100) / p0)
60102 let p04 = ((prices[4] * 100) / p0)
61103 let array1 = if (if ((maxPercentBound > p01))
62104 then (p01 > minPercentBound)
63105 else false)
64106 then [1, 0]
65107 else [0]
66108 let array2 = if (if ((maxPercentBound > p02))
67109 then (p02 > minPercentBound)
68110 else false)
69111 then 2 :: array1
70112 else array1
71113 let array3 = if (if ((maxPercentBound > p03))
72114 then (p03 > minPercentBound)
73115 else false)
74116 then 3 :: array2
75117 else array2
76118 if (if ((maxPercentBound > p04))
77119 then (p04 > minPercentBound)
78120 else false)
79121 then 4 :: array3
80122 else array3
81123 }
82124 let check1 = if ((size(check0) >= 3))
83125 then check0
84126 else {
85127 let p1 = prices[1]
86128 if ((0 >= p1))
87129 then [1]
88130 else {
89131 let p10 = ((prices[0] * 100) / p1)
90132 let p12 = ((prices[2] * 100) / p1)
91133 let p13 = ((prices[3] * 100) / p1)
92134 let p14 = ((prices[4] * 100) / p1)
93135 let array1 = if (if ((maxPercentBound > p10))
94136 then (p10 > minPercentBound)
95137 else false)
96138 then [0, 1]
97139 else [1]
98140 let array2 = if (if ((maxPercentBound > p12))
99141 then (p12 > minPercentBound)
100142 else false)
101143 then 2 :: array1
102144 else array1
103145 let array3 = if (if ((maxPercentBound > p13))
104146 then (p13 > minPercentBound)
105147 else false)
106148 then 3 :: array2
107149 else array2
108150 if (if ((maxPercentBound > p14))
109151 then (p14 > minPercentBound)
110152 else false)
111153 then 4 :: array3
112154 else array3
113155 }
114156 }
115157 let check2 = if ((size(check1) >= 3))
116158 then check1
117159 else {
118160 let p2 = prices[2]
119161 if ((0 >= p2))
120162 then [2]
121163 else {
122164 let p20 = ((prices[0] * 100) / p2)
123165 let p21 = ((prices[1] * 100) / p2)
124166 let p23 = ((prices[3] * 100) / p2)
125167 let p24 = ((prices[4] * 100) / p2)
126168 let array1 = if (if ((maxPercentBound > p20))
127169 then (p20 > minPercentBound)
128170 else false)
129171 then [0, 2]
130172 else [2]
131173 let array2 = if (if ((maxPercentBound > p21))
132174 then (p21 > minPercentBound)
133175 else false)
134176 then 1 :: array1
135177 else array1
136178 let array3 = if (if ((maxPercentBound > p23))
137179 then (p23 > minPercentBound)
138180 else false)
139181 then 3 :: array2
140182 else array2
141183 if (if ((maxPercentBound > p24))
142184 then (p24 > minPercentBound)
143185 else false)
144186 then 4 :: array3
145187 else array3
146188 }
147189 }
148190 let check3 = if ((size(check2) >= 3))
149191 then check2
150192 else {
151193 let p3 = prices[3]
152194 if ((0 >= p3))
153195 then [3]
154196 else {
155197 let p30 = ((prices[0] * 100) / p3)
156198 let p31 = ((prices[1] * 100) / p3)
157199 let p32 = ((prices[2] * 100) / p3)
158200 let p34 = ((prices[4] * 100) / p3)
159201 let array1 = if (if ((maxPercentBound > p30))
160202 then (p30 > minPercentBound)
161203 else false)
162204 then [0, 3]
163205 else [3]
164206 let array2 = if (if ((maxPercentBound > p31))
165207 then (p31 > minPercentBound)
166208 else false)
167209 then 1 :: array1
168210 else array1
169211 let array3 = if (if ((maxPercentBound > p32))
170212 then (p32 > minPercentBound)
171213 else false)
172214 then 2 :: array2
173215 else array2
174216 if (if ((maxPercentBound > p34))
175217 then (p34 > minPercentBound)
176218 else false)
177219 then 4 :: array3
178220 else array3
179221 }
180222 }
181223 if ((size(check3) >= 3))
182224 then check3
183225 else {
184226 let p4 = prices[4]
185227 if ((0 >= p4))
186228 then [4]
187229 else {
188230 let p40 = ((prices[0] * 100) / p4)
189231 let p41 = ((prices[1] * 100) / p4)
190232 let p42 = ((prices[2] * 100) / p4)
191233 let p43 = ((prices[3] * 100) / p4)
192234 let array1 = if (if ((maxPercentBound > p40))
193235 then (p40 > minPercentBound)
194236 else false)
195237 then [0, 4]
196238 else [4]
197239 let array2 = if (if ((maxPercentBound > p41))
198240 then (p41 > minPercentBound)
199241 else false)
200242 then 1 :: array1
201243 else array1
202244 let array3 = if (if ((maxPercentBound > p42))
203245 then (p42 > minPercentBound)
204246 else false)
205247 then 2 :: array2
206248 else array2
207249 if (if ((maxPercentBound > p43))
208250 then (p43 > minPercentBound)
209251 else false)
210252 then 3 :: array3
211253 else array3
212254 }
213255 }
214256 }
215257
216258
217259 func formattingPriceMsg (price) = toBytes((((("WAVESNEUTRINOPREFIX" + "_") + toString(height)) + "_") + toString(price)))
218260
219261
220262 @Callable(i)
263+func constructor (neutrinoContract,auctionContract,rpdContract,mathContract,liquidationContract,restContract,nodeRegistryContract,nsbtStakingContract,mediatorContract,surfStakingContract,gnsbtControllerContract,restV2Contract,governanceContract) = if ((i.caller != this))
264+ then throw("permissions denied")
265+ else [StringEntry(keyControlConfig(), dataControlCfg(neutrinoContract, auctionContract, rpdContract, mathContract, liquidationContract, restContract, nodeRegistryContract, nsbtStakingContract, mediatorContract, surfStakingContract, gnsbtControllerContract, restV2Contract, governanceContract))]
266+
267+
268+
269+@Callable(i)
221270 func callEmergencyShutdown (reason) = {
222271 let AutoEmergencyOracleAddress = "3P7ihFVxBNbHK237TNdPxT1xHEu8pHexXTr"
223272 let callerAddress = toString(i.caller)
224- if ((AutoEmergencyOracleAddress != callerAddress))
225- then throw("caller must be one an emergency oracle")
273+ if (if ((AutoEmergencyOracleAddress != callerAddress))
274+ then (toString(governanceContract) != callerAddress)
275+ else false)
276+ then throw("caller must be one an emergency oracle or Governance contract")
226277 else [BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", callerAddress), StringEntry("is_blocked_reason", reason)]
227278 }
228279
229280
230281
231282 @Callable(i)
232283 func finalizeCurrentPrice (price1,sign1,price2,sign2,price3,sign3,price4,sign4,price5,sign5) = if (isBlocked)
233284 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
234285 else if ((valueOrElse(getInteger(this, ("price_" + toString(height))), 0) != 0))
235286 then throw("wait next block")
236287 else if ((pubKeyOraclesList[(height % 5)] != toBase58String(i.callerPublicKey)))
237288 then throw(((("Out of turn finalization: " + toString(height)) + " block should be finalize by ") + pubKeyOraclesList[(height % 5)]))
238289 else {
239290 let prices = [if (sigVerify_8Kb(formattingPriceMsg(price1), sign1, fromBase58String(pubKeyOraclesList[0])))
240291 then price1
241292 else 0, if (sigVerify_8Kb(formattingPriceMsg(price2), sign2, fromBase58String(pubKeyOraclesList[1])))
242293 then price2
243294 else 0, if (sigVerify_8Kb(formattingPriceMsg(price3), sign3, fromBase58String(pubKeyOraclesList[2])))
244295 then price3
245296 else 0, if (sigVerify_8Kb(formattingPriceMsg(price4), sign4, fromBase58String(pubKeyOraclesList[3])))
246297 then price4
247298 else 0, if (sigVerify_8Kb(formattingPriceMsg(price5), sign5, fromBase58String(pubKeyOraclesList[4])))
248299 then price5
249300 else 0]
250301 let zeroPriceCount = if ((prices[0] == 0))
251302 then 1
252303 else (0 + (if ((prices[1] == 0))
253304 then 1
254305 else (0 + (if ((prices[2] == 0))
255306 then 1
256307 else (0 + (if ((prices[3] == 0))
257308 then 1
258309 else (0 + (if ((prices[4] == 0))
259310 then 1
260311 else 0))))))))
261312 if ((zeroPriceCount >= 3))
262313 then throw("3 prices or more are equals to 0")
263314 else {
264315 let pricesInRange = findPricesInRange(prices)
265316 let priceProvidingCount = size(pricesInRange)
266317 if ((3 > priceProvidingCount))
267318 then throw(((((((((((((((((((((("Could not finalize price because of big variation: height=" + toString(height)) + "
268319 ") + pubKeyOraclesList[0]) + "=") + toString(prices[0])) + "
269320 ") + pubKeyOraclesList[1]) + "=") + toString(prices[1])) + "
270321 ") + pubKeyOraclesList[2]) + "=") + toString(prices[2])) + "
271322 ") + pubKeyOraclesList[3]) + "=") + toString(prices[3])) + "
272323 ") + pubKeyOraclesList[4]) + "=") + toString(prices[4])))
273324 else {
274325 let sum1 = ((prices[pricesInRange[0]] + prices[pricesInRange[1]]) + prices[pricesInRange[2]])
275326 let sum2 = if ((priceProvidingCount >= 4))
276327 then (sum1 + prices[pricesInRange[3]])
277328 else sum1
278329 let priceSum = if ((priceProvidingCount >= 5))
279330 then (sum2 + prices[pricesInRange[4]])
280331 else sum2
281332 if ((priceProvidingCount >= 6))
282333 then throw("Invalid pricesInRange creation")
283334 else {
284335 let newPrice = (priceSum / priceProvidingCount)
285336 if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
286337 then true
287338 else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
288339 then {
289340 let reason = "automatic emergency shutdown because of large price variability"
290341 [BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", toString(this)), StringEntry("is_blocked_reason", reason), IntegerEntry((("black_swarm_price" + "_") + toString(height)), newPrice)]
291342 }
292343 else {
293344 let newPriceIndex = (priceIndex + 1)
294345 [IntegerEntry("price", newPrice), IntegerEntry(("price_" + toString(height)), newPrice), IntegerEntry("price_index", newPriceIndex), IntegerEntry(("price_index_" + toString(newPriceIndex)), height), IntegerEntry(("deficit_" + toString(height)), deficit), IntegerEntry(("neutrinoSupply_" + toString(height)), neutrinoSupply), IntegerEntry(("deficit_percent_" + toString(height)), if ((neutrinoSupply != 0))
295346 then ((deficit * 100) / neutrinoSupply)
296347 else 0)]
297348 }
298349 }
299350 }
300351 }
301352 }
302353
303354
304355 @Verifier(tx)
305356 func verify () = {
306357 let pubKeyAdminsListStr = makeString(["GJdLSaLiv5K7xuejac8mcRcHoyo3dPrESrvktG3a6MAR", "EYwZmURd5KKaQRBjsVa6g8DPisFoS6SovRJtFiL5gMHU", "DtmAfuDdCrHK8spdAeAYzq6MsZegeD9gnsrpuTRkCbVA", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"], SEP)
307358 let pubKeyAdminsList = split(valueOrElse(getString(controlContract, "%s__multisig"), pubKeyAdminsListStr), SEP)
308359 let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
309360 then 1
310361 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
311362 then 1
312363 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
313364 then 1
314365 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[3], fromBase58String(pubKeyAdminsList[3])))
315366 then 2
316367 else 0))
317368 (count >= 3)
318369 }
319370

github/deemru/w8io/786bc32 
44.16 ms