tx · F8RBY4U6YJQJM4C9tnRP1BLDwdhqaWr8uGWUKMU16Xdt

3MxuKn3ZoWnX58Q4ooAraNxabpcdaAtpufk:  -0.01300000 Waves

2022.08.29 17:16 [2205846] smart account 3MxuKn3ZoWnX58Q4ooAraNxabpcdaAtpufk > SELF 0.00000000 Waves

{ "type": 13, "id": "F8RBY4U6YJQJM4C9tnRP1BLDwdhqaWr8uGWUKMU16Xdt", "fee": 1300000, "feeAssetId": null, "timestamp": 1661782526952, "version": 2, "chainId": 84, "sender": "3MxuKn3ZoWnX58Q4ooAraNxabpcdaAtpufk", "senderPublicKey": "3GJt6j9wqqWrm9ontm1mnLfeW2wgWZYSqzVb9ueSKL1E", "proofs": [ "8PJkehPj3QszULqfdrt2qaDDgGLhxRsMk4fkNSf1A6ei2wMkkMUjoFMCFQVrx5J75u51GKoQ9wfhsbv4Hu2pKPZ" ], "script": "base64:AAIFAAAAAAAAACIIAhIDCgEIEgMKAQgSABIDCgEYEggKBgEBAQEIARIDCgEIAAAAIAAAAAADU0VQAgAAAAJfXwAAAAAFRU1QVFkCAAAAAAAAAAAOaWR4UG9vbEFkZHJlc3MAAAAAAAAAAAEAAAAACWlkeExQQXNJZAAAAAAAAAAAAwAAAAAJaWR4QW1Bc0lkAAAAAAAAAAAEAAAAAAlpZHhQckFzSWQAAAAAAAAAAAUAAAAAD2lkeEZhY3RTdGFrQ250cgAAAAAAAAAAAQEAAAALa2V5RmFjdENudHIAAAAAAgAAABMlc19fZmFjdG9yeUNvbnRyYWN0AQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAUJXNfX21hbmFnZXJQdWJsaWNLZXkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQAAAAtrZXlQb29sQWRkcgAAAAACAAAADyVzX19wb29sQWRkcmVzcwEAAAALa2V5QW10QXNzZXQAAAAAAgAAAA8lc19fYW1vdW50QXNzZXQBAAAADWtleVByaWNlQXNzZXQAAAAAAgAAAA4lc19fcHJpY2VBc3NldAEAAAAPa2V5QWRtaW5QdWJLZXlzAAAAAAIAAAAQJXNfX2FkbWluUHViS2V5cwEAAAAGa2V5QW1wAAAAAAIAAAAHJXNfX2FtcAEAAAANa2V5QW1wSGlzdG9yeQAAAAEAAAAGaGVpZ2h0CQABLAAAAAICAAAACyVzJWRfX2FtcF9fCQABpAAAAAEFAAAABmhlaWdodAEAAAAQa2V5RmFjdG9yeUNvbmZpZwAAAAACAAAAESVzX19mYWN0b3J5Q29uZmlnAQAAAA1rZXlQb29sQ29uZmlnAAAAAgAAAAZpQW10QXMAAAAFaVByQXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIJWQlZCVzX18FAAAABmlBbXRBcwIAAAACX18FAAAABWlQckFzAgAAAAhfX2NvbmZpZwEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEAAAAFYkFTdHIJAAEsAAAAAgIAAAAoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUAAAAFYkFTdHIBAAAAIWtleUFsbG93ZWRMcFN0YWJsZUFkZG9uU2NyaXB0SGFzaAAAAAACAAAAIiVzX19hbGxvd2VkTHBTdGFibGVBZGRvblNjcmlwdEhhc2gBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIAAAAEYWRkcgAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAARhZGRyBQAAAANrZXkJAAS5AAAAAgkABEwAAAACAgAAAAptYW5kYXRvcnkgCQAETAAAAAIJAAQlAAAAAQUAAAAEYWRkcgkABEwAAAACAgAAAAEuCQAETAAAAAIFAAAAA2tleQkABEwAAAACAgAAAAwgbm90IGRlZmluZWQFAAAAA25pbAIAAAAAAQAAAAxnZXRJbnRPckZhaWwAAAACAAAABGFkZHIAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEYWRkcgUAAAADa2V5CQAEuQAAAAIJAARMAAAAAgIAAAAKbWFuZGF0b3J5IAkABEwAAAACCQAEJQAAAAEFAAAABGFkZHIJAARMAAAAAgIAAAABLgkABEwAAAACBQAAAANrZXkJAARMAAAAAgIAAAAMIG5vdCBkZWZpbmVkBQAAAANuaWwCAAAAAAAAAAAMcG9vbENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAC2tleVBvb2xBZGRyAAAAAAAAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAMcG9vbENvbnRyYWN0CQEAAAALa2V5RmFjdENudHIAAAAAAQAAAA1nZXRQb29sQ29uZmlnAAAAAAQAAAAFYW10QXMJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAxwb29sQ29udHJhY3QJAQAAAAtrZXlBbXRBc3NldAAAAAAEAAAAB3ByaWNlQXMJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAxwb29sQ29udHJhY3QJAQAAAA1rZXlQcmljZUFzc2V0AAAAAAQAAAAIaVByaWNlQXMJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQUAAAAHcHJpY2VBcwQAAAAGaUFtdEFzCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAABWFtdEFzCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAA1rZXlQb29sQ29uZmlnAAAAAgkAAaQAAAABBQAAAAZpQW10QXMJAAGkAAAAAQUAAAAIaVByaWNlQXMFAAAAA1NFUAEAAAAQZ2V0RmFjdG9yeUNvbmZpZwAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAABQAAAANTRVABAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAALbXVzdE1hbmFnZXIAAAABAAAAAWkEAAAAAnBkCQAAAgAAAAECAAAAEVBlcm1pc3Npb24gZGVuaWVkBAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAAnBrBgUAAAACcGQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwYFAAAAAnBkCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAlnZXRBZG1pbnMAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAAA9rZXlBZG1pblB1YktleXMAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDADCQAAAAAAAAIJAAExAAAAAQUAAAABcwAAAAAAAAAAAAUAAAADbmlsCQAEtQAAAAIFAAAAAXMFAAAAA1NFUAUAAAADbmlsAQAAAAltdXN0QWRtaW4AAAABAAAAAWkDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkBAAAACWdldEFkbWlucwAAAAAJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQEAAAAIbXVzdFBvb2wAAAABAAAAAWkDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAMcG9vbENvbnRyYWN0BgkAAAIAAAABAgAAABdjYWxsZXIgbXVzdCBiZSB0aGUgcG9vbAAAAAYAAAABaQEAAAALY29uc3RydWN0b3IAAAABAAAAC3Bvb2xBZGRyZXNzBAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAtrZXlQb29sQWRkcgAAAAAFAAAAC3Bvb2xBZGRyZXNzBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACnNldE1hbmFnZXIAAAABAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAAACAAAAAQIAAAASTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAVoYXNQTQUAAAAFaGFzUE0EAAAAB2NoZWNrUE0DCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkBAAAABXZhbHVlAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAHY2hlY2tQTQUAAAAHY2hlY2tQTQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAJY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", "height": 2205846, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 85iVbpbuBataTNEaZxymdHzWiLS4RYyg2U8qYg5mEmf2 Next: 3AuPcgdH3HVgtmDaMZEdFRbyNczH6DiKstYsZEnfEpKN Diff:
OldNewDifferences
4949
5050
5151 func keyMappingsBaseAsset2internalId (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
52+
53+
54+func keyAllowedLpStableAddonScriptHash () = "%s__allowedLpStableAddonScriptHash"
5255
5356
5457 func getStringOrFail (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
234237 case _ =>
235238 throw("Match error")
236239 }
237- sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
240+ match tx {
241+ case s: SetScriptTransaction =>
242+ let newHash = blake2b256(value(s.script))
243+ let allowedHash = fromBase64String(value(getString(factoryContract, keyAllowedLpStableAddonScriptHash())))
244+ let currentHash = scriptHash(this)
245+ if (if ((allowedHash == newHash))
246+ then (currentHash != newHash)
247+ else false)
248+ then true
249+ else sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
250+ case _ =>
251+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
252+ }
238253 }
239254
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"
3434
3535
3636 func keyAdminPubKeys () = "%s__adminPubKeys"
3737
3838
3939 func keyAmp () = "%s__amp"
4040
4141
4242 func keyAmpHistory (height) = ("%s%d__amp__" + toString(height))
4343
4444
4545 func keyFactoryConfig () = "%s__factoryConfig"
4646
4747
4848 func keyPoolConfig (iAmtAs,iPrAs) = (((("%d%d%s__" + iAmtAs) + "__") + iPrAs) + "__config")
4949
5050
5151 func keyMappingsBaseAsset2internalId (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
52+
53+
54+func keyAllowedLpStableAddonScriptHash () = "%s__allowedLpStableAddonScriptHash"
5255
5356
5457 func getStringOrFail (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
5558
5659
5760 func getIntOrFail (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
5861
5962
6063 let poolContract = addressFromStringValue(getStringOrFail(this, keyPoolAddr()))
6164
6265 let factoryContract = addressFromStringValue(getStringOrFail(poolContract, keyFactCntr()))
6366
6467 func getPoolConfig () = {
6568 let amtAs = getStringOrFail(poolContract, keyAmtAsset())
6669 let priceAs = getStringOrFail(poolContract, keyPriceAsset())
6770 let iPriceAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(priceAs))
6871 let iAmtAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(amtAs))
6972 split(getStringOrFail(factoryContract, keyPoolConfig(toString(iAmtAs), toString(iPriceAs))), SEP)
7073 }
7174
7275
7376 func getFactoryConfig () = split(getStringOrFail(factoryContract, keyFactoryConfig()), SEP)
7477
7578
7679 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
7780 case s: String =>
7881 fromBase58String(s)
7982 case _: Unit =>
8083 unit
8184 case _ =>
8285 throw("Match error")
8386 }
8487
8588
8689 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
8790 case s: String =>
8891 fromBase58String(s)
8992 case _: Unit =>
9093 unit
9194 case _ =>
9295 throw("Match error")
9396 }
9497
9598
9699 func mustManager (i) = {
97100 let pd = throw("Permission denied")
98101 match managerPublicKeyOrUnit() {
99102 case pk: ByteVector =>
100103 if ((i.callerPublicKey == pk))
101104 then true
102105 else pd
103106 case _: Unit =>
104107 if ((i.caller == this))
105108 then true
106109 else pd
107110 case _ =>
108111 throw("Match error")
109112 }
110113 }
111114
112115
113116 func getAdmins () = match getString(keyAdminPubKeys()) {
114117 case s: String =>
115118 if ((size(s) == 0))
116119 then nil
117120 else split(s, SEP)
118121 case _ =>
119122 nil
120123 }
121124
122125
123126 func mustAdmin (i) = if (containsElement(getAdmins(), toBase58String(i.callerPublicKey)))
124127 then true
125128 else mustManager(i)
126129
127130
128131 func mustPool (i) = if ((i.caller == poolContract))
129132 then true
130133 else throw("caller must be the pool")
131134
132135
133136 @Callable(i)
134137 func constructor (poolAddress) = {
135138 let checkCaller = mustManager(i)
136139 if ((checkCaller == checkCaller))
137140 then [StringEntry(keyPoolAddr(), poolAddress)]
138141 else throw("Strict value is not equal to itself.")
139142 }
140143
141144
142145
143146 @Callable(i)
144147 func setManager (pendingManagerPublicKey) = {
145148 let checkCaller = mustManager(i)
146149 if ((checkCaller == checkCaller))
147150 then {
148151 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
149152 if ((checkManagerPublicKey == checkManagerPublicKey))
150153 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
151154 else throw("Strict value is not equal to itself.")
152155 }
153156 else throw("Strict value is not equal to itself.")
154157 }
155158
156159
157160
158161 @Callable(i)
159162 func confirmManager () = {
160163 let pm = pendingManagerPublicKeyOrUnit()
161164 let hasPM = if (isDefined(pm))
162165 then true
163166 else throw("No pending manager")
164167 if ((hasPM == hasPM))
165168 then {
166169 let checkPM = if ((i.callerPublicKey == value(pm)))
167170 then true
168171 else throw("You are not pending manager")
169172 if ((checkPM == checkPM))
170173 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
171174 else throw("Strict value is not equal to itself.")
172175 }
173176 else throw("Strict value is not equal to itself.")
174177 }
175178
176179
177180
178181 @Callable(i)
179182 func setAdmins (adminPubKeys) = {
180183 let checkCaller = mustManager(i)
181184 if ((checkCaller == checkCaller))
182185 then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
183186 else throw("Strict value is not equal to itself.")
184187 }
185188
186189
187190
188191 @Callable(i)
189192 func unstakeAndGetOneTkn (amount,exchResult,notUsed,outAmount,outAssetId,slippage) = {
190193 let checkPayments = if ((size(i.payments) != 0))
191194 then throw("No pmnts expd")
192195 else true
193196 if ((checkPayments == checkPayments))
194197 then {
195198 let cfg = getPoolConfig()
196199 let factoryCfg = getFactoryConfig()
197200 let lpAssetId = fromBase58String(cfg[idxLPAsId])
198201 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
199202 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
200203 if ((unstakeInv == unstakeInv))
201204 then {
202205 let getOneTkn = invoke(poolContract, "getOneTkn", [exchResult, notUsed, outAmount, outAssetId, slippage], [AttachedPayment(lpAssetId, amount)])
203206 if ((getOneTkn == getOneTkn))
204207 then nil
205208 else throw("Strict value is not equal to itself.")
206209 }
207210 else throw("Strict value is not equal to itself.")
208211 }
209212 else throw("Strict value is not equal to itself.")
210213 }
211214
212215
213216
214217 @Callable(i)
215218 func setAmp (amp) = {
216219 let checkCaller = mustAdmin(i)
217220 if ((checkCaller == checkCaller))
218221 then {
219222 let res1 = invoke(poolContract, "setS", [keyAmp(), amp], nil)
220223 let res2 = invoke(poolContract, "setS", [keyAmpHistory(height), amp], nil)
221224 $Tuple2(nil, $Tuple2(res1, res2))
222225 }
223226 else throw("Strict value is not equal to itself.")
224227 }
225228
226229
227230 @Verifier(tx)
228231 func verify () = {
229232 let targetPublicKey = match managerPublicKeyOrUnit() {
230233 case pk: ByteVector =>
231234 pk
232235 case _: Unit =>
233236 tx.senderPublicKey
234237 case _ =>
235238 throw("Match error")
236239 }
237- sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
240+ match tx {
241+ case s: SetScriptTransaction =>
242+ let newHash = blake2b256(value(s.script))
243+ let allowedHash = fromBase64String(value(getString(factoryContract, keyAllowedLpStableAddonScriptHash())))
244+ let currentHash = scriptHash(this)
245+ if (if ((allowedHash == newHash))
246+ then (currentHash != newHash)
247+ else false)
248+ then true
249+ else sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
250+ case _ =>
251+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
252+ }
238253 }
239254

github/deemru/w8io/873ac7e 
75.96 ms