tx · 9LA7qr8ZwkVPtVgErL9XCej1ZuCqeWCi6btZbdQZHBVY

3Muw1aRbeKgLqAS264AakECyQAvDsnweHLu:  -0.01600000 Waves

2022.06.08 18:49 [2087595] smart account 3Muw1aRbeKgLqAS264AakECyQAvDsnweHLu > SELF 0.00000000 Waves

{ "type": 13, "id": "9LA7qr8ZwkVPtVgErL9XCej1ZuCqeWCi6btZbdQZHBVY", "fee": 1600000, "feeAssetId": null, "timestamp": 1654703360582, "version": 1, "sender": "3Muw1aRbeKgLqAS264AakECyQAvDsnweHLu", "senderPublicKey": "668WwQVaWxezbvLEK3FccCSTbjst4zYAJDPrfLFRj9b9", "proofs": [ "4hsgM3Akmx741dLPuQugqLdgTq8v83VbxLGFrPzsAjZTMwZPij8ach5zNkGFsAXPmwnhAro6KGhH2fZB4T7aFkcL" ], "script": "base64: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AAAAEnBlbmRpbmdXaXRoZHJhd2FscwUAAAAQd2l0aGRyYXdhbEFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAG2tleU1hcHBpbmdzVXNlclRvV2l0aGRyYXdhbAAAAAMFAAAAC2Jhc2VBc3NldElkBQAAAAt1c2VyQWRkcmVzcwkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAABB3aXRoZHJhd2FsQW1vdW50BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAEWV4ZWN1dGVHZXRSZXF1ZXN0AAAAAwAAAAdhc3NldElkAAAAC3VzZXJBZGRyZXNzAAAACnN1Ym1pdFR4SWQEAAAAEHdpdGhkcmF3YWxBbW91bnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQfAAAAAQkBAAAAG2tleU1hcHBpbmdzVXNlclRvV2l0aGRyYXdhbAAAAAMFAAAAB2Fzc2V0SWQFAAAAC3VzZXJBZGRyZXNzBQAAAApzdWJtaXRUeElkAAAAAAAAAAAABAAAAAZjaGVja3MJAARMAAAAAgMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQgAAAAAQkBAAAACmtleUNyZWF0ZWQAAAABBQAAAAdhc3NldElkBwYJAQAAAAh0aHJvd0VycgAAAAECAAAAKGFzc2V0IG11c3QgYmUgcmVnaXN0ZXJlZCBpbiB0aGUgY29udHJhY3QJAARMAAAAAgMJAABmAAAAAgUAAAAQd2l0aGRyYXdhbEFtb3VudAAAAAAAAAAAAAYJAQAAAAh0aHJvd0VycgAAAAECAAAAI25vIGNvcnJlc3BvbmRpbmcgd2l0aGRyYXdhbCByZXF1ZXN0BQAAAANuaWwDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzBAAAABJwZW5kaW5nV2l0aGRyYXdhbHMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQfAAAAAQkBAAAAFWtleVBlbmRpbmdXaXRoZHJhd2FscwAAAAEFAAAAB2Fzc2V0SWQAAAAAAAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAALdXNlckFkZHJlc3MFAAAAEHdpdGhkcmF3YWxBbW91bnQJAAJZAAAAAQUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAba2V5TWFwcGluZ3NVc2VyVG9XaXRoZHJhd2FsAAAAAwUAAAAHYXNzZXRJZAUAAAALdXNlckFkZHJlc3MFAAAACnN1Ym1pdFR4SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABVrZXlQZW5kaW5nV2l0aGRyYXdhbHMAAAABBQAAAAdhc3NldElkCQAAZQAAAAIFAAAAEnBlbmRpbmdXaXRoZHJhd2FscwUAAAAQd2l0aGRyYXdhbEFtb3VudAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA1yZWdpc3RlckFzc2V0AAAABgAAAAdhc3NldElkAAAABmxwTmFtZQAAAA1scERlc2NyaXB0aW9uAAAABmxwTG9nbwAAAA1kZWxheUluQmxvY2tzAAAADHByb3h5QWRkcmVzcwQAAAAGY2hlY2tzCQAETAAAAAIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkJAARMAAAAAgMJAABnAAAAAgUAAAANZGVsYXlJbkJsb2NrcwAAAAAAAAAAAAYJAQAAAAh0aHJvd0VycgAAAAECAAAAFWludmFsaWQgZGVsYXlJbkJsb2NrcwkABEwAAAACAwkBAAAAAiE9AAAAAgkABCYAAAABBQAAAAxwcm94eUFkZHJlc3MFAAAABHVuaXQGCQEAAAAIdGhyb3dFcnIAAAABAgAAABRpbnZhbGlkIHByb3h5QWRkcmVzcwkABEwAAAACAwkAAAAAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEIAAAAAEJAQAAAAprZXlDcmVhdGVkAAAAAQUAAAAHYXNzZXRJZAcHBgkBAAAACHRocm93RXJyAAAAAQIAAAAYYXNzZXQgYWxyZWFkeSByZWdpc3RlcmVkBQAAAANuaWwDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzBAAAAAhkZWNpbWFscwgJAQAAAAV2YWx1ZQAA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a2V5Q3JlYXRlZAAAAAEFAAAAB2Fzc2V0SWQHBgkBAAAACHRocm93RXJyAAAAAQIAAAA5YXR0YWNoZWQgcGF5bWVudCBhc3NldCBtdXN0IGJlIHJlZ2lzdGVyZWQgaW4gdGhlIGNvbnRyYWN0CQAETAAAAAIDCQEAAAACIT0AAAACBQAAABJwZW5kaW5nV2l0aGRyYXdhbHMAAAAAAAAAAAAGCQEAAAAIdGhyb3dFcnIAAAABAgAAACp6ZXJvIHBlbmRpbmdXaXRoZHJhd2Fscywgbm90aGluZyB0byB0b3AgdXAJAARMAAAAAgMJAABnAAAAAgUAAAAScGVuZGluZ1dpdGhkcmF3YWxzBQAAAAZhbW91bnQGAgAAAD5hbW91bnQgdG8gdG9wIHVwIG11c3QgYmUgbGVzcyBvciBlcXVhbCB0aGFuIHBlbmRpbmdXaXRoZHJhd2FscwUAAAADbmlsAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFWtleVBlbmRpbmdXaXRoZHJhd2FscwAAAAEFAAAAB2Fzc2V0SWQJAABlAAAAAgUAAAAScGVuZGluZ1dpdGhkcmF3YWxzBQAAAAZhbW91bnQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAGc2V0VFZMAAAAAgAAAAdhc3NldElkAAAABm5ld1RWTAQAAAALY2hlY2tDYWxsZXIJAQAAABBtdXN0UHJveHlBZGRyZXNzAAAAAgUAAAABaQUAAAAHYXNzZXRJZAMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAGa2V5VFZMAAAAAQUAAAAHYXNzZXRJZAUAAAAGbmV3VFZMCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAANa2V5VFZMSGlzdG9yeQAAAAIFAAAAB2Fzc2V0SWQFAAAABmhlaWdodAUAAAAGbmV3VFZMBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACnNldE1hbmFnZXIAAAABAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAQAAAAh0aHJvd0VycgAAAAECAAAAEm5vIHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAFaGFzUE0FAAAABWhhc1BNBAAAAAdjaGVja1BNAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtBgkBAAAACHRocm93RXJyAAAAAQIAAAAbeW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAdjaGVja1BNBQAAAAdjaGVja1BNCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAJwbQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAD3RhcmdldFB1YmxpY0tleQQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA90YXJnZXRQdWJsaWNLZXmu21fz", "chainId": 84, "height": 2087595, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DXU1Wep861RcHzPLEFFrxaLi2q8fmXH4sEZCByogS1cg Next: J78Pt3YfBwHAVf6ptMvBLvzAyznFXL4h1rHqAdNS74Dh Diff:
OldNewDifferences
3535
3636
3737 func keyProxyAddress (assetId) = makeString(["%s%s", "proxyAddress", assetId], SEP)
38+
39+
40+func keyMappingsUserToWithdrawal (assetId,userAddress,txId) = makeString(["%s%s%s%s", "userWithdrawalAmount", assetId, userAddress, txId], SEP)
3841
3942
4043 func keyAssetsStoreContract () = makeString(["%s", "assetsStoreContract"], SEP)
107110
108111
109112 @Callable(i)
110-func put () = nil
113+func put () = {
114+ let pmt = value(i.payments[0])
115+ let asset = value(pmt.assetId)
116+ let assetId = toBase58String(asset)
117+ let checks = [if ((size(i.payments) == 1))
118+ then true
119+ else throwErr("only one payment must be attached"), if (valueOrElse(getBoolean(keyCreated(assetId)), false))
120+ then true
121+ else throwErr("attached payment asset must be registered in the contract"), if ((pmt.amount > 0))
122+ then true
123+ else throwErr("positive amount required")]
124+ if ((checks == checks))
125+ then {
126+ let tvl = valueOrElse(getInteger(keyTVL(assetId)), 0)
127+ let lpId = value(getString(keyAssetIdToLPId(assetId)))
128+ let lpInfo = value(assetInfo(fromBase58String(assetId)))
129+ let sharesAmount = if ((tvl > 0))
130+ then ((pmt.amount * lpInfo.quantity) / tvl)
131+ else pmt.amount
132+[Reissue(lpInfo.id, sharesAmount, true), ScriptTransfer(i.caller, sharesAmount, lpInfo.id)]
133+ }
134+ else throw("Strict value is not equal to itself.")
135+ }
111136
112137
113138
114139 @Callable(i)
115-func submitGetRequest () = nil
140+func submitGetRequest () = {
141+ let pmt = value(i.payments[0])
142+ let lp = value(pmt.assetId)
143+ let lpId = toBase58String(lp)
144+ let userAddress = toString(i.caller)
145+ let baseAssetId = value(getString(keyLPIdToAssetId(lpId)))
146+ let shares = pmt.amount
147+ let checks = [if ((size(i.payments) == 1))
148+ then true
149+ else throwErr("only one payment must be attached"), if (valueOrElse(getBoolean(keyCreated(baseAssetId)), false))
150+ then true
151+ else throwErr("attached payment asset must be registered in the contract"), if ((shares > 0))
152+ then true
153+ else throwErr("positive amount to withdrawal required")]
154+ if ((checks == checks))
155+ then {
156+ let pendingWithdrawals = valueOrElse(getInteger(keyPendingWithdrawals(baseAssetId)), 0)
157+ let tvl = valueOrElse(getInteger(keyTVL(baseAssetId)), 0)
158+ let lpInfo = value(assetInfo(lp))
159+ let decimals = lpInfo.decimals
160+ let withdrawalAmount = ((shares * tvl) / lpInfo.quantity)
161+[Burn(lp, shares), IntegerEntry(keyPendingWithdrawals(baseAssetId), (pendingWithdrawals + withdrawalAmount)), IntegerEntry(keyMappingsUserToWithdrawal(baseAssetId, userAddress, toBase58String(i.transactionId)), withdrawalAmount)]
162+ }
163+ else throw("Strict value is not equal to itself.")
164+ }
116165
117166
118167
119168 @Callable(i)
120-func executeGetRequest (assetId,userAddress,submitTxId) = nil
169+func executeGetRequest (assetId,userAddress,submitTxId) = {
170+ let withdrawalAmount = valueOrElse(getInteger(keyMappingsUserToWithdrawal(assetId, userAddress, submitTxId)), 0)
171+ let checks = [if (valueOrElse(getBoolean(keyCreated(assetId)), false))
172+ then true
173+ else throwErr("asset must be registered in the contract"), if ((withdrawalAmount > 0))
174+ then true
175+ else throwErr("no corresponding withdrawal request")]
176+ if ((checks == checks))
177+ then {
178+ let pendingWithdrawals = valueOrElse(getInteger(keyPendingWithdrawals(assetId)), 0)
179+[ScriptTransfer(addressFromStringValue(userAddress), withdrawalAmount, fromBase58String(assetId)), DeleteEntry(keyMappingsUserToWithdrawal(assetId, userAddress, submitTxId)), IntegerEntry(keyPendingWithdrawals(assetId), (pendingWithdrawals - withdrawalAmount))]
180+ }
181+ else throw("Strict value is not equal to itself.")
182+ }
121183
122184
123185
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let EMPTY = ""
77
88 let contract = "lp_staking_v2: "
99
1010 func keyManagerPublicKey () = makeString(["%s", "managerPublicKey"], SEP)
1111
1212
1313 func keyPendingManagerPublicKey () = makeString(["%s", "pendingManagerPublicKey"], SEP)
1414
1515
1616 func keyTVL (assetId) = makeString(["%s%s", "tvl", assetId], SEP)
1717
1818
1919 func keyTVLHistory (assetId,height) = makeString(["%s%s%d", "tvlHistory", assetId, toString(height)], SEP)
2020
2121
2222 func keyPendingWithdrawals (assetId) = makeString(["%s%s", "pendingWithdrawals", assetId], SEP)
2323
2424
2525 func keyDelayInBlocks (assetId) = makeString(["%s%s", "delayInBlocks", assetId], SEP)
2626
2727
2828 func keyCreated (assetId) = makeString(["%s%s", "created", assetId], SEP)
2929
3030
3131 func keyAssetIdToLPId (assetId) = makeString(["%s%s", "assetIdToLPId", assetId], SEP)
3232
3333
3434 func keyLPIdToAssetId (lpId) = makeString(["%s%s", "lpIdToAssetId", lpId], SEP)
3535
3636
3737 func keyProxyAddress (assetId) = makeString(["%s%s", "proxyAddress", assetId], SEP)
38+
39+
40+func keyMappingsUserToWithdrawal (assetId,userAddress,txId) = makeString(["%s%s%s%s", "userWithdrawalAmount", assetId, userAddress, txId], SEP)
3841
3942
4043 func keyAssetsStoreContract () = makeString(["%s", "assetsStoreContract"], SEP)
4144
4245
4346 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
4447 case s: String =>
4548 fromBase58String(s)
4649 case _: Unit =>
4750 unit
4851 case _ =>
4952 throw("Match error")
5053 }
5154
5255
5356 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
5457 case s: String =>
5558 fromBase58String(s)
5659 case _: Unit =>
5760 unit
5861 case _ =>
5962 throw("Match error")
6063 }
6164
6265
6366 func throwErr (msg) = throw((contract + msg))
6467
6568
6669 func mustManager (i) = {
6770 let pd = throwErr("permission denied")
6871 match managerPublicKeyOrUnit() {
6972 case pk: ByteVector =>
7073 if ((i.callerPublicKey == pk))
7174 then true
7275 else pd
7376 case _: Unit =>
7477 if ((i.caller == this))
7578 then true
7679 else pd
7780 case _ =>
7881 throw("Match error")
7982 }
8083 }
8184
8285
8386 func assetsStoreContract () = addressFromStringValue(value(getString(keyAssetsStoreContract())))
8487
8588
8689 func mustProxyAddress (i,assetId) = {
8790 let isProxy = (toString(i.caller) == valueOrElse(getString(keyProxyAddress(assetId)), EMPTY))
8891 if (isProxy)
8992 then true
9093 else {
9194 let checkCaller = mustManager(i)
9295 if ((checkCaller == checkCaller))
9396 then true
9497 else throw("Strict value is not equal to itself.")
9598 }
9699 }
97100
98101
99102 @Callable(i)
100103 func constructor (assetsStoreContract) = {
101104 let checkCaller = mustManager(i)
102105 if ((checkCaller == checkCaller))
103106 then [StringEntry(keyAssetsStoreContract(), assetsStoreContract)]
104107 else throw("Strict value is not equal to itself.")
105108 }
106109
107110
108111
109112 @Callable(i)
110-func put () = nil
113+func put () = {
114+ let pmt = value(i.payments[0])
115+ let asset = value(pmt.assetId)
116+ let assetId = toBase58String(asset)
117+ let checks = [if ((size(i.payments) == 1))
118+ then true
119+ else throwErr("only one payment must be attached"), if (valueOrElse(getBoolean(keyCreated(assetId)), false))
120+ then true
121+ else throwErr("attached payment asset must be registered in the contract"), if ((pmt.amount > 0))
122+ then true
123+ else throwErr("positive amount required")]
124+ if ((checks == checks))
125+ then {
126+ let tvl = valueOrElse(getInteger(keyTVL(assetId)), 0)
127+ let lpId = value(getString(keyAssetIdToLPId(assetId)))
128+ let lpInfo = value(assetInfo(fromBase58String(assetId)))
129+ let sharesAmount = if ((tvl > 0))
130+ then ((pmt.amount * lpInfo.quantity) / tvl)
131+ else pmt.amount
132+[Reissue(lpInfo.id, sharesAmount, true), ScriptTransfer(i.caller, sharesAmount, lpInfo.id)]
133+ }
134+ else throw("Strict value is not equal to itself.")
135+ }
111136
112137
113138
114139 @Callable(i)
115-func submitGetRequest () = nil
140+func submitGetRequest () = {
141+ let pmt = value(i.payments[0])
142+ let lp = value(pmt.assetId)
143+ let lpId = toBase58String(lp)
144+ let userAddress = toString(i.caller)
145+ let baseAssetId = value(getString(keyLPIdToAssetId(lpId)))
146+ let shares = pmt.amount
147+ let checks = [if ((size(i.payments) == 1))
148+ then true
149+ else throwErr("only one payment must be attached"), if (valueOrElse(getBoolean(keyCreated(baseAssetId)), false))
150+ then true
151+ else throwErr("attached payment asset must be registered in the contract"), if ((shares > 0))
152+ then true
153+ else throwErr("positive amount to withdrawal required")]
154+ if ((checks == checks))
155+ then {
156+ let pendingWithdrawals = valueOrElse(getInteger(keyPendingWithdrawals(baseAssetId)), 0)
157+ let tvl = valueOrElse(getInteger(keyTVL(baseAssetId)), 0)
158+ let lpInfo = value(assetInfo(lp))
159+ let decimals = lpInfo.decimals
160+ let withdrawalAmount = ((shares * tvl) / lpInfo.quantity)
161+[Burn(lp, shares), IntegerEntry(keyPendingWithdrawals(baseAssetId), (pendingWithdrawals + withdrawalAmount)), IntegerEntry(keyMappingsUserToWithdrawal(baseAssetId, userAddress, toBase58String(i.transactionId)), withdrawalAmount)]
162+ }
163+ else throw("Strict value is not equal to itself.")
164+ }
116165
117166
118167
119168 @Callable(i)
120-func executeGetRequest (assetId,userAddress,submitTxId) = nil
169+func executeGetRequest (assetId,userAddress,submitTxId) = {
170+ let withdrawalAmount = valueOrElse(getInteger(keyMappingsUserToWithdrawal(assetId, userAddress, submitTxId)), 0)
171+ let checks = [if (valueOrElse(getBoolean(keyCreated(assetId)), false))
172+ then true
173+ else throwErr("asset must be registered in the contract"), if ((withdrawalAmount > 0))
174+ then true
175+ else throwErr("no corresponding withdrawal request")]
176+ if ((checks == checks))
177+ then {
178+ let pendingWithdrawals = valueOrElse(getInteger(keyPendingWithdrawals(assetId)), 0)
179+[ScriptTransfer(addressFromStringValue(userAddress), withdrawalAmount, fromBase58String(assetId)), DeleteEntry(keyMappingsUserToWithdrawal(assetId, userAddress, submitTxId)), IntegerEntry(keyPendingWithdrawals(assetId), (pendingWithdrawals - withdrawalAmount))]
180+ }
181+ else throw("Strict value is not equal to itself.")
182+ }
121183
122184
123185
124186 @Callable(i)
125187 func registerAsset (assetId,lpName,lpDescription,lpLogo,delayInBlocks,proxyAddress) = {
126188 let checks = [mustManager(i), if ((delayInBlocks >= 0))
127189 then true
128190 else throwErr("invalid delayInBlocks"), if ((addressFromString(proxyAddress) != unit))
129191 then true
130192 else throwErr("invalid proxyAddress"), if ((valueOrElse(getBoolean(keyCreated(assetId)), false) == false))
131193 then true
132194 else throwErr("asset already registered")]
133195 if ((checks == checks))
134196 then {
135197 let decimals = value(assetInfo(fromBase58String(assetId))).decimals
136198 let lpIssue = Issue(lpName, lpDescription, 1, decimals, true)
137199 let lp = calculateAssetId(lpIssue)
138200 let lpId = toBase58String(lp)
139201 let createOrUpdate = invoke(assetsStoreContract(), "createOrUpdate", [lpId, lpLogo, false], nil)
140202 if ((createOrUpdate == createOrUpdate))
141203 then {
142204 let addLabel = invoke(assetsStoreContract(), "addLabel", [lpId, "DEFI"], nil)
143205 if ((addLabel == addLabel))
144206 then [BooleanEntry(keyCreated(assetId), true), IntegerEntry(keyTVL(assetId), 0), IntegerEntry(keyTVLHistory(assetId, height), 0), IntegerEntry(keyDelayInBlocks(assetId), delayInBlocks), StringEntry(keyLPIdToAssetId(lpId), assetId), StringEntry(keyAssetIdToLPId(assetId), lpId), StringEntry(keyProxyAddress(assetId), proxyAddress), lpIssue, Burn(lp, 1)]
145207 else throw("Strict value is not equal to itself.")
146208 }
147209 else throw("Strict value is not equal to itself.")
148210 }
149211 else throw("Strict value is not equal to itself.")
150212 }
151213
152214
153215
154216 @Callable(i)
155217 func topUpBalance () = {
156218 let pmt = valueOrErrorMessage(i.payments[0], (contract + "payment must be attached"))
157219 let assetId = toBase58String(value(pmt.assetId))
158220 let amount = pmt.amount
159221 let pendingWithdrawals = valueOrElse(getInteger(keyPendingWithdrawals(assetId)), 0)
160222 let checks = [mustProxyAddress(i, assetId), if ((size(i.payments) == 1))
161223 then true
162224 else throwErr("only one payment must be attached"), if (valueOrElse(getBoolean(keyCreated(assetId)), false))
163225 then true
164226 else throwErr("attached payment asset must be registered in the contract"), if ((pendingWithdrawals != 0))
165227 then true
166228 else throwErr("zero pendingWithdrawals, nothing to top up"), if ((pendingWithdrawals >= amount))
167229 then true
168230 else "amount to top up must be less or equal than pendingWithdrawals"]
169231 if ((checks == checks))
170232 then [IntegerEntry(keyPendingWithdrawals(assetId), (pendingWithdrawals - amount))]
171233 else throw("Strict value is not equal to itself.")
172234 }
173235
174236
175237
176238 @Callable(i)
177239 func setTVL (assetId,newTVL) = {
178240 let checkCaller = mustProxyAddress(i, assetId)
179241 if ((checkCaller == checkCaller))
180242 then [IntegerEntry(keyTVL(assetId), newTVL), IntegerEntry(keyTVLHistory(assetId, height), newTVL)]
181243 else throw("Strict value is not equal to itself.")
182244 }
183245
184246
185247
186248 @Callable(i)
187249 func setManager (pendingManagerPublicKey) = {
188250 let checkCaller = mustManager(i)
189251 if ((checkCaller == checkCaller))
190252 then {
191253 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
192254 if ((checkManagerPublicKey == checkManagerPublicKey))
193255 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
194256 else throw("Strict value is not equal to itself.")
195257 }
196258 else throw("Strict value is not equal to itself.")
197259 }
198260
199261
200262
201263 @Callable(i)
202264 func confirmManager () = {
203265 let pm = pendingManagerPublicKeyOrUnit()
204266 let hasPM = if (isDefined(pm))
205267 then true
206268 else throwErr("no pending manager")
207269 if ((hasPM == hasPM))
208270 then {
209271 let checkPM = if ((i.callerPublicKey == value(pm)))
210272 then true
211273 else throwErr("you are not pending manager")
212274 if ((checkPM == checkPM))
213275 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
214276 else throw("Strict value is not equal to itself.")
215277 }
216278 else throw("Strict value is not equal to itself.")
217279 }
218280
219281
220282 @Verifier(tx)
221283 func verify () = {
222284 let targetPublicKey = match managerPublicKeyOrUnit() {
223285 case pk: ByteVector =>
224286 pk
225287 case _: Unit =>
226288 tx.senderPublicKey
227289 case _ =>
228290 throw("Match error")
229291 }
230292 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
231293 }
232294

github/deemru/w8io/c3f4982 
35.21 ms