tx · Amt2xieiw6Qs1mfnWyEuauwiPKvRzHNMFATTqxV1eKdu

3Ms1H4rXPzb3sKDfpgHaprdYZQdHGPKkDCy:  -0.01400000 Waves

2022.05.18 15:13 [2057091] smart account 3Ms1H4rXPzb3sKDfpgHaprdYZQdHGPKkDCy > SELF 0.00000000 Waves

{ "type": 13, "id": "Amt2xieiw6Qs1mfnWyEuauwiPKvRzHNMFATTqxV1eKdu", "fee": 1400000, "feeAssetId": null, "timestamp": 1652876065158, "version": 1, "sender": "3Ms1H4rXPzb3sKDfpgHaprdYZQdHGPKkDCy", "senderPublicKey": "C9s7RB6cKDKdh1FdwtetcidznxkH47qYX2VqXp4Dmvb7", "proofs": [ "4p7k3X6Seep4z3P8ziBEuepb6EBaqg7287dXmmVyaGDpoKcQ8UKLNs9vt1a97f8LoBpMfGenqeqU5V2TQRQEposu" ], "script": "base64:AAIFAAAAAAAAACIIAhIDCgEIEgMKAQgSABIDCgEYEggKBgEBAQEIARIDCgEIAAAAHgAAAAADU0VQAgAAAAJfXwAAAAAFRU1QVFkCAAAAAAAAAAAOaWR4UG9vbEFkZHJlc3MAAAAAAAAAAAEAAAAACWlkeExQQXNJZAAAAAAAAAAAAwAAAAAJaWR4QW1Bc0lkAAAAAAAAAAAEAAAAAAlpZHhQckFzSWQAAAAAAAAAAAUAAAAAD2lkeEZhY3RTdGFrQ250cgAAAAAAAAAAAQEAAAALa2V5RmFjdENudHIAAAAAAgAAABMlc19fZmFjdG9yeUNvbnRyYWN0AQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAUJXNfX21hbmFnZXJQdWJsaWNLZXkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQAAAAtrZXlQb29sQWRkcgAAAAACAAAADyVzX19wb29sQWRkcmVzcwEAAAALa2V5QW10QXNzZXQAAAAAAgAAAA8lc19fYW1vdW50QXNzZXQBAAAADWtleVByaWNlQXNzZXQAAAAAAgAAAA4lc19fcHJpY2VBc3NldAEAAAAPa2V5QWRtaW5QdWJLZXlzAAAAAAIAAAAQJXNfX2FkbWluUHViS2V5cwEAAAAGa2V5QW1wAAAAAAIAAAAHJXNfX2FtcAEAAAANa2V5QW1wSGlzdG9yeQAAAAEAAAAGaGVpZ2h0CQABLAAAAAICAAAACyVzJWRfX2FtcF9fCQABpAAAAAEFAAAABmhlaWdodAEAAAAQa2V5RmFjdG9yeUNvbmZpZwAAAAACAAAAESVzX19mYWN0b3J5Q29uZmlnAQAAAA1rZXlQb29sQ29uZmlnAAAAAgAAAAZpQW10QXMAAAAFaVByQXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIJWQlZCVzX18FAAAABmlBbXRBcwIAAAACX18FAAAABWlQckFzAgAAAAhfX2NvbmZpZwEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEAAAAFYkFTdHIJAAEsAAAAAgIAAAAoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUAAAAFYkFTdHIBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIAAAAEYWRkcgAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAARhZGRyBQAAAANrZXkJAAS5AAAAAgkABEwAAAACAgAAAAptYW5kYXRvcnkgCQAETAAAAAIJAAQlAAAAAQUAAAAEYWRkcgkABEwAAAACAgAAAAEuCQAETAAAAAIFAAAAA2tleQkABEwAAAACAgAAAAwgbm90IGRlZmluZWQFAAAAA25pbAIAAAAAAQAAAAxnZXRJbnRPckZhaWwAAAACAAAABGFkZHIAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEYWRkcgUAAAADa2V5CQAEuQAAAAIJAARMAAAAAgIAAAAKbWFuZGF0b3J5IAkABEwAAAACCQAEJQAAAAEFAAAABGFkZHIJAARMAAAAAgIAAAABLgkABEwAAAACBQAAAANrZXkJAARMAAAAAgIAAAAMIG5vdCBkZWZpbmVkBQAAAANuaWwCAAAAAAAAAAAMcG9vbENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAC2tleVBvb2xBZGRyAAAAAAAAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAMcG9vbENvbnRyYWN0CQEAAAALa2V5RmFjdENudHIAAAAAAQAAAA1nZXRQb29sQ29uZmlnAAAAAAQAAAAFYW10QXMJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAxwb29sQ29udHJhY3QJAQAAAAtrZXlBbXRBc3NldAAAAAAEAAAAB3ByaWNlQXMJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAxwb29sQ29udHJhY3QJAQAAAA1rZXlQcmljZUFzc2V0AAAAAAQAAAAIaVByaWNlQXMJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQUAAAAHcHJpY2VBcwQAAAAGaUFtdEFzCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAABWFtdEFzCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAA1rZXlQb29sQ29uZmlnAAAAAgkAAaQAAAABBQAAAAZpQW10QXMJAAGkAAAAAQUAAAAIaVByaWNlQXMFAAAAA1NFUAEAAAAQZ2V0RmFjdG9yeUNvbmZpZwAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAABQAAAANTRVABAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAALbXVzdE1hbmFnZXIAAAABAAAAAWkEAAAAAnBkCQAAAgAAAAECAAAAEVBlcm1pc3Npb24gZGVuaWVkBAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1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", "chainId": 84, "height": 2057091, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8h68s9hUdhSauCUmj7wjuv1PrW6Z6VbzS2Vnk2bgj5C8 Next: 8K92diVPG8eeAEgs8iZMrsyf1zvGQEkfkT5Ke3HE7kkd Diff:
OldNewDifferences
3131
3232
3333 func keyPriceAsset () = "%s__priceAsset"
34+
35+
36+func keyAdminPubKeys () = "%s__adminPubKeys"
37+
38+
39+func keyAmp () = "%s__amp"
40+
41+
42+func keyAmpHistory (height) = ("%s%d__amp__" + toString(height))
3443
3544
3645 func keyFactoryConfig () = "%s__factoryConfig"
101110 }
102111
103112
113+func getAdmins () = match getString(keyAdminPubKeys()) {
114+ case s: String =>
115+ if ((size(s) == 0))
116+ then nil
117+ else split(s, SEP)
118+ case _ =>
119+ nil
120+}
121+
122+
123+func mustAdmin (i) = if (containsElement(getAdmins(), toBase58String(i.callerPublicKey)))
124+ then true
125+ else mustManager(i)
126+
127+
104128 @Callable(i)
105129 func constructor (poolAddress) = {
106130 let checkCaller = mustManager(i)
147171
148172
149173 @Callable(i)
174+func setAdmins (adminPubKeys) = {
175+ let checkCaller = mustManager(i)
176+ if ((checkCaller == checkCaller))
177+ then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
178+ else throw("Strict value is not equal to itself.")
179+ }
180+
181+
182+
183+@Callable(i)
150184 func unstakeAndGetOneTkn (amount,exchResult,notUsed,outAmount,outAssetId,slippage) = {
151185 let checkPayments = if ((size(i.payments) != 0))
152186 then throw("No pmnts expd")
171205 }
172206
173207
208+
209+@Callable(i)
210+func setAmp (amp) = {
211+ let checkCaller = mustAdmin(i)
212+ if ((checkCaller == checkCaller))
213+ then {
214+ let res1 = invoke(poolContract, "setS", [keyAmp(), amp], nil)
215+ let res2 = invoke(poolContract, "setS", [keyAmpHistory(height), amp], nil)
216+ $Tuple2(nil, $Tuple2(res1, res2))
217+ }
218+ else throw("Strict value is not equal to itself.")
219+ }
220+
221+
174222 @Verifier(tx)
175223 func verify () = {
176224 let targetPublicKey = match managerPublicKeyOrUnit() {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let EMPTY = ""
77
88 let idxPoolAddress = 1
99
1010 let idxLPAsId = 3
1111
1212 let idxAmAsId = 4
1313
1414 let idxPrAsId = 5
1515
1616 let idxFactStakCntr = 1
1717
1818 func keyFactCntr () = "%s__factoryContract"
1919
2020
2121 func keyManagerPublicKey () = "%s__managerPublicKey"
2222
2323
2424 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
2525
2626
2727 func keyPoolAddr () = "%s__poolAddress"
2828
2929
3030 func keyAmtAsset () = "%s__amountAsset"
3131
3232
3333 func keyPriceAsset () = "%s__priceAsset"
34+
35+
36+func keyAdminPubKeys () = "%s__adminPubKeys"
37+
38+
39+func keyAmp () = "%s__amp"
40+
41+
42+func keyAmpHistory (height) = ("%s%d__amp__" + toString(height))
3443
3544
3645 func keyFactoryConfig () = "%s__factoryConfig"
3746
3847
3948 func keyPoolConfig (iAmtAs,iPrAs) = (((("%d%d%s__" + iAmtAs) + "__") + iPrAs) + "__config")
4049
4150
4251 func keyMappingsBaseAsset2internalId (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
4352
4453
4554 func getStringOrFail (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
4655
4756
4857 func getIntOrFail (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
4958
5059
5160 let poolContract = addressFromStringValue(getStringOrFail(this, keyPoolAddr()))
5261
5362 let factoryContract = addressFromStringValue(getStringOrFail(poolContract, keyFactCntr()))
5463
5564 func getPoolConfig () = {
5665 let amtAs = getStringOrFail(poolContract, keyAmtAsset())
5766 let priceAs = getStringOrFail(poolContract, keyPriceAsset())
5867 let iPriceAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(priceAs))
5968 let iAmtAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(amtAs))
6069 split(getStringOrFail(factoryContract, keyPoolConfig(toString(iAmtAs), toString(iPriceAs))), SEP)
6170 }
6271
6372
6473 func getFactoryConfig () = split(getStringOrFail(factoryContract, keyFactoryConfig()), SEP)
6574
6675
6776 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
6877 case s: String =>
6978 fromBase58String(s)
7079 case _: Unit =>
7180 unit
7281 case _ =>
7382 throw("Match error")
7483 }
7584
7685
7786 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
7887 case s: String =>
7988 fromBase58String(s)
8089 case _: Unit =>
8190 unit
8291 case _ =>
8392 throw("Match error")
8493 }
8594
8695
8796 func mustManager (i) = {
8897 let pd = throw("Permission denied")
8998 match managerPublicKeyOrUnit() {
9099 case pk: ByteVector =>
91100 if ((i.callerPublicKey == pk))
92101 then true
93102 else pd
94103 case _: Unit =>
95104 if ((i.caller == this))
96105 then true
97106 else pd
98107 case _ =>
99108 throw("Match error")
100109 }
101110 }
102111
103112
113+func getAdmins () = match getString(keyAdminPubKeys()) {
114+ case s: String =>
115+ if ((size(s) == 0))
116+ then nil
117+ else split(s, SEP)
118+ case _ =>
119+ nil
120+}
121+
122+
123+func mustAdmin (i) = if (containsElement(getAdmins(), toBase58String(i.callerPublicKey)))
124+ then true
125+ else mustManager(i)
126+
127+
104128 @Callable(i)
105129 func constructor (poolAddress) = {
106130 let checkCaller = mustManager(i)
107131 if ((checkCaller == checkCaller))
108132 then [StringEntry(keyPoolAddr(), poolAddress)]
109133 else throw("Strict value is not equal to itself.")
110134 }
111135
112136
113137
114138 @Callable(i)
115139 func setManager (pendingManagerPublicKey) = {
116140 let checkCaller = mustManager(i)
117141 if ((checkCaller == checkCaller))
118142 then {
119143 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
120144 if ((checkManagerPublicKey == checkManagerPublicKey))
121145 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
122146 else throw("Strict value is not equal to itself.")
123147 }
124148 else throw("Strict value is not equal to itself.")
125149 }
126150
127151
128152
129153 @Callable(i)
130154 func confirmManager () = {
131155 let pm = pendingManagerPublicKeyOrUnit()
132156 let hasPM = if (isDefined(pm))
133157 then true
134158 else throw("No pending manager")
135159 if ((hasPM == hasPM))
136160 then {
137161 let checkPM = if ((i.callerPublicKey == value(pm)))
138162 then true
139163 else throw("You are not pending manager")
140164 if ((checkPM == checkPM))
141165 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
142166 else throw("Strict value is not equal to itself.")
143167 }
144168 else throw("Strict value is not equal to itself.")
145169 }
146170
147171
148172
149173 @Callable(i)
174+func setAdmins (adminPubKeys) = {
175+ let checkCaller = mustManager(i)
176+ if ((checkCaller == checkCaller))
177+ then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
178+ else throw("Strict value is not equal to itself.")
179+ }
180+
181+
182+
183+@Callable(i)
150184 func unstakeAndGetOneTkn (amount,exchResult,notUsed,outAmount,outAssetId,slippage) = {
151185 let checkPayments = if ((size(i.payments) != 0))
152186 then throw("No pmnts expd")
153187 else true
154188 if ((checkPayments == checkPayments))
155189 then {
156190 let cfg = getPoolConfig()
157191 let factoryCfg = getFactoryConfig()
158192 let lpAssetId = fromBase58String(cfg[idxLPAsId])
159193 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
160194 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
161195 if ((unstakeInv == unstakeInv))
162196 then {
163197 let getOneTkn = invoke(poolContract, "getOneTkn", [exchResult, notUsed, outAmount, outAssetId, slippage], [AttachedPayment(lpAssetId, amount)])
164198 if ((getOneTkn == getOneTkn))
165199 then nil
166200 else throw("Strict value is not equal to itself.")
167201 }
168202 else throw("Strict value is not equal to itself.")
169203 }
170204 else throw("Strict value is not equal to itself.")
171205 }
172206
173207
208+
209+@Callable(i)
210+func setAmp (amp) = {
211+ let checkCaller = mustAdmin(i)
212+ if ((checkCaller == checkCaller))
213+ then {
214+ let res1 = invoke(poolContract, "setS", [keyAmp(), amp], nil)
215+ let res2 = invoke(poolContract, "setS", [keyAmpHistory(height), amp], nil)
216+ $Tuple2(nil, $Tuple2(res1, res2))
217+ }
218+ else throw("Strict value is not equal to itself.")
219+ }
220+
221+
174222 @Verifier(tx)
175223 func verify () = {
176224 let targetPublicKey = match managerPublicKeyOrUnit() {
177225 case pk: ByteVector =>
178226 pk
179227 case _: Unit =>
180228 tx.senderPublicKey
181229 case _ =>
182230 throw("Match error")
183231 }
184232 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
185233 }
186234

github/deemru/w8io/026f985 
50.57 ms