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:
Old | New | Differences | |
---|---|---|---|
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 ◑