2022.03.08 14:40 [3020052] smart account 3P2rJGfb5MbeivZNSqdVmsD1Y2Mz8y6Jr3Z > SELF 0.00000000 Waves

{ "type": 13, "id": "8PJRx5DasaUZvftNami85Eid76dwcd7PSxDW3yjG7JRu", "fee": 1000000, "feeAssetId": null, "timestamp": 1646739611454, "version": 1, "sender": "3P2rJGfb5MbeivZNSqdVmsD1Y2Mz8y6Jr3Z", "senderPublicKey": "3gQ8QUfoGQW6YVuhUv3zuqsbmxbV5F2FAuDXJqVKD6C9", "proofs": [ "VbQ6krQnW4urqGwEBCXQsLKSBNxbTqc3tZxwLiMJgQsLkWrCJaCHz9qMUXR2NBJBu68H7oW54NKTW1GRYe6GUvk" ], "script": "base64:AAIFAAAAAAAAACQIAhIDCgEIEgMKAQgSBAoCCAgSAwoBCBIAEgMKAQgSBAoCCAgAAAAWAQAAAAt3cml0ZVN0cmluZwAAAAIAAAADa2V5AAAABXZhbHVlCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAANrZXkFAAAABXZhbHVlAQAAABB3cml0ZUNvbnN0U3RyaW5nAAAAAgAAAANrZXkAAAAFdmFsdWUDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAADa2V5BQAAAAV2YWx1ZQkAAAIAAAABCQABLAAAAAICAAAAFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUAAAADa2V5AAAAAA1jb25maWdBZGRyZXNzBQAAAAR0aGlzAAAAAAphZG1pblN0b3JlAgAAAAVhZG1pbgAAAAAJbWFpblN0b3JlAgAAAARtYWluAAAAAA9wYXVzYWJsZUJ5U3RvcmUCAAAACnBhdXNhYmxlQnkBAAAAC0FQb2ludFN0b3JlAAAAAQAAAAdhc3NldElkCQABLAAAAAIFAAAAB2Fzc2V0SWQCAAAAB19BUG9pbnQBAAAAC0JQb2ludFN0b3JlAAAAAQAAAAdhc3NldElkCQABLAAAAAIFAAAAB2Fzc2V0SWQCAAAAB19CUG9pbnQBAAAAC0NQb2ludFN0b3JlAAAAAQAAAAdhc3NldElkCQABLAAAAAIFAAAAB2Fzc2V0SWQCAAAAB19DUG9pbnQBAAAAC0RQb2ludFN0b3JlAAAAAQAAAAdhc3NldElkCQABLAAAAAIFAAAAB2Fzc2V0SWQCAAAAB19EUG9pbnQBAAAAFWNvbGxhdGVyYWxGYWN0b3JTdG9yZQAAAAEAAAAHYXNzZXRJZAkAASwAAAACBQAAAAdhc3NldElkAgAAABFfQ29sbGF0ZXJhbEZhY3RvcgEAAAAScmVzZXJ2ZUZhY3RvclN0b3JlAAAAAQAAAAdhc3NldElkCQABLAAAAAIFAAAAB2Fzc2V0SWQCAAAADl9SZXNlcnZlRmFjdG9yAQAAABlsaXF1aWRhdGlvblRocmVzaG9sZFN0b3JlAAAAAQAAAAdhc3NldElkCQABLAAAAAIFAAAAB2Fzc2V0SWQCAAAAFV9MaXF1aWRhdGlvblRocmVzaG9sZAEAAAAXbGlxdWlkYXRpb25QZW5hbHR5U3RvcmUAAAABAAAAB2Fzc2V0SWQJAAEsAAAAAgUAAAAHYXNzZXRJZAIAAAATX0xpcXVpZGF0aW9uUGVuYWx0eQAAAAAGb3BzU3RyCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMCAAAAA29wcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAABxZGVwb3NpdHx3aXRoZHJhd3xib3Jyb3d8cmVwYXl8YXRva2Vuc3xjb2xsYXBzZXx0cmFuc2Zlcl9kZWJ0fHVzZV9hc19jb2x8Zm9yY2VfY29sbGFwc2V8c3Rha2VfdmlyZXN8dW5zdGFrZV92aXJlc3wCAAAAfGNsYWltX3ZpcmVzX2Rpc3RyaWJ1dGlvbnxjbGFpbV92aXJlc19lYnxyZWFsbG9jfGxvY2tfdmlyZXN8d2l0aGRyYXdfdW5sb2NrZWRfdmlyZXN8Y2xhaW1fZGl2aWRlbmRzfHNoYXJlX2RpdmlkZW5kc19tYW51YWxseXwCAAAAfHN0YWtlcl9taWdyYXRlfHN1cHBseV9wcm90ZWN0ZWRfY29sbGF0ZXJhbHx3aXRoZHJhd19wcm90ZWN0ZWRfY29sbGF0ZXJhbHxjb2xsYXBzZV9wcm90ZWN0ZWRfY29sbGF0ZXJhbHxzZXRfZGVsZWdhdGlvbl9jbGFpbXwCAAAAPGdvdmVybmFuY2VfcHJvcG9zZV90eHxnb3Zlcm5hbmNlX3ZvdGVfdHh8Z292ZXJuYW5jZV9hcHBseV90eAAAAAADb3BzCQAEtQAAAAIFAAAABm9wc1N0cgIAAAABfAEAAAAVcmVzZXJ2ZU9wQ29udHJvbFN0b3JlAAAAAgAAAAdhc3NldElkAAAAAm9wCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAA29wXwUAAAACb3ACAAAAAV8FAAAAB2Fzc2V0SWQCAAAAB19wYXVzZWQBAAAADm9wQ29udHJvbFN0b3JlAAAAAQAAAAJvcAkAASwAAAACCQABLAAAAAICAAAAA29wXwUAAAACb3ACAAAAB19wYXVzZWQAAAAAEnN5c3RlbUNvbnRyb2xTdG9yZQIAAAANc3lzdGVtX3Bh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", "chainId": 87, "height": 3020052, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: FH6EdwC6bMBNFFcptSgAkw2bUNkwdypUYobLms82rvtk Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func writeString (key,value) = StringEntry(key, value)
5+
6+
7+func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
8+ then StringEntry(key, value)
9+ else throw(("already initialized: " + key))
10+
11+
12+let configAddress = this
13+
14+let adminStore = "admin"
15+
16+let mainStore = "main"
17+
18+let pausableByStore = "pausableBy"
19+
20+func APointStore (assetId) = (assetId + "_APoint")
21+
22+
23+func BPointStore (assetId) = (assetId + "_BPoint")
24+
25+
26+func CPointStore (assetId) = (assetId + "_CPoint")
27+
28+
29+func DPointStore (assetId) = (assetId + "_DPoint")
30+
31+
32+func collateralFactorStore (assetId) = (assetId + "_CollateralFactor")
33+
34+
35+func reserveFactorStore (assetId) = (assetId + "_ReserveFactor")
36+
37+
38+func liquidationThresholdStore (assetId) = (assetId + "_LiquidationThreshold")
39+
40+
41+func liquidationPenaltyStore (assetId) = (assetId + "_LiquidationPenalty")
42+
43+
44+let opsStr = valueOrElse(getString(this, "ops"), ((("deposit|withdraw|borrow|repay|atokens|collapse|transfer_debt|use_as_col|force_collapse|stake_vires|unstake_vires|" + "claim_vires_distribution|claim_vires_eb|realloc|lock_vires|withdraw_unlocked_vires|claim_dividends|share_dividends_manually|") + "staker_migrate|supply_protected_collateral|withdraw_protected_collateral|collapse_protected_collateral|set_delegation_claim|") + "governance_propose_tx|governance_vote_tx|governance_apply_tx"))
45+
46+let ops = split(opsStr, "|")
47+
48+func reserveOpControlStore (assetId,op) = (((("op_" + op) + "_") + assetId) + "_paused")
49+
50+
51+func opControlStore (op) = (("op_" + op) + "_paused")
52+
53+
54+let systemControlStore = "system_paused"
55+
56+func adminOnly (i) = if ((toString(i.caller) != valueOrElse(getString(this, adminStore), "no admin")))
57+ then throw("only admin can do")
58+ else true
59+
60+
61+func inRange (value,min,max) = if (if ((min > value))
62+ then true
63+ else (value > max))
64+ then throw(((((("value: " + toString(value)) + " not in range: ") + toString(min)) + " - ") + toString(max)))
65+ else true
66+
67+
68+func canPause (i) = contains(valueOrErrorMessage(getString(this, pausableByStore), "pausableByStore not configured"), toString(i.caller))
69+
70+
71+@Callable(i)
72+func initialize (main) = [writeConstString(adminStore, toString(i.caller)), writeConstString(mainStore, main)]
73+
74+
75+
76+@Callable(i)
77+func changeResumeAdmin (newResume) = {
78+ let checks = adminOnly(i)
79+ if ((checks == checks))
80+ then [writeString(adminStore, newResume)]
81+ else throw("Strict value is not equal to itself.")
82+ }
83+
84+
85+
86+@Callable(i)
87+func pauseAssetOp (assetId,op) = if (!(isDefined(indexOf(ops, op))))
88+ then throw(("unknown op: " + op))
89+ else if (!(canPause(i)))
90+ then throw("only pausableBy can do")
91+ else [BooleanEntry(reserveOpControlStore(assetId, op), false)]
92+
93+
94+
95+@Callable(i)
96+func pauseOp (op) = if (!(isDefined(indexOf(ops, op))))
97+ then throw(("unknown op: " + op))
98+ else if (!(canPause(i)))
99+ then throw("only pausableBy can do")
100+ else [BooleanEntry(opControlStore(op), false)]
101+
102+
103+
104+@Callable(i)
105+func pauseSystem () = if (!(canPause(i)))
106+ then throw("only pausableBy can do")
107+ else [BooleanEntry(systemControlStore, false)]
108+
109+
110+
111+@Callable(i)
112+func resume (key) = {
113+ let checks = adminOnly(i)
114+ if ((checks == checks))
115+ then [BooleanEntry(key, true)]
116+ else throw("Strict value is not equal to itself.")
117+ }
118+
119+
120+
121+@Callable(i)
122+func opAllowed (assetId,op) = {
123+ let enabled0 = valueOrElse(getBoolean(this, systemControlStore), true)
124+ let enabled1 = valueOrElse(getBoolean(this, opControlStore(op)), true)
125+ let enabled2 = valueOrElse(getBoolean(this, reserveOpControlStore(assetId, op)), true)
126+ if (!(enabled0))
127+ then throw(("operation paused by " + systemControlStore))
128+ else if (!(enabled1))
129+ then throw(("operation paused by " + opControlStore(op)))
130+ else if (!(enabled2))
131+ then throw(("operation paused by " + reserveOpControlStore(assetId, op)))
132+ else $Tuple2(nil, true)
133+ }
134+
135+

github/deemru/w8io/786bc32 
22.13 ms