tx · 6E7AJAL9JMV4gZg7a6XTZ5rDXmhx3wGLr2XpbPSi7f7f

3N6LHjfGb6Fgcy7YsVcNxGyPTj49XbQAijq:  -0.01300000 Waves

2023.05.10 13:16 [2571656] smart account 3N6LHjfGb6Fgcy7YsVcNxGyPTj49XbQAijq > SELF 0.00000000 Waves

{ "type": 13, "id": "6E7AJAL9JMV4gZg7a6XTZ5rDXmhx3wGLr2XpbPSi7f7f", "fee": 1300000, "feeAssetId": null, "timestamp": 1683713836970, "version": 2, "chainId": 84, "sender": "3N6LHjfGb6Fgcy7YsVcNxGyPTj49XbQAijq", "senderPublicKey": "2u2wYYcVBQv43Cc71zkhHPPitkqgg6dqTZ3nUMvYJ1uq", "proofs": [ "4H78t2jagw6ozQPfZCkPpd72d1MkKLLTreoHd3mQTtMcMD6UxzGRCtLoQrorjTciHaxBeRxoqF5G5imYSjTeZWwo" ], "script": "base64:BgIQCAISBQoDAQgIEgUKAwEICBcAA1NFUAICX18ACGZlZVNjYWxlCQC2AgEAgMLXLwEPZ2V0U3RyaW5nT3JGYWlsAQNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQNrZXkJAKwCAgIVTm8gZGF0YSBmb3IgdGhpcy5rZXk9BQNrZXkADHBvb2xEaXNhYmxlZAkAAgECDVBvb2wgZGlzYWJsZWQADHBvb2xOb3RFeGlzdAkAAgECEVBvb2wgaXMgbm90IGV4aXN0AA5zbGlwcGFnZVRvb0JpZwkAAgECE1NsaXBwYWdlIGlzIHRvbyBiaWcBE2tleU1hbmFnZXJQdWJsaWNLZXkAAhQlc19fbWFuYWdlclB1YmxpY0tleQEWa2V5TWFuYWdlclZhdWx0QWRkcmVzcwACFyVzX19tYW5hZ2VyVmF1bHRBZGRyZXNzAQJmYwACEyVzX19mYWN0b3J5Q29udHJhY3QAD2ZhY3RvcnlDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBD2dldFN0cmluZ09yRmFpbAEJAQJmYwABC3Byb3RvY29sRmVlAAkAuQkCCQDMCAICAiVzCQDMCAICC3Byb3RvY29sRmVlBQNuaWwFA1NFUAEHcG9vbEZlZQAJALkJAgkAzAgCAgIlcwkAzAgCAgdwb29sRmVlBQNuaWwFA1NFUAEaZ2V0U3RyaW5nT3JGYWlsRnJvbUFkZHJlc3MCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAAWa2V5RmVlQ29sbGVjdG9yQWRkcmVzcwIXJXNfX2ZlZUNvbGxlY3RvckFkZHJlc3MAE2ZlZUNvbGxlY3RvckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARpnZXRTdHJpbmdPckZhaWxGcm9tQWRkcmVzcwIFD2ZhY3RvcnlDb250cmFjdAUWa2V5RmVlQ29sbGVjdG9yQWRkcmVzcwEcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcwAEByRtYXRjaDAJAKIIAQkBFmtleU1hbmFnZXJWYXVsdEFkZHJlc3MAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBcwUEdGhpcwEFYXNJbnQBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACA0ludAQGdmFsSW50BQckbWF0Y2gwBQZ2YWxJbnQJAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBFWRhdGFNYXBwaW5nUG9vbEFzc2V0cwIWaW50ZXJuYWxBbW91bnRBc3NldFN0chVpbnRlcm5hbFByaWNlQXNzZXRTdHIJALkJAgkAzAgCAgQlZCVkCQDMCAIJAKQDAQUWaW50ZXJuYWxBbW91bnRBc3NldFN0cgkAzAgCCQCkAwEFFWludGVybmFsUHJpY2VBc3NldFN0cgUDbmlsBQNTRVABFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABBNtYW5hZ2VyVmF1bHRBZGRyZXNzCQEcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcwAEByRtYXRjaDAJAJ0IAgUTbWFuYWdlclZhdWx0QWRkcmVzcwkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEJaXNNYW5hZ2VyAQFpBAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgELbXVzdE1hbmFnZXIBAWkDCQEJaXNNYW5hZ2VyAQUBaQYJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAENZ2V0QWNjQmFsYW5jZQEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQdhc3NldElkASBnZXRQb29sQWRkcmVzc0FuZENoZWNrUG9vbFN0YXR1cwIHYXNzZXRJbghhc3NldE91dAQMbHBOb25SZXZlcnNlCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCIGdldExwQXNzZXRGcm9tUG9vbEFzc2V0c1JFQURPTkxZCQDMCAIFB2Fzc2V0SW4JAMwIAgUIYXNzZXRPdXQFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAQJbHBSZXZlcnNlCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCIGdldExwQXNzZXRGcm9tUG9vbEFzc2V0c1JFQURPTkxZCQDMCAIFCGFzc2V0T3V0CQDMCAIFB2Fzc2V0SW4FA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAQLJHQwMjYxNjMwNzUDCQECIT0CBQxscE5vblJldmVyc2UFBHVuaXQEBHBvb2wKAAFACQD8BwQFD2ZhY3RvcnlDb250cmFjdAIhZ2V0UG9vbEFkZHJlc3NGcm9tTHBBc3NldFJFQURPTkxZCQDMCAIJAQV2YWx1ZQEFDGxwTm9uUmV2ZXJzZQUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nCQCUCgIHBQRwb29sAwkBAiE9AgUJbHBSZXZlcnNlBQR1bml0BARwb29sCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCIWdldFBvb2xBZGRyZXNzRnJvbUxwQXNzZXRSRUFET05MWQkAzAgCCQEFdmFsdWUBBQlscFJldmVyc2UFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwkAlAoCBgUEcG9vbAUMcG9vbE5vdEV4aXN0BAlpc1JldmVyc2UIBQskdDAyNjE2MzA3NQJfMQQEcG9vbAgFCyR0MDI2MTYzMDc1Al8yBApwb29sU3RhdHVzCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCFWdldFBvb2xTdGF0dXNSRUFET05MWQkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQEBWNoZWNrAwkAAAIFCnBvb2xTdGF0dXMAAQYFDHBvb2xEaXNhYmxlZAMJAAACBQVjaGVjawUFY2hlY2sEB3Bvb2xBZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIFBHBvb2wCAAkAlAoCBQdwb29sQWRyBQlpc1JldmVyc2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CAWkBFXN3YXBDYWxjdWxhdGVSRUFET05MWQMIYW1vdW50SW4HYXNzZXRJbghhc3NldE91dAQFcHJGZWUJAQV2YWx1ZQEJAJ8IAQkBC3Byb3RvY29sRmVlAAQVZmVlUHJvdG9jb2xBbW91bnRDYWxjCQC8AgMJALYCAQUIYW1vdW50SW4JALYCAQUFcHJGZWUFCGZlZVNjYWxlBAVwbEZlZQkBBXZhbHVlAQkAnwgBCQEHcG9vbEZlZQAEEWZlZVBvb2xBbW91bnRDYWxjCQC8AgMJALYCAQUIYW1vdW50SW4JALYCAQUFcGxGZWUFCGZlZVNjYWxlBBFmZWVQcm90b2NvbEFtb3VudAMJAAACCQCgAwEFFWZlZVByb3RvY29sQW1vdW50Q2FsYwAACQC2AgEAAQUVZmVlUHJvdG9jb2xBbW91bnRDYWxjBA1mZWVQb29sQW1vdW50AwkAAAIJAKADAQURZmVlUG9vbEFtb3VudENhbGMAAAkAtgIBAAEFEWZlZVBvb2xBbW91bnRDYWxjBA1jbGVhbkFtb3VudEluCQC4AgIJALgCAgkAtgIBBQhhbW91bnRJbgURZmVlUHJvdG9jb2xBbW91bnQFDWZlZVBvb2xBbW91bnQECyR0MDQwNjM0MTQxCQEgZ2V0UG9vbEFkZHJlc3NBbmRDaGVja1Bvb2xTdGF0dXMCBQdhc3NldEluBQhhc3NldE91dAQHcG9vbEFkcggFCyR0MDQwNjM0MTQxAl8xBAlpc1JldmVyc2UIBQskdDA0MDYzNDE0MQJfMgQDcmVzCgABQAkA/AcEBQdwb29sQWRyAiFjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwUkVBRE9OTFkJAMwIAgkAoAMBBQ1jbGVhbkFtb3VudEluCQDMCAIFCWlzUmV2ZXJzZQkAzAgCCQCgAwEFDWZlZVBvb2xBbW91bnQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAkAlAoCBQNuaWwFA3JlcwFpAQRzd2FwAwxhbW91bnRPdXRNaW4LYXNzZXRPdXRSYXcJYWRkcmVzc1RvBAhhc3NldE91dAMJAAACBQthc3NldE91dFJhdwIAAgVXQVZFUwULYXNzZXRPdXRSYXcEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldEluAwkAAAIIBQNwbXQHYXNzZXRJZAUEdW5pdAIFV0FWRVMJANgEAQkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAhhbW91bnRJbgkBBXZhbHVlAQgFA3BtdAZhbW91bnQEBXByRmVlCQEFdmFsdWUBCQCfCAEJAQtwcm90b2NvbEZlZQAEFWZlZVByb3RvY29sQW1vdW50Q2FsYwkAvAIDCQC2AgEFCGFtb3VudEluCQC2AgEFBXByRmVlBQhmZWVTY2FsZQQFcGxGZWUJAQV2YWx1ZQEJAJ8IAQkBB3Bvb2xGZWUABBFmZWVQb29sQW1vdW50Q2FsYwkAvAIDCQC2AgEFCGFtb3VudEluCQC2AgEFBXBsRmVlBQhmZWVTY2FsZQQRZmVlUHJvdG9jb2xBbW91bnQDCQAAAgkAoAMBBRVmZWVQcm90b2NvbEFtb3VudENhbGMAAAkAtgIBAAEFFWZlZVByb3RvY29sQW1vdW50Q2FsYwQNZmVlUG9vbEFtb3VudAMJAAACCQCgAwEFEWZlZVBvb2xBbW91bnRDYWxjAAAJALYCAQABBRFmZWVQb29sQW1vdW50Q2FsYwQNY2xlYW5BbW91bnRJbgkAuAICCQC4AgIJALYCAQUIYW1vdW50SW4FEWZlZVByb3RvY29sQW1vdW50BQ1mZWVQb29sQW1vdW50BAZjaGVja3MJAMwIAgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEGCQACAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MECyR0MDUzNDM1NDIxCQEgZ2V0UG9vbEFkZHJlc3NBbmRDaGVja1Bvb2xTdGF0dXMCBQdhc3NldEluBQhhc3NldE91dAQHcG9vbEFkcggFCyR0MDUzNDM1NDIxAl8xBAlpc1JldmVyc2UIBQskdDA1MzQzNTQyMQJfMgQWYXNzZXRJbkF0dGFjaGVkUGF5bWVudAMJAAACBQdhc3NldEluAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldEluBAt0b3RhbEdldFJhdwoAAUAJAPwHBAUHcG9vbEFkcgImY2FsY3VsYXRlQW1vdW50T3V0Rm9yU3dhcEFuZFNlbmRUb2tlbnMJAMwIAgkAoAMBBQ1jbGVhbkFtb3VudEluCQDMCAIFCWlzUmV2ZXJzZQkAzAgCBQxhbW91bnRPdXRNaW4JAMwIAgUJYWRkcmVzc1RvCQDMCAIJAKADAQUNZmVlUG9vbEFtb3VudAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBRZhc3NldEluQXR0YWNoZWRQYXltZW50CQCgAwEFDWNsZWFuQW1vdW50SW4FA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRNmZWVDb2xsZWN0b3JBZGRyZXNzCQCgAwEFEWZlZVByb3RvY29sQW1vdW50BRZhc3NldEluQXR0YWNoZWRQYXltZW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFB3Bvb2xBZHIJAKADAQUNZmVlUG9vbEFtb3VudAUWYXNzZXRJbkF0dGFjaGVkUGF5bWVudAUDbmlsBQt0b3RhbEdldFJhdwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAED3RhcmdldFB1YmxpY0tleQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwBQJwawMJAAECBQckbWF0Y2gwAgRVbml0CAUCdHgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFD3RhcmdldFB1YmxpY0tleQoA0Bo=", "height": 2571656, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 61Ugg3z9sEYP74ELdkP4JTk42NJrLNhnEiq29rFuqaXq Next: iagmBQd5s4ACoPgKuu5dDpiEWRo7oDUQSJ43x9jpEQA Diff:
OldNewDifferences
1717 func keyManagerPublicKey () = "%s__managerPublicKey"
1818
1919
20-func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
20+func keyManagerVaultAddress () = "%s__managerVaultAddress"
2121
2222
2323 func fc () = "%s__factoryContract"
3838
3939 let feeCollectorAddress = addressFromStringValue(getStringOrFailFromAddress(factoryContract, keyFeeCollectorAddress))
4040
41+func getManagerVaultAddressOrThis () = match getString(keyManagerVaultAddress()) {
42+ case s: String =>
43+ addressFromStringValue(s)
44+ case _ =>
45+ this
46+}
47+
48+
4149 func asInt (val) = match val {
4250 case valInt: Int =>
4351 valInt
4957 func dataMappingPoolAssets (internalAmountAssetStr,internalPriceAssetStr) = makeString(["%d%d", toString(internalAmountAssetStr), toString(internalPriceAssetStr)], SEP)
5058
5159
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-}
60+func managerPublicKeyOrUnit () = {
61+ let managerVaultAddress = getManagerVaultAddressOrThis()
62+ match getString(managerVaultAddress, keyManagerPublicKey()) {
63+ case s: String =>
64+ fromBase58String(s)
65+ case _: Unit =>
66+ unit
67+ case _ =>
68+ throw("Match error")
69+ }
70+ }
7071
7172
7273 func isManager (i) = match managerPublicKeyOrUnit() {
102103 then @
103104 else unit
104105 }
105- let $t025332992 = if ((lpNonReverse != unit))
106+ let $t026163075 = if ((lpNonReverse != unit))
106107 then {
107108 let pool = {
108109 let @ = invoke(factoryContract, "getPoolAddressFromLpAssetREADONLY", [value(lpNonReverse)], nil)
123124 $Tuple2(true, pool)
124125 }
125126 else poolNotExist
126- let isReverse = $t025332992._1
127- let pool = $t025332992._2
127+ let isReverse = $t026163075._1
128+ let pool = $t026163075._2
128129 let poolStatus = {
129130 let @ = invoke(factoryContract, "getPoolStatusREADONLY", [pool], nil)
130131 if ($isInstanceOf(@, "Int"))
156157 then toBigInt(1)
157158 else feePoolAmountCalc
158159 let cleanAmountIn = ((toBigInt(amountIn) - feeProtocolAmount) - feePoolAmount)
159- let $t039804058 = getPoolAddressAndCheckPoolStatus(assetIn, assetOut)
160- let poolAdr = $t039804058._1
161- let isReverse = $t039804058._2
160+ let $t040634141 = getPoolAddressAndCheckPoolStatus(assetIn, assetOut)
161+ let poolAdr = $t040634141._1
162+ let isReverse = $t040634141._2
162163 let res = {
163164 let @ = invoke(poolAdr, "calculateAmountOutForSwapREADONLY", [toInt(cleanAmountIn), isReverse, toInt(feePoolAmount)], nil)
164165 if ($isInstanceOf(@, "Int"))
196197 else throw("exactly 1 payment are expected")]
197198 if ((checks == checks))
198199 then {
199- let $t052605338 = getPoolAddressAndCheckPoolStatus(assetIn, assetOut)
200- let poolAdr = $t052605338._1
201- let isReverse = $t052605338._2
200+ let $t053435421 = getPoolAddressAndCheckPoolStatus(assetIn, assetOut)
201+ let poolAdr = $t053435421._1
202+ let isReverse = $t053435421._2
202203 let assetInAttachedPayment = if ((assetIn == "WAVES"))
203204 then unit
204205 else fromBase58String(assetIn)
209210 else throw(($getType(@) + " couldn't be cast to Int"))
210211 }
211212 $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.")
247213 }
248214 else throw("Strict value is not equal to itself.")
249215 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let feeScale = toBigInt(100000000)
77
88 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), ("No data for this.key=" + key))
99
1010
1111 let poolDisabled = throw("Pool disabled")
1212
1313 let poolNotExist = throw("Pool is not exist")
1414
1515 let slippageTooBig = throw("Slippage is too big")
1616
1717 func keyManagerPublicKey () = "%s__managerPublicKey"
1818
1919
20-func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
20+func keyManagerVaultAddress () = "%s__managerVaultAddress"
2121
2222
2323 func fc () = "%s__factoryContract"
2424
2525
2626 let factoryContract = addressFromStringValue(getStringOrFail(fc()))
2727
2828 func protocolFee () = makeString(["%s", "protocolFee"], SEP)
2929
3030
3131 func poolFee () = makeString(["%s", "poolFee"], SEP)
3232
3333
3434 func getStringOrFailFromAddress (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
3535
3636
3737 let keyFeeCollectorAddress = "%s__feeCollectorAddress"
3838
3939 let feeCollectorAddress = addressFromStringValue(getStringOrFailFromAddress(factoryContract, keyFeeCollectorAddress))
4040
41+func getManagerVaultAddressOrThis () = match getString(keyManagerVaultAddress()) {
42+ case s: String =>
43+ addressFromStringValue(s)
44+ case _ =>
45+ this
46+}
47+
48+
4149 func asInt (val) = match val {
4250 case valInt: Int =>
4351 valInt
4452 case _ =>
4553 throw("fail to cast into Int")
4654 }
4755
4856
4957 func dataMappingPoolAssets (internalAmountAssetStr,internalPriceAssetStr) = makeString(["%d%d", toString(internalAmountAssetStr), toString(internalPriceAssetStr)], SEP)
5058
5159
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-}
60+func managerPublicKeyOrUnit () = {
61+ let managerVaultAddress = getManagerVaultAddressOrThis()
62+ match getString(managerVaultAddress, keyManagerPublicKey()) {
63+ case s: String =>
64+ fromBase58String(s)
65+ case _: Unit =>
66+ unit
67+ case _ =>
68+ throw("Match error")
69+ }
70+ }
7071
7172
7273 func isManager (i) = match managerPublicKeyOrUnit() {
7374 case pk: ByteVector =>
7475 (i.callerPublicKey == pk)
7576 case _: Unit =>
7677 (i.caller == this)
7778 case _ =>
7879 throw("Match error")
7980 }
8081
8182
8283 func mustManager (i) = if (isManager(i))
8384 then true
8485 else throw("permission denied")
8586
8687
8788 func getAccBalance (assetId) = if ((assetId == "WAVES"))
8889 then wavesBalance(this).available
8990 else assetBalance(this, fromBase58String(assetId))
9091
9192
9293 func getPoolAddressAndCheckPoolStatus (assetIn,assetOut) = {
9394 let lpNonReverse = {
9495 let @ = invoke(factoryContract, "getLpAssetFromPoolAssetsREADONLY", [assetIn, assetOut], nil)
9596 if ($isInstanceOf(@, "String"))
9697 then @
9798 else unit
9899 }
99100 let lpReverse = {
100101 let @ = invoke(factoryContract, "getLpAssetFromPoolAssetsREADONLY", [assetOut, assetIn], nil)
101102 if ($isInstanceOf(@, "String"))
102103 then @
103104 else unit
104105 }
105- let $t025332992 = if ((lpNonReverse != unit))
106+ let $t026163075 = if ((lpNonReverse != unit))
106107 then {
107108 let pool = {
108109 let @ = invoke(factoryContract, "getPoolAddressFromLpAssetREADONLY", [value(lpNonReverse)], nil)
109110 if ($isInstanceOf(@, "String"))
110111 then @
111112 else throw(($getType(@) + " couldn't be cast to String"))
112113 }
113114 $Tuple2(false, pool)
114115 }
115116 else if ((lpReverse != unit))
116117 then {
117118 let pool = {
118119 let @ = invoke(factoryContract, "getPoolAddressFromLpAssetREADONLY", [value(lpReverse)], nil)
119120 if ($isInstanceOf(@, "String"))
120121 then @
121122 else throw(($getType(@) + " couldn't be cast to String"))
122123 }
123124 $Tuple2(true, pool)
124125 }
125126 else poolNotExist
126- let isReverse = $t025332992._1
127- let pool = $t025332992._2
127+ let isReverse = $t026163075._1
128+ let pool = $t026163075._2
128129 let poolStatus = {
129130 let @ = invoke(factoryContract, "getPoolStatusREADONLY", [pool], nil)
130131 if ($isInstanceOf(@, "Int"))
131132 then @
132133 else throw(($getType(@) + " couldn't be cast to Int"))
133134 }
134135 let check = if ((poolStatus == 1))
135136 then true
136137 else poolDisabled
137138 if ((check == check))
138139 then {
139140 let poolAdr = addressFromStringValue(valueOrElse(pool, ""))
140141 $Tuple2(poolAdr, isReverse)
141142 }
142143 else throw("Strict value is not equal to itself.")
143144 }
144145
145146
146147 @Callable(i)
147148 func swapCalculateREADONLY (amountIn,assetIn,assetOut) = {
148149 let prFee = value(getInteger(protocolFee()))
149150 let feeProtocolAmountCalc = fraction(toBigInt(amountIn), toBigInt(prFee), feeScale)
150151 let plFee = value(getInteger(poolFee()))
151152 let feePoolAmountCalc = fraction(toBigInt(amountIn), toBigInt(plFee), feeScale)
152153 let feeProtocolAmount = if ((toInt(feeProtocolAmountCalc) == 0))
153154 then toBigInt(1)
154155 else feeProtocolAmountCalc
155156 let feePoolAmount = if ((toInt(feePoolAmountCalc) == 0))
156157 then toBigInt(1)
157158 else feePoolAmountCalc
158159 let cleanAmountIn = ((toBigInt(amountIn) - feeProtocolAmount) - feePoolAmount)
159- let $t039804058 = getPoolAddressAndCheckPoolStatus(assetIn, assetOut)
160- let poolAdr = $t039804058._1
161- let isReverse = $t039804058._2
160+ let $t040634141 = getPoolAddressAndCheckPoolStatus(assetIn, assetOut)
161+ let poolAdr = $t040634141._1
162+ let isReverse = $t040634141._2
162163 let res = {
163164 let @ = invoke(poolAdr, "calculateAmountOutForSwapREADONLY", [toInt(cleanAmountIn), isReverse, toInt(feePoolAmount)], nil)
164165 if ($isInstanceOf(@, "Int"))
165166 then @
166167 else throw(($getType(@) + " couldn't be cast to Int"))
167168 }
168169 $Tuple2(nil, res)
169170 }
170171
171172
172173
173174 @Callable(i)
174175 func swap (amountOutMin,assetOutRaw,addressTo) = {
175176 let assetOut = if ((assetOutRaw == ""))
176177 then "WAVES"
177178 else assetOutRaw
178179 let pmt = value(i.payments[0])
179180 let assetIn = if ((pmt.assetId == unit))
180181 then "WAVES"
181182 else toBase58String(value(pmt.assetId))
182183 let amountIn = value(pmt.amount)
183184 let prFee = value(getInteger(protocolFee()))
184185 let feeProtocolAmountCalc = fraction(toBigInt(amountIn), toBigInt(prFee), feeScale)
185186 let plFee = value(getInteger(poolFee()))
186187 let feePoolAmountCalc = fraction(toBigInt(amountIn), toBigInt(plFee), feeScale)
187188 let feeProtocolAmount = if ((toInt(feeProtocolAmountCalc) == 0))
188189 then toBigInt(1)
189190 else feeProtocolAmountCalc
190191 let feePoolAmount = if ((toInt(feePoolAmountCalc) == 0))
191192 then toBigInt(1)
192193 else feePoolAmountCalc
193194 let cleanAmountIn = ((toBigInt(amountIn) - feeProtocolAmount) - feePoolAmount)
194195 let checks = [if ((size(i.payments) == 1))
195196 then true
196197 else throw("exactly 1 payment are expected")]
197198 if ((checks == checks))
198199 then {
199- let $t052605338 = getPoolAddressAndCheckPoolStatus(assetIn, assetOut)
200- let poolAdr = $t052605338._1
201- let isReverse = $t052605338._2
200+ let $t053435421 = getPoolAddressAndCheckPoolStatus(assetIn, assetOut)
201+ let poolAdr = $t053435421._1
202+ let isReverse = $t053435421._2
202203 let assetInAttachedPayment = if ((assetIn == "WAVES"))
203204 then unit
204205 else fromBase58String(assetIn)
205206 let totalGetRaw = {
206207 let @ = invoke(poolAdr, "calculateAmountOutForSwapAndSendTokens", [toInt(cleanAmountIn), isReverse, amountOutMin, addressTo, toInt(feePoolAmount)], [AttachedPayment(assetInAttachedPayment, toInt(cleanAmountIn))])
207208 if ($isInstanceOf(@, "Int"))
208209 then @
209210 else throw(($getType(@) + " couldn't be cast to Int"))
210211 }
211212 $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.")
247213 }
248214 else throw("Strict value is not equal to itself.")
249215 }
250216
251217
252218 @Verifier(tx)
253219 func verify () = {
254220 let targetPublicKey = match managerPublicKeyOrUnit() {
255221 case pk: ByteVector =>
256222 pk
257223 case _: Unit =>
258224 tx.senderPublicKey
259225 case _ =>
260226 throw("Match error")
261227 }
262228 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
263229 }
264230

github/deemru/w8io/3ef1775 
64.07 ms