tx · HnzTfBGpjsLa4j5sSyHJA5zFe6pgmRjuD56fUjj8zxu4

3PPumrPhPhQQdttZnTTi5KtJ5RwBuGku9XR:  -0.01300000 Waves

2023.05.09 15:57 [3635837] smart account 3PPumrPhPhQQdttZnTTi5KtJ5RwBuGku9XR > SELF 0.00000000 Waves

{ "type": 13, "id": "HnzTfBGpjsLa4j5sSyHJA5zFe6pgmRjuD56fUjj8zxu4", "fee": 1300000, "feeAssetId": null, "timestamp": 1683637047715, "version": 2, "chainId": 87, "sender": "3PPumrPhPhQQdttZnTTi5KtJ5RwBuGku9XR", "senderPublicKey": "BP6zaiRLoFEhtfZ3kJ1RfdmfaJKs3Q9jBaLdPdnRrjzM", "proofs": [ "5Z5gVsAYzXMa31C1XzQrG2FwsGFWRSL5XRpTofH3CuKzvobYeQd7hCUfFSAjy4dQdpargt6FynqGPnvyActYCBV6" ], "script": "base64:BgIECAISAG0ABlNjYWxlNgDAhD0ADFNjYWxlNkJpZ0ludAkAtgIBBQZTY2FsZTYABlNjYWxlOACAwtcvAAxTY2FsZThCaWdJbnQJALYCAQUGU2NhbGU4AApaZXJvQmlnSW50CQC2AgEAAAADU0VQAgJfXwAHSW5TY2FsZQCAwtcvAApJbkRlY2ltYWxzAAgADUluU2NhbGVCaWdJbnQJALYCAQUHSW5TY2FsZQAHSW5Bc3NldAUEdW5pdAAKSW5Bc3NldFN0cgIFV0FWRVMADXd4U3dhcEFkZHJlc3MJAQdBZGRyZXNzAQEaAVcuKjU1sQ238Xk+4bdG0J50Uk17MdCDrgYADnRoaXNBZGRyZXNzU3RyCQClCAEFBHRoaXMBDGdldEludE9yWmVybwEDa2V5CQELdmFsdWVPckVsc2UCCQCfCAEFA2tleQAAAAZjYWxsZXIJAQdBZGRyZXNzAQEaAVcr7Uuv7Xi/nRQppO4AFrhDr22DhCvr/cEBCmdldEJhbGFuY2UBBWFzc2V0AwkAAAIFBWFzc2V0BQR1bml0CAkA7wcBBQR0aGlzB3JlZ3VsYXIJAPAHAgUEdGhpcwkBBXZhbHVlAQUFYXNzZXQBD2dldEFzc2V0T3JXYXZlcwEIYXNzZXRTdHIDCQAAAgUIYXNzZXRTdHICBVdBVkVTBQR1bml0CQDZBAEFCGFzc2V0U3RyAAlpbkJhbGFuY2UJAQpnZXRCYWxhbmNlAQUHSW5Bc3NldAAPaW5CYWxhbmNlQmlnSW50CQC2AgEFCWluQmFsYW5jZQELZ2V0U3dvcFBvb2wBBHBvb2wEC2Fzc2V0SWRBU3RyCQERQGV4dHJOYXRpdmUoMTA1MykCBQRwb29sAgpBX2Fzc2V0X2lkBAthc3NldElkQlN0cgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEcG9vbAIKQl9hc3NldF9pZAQIYXNzZXRJZEEJAQ9nZXRBc3NldE9yV2F2ZXMBBQthc3NldElkQVN0cgQIYXNzZXRJZEIJAQ9nZXRBc3NldE9yV2F2ZXMBBQthc3NldElkQlN0cgQIYmFsYW5jZUEJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHBvb2wCD0FfYXNzZXRfYmFsYW5jZQQIYmFsYW5jZUIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHBvb2wCD0JfYXNzZXRfYmFsYW5jZQQGb3V0RmVlCQC4AgIFDFNjYWxlNkJpZ0ludAkAtgIBCQERQGV4dHJOYXRpdmUoMTA1MCkCBQRwb29sAgpjb21taXNzaW9uCQCbCgkJALYCAQUIYmFsYW5jZUEJALYCAQUIYmFsYW5jZUIFCGFzc2V0SWRBBQhhc3NldElkQgULYXNzZXRJZEFTdHIFC2Fzc2V0SWRCU3RyBQxTY2FsZTZCaWdJbnQFBm91dEZlZQUEcG9vbAEUa2V5QWRkaXRpb25hbEJhbGFuY2UBB2Fzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAICDXN0YWtlZEJhbGFuY2UJAMwIAgUHYXNzZXRJZAUDbmlsBQNTRVABFmtleVN0YWtpbmdBc3NldEJhbGFuY2UBB2Fzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAICEXNoYXJlQXNzZXRCYWxhbmNlCQDMCAIFB2Fzc2V0SWQFA25pbAUDU0VQARpnZXRBZGRpdGlvbmFsQmFsYW5jZU9yWmVybwIEcG9vbAdhc3NldElkCQELdmFsdWVPckVsc2UCCQCaCAIFBHBvb2wJARRrZXlBZGRpdGlvbmFsQmFsYW5jZQEFB2Fzc2V0SWQAAAEcZ2V0U3Rha2luZ0Fzc2V0QmFsYW5jZU9yWmVybwIEcG9vbAdhc3NldElkCQELdmFsdWVPckVsc2UCCQCaCAIFBHBvb2wJARZrZXlTdGFraW5nQXNzZXRCYWxhbmNlAQUHYXNzZXRJZAAAARNnZXRXeEFjY291bnRCYWxhbmNlAgRwb29sB2Fzc2V0SWQEDWJhbGFuY2VPblBvb2wDCQAAAgUHYXNzZXRJZAIFV0FWRVMICQDvBwEFBHBvb2wJYXZhaWxhYmxlCQDwBwIFBHBvb2wJANkEAQUHYXNzZXRJZAQMdG90YWxCYWxhbmNlCQBlAgkAZAIFDWJhbGFuY2VPblBvb2wJARpnZXRBZGRpdGlvbmFsQmFsYW5jZU9yWmVybwIFBHBvb2wFB2Fzc2V0SWQJARxnZXRTdGFraW5nQXNzZXRCYWxhbmNlT3JaZXJvAgUEcG9vbAUHYXNzZXRJZAkAlgMBCQDMCAIAAAkAzAgCBQx0b3RhbEJhbGFuY2UFA25pbAEJZ2V0V3hQb29sAQRwb29sBAthc3NldElkQVN0cgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEcG9vbAIPJXNfX2Ftb3VudEFzc2V0BAthc3NldElkQlN0cgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEcG9vbAIOJXNfX3ByaWNlQXNzZXQECGFzc2V0SWRBCQEPZ2V0QXNzZXRPcldhdmVzAQULYXNzZXRJZEFTdHIECGFzc2V0SWRCCQEPZ2V0QXNzZXRPcldhdmVzAQULYXNzZXRJZEJTdHIECGJhbGFuY2VBCQETZ2V0V3hBY2NvdW50QmFsYW5jZQIFBHBvb2wFC2Fzc2V0SWRBU3RyBAhiYWxhbmNlQgkBE2dldFd4QWNjb3VudEJhbGFuY2UCBQRwb29sBQthc3NldElkQlN0cgQLcHJvdG9jb2xGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDXd4U3dhcEFkZHJlc3MCDyVzX19wcm90b2NvbEZlZQQHcG9vbEZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUNd3hTd2FwQWRkcmVzcwILJXNfX3Bvb2xGZWUEBWluRmVlCQC4AgIFDFNjYWxlNkJpZ0ludAkAvAIDCQC2AgEJAGQCBQtwcm90b2NvbEZlZQUHcG9vbEZlZQUMU2NhbGU2QmlnSW50BQxTY2FsZThCaWdJbnQJAJsKCQkAtgIBBQhiYWxhbmNlQQkAtgIBBQhiYWxhbmNlQgUIYXNzZXRJZEEFCGFzc2V0SWRCBQthc3NldElkQVN0cgULYXNzZXRJZEJTdHIFBWluRmVlBQxTY2FsZTZCaWdJbnQFDXd4U3dhcEFkZHJlc3MBCGNhbGNTd2FwBQlwbXRBbW91bnQJdG9rZW5Gcm9tB3Rva2VuVG8FaW5GZWUGb3V0RmVlBAtjbGVhbkFtb3VudAkAvAIDBQlwbXRBbW91bnQFBWluRmVlBQxTY2FsZTZCaWdJbnQEEGFtb3VudFdpdGhvdXRGZWUJALwCAwUHdG9rZW5UbwULY2xlYW5BbW91bnQJALcCAgULY2xlYW5BbW91bnQFCXRva2VuRnJvbQQNYW1vdW50V2l0aEZlZQkAvAIDBRBhbW91bnRXaXRob3V0RmVlBQZvdXRGZWUFDFNjYWxlNkJpZ0ludAUNYW1vdW50V2l0aEZlZQEMZXN0aW1hdGVTd2FwAwhwb29sSW5mbwdpbkFzc2V0CGluQW1vdW50BAlyb3V0ZUFyZ3MDCQAAAgUHaW5Bc3NldAgFCHBvb2xJbmZvAl8zCQCVCgMIBQhwb29sSW5mbwJfNAgFCHBvb2xJbmZvAl82CQEIY2FsY1N3YXAFBQhpbkFtb3VudAgFCHBvb2xJbmZvAl8xCAUIcG9vbEluZm8CXzIIBQhwb29sSW5mbwJfNwgFCHBvb2xJbmZvAl84CQCVCgMIBQhwb29sSW5mbwJfMwgFCHBvb2xJbmZvAl81CQEIY2FsY1N3YXAFBQhpbkFtb3VudAgFCHBvb2xJbmZvAl8yCAUIcG9vbEluZm8CXzEIBQhwb29sSW5mbwJfNwgFCHBvb2xJbmZvAl84BAhkYXBwQXJncwMJAAACCAUIcG9vbEluZm8CXzkFDXd4U3dhcEFkZHJlc3MJAJQKAgIEc3dhcAkAzAgCAAAJAMwIAggFCXJvdXRlQXJncwJfMgkAzAgCBQ50aGlzQWRkcmVzc1N0cgUDbmlsCQCUCgICCGV4Y2hhbmdlCQDMCAIAAQUDbmlsCQCWCgQIBQlyb3V0ZUFyZ3MCXzEIBQlyb3V0ZUFyZ3MCXzMIBQhkYXBwQXJncwJfMQgFCGRhcHBBcmdzAl8yAQ1lc3RpbWF0ZVJvdXRlBgVwb29sMQVwb29sMgVwb29sMwxwb29sMVJldmVyc2UMcG9vbDJSZXZlcnNlDHBvb2wzUmV2ZXJzZQQDYTEyAwUMcG9vbDFSZXZlcnNlCAUFcG9vbDECXzIIBQVwb29sMQJfMQQDYTIxAwUMcG9vbDFSZXZlcnNlCAUFcG9vbDECXzEIBQVwb29sMQJfMgQDYTIzAwUMcG9vbDJSZXZlcnNlCAUFcG9vbDICXzIIBQVwb29sMgJfMQQDYTMyAwUMcG9vbDJSZXZlcnNlCAUFcG9vbDICXzEIBQVwb29sMgJfMgQDYTMxAwUMcG9vbDNSZXZlcnNlCAUFcG9vbDMCXzIIBQVwb29sMwJfMQQDYTEzAwUMcG9vbDNSZXZlcnNlCAUFcG9vbDMCXzEIBQVwb29sMwJfMgQNYWFEZW5vbWluYXRvcgkAtwICBQNhMjMJALwCAwkAvAIDBQNhMjEIBQVwb29sMQJfOAUMU2NhbGU2QmlnSW50CAUFcG9vbDICXzcFDFNjYWxlNkJpZ0ludAQEYWExMwkAvAIDBQNhMTIFA2EyMwUNYWFEZW5vbWluYXRvcgQEYWEzMQkAvAIDCQC8AgMJALwCAwUDYTIxBQNhMzIFDWFhRGVub21pbmF0b3IIBQVwb29sMgJfNwUMU2NhbGU2QmlnSW50CAUFcG9vbDICXzgFDFNjYWxlNkJpZ0ludAQMYURlbm9taW5hdG9yCQC3AgIFA2EzMQkAvAIDCQC8AgMFBGFhMzEIBQVwb29sMQJfNwUMU2NhbGU2QmlnSW50CAUFcG9vbDECXzgFDFNjYWxlNkJpZ0ludAQBYQkAvAIDBQRhYTEzBQNhMzEFDGFEZW5vbWluYXRvcgQCYWEJALwCAwkAvAIDCQC8AgMFBGFhMzEFA2ExMwUMYURlbm9taW5hdG9yCAUFcG9vbDMCXzcFDFNjYWxlNkJpZ0ludAgFBXBvb2wzAl84BQxTY2FsZTZCaWdJbnQEBWRlbHRhCQC8AgMJALgCAgkBCnNxcnRCaWdJbnQECQC8AgMJALwCAwkAvAIDBQJhYQUBYQUNSW5TY2FsZUJpZ0ludAgFBXBvb2wxAl83BQxTY2FsZTZCaWdJbnQIBQVwb29sMQJfOAUMU2NhbGU2QmlnSW50BQpJbkRlY2ltYWxzBQpJbkRlY2ltYWxzBQdDRUlMSU5HBQFhBQxTY2FsZTZCaWdJbnQIBQVwb29sMQJfNwMJAMACAgUKWmVyb0JpZ0ludAUFZGVsdGEJAJQKAgAABQNuaWwEBWlucHV0AwkAvwICBQVkZWx0YQUPaW5CYWxhbmNlQmlnSW50BQ9pbkJhbGFuY2VCaWdJbnQFBWRlbHRhBAVzd2FwMQkBDGVzdGltYXRlU3dhcAMFBXBvb2wxBQdJbkFzc2V0BQVpbnB1dAQFc3dhcDIJAQxlc3RpbWF0ZVN3YXADBQVwb29sMggFBXN3YXAxAl8xCAUFc3dhcDECXzIEBXN3YXAzCQEMZXN0aW1hdGVTd2FwAwUFcG9vbDMIBQVzd2FwMgJfMQgFBXN3YXAyAl8yCQCUCgIJAKADAQkAuAICCAUFc3dhcDMCXzIFBWlucHV0CQDMCAIJAJcKBQgFBXBvb2wxAl85CAUFc3dhcDECXzMIBQVzd2FwMQJfNAUHSW5Bc3NldAkAoAMBBQVpbnB1dAkAzAgCCQCXCgUIBQVwb29sMgJfOQgFBXN3YXAyAl8zCAUFc3dhcDICXzQIBQVzd2FwMQJfMQkAoAMBCAUFc3dhcDECXzIJAMwIAgkAlwoFCAUFcG9vbDMCXzkIBQVzd2FwMwJfMwgFBXN3YXAzAl80CAUFc3dhcDICXzEJAKADAQgFBXN3YXAyAl8yBQNuaWwBCmludm9rZVN3YXABBGFyZ3MEDmN1cnJlbnRCYWxhbmNlCQEKZ2V0QmFsYW5jZQEIBQRhcmdzAl80BA10cmltbWVkQW1vdW50AwkAZgIIBQRhcmdzAl81BQ5jdXJyZW50QmFsYW5jZQUOY3VycmVudEJhbGFuY2UIBQRhcmdzAl81BAxyZXN1bHRBbW91bnQDCQAAAggFBGFyZ3MCXzQFB0luQXNzZXQFDXRyaW1tZWRBbW91bnQDCQBmAgUOY3VycmVudEJhbGFuY2UIBQRhcmdzAl81BQ5jdXJyZW50QmFsYW5jZQUNdHJpbW1lZEFtb3VudAkA/AcECAUEYXJncwJfMQgFBGFyZ3MCXzIIBQRhcmdzAl8zCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCAUEYXJncwJfNAUMcmVzdWx0QW1vdW50BQNuaWwAD3N3b3BfYnRjd3hnX3h0bgkBC2dldFN3b3BQb29sAQkBB0FkZHJlc3MBARoBV1q/jutGsbgSrv1cydfRxv0pdV0mqNpqlwAPc3dvcF9jcnZ3eGdfeHRuCQELZ2V0U3dvcFBvb2wBCQEHQWRkcmVzcwEBGgFXVkP67whY8BK2EtkvlQbYpfXk7DTjL7AnAA5zd29wX2VnZ193YXZlcwkBC2dldFN3b3BQb29sAQkBB0FkZHJlc3MBARoBV+GBLWcuSRbM+6LwfcYIG3yBuMlCPo80VwAPc3dvcF9ldGh3eGdfeHRuCQELZ2V0U3dvcFBvb2wBCQEHQWRkcmVzcwEBGgFX3qgOPDlBiiQdA3Yon/bHfjRjLR3QNfrIABFzd29wX2V0aHBwdF93YXZlcwkBC2dldFN3b3BQb29sAQkBB0FkZHJlc3MBARoBVw89JtEBWSXBQoPVQ9hLEO59n5fOUb7ElQANc3dvcF9lbm5vX3h0bgkBC2dldFN3b3BQb29sAQkBB0FkZHJlc3MBARoBV0ks9zMVoQXg5neJPfkEX0ILZi1pZ9YFmQAPc3dvcF9sdGN3eGdfeHRuCQELZ2V0U3dvcFBvb2wB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CQEJZ2V0V3hQb29sAQkBB0FkZHJlc3MBARoBVx00zdFtuaSR3I9ZXuY7itcVIOJOyckRkgANd3hfd2VzdF93YXZlcwkBCWdldFd4UG9vbAEJAQdBZGRyZXNzAQEaAVdwMbJ+YMxkCRfem5055CY3zSVs4eyRb/MAC3d4X3dlc3RfeHRuCQEJZ2V0V3hQb29sAQkBB0FkZHJlc3MBARoBV5nlNkxUxRjuwcYjBUJw5NLhSOqUnG/T5AANd3hfd3hfdXNkdHd4ZwkBCWdldFd4UG9vbAEJAQdBZGRyZXNzAQEaAVetKxxC7oo4/BRH5l8s6tEcli/qomP8nW4AC3d4X3d4X3dhdmVzCQEJZ2V0V3hQb29sAQkBB0FkZHJlc3MBARoBV5pEBZiZvLSokOa3VW+3GCjLiIbTBX0fVgAJd3hfd3hfeHRuCQEJZ2V0V3hQb29sAQkBB0FkZHJlc3MBARoBV3D/xi5mRA30O/nQjGXN6dEzY5zPcg/hnAAGcm91dGVzCQDMCAIJAJgKBgUMd3hfd2F2ZXNfeHRuBQl3eF93eF94dG4FC3d4X3d4X3dhdmVzBwYHCQDMCAIJAJgKBgULd3hfd3hfd2F2ZXMFCXd4X3d4X3h0bgUMd3hfd2F2ZXNfeHRuBgcGCQDMCAIJAJgKBgUMd3hfd2F2ZXNfeHRuBQ13eF9idGN3eGdfeHRuBQ93eF93YXZlc19idGN3eGcHBgYJAMwIAgkAmAoGBQ93eF93YXZlc19idGN3eGcFDXd4X2J0Y3d4Z194dG4FDHd4X3dhdmVzX3h0bgcHBgkAzAgCCQCYCgYFDHd4X3dhdmVzX3h0bgUNd3hfZXRod3hnX3h0bgUPd3hfZXRod3hnX3dhdmVzBwYHCQDMCAIJAJgKBgUPd3hfZXRod3hnX3dhdmVzBQ13eF9ldGh3eGdfeHRuBQx3eF93YXZlc194dG4GBwYJAMwIAgkAmAoGBQx3eF93YXZlc194dG4FDHN3b3BfcHdyX3h0bgUMd3hfcHdyX3dhdmVzBwYHCQDMCAIJAJgKBgUMd3hfcHdyX3dhdmVzBQxzd29wX3B3cl94dG4FDHd4X3dhdmVzX3h0bgYHBgkAzAgCCQCYCgYFDXd4X3N1cmZfd2F2ZXMFD3d4X3N1cmZfdXNkdHd4ZwUQd3hfd2F2ZXNfdXNkdHd4ZwYHBgkAzAgCCQCYCgYFEHd4X3dhdmVzX3VzZHR3eGcFD3d4X3N1cmZfdXNkdHd4ZwUNd3hfc3VyZl93YXZlcwcGBwkAzAgCCQCYCgYFDXd4X3N1cmZfd2F2ZXMFD3d4X3N1cmZfdXNkY3d4ZwUQd3hfd2F2ZXNfdXNkY3d4ZwYHBgkAzAgCCQCYCgYFEHd4X3dhdmVzX3VzZGN3eGcFD3d4X3N1cmZfdXNkY3d4ZwUNd3hfc3VyZl93YXZlcwcGBwkAzAgCCQCYCgYFC3d4X3d4X3dhdmVzBQ13eF93eF91c2R0d3hnBRB3eF93YXZlc191c2R0d3hnBgcGCQDMCAIJAJgKBgUQd3hfd2F2ZXNfdXNkdHd4ZwUNd3hfd3hfdXNkdHd4ZwULd3hfd3hfd2F2ZXMHBgcJAMwIAgkAmAoGBQx3eF93YXZlc194dG4FC3d4X25zYnRfeHRuBQ13eF9uc2J0X3dhdmVzBwYHCQDMCAIJAJgKBgUNd3hfbnNidF93YXZlcwULd3hfbnNidF94dG4FDHd4X3dhdmVzX3h0bgYHBgkAzAgCCQCYCgYFDHd4X3dhdmVzX3h0bgUNd3hfc3dhdmVzX3h0bgUPd3hfc3dhdmVzX3dhdmVzBwYHCQDMCAIJAJgKBgUPd3hfc3dhdmVzX3dhdmVzBQ13eF9zd2F2ZXNfeHRuBQx3eF93YXZlc194dG4GBwYJAMwIAgkAmAoGBQx3eF93YXZlc194dG4FDHd4X3ZpcmVzX3h0bgUOd3hfdmlyZXNfd2F2ZXMHBgcJAMwIAgkAmAoGBQ53eF92aXJlc193YXZlcwUMd3hfdmlyZXNfeHRuBQx3eF93YXZlc194dG4GBwYJAMwIAgkAmAoGBQx3eF93YXZlc194dG4FDnd4X3VzZHRwcHRfeHRuBRB3eF93YXZlc191c2R0cHB0BwYGCQDMCAIJAJgKBgUQd3hfd2F2ZXNfdXNkdHBwdAUOd3hfdXNkdHBwdF94dG4FDHd4X3dhdmVzX3h0bgcHBgkAzAgCCQCYCgYFEHd4X3dhdmVzX3VzZHRwcHQFEXd4X2V0aHBwdF91c2R0cHB0BQ93eF9ldGhwcHRfd2F2ZXMHBgcJAMwIAgkAmAoGBQ93eF9ldGhwcHRfd2F2ZXMFEXd4X2V0aHBwdF91c2R0cHB0BRB3eF93YXZlc191c2R0cHB0BgcGBQNuaWwBAWkBB2RlZmF1bHQAAwkBAiE9AggFAWkGY2FsbGVyBQZjYWxsZXIJAAIBAgtObyB0b3VjaGluZwoBDWFjY3VtRnVuY3Rpb24CBWFjY3VtBG5leHQECmVzdGltYXRpb24JAQ1lc3RpbWF0ZVJvdXRlBggFBG5leHQCXzEIBQRuZXh0Al8yCAUEbmV4dAJfMwgFBG5leHQCXzQIBQRuZXh0Al81CAUEbmV4dAJfNgkAlAoCCQDNCAIIBQVhY2N1bQJfMQgFCmVzdGltYXRpb24CXzEJAM0IAggFBWFjY3VtAl8yCAUKZXN0aW1hdGlvbgJfMgQEZm9sZAoAAiRsBQZyb3V0ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1hY2N1bUZ1bmN0aW9uAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyNAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAQNbWF4U3dhcFByb2ZpdAkAlgMBCAUEZm9sZAJfMQMJAGcCAAAFDW1heFN3YXBQcm9maXQJAAIBAg1Fc3RpbWF0ZSBmYWlsBA9lc3RpbWF0ZWRSZXN1bHQJAJEDAggFBGZvbGQCXzIJAQV2YWx1ZQEJAM8IAggFBGZvbGQCXzEFDW1heFN3YXBQcm9maXQEB3Jlc3VsdDEJAQppbnZva2VTd2FwAQkAkQMCBQ9lc3RpbWF0ZWRSZXN1bHQAAAMJAAACBQdyZXN1bHQxBQdyZXN1bHQxBAdyZXN1bHQyCQEKaW52b2tlU3dhcAEJAJEDAgUPZXN0aW1hdGVkUmVzdWx0AAEDCQAAAgUHcmVzdWx0MgUHcmVzdWx0MgQHcmVzdWx0MwkBCmludm9rZVN3YXABCQCRAwIFD2VzdGltYXRlZFJlc3VsdAACAwkAAAIFB3Jlc3VsdDMFB3Jlc3VsdDMEBnByb2ZpdAkAZQIJAQpnZXRCYWxhbmNlAQUHSW5Bc3NldAUJaW5CYWxhbmNlBApwdXJlUHJvZml0CQBlAgUGcHJvZml0AODGWwMJAGcCAAAFCnB1cmVQcm9maXQJAAIBAgxFeGVjdXRlIGZhaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgCAFrO4", "height": 3635837, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 6gThyN5JKw14ac7Y4zobo2mtybp9ATZ5xGurzm8Csych Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let Scale6 = 1000000
5+
6+let Scale6BigInt = toBigInt(Scale6)
7+
8+let Scale8 = 100000000
9+
10+let Scale8BigInt = toBigInt(Scale8)
11+
12+let ZeroBigInt = toBigInt(0)
13+
14+let SEP = "__"
15+
16+let InScale = 100000000
17+
18+let InDecimals = 8
19+
20+let InScaleBigInt = toBigInt(InScale)
21+
22+let InAsset = unit
23+
24+let InAssetStr = "WAVES"
25+
26+let wxSwapAddress = Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93')
27+
28+let thisAddressStr = toString(this)
29+
30+func getIntOrZero (key) = valueOrElse(getInteger(key), 0)
31+
32+
33+let caller = Address(base58'3P5wA45whe3XB4ECK6UYofNM3uFHFxE4KTn')
34+
35+func getBalance (asset) = if ((asset == unit))
36+ then wavesBalance(this).regular
37+ else assetBalance(this, value(asset))
38+
39+
40+func getAssetOrWaves (assetStr) = if ((assetStr == "WAVES"))
41+ then unit
42+ else fromBase58String(assetStr)
43+
44+
45+let inBalance = getBalance(InAsset)
46+
47+let inBalanceBigInt = toBigInt(inBalance)
48+
49+func getSwopPool (pool) = {
50+ let assetIdAStr = getStringValue(pool, "A_asset_id")
51+ let assetIdBStr = getStringValue(pool, "B_asset_id")
52+ let assetIdA = getAssetOrWaves(assetIdAStr)
53+ let assetIdB = getAssetOrWaves(assetIdBStr)
54+ let balanceA = getIntegerValue(pool, "A_asset_balance")
55+ let balanceB = getIntegerValue(pool, "B_asset_balance")
56+ let outFee = (Scale6BigInt - toBigInt(getIntegerValue(pool, "commission")))
57+ $Tuple9(toBigInt(balanceA), toBigInt(balanceB), assetIdA, assetIdB, assetIdAStr, assetIdBStr, Scale6BigInt, outFee, pool)
58+ }
59+
60+
61+func keyAdditionalBalance (assetId) = makeString(["%s%s", "stakedBalance", assetId], SEP)
62+
63+
64+func keyStakingAssetBalance (assetId) = makeString(["%s%s", "shareAssetBalance", assetId], SEP)
65+
66+
67+func getAdditionalBalanceOrZero (pool,assetId) = valueOrElse(getInteger(pool, keyAdditionalBalance(assetId)), 0)
68+
69+
70+func getStakingAssetBalanceOrZero (pool,assetId) = valueOrElse(getInteger(pool, keyStakingAssetBalance(assetId)), 0)
71+
72+
73+func getWxAccountBalance (pool,assetId) = {
74+ let balanceOnPool = if ((assetId == "WAVES"))
75+ then wavesBalance(pool).available
76+ else assetBalance(pool, fromBase58String(assetId))
77+ let totalBalance = ((balanceOnPool + getAdditionalBalanceOrZero(pool, assetId)) - getStakingAssetBalanceOrZero(pool, assetId))
78+ max([0, totalBalance])
79+ }
80+
81+
82+func getWxPool (pool) = {
83+ let assetIdAStr = getStringValue(pool, "%s__amountAsset")
84+ let assetIdBStr = getStringValue(pool, "%s__priceAsset")
85+ let assetIdA = getAssetOrWaves(assetIdAStr)
86+ let assetIdB = getAssetOrWaves(assetIdBStr)
87+ let balanceA = getWxAccountBalance(pool, assetIdAStr)
88+ let balanceB = getWxAccountBalance(pool, assetIdBStr)
89+ let protocolFee = getIntegerValue(wxSwapAddress, "%s__protocolFee")
90+ let poolFee = getIntegerValue(wxSwapAddress, "%s__poolFee")
91+ let inFee = (Scale6BigInt - fraction(toBigInt((protocolFee + poolFee)), Scale6BigInt, Scale8BigInt))
92+ $Tuple9(toBigInt(balanceA), toBigInt(balanceB), assetIdA, assetIdB, assetIdAStr, assetIdBStr, inFee, Scale6BigInt, wxSwapAddress)
93+ }
94+
95+
96+func calcSwap (pmtAmount,tokenFrom,tokenTo,inFee,outFee) = {
97+ let cleanAmount = fraction(pmtAmount, inFee, Scale6BigInt)
98+ let amountWithoutFee = fraction(tokenTo, cleanAmount, (cleanAmount + tokenFrom))
99+ let amountWithFee = fraction(amountWithoutFee, outFee, Scale6BigInt)
100+ amountWithFee
101+ }
102+
103+
104+func estimateSwap (poolInfo,inAsset,inAmount) = {
105+ let routeArgs = if ((inAsset == poolInfo._3))
106+ then $Tuple3(poolInfo._4, poolInfo._6, calcSwap(inAmount, poolInfo._1, poolInfo._2, poolInfo._7, poolInfo._8))
107+ else $Tuple3(poolInfo._3, poolInfo._5, calcSwap(inAmount, poolInfo._2, poolInfo._1, poolInfo._7, poolInfo._8))
108+ let dappArgs = if ((poolInfo._9 == wxSwapAddress))
109+ then $Tuple2("swap", [0, routeArgs._2, thisAddressStr])
110+ else $Tuple2("exchange", [1])
111+ $Tuple4(routeArgs._1, routeArgs._3, dappArgs._1, dappArgs._2)
112+ }
113+
114+
115+func estimateRoute (pool1,pool2,pool3,pool1Reverse,pool2Reverse,pool3Reverse) = {
116+ let a12 = if (pool1Reverse)
117+ then pool1._2
118+ else pool1._1
119+ let a21 = if (pool1Reverse)
120+ then pool1._1
121+ else pool1._2
122+ let a23 = if (pool2Reverse)
123+ then pool2._2
124+ else pool2._1
125+ let a32 = if (pool2Reverse)
126+ then pool2._1
127+ else pool2._2
128+ let a31 = if (pool3Reverse)
129+ then pool3._2
130+ else pool3._1
131+ let a13 = if (pool3Reverse)
132+ then pool3._1
133+ else pool3._2
134+ let aaDenominator = (a23 + fraction(fraction(a21, pool1._8, Scale6BigInt), pool2._7, Scale6BigInt))
135+ let aa13 = fraction(a12, a23, aaDenominator)
136+ let aa31 = fraction(fraction(fraction(a21, a32, aaDenominator), pool2._7, Scale6BigInt), pool2._8, Scale6BigInt)
137+ let aDenominator = (a31 + fraction(fraction(aa31, pool1._7, Scale6BigInt), pool1._8, Scale6BigInt))
138+ let a = fraction(aa13, a31, aDenominator)
139+ let aa = fraction(fraction(fraction(aa31, a13, aDenominator), pool3._7, Scale6BigInt), pool3._8, Scale6BigInt)
140+ let delta = fraction((sqrtBigInt(fraction(fraction(fraction(aa, a, InScaleBigInt), pool1._7, Scale6BigInt), pool1._8, Scale6BigInt), InDecimals, InDecimals, CEILING) - a), Scale6BigInt, pool1._7)
141+ if ((ZeroBigInt >= delta))
142+ then $Tuple2(0, nil)
143+ else {
144+ let input = if ((delta > inBalanceBigInt))
145+ then inBalanceBigInt
146+ else delta
147+ let swap1 = estimateSwap(pool1, InAsset, input)
148+ let swap2 = estimateSwap(pool2, swap1._1, swap1._2)
149+ let swap3 = estimateSwap(pool3, swap2._1, swap2._2)
150+ $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))])
151+ }
152+ }
153+
154+
155+func invokeSwap (args) = {
156+ let currentBalance = getBalance(args._4)
157+ let trimmedAmount = if ((args._5 > currentBalance))
158+ then currentBalance
159+ else args._5
160+ let resultAmount = if ((args._4 == InAsset))
161+ then trimmedAmount
162+ else if ((currentBalance > args._5))
163+ then currentBalance
164+ else trimmedAmount
165+ invoke(args._1, args._2, args._3, [AttachedPayment(args._4, resultAmount)])
166+ }
167+
168+
169+let swop_btcwxg_xtn = getSwopPool(Address(base58'3PACj2DLTw3uUhsUmT98zHU5M4hPufbHKav'))
170+
171+let swop_crvwxg_xtn = getSwopPool(Address(base58'3P9o2H6G5d2xXBTfBEwjzHc16RLSZLFLQjp'))
172+
173+let swop_egg_waves = getSwopPool(Address(base58'3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ'))
174+
175+let swop_ethwxg_xtn = getSwopPool(Address(base58'3PNEC4YKqZiMMytFrYRVtpW2ujvi3aGXRPm'))
176+
177+let swop_ethppt_waves = getSwopPool(Address(base58'3P3KU81iteCQxKb8u15yEPcABknLEcCvGyr'))
178+
179+let swop_enno_xtn = getSwopPool(Address(base58'3P8bovWtkLFVToB8LxP8AZLoWVwC8rDZLQQ'))
180+
181+let swop_ltcwxg_xtn = getSwopPool(Address(base58'3P32Rjpo9YHoHaorLSxvnV6CkKFXyfDCkJh'))
182+
183+let swop_nsbt_xtn = getSwopPool(Address(base58'3P2V63Xd6BviDkeMzxhUw2SJyojByRz8a8m'))
184+
185+let swop_pluto_xtn = getSwopPool(Address(base58'3PDSXwwA2xAtmxeo2bebDP3AA5ynZ2Krgnw'))
186+
187+let swop_pwr_xtn = getSwopPool(Address(base58'3P88KDKWHNKNdbZxe8FfAJP8coAhvfDtuzV'))
188+
189+let swop_puzzle_xtn = getSwopPool(Address(base58'3PBHyEwmERR1CEkrTNbPj2bgyisTfPRqfee'))
190+
191+let swop_puzzle_waves = getSwopPool(Address(base58'3PRFKemXs4rAJYGPccNtP63Kw2UzwEdH7sZ'))
192+
193+let swop_race_egg = getSwopPool(Address(base58'3P3Z8Gn665CJr14bTLv4d5USDBUQCTeeCaT'))
194+
195+let swop_sign_xtn = getSwopPool(Address(base58'3P4Ftyud3U3xnuR8sTc1RvV4iQD62TcKndy'))
196+
197+let swop_surf_xtn = getSwopPool(Address(base58'3PLp9KrdrbWAvSFHGJVEaszUubquz3M6mfe'))
198+
199+let swop_swop_xtn = getSwopPool(Address(base58'3P27S9V36kw2McjWRZ37AxTx8iwkd7HXw6W'))
200+
201+let swop_swop_waves = getSwopPool(Address(base58'3PH8Np6jwuoikvkHL2qmdpFEHBR4UV5vwSq'))
202+
203+let swop_tsn_xtn = getSwopPool(Address(base58'3PCwvns2dnmobD6Z4cR86v98s7LgMZYygEy'))
204+
205+let swop_vires_xtn = getSwopPool(Address(base58'3PJ48P3p2wvWUjgQaQiZ2cFbr8qmxMokBGd'))
206+
207+let swop_vvusdnlp_xtn = getSwopPool(Address(base58'3PCkJuWHu1QJLHvcdUegYczfNVohS6c1A6o'))
208+
209+let swop_usdcwxg_usdtwxg = getSwopPool(Address(base58'3PJgkN4gy6b8qpA86otcJ2KDTbL8ay2n91s'))
210+
211+let swop_waves_btcwxg = getSwopPool(Address(base58'3P8FVZgAJUAq32UEZtTw84qS4zLqEREiEiP'))
212+
213+let swop_waves_xtn = getSwopPool(Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG'))
214+
215+let swop_west_east = getSwopPool(Address(base58'3PHTDdjz8Kb5JcAkhzfR57MCUYoe73pyxxK'))
216+
217+let swop_waves_eurn = getSwopPool(Address(base58'3PK7Xe5BiedRyxHLuMQx5ey9riUQqvUths2'))
218+
219+let swop_waves_usdcppt = getSwopPool(Address(base58'3PESG2RvmPdDrMCbCVvzJvqxDR9d2HcAE2z'))
220+
221+let swop_waves_usdtppt = getSwopPool(Address(base58'3P2M9btqYdpENh1SkaHFDdc8XSjXHNiAXF5'))
222+
223+let swop_wct_xtn = getSwopPool(Address(base58'3PMDFxmG9uXAbuQgiNogZCBQASvCHt1Mdar'))
224+
225+let swop_west_xtn = getSwopPool(Address(base58'3P6DLdJTP2EySq9MFdJu6beUevrQd2sVVBh'))
226+
227+let swop_wx_xtn = getSwopPool(Address(base58'3PKi4G3VX2k42ZSmNNrmvgdDH7JzRaUhY7R'))
228+
229+let swop_xtn_usdtwxg = getSwopPool(Address(base58'3PAunb4Dadc9rQM2VJNQBgQV3vrgF9z8Evq'))
230+
231+let wx_bnbppt_waves = getWxPool(Address(base58'3PErdCQg2f8WYGG7DzSiH5FBosdnPHE6cND'))
232+
233+let wx_bnbwxg_xtn = getWxPool(Address(base58'3P8NCvcipinDQVQZujpczBdvG7FL5EvTqLM'))
234+
235+let wx_btcwxg_xtn = getWxPool(Address(base58'3PCBWDTA6jrFswd7gQgaE3Xk7gLM5RKofvp'))
236+
237+let wx_crv_xtn = getWxPool(Address(base58'3PHBmNjbaT8Re837JUfPGXeaW8NKfBQPr1u'))
238+
239+let wx_east_xtn = getWxPool(Address(base58'3PHxdxsgxNwEjVRt45sjeUfNZZ8uHzYVpvH'))
240+
241+let wx_egg_waves = getWxPool(Address(base58'3PJkUhnAHMaBTjyc7FkBfHantNUy871kBBW'))
242+
243+let wx_egg_xtn = getWxPool(Address(base58'3P3Y38zymCHoTM6qcE9JcEA8rhaGTQbVMgu'))
244+
245+let wx_enno_xtn = getWxPool(Address(base58'3P2H4iQAfxQCJaFCNgRLmKkLvv2yDhV93QC'))
246+
247+let wx_ethppt_waves = getWxPool(Address(base58'3P2yiVnK48evTLr8MAZWavpE4WA4fw1weQg'))
248+
249+let wx_ethppt_usdtppt = getWxPool(Address(base58'3PATKQATPmnxLd5DjXg8FmbXXbKpA1BVAvS'))
250+
251+let wx_ethwxg_waves = getWxPool(Address(base58'3P3XGTN6s292g9iwYhs3TEqJqHiffQYojuE'))
252+
253+let wx_ethwxg_xtn = getWxPool(Address(base58'3PEMqetsaJDbYMw1XGovmE37FB8VUhGnX9A'))
254+
255+let wx_eurn_xtn = getWxPool(Address(base58'3P879DU3ycr2XWorD7rR5gSpn1CpYgHjgFT'))
256+
257+let wx_ltcwxg_xtn = getWxPool(Address(base58'3P94wvu5gA7VhjPgAB3twaeqdwHCwNK2vsn'))
258+
259+let wx_nsbt_waves = getWxPool(Address(base58'3PPR4zVfWP4w4rshP541aiFtPNQN2sNJwrY'))
260+
261+let wx_nsbt_xtn = getWxPool(Address(base58'3P97XQCT9VYMXBxasVpDsE7eZfQ6cR9eS9n'))
262+
263+let wx_pluto_waves = getWxPool(Address(base58'3P6ZipK8ydb4qHmufCquh98g9KW6EwaeJfk'))
264+
265+let wx_pluto_xtn = getWxPool(Address(base58'3PEkD5LuHGWhUfgBW1owZFxVydYoWjV6Jia'))
266+
267+let wx_puzzle_waves = getWxPool(Address(base58'3PQaYm4pbRVrNTTnL8pDJZTxhcmD4jRskrz'))
268+
269+let wx_puzzle_xtn = getWxPool(Address(base58'3P615yXeQ9Qu4qBM1QGimGzixyMS5W4Ktug'))
270+
271+let wx_pwr_waves = getWxPool(Address(base58'3PDi7Qq8pLQYvtKyTfQuqqPUWyhoYbU957t'))
272+
273+let wx_race_xtn = getWxPool(Address(base58'3P2nHbqMt7hiYKQjYLT3AEDteS4SYGeHTuc'))
274+
275+let wx_sign_xtn = getWxPool(Address(base58'3P6UuvAt9RFuVznvjAQ7c2RrU25iU917WTN'))
276+
277+let wx_surf_waves = getWxPool(Address(base58'3PNnCngfvAzyvAQ1cEudZ3o6o3tFktsBVz5'))
278+
279+let wx_surf_usdcwxg = getWxPool(Address(base58'3PBfTdcoKmMNxZcjP8eTokbLFqYTUdoNKWL'))
280+
281+let wx_surf_usdtwxg = getWxPool(Address(base58'3PM6YyJauiFTZzVLuRcCkDwWBvWTvPYo1ZM'))
282+
283+let wx_swaves_waves = getWxPool(Address(base58'3PDVaJDqCadWeBugf768XeKiXtCCLUrYMge'))
284+
285+let wx_swaves_xtn = getWxPool(Address(base58'3PEmxUzcCbsAcw6Q3VNLTWdd8bjc8KBUEDz'))
286+
287+let wx_swop_waves = getWxPool(Address(base58'3PA8nK44sopUpXNcCRTpPSH2F7yjvxzx5cw'))
288+
289+let wx_swop_xtn = getWxPool(Address(base58'3PCApn7kL3UMdCVYA2Ln2UcQvfnkFRL1qDC'))
290+
291+let wx_usdtppt_xtn = getWxPool(Address(base58'3P5kfoYW7jPa9zYoTkN6Z6z8xtw8JGhymYB'))
292+
293+let wx_tsn_xtn = getWxPool(Address(base58'3PH832eKnw67PFvJfUg9Knz6BHM87QvjMeL'))
294+
295+let wx_vires_waves = getWxPool(Address(base58'3P7Z7X5kKXN4TpZ2SmqP2xyLGuotAqht1pU'))
296+
297+let wx_vires_xtn = getWxPool(Address(base58'3P5HjPowgipiVB3UvXphDiPvKs424WC9xQw'))
298+
299+let wx_vvusdnlp_xtn = getWxPool(Address(base58'3P9UJxhsqj1UkqPDtM16yi9aGE26V5tdH6i'))
300+
301+let wx_waves_btcwxg = getWxPool(Address(base58'3PPQDcvXuwVToC2QNWzPwxmLxLzMw9Eoe8C'))
302+
303+let wx_waves_busdwxg = getWxPool(Address(base58'3P9vSwu2eLLmyAi8BdEoZvTwsxSWjsAh8Jm'))
304+
305+let wx_waves_xtn = getWxPool(Address(base58'3PPZWgFNRKHLvM51pwS934C8VZ7d2F4Z58g'))
306+
307+let wx_waves_usdtppt = getWxPool(Address(base58'3PPeWowdyQLKwW9AExN5CgFa7X9ts7D4LkM'))
308+
309+let wx_waves_usdcwxg = getWxPool(Address(base58'3P3g3eipfG2NZKKQE8DZXt2E9tRJqii9jcX'))
310+
311+let wx_waves_usdtwxg = getWxPool(Address(base58'3PKMVZ7kQeaREajYi8Yc25Ro6mcNw5D6QSa'))
312+
313+let wx_wct_xtn = getWxPool(Address(base58'3P4bKahCwC2kPg8QcT8Pw5Br58hVgpziGsB'))
314+
315+let wx_west_waves = getWxPool(Address(base58'3PCA7wkovBpAGgm5e6rZMXyXY97jUwVENWe'))
316+
317+let wx_west_xtn = getWxPool(Address(base58'3PFxchXqKNjgP1CcbgFZjHyrEj9xMbSeLU3'))
318+
319+let wx_wx_usdtwxg = getWxPool(Address(base58'3PHiXGo7NTRoC2KqkMZ1y9LaA2QSrroGs8y'))
320+
321+let wx_wx_waves = getWxPool(Address(base58'3PFzaH2ghpwANHFgjeva83N1yxzErELx2eh'))
322+
323+let wx_wx_xtn = getWxPool(Address(base58'3PCENpEKe8atwELZ7oCSmcdEfcRuKTrUx99'))
324+
325+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)]
326+
327+@Callable(i)
328+func default () = if ((i.caller != caller))
329+ then throw("No touching")
330+ else {
331+ func accumFunction (accum,next) = {
332+ let estimation = estimateRoute(next._1, next._2, next._3, next._4, next._5, next._6)
333+ $Tuple2((accum._1 :+ estimation._1), (accum._2 :+ estimation._2))
334+ }
335+
336+ let fold = {
337+ let $l = routes
338+ let $s = size($l)
339+ let $acc0 = $Tuple2(nil, nil)
340+ func $f0_1 ($a,$i) = if (($i >= $s))
341+ then $a
342+ else accumFunction($a, $l[$i])
343+
344+ func $f0_2 ($a,$i) = if (($i >= $s))
345+ then $a
346+ else throw("List size exceeds 24")
347+
348+ $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($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)
349+ }
350+ let maxSwapProfit = max(fold._1)
351+ if ((0 >= maxSwapProfit))
352+ then throw("Estimate fail")
353+ else {
354+ let estimatedResult = fold._2[value(indexOf(fold._1, maxSwapProfit))]
355+ let result1 = invokeSwap(estimatedResult[0])
356+ if ((result1 == result1))
357+ then {
358+ let result2 = invokeSwap(estimatedResult[1])
359+ if ((result2 == result2))
360+ then {
361+ let result3 = invokeSwap(estimatedResult[2])
362+ if ((result3 == result3))
363+ then {
364+ let profit = (getBalance(InAsset) - inBalance)
365+ let pureProfit = (profit - 1500000)
366+ if ((0 >= pureProfit))
367+ then throw("Execute fail")
368+ else nil
369+ }
370+ else throw("Strict value is not equal to itself.")
371+ }
372+ else throw("Strict value is not equal to itself.")
373+ }
374+ else throw("Strict value is not equal to itself.")
375+ }
376+ }
377+
378+

github/deemru/w8io/3ef1775 
37.19 ms