tx · CY9rCQNJKwo97tNJwE1JsGsgMMeXTR4dzWncCZ3ogWCf

3MvVH33KASni1qXr1BJhmuwPnYKmgwZBGaR:  -0.01300000 Waves

2023.03.16 14:23 [2492514] smart account 3MvVH33KASni1qXr1BJhmuwPnYKmgwZBGaR > SELF 0.00000000 Waves

{ "type": 13, "id": "CY9rCQNJKwo97tNJwE1JsGsgMMeXTR4dzWncCZ3ogWCf", "fee": 1300000, "feeAssetId": null, "timestamp": 1678965828705, "version": 2, "chainId": 84, "sender": "3MvVH33KASni1qXr1BJhmuwPnYKmgwZBGaR", "senderPublicKey": "2uEfkKMnD8wQeJcHwphftPPzFcaujs486fDaMuUyNT9w", "proofs": [ "659NZsGcB6ksDiLjSDMuwQeHMA15akxzK1mA6iZGxmseZ35CrKMoTazvGhxsCEhmKiE89x9yhP6An6aFhn4Gkfq7" ], "script": "base64:BgIXCAISBQoDAQgIEgUKAwEICBIDCgEIEgAXAANTRVACAl9fAAhmZWVTY2FsZQkAtgIBAIDC1y8BD2dldFN0cmluZ09yRmFpbAEDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUDa2V5CQCsAgICFU5vIGRhdGEgZm9yIHRoaXMua2V5PQUDa2V5AAxwb29sRGlzYWJsZWQJAAIBAg1Qb29sIGRpc2FibGVkAAxwb29sTm90RXhpc3QJAAIBAhFQb29sIGlzIG5vdCBleGlzdAAOc2xpcHBhZ2VUb29CaWcJAAIBAhNTbGlwcGFnZSBpcyB0b28gYmlnARNrZXlNYW5hZ2VyUHVibGljS2V5AAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQJmYwACEyVzX19mYWN0b3J5Q29udHJhY3QAD2ZhY3RvcnlDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBD2dldFN0cmluZ09yRmFpbAEJAQJmYwABC3Byb3RvY29sRmVlAAkAuQkCCQDMCAICAiVzCQDMCAICC3Byb3RvY29sRmVlBQNuaWwFA1NFUAEHcG9vbEZlZQAJALkJAgkAzAgCAgIlcwkAzAgCAgdwb29sRmVlBQNuaWwFA1NFUAEaZ2V0U3RyaW5nT3JGYWlsRnJvbUFkZHJlc3MCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAAWa2V5RmVlQ29sbGVjdG9yQWRkcmVzcwIXJXNfX2ZlZUNvbGxlY3RvckFkZHJlc3MAE2ZlZUNvbGxlY3RvckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARpnZXRTdHJpbmdPckZhaWxGcm9tQWRkcmVzcwIFD2ZhY3RvcnlDb250cmFjdAUWa2V5RmVlQ29sbGVjdG9yQWRkcmVzcwEFYXNJbnQBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACA0ludAQGdmFsSW50BQckbWF0Y2gwBQZ2YWxJbnQJAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBFWRhdGFNYXBwaW5nUG9vbEFzc2V0cwIWaW50ZXJuYWxBbW91bnRBc3NldFN0chVpbnRlcm5hbFByaWNlQXNzZXRTdHIJALkJAgkAzAgCAgQlZCVkCQDMCAIJAKQDAQUWaW50ZXJuYWxBbW91bnRBc3NldFN0cgkAzAgCCQCkAwEFFWludGVybmFsUHJpY2VBc3NldFN0cgUDbmlsBQNTRVABFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABAckbWF0Y2gwCQCiCAEJARNrZXlNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAQHJG1hdGNoMAkAoggBCQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEJaXNNYW5hZ2VyAQFpBAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgELbXVzdE1hbmFnZXIBAWkDCQEJaXNNYW5hZ2VyAQUBaQYJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAENZ2V0QWNjQmFsYW5jZQEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQdhc3NldElkASBnZXRQb29sQWRkcmVzc0FuZENoZWNrUG9vbFN0YXR1cwIHYXNzZXRJbghhc3NldE91dAQMbHBOb25SZXZlcnNlCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCIGdldExwQXNzZXRGcm9tUG9vbEFzc2V0c1JFQURPTkxZCQDMCAIFB2Fzc2V0SW4JAMwIAgUIYXNzZXRPdXQFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAQJbHBSZXZlcnNlCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCIGdldExwQXNzZXRGcm9tUG9vbEFzc2V0c1JFQURPTkxZCQDMCAIFCGFzc2V0T3V0CQDMCAIFB2Fzc2V0SW4FA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAQLJHQwMjYyNjMxMDMDCQECIT0CBQxscE5vblJldmVyc2UFBHVuaXQEBHBvb2wKAAFACQD8BwQFD2ZhY3RvcnlDb250cmFjdAIhZ2V0UG9vbEFkZHJlc3NGcm9tTHBBc3NldFJFQURPTkxZCQDMCAIJAQV2YWx1ZQEFDGxwTm9uUmV2ZXJzZQUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nCQCUCgIHBQRwb29sAwkBAiE9AgUJbHBSZXZlcnNlBQR1bml0BARwb29sCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCIWdldFBvb2xBZGRyZXNzRnJvbUxwQXNzZXRSRUFET05MWQkAzAgCCQEFdmFsdWUBBQlscFJldmVyc2UFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwkAlAoCBgUEcG9vbAUMcG9vbE5vdEV4aXN0BAlpc1JldmVyc2UIBQskdDAyNjI2MzEwMwJfMQQEcG9vbAgFCyR0MDI2MjYzMTAzAl8yBApwb29sU3RhdHVzCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCFWdldFBvb2xTdGF0dXNSRUFET05MWQkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQEBWNoZWNrAwkAAAIFCnBvb2xTdGF0dXMAAQYFDHBvb2xEaXNhYmxlZAMJAAACBQVjaGVjawUFY2hlY2sEB3Bvb2xBZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIFBHBvb2wCAAkAlAoCBQdwb29sQWRyBQlpc1JldmVyc2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EAWkBFXN3YXBDYWxjdWxhdGVSRUFET05MWQMIYW1vdW50SW4HYXNzZXRJbghhc3NldE91dAQFcHJGZWUJAQV2YWx1ZQEJAJ8IAQkBC3Byb3RvY29sRmVlAAQVZmVlUHJvdG9jb2xBbW91bnRDYWxjCQC8AgMJALYCAQUIYW1vdW50SW4JALYCAQUFcHJGZWUFCGZlZVNjYWxlBAVwbEZlZQkBBXZhbHVlAQkAnwgBCQEHcG9vbEZlZQAEEWZlZVBvb2xBbW91bnRDYWxjCQC8AgMJALYCAQUIYW1vdW50SW4JALYCAQUFcGxGZWUFCGZlZVNjYWxlBBFmZWVQcm90b2NvbEFtb3VudAMJAAACCQCgAwEFFWZlZVByb3RvY29sQW1vdW50Q2FsYwAACQC2AgEAAQUVZmVlUHJvdG9jb2xBbW91bnRDYWxjBA1mZWVQb29sQW1vdW50AwkAAAIJAKADAQURZmVlUG9vbEFtb3VudENhbGMAAAkAtgIBAAEFEWZlZVBvb2xBbW91bnRDYWxjBA1jbGVhbkFtb3VudEluCQC4AgIJALgCAgkAtgIBBQhhbW91bnRJbgURZmVlUHJvdG9jb2xBbW91bnQFDWZlZVBvb2xBbW91bnQECyR0MDQxMjg0MjA2CQEgZ2V0UG9vbEFkZHJlc3NBbmRDaGVja1Bvb2xTdGF0dXMCBQdhc3NldEluBQhhc3NldE91dAQHcG9vbEFkcggFCyR0MDQxMjg0MjA2Al8xBAlpc1JldmVyc2UIBQskdDA0MTI4NDIwNgJfMgQDcmVzCgABQAkA/AcEBQdwb29sQWRyAiFjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwUkVBRE9OTFkJAMwIAgkAoAMBBQ1jbGVhbkFtb3VudEluCQDMCAIFCWlzUmV2ZXJzZQkAzAgCCQCgAwEFDWZlZVBvb2xBbW91bnQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAkAlAoCBQNuaWwFA3JlcwFpAQRzd2FwAwxhbW91bnRPdXRNaW4LYXNzZXRPdXRSYXcJYWRkcmVzc1RvBAhhc3NldE91dAMJAAACBQthc3NldE91dFJhdwIAAgVXQVZFUwULYXNzZXRPdXRSYXcEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldEluAwkAAAIIBQNwbXQHYXNzZXRJZAUEdW5pdAIFV0FWRVMJANgEAQkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAhhbW91bnRJbgkBBXZhbHVlAQgFA3BtdAZhbW91bnQEBXByRmVlCQEFdmFsdWUBCQCfCAEJAQtwcm90b2NvbEZlZQAEFWZlZVByb3RvY29sQW1vdW50Q2FsYwkAvAIDCQC2AgEFCGFtb3VudEluCQC2AgEFBXByRmVlBQhmZWVTY2FsZQQFcGxGZWUJAQV2YWx1ZQEJAJ8IAQkBB3Bvb2xGZWUABBFmZWVQb29sQW1vdW50Q2FsYwkAvAIDCQC2AgEFCGFtb3VudEluCQC2AgEFBXBsRmVlBQhmZWVTY2FsZQQRZmVlUHJvdG9jb2xBbW91bnQDCQAAAgkAoAMBBRVmZWVQcm90b2NvbEFtb3VudENhbGMAAAkAtgIBAAEFFWZlZVByb3RvY29sQW1vdW50Q2FsYwQNZmVlUG9vbEFtb3VudAMJAAACCQCgAwEFEWZlZVBvb2xBbW91bnRDYWxjAAAJALYCAQABBRFmZWVQb29sQW1vdW50Q2FsYwQNY2xlYW5BbW91bnRJbgkAuAICCQC4AgIJALYCAQUIYW1vdW50SW4FEWZlZVByb3RvY29sQW1vdW50BQ1mZWVQb29sQW1vdW50BAZjaGVja3MJAMwIAgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEGCQACAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MECyR0MDU0NTI1NTMwCQEgZ2V0UG9vbEFkZHJlc3NBbmRDaGVja1Bvb2xTdGF0dXMCBQdhc3NldEluBQhhc3NldE91dAQHcG9vbEFkcggFCyR0MDU0NTI1NTMwAl8xBAlpc1JldmVyc2UIBQskdDA1NDUyNTUzMAJfMgQWYXNzZXRJbkF0dGFjaGVkUGF5bWVudAMJAAACBQdhc3NldEluAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldEluBAt0b3RhbEdldFJhdwoAAUAJAPwHBAUHcG9vbEFkcgImY2FsY3VsYXRlQW1vdW50T3V0Rm9yU3dhcEFuZFNlbmRUb2tlbnMJAMwIAgkAoAMBBQ1jbGVhbkFtb3VudEluCQDMCAIFCWlzUmV2ZXJzZQkAzAgCBQxhbW91bnRPdXRNaW4JAMwIAgUJYWRkcmVzc1RvCQDMCAIJAKADAQUNZmVlUG9vbEFtb3VudAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBRZhc3NldEluQXR0YWNoZWRQYXltZW50CQCgAwEFDWNsZWFuQW1vdW50SW4FA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRNmZWVDb2xsZWN0b3JBZGRyZXNzCQCgAwEFEWZlZVByb3RvY29sQW1vdW50BRZhc3NldEluQXR0YWNoZWRQYXltZW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFB3Bvb2xBZHIJAKADAQUNZmVlUG9vbEFtb3VudAUWYXNzZXRJbkF0dGFjaGVkUGF5bWVudAUDbmlsBQt0b3RhbEdldFJhdwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpzZXRNYW5hZ2VyARdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQLY2hlY2tDYWxsZXIJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBBVjaGVja01hbmFnZXJQdWJsaWNLZXkJANkEAQUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAgUVY2hlY2tNYW5hZ2VyUHVibGljS2V5BRVjaGVja01hbmFnZXJQdWJsaWNLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jb25maXJtTWFuYWdlcgAEAnBtCQEdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQABAVoYXNQTQMJAQlpc0RlZmluZWQBBQJwbQYJAAIBAhJubyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUFaGFzUE0FBWhhc1BNBAdjaGVja1BNAwkAAAIIBQFpD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCcG0GCQACAQIbeW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFB2NoZWNrUE0FB2NoZWNrUE0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleU1hbmFnZXJQdWJsaWNLZXkACQDYBAEJAQV2YWx1ZQEFAnBtCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAED3RhcmdldFB1YmxpY0tleQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwBQJwawMJAAECBQckbWF0Y2gwAgRVbml0CAUCdHgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFD3RhcmdldFB1YmxpY0tleTsR3pY=", "height": 2492514, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3QdAbedjLjm8845Yn7uw5nKzf1orfQMgnw9ALzA14mg4 Next: 9ptF7gA1gz89W7KdrzVizzEcSZSJD6QFpJ2zfm1r2o8M Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let SEP = "__"
5+
6+let feeScale = toBigInt(100000000)
7+
8+func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), ("No data for this.key=" + key))
9+
10+
11+let poolDisabled = throw("Pool disabled")
12+
13+let poolNotExist = throw("Pool is not exist")
14+
15+let slippageTooBig = throw("Slippage is too big")
16+
17+func keyManagerPublicKey () = "%s__managerPublicKey"
18+
19+
20+func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
21+
22+
23+func fc () = "%s__factoryContract"
24+
25+
26+let factoryContract = addressFromStringValue(getStringOrFail(fc()))
27+
28+func protocolFee () = makeString(["%s", "protocolFee"], SEP)
29+
30+
31+func poolFee () = makeString(["%s", "poolFee"], SEP)
32+
33+
34+func getStringOrFailFromAddress (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
35+
36+
37+let keyFeeCollectorAddress = "%s__feeCollectorAddress"
38+
39+let feeCollectorAddress = addressFromStringValue(getStringOrFailFromAddress(factoryContract, keyFeeCollectorAddress))
40+
41+func asInt (val) = match val {
42+ case valInt: Int =>
43+ valInt
44+ case _ =>
45+ throw("fail to cast into Int")
46+}
47+
48+
49+func dataMappingPoolAssets (internalAmountAssetStr,internalPriceAssetStr) = makeString(["%d%d", toString(internalAmountAssetStr), toString(internalPriceAssetStr)], SEP)
50+
51+
52+func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
53+ case s: String =>
54+ fromBase58String(s)
55+ case _: Unit =>
56+ unit
57+ case _ =>
58+ throw("Match error")
59+}
60+
61+
62+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
63+ case s: String =>
64+ fromBase58String(s)
65+ case _: Unit =>
66+ unit
67+ case _ =>
68+ throw("Match error")
69+}
70+
71+
72+func isManager (i) = match managerPublicKeyOrUnit() {
73+ case pk: ByteVector =>
74+ (i.callerPublicKey == pk)
75+ case _: Unit =>
76+ (i.caller == this)
77+ case _ =>
78+ throw("Match error")
79+}
80+
81+
82+func mustManager (i) = if (isManager(i))
83+ then true
84+ else throw("permission denied")
85+
86+
87+func getAccBalance (assetId) = if ((assetId == "WAVES"))
88+ then wavesBalance(this).available
89+ else assetBalance(this, fromBase58String(assetId))
90+
91+
92+func getPoolAddressAndCheckPoolStatus (assetIn,assetOut) = {
93+ let lpNonReverse = {
94+ let @ = invoke(factoryContract, "getLpAssetFromPoolAssetsREADONLY", [assetIn, assetOut], nil)
95+ if ($isInstanceOf(@, "String"))
96+ then @
97+ else unit
98+ }
99+ let lpReverse = {
100+ let @ = invoke(factoryContract, "getLpAssetFromPoolAssetsREADONLY", [assetOut, assetIn], nil)
101+ if ($isInstanceOf(@, "String"))
102+ then @
103+ else unit
104+ }
105+ let $t026263103 = if ((lpNonReverse != unit))
106+ then {
107+ let pool = {
108+ let @ = invoke(factoryContract, "getPoolAddressFromLpAssetREADONLY", [value(lpNonReverse)], nil)
109+ if ($isInstanceOf(@, "String"))
110+ then @
111+ else throw(($getType(@) + " couldn't be cast to String"))
112+ }
113+ $Tuple2(false, pool)
114+ }
115+ else if ((lpReverse != unit))
116+ then {
117+ let pool = {
118+ let @ = invoke(factoryContract, "getPoolAddressFromLpAssetREADONLY", [value(lpReverse)], nil)
119+ if ($isInstanceOf(@, "String"))
120+ then @
121+ else throw(($getType(@) + " couldn't be cast to String"))
122+ }
123+ $Tuple2(true, pool)
124+ }
125+ else poolNotExist
126+ let isReverse = $t026263103._1
127+ let pool = $t026263103._2
128+ let poolStatus = {
129+ let @ = invoke(factoryContract, "getPoolStatusREADONLY", [pool], nil)
130+ if ($isInstanceOf(@, "Int"))
131+ then @
132+ else throw(($getType(@) + " couldn't be cast to Int"))
133+ }
134+ let check = if ((poolStatus == 1))
135+ then true
136+ else poolDisabled
137+ if ((check == check))
138+ then {
139+ let poolAdr = addressFromStringValue(valueOrElse(pool, ""))
140+ $Tuple2(poolAdr, isReverse)
141+ }
142+ else throw("Strict value is not equal to itself.")
143+ }
144+
145+
146+@Callable(i)
147+func swapCalculateREADONLY (amountIn,assetIn,assetOut) = {
148+ let prFee = value(getInteger(protocolFee()))
149+ let feeProtocolAmountCalc = fraction(toBigInt(amountIn), toBigInt(prFee), feeScale)
150+ let plFee = value(getInteger(poolFee()))
151+ let feePoolAmountCalc = fraction(toBigInt(amountIn), toBigInt(plFee), feeScale)
152+ let feeProtocolAmount = if ((toInt(feeProtocolAmountCalc) == 0))
153+ then toBigInt(1)
154+ else feeProtocolAmountCalc
155+ let feePoolAmount = if ((toInt(feePoolAmountCalc) == 0))
156+ then toBigInt(1)
157+ else feePoolAmountCalc
158+ let cleanAmountIn = ((toBigInt(amountIn) - feeProtocolAmount) - feePoolAmount)
159+ let $t041284206 = getPoolAddressAndCheckPoolStatus(assetIn, assetOut)
160+ let poolAdr = $t041284206._1
161+ let isReverse = $t041284206._2
162+ let res = {
163+ let @ = invoke(poolAdr, "calculateAmountOutForSwapREADONLY", [toInt(cleanAmountIn), isReverse, toInt(feePoolAmount)], nil)
164+ if ($isInstanceOf(@, "Int"))
165+ then @
166+ else throw(($getType(@) + " couldn't be cast to Int"))
167+ }
168+ $Tuple2(nil, res)
169+ }
170+
171+
172+
173+@Callable(i)
174+func swap (amountOutMin,assetOutRaw,addressTo) = {
175+ let assetOut = if ((assetOutRaw == ""))
176+ then "WAVES"
177+ else assetOutRaw
178+ let pmt = value(i.payments[0])
179+ let assetIn = if ((pmt.assetId == unit))
180+ then "WAVES"
181+ else toBase58String(value(pmt.assetId))
182+ let amountIn = value(pmt.amount)
183+ let prFee = value(getInteger(protocolFee()))
184+ let feeProtocolAmountCalc = fraction(toBigInt(amountIn), toBigInt(prFee), feeScale)
185+ let plFee = value(getInteger(poolFee()))
186+ let feePoolAmountCalc = fraction(toBigInt(amountIn), toBigInt(plFee), feeScale)
187+ let feeProtocolAmount = if ((toInt(feeProtocolAmountCalc) == 0))
188+ then toBigInt(1)
189+ else feeProtocolAmountCalc
190+ let feePoolAmount = if ((toInt(feePoolAmountCalc) == 0))
191+ then toBigInt(1)
192+ else feePoolAmountCalc
193+ let cleanAmountIn = ((toBigInt(amountIn) - feeProtocolAmount) - feePoolAmount)
194+ let checks = [if ((size(i.payments) == 1))
195+ then true
196+ else throw("exactly 1 payment are expected")]
197+ if ((checks == checks))
198+ then {
199+ let $t054525530 = getPoolAddressAndCheckPoolStatus(assetIn, assetOut)
200+ let poolAdr = $t054525530._1
201+ let isReverse = $t054525530._2
202+ let assetInAttachedPayment = if ((assetIn == "WAVES"))
203+ then unit
204+ else fromBase58String(assetIn)
205+ let totalGetRaw = {
206+ let @ = invoke(poolAdr, "calculateAmountOutForSwapAndSendTokens", [toInt(cleanAmountIn), isReverse, amountOutMin, addressTo, toInt(feePoolAmount)], [AttachedPayment(assetInAttachedPayment, toInt(cleanAmountIn))])
207+ if ($isInstanceOf(@, "Int"))
208+ then @
209+ else throw(($getType(@) + " couldn't be cast to Int"))
210+ }
211+ $Tuple2([ScriptTransfer(feeCollectorAddress, toInt(feeProtocolAmount), assetInAttachedPayment), ScriptTransfer(poolAdr, toInt(feePoolAmount), assetInAttachedPayment)], totalGetRaw)
212+ }
213+ else throw("Strict value is not equal to itself.")
214+ }
215+
216+
217+
218+@Callable(i)
219+func setManager (pendingManagerPublicKey) = {
220+ let checkCaller = mustManager(i)
221+ if ((checkCaller == checkCaller))
222+ then {
223+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
224+ if ((checkManagerPublicKey == checkManagerPublicKey))
225+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
226+ else throw("Strict value is not equal to itself.")
227+ }
228+ else throw("Strict value is not equal to itself.")
229+ }
230+
231+
232+
233+@Callable(i)
234+func confirmManager () = {
235+ let pm = pendingManagerPublicKeyOrUnit()
236+ let hasPM = if (isDefined(pm))
237+ then true
238+ else throw("no pending manager")
239+ if ((hasPM == hasPM))
240+ then {
241+ let checkPM = if ((i.callerPublicKey == value(pm)))
242+ then true
243+ else throw("you are not pending manager")
244+ if ((checkPM == checkPM))
245+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
246+ else throw("Strict value is not equal to itself.")
247+ }
248+ else throw("Strict value is not equal to itself.")
249+ }
250+
251+
252+@Verifier(tx)
253+func verify () = {
254+ let targetPublicKey = match managerPublicKeyOrUnit() {
255+ case pk: ByteVector =>
256+ pk
257+ case _: Unit =>
258+ tx.senderPublicKey
259+ case _ =>
260+ throw("Match error")
261+ }
262+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
263+ }
264+

github/deemru/w8io/026f985 
21.91 ms