tx · 4C4Gkw4W6b4SUnQTtWDkQ6QfBmrQKYTYHwcztPB3PNYj

3P5NsLwjzAmDwChRouCrBjGxzu8rgkR25Xx:  -0.01000000 Waves

2023.05.13 12:03 [3641421] smart account 3P5NsLwjzAmDwChRouCrBjGxzu8rgkR25Xx > SELF 0.00000000 Waves

{ "type": 13, "id": "4C4Gkw4W6b4SUnQTtWDkQ6QfBmrQKYTYHwcztPB3PNYj", "fee": 1000000, "feeAssetId": null, "timestamp": 1683968648494, "version": 2, "chainId": 87, "sender": "3P5NsLwjzAmDwChRouCrBjGxzu8rgkR25Xx", "senderPublicKey": "9nF7sQoZcskcPAt61qPKSvxJ92QZyU5rhKBrr5AfJ1YQ", "proofs": [ "4nAez2mCmuTmuHAbkxwQe6G5hdEd6pp87zDUboPn3UzZ952NDPV5W7U6apfcJrUno2wbc6eoGrQ6gnSdDGwQJYmc" ], "script": "base64:BgKdDAgCEgAiBlNjYWxlNiIMU2NhbGU2QmlnSW50IgpaZXJvQmlnSW50IgZTY2FsZTgiDFNjYWxlOEJpZ0ludCIDU0VQIgdJblNjYWxlIgpJbkRlY2ltYWxzIg1JblNjYWxlQmlnSW50IgdJbkFzc2V0IgZjYWxsZXIiCHJlY2VpdmVyIg13eFN3YXBBZGRyZXNzIg50aGlzQWRkcmVzc1N0ciIKZ2V0QmFsYW5jZSIFYXNzZXQiD2dldEFzc2V0T3JXYXZlcyIIYXNzZXRTdHIiCWluQmFsYW5jZSIPaW5CYWxhbmNlQmlnSW50IgtnZXRTd29wUG9vbCIEcG9vbCILYXNzZXRJZEFTdHIiC2Fzc2V0SWRCU3RyIghhc3NldElkQSIIYXNzZXRJZEIiCGJhbGFuY2VBIghiYWxhbmNlQiIGb3V0RmVlIhRrZXlBZGRpdGlvbmFsQmFsYW5jZSIHYXNzZXRJZCIWa2V5U3Rha2luZ0Fzc2V0QmFsYW5jZSIaZ2V0QWRkaXRpb25hbEJhbGFuY2VPclplcm8iHGdldFN0YWtpbmdBc3NldEJhbGFuY2VPclplcm8iE2dldFd4QWNjb3VudEJhbGFuY2UiDWJhbGFuY2VPblBvb2wiDHRvdGFsQmFsYW5jZSIJZ2V0V3hQb29sIgtwcm90b2NvbEZlZSIHcG9vbEZlZSIFaW5GZWUiCGNhbGNTd2FwIglwbXRBbW91bnQiCXRva2VuRnJvbSIHdG9rZW5UbyILY2xlYW5BbW91bnQiEGFtb3VudFdpdGhvdXRGZWUiDWFtb3VudFdpdGhGZWUiDGVzdGltYXRlU3dhcCIIcG9vbEluZm8iB2luQXNzZXQiCGluQW1vdW50Iglyb3V0ZUFyZ3MiCGRhcHBBcmdzIg1lc3RpbWF0ZVJvdXRlIgVwb29sMSIFcG9vbDIiBXBvb2wzIgxwb29sMVJldmVyc2UiDHBvb2wyUmV2ZXJzZSIMcG9vbDNSZXZlcnNlIgNhMTIiA2EyMSIDYTIzIgNhMzIiA2EzMSIDYTEzIg1hYURlbm9taW5hdG9yIgRhYTEzIgRhYTMxIgxhRGVub21pbmF0b3IiAWEiAmFhIgVkZWx0YSIFaW5wdXQiBXN3YXAxIgVzd2FwMiIFc3dhcDMiCmludm9rZVN3YXAiBGFyZ3MiDmN1cnJlbnRCYWxhbmNlIg10cmltbWVkQW1vdW50IgxyZXN1bHRBbW91bnQiEXN3b3BfZXRocHB0X3dhdmVzIgxzd29wX3B3cl94dG4iDnN3b3Bfd2F2ZXNfeHRuIhJzd29wX3dhdmVzX3VzZHRwcHQiC3N3b3Bfd3hfeHRuIg13eF9idGN3eGdfeHRuIg93eF9ldGhwcHRfd2F2ZXMiEXd4X2V0aHBwdF91c2R0cHB0Ig93eF9ldGh3eGdfd2F2ZXMiDXd4X2V0aHd4Z194dG4iDXd4X25zYnRfd2F2ZXMiC3d4X25zYnRfeHRuIgx3eF9wd3Jfd2F2ZXMiDXd4X3N1cmZfd2F2ZXMiD3d4X3N1cmZfdXNkY3d4ZyIPd3hfc3VyZl91c2R0d3hnIg93eF9zd2F2ZXNfd2F2ZXMiDXd4X3N3YXZlc194dG4iDnd4X3VzZHRwcHRfeHRuIg53eF92aXJlc193YXZlcyIMd3hfdmlyZXNfeHRuIg93eF93YXZlc19idGN3eGciDHd4X3dhdmVzX3h0biIQd3hfd2F2ZXNfdXNkdHBwdCIQd3hfd2F2ZXNfdXNkY3d4ZyIQd3hfd2F2ZXNfdXNkdHd4ZyINd3hfd3hfdXNkdHd4ZyILd3hfd3hfd2F2ZXMiCXd4X3d4X3h0biIGcm91dGVzIgFpIg1hY2N1bUZ1bmN0aW9uIgVhY2N1bSIEbmV4dCIKZXN0aW1hdGlvbiIEZm9sZCICJGwiAiRzIgUkYWNjMCIFJGYwXzEiAiRhIgIkaSIFJGYwXzIiDW1heFN3YXBQcm9maXQiD2VzdGltYXRlZFJlc3VsdCIHcmVzdWx0MSIHcmVzdWx0MiIHcmVzdWx0MyIGcHJvZml0IgpwdXJlUHJvZml0OwABYQDAhD0AAWIJALYCAQUBYQABYwkAtgIBAAAAAWQAgMLXLwABZQkAtgIBBQFkAAFmAgJfXwABZwCAwtcvAAFoAAgAAWkJALYCAQUBZwABagUEdW5pdAABawkBB0FkZHJlc3MBARoBVynC/E/Rr/hWmH218H5B3YNkoXx/jz1ZAAABbAkBB0FkZHJlc3MBARoBVynC/E/Rr/hWmH218H5B3YNkoXx/jz1ZAAABbQkBB0FkZHJlc3MBARoBVy4qNTWxDbfxeT7ht0bQnnRSTXsx0IOuBgABbgkApQgBBQR0aGlzAQFvAQFwAwkAAAIFAXAFBHVuaXQICQDvBwEFBHRoaXMHcmVndWxhcgkA8AcCBQR0aGlzCQEFdmFsdWUBBQFwAQFxAQFyAwkAAAIFAXICBVdBVkVTBQR1bml0CQDZBAEFAXIAAXMJAQFvAQUBagABdAkAtgIBBQFzAQF1AQF2BAF3CQERQGV4dHJOYXRpdmUoMTA1MykCBQF2AgpBX2Fzc2V0X2lkBAF4CQERQGV4dHJOYXRpdmUoMTA1MykCBQF2AgpCX2Fzc2V0X2lkBAF5CQEBcQEFAXcEAXoJAQFxAQUBeAQBQQkBEUBleHRyTmF0aXZlKDEwNTApAgUBdgIPQV9hc3NldF9iYWxhbmNlBAFCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQF2Ag9CX2Fzc2V0X2JhbGFuY2UEAUMJALgCAgUBYgkAtgIBCQERQGV4dHJOYXRpdmUoMTA1MCkCBQF2Agpjb21taXNzaW9uCQCbCgkJALYCAQUBQQkAtgIBBQFCBQF5BQF6BQF3BQF4BQFiBQFDBQF2AQFEAQFFCQC5CQIJAMwIAgIEJXMlcwkAzAgCAg1zdGFrZWRCYWxhbmNlCQDMCAIFAUUFA25pbAUBZgEBRgEBRQkAuQkCCQDMCAICBCVzJXMJAMwIAgIRc2hhcmVBc3NldEJhbGFuY2UJAMwIAgUBRQUDbmlsBQFmAQFHAgF2AUUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUBdgkBAUQBBQFFAAABAUgCAXYBRQkBC3ZhbHVlT3JFbHNlAgkAmggCBQF2CQEBRgEFAUUAAAEBSQIBdgFFBAFKAwkAAAIFAUUCBVdBVkVTCAkA7wcBBQF2CWF2YWlsYWJsZQkA8AcCBQF2CQDZBAEFAUUEAUsJAGUCCQBkAgUBSgkBAUcCBQF2BQFFCQEBSAIFAXYFAUUJAJYDAQkAzAgCAAAJAMwIAgUBSwUDbmlsAQFMAQF2BAF3CQERQGV4dHJOYXRpdmUoMTA1MykCBQF2Ag8lc19fYW1vdW50QXNzZXQEAXgJARFAZXh0ck5hdGl2ZSgxMDUzKQIFAXYCDiVzX19wcmljZUFzc2V0BAF5CQEBcQEFAXcEAXoJAQFxAQUBeAQBQQkBAUkCBQF2BQF3BAFCCQEBSQIFAXYFAXgEAU0JARFAZXh0ck5hdGl2ZSgxMDUwKQIFAW0CDyVzX19wcm90b2NvbEZlZQQBTgkBEUBleHRyTmF0aXZlKDEwNTApAgUBbQILJXNfX3Bvb2xGZWUEAU8JALgCAgUBYgkAvAIDCQC2AgEJAGQCBQFNBQFOBQFiBQFlCQCbCgkJALYCAQUBQQkAtgIBBQFCBQF5BQF6BQF3BQF4BQFPBQFiBQFtAQFQBQFRAVIBUwFPAUMEAVQJALwCAwUBUQUBTwUBYgQBVQkAvAIDBQFTBQFUCQC3AgIFAVQFAVIEAVYJALwCAwUBVQUBQwUBYgUBVgEBVwMBWAFZAVoEAmFhAwkAAAIFAVkIBQFYAl8zCQCVCgMIBQFYAl80CAUBWAJfNgkBAVAFBQFaCAUBWAJfMQgFAVgCXzIIBQFYAl83CAUBWAJfOAkAlQoDCAUBWAJfMwgFAVgCXzUJAQFQBQUBWggFAVgCXzIIBQFYAl8xCAUBWAJfNwgFAVgCXzgEAmFiAwkAAAIIBQFYAl85BQFtCQCUCgICBHN3YXAJAMwIAgAACQDMCAIIBQJhYQJfMgkAzAgCBQFuBQNuaWwJAJQKAgIIZXhjaGFuZ2UJAMwIAgABBQNuaWwJAJYKBAgFAmFhAl8xCAUCYWECXzMIBQJhYgJfMQgFAmFiAl8yAQJhYwYCYWQCYWUCYWYCYWcCYWgCYWkEAmFqAwUCYWcIBQJhZAJfMggFAmFkAl8xBAJhawMFAmFnCAUCYWQCXzEIBQJhZAJfMgQCYWwDBQJhaAgFAmFlAl8yCAUCYWUCXzEEAmFtAwUCYWgIBQJhZQJfMQgFAmFlAl8yBAJhbgMFAmFpCAUCYWYCXzIIBQJhZgJfMQQCYW8DBQJhaQgFAmFmAl8xCAUCYWYCXzIEAmFwCQC3AgIFAmFsCQC8AgMJALwCAwUCYWsIBQJhZAJfOAUBYggFAmFlAl83BQFiBAJhcQkAvAIDBQJhagUCYWwFAmFwBAJhcgkAvAIDCQC8AgMJALwCAwUCYWsFAmFtBQJhcAgFAmFlAl83BQFiCAUCYWUCXzgFAWIEAmFzCQC3AgIFAmFuCQC8AgMJALwCAwUCYXIIBQJhZAJfNwUBYggFAmFkAl84BQFiBAJhdAkAvAIDBQJhcQUCYW4FAmFzBAJhdQkAvAIDCQC8AgMJALwCAwUCYXIFAmFvBQJhcwgFAmFmAl83BQFiCAUCYWYCXzgFAWIEAmF2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AUwBCQEHQWRkcmVzcwEBGgFXvyExMPhYogtFPRYgqEzgsrm9PLX4ojcPAAJiZgkBAUwBCQEHQWRkcmVzcwEBGgFXrSscQu6KOPwUR+ZfLOrRHJYv6qJj/J1uAAJiZwkBAUwBCQEHQWRkcmVzcwEBGgFXmkQFmJm8tKiQ5rdVb7cYKMuIhtMFfR9WAAJiaAkBAUwBCQEHQWRkcmVzcwEBGgFXcP/GLmZEDfQ7+dCMZc3p0TNjnM9yD+GcAAJiaQkAzAgCCQCYCgYFAmJiBQJiaAUCYmcHBgcJAMwIAgkAmAoGBQJiZwUCYmgFAmJiBgcGCQDMCAIJAJgKBgUCYmIFAmFLBQJiYQcGBgkAzAgCCQCYCgYFAmJhBQJhSwUCYmIHBwYJAMwIAgkAmAoGBQJiYgUCYU8FAmFOBwYHCQDMCAIJAJgKBgUCYU4FAmFPBQJiYgYHBgkAzAgCCQCYCgYFAmJiBQJhRwUCYVIHBgcJAMwIAgkAmAoGBQJhUgUCYUcFAmJiBgcGCQDMCAIJAJgKBgUCYVMFAmFVBQJiZQYHBgkAzAgCCQCYCgYFAmJlBQJhVQUCYVMHBgcJAMwIAgkAmAoGBQJhUwUCYVQFAmJkBgcGCQDMCAIJAJgKBgUCYmQFAmFUBQJhUwcGBwkAzAgCCQCYCgYFAmJnBQJiZgUCYmUGBwYJAMwIAgkAmAoGBQJiZQUCYmYFAmJnBwYHCQDMCAIJAJgKBgUCYmIFAmFRBQJhUAcGBwkAzAgCCQCYCgYFAmFQBQJhUQUCYmIGBwYJAMwIAgkAmAoGBQJiYgUCYVcFAmFWBwYHCQDMCAIJAJgKBgUCYVYFAmFXBQJiYgYHBgkAzAgCCQCYCgYFAmJiBQJhWgUCYVkHBgcJAMwIAgkAmAoGBQJhWQUCYVoFAmJiBgcGCQDMCAIJAJgKBgUCYmIFAmFYBQJiYwcGBgkAzAgCCQCYCgYFAmJjBQJhWAUCYmIHBwYJAMwIAgkAmAoGBQJiYwUCYU0FAmFMBwYHCQDMCAIJAJgKBgUCYUwFAmFNBQJiYwYHBgkAzAgCCQCYCgYFAmJnBQJhSgUCYUgGBwYJAMwIAgkAmAoGBQJhSAUCYUoFAmJnBwYHCQDMCAIJAJgKBgUCYmIFAmFKBQJiZwcGBwkAzAgCCQCYCgYFAmJnBQJhSgUCYmIGBwYJAMwIAgkAmAoGBQJhRgUCYU0FAmFJBgcGCQDMCAIJAJgKBgUCYUkFAmFNBQJhRgcGBwUDbmlsAQJiagEHZGVmYXVsdAADCQECIT0CCAUCYmoGY2FsbGVyBQFrCQACAQICOkQKAQJiawICYmwCYm0EAmJuCQECYWMGCAUCYm0CXzEIBQJibQJfMggFAmJtAl8zCAUCYm0CXzQIBQJibQJfNQgFAmJtAl82CQCUCgIJAM0IAggFAmJsAl8xCAUCYm4CXzEJAM0IAggFAmJsAl8yCAUCYm4CXzIEAmJvCgACYnAFAmJpCgACYnEJAJADAQUCYnAKAAJicgkAlAoCBQNuaWwFA25pbAoBAmJzAgJidAJidQMJAGcCBQJidQUCYnEFAmJ0CQECYmsCBQJidAkAkQMCBQJicAUCYnUKAQJidgICYnQCYnUDCQBnAgUCYnUFAmJxBQJidAkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDMwCQECYnYCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCCQECYnMCBQJicgAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeBAJidwkAlgMBCAUCYm8CXzEDCQBnAgAABQJidwkAAgECDUVzdGltYXRlIGZhaWwEAmJ4CQCRAwIIBQJibwJfMgkBBXZhbHVlAQkAzwgCCAUCYm8CXzEFAmJ3BAJieQkBAmFBAQkAkQMCBQJieAAAAwkAAAIFAmJ5BQJieQQCYnoJAQJhQQEJAJEDAgUCYngAAQMJAAACBQJiegUCYnoEAmJBCQECYUEBCQCRAwIFAmJ4AAIDCQAAAgUCYkEFAmJBBAJiQgkAZQIJAQFvAQUBagUBcwQCYkMDCQBmAgkAagIIBQJiagNmZWUACgAACQBlAgUCYkIAgOiSJgkAZQIFAmJCAICJegMJAGcCAAAFAmJDCQACAQIMRXhlY3V0ZSBmYWlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAWwFAmJCBQFqBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AUalQKw==", "height": 3641421, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BEgHGPfwGV64oqw6fi133S4nqhbbx2dUMYcn8DQierNx Next: EdgjDSwgtroqzQL9exTRgifs3eim34Qy7ZZzZpNWvrC4 Diff:
OldNewDifferences
264264 let pureProfit = if (((i.fee % 10) > 0))
265265 then (profit - 80000000)
266266 else (profit - 2000000)
267- if ((pureProfit >= 0))
267+ if ((0 >= pureProfit))
268268 then throw("Execute fail")
269269 else [ScriptTransfer(receiver, profit, InAsset)]
270270 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let Scale6 = 1000000
55
66 let Scale6BigInt = toBigInt(Scale6)
77
88 let ZeroBigInt = toBigInt(0)
99
1010 let Scale8 = 100000000
1111
1212 let Scale8BigInt = toBigInt(Scale8)
1313
1414 let SEP = "__"
1515
1616 let InScale = 100000000
1717
1818 let InDecimals = 8
1919
2020 let InScaleBigInt = toBigInt(InScale)
2121
2222 let InAsset = unit
2323
2424 let caller = Address(base58'3P5ji1wvrDLQxgK5c3cGbiSwiZfu5x1S3VR')
2525
2626 let receiver = Address(base58'3P5ji1wvrDLQxgK5c3cGbiSwiZfu5x1S3VR')
2727
2828 let wxSwapAddress = Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93')
2929
3030 let thisAddressStr = toString(this)
3131
3232 func getBalance (asset) = if ((asset == unit))
3333 then wavesBalance(this).regular
3434 else assetBalance(this, value(asset))
3535
3636
3737 func getAssetOrWaves (assetStr) = if ((assetStr == "WAVES"))
3838 then unit
3939 else fromBase58String(assetStr)
4040
4141
4242 let inBalance = getBalance(InAsset)
4343
4444 let inBalanceBigInt = toBigInt(inBalance)
4545
4646 func getSwopPool (pool) = {
4747 let assetIdAStr = getStringValue(pool, "A_asset_id")
4848 let assetIdBStr = getStringValue(pool, "B_asset_id")
4949 let assetIdA = getAssetOrWaves(assetIdAStr)
5050 let assetIdB = getAssetOrWaves(assetIdBStr)
5151 let balanceA = getIntegerValue(pool, "A_asset_balance")
5252 let balanceB = getIntegerValue(pool, "B_asset_balance")
5353 let outFee = (Scale6BigInt - toBigInt(getIntegerValue(pool, "commission")))
5454 $Tuple9(toBigInt(balanceA), toBigInt(balanceB), assetIdA, assetIdB, assetIdAStr, assetIdBStr, Scale6BigInt, outFee, pool)
5555 }
5656
5757
5858 func keyAdditionalBalance (assetId) = makeString(["%s%s", "stakedBalance", assetId], SEP)
5959
6060
6161 func keyStakingAssetBalance (assetId) = makeString(["%s%s", "shareAssetBalance", assetId], SEP)
6262
6363
6464 func getAdditionalBalanceOrZero (pool,assetId) = valueOrElse(getInteger(pool, keyAdditionalBalance(assetId)), 0)
6565
6666
6767 func getStakingAssetBalanceOrZero (pool,assetId) = valueOrElse(getInteger(pool, keyStakingAssetBalance(assetId)), 0)
6868
6969
7070 func getWxAccountBalance (pool,assetId) = {
7171 let balanceOnPool = if ((assetId == "WAVES"))
7272 then wavesBalance(pool).available
7373 else assetBalance(pool, fromBase58String(assetId))
7474 let totalBalance = ((balanceOnPool + getAdditionalBalanceOrZero(pool, assetId)) - getStakingAssetBalanceOrZero(pool, assetId))
7575 max([0, totalBalance])
7676 }
7777
7878
7979 func getWxPool (pool) = {
8080 let assetIdAStr = getStringValue(pool, "%s__amountAsset")
8181 let assetIdBStr = getStringValue(pool, "%s__priceAsset")
8282 let assetIdA = getAssetOrWaves(assetIdAStr)
8383 let assetIdB = getAssetOrWaves(assetIdBStr)
8484 let balanceA = getWxAccountBalance(pool, assetIdAStr)
8585 let balanceB = getWxAccountBalance(pool, assetIdBStr)
8686 let protocolFee = getIntegerValue(wxSwapAddress, "%s__protocolFee")
8787 let poolFee = getIntegerValue(wxSwapAddress, "%s__poolFee")
8888 let inFee = (Scale6BigInt - fraction(toBigInt((protocolFee + poolFee)), Scale6BigInt, Scale8BigInt))
8989 $Tuple9(toBigInt(balanceA), toBigInt(balanceB), assetIdA, assetIdB, assetIdAStr, assetIdBStr, inFee, Scale6BigInt, wxSwapAddress)
9090 }
9191
9292
9393 func calcSwap (pmtAmount,tokenFrom,tokenTo,inFee,outFee) = {
9494 let cleanAmount = fraction(pmtAmount, inFee, Scale6BigInt)
9595 let amountWithoutFee = fraction(tokenTo, cleanAmount, (cleanAmount + tokenFrom))
9696 let amountWithFee = fraction(amountWithoutFee, outFee, Scale6BigInt)
9797 amountWithFee
9898 }
9999
100100
101101 func estimateSwap (poolInfo,inAsset,inAmount) = {
102102 let routeArgs = if ((inAsset == poolInfo._3))
103103 then $Tuple3(poolInfo._4, poolInfo._6, calcSwap(inAmount, poolInfo._1, poolInfo._2, poolInfo._7, poolInfo._8))
104104 else $Tuple3(poolInfo._3, poolInfo._5, calcSwap(inAmount, poolInfo._2, poolInfo._1, poolInfo._7, poolInfo._8))
105105 let dappArgs = if ((poolInfo._9 == wxSwapAddress))
106106 then $Tuple2("swap", [0, routeArgs._2, thisAddressStr])
107107 else $Tuple2("exchange", [1])
108108 $Tuple4(routeArgs._1, routeArgs._3, dappArgs._1, dappArgs._2)
109109 }
110110
111111
112112 func estimateRoute (pool1,pool2,pool3,pool1Reverse,pool2Reverse,pool3Reverse) = {
113113 let a12 = if (pool1Reverse)
114114 then pool1._2
115115 else pool1._1
116116 let a21 = if (pool1Reverse)
117117 then pool1._1
118118 else pool1._2
119119 let a23 = if (pool2Reverse)
120120 then pool2._2
121121 else pool2._1
122122 let a32 = if (pool2Reverse)
123123 then pool2._1
124124 else pool2._2
125125 let a31 = if (pool3Reverse)
126126 then pool3._2
127127 else pool3._1
128128 let a13 = if (pool3Reverse)
129129 then pool3._1
130130 else pool3._2
131131 let aaDenominator = (a23 + fraction(fraction(a21, pool1._8, Scale6BigInt), pool2._7, Scale6BigInt))
132132 let aa13 = fraction(a12, a23, aaDenominator)
133133 let aa31 = fraction(fraction(fraction(a21, a32, aaDenominator), pool2._7, Scale6BigInt), pool2._8, Scale6BigInt)
134134 let aDenominator = (a31 + fraction(fraction(aa31, pool1._7, Scale6BigInt), pool1._8, Scale6BigInt))
135135 let a = fraction(aa13, a31, aDenominator)
136136 let aa = fraction(fraction(fraction(aa31, a13, aDenominator), pool3._7, Scale6BigInt), pool3._8, Scale6BigInt)
137137 let delta = fraction((sqrtBigInt(fraction(fraction(fraction(aa, a, InScaleBigInt), pool1._7, Scale6BigInt), pool1._8, Scale6BigInt), InDecimals, InDecimals, CEILING) - a), Scale6BigInt, pool1._7)
138138 if ((ZeroBigInt >= delta))
139139 then $Tuple2(0, nil)
140140 else {
141141 let input = if ((delta > inBalanceBigInt))
142142 then inBalanceBigInt
143143 else delta
144144 let swap1 = estimateSwap(pool1, InAsset, input)
145145 let swap2 = estimateSwap(pool2, swap1._1, swap1._2)
146146 let swap3 = estimateSwap(pool3, swap2._1, swap2._2)
147147 $Tuple2(toInt((swap3._2 - input)), [$Tuple5(pool1._9, swap1._3, swap1._4, InAsset, toInt(input)), $Tuple5(pool2._9, swap2._3, swap2._4, swap1._1, toInt(swap1._2)), $Tuple5(pool3._9, swap3._3, swap3._4, swap2._1, toInt(swap2._2))])
148148 }
149149 }
150150
151151
152152 func invokeSwap (args) = {
153153 let currentBalance = getBalance(args._4)
154154 let trimmedAmount = if ((args._5 > currentBalance))
155155 then currentBalance
156156 else args._5
157157 let resultAmount = if ((args._4 == InAsset))
158158 then trimmedAmount
159159 else if ((currentBalance > args._5))
160160 then currentBalance
161161 else trimmedAmount
162162 invoke(args._1, args._2, args._3, [AttachedPayment(args._4, resultAmount)])
163163 }
164164
165165
166166 let swop_ethppt_waves = getSwopPool(Address(base58'3P3KU81iteCQxKb8u15yEPcABknLEcCvGyr'))
167167
168168 let swop_pwr_xtn = getSwopPool(Address(base58'3P88KDKWHNKNdbZxe8FfAJP8coAhvfDtuzV'))
169169
170170 let swop_waves_xtn = getSwopPool(Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG'))
171171
172172 let swop_waves_usdtppt = getSwopPool(Address(base58'3P2M9btqYdpENh1SkaHFDdc8XSjXHNiAXF5'))
173173
174174 let swop_wx_xtn = getSwopPool(Address(base58'3PKi4G3VX2k42ZSmNNrmvgdDH7JzRaUhY7R'))
175175
176176 let wx_btcwxg_xtn = getWxPool(Address(base58'3PCBWDTA6jrFswd7gQgaE3Xk7gLM5RKofvp'))
177177
178178 let wx_ethppt_waves = getWxPool(Address(base58'3P2yiVnK48evTLr8MAZWavpE4WA4fw1weQg'))
179179
180180 let wx_ethppt_usdtppt = getWxPool(Address(base58'3PATKQATPmnxLd5DjXg8FmbXXbKpA1BVAvS'))
181181
182182 let wx_ethwxg_waves = getWxPool(Address(base58'3P3XGTN6s292g9iwYhs3TEqJqHiffQYojuE'))
183183
184184 let wx_ethwxg_xtn = getWxPool(Address(base58'3PEMqetsaJDbYMw1XGovmE37FB8VUhGnX9A'))
185185
186186 let wx_nsbt_waves = getWxPool(Address(base58'3PPR4zVfWP4w4rshP541aiFtPNQN2sNJwrY'))
187187
188188 let wx_nsbt_xtn = getWxPool(Address(base58'3P97XQCT9VYMXBxasVpDsE7eZfQ6cR9eS9n'))
189189
190190 let wx_pwr_waves = getWxPool(Address(base58'3PDi7Qq8pLQYvtKyTfQuqqPUWyhoYbU957t'))
191191
192192 let wx_surf_waves = getWxPool(Address(base58'3PNnCngfvAzyvAQ1cEudZ3o6o3tFktsBVz5'))
193193
194194 let wx_surf_usdcwxg = getWxPool(Address(base58'3PBfTdcoKmMNxZcjP8eTokbLFqYTUdoNKWL'))
195195
196196 let wx_surf_usdtwxg = getWxPool(Address(base58'3PM6YyJauiFTZzVLuRcCkDwWBvWTvPYo1ZM'))
197197
198198 let wx_swaves_waves = getWxPool(Address(base58'3PDVaJDqCadWeBugf768XeKiXtCCLUrYMge'))
199199
200200 let wx_swaves_xtn = getWxPool(Address(base58'3PEmxUzcCbsAcw6Q3VNLTWdd8bjc8KBUEDz'))
201201
202202 let wx_usdtppt_xtn = getWxPool(Address(base58'3P5kfoYW7jPa9zYoTkN6Z6z8xtw8JGhymYB'))
203203
204204 let wx_vires_waves = getWxPool(Address(base58'3P7Z7X5kKXN4TpZ2SmqP2xyLGuotAqht1pU'))
205205
206206 let wx_vires_xtn = getWxPool(Address(base58'3P5HjPowgipiVB3UvXphDiPvKs424WC9xQw'))
207207
208208 let wx_waves_btcwxg = getWxPool(Address(base58'3PPQDcvXuwVToC2QNWzPwxmLxLzMw9Eoe8C'))
209209
210210 let wx_waves_xtn = getWxPool(Address(base58'3PPZWgFNRKHLvM51pwS934C8VZ7d2F4Z58g'))
211211
212212 let wx_waves_usdtppt = getWxPool(Address(base58'3PPeWowdyQLKwW9AExN5CgFa7X9ts7D4LkM'))
213213
214214 let wx_waves_usdcwxg = getWxPool(Address(base58'3P3g3eipfG2NZKKQE8DZXt2E9tRJqii9jcX'))
215215
216216 let wx_waves_usdtwxg = getWxPool(Address(base58'3PKMVZ7kQeaREajYi8Yc25Ro6mcNw5D6QSa'))
217217
218218 let wx_wx_usdtwxg = getWxPool(Address(base58'3PHiXGo7NTRoC2KqkMZ1y9LaA2QSrroGs8y'))
219219
220220 let wx_wx_waves = getWxPool(Address(base58'3PFzaH2ghpwANHFgjeva83N1yxzErELx2eh'))
221221
222222 let wx_wx_xtn = getWxPool(Address(base58'3PCENpEKe8atwELZ7oCSmcdEfcRuKTrUx99'))
223223
224224 let routes = [$Tuple6(wx_waves_xtn, wx_wx_xtn, wx_wx_waves, false, true, false), $Tuple6(wx_wx_waves, wx_wx_xtn, wx_waves_xtn, true, false, true), $Tuple6(wx_waves_xtn, wx_btcwxg_xtn, wx_waves_btcwxg, false, true, true), $Tuple6(wx_waves_btcwxg, wx_btcwxg_xtn, wx_waves_xtn, false, false, true), $Tuple6(wx_waves_xtn, wx_ethwxg_xtn, wx_ethwxg_waves, false, true, false), $Tuple6(wx_ethwxg_waves, wx_ethwxg_xtn, wx_waves_xtn, true, false, true), $Tuple6(wx_waves_xtn, swop_pwr_xtn, wx_pwr_waves, false, true, false), $Tuple6(wx_pwr_waves, swop_pwr_xtn, wx_waves_xtn, true, false, true), $Tuple6(wx_surf_waves, wx_surf_usdtwxg, wx_waves_usdtwxg, true, false, true), $Tuple6(wx_waves_usdtwxg, wx_surf_usdtwxg, wx_surf_waves, false, true, false), $Tuple6(wx_surf_waves, wx_surf_usdcwxg, wx_waves_usdcwxg, true, false, true), $Tuple6(wx_waves_usdcwxg, wx_surf_usdcwxg, wx_surf_waves, false, true, false), $Tuple6(wx_wx_waves, wx_wx_usdtwxg, wx_waves_usdtwxg, true, false, true), $Tuple6(wx_waves_usdtwxg, wx_wx_usdtwxg, wx_wx_waves, false, true, false), $Tuple6(wx_waves_xtn, wx_nsbt_xtn, wx_nsbt_waves, false, true, false), $Tuple6(wx_nsbt_waves, wx_nsbt_xtn, wx_waves_xtn, true, false, true), $Tuple6(wx_waves_xtn, wx_swaves_xtn, wx_swaves_waves, false, true, false), $Tuple6(wx_swaves_waves, wx_swaves_xtn, wx_waves_xtn, true, false, true), $Tuple6(wx_waves_xtn, wx_vires_xtn, wx_vires_waves, false, true, false), $Tuple6(wx_vires_waves, wx_vires_xtn, wx_waves_xtn, true, false, true), $Tuple6(wx_waves_xtn, wx_usdtppt_xtn, wx_waves_usdtppt, false, true, true), $Tuple6(wx_waves_usdtppt, wx_usdtppt_xtn, wx_waves_xtn, false, false, true), $Tuple6(wx_waves_usdtppt, wx_ethppt_usdtppt, wx_ethppt_waves, false, true, false), $Tuple6(wx_ethppt_waves, wx_ethppt_usdtppt, wx_waves_usdtppt, true, false, true), $Tuple6(wx_wx_waves, swop_wx_xtn, swop_waves_xtn, true, false, true), $Tuple6(swop_waves_xtn, swop_wx_xtn, wx_wx_waves, false, true, false), $Tuple6(wx_waves_xtn, swop_wx_xtn, wx_wx_waves, false, true, false), $Tuple6(wx_wx_waves, swop_wx_xtn, wx_waves_xtn, true, false, true), $Tuple6(swop_ethppt_waves, wx_ethppt_usdtppt, swop_waves_usdtppt, true, false, true), $Tuple6(swop_waves_usdtppt, wx_ethppt_usdtppt, swop_ethppt_waves, false, true, false)]
225225
226226 @Callable(i)
227227 func default () = if ((i.caller != caller))
228228 then throw(":D")
229229 else {
230230 func accumFunction (accum,next) = {
231231 let estimation = estimateRoute(next._1, next._2, next._3, next._4, next._5, next._6)
232232 $Tuple2((accum._1 :+ estimation._1), (accum._2 :+ estimation._2))
233233 }
234234
235235 let fold = {
236236 let $l = routes
237237 let $s = size($l)
238238 let $acc0 = $Tuple2(nil, nil)
239239 func $f0_1 ($a,$i) = if (($i >= $s))
240240 then $a
241241 else accumFunction($a, $l[$i])
242242
243243 func $f0_2 ($a,$i) = if (($i >= $s))
244244 then $a
245245 else throw("List size exceeds 30")
246246
247247 $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($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)
248248 }
249249 let maxSwapProfit = max(fold._1)
250250 if ((0 >= maxSwapProfit))
251251 then throw("Estimate fail")
252252 else {
253253 let estimatedResult = fold._2[value(indexOf(fold._1, maxSwapProfit))]
254254 let result1 = invokeSwap(estimatedResult[0])
255255 if ((result1 == result1))
256256 then {
257257 let result2 = invokeSwap(estimatedResult[1])
258258 if ((result2 == result2))
259259 then {
260260 let result3 = invokeSwap(estimatedResult[2])
261261 if ((result3 == result3))
262262 then {
263263 let profit = (getBalance(InAsset) - inBalance)
264264 let pureProfit = if (((i.fee % 10) > 0))
265265 then (profit - 80000000)
266266 else (profit - 2000000)
267- if ((pureProfit >= 0))
267+ if ((0 >= pureProfit))
268268 then throw("Execute fail")
269269 else [ScriptTransfer(receiver, profit, InAsset)]
270270 }
271271 else throw("Strict value is not equal to itself.")
272272 }
273273 else throw("Strict value is not equal to itself.")
274274 }
275275 else throw("Strict value is not equal to itself.")
276276 }
277277 }
278278
279279

github/deemru/w8io/3ef1775 
43.28 ms