tx · TDGw9J7AyMfLbR7BLCHEtHT1KP89EMuw4XyV51mzNYK

3N4nTJ5sSp5X5ChS2bBBmwNMn1eeRzT1FoP:  -0.00700000 Waves

2022.08.31 11:14 [2208374] smart account 3N4nTJ5sSp5X5ChS2bBBmwNMn1eeRzT1FoP > SELF 0.00000000 Waves

{ "type": 13, "id": "TDGw9J7AyMfLbR7BLCHEtHT1KP89EMuw4XyV51mzNYK", "fee": 700000, "feeAssetId": null, "timestamp": 1661933656997, "version": 2, "chainId": 84, "sender": "3N4nTJ5sSp5X5ChS2bBBmwNMn1eeRzT1FoP", "senderPublicKey": "EsqRXDXnACFAdXz6EPhF1SbKyeV7MVuoyDqmXsMz7ySv", "proofs": [ "26XP2tESA268E2nuUGxwfZfkCrzm7qNSTFSDmwjJyc6Nud354AgjxcikFw2eQnayP8fHQjWrHHWA3phRy78wNwDq" ], "script": "base64:AAIFAAAAAAAAACIIAhIDCgEIEgMKAQgSABIDCgEYEggKBgEBAQEIARIDCgEIAAAAHwAAAAADU0VQAgAAAAJfXwAAAAAFRU1QVFkCAAAAAAAAAAAOaWR4UG9vbEFkZHJlc3MAAAAAAAAAAAEAAAAACWlkeExQQXNJZAAAAAAAAAAAAwAAAAAJaWR4QW1Bc0lkAAAAAAAAAAAEAAAAAAlpZHhQckFzSWQAAAAAAAAAAAUAAAAAD2lkeEZhY3RTdGFrQ250cgAAAAAAAAAAAQEAAAALa2V5RmFjdENudHIAAAAAAgAAABMlc19fZmFjdG9yeUNvbnRyYWN0AQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAUJXNfX21hbmFnZXJQdWJsaWNLZXkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQAAAAtrZXlQb29sQWRkcgAAAAACAAAADyVzX19wb29sQWRkcmVzcwEAAAALa2V5QW10QXNzZXQAAAAAAgAAAA8lc19fYW1vdW50QXNzZXQBAAAADWtleVByaWNlQXNzZXQAAAAAAgAAAA4lc19fcHJpY2VBc3NldAEAAAAPa2V5QWRtaW5QdWJLZXlzAAAAAAIAAAAQJXNfX2FkbWluUHViS2V5cwEAAAAGa2V5QW1wAAAAAAIAAAAHJXNfX2FtcAEAAAANa2V5QW1wSGlzdG9yeQAAAAEAAAAGaGVpZ2h0CQABLAAAAAICAAAACyVzJWRfX2FtcF9fCQABpAAAAAEFAAAABmhlaWdodAEAAAAQa2V5RmFjdG9yeUNvbmZpZwAAAAACAAAAESVzX19mYWN0b3J5Q29uZmlnAQAAAA1rZXlQb29sQ29uZmlnAAAAAgAAAAZpQW10QXMAAAAFaVByQXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIJWQlZCVzX18FAAAABmlBbXRBcwIAAAACX18FAAAABWlQckFzAgAAAAhfX2NvbmZpZwEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEAAAAFYkFTdHIJAAEsAAAAAgIAAAAoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUAAAAFYkFTdHIBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIAAAAEYWRkcgAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAARhZGRyBQAAAANrZXkJAAS5AAAAAgkABEwAAAACAgAAAAptYW5kYXRvcnkgCQAETAAAAAIJAAQlAAAAAQUAAAAEYWRkcgkABEwAAAACAgAAAAEuCQAETAAAAAIFAAAAA2tleQkABEwAAAACAgAAAAwgbm90IGRlZmluZWQFAAAAA25pbAIAAAAAAQAAAAxnZXRJbnRPckZhaWwAAAACAAAABGFkZHIAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEYWRkcgUAAAADa2V5CQAEuQAAAAIJAARMAAAAAgIAAAAKbWFuZGF0b3J5IAkABEwAAAACCQAEJQAAAAEFAAAABGFkZHIJAARMAAAAAgIAAAABLgkABEwAAAACBQAAAANrZXkJAARMAAAAAgIAAAAMIG5vdCBkZWZpbmVkBQAAAANuaWwCAAAAAAAAAAAMcG9vbENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAC2tleVBvb2xBZGRyAAAAAAAAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAMcG9vbENvbnRyYWN0CQEAAAALa2V5RmFjdENudHIAAAAAAQAAAA1nZXRQb29sQ29uZmlnAAAAAAQAAAAFYW10QXMJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAxwb29sQ29udHJhY3QJAQAAAAtrZXlBbXRBc3NldAAAAAAEAAAAB3ByaWNlQXMJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAxwb29sQ29udHJhY3QJAQAAAA1rZXlQcmljZUFzc2V0AAAAAAQAAAAIaVByaWNlQXMJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQUAAAAHcHJpY2VBcwQAAAAGaUFtdEFzCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAABWFtdEFzCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAA1rZXlQb29sQ29uZmlnAAAAAgkAAaQAAAABBQAAAAZpQW10QXMJAAGkAAAAAQUAAAAIaVByaWNlQXMFAAAAA1NFUAEAAAAQZ2V0RmFjdG9yeUNvbmZpZwAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAABQAAAANTRVABAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAALbXVzdE1hbmFnZXIAAAABAAAAAWkEAAAAAnBkCQAAAgAAAAECAAAAEVBlcm1pc3Npb24gZGVuaWVkBAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAAnBrBgUAAAACcGQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwYFAAAAAnBkCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAlnZXRBZG1pbnMAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAAA9rZXlBZG1pblB1YktleXMAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDADCQAAAAAAAAIJAAExAAAAAQUAAAABcwAAAAAAAAAAAAUAAAADbmlsCQAEtQAAAAIFAAAAAXMFAAAAA1NFUAUAAAADbmlsAQAAAAltdXN0QWRtaW4AAAABAAAAAWkDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkBAAAACWdldEFkbWlucwAAAAAJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQEAAAAIbXVzdFBvb2wAAAABAAAAAWkDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAMcG9vbENvbnRyYWN0BgkAAAIAAAABAgAAABdjYWxsZXIgbXVzdCBiZSB0aGUgcG9vbAAAAAYAAAABaQEAAAALY29uc3RydWN0b3IAAAABAAAAC3Bvb2xBZGRyZXNzBAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAtrZXlQb29sQWRkcgAAAAAFAAAAC3Bvb2xBZGRyZXNzBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACnNldE1hbmFnZXIAAAABAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAAACAAAAAQIAAAASTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAVoYXNQTQUAAAAFaGFzUE0EAAAAB2NoZWNrUE0DCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkBAAAABXZhbHVlAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAHY2hlY2tQTQUAAAAHY2hlY2tQTQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAACcG0JAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVi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", "height": 2208374, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CK5dgjYQ3ZyaDC9UXddTZXBeA622GBXufKVqZ97WDuW Next: 7MDyp4EsZYFUWwKuHKFWnXh6z7TAijdLkGNJUVLwgmB3 Diff:
OldNewDifferences
55
66 let EMPTY = ""
77
8+let idxPoolAddress = 1
9+
10+let idxLPAsId = 3
11+
12+let idxAmAsId = 4
13+
14+let idxPrAsId = 5
15+
16+let idxFactStakCntr = 1
17+
18+func keyFactCntr () = "%s__factoryContract"
19+
20+
21+func keyManagerPublicKey () = "%s__managerPublicKey"
22+
23+
24+func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
25+
26+
27+func keyPoolAddr () = "%s__poolAddress"
28+
29+
30+func keyAmtAsset () = "%s__amountAsset"
31+
32+
33+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))
43+
44+
45+func keyFactoryConfig () = "%s__factoryConfig"
46+
47+
48+func keyPoolConfig (iAmtAs,iPrAs) = (((("%d%d%s__" + iAmtAs) + "__") + iPrAs) + "__config")
49+
50+
51+func keyMappingsBaseAsset2internalId (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
52+
53+
54+func getStringOrFail (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
55+
56+
57+func getIntOrFail (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
58+
59+
60+let poolContract = addressFromStringValue(getStringOrFail(this, keyPoolAddr()))
61+
62+let factoryContract = addressFromStringValue(getStringOrFail(poolContract, keyFactCntr()))
63+
64+func getPoolConfig () = {
65+ let amtAs = getStringOrFail(poolContract, keyAmtAsset())
66+ let priceAs = getStringOrFail(poolContract, keyPriceAsset())
67+ let iPriceAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(priceAs))
68+ let iAmtAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(amtAs))
69+ split(getStringOrFail(factoryContract, keyPoolConfig(toString(iAmtAs), toString(iPriceAs))), SEP)
70+ }
71+
72+
73+func getFactoryConfig () = split(getStringOrFail(factoryContract, keyFactoryConfig()), SEP)
74+
75+
76+func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
77+ case s: String =>
78+ fromBase58String(s)
79+ case _: Unit =>
80+ unit
81+ case _ =>
82+ throw("Match error")
83+}
84+
85+
86+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
87+ case s: String =>
88+ fromBase58String(s)
89+ case _: Unit =>
90+ unit
91+ case _ =>
92+ throw("Match error")
93+}
94+
95+
96+func mustManager (i) = {
97+ let pd = throw("Permission denied")
98+ match managerPublicKeyOrUnit() {
99+ case pk: ByteVector =>
100+ if ((i.callerPublicKey == pk))
101+ then true
102+ else pd
103+ case _: Unit =>
104+ if ((i.caller == this))
105+ then true
106+ else pd
107+ case _ =>
108+ throw("Match error")
109+ }
110+ }
111+
112+
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+
128+func mustPool (i) = if ((i.caller == poolContract))
129+ then true
130+ else throw("caller must be the pool")
131+
132+
133+@Callable(i)
134+func constructor (poolAddress) = {
135+ let checkCaller = mustManager(i)
136+ if ((checkCaller == checkCaller))
137+ then [StringEntry(keyPoolAddr(), poolAddress)]
138+ else throw("Strict value is not equal to itself.")
139+ }
140+
141+
142+
143+@Callable(i)
144+func setManager (pendingManagerPublicKey) = {
145+ let checkCaller = mustManager(i)
146+ if ((checkCaller == checkCaller))
147+ then {
148+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
149+ if ((checkManagerPublicKey == checkManagerPublicKey))
150+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
151+ else throw("Strict value is not equal to itself.")
152+ }
153+ else throw("Strict value is not equal to itself.")
154+ }
155+
156+
157+
158+@Callable(i)
159+func confirmManager () = {
160+ let pm = pendingManagerPublicKeyOrUnit()
161+ let hasPM = if (isDefined(pm))
162+ then true
163+ else throw("No pending manager")
164+ if ((hasPM == hasPM))
165+ then {
166+ let checkPM = if ((i.callerPublicKey == value(pm)))
167+ then true
168+ else throw("You are not pending manager")
169+ if ((checkPM == checkPM))
170+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
171+ else throw("Strict value is not equal to itself.")
172+ }
173+ else throw("Strict value is not equal to itself.")
174+ }
175+
176+
177+
178+@Callable(i)
179+func setAdmins (adminPubKeys) = {
180+ let checkCaller = mustManager(i)
181+ if ((checkCaller == checkCaller))
182+ then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
183+ else throw("Strict value is not equal to itself.")
184+ }
185+
186+
187+
188+@Callable(i)
189+func unstakeAndGetOneTkn (amount,exchResult,notUsed,outAmount,outAssetId,slippage) = {
190+ let checkPayments = if ((size(i.payments) != 0))
191+ then throw("No pmnts expd")
192+ else true
193+ if ((checkPayments == checkPayments))
194+ then {
195+ let cfg = getPoolConfig()
196+ let factoryCfg = getFactoryConfig()
197+ let lpAssetId = fromBase58String(cfg[idxLPAsId])
198+ let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
199+ let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
200+ if ((unstakeInv == unstakeInv))
201+ then {
202+ let getOneTkn = invoke(poolContract, "getOneTkn", [exchResult, notUsed, outAmount, outAssetId, slippage], [AttachedPayment(lpAssetId, amount)])
203+ if ((getOneTkn == getOneTkn))
204+ then nil
205+ else throw("Strict value is not equal to itself.")
206+ }
207+ else throw("Strict value is not equal to itself.")
208+ }
209+ else throw("Strict value is not equal to itself.")
210+ }
211+
212+
213+
214+@Callable(i)
215+func setAmp (amp) = {
216+ let checkCaller = mustAdmin(i)
217+ if ((checkCaller == checkCaller))
218+ then {
219+ let res1 = invoke(poolContract, "setS", [keyAmp(), amp], nil)
220+ let res2 = invoke(poolContract, "setS", [keyAmpHistory(height), amp], nil)
221+ $Tuple2(nil, $Tuple2(res1, res2))
222+ }
223+ else throw("Strict value is not equal to itself.")
224+ }
225+
226+
227+@Verifier(tx)
228+func verify () = {
229+ let targetPublicKey = match managerPublicKeyOrUnit() {
230+ case pk: ByteVector =>
231+ pk
232+ case _: Unit =>
233+ tx.senderPublicKey
234+ case _ =>
235+ throw("Match error")
236+ }
237+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
238+ }
8239
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let EMPTY = ""
77
8+let idxPoolAddress = 1
9+
10+let idxLPAsId = 3
11+
12+let idxAmAsId = 4
13+
14+let idxPrAsId = 5
15+
16+let idxFactStakCntr = 1
17+
18+func keyFactCntr () = "%s__factoryContract"
19+
20+
21+func keyManagerPublicKey () = "%s__managerPublicKey"
22+
23+
24+func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
25+
26+
27+func keyPoolAddr () = "%s__poolAddress"
28+
29+
30+func keyAmtAsset () = "%s__amountAsset"
31+
32+
33+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))
43+
44+
45+func keyFactoryConfig () = "%s__factoryConfig"
46+
47+
48+func keyPoolConfig (iAmtAs,iPrAs) = (((("%d%d%s__" + iAmtAs) + "__") + iPrAs) + "__config")
49+
50+
51+func keyMappingsBaseAsset2internalId (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
52+
53+
54+func getStringOrFail (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
55+
56+
57+func getIntOrFail (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
58+
59+
60+let poolContract = addressFromStringValue(getStringOrFail(this, keyPoolAddr()))
61+
62+let factoryContract = addressFromStringValue(getStringOrFail(poolContract, keyFactCntr()))
63+
64+func getPoolConfig () = {
65+ let amtAs = getStringOrFail(poolContract, keyAmtAsset())
66+ let priceAs = getStringOrFail(poolContract, keyPriceAsset())
67+ let iPriceAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(priceAs))
68+ let iAmtAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(amtAs))
69+ split(getStringOrFail(factoryContract, keyPoolConfig(toString(iAmtAs), toString(iPriceAs))), SEP)
70+ }
71+
72+
73+func getFactoryConfig () = split(getStringOrFail(factoryContract, keyFactoryConfig()), SEP)
74+
75+
76+func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
77+ case s: String =>
78+ fromBase58String(s)
79+ case _: Unit =>
80+ unit
81+ case _ =>
82+ throw("Match error")
83+}
84+
85+
86+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
87+ case s: String =>
88+ fromBase58String(s)
89+ case _: Unit =>
90+ unit
91+ case _ =>
92+ throw("Match error")
93+}
94+
95+
96+func mustManager (i) = {
97+ let pd = throw("Permission denied")
98+ match managerPublicKeyOrUnit() {
99+ case pk: ByteVector =>
100+ if ((i.callerPublicKey == pk))
101+ then true
102+ else pd
103+ case _: Unit =>
104+ if ((i.caller == this))
105+ then true
106+ else pd
107+ case _ =>
108+ throw("Match error")
109+ }
110+ }
111+
112+
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+
128+func mustPool (i) = if ((i.caller == poolContract))
129+ then true
130+ else throw("caller must be the pool")
131+
132+
133+@Callable(i)
134+func constructor (poolAddress) = {
135+ let checkCaller = mustManager(i)
136+ if ((checkCaller == checkCaller))
137+ then [StringEntry(keyPoolAddr(), poolAddress)]
138+ else throw("Strict value is not equal to itself.")
139+ }
140+
141+
142+
143+@Callable(i)
144+func setManager (pendingManagerPublicKey) = {
145+ let checkCaller = mustManager(i)
146+ if ((checkCaller == checkCaller))
147+ then {
148+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
149+ if ((checkManagerPublicKey == checkManagerPublicKey))
150+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
151+ else throw("Strict value is not equal to itself.")
152+ }
153+ else throw("Strict value is not equal to itself.")
154+ }
155+
156+
157+
158+@Callable(i)
159+func confirmManager () = {
160+ let pm = pendingManagerPublicKeyOrUnit()
161+ let hasPM = if (isDefined(pm))
162+ then true
163+ else throw("No pending manager")
164+ if ((hasPM == hasPM))
165+ then {
166+ let checkPM = if ((i.callerPublicKey == value(pm)))
167+ then true
168+ else throw("You are not pending manager")
169+ if ((checkPM == checkPM))
170+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
171+ else throw("Strict value is not equal to itself.")
172+ }
173+ else throw("Strict value is not equal to itself.")
174+ }
175+
176+
177+
178+@Callable(i)
179+func setAdmins (adminPubKeys) = {
180+ let checkCaller = mustManager(i)
181+ if ((checkCaller == checkCaller))
182+ then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
183+ else throw("Strict value is not equal to itself.")
184+ }
185+
186+
187+
188+@Callable(i)
189+func unstakeAndGetOneTkn (amount,exchResult,notUsed,outAmount,outAssetId,slippage) = {
190+ let checkPayments = if ((size(i.payments) != 0))
191+ then throw("No pmnts expd")
192+ else true
193+ if ((checkPayments == checkPayments))
194+ then {
195+ let cfg = getPoolConfig()
196+ let factoryCfg = getFactoryConfig()
197+ let lpAssetId = fromBase58String(cfg[idxLPAsId])
198+ let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
199+ let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
200+ if ((unstakeInv == unstakeInv))
201+ then {
202+ let getOneTkn = invoke(poolContract, "getOneTkn", [exchResult, notUsed, outAmount, outAssetId, slippage], [AttachedPayment(lpAssetId, amount)])
203+ if ((getOneTkn == getOneTkn))
204+ then nil
205+ else throw("Strict value is not equal to itself.")
206+ }
207+ else throw("Strict value is not equal to itself.")
208+ }
209+ else throw("Strict value is not equal to itself.")
210+ }
211+
212+
213+
214+@Callable(i)
215+func setAmp (amp) = {
216+ let checkCaller = mustAdmin(i)
217+ if ((checkCaller == checkCaller))
218+ then {
219+ let res1 = invoke(poolContract, "setS", [keyAmp(), amp], nil)
220+ let res2 = invoke(poolContract, "setS", [keyAmpHistory(height), amp], nil)
221+ $Tuple2(nil, $Tuple2(res1, res2))
222+ }
223+ else throw("Strict value is not equal to itself.")
224+ }
225+
226+
227+@Verifier(tx)
228+func verify () = {
229+ let targetPublicKey = match managerPublicKeyOrUnit() {
230+ case pk: ByteVector =>
231+ pk
232+ case _: Unit =>
233+ tx.senderPublicKey
234+ case _ =>
235+ throw("Match error")
236+ }
237+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
238+ }
8239

github/deemru/w8io/026f985 
24.47 ms