tx · 8jn2QMJi36FZVDDyPQP9daeV5UY8WcsUN6UycpmTZpQ

3N61Cvq5XcnPk9rxpy2Rnp3bSr4syNGUJph:  -0.01400000 Waves

2021.12.15 22:12 [1835771] smart account 3N61Cvq5XcnPk9rxpy2Rnp3bSr4syNGUJph > SELF 0.00000000 Waves

{ "type": 13, "id": "8jn2QMJi36FZVDDyPQP9daeV5UY8WcsUN6UycpmTZpQ", "fee": 1400000, "feeAssetId": null, "timestamp": 1639595556480, "version": 2, "chainId": 84, "sender": "3N61Cvq5XcnPk9rxpy2Rnp3bSr4syNGUJph", "senderPublicKey": "G7cNXePvAHUHmZfXa1eHnvFeH6DuykPC5wm9v9djTKgD", "proofs": [ "5qDDPgQ85STS2qxwgz32UsYeBYKAJo3UsFXPTbZHDjcrqQJXgXAFWarRMDizudsdP716brPWoJnf8C1JQ9cTHeX1" ], "script": "base64:AAIFAAAAAAAAB/8IAhIGCgQYGBgREgMKARgSBgoECAEYERIGCgQICAEBEgASAwoBCBIDCgEIEgMKAQgSBAoCGBQaIwoBQRIeZ2VuZXJhdGVQb29sTGlxdWlkaXR5VG9rZW5LZXlzGg4KAUISCXBvb2xJbmRleBoTCgFDEg5saXF1aWRpdHlUb2tlbhohCgFEEhxnZW5lcmF0ZVBvb2xTZXJ2aWNlVG9rZW5LZXlzGioKAUUSJWdlbmVyYXRlUG9vbExpcXVpZGl0eVRva2VuRGVjaW1hbEtleXMaGwoBRhIWZ2VuZXJhdGVQb29sQWN0aXZlS2V5cxoUCgFHEg9wb29sQmFsYW5jZUtleXMaBwoBSBICJGwaBwoBSRICJHMaCgoBShIFJGFjYzAaCgoBSxIFJGYwXzEaBwoBTBICJGEaBwoBTRICJGkaCgoBThIFJGYwXzIaGwoBTxIWcG9vbExpcXVpZGl0eVRva2VuS2V5cxoKCgFQEgUkZjFfMRoKCgFREgUkZjFfMhoZCgFSEhRwb29sU2VydmljZVRva2VuS2V5cxoKCgFTEgUkZjJfMRoKCgFUEgUkZjJfMhoiCgFVEh1wb29sTGlxdWlkaXR5VG9rZW5EZWNpbWFsS2V5cxoKCgFWEgUkZjNfMRoKCgFXEgUkZjNfMhoTCgFYEg5wb29sQWN0aXZlS2V5cxoKCgFZEgUkZjRfMRoKCgFaEgUkZjRfMhoPCgFhEgpkZXBvc2l0RmVlGhMKAmFBEg1wb29sQW1vdW50S2V5GhEKAmFCEgt1c2VyQWRkcmVzcxoXCgJhQxIRdXNlclBvb2xBbW91bnRLZXkaGwoCYUQSFWxpcXVpZHV0eUFzc2V0QWRkcmVzcxobCgJhRRIVbGlxdWlkaXR5VG9rZW5EZWNpbWFsGgsKAmFGEgVhc3NldBoQCgJhRxIKcG9vbEFtb3VudBoQCgJhSBIKdXNlckFtb3VudBoTCgJhSRINbmV3UG9vbEFtb3VudBoaCgJhShIUdXNlckFtb3VudFdpdGhvdXRGZWUaCQoCYUsSA2ZlZRoXCgJhTBIRbmV3VXNlclBvb2xBbW91bnQaEwoCYU0SDWxvY2tUb2tlbnNLZXkaFgoCYU4SEGFtb3VudFdpdGhvdXRGZWUaEwoCYU8SDXVzZXJSZXdhcmRLZXkaEAoCYVASCnVzZXJSZXdhcmQaDgoCYVESCHN0YXR1c2VzGgwKAmFSEgZzdGF0dXMaCAoCYVMSAnR4GgwKAmFUEgZ2ZXJpZnkaCQoCYVUSA2ludhoVCgJhVhIPbG9ja1NoYXJlVG9rZW5zGhEKAmFXEgtkQXBwQWRkcmVzcxoNCgJhWBIHJG1hdGNoMRoKCgJhWRIEZEFwcBoTCgJhWhINcG9vbEZ1bmN0aW9ucxoNCgJhYRIHcmVjb3JkcxoaCgJhYhIUZ2VuZXJhdGVEZWxldGluZ0tleXMaDAoCYWMSBnJlY29yZBoQCgJhZBIKZGVsZXRlS2V5cxoRCgJhZRILdG90YWxSZXdhcmQaDQoCYWYSB3dhbGxldHMaEgoCYWcSDHJld2FyZFZhbHVlcxoVCgJhaBIPZ2VuZXJhdGVSZWNvcmRzGgwKAmFpEgZ3YWxsZXQaEQoCYWoSC3dhbGxldEluZGV4GhEKAmFrEgtyZXdhcmRWYWx1ZRoPCgJhbBIJcmV3YXJkS2V5GhgKAmFtEhJ1c2VyUHJldmlvdXNSZXdhcmQaCQoCYW4SA2ludBoTCgJhbxINdXNlck5ld1Jld2FyZBoNCgJhcBIHcmV3YXJkcxoWCgJhcRIQZEFwcEFzc2V0QWRkcmVzcxoKCgJhchIEbmFtZRoRCgJhcxILZGVzY3JpcHRpb24aDgoCYXQSCHF1YW50aXR5Gg4KAmF1EghkZWNpbWFscxoICgJhdhICYTgaDAoCYXcSBmFtb3VudBoNCgJheBIHYXNzZXRJZBoTCgJheRINYXNzZXRJZFN0cmluZxoICgJhehICaWQaEgoBYhINY29udHJvbGxlckZlZRoTCgJiYRINc2lnbmVkQnlBZG1pbhoQCgJiYhIKYWRtMVNpZ25lZBoQCgJiYxIKYWRtMlNpZ25lZBoQCgJiZBIKYWRtM1NpZ25lZBoQCgFjEgtwbGF0Zm9ybUZlZRoRCgFkEgxhZG1pblB1YktleTEaEQoBZRIMYWRtaW5QdWJLZXkyGhEKAWYSDGFkbWluUHViS2V5MxoWCgFnEhFnb3Zlcm1hbmNlQWRkcmVzcxoTCgFoEg5mYXJtaW5nQWRkcmVzcxoQCgFpEgtzd29wRmlQb29scxoUCgFqEg9zd29wRmlGdW5jdGlvbnMaEQoBaxIMaXNQb29sQWN0aXZlGgkKAWwSBHBvb2wa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AAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACBQAAAAFKAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAGAAAAAAAAAAAHAAAAAAAAAAAIAAAAAAAAAAAJAAAAAAAAAAAKAAAAAAAAAAALAAAAAAAAAAAMAAAAAAAAAAANAAAAAAAAAAAOAAAAAAAAAAAPAAAAAAAAAAAQAAAAAAAAAAARAAAAAAAAAAASAAAAAAAAAAATAAAAAAAAAAAUAAAAAAAAAAAVAAAAAAAAAAAWAAAAAAAAAAAXAAAAAAAAAAAYAAAAAAAAAAAZAAAAAAAAAAAaAAAAAAAAAAAbAAAAAAAAAAAcAAAAAAAAAAAdAAAAAAAAAAAeAAAAAAAAAAAfAAAAAAAAAAAgAAAAAAAAAAAhAAAAAAAAAAAiAAAAAAAAAAAjAAAAAAAAAAAkAAAA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AUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIFAAAAAUoAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoAAAAAAAAAAAsAAAAAAAAAAAwAAAAAAAAAAA0AAAAAAAAAAA4AAAAAAAAAAA8AAAAAAAAAABAAAAAAAAAAABEAAAAAAAAAABIAAAAAAAAAABMAAAAAAAAAABQAAAAAAAAAABUAAAAAAAAAABYAAAAAAAAAABcAAAAAAAAAABgAAAAAAAAAABkAAAAAAAAAABoAAAAAAAAAABsAAAAAAAAAABwAAAAAAAAAAB0AAAAAAAAAAB4AAAAAAAAAAB8AAAAAAAAAACAAAAAAAAAAACEAAAAAAAAAACIAAAAAAAAAACMAAAAAAAAAACQAAAAAAAAAACUAAAAAAAAAACYAAAAAAAAAACcAAAAAAAAAACgAAAAAAAAAACkAAAAA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AAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACCQEAAAABSwAAAAIJAQAAAAFLAAAAAgkBAAAAAUsAAAACBQAAAAFKAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAGAAAAAAAAAAAHAAAAAAAAAAAIAAAAAAAAAAAJAAAAAAAAAAAKAAAAAAAAAAALAAAAAAAAAAAMAAAAAAAAAAANAAAAAAAAAAAOAAAAAAAAAAAPAAAAAAAAAAAQAAAAAAAAAAARAAAAAAAAAAASAAAAAAAAAAATAAAAAAAAAAAUAAAAAAAAAAAVAAAAAAAAAAAWAAAAAAAAAAAXAAAAAAAAAAAYAAAAAAAAAAAZAAAAAAAAAAAaAAAAAAAAAAAbAAAAAAAAAAAcAAAAAAAAAAAdAAAAAAAAAAAeAAAAAAAAAAAfAAAAAAAAAAAgAAAAAAAAAAAhAAAAAAAAAAAiAAAAAAAAAAAjAAAAAAAA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", "height": 1835771, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 26JwJwPp4ZdB4ztaGbVeMgmENzZtkP51PRtnBtBKi25T Next: FcE25x1ocrxWJNfQ2oDbchU6pb8YqTCGzxYtVKqGb814 Diff:
OldNewDifferences
99
1010 let adminPubKey1 = base58'68Po1k24uP6goKr7RDmXPg4QkMiKuyTMEirao14rif8s'
1111
12-let adminPubKey2 = base58'68Po1k24uP6goKr7RDmXPg4QkMiKuyTMEirao14rif8s'
12+let adminPubKey2 = base58'Bze4aurT9WmLgBT6swA9CajaZFtUwhtwCri6XGAjnAkt'
1313
1414 let adminPubKey3 = base58'ALsqwPqiUP3bVbM7grozc1Y5oHVBAGKqACRJ5J8RXceC'
1515
1616 let govermanceAddress = Address(base58'3N7ExjwfofPYTvNBv2zqtAtLcMxqjTxS7iL')
17+
18+let farmingAddress = Address(base58'3P73HDkPqG15nLXevjCbmXtazHYTZbpPoPw')
19+
20+let swopFiPools = ["3PPH7x7iqobW5ziyiRCic19rQqKr6nPYaK1"]
21+
22+let swopFiFunctions = ["replenishWithTwoTokens", "exchange"]
1723
1824 func isPoolActive (pool) = {
1925 let kActive = (pool + "_active")
346352 else throw("Only admin can call this function")
347353
348354
349-@Verifier(b6)
350-func b7 () = sigVerify(b6.bodyBytes, b6.proofs[0], b6.senderPublicKey)
355+@Verifier(tx)
356+func verify () = match tx {
357+ case inv: InvokeScriptTransaction =>
358+ let lockShareTokens = if ((inv.dApp == farmingAddress))
359+ then if ((inv.function == "lockShareTokens"))
360+ then true
361+ else (inv.function == "claim")
362+ else false
363+ let dAppAddress = match inv.dApp {
364+ case dApp: Address =>
365+ toString(dApp)
366+ case _ =>
367+ throw("Transaction must have only address")
368+ }
369+ let poolFunctions = if (containsElement(swopFiPools, dAppAddress))
370+ then containsElement(swopFiFunctions, inv.function)
371+ else false
372+ let signedByAdmin = if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
373+ then true
374+ else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
375+ then true
376+ else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3)
377+ if (if (lockShareTokens)
378+ then true
379+ else poolFunctions)
380+ then signedByAdmin
381+ else false
382+ case _ =>
383+ let adm1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
384+ then 1
385+ else 0
386+ let adm2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
387+ then 1
388+ else 0
389+ let adm3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
390+ then 1
391+ else 0
392+ (((adm1Signed + adm2Signed) + adm3Signed) >= 2)
393+}
351394
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let depositFee = 1000
55
66 let controllerFee = 10000
77
88 let platformFee = 10000
99
1010 let adminPubKey1 = base58'68Po1k24uP6goKr7RDmXPg4QkMiKuyTMEirao14rif8s'
1111
12-let adminPubKey2 = base58'68Po1k24uP6goKr7RDmXPg4QkMiKuyTMEirao14rif8s'
12+let adminPubKey2 = base58'Bze4aurT9WmLgBT6swA9CajaZFtUwhtwCri6XGAjnAkt'
1313
1414 let adminPubKey3 = base58'ALsqwPqiUP3bVbM7grozc1Y5oHVBAGKqACRJ5J8RXceC'
1515
1616 let govermanceAddress = Address(base58'3N7ExjwfofPYTvNBv2zqtAtLcMxqjTxS7iL')
17+
18+let farmingAddress = Address(base58'3P73HDkPqG15nLXevjCbmXtazHYTZbpPoPw')
19+
20+let swopFiPools = ["3PPH7x7iqobW5ziyiRCic19rQqKr6nPYaK1"]
21+
22+let swopFiFunctions = ["replenishWithTwoTokens", "exchange"]
1723
1824 func isPoolActive (pool) = {
1925 let kActive = (pool + "_active")
2026 let isActive = getBooleanValue(this, kActive)
2127 isActive
2228 }
2329
2430
2531 func getDAppAssetAddress (pool) = match getString((pool + "_service_token")) {
2632 case string: String =>
2733 string
2834 case nothing =>
2935 throw("You try to deposit on unsupported pool")
3036 }
3137
3238
3339 func getLiquidutyAssetAddress (pool) = match getString((pool + "_liquidity_token")) {
3440 case string: String =>
3541 string
3642 case nothing =>
3743 throw("You try to withdraw from unsupported pool")
3844 }
3945
4046
4147 @Callable(i)
4248 func addPools (pools,liquidityTokens,serviceTokens,liquidityTokenDecimals) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
4349 then {
4450 func generatePoolKeys (accumulated,pool) = IntegerEntry((pool + "_asset_balance"), 0) :: accumulated
4551
4652 func generatePoolLiquidityTokenKeys (accumulated,pool) = {
4753 let poolIndex = value(indexOf(pools, pool))
4854 let liquidityToken = liquidityTokens[poolIndex]
4955 StringEntry((pool + "_liquidity_token"), liquidityToken) :: accumulated
5056 }
5157
5258 func generatePoolServiceTokenKeys (accumulated,pool) = {
5359 let poolIndex = value(indexOf(pools, pool))
5460 let liquidityToken = serviceTokens[poolIndex]
5561 StringEntry((pool + "_service_token"), liquidityToken) :: accumulated
5662 }
5763
5864 func generatePoolLiquidityTokenDecimalKeys (accumulated,pool) = {
5965 let poolIndex = value(indexOf(pools, pool))
6066 let liquidityToken = liquidityTokenDecimals[poolIndex]
6167 IntegerEntry((pool + "_service_token_decimal"), liquidityToken) :: accumulated
6268 }
6369
6470 func generatePoolActiveKeys (accumulated,pool) = BooleanEntry((pool + "_active"), true) :: accumulated
6571
6672 let poolBalanceKeys = {
6773 let $l = pools
6874 let $s = size($l)
6975 let $acc0 = nil
7076 func $f0_1 ($a,$i) = if (($i >= $s))
7177 then $a
7278 else generatePoolKeys($a, $l[$i])
7379
7480 func $f0_2 ($a,$i) = if (($i >= $s))
7581 then $a
7682 else throw("List size exceeds 20")
7783
7884 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
7985 }
8086 let poolLiquidityTokenKeys = {
8187 let $l = pools
8288 let $s = size($l)
8389 let $acc0 = nil
8490 func $f1_1 ($a,$i) = if (($i >= $s))
8591 then $a
8692 else generatePoolLiquidityTokenKeys($a, $l[$i])
8793
8894 func $f1_2 ($a,$i) = if (($i >= $s))
8995 then $a
9096 else throw("List size exceeds 20")
9197
9298 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
9399 }
94100 let poolServiceTokenKeys = {
95101 let $l = pools
96102 let $s = size($l)
97103 let $acc0 = nil
98104 func $f2_1 ($a,$i) = if (($i >= $s))
99105 then $a
100106 else generatePoolServiceTokenKeys($a, $l[$i])
101107
102108 func $f2_2 ($a,$i) = if (($i >= $s))
103109 then $a
104110 else throw("List size exceeds 20")
105111
106112 $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
107113 }
108114 let poolLiquidityTokenDecimalKeys = {
109115 let $l = pools
110116 let $s = size($l)
111117 let $acc0 = nil
112118 func $f3_1 ($a,$i) = if (($i >= $s))
113119 then $a
114120 else generatePoolLiquidityTokenDecimalKeys($a, $l[$i])
115121
116122 func $f3_2 ($a,$i) = if (($i >= $s))
117123 then $a
118124 else throw("List size exceeds 20")
119125
120126 $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
121127 }
122128 let poolActiveKeys = {
123129 let $l = pools
124130 let $s = size($l)
125131 let $acc0 = nil
126132 func $f4_1 ($a,$i) = if (($i >= $s))
127133 then $a
128134 else generatePoolActiveKeys($a, $l[$i])
129135
130136 func $f4_2 ($a,$i) = if (($i >= $s))
131137 then $a
132138 else throw("List size exceeds 20")
133139
134140 $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
135141 }
136142 ((((poolBalanceKeys ++ poolLiquidityTokenKeys) ++ poolServiceTokenKeys) ++ poolLiquidityTokenDecimalKeys) ++ poolActiveKeys)
137143 }
138144 else throw("Only admin can call this function")
139145
140146
141147
142148 @Callable(i)
143149 func deleteDepositLockRecords (records) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
144150 then {
145151 func generateDeletingKeys (accumulated,record) = DeleteEntry((record + "_locked")) :: accumulated
146152
147153 let deleteKeys = {
148154 let $l = records
149155 let $s = size($l)
150156 let $acc0 = nil
151157 func $f0_1 ($a,$i) = if (($i >= $s))
152158 then $a
153159 else generateDeletingKeys($a, $l[$i])
154160
155161 func $f0_2 ($a,$i) = if (($i >= $s))
156162 then $a
157163 else throw("List size exceeds 100")
158164
159165 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
160166 }
161167 deleteKeys
162168 }
163169 else throw("Only admin can call this function")
164170
165171
166172
167173 @Callable(i)
168174 func distributionReward (pool,totalReward,wallets,rewardValues) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
169175 then {
170176 func generateRecords (accumulated,wallet) = {
171177 let walletIndex = value(indexOf(wallets, wallet))
172178 let rewardValue = rewardValues[walletIndex]
173179 let rewardKey = (((pool + "_") + wallet) + "_current_reward")
174180 let userPreviousReward = match getInteger(rewardKey) {
175181 case int: Int =>
176182 int
177183 case nothing =>
178184 0
179185 }
180186 let userNewReward = (userPreviousReward + rewardValue)
181187 IntegerEntry(rewardKey, userNewReward) :: accumulated
182188 }
183189
184190 let rewards = {
185191 let $l = wallets
186192 let $s = size($l)
187193 let $acc0 = nil
188194 func $f0_1 ($a,$i) = if (($i >= $s))
189195 then $a
190196 else generateRecords($a, $l[$i])
191197
192198 func $f0_2 ($a,$i) = if (($i >= $s))
193199 then $a
194200 else throw("List size exceeds 87")
195201
196202 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87)
197203 }
198204 let dAppAssetAddress = getDAppAssetAddress(pool)
199205 Reissue(fromBase58String(dAppAssetAddress), totalReward, true) :: rewards
200206 }
201207 else throw("Only admin can call this function")
202208
203209
204210
205211 @Callable(i)
206212 func issueToken (name,description,quantity,decimals) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
207213 then [Issue(name, description, quantity, decimals, true, unit, 0)]
208214 else throw("Only admin can call this function")
209215
210216
211217
212218 @Callable(a8)
213219 func call () = [DeleteEntry("3PPH7x7iqobW5ziyiRCic19rQqKr6nPYaK1_3N5viYFhnu1ew4FRZ9nujme9edr918FkT1a_current_reward")]
214220
215221
216222
217223 @Callable(i)
218224 func deposit (pool) = if ((size(i.payments) != 1))
219225 then throw("One attached payment expected")
220226 else {
221227 let amount = i.payments[0].amount
222228 let assetId = i.payments[0].assetId
223229 let assetIdString = match assetId {
224230 case id: ByteVector =>
225231 toBase58String(id)
226232 case _ =>
227233 throw("Match error")
228234 }
229235 if ((0 >= amount))
230236 then throw(("Deposit amount must be positive. Actual: " + toString(amount)))
231237 else {
232238 let poolAmountKey = (pool + "_asset_balance")
233239 let userAddress = toString(i.caller)
234240 let userPoolAmountKey = (((pool + "_") + userAddress) + "_asset_balance")
235241 let dAppAssetAddress = getDAppAssetAddress(pool)
236242 let liquidutyAssetAddress = match getString((pool + "_liquidity_token")) {
237243 case string: String =>
238244 string
239245 case nothing =>
240246 throw("You try to deposit on unsupported pool")
241247 }
242248 if (isPoolActive(pool))
243249 then {
244250 let liquidityTokenDecimal = match assetInfo(fromBase58String(liquidutyAssetAddress)) {
245251 case asset: Asset =>
246252 asset.decimals
247253 case _ =>
248254 throw("Can't find asset")
249255 }
250256 if ((liquidutyAssetAddress != assetIdString))
251257 then throw("You attached wrong liquidity token from Swop.fi")
252258 else {
253259 let poolAmount = getIntegerValue(this, poolAmountKey)
254260 let userAmount = match getInteger(userPoolAmountKey) {
255261 case int: Int =>
256262 int
257263 case nothing =>
258264 0
259265 }
260266 let newPoolAmount = (poolAmount + amount)
261267 let userAmountWithoutFee = ((amount - fraction(amount, 1, depositFee, HALFUP)) - fraction(amount, 1, controllerFee, HALFUP))
262268 let fee = (amount - userAmountWithoutFee)
263269 let newUserPoolAmount = (userAmount + userAmountWithoutFee)
264270 let lockTokensKey = (((((pool + "_") + userAddress) + "_") + toBase58String(i.transactionId)) + "_locked")
265271 [Reissue(fromBase58String(dAppAssetAddress), userAmountWithoutFee, true), ScriptTransfer(i.caller, userAmountWithoutFee, fromBase58String(dAppAssetAddress)), ScriptTransfer(govermanceAddress, fee, fromBase58String(liquidutyAssetAddress)), IntegerEntry(lockTokensKey, userAmountWithoutFee), IntegerEntry(poolAmountKey, newPoolAmount), IntegerEntry(userPoolAmountKey, newUserPoolAmount)]
266272 }
267273 }
268274 else throw("Pool is not active!")
269275 }
270276 }
271277
272278
273279
274280 @Callable(i)
275281 func withdraw (pool) = if ((size(i.payments) != 1))
276282 then throw("One attached payment expected")
277283 else {
278284 let amount = i.payments[0].amount
279285 let assetId = i.payments[0].assetId
280286 let assetIdString = match assetId {
281287 case id: ByteVector =>
282288 toBase58String(id)
283289 case _ =>
284290 throw("Match error")
285291 }
286292 if ((0 >= amount))
287293 then throw(("Deposit amount must be positive. Actual: " + toString(amount)))
288294 else {
289295 let poolAmountKey = (pool + "_asset_balance")
290296 let userAddress = toString(i.caller)
291297 let userPoolAmountKey = (((pool + "_") + userAddress) + "_asset_balance")
292298 let dAppAssetAddress = getDAppAssetAddress(pool)
293299 let liquidutyAssetAddress = getLiquidutyAssetAddress(pool)
294300 let poolAmount = getIntegerValue(this, poolAmountKey)
295301 let amountWithoutFee = ((amount - fraction(amount, 1, platformFee, HALFUP)) - fraction(amount, 1, controllerFee, HALFUP))
296302 let newPoolAmount = (poolAmount - amountWithoutFee)
297303 let fee = (amount - amountWithoutFee)
298304 [Burn(fromBase58String(dAppAssetAddress), amountWithoutFee), ScriptTransfer(i.caller, amountWithoutFee, fromBase58String(liquidutyAssetAddress)), ScriptTransfer(govermanceAddress, fee, fromBase58String(liquidutyAssetAddress)), IntegerEntry(poolAmountKey, newPoolAmount)]
299305 }
300306 }
301307
302308
303309
304310 @Callable(i)
305311 func claimReward (pool) = {
306312 let userAddress = toString(i.caller)
307313 let userRewardKey = (((pool + "_") + userAddress) + "_current_reward")
308314 let userReward = match getInteger(userRewardKey) {
309315 case int: Int =>
310316 int
311317 case nothing =>
312318 throw("You have not any reward in this pool")
313319 }
314320 let dAppAssetAddress = getDAppAssetAddress(pool)
315321 let liquidutyAssetAddress = getLiquidutyAssetAddress(pool)
316322 [Burn(fromBase58String(dAppAssetAddress), userReward), ScriptTransfer(i.caller, userReward, fromBase58String(liquidutyAssetAddress)), IntegerEntry(userRewardKey, 0)]
317323 }
318324
319325
320326
321327 @Callable(i)
322328 func poolActivating (pools,statuses) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
323329 then {
324330 func generatePoolActiveKeys (accumulated,pool) = {
325331 let poolIndex = value(indexOf(pools, pool))
326332 let status = statuses[poolIndex]
327333 BooleanEntry((pool + "_active"), status) :: accumulated
328334 }
329335
330336 let poolActiveKeys = {
331337 let $l = pools
332338 let $s = size($l)
333339 let $acc0 = nil
334340 func $f0_1 ($a,$i) = if (($i >= $s))
335341 then $a
336342 else generatePoolActiveKeys($a, $l[$i])
337343
338344 func $f0_2 ($a,$i) = if (($i >= $s))
339345 then $a
340346 else throw("List size exceeds 100")
341347
342348 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
343349 }
344350 poolActiveKeys
345351 }
346352 else throw("Only admin can call this function")
347353
348354
349-@Verifier(b6)
350-func b7 () = sigVerify(b6.bodyBytes, b6.proofs[0], b6.senderPublicKey)
355+@Verifier(tx)
356+func verify () = match tx {
357+ case inv: InvokeScriptTransaction =>
358+ let lockShareTokens = if ((inv.dApp == farmingAddress))
359+ then if ((inv.function == "lockShareTokens"))
360+ then true
361+ else (inv.function == "claim")
362+ else false
363+ let dAppAddress = match inv.dApp {
364+ case dApp: Address =>
365+ toString(dApp)
366+ case _ =>
367+ throw("Transaction must have only address")
368+ }
369+ let poolFunctions = if (containsElement(swopFiPools, dAppAddress))
370+ then containsElement(swopFiFunctions, inv.function)
371+ else false
372+ let signedByAdmin = if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
373+ then true
374+ else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
375+ then true
376+ else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3)
377+ if (if (lockShareTokens)
378+ then true
379+ else poolFunctions)
380+ then signedByAdmin
381+ else false
382+ case _ =>
383+ let adm1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
384+ then 1
385+ else 0
386+ let adm2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
387+ then 1
388+ else 0
389+ let adm3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
390+ then 1
391+ else 0
392+ (((adm1Signed + adm2Signed) + adm3Signed) >= 2)
393+}
351394

github/deemru/w8io/169f3d6 
67.69 ms