tx · AxBXh8ZRy7Z3GjjfAtKtEJSVwMCA2frtNrGG9UMpoeU5

3MsMP2pb2p8MDd6Rxb7XEXqqwEhE8ATfyai:  -0.03000000 Waves

2023.02.03 13:40 [2433333] smart account 3MsMP2pb2p8MDd6Rxb7XEXqqwEhE8ATfyai > SELF 0.00000000 Waves

{ "type": 13, "id": "AxBXh8ZRy7Z3GjjfAtKtEJSVwMCA2frtNrGG9UMpoeU5", "fee": 3000000, "feeAssetId": null, "timestamp": 1675420858288, "version": 1, "sender": "3MsMP2pb2p8MDd6Rxb7XEXqqwEhE8ATfyai", "senderPublicKey": "2JEaBjtjvMoNGKZmL9QxYefa1VkMJM3vMW8rNvTs9R2H", "proofs": [ "53QCskMHEXDMze9fDwRV8qTyUd6g3iWSXTC38t35NZ5x4t2w1FvKoWXtmmmkJWYwiFepYA9u6qqGS8TSBvPSs1jb" ], "script": "base64:AAIFAAAAAAAAEt0IAhIECgIICBIDCgEIEgoKCAgICAgICAgBEgMKAQgSBgoECAgICBIECgIIGBIDCgEIEgQKAggYEgMKAQgSABIDCgEYEgoKCAgICAgIAQgIEgQKAggBEgMKAQESAwoBARIECgIIARIGCgQICAgIEgQKAggIEgQKAggIEgQKAggIEgMKAQgSAwoBCBIDCgEIEgMKAQgSAwoBCCIGU0NBTEU4IgVNVUxUOCIHU0NBTEUxOCIGTVVMVDE4Ig5QT09MV0VJR0hUTVVMVCIOR1dYdmlydHVhbFBPT0wiDGxhYmVsUG9vbHNMcCINZGVmYXVsdFNwcmVhZCIRZGVjaW1hbHNNdWx0UHJpY2UiA1NFUCIFRU1QVFkiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIhJpZHhJbnRlcm5hbEFzc2V0SWQiD2lkeFJlc3V0QWN0aW9ucyIgaWR4SWZBc3NldElkQ2FsY3VsYXRpb25QZXJmb3JtZWQiDmlkeFBvb2xBZGRyZXNzIg1pZHhQb29sU3RhdHVzIhBpZHhQb29sTFBBc3NldElkIg1pZHhBbXRBc3NldElkIg9pZHhQcmljZUFzc2V0SWQiDmlkeEFtdEFzc2V0RGNtIhBpZHhQcmljZUFzc2V0RGNtIg5pZHhJQW10QXNzZXRJZCIQaWR4SVByaWNlQXNzZXRJZCINaWR4TFBBc3NldERjbSILaWR4UG9vbFR5cGUiE3Bvb2xMYWJlbFd4RW1pc3Npb24iD3ZhbGlkUG9vbExhYmVscyIWa2V5QWxsb3dlZExwU2NyaXB0SGFzaCIca2V5QWxsb3dlZExwU3RhYmxlU2NyaXB0SGFzaCIha2V5QWxsb3dlZExwU3RhYmxlQWRkb25TY3JpcHRIYXNoIhBrZXlGYWN0b3J5Q29uZmlnIg9rZXlMcFRva2Vuc0xpc3QiEWtleVBvb2xTY3JpcHRIYXNoIg1rZXlNYXRjaGVyUHViIhhrZXlMZWdhY3lGYWN0b3J5Q29udHJhY3QiDmtleUxlZ2FjeVBvb2xzIhNrZXlNYW5hZ2VyUHVibGljS2V5IhprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleSIPa2V5QWRtaW5QdWJLZXlzIhZrZXlBc3NldHNTdG9yZUNvbnRyYWN0IhlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0Ig5rZXlQcmljZUFzc2V0cyIQa2V5UHJpY2VEZWNpbWFscyITa2V5QWxsUG9vbHNTaHV0ZG93biIWa2V5TmV4dEludGVybmFsQXNzZXRJZCIPa2V5UG9vbFRvV2VpZ2h0Igtwb29sQWRkcmVzcyIWa2V5UG9vbFRvV2VpZ2h0SGlzdG9yeSIDbnVtIh9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkIhFpbnRlcm5hbEJhc2VBc3NldCIfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZCIMYmFzZUFzc2V0U3RyIg1rZXlQb29sQ29uZmlnIhNhbW91bnRBc3NldEludGVybmFsIhJwcmljZUFzc2V0SW50ZXJuYWwiIWtleVBvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZCIOYXNzZXRzSW50ZXJuYWwiCyR0MDM2MzIzNjk0IiVrZXlBbGxQb29sc09uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkIh1rZXlNYXBwaW5nTHBBc3NldFRvUG9vbEFzc2V0cyIKbHBBc3NldFN0ciIda2V5TWFwcGluZ1Bvb2xBc3NldHNUb0xwYXNzZXQiGGludGVybmFsQW1vdW50QXNzZXRJZFN0ciIXaW50ZXJuYWxQcmljZUFzc2V0SWRTdHIiDWtleVBvb2xTcHJlYWQiKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzIhNwb29sQ29udHJhY3RBZGRyZXNzIilrZXlNYXBwaW5nUG9vbEFzc2V0c1RvUG9vbENvbnRyYWN0QWRkcmVzcyIfa2V5TWFwcGluZ1Bvb2xDb250cmFjdFRvTFBBc3NldCIqa2V5TWFwcGluZ1Bvb2xMUEFzc2V0VG9Qb29sQ29udHJhY3RBZGRyZXNzIg1rZXlXeEVtaXNzaW9uIg1hbW91bnRBc3NldElkIgxwcmljZUFzc2V0SWQiCGtleUluRmVlIg9rZXlJbkZlZURlZmF1bHQiCWtleU91dEZlZSIQa2V5T3V0RmVlRGVmYXVsdCIPZ2V0U3RyaW5nT3JGYWlsIgNrZXkiEGdldEJvb2xlYW5PckZhaWwiDGdldEludE9yRmFpbCIYSWR4RmFjdG9yeUNmZ1N0YWtpbmdEYXBwIhlJZHhGYWN0b3J5Q2ZnQm9vc3RpbmdEYXBwIhRJZHhGYWN0b3J5Q2ZnSWRvRGFwcCIVSWR4RmFjdG9yeUNmZ1RlYW1EYXBwIhlJZHhGYWN0b3J5Q2ZnRW1pc3Npb25EYXBwIhVJZHhGYWN0b3J5Q2ZnUmVzdERhcHAiGUlkeEZhY3RvcnlDZmdTbGlwcGFnZURhcHAiFElkeEZhY3RvcnlDZmdEYW9EYXBwIhpJZHhGYWN0b3J5Q2ZnTWFya2V0aW5nRGFwcCIaSWR4RmFjdG9yeUNmZ0d3eFJld2FyZERhcHAiFklkeEZhY3RvcnlDZmdCaXJkc0RhcHAiGGdldEJvb3N0aW5nQWRkcmVzc09yRmFpbCIKZmFjdG9yeUNmZyIYZ2V0RW1pc3Npb25BZGRyZXNzT3JGYWlsIhdnZXRTdGFraW5nQWRkcmVzc09yRmFpbCIZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbCIOZ2V0UHJpY2VBc3NldHMiByRtYXRjaDAiAXMiFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0IhVwZXJtaXNzaW9uRGVuaWVkRXJyb3IiCXRlc3RFcnJvciIIbXVzdFRoaXMiAWkiC211c3RNYW5hZ2VyIgJwayIQZGF0YUZhY3RvcnlDZmdWMyIOc3Rha2luZ0FkZHJlc3MiD2Jvb3N0aW5nQWRkcmVzcyILaWRvQ29udHJhY3QiDHRlYW1Db250cmFjdCIQZW1pc3Npb25Db250cmFjdCIMcmVzdENvbnRyYWN0IhBzbGlwcGFnZUNvbnRyYWN0IgtkYW9Db250cmFjdCIRbWFya2V0aW5nQ29udHJhY3QiEmd3eFJld2FyZHNDb250cmFjdCINYmlyZHNDb250cmFjdCIOZGF0YUZhY3RvcnlDZmciC2RhdGFQb29sQ2ZnIgpwb29sU3RhdHVzIglscEFzc2V0SWQiDmFtb3VudEFzc2V0U3RyIg1wcmljZUFzc2V0U3RyIhNhbW91bnRBc3NldERlY2ltYWxzIhJwcmljZUFzc2V0RGVjaW1hbHMiFWFtb3VudEFzc2V0SW50ZXJuYWxJZCIUcHJpY2VBc3NldEludGVybmFsSWQiD2xwQXNzZXREZWNpbWFscyIIcG9vbFR5cGUiFWRhdGFNYXBwaW5nUG9vbEFzc2V0cyIWaW50ZXJuYWxBbW91bnRBc3NldFN0ciIVaW50ZXJuYWxQcmljZUFzc2V0U3RyIg1nZXRQb29sQ29uZmlnIgpwb29sQXNzZXRzIhpnZXRJbnRlcm5hbEFzc2V0SWRPckNyZWF0ZSIKYXNzZXRJZFN0ciILaW5jcmVtZW50b3IiD2ludGVybmFsQXNzZXRJZCIYY3VycmVudEluZGV4T2ZJbnRlcm5hbElkIgZyZXN1bHQiEm5ld0ludGVybmFsQXNzZXRJZCIJbXVzdEFkbWluIghhZG1pblBLcyIJaXNNYW5hZ2VyIhZpbnRPckRlZmF1bHRPckZhbGxiYWNrIgprZXlEZWZhdWx0Ig12YWx1ZUZhbGxiYWNrIgZhc3NldDEiBmFzc2V0MiIJYXNzZXROdW0xIglhc3NldE51bTIiAmVlIgZjaGVja3MiA3JlcyICbHAiD3N0YWtpbmdDb250cmFjdCIQYm9vc3RpbmdDb250cmFjdCIQc2xwaXBhZ2VDb250cmFjdCINcHJpY2VEZWNpbWFscyILY2hlY2tDYWxsZXIiEG1hdGhjaGVyUHViNThTdHIiCm1hdGhjZXJQdWIiFWxlZ2FjeUZhY3RvcnlDb250cmFjdCILbGVnYWN5UG9vbHMiE2Fzc2V0c1N0b3JlQ29udHJhY3QiFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QiC3ByaWNlQXNzZXRzIgVjaGVrcyIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiFWNoZWNrTWFuYWdlclB1YmxpY0tleSICcG0iBWhhc1BNIgdjaGVja1BNIgxhZG1pblB1YktleXMiC2xwQXNzZXROYW1lIgxscEFzc2V0RGVzY3IiCnBvb2xXZWlnaHQiBGxvZ28iF2ludGVybmFsQW1vdW50QXNzZXREYXRhIhVpbnRlcm5hbEFtb3VudEFzc2V0SWQiFmludGVybmFsUHJpY2VBc3NldERhdGEiFGludGVybmFsUHJpY2VBc3NldElkIhVwb29sQWNjb3VudFNjcmlwdEhhc2giHGV0aGFsb25Qb29sQWNjb3VudFNjcmlwdEhhc2giCnBvb2xDb25maWciD3Bvb2xDb25maWdWYWx1ZSIUYW1vdW50QXNzZXRzRGVjaW1hbHMiE3ByaWNlQXNzZXRzRGVjaW1hbHMiEmxwQXNzZXRJc3N1ZUFjdGlvbiIMbHBBc3NldElkU3RyIhhwb29sQWN0aXZhdGVJbnZva2VSZXN1bHQiGGNyZWF0ZU9yVXBkYXRlTHBBc3NldEludiISYWRkUG9vbHNMcExhYmVsSW52IgpzZXRMb2dvSW52IhBhZGRBc3NldHNMaW5rSW52IhtpbmNyZWFzZUFzc2V0UG9vbHNOdW1iZXJJbnYiCW5ld1N0YXR1cyIKbHBBc3NldERjbSIMYW1vdW50VG9FbWl0IgZjYWxsZXIiDG9yaWdpbkNhbGxlciIQbHBBc3NldFJlcXVlc3RlZCIHbHBBc3NldCIMYW1vdW50VG9CdXJuIgdwYXltZW50Ig1wYXltZW50QW1vdW50Ig9pbkFtb3VudEFzc2V0SWQiGmxwQXNzZXRSZXF1ZXN0ZWRGb3JCdXJuaW5nIgVzaGFyZSINcG9vbFdlaWdodEtleSIMZ3d4V2VpZ2h0S2V5Iglnd3hXZWlnaHQiDXBvb2xXZWlnaHROZXciEW9uTW9kaWZ5V2VpZ2h0SW52IhVnd3hWaXJ0dWFsUG9vbEFjdGlvbnMiFHBvb2xXZWlnaHRIaXN0b3J5S2V5Ihdwb29sV2VpZ2h0SGlzdG9yeU9yVW5pdCIYcG9vbFdlaWdodEhpc3RvcnlBY3Rpb25zIg5idGNQb29sQWRkcmVzcyIOZXRoUG9vbEFkZHJlc3MiEWV0aEJ0Y1Bvb2xBZGRyZXNzIhN1c2RjVXNkdFBvb2xBZGRyZXNzIg9ldGhCdGNXZWlnaHROZXciEXVzZGNVc2R0V2VpZ2h0TmV3Ig93ZWlnaHREZWNyZW1lbnQiC3N0YWtpbmdEYXBwIg1nd3hSZXdhcmREYXBwIgxidGNXZWlnaHRLRVkiDGV0aFdlaWdodEtFWSIPZXRoQnRjV2VpZ2h0S0VZIhF1c2RjVXNkdFdlaWdodEtFWSIJYnRjV2VpZ2h0IglldGhXZWlnaHQiDGJ0Y1dlaWdodE5ldyIMZXRoV2VpZ2h0TmV3Ig9idGNMcEFzc2V0SWRTdHIiD2V0aExwQXNzZXRJZFN0ciISZXRoQnRj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", "chainId": 84, "height": 2433333, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Cze7C84bjhwX9fFkA64GG6UZRABE98khH1VPPiG86BMw Next: 9xVnQR595xtEBhc2v5MX511e1KevMdNhhiQ5WUumQPDV Diff:
OldNewDifferences
325325 @Callable(i)
326326 func getLpAssetFromPoolAssetsREADONLY (asset1,asset2) = {
327327 let assetNum1 = value(getInteger(this, keyMappingsBaseAsset2internalId(asset1)))
328- let check1 = if (isDefined(assetNum1))
328+ let assetNum2 = value(getInteger(this, keyMappingsBaseAsset2internalId(asset2)))
329+ let ee = getString(this, keyMappingPoolAssetsToLpasset(toString(assetNum1), toString(assetNum2)))
330+ let checks = if (isDefined(ee))
329331 then true
330- else throw("test error assetNum1")
331- if ((check1 == check1))
332+ else throw("test error string")
333+ if ((checks == checks))
332334 then {
333- let assetNum2 = value(getInteger(this, keyMappingsBaseAsset2internalId(asset2)))
334- let check2 = if (isDefined(assetNum1))
335- then true
336- else throw("test error assetNum2")
337- if ((check2 == check2))
338- then {
339- let ee = value(getString(this, keyMappingPoolAssetsToLpasset(toString(assetNum1), toString(assetNum2))))
340- let checks = if (isDefined(ee))
341- then true
342- else throw("test error string")
343- if ((checks == checks))
344- then {
345- let res = addressFromStringValue(ee)
346- $Tuple2(nil, res)
347- }
348- else throw("Strict value is not equal to itself.")
349- }
350- else throw("Strict value is not equal to itself.")
335+ let res = value(ee)
336+ $Tuple2(nil, res)
351337 }
352338 else throw("Strict value is not equal to itself.")
353339 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SCALE8 = 8
55
66 let MULT8 = 100000000
77
88 let SCALE18 = 18
99
1010 let MULT18 = toBigInt(1000000000000000000)
1111
1212 let POOLWEIGHTMULT = MULT8
1313
1414 let GWXvirtualPOOL = "GWXvirtualPOOL"
1515
1616 let labelPoolsLp = "POOLS_LP"
1717
1818 let defaultSpread = 2000000
1919
2020 let decimalsMultPrice = ((100 * 1000) * 1000)
2121
2222 let SEP = "__"
2323
2424 let EMPTY = ""
2525
2626 let PoolActive = 1
2727
2828 let PoolPutDisabled = 2
2929
3030 let PoolMatcherDisabled = 3
3131
3232 let PoolShutdown = 4
3333
3434 let idxInternalAssetId = 1
3535
3636 let idxResutActions = 2
3737
3838 let idxIfAssetIdCalculationPerformed = 3
3939
4040 let idxPoolAddress = 1
4141
4242 let idxPoolStatus = 2
4343
4444 let idxPoolLPAssetId = 3
4545
4646 let idxAmtAssetId = 4
4747
4848 let idxPriceAssetId = 5
4949
5050 let idxAmtAssetDcm = 6
5151
5252 let idxPriceAssetDcm = 7
5353
5454 let idxIAmtAssetId = 8
5555
5656 let idxIPriceAssetId = 9
5757
5858 let idxLPAssetDcm = 10
5959
6060 let idxPoolType = 11
6161
6262 let poolLabelWxEmission = "WX_EMISSION"
6363
6464 let validPoolLabels = [poolLabelWxEmission]
6565
6666 func keyAllowedLpScriptHash () = "%s__allowedLpScriptHash"
6767
6868
6969 func keyAllowedLpStableScriptHash () = "%s__allowedLpStableScriptHash"
7070
7171
7272 func keyAllowedLpStableAddonScriptHash () = "%s__allowedLpStableAddonScriptHash"
7373
7474
7575 func keyFactoryConfig () = "%s__factoryConfig"
7676
7777
7878 func keyLpTokensList () = "%s__lpTokensList"
7979
8080
8181 func keyPoolScriptHash () = "%s%s__pool__scriptHash"
8282
8383
8484 func keyMatcherPub () = "%s%s__matcher__publicKey"
8585
8686
8787 func keyLegacyFactoryContract () = "%s__legacyFactoryContract"
8888
8989
9090 func keyLegacyPools () = "%s__legacyPools"
9191
9292
9393 func keyManagerPublicKey () = "%s__managerPublicKey"
9494
9595
9696 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
9797
9898
9999 func keyAdminPubKeys () = "%s__adminPubKeys"
100100
101101
102102 func keyAssetsStoreContract () = "%s__assetsStoreContract"
103103
104104
105105 func keyVotingEmissionContract () = "%s__votingEmissionContract"
106106
107107
108108 func keyPriceAssets () = makeString(["%s", "priceAssets"], SEP)
109109
110110
111111 func keyPriceDecimals () = "%s__priceDecimals"
112112
113113
114114 func keyAllPoolsShutdown () = "%s__shutdown"
115115
116116
117117 func keyNextInternalAssetId () = "%s__nextInternalAssetId"
118118
119119
120120 func keyPoolToWeight (poolAddress) = ("%s%s__poolWeight__" + poolAddress)
121121
122122
123123 func keyPoolToWeightHistory (poolAddress,num) = ((("%s%s__poolWeight__" + poolAddress) + "__") + toString(num))
124124
125125
126126 func keyMappingsInternal2baseAssetId (internalBaseAsset) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(internalBaseAsset))
127127
128128
129129 func keyMappingsBaseAsset2internalId (baseAssetStr) = ("%s%s%s__mappings__baseAsset2internalId__" + baseAssetStr)
130130
131131
132132 func keyPoolConfig (amountAssetInternal,priceAssetInternal) = (((("%d%d%s__" + amountAssetInternal) + "__") + priceAssetInternal) + "__config")
133133
134134
135135 func keyPoolOneTokenOperationsDisabled (assetsInternal) = {
136136 let $t036323694 = assetsInternal
137137 let amountAssetInternal = $t036323694._1
138138 let priceAssetInternal = $t036323694._2
139139 makeString(["%d%d%s", toString(amountAssetInternal), toString(priceAssetInternal), "oneTokenOperationsDisabled"], SEP)
140140 }
141141
142142
143143 func keyAllPoolsOneTokenOperationsDisabled () = makeString(["%s", "oneTokenOperationsDisabled"], SEP)
144144
145145
146146 func keyMappingLpAssetToPoolAssets (lpAssetStr) = (("%s%s%s__" + lpAssetStr) + "__mappings__lpAsset2Pool")
147147
148148
149149 func keyMappingPoolAssetsToLpasset (internalAmountAssetIdStr,internalPriceAssetIdStr) = (((("%d%d%s%s__" + internalAmountAssetIdStr) + "__") + internalPriceAssetIdStr) + "__mappings__PoolAssets2LpAsset")
150150
151151
152152 func keyPoolSpread (poolAddress) = ("%s%s__spread__" + poolAddress)
153153
154154
155155 func keyMappingPoolContractAddressToPoolAssets (poolContractAddress) = (("%s%s%s__" + poolContractAddress) + "__mappings__poolContract2PoolAssets")
156156
157157
158158 func keyMappingPoolAssetsToPoolContractAddress (internalAmountAssetIdStr,internalPriceAssetIdStr) = (((("%d%d%s%s__" + toString(internalAmountAssetIdStr)) + "__") + toString(internalPriceAssetIdStr)) + "__mappings__poolAssets2PoolContract")
159159
160160
161161 func keyMappingPoolContractToLPAsset (poolContractAddress) = (("%s%s%s__" + poolContractAddress) + "__mappings__poolContract2LpAsset")
162162
163163
164164 func keyMappingPoolLPAssetToPoolContractAddress (lpAssetStr) = (("%s%s%s__" + lpAssetStr) + "__mappings__lpAsset2PoolContract")
165165
166166
167167 func keyWxEmission (amountAssetId,priceAssetId) = ((("%s%s%s__wxEmission__" + amountAssetId) + "__") + priceAssetId)
168168
169169
170170 func keyInFee (poolAddress) = ("%s%s__inFee__" + poolAddress)
171171
172172
173173 func keyInFeeDefault () = "%s__inFeeDefault"
174174
175175
176176 func keyOutFee (poolAddress) = ("%s%s__outFee__" + poolAddress)
177177
178178
179179 func keyOutFeeDefault () = "%s__outFeeDefault"
180180
181181
182182 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), ("No data for this.key=" + key))
183183
184184
185185 func getBooleanOrFail (key) = valueOrErrorMessage(getBoolean(this, key), ("No data for this.key=" + key))
186186
187187
188188 func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), ("No data for this.key=" + key))
189189
190190
191191 let IdxFactoryCfgStakingDapp = 1
192192
193193 let IdxFactoryCfgBoostingDapp = 2
194194
195195 let IdxFactoryCfgIdoDapp = 3
196196
197197 let IdxFactoryCfgTeamDapp = 4
198198
199199 let IdxFactoryCfgEmissionDapp = 5
200200
201201 let IdxFactoryCfgRestDapp = 6
202202
203203 let IdxFactoryCfgSlippageDapp = 7
204204
205205 let IdxFactoryCfgDaoDapp = 8
206206
207207 let IdxFactoryCfgMarketingDapp = 9
208208
209209 let IdxFactoryCfgGwxRewardDapp = 10
210210
211211 let IdxFactoryCfgBirdsDapp = 11
212212
213213 func getBoostingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgBoostingDapp])
214214
215215
216216 func getEmissionAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgEmissionDapp])
217217
218218
219219 func getStakingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgStakingDapp])
220220
221221
222222 func getGwxRewardAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgGwxRewardDapp])
223223
224224
225225 func getPriceAssets () = match getString(keyPriceAssets()) {
226226 case s: String =>
227227 if ((size(s) == 0))
228228 then nil
229229 else split(s, SEP)
230230 case _ =>
231231 nil
232232 }
233233
234234
235235 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
236236 case s: String =>
237237 fromBase58String(s)
238238 case _: Unit =>
239239 unit
240240 case _ =>
241241 throw("Match error")
242242 }
243243
244244
245245 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
246246 case s: String =>
247247 fromBase58String(s)
248248 case _: Unit =>
249249 unit
250250 case _ =>
251251 throw("Match error")
252252 }
253253
254254
255255 let permissionDeniedError = throw("Permission denied")
256256
257257 let testError = throw("Test error here")
258258
259259 func mustThis (i) = if ((i.caller == this))
260260 then true
261261 else permissionDeniedError
262262
263263
264264 func mustManager (i) = match managerPublicKeyOrUnit() {
265265 case pk: ByteVector =>
266266 if ((i.callerPublicKey == pk))
267267 then true
268268 else permissionDeniedError
269269 case _: Unit =>
270270 mustThis(i)
271271 case _ =>
272272 throw("Match error")
273273 }
274274
275275
276276 func dataFactoryCfgV3 (stakingAddress,boostingAddress,idoContract,teamContract,emissionContract,restContract,slippageContract,daoContract,marketingContract,gwxRewardsContract,birdsContract) = makeString(["%s%s%s%s%s%s%s%s%s%s%s", stakingAddress, boostingAddress, idoContract, teamContract, emissionContract, restContract, slippageContract, daoContract, marketingContract, gwxRewardsContract, birdsContract], SEP)
277277
278278
279279 func dataFactoryCfg (stakingAddress,boostingAddress,idoContract,teamContract,emissionContract,restContract,slippageContract) = makeString(["%s%s%s%s%s%s", stakingAddress, boostingAddress, idoContract, teamContract, emissionContract, restContract, slippageContract], SEP)
280280
281281
282282 func dataPoolCfg (poolAddress,poolStatus,lpAssetId,amountAssetStr,priceAssetStr,amountAssetDecimals,priceAssetDecimals,amountAssetInternalId,priceAssetInternalId,lpAssetDecimals,poolType) = makeString(["%s%d%s%s%s%d%d%d%d%d%s", poolAddress, poolStatus, lpAssetId, amountAssetStr, priceAssetStr, toString(amountAssetDecimals), toString(priceAssetDecimals), toString(amountAssetInternalId), toString(priceAssetInternalId), toString(lpAssetDecimals), poolType], SEP)
283283
284284
285285 func dataMappingPoolAssets (internalAmountAssetStr,internalPriceAssetStr) = makeString(["%d%d", toString(internalAmountAssetStr), toString(internalPriceAssetStr)], SEP)
286286
287287
288288 func getPoolConfig (poolAddress) = {
289289 let poolAssets = split(getStringOrFail(keyMappingPoolContractAddressToPoolAssets(poolAddress)), SEP)
290290 let amountAssetInternal = poolAssets[1]
291291 let priceAssetInternal = poolAssets[2]
292292 split(getStringOrFail(keyPoolConfig(amountAssetInternal, priceAssetInternal)), SEP)
293293 }
294294
295295
296296 func getInternalAssetIdOrCreate (assetIdStr,incrementor) = {
297297 let internalAssetId = valueOrElse(getInteger(this, keyMappingsBaseAsset2internalId(assetIdStr)), 0)
298298 let currentIndexOfInternalId = valueOrElse(getInteger(this, keyNextInternalAssetId()), 0)
299299 let result = if ((internalAssetId == 0))
300300 then {
301301 let newInternalAssetId = (currentIndexOfInternalId + incrementor)
302302 $Tuple3(newInternalAssetId, [IntegerEntry(keyNextInternalAssetId(), newInternalAssetId), IntegerEntry(keyMappingsBaseAsset2internalId(assetIdStr), newInternalAssetId), StringEntry(keyMappingsInternal2baseAssetId(newInternalAssetId), assetIdStr)], true)
303303 }
304304 else $Tuple3(internalAssetId, nil, false)
305305 result
306306 }
307307
308308
309309 func mustAdmin (i) = {
310310 let adminPKs = split(valueOrElse(getString(keyAdminPubKeys()), EMPTY), SEP)
311311 if (containsElement(adminPKs, toBase58String(i.callerPublicKey)))
312312 then true
313313 else {
314314 let isManager = mustManager(i)
315315 if ((isManager == isManager))
316316 then true
317317 else throw("Strict value is not equal to itself.")
318318 }
319319 }
320320
321321
322322 func intOrDefaultOrFallback (key,keyDefault,valueFallback) = valueOrElse(getInteger(this, key), valueOrElse(getInteger(this, keyDefault), valueFallback))
323323
324324
325325 @Callable(i)
326326 func getLpAssetFromPoolAssetsREADONLY (asset1,asset2) = {
327327 let assetNum1 = value(getInteger(this, keyMappingsBaseAsset2internalId(asset1)))
328- let check1 = if (isDefined(assetNum1))
328+ let assetNum2 = value(getInteger(this, keyMappingsBaseAsset2internalId(asset2)))
329+ let ee = getString(this, keyMappingPoolAssetsToLpasset(toString(assetNum1), toString(assetNum2)))
330+ let checks = if (isDefined(ee))
329331 then true
330- else throw("test error assetNum1")
331- if ((check1 == check1))
332+ else throw("test error string")
333+ if ((checks == checks))
332334 then {
333- let assetNum2 = value(getInteger(this, keyMappingsBaseAsset2internalId(asset2)))
334- let check2 = if (isDefined(assetNum1))
335- then true
336- else throw("test error assetNum2")
337- if ((check2 == check2))
338- then {
339- let ee = value(getString(this, keyMappingPoolAssetsToLpasset(toString(assetNum1), toString(assetNum2))))
340- let checks = if (isDefined(ee))
341- then true
342- else throw("test error string")
343- if ((checks == checks))
344- then {
345- let res = addressFromStringValue(ee)
346- $Tuple2(nil, res)
347- }
348- else throw("Strict value is not equal to itself.")
349- }
350- else throw("Strict value is not equal to itself.")
335+ let res = value(ee)
336+ $Tuple2(nil, res)
351337 }
352338 else throw("Strict value is not equal to itself.")
353339 }
354340
355341
356342
357343 @Callable(i)
358344 func getPoolAddressFromLpAssetREADONLY (lp) = $Tuple2(nil, getString(this, keyMappingPoolLPAssetToPoolContractAddress(lp)))
359345
360346
361347
362348 @Callable(i)
363349 func constructor (stakingContract,boostingContract,idoContract,teamContract,emissionContract,restContract,slpipageContract,priceDecimals) = {
364350 let checkCaller = mustManager(i)
365351 if ((checkCaller == checkCaller))
366352 then [StringEntry(keyFactoryConfig(), dataFactoryCfg(stakingContract, boostingContract, idoContract, teamContract, emissionContract, restContract, slpipageContract)), IntegerEntry(keyPriceDecimals(), priceDecimals)]
367353 else throw("Strict value is not equal to itself.")
368354 }
369355
370356
371357
372358 @Callable(i)
373359 func constructorV2 (mathcherPub58Str) = {
374360 let checkCaller = mustManager(i)
375361 if ((checkCaller == checkCaller))
376362 then {
377363 let mathcerPub = addressFromPublicKey(fromBase58String(mathcherPub58Str))
378364 if ((mathcerPub == mathcerPub))
379365 then [StringEntry(keyMatcherPub(), mathcherPub58Str)]
380366 else throw("Strict value is not equal to itself.")
381367 }
382368 else throw("Strict value is not equal to itself.")
383369 }
384370
385371
386372
387373 @Callable(i)
388374 func constructorV3 (daoContract,marketingContract,gwxRewardsContract,birdsContract) = {
389375 let checkCaller = mustManager(i)
390376 if ((checkCaller == checkCaller))
391377 then {
392378 let factoryCfg = split(getStringOrFail(keyFactoryConfig()), SEP)
393379 [StringEntry(keyFactoryConfig(), dataFactoryCfgV3(factoryCfg[1], factoryCfg[2], factoryCfg[3], factoryCfg[4], factoryCfg[5], factoryCfg[6], factoryCfg[7], daoContract, marketingContract, gwxRewardsContract, birdsContract))]
394380 }
395381 else throw("Strict value is not equal to itself.")
396382 }
397383
398384
399385
400386 @Callable(i)
401387 func constructorV4 (legacyFactoryContract,legacyPools) = {
402388 let checkCaller = mustManager(i)
403389 if ((checkCaller == checkCaller))
404390 then [StringEntry(keyLegacyFactoryContract(), legacyFactoryContract), StringEntry(keyLegacyPools(), makeString(legacyPools, SEP))]
405391 else throw("Strict value is not equal to itself.")
406392 }
407393
408394
409395
410396 @Callable(i)
411397 func constructorV5 (assetsStoreContract) = {
412398 let checkCaller = mustManager(i)
413399 if ((checkCaller == checkCaller))
414400 then [StringEntry(keyAssetsStoreContract(), assetsStoreContract)]
415401 else throw("Strict value is not equal to itself.")
416402 }
417403
418404
419405
420406 @Callable(i)
421407 func constructorV6 (votingEmissionContract,priceAssets) = {
422408 let cheks = [mustManager(i), if ((addressFromString(votingEmissionContract) != unit))
423409 then true
424410 else "invalid voting emission contract address"]
425411 if ((cheks == cheks))
426412 then [StringEntry(keyVotingEmissionContract(), votingEmissionContract), StringEntry(keyPriceAssets(), makeString(priceAssets, SEP))]
427413 else throw("Strict value is not equal to itself.")
428414 }
429415
430416
431417
432418 @Callable(i)
433419 func setManager (pendingManagerPublicKey) = {
434420 let checkCaller = mustManager(i)
435421 if ((checkCaller == checkCaller))
436422 then {
437423 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
438424 if ((checkManagerPublicKey == checkManagerPublicKey))
439425 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
440426 else throw("Strict value is not equal to itself.")
441427 }
442428 else throw("Strict value is not equal to itself.")
443429 }
444430
445431
446432
447433 @Callable(i)
448434 func confirmManager () = {
449435 let pm = pendingManagerPublicKeyOrUnit()
450436 let hasPM = if (isDefined(pm))
451437 then true
452438 else throw("No pending manager")
453439 if ((hasPM == hasPM))
454440 then {
455441 let checkPM = if ((i.callerPublicKey == value(pm)))
456442 then true
457443 else throw("You are not pending manager")
458444 if ((checkPM == checkPM))
459445 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
460446 else throw("Strict value is not equal to itself.")
461447 }
462448 else throw("Strict value is not equal to itself.")
463449 }
464450
465451
466452
467453 @Callable(i)
468454 func setAdmins (adminPubKeys) = {
469455 let checkCaller = mustManager(i)
470456 if ((checkCaller == checkCaller))
471457 then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
472458 else throw("Strict value is not equal to itself.")
473459 }
474460
475461
476462
477463 @Callable(i)
478464 func activateNewPool (poolAddress,amountAssetStr,priceAssetStr,lpAssetName,lpAssetDescr,poolWeight,poolType,logo) = {
479465 let checkCaller = mustAdmin(i)
480466 if ((checkCaller == checkCaller))
481467 then if (isDefined(getString(keyMappingPoolContractAddressToPoolAssets(poolAddress))))
482468 then throw((("Pool address " + poolAddress) + " already registered."))
483469 else {
484470 let internalAmountAssetData = getInternalAssetIdOrCreate(amountAssetStr, 1)
485471 let internalAmountAssetId = internalAmountAssetData._1
486472 let internalPriceAssetData = getInternalAssetIdOrCreate(priceAssetStr, if (internalAmountAssetData._3)
487473 then 2
488474 else 1)
489475 let internalPriceAssetId = internalPriceAssetData._1
490476 let poolAccountScriptHash = valueOrErrorMessage(scriptHash(addressFromStringValue(poolAddress)), ("No script has been found on pool account " + poolAddress))
491477 let ethalonPoolAccountScriptHash = getBinaryValue(keyPoolScriptHash())
492478 let poolConfig = getString(this, keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)))
493479 if (isDefined(poolConfig))
494480 then throw((((("Pool " + amountAssetStr) + "/") + priceAssetStr) + " has already been activated."))
495481 else {
496482 let poolConfigValue = value(getString(this, keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId))))
497483 let amountAssetsDecimals = if ((amountAssetStr == "WAVES"))
498484 then decimalsMultPrice
499485 else pow(10, 0, value(assetInfo(fromBase58String(amountAssetStr))).decimals, 0, 0, DOWN)
500486 let priceAssetsDecimals = if ((priceAssetStr == "WAVES"))
501487 then decimalsMultPrice
502488 else pow(10, 0, value(assetInfo(fromBase58String(priceAssetStr))).decimals, 0, 0, DOWN)
503489 let lpAssetIssueAction = Issue(lpAssetName, lpAssetDescr, 1, 8, true)
504490 let lpAssetId = calculateAssetId(lpAssetIssueAction)
505491 let lpAssetIdStr = toBase58String(lpAssetId)
506492 let poolActivateInvokeResult = invoke(addressFromStringValue(poolAddress), "activate", [amountAssetStr, priceAssetStr], nil)
507493 if ((poolActivateInvokeResult == poolActivateInvokeResult))
508494 then if ((poolActivateInvokeResult != "success"))
509495 then throw("Pool initialisation error happened.")
510496 else {
511497 let assetsStoreContract = addressFromStringValue(getStringOrFail(keyAssetsStoreContract()))
512498 let createOrUpdateLpAssetInv = invoke(assetsStoreContract, "createOrUpdate", [lpAssetIdStr, lpAssetName, false], nil)
513499 if ((createOrUpdateLpAssetInv == createOrUpdateLpAssetInv))
514500 then {
515501 let addPoolsLpLabelInv = invoke(assetsStoreContract, "addLabel", [lpAssetIdStr, labelPoolsLp], nil)
516502 if ((addPoolsLpLabelInv == addPoolsLpLabelInv))
517503 then {
518504 let setLogoInv = invoke(assetsStoreContract, "setLogo", [lpAssetIdStr, logo], nil)
519505 if ((setLogoInv == setLogoInv))
520506 then {
521507 let addAssetsLinkInv = invoke(assetsStoreContract, "addAssetsLink", [amountAssetStr, priceAssetStr, lpAssetIdStr], nil)
522508 if ((addAssetsLinkInv == addAssetsLinkInv))
523509 then {
524510 let increaseAssetPoolsNumberInv = invoke(assetsStoreContract, "increaseAssetPoolsNumber", [amountAssetStr], nil)
525511 if ((increaseAssetPoolsNumberInv == increaseAssetPoolsNumberInv))
526512 then $Tuple2(((internalAmountAssetData._2 ++ internalPriceAssetData._2) ++ [lpAssetIssueAction, Burn(lpAssetId, 1), StringEntry(keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)), dataPoolCfg(poolAddress, toString(PoolActive), lpAssetIdStr, amountAssetStr, priceAssetStr, amountAssetsDecimals, priceAssetsDecimals, internalAmountAssetId, internalPriceAssetId, decimalsMultPrice, poolType)), StringEntry(keyMappingLpAssetToPoolAssets(lpAssetIdStr), dataMappingPoolAssets(internalAmountAssetId, internalPriceAssetId)), StringEntry(keyMappingPoolAssetsToLpasset(toString(internalAmountAssetId), toString(internalPriceAssetId)), ("%s__" + lpAssetIdStr)), StringEntry(keyMappingPoolContractAddressToPoolAssets(poolAddress), dataMappingPoolAssets(internalAmountAssetId, internalPriceAssetId)), StringEntry(keyMappingPoolAssetsToPoolContractAddress(internalAmountAssetId, internalPriceAssetId), poolAddress), StringEntry(keyMappingPoolLPAssetToPoolContractAddress(lpAssetIdStr), poolAddress), StringEntry(keyMappingPoolContractToLPAsset(poolAddress), lpAssetIdStr), IntegerEntry(keyPoolToWeight(poolAddress), poolWeight), IntegerEntry(keyPoolSpread(poolAddress), defaultSpread)]), lpAssetIdStr)
527513 else throw("Strict value is not equal to itself.")
528514 }
529515 else throw("Strict value is not equal to itself.")
530516 }
531517 else throw("Strict value is not equal to itself.")
532518 }
533519 else throw("Strict value is not equal to itself.")
534520 }
535521 else throw("Strict value is not equal to itself.")
536522 }
537523 else throw("Strict value is not equal to itself.")
538524 }
539525 }
540526 else throw("Strict value is not equal to itself.")
541527 }
542528
543529
544530
545531 @Callable(i)
546532 func managePool (poolAddress,newStatus) = {
547533 let checkCaller = mustManager(i)
548534 if ((checkCaller == checkCaller))
549535 then {
550536 let poolConfig = getPoolConfig(poolAddress)
551537 let poolStatus = poolConfig[idxPoolStatus]
552538 let lpAssetIdStr = poolConfig[idxPoolLPAssetId]
553539 let amountAssetStr = poolConfig[idxAmtAssetId]
554540 let priceAssetStr = poolConfig[idxPriceAssetId]
555541 let amountAssetsDecimals = parseIntValue(poolConfig[idxAmtAssetDcm])
556542 let priceAssetsDecimals = parseIntValue(poolConfig[idxPriceAssetDcm])
557543 let internalAmountAssetId = parseIntValue(poolConfig[idxIAmtAssetId])
558544 let internalPriceAssetId = parseIntValue(poolConfig[idxIPriceAssetId])
559545 let lpAssetDcm = parseIntValue(poolConfig[idxLPAssetDcm])
560546 let poolType = poolConfig[idxPoolType]
561547 [StringEntry(keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)), dataPoolCfg(poolAddress, toString(newStatus), lpAssetIdStr, amountAssetStr, priceAssetStr, amountAssetsDecimals, priceAssetsDecimals, internalAmountAssetId, internalPriceAssetId, lpAssetDcm, poolType))]
562548 }
563549 else throw("Strict value is not equal to itself.")
564550 }
565551
566552
567553
568554 @Callable(i)
569555 func emit (amountToEmit) = {
570556 let caller = i.caller
571557 let originCaller = i.originCaller
572558 let lpAssetRequested = valueOrErrorMessage(getString(keyMappingPoolContractToLPAsset(toString(caller))), "Invalid LP address called me.")
573559 let lpAsset = fromBase58String(lpAssetRequested)
574560 let legacyPools = split(valueOrElse(getString(keyLegacyPools()), EMPTY), SEP)
575561 let legacyFactoryContract = addressFromStringValue(valueOrErrorMessage(getString(keyLegacyFactoryContract()), "Legacy factory contract does not exists."))
576562 if ((0 >= amountToEmit))
577563 then nil
578564 else if (containsElement(legacyPools, toString(caller)))
579565 then $Tuple2(nil, legacyFactoryContract)
580566 else $Tuple2([Reissue(lpAsset, amountToEmit, true), ScriptTransfer(i.caller, amountToEmit, lpAsset)], "success")
581567 }
582568
583569
584570
585571 @Callable(i)
586572 func burn (amountToBurn) = {
587573 let caller = i.caller
588574 let originCaller = i.originCaller
589575 let payment = value(i.payments[0])
590576 let paymentAmount = value(payment.amount)
591577 let inAmountAssetId = toBase58String(value(payment.assetId))
592578 let lpAssetRequestedForBurning = valueOrErrorMessage(getString(keyMappingPoolContractToLPAsset(toString(caller))), "Invalid LP address called me.")
593579 if ((inAmountAssetId != lpAssetRequestedForBurning))
594580 then throw("Invalid asset passed.")
595581 else if ((amountToBurn != paymentAmount))
596582 then throw("Invalid amount passed.")
597583 else {
598584 let lpAsset = fromBase58String(lpAssetRequestedForBurning)
599585 $Tuple2([Burn(lpAsset, amountToBurn)], "success")
600586 }
601587 }
602588
603589
604590
605591 @Callable(i)
606592 func modifyWeight (lpAssetId,share) = {
607593 let checkCaller = if ((toBase58String(i.caller.bytes) == valueOrElse(getString(this, keyVotingEmissionContract()), "")))
608594 then true
609595 else mustManager(i)
610596 if ((checkCaller == checkCaller))
611597 then {
612598 let poolContractAddress = getStringOrFail(keyMappingPoolLPAssetToPoolContractAddress(lpAssetId))
613599 let poolWeightKey = keyPoolToWeight(poolContractAddress)
614600 let gwxWeightKey = keyPoolToWeight(GWXvirtualPOOL)
615601 let gwxWeight = valueOrElse(getInteger(gwxWeightKey), 0)
616602 let poolWeight = valueOrElse(getInteger(poolWeightKey), 0)
617603 let poolWeightNew = share
618604 let factoryCfg = split(getStringOrFail(keyFactoryConfig()), SEP)
619605 let stakingContract = getStakingAddressOrFail(factoryCfg)
620606 let onModifyWeightInv = invoke(stakingContract, "onModifyWeight", [lpAssetId, poolContractAddress], nil)
621607 if ((onModifyWeightInv == onModifyWeightInv))
622608 then {
623609 let gwxVirtualPoolActions = if ((gwxWeight == 0))
624610 then nil
625611 else [IntegerEntry(gwxWeightKey, 0)]
626612 let poolWeightHistoryKey = keyPoolToWeightHistory(poolContractAddress, 0)
627613 let poolWeightHistoryOrUnit = getInteger(poolWeightHistoryKey)
628614 let poolWeightHistoryActions = if ((poolWeightHistoryOrUnit == unit))
629615 then nil
630616 else [DeleteEntry(poolWeightHistoryKey)]
631617 (([IntegerEntry(poolWeightKey, poolWeightNew)] ++ gwxVirtualPoolActions) ++ poolWeightHistoryActions)
632618 }
633619 else throw("Strict value is not equal to itself.")
634620 }
635621 else throw("Strict value is not equal to itself.")
636622 }
637623
638624
639625
640626 @Callable(i)
641627 func modifyWeights (btcPoolAddress,ethPoolAddress,ethBtcPoolAddress,usdcUsdtPoolAddress) = {
642628 let checkCaller = mustManager(i)
643629 if ((checkCaller == checkCaller))
644630 then {
645631 let ethBtcWeightNew = ((5 * POOLWEIGHTMULT) / 100)
646632 let usdcUsdtWeightNew = ((5 * POOLWEIGHTMULT) / 100)
647633 let weightDecrement = ((5 * POOLWEIGHTMULT) / 100)
648634 let factoryCfg = split(getStringOrFail(keyFactoryConfig()), SEP)
649635 let stakingDapp = getStakingAddressOrFail(factoryCfg)
650636 let gwxRewardDapp = getGwxRewardAddressOrFail(factoryCfg)
651637 let btcWeightKEY = keyPoolToWeight(btcPoolAddress)
652638 let ethWeightKEY = keyPoolToWeight(ethPoolAddress)
653639 let ethBtcWeightKEY = keyPoolToWeight(ethBtcPoolAddress)
654640 let usdcUsdtWeightKEY = keyPoolToWeight(usdcUsdtPoolAddress)
655641 let btcWeight = getIntOrFail(btcWeightKEY)
656642 let ethWeight = getIntOrFail(ethWeightKEY)
657643 let btcWeightNew = (btcWeight - weightDecrement)
658644 let ethWeightNew = (ethWeight - weightDecrement)
659645 if ((0 >= btcWeightNew))
660646 then throw(("invalid btcWeightNew: " + toString(btcWeightNew)))
661647 else if ((0 >= ethWeightNew))
662648 then throw(("invalid ethWeightNew: " + toString(ethWeightNew)))
663649 else {
664650 let btcLpAssetIdStr = getStringOrFail(keyMappingPoolContractToLPAsset(btcPoolAddress))
665651 let ethLpAssetIdStr = getStringOrFail(keyMappingPoolContractToLPAsset(ethPoolAddress))
666652 let ethBtcLpAssetIdStr = getStringOrFail(keyMappingPoolContractToLPAsset(ethBtcPoolAddress))
667653 let usdcUsdtLpAssetIdStr = getStringOrFail(keyMappingPoolContractToLPAsset(usdcUsdtPoolAddress))
668654 let onModifyWeightBtc = invoke(stakingDapp, "onModifyWeight", [btcLpAssetIdStr, btcPoolAddress], nil)
669655 if ((onModifyWeightBtc == onModifyWeightBtc))
670656 then {
671657 let onModifyWeightEth = invoke(stakingDapp, "onModifyWeight", [ethLpAssetIdStr, ethPoolAddress], nil)
672658 if ((onModifyWeightEth == onModifyWeightEth))
673659 then {
674660 let onModifyWeightEthBtc = invoke(stakingDapp, "onModifyWeight", [ethBtcLpAssetIdStr, ethBtcPoolAddress], nil)
675661 if ((onModifyWeightEthBtc == onModifyWeightEthBtc))
676662 then {
677663 let onModifyWeightUsdcUsdt = invoke(stakingDapp, "onModifyWeight", [usdcUsdtLpAssetIdStr, usdcUsdtPoolAddress], nil)
678664 if ((onModifyWeightUsdcUsdt == onModifyWeightUsdcUsdt))
679665 then [IntegerEntry(btcWeightKEY, btcWeightNew), IntegerEntry(ethWeightKEY, ethWeightNew), IntegerEntry(ethBtcWeightKEY, ethBtcWeightNew), IntegerEntry(usdcUsdtWeightKEY, usdcUsdtWeightNew), IntegerEntry(keyPoolToWeightHistory(btcPoolAddress, 0), btcWeight), IntegerEntry(keyPoolToWeightHistory(ethPoolAddress, 0), ethWeight), IntegerEntry(keyPoolToWeightHistory(ethBtcPoolAddress, 0), ethBtcWeightNew), IntegerEntry(keyPoolToWeightHistory(usdcUsdtPoolAddress, 0), usdcUsdtWeightNew)]
680666 else throw("Strict value is not equal to itself.")
681667 }
682668 else throw("Strict value is not equal to itself.")
683669 }
684670 else throw("Strict value is not equal to itself.")
685671 }
686672 else throw("Strict value is not equal to itself.")
687673 }
688674 }
689675 else throw("Strict value is not equal to itself.")
690676 }
691677
692678
693679
694680 @Callable(i)
695681 func checkWxEmissionPoolLabel (amountAssetId,priceAssetId) = {
696682 let haveLabel = match getBoolean(keyWxEmission(amountAssetId, priceAssetId)) {
697683 case b: Boolean =>
698684 b
699685 case _ =>
700686 false
701687 }
702688 $Tuple2(nil, haveLabel)
703689 }
704690
705691
706692
707693 @Callable(i)
708694 func setWxEmissionPoolLabel (amountAssetId,priceAssetId) = {
709695 let checkCaller = mustAdmin(i)
710696 if ((checkCaller == checkCaller))
711697 then $Tuple2([BooleanEntry(keyWxEmission(amountAssetId, priceAssetId), true)], unit)
712698 else throw("Strict value is not equal to itself.")
713699 }
714700
715701
716702
717703 @Callable(i)
718704 func deleteWxEmissionPoolLabel (amountAssetId,priceAssetId) = {
719705 let checkCaller = if (mustThis(i))
720706 then true
721707 else mustAdmin(i)
722708 if ((checkCaller == checkCaller))
723709 then $Tuple2([DeleteEntry(keyWxEmission(amountAssetId, priceAssetId))], unit)
724710 else throw("Strict value is not equal to itself.")
725711 }
726712
727713
728714
729715 @Callable(i)
730716 func onVerificationLoss (assetId) = {
731717 let checkCaller = if ((toBase58String(i.caller.bytes) == valueOrElse(getString(this, keyAssetsStoreContract()), "")))
732718 then true
733719 else mustManager(i)
734720 if ((checkCaller == checkCaller))
735721 then {
736722 let priceAssets = getPriceAssets()
737723 let checkPriceAssetsSize = if ((size(priceAssets) > 0))
738724 then true
739725 else throw("invalid price assets")
740726 if ((checkPriceAssetsSize == checkPriceAssetsSize))
741727 then {
742728 func cb (acc,priceAsset) = {
743729 let r = invoke(this, "deleteWxEmissionPoolLabel", [assetId, priceAsset], nil)
744730 if ((r == r))
745731 then unit
746732 else throw("Strict value is not equal to itself.")
747733 }
748734
749735 let actions = {
750736 let $l = priceAssets
751737 let $s = size($l)
752738 let $acc0 = unit
753739 func $f0_1 ($a,$i) = if (($i >= $s))
754740 then $a
755741 else cb($a, $l[$i])
756742
757743 func $f0_2 ($a,$i) = if (($i >= $s))
758744 then $a
759745 else throw("List size exceeds 4")
760746
761747 $f0_2($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4)
762748 }
763749 if ((actions == actions))
764750 then $Tuple2(nil, unit)
765751 else throw("Strict value is not equal to itself.")
766752 }
767753 else throw("Strict value is not equal to itself.")
768754 }
769755 else throw("Strict value is not equal to itself.")
770756 }
771757
772758
773759
774760 @Callable(i)
775761 func isPoolOneTokenOperationsDisabledREADONLY (poolAddress) = {
776762 let poolConfig = getPoolConfig(poolAddress)
777763 let assetsInternal = $Tuple2(parseIntValue(poolConfig[idxIAmtAssetId]), parseIntValue(poolConfig[idxIPriceAssetId]))
778764 let poolOneTokenOperationsDisabled = valueOrElse(getBoolean(keyPoolOneTokenOperationsDisabled(assetsInternal)), false)
779765 let allPoolsOneTokenOperationsDisabled = valueOrElse(getBoolean(keyAllPoolsOneTokenOperationsDisabled()), false)
780766 $Tuple2(nil, if (allPoolsOneTokenOperationsDisabled)
781767 then true
782768 else poolOneTokenOperationsDisabled)
783769 }
784770
785771
786772
787773 @Callable(i)
788774 func getInFeeREADONLY (poolAddress) = {
789775 let fee = intOrDefaultOrFallback(keyInFee(poolAddress), keyInFeeDefault(), 0)
790776 $Tuple2(nil, fee)
791777 }
792778
793779
794780
795781 @Callable(i)
796782 func getOutFeeREADONLY (poolAddress) = {
797783 let fee = intOrDefaultOrFallback(keyOutFee(poolAddress), keyOutFeeDefault(), fraction(10, MULT8, 10000))
798784 $Tuple2(nil, fee)
799785 }
800786
801787
802788
803789 @Callable(i)
804790 func getPoolStatusREADONLY (poolAddress) = {
805791 let poolAssets = split(getStringOrFail(keyMappingPoolContractAddressToPoolAssets(poolAddress)), SEP)
806792 let amountAssetInternal = poolAssets[1]
807793 let priceAssetInternal = poolAssets[2]
808794 let cfg = split(getStringOrFail(keyPoolConfig(amountAssetInternal, priceAssetInternal)), SEP)
809795 $Tuple2(nil, parseIntValue(cfg[idxPoolStatus]))
810796 }
811797
812798
813799 @Verifier(tx)
814800 func verify () = {
815801 let targetPublicKey = match managerPublicKeyOrUnit() {
816802 case pk: ByteVector =>
817803 pk
818804 case _: Unit =>
819805 tx.senderPublicKey
820806 case _ =>
821807 throw("Match error")
822808 }
823809 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
824810 }
825811

github/deemru/w8io/026f985 
104.85 ms