tx · 8jeyWGmGvzWdfYeJ72PpYPJaFaYziTvmH5WyJUe12rNa

3P4YQSjiJJ8WRpuo7NxRX7WSp8Gxn53GDmt:  -0.00800000 Waves

2023.05.19 21:22 [3650671] smart account 3P4YQSjiJJ8WRpuo7NxRX7WSp8Gxn53GDmt > SELF 0.00000000 Waves

{ "type": 13, "id": "8jeyWGmGvzWdfYeJ72PpYPJaFaYziTvmH5WyJUe12rNa", "fee": 800000, "feeAssetId": null, "timestamp": 1684520528733, "version": 1, "sender": "3P4YQSjiJJ8WRpuo7NxRX7WSp8Gxn53GDmt", "senderPublicKey": "HSNibaGEMpnqqSQpHTkc81Ug2MLwDqXqbhFsW6E75kC3", "proofs": [ "2ArzyCbuyJ1EbfFKDctcrqCh8dn7DHQpswYTMFjE7vBfaHJEJTxNacAi71i4dAKJmkH4nrLWwsUPrkbd55PbAbz9" ], "script": "base64:BgIECAISACgABlNjYWxlNgDAhD0ADFNjYWxlNkJpZ0ludAkAtgIBBQZTY2FsZTYABlNjYWxlOACAwtcvAAxTY2FsZThCaWdJbnQJALYCAQUGU2NhbGU4AApaZXJvQmlnSW50CQC2AgEAAAADU0VQAgJfXwAHSW5TY2FsZQDAhD0ACkluRGVjaW1hbHMABgANSW5TY2FsZUJpZ0ludAkAtgIBBQdJblNjYWxlAAdJbkFzc2V0ASBSM9nhl4gm5eIfwv3qiDS4h3ajjLGD78hgHH4KElQmJQAKSW5Bc3NldFN0cgIsNlh0SGpwWGJzOVJSSlAyU3I5R1V5VnF6QUNjYnk5VGtUaEhYbmpWQzVDREoABmNhbGxlcgkBB0FkZHJlc3MBARoBV/JMjaYEM3ELr7+kSccILzlKxkIJmhAwtAAJZ2VuZXJhdG9yCQEHQWRkcmVzcwEBGgFXd9FKwAAmD1BtgyWzWnaE5eM5+V4NDHFEAAhyZWNlaXZlcgkBB0FkZHJlc3MBARoBV88FaXOVh1gjAmchvI+JX5J6ZuikHjJ+GAALbWV2cmVjZWl2ZXIJAQdBZGRyZXNzAQEaAVce4ftAMWuB5uxLVhsFLFGhk27fCbE80sEADXd4U3dhcEFkZHJlc3MJAQdBZGRyZXNzAQEaAVcuKjU1sQ238Xk+4bdG0J50Uk17MdCDrgYADnRoaXNBZGRyZXNzU3RyCQClCAEFBHRoaXMBDGdldEludE9yWmVybwEDa2V5CQELdmFsdWVPckVsc2UCCQCfCAEFA2tleQAAAQpnZXRCYWxhbmNlAQVhc3NldAMJAAACBQVhc3NldAUEdW5pdAgJAO8HAQUEdGhpcwdyZWd1bGFyCQDwBwIFBHRoaXMJAQV2YWx1ZQEFBWFzc2V0AQ9nZXRBc3NldE9yV2F2ZXMBCGFzc2V0U3RyAwkAAAIFCGFzc2V0U3RyAgVXQVZFUwUEdW5pdAkA2QQBBQhhc3NldFN0cgAJaW5CYWxhbmNlCQEKZ2V0QmFsYW5jZQEFB0luQXNzZXQAD2luQmFsYW5jZUJpZ0ludAkAtgIBBQlpbkJhbGFuY2UBC2dldFN3b3BQb29sAQRwb29sBAthc3NldElkQVN0cgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEcG9vbAIKQV9hc3NldF9pZAQLYXNzZXRJZEJTdHIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHBvb2wCCkJfYXNzZXRfaWQECGFzc2V0SWRBCQEPZ2V0QXNzZXRPcldhdmVzAQULYXNzZXRJZEFTdHIECGFzc2V0SWRCCQEPZ2V0QXNzZXRPcldhdmVzAQULYXNzZXRJZEJTdHIECGJhbGFuY2VBCQERQGV4dHJOYXRpdmUoMTA1MCkCBQRwb29sAg9BX2Fzc2V0X2JhbGFuY2UECGJhbGFuY2VCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQRwb29sAg9CX2Fzc2V0X2JhbGFuY2UEBm91dEZlZQkAuAICBQxTY2FsZTZCaWdJbnQJALYCAQkBEUBleHRyTmF0aXZlKDEwNTApAgUEcG9vbAIKY29tbWlzc2lvbgkAmwoJCQC2AgEFCGJhbGFuY2VBCQC2AgEFCGJhbGFuY2VCBQhhc3NldElkQQUIYXNzZXRJZEIFC2Fzc2V0SWRBU3RyBQthc3NldElkQlN0cgUMU2NhbGU2QmlnSW50BQZvdXRGZWUFBHBvb2wBFGtleUFkZGl0aW9uYWxCYWxhbmNlAQdhc3NldElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCAg1zdGFrZWRCYWxhbmNlCQDMCAIFB2Fzc2V0SWQFA25pbAUDU0VQARZrZXlTdGFraW5nQXNzZXRCYWxhbmNlAQdhc3NldElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhFzaGFyZUFzc2V0QmFsYW5jZQkAzAgCBQdhc3NldElkBQNuaWwFA1NFUAEaZ2V0QWRkaXRpb25hbEJhbGFuY2VPclplcm8CBHBvb2wHYXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQRwb29sCQEUa2V5QWRkaXRpb25hbEJhbGFuY2UBBQdhc3NldElkAAABHGdldFN0YWtpbmdBc3NldEJhbGFuY2VPclplcm8CBHBvb2wHYXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQRwb29sCQEWa2V5U3Rha2luZ0Fzc2V0QmFsYW5jZQEFB2Fzc2V0SWQAAAETZ2V0V3hBY2NvdW50QmFsYW5jZQIEcG9vbAdhc3NldElkBA1iYWxhbmNlT25Qb29sAwkAAAIFB2Fzc2V0SWQCBVdBVkVTCAkA7wcBBQRwb29sCWF2YWlsYWJsZQkA8AcCBQRwb29sCQDZBAEFB2Fzc2V0SWQEDHRvdGFsQmFsYW5jZQkAZQIJAGQCBQ1iYWxhbmNlT25Qb29sCQEaZ2V0QWRkaXRpb25hbEJhbGFuY2VPclplcm8CBQRwb29sBQdhc3NldElkCQEcZ2V0U3Rha2luZ0Fzc2V0QmFsYW5jZU9yWmVybwIFBHBvb2wFB2Fzc2V0SWQJAJYDAQkAzAgCAAAJAMwIAgUMdG90YWxCYWxhbmNlBQNuaWwBCWdldFd4UG9vbAEEcG9vbAQLYXNzZXRJZEFTdHIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHBvb2wCDyVzX19hbW91bnRBc3NldAQLYXNzZXRJZEJTdHIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHBvb2wCDiVzX19wcmljZUFzc2V0BAhhc3NldElkQQkBD2dldEFzc2V0T3JXYXZlcwEFC2Fzc2V0SWRBU3RyBAhhc3NldElkQgkBD2dldEFzc2V0T3JXYXZlcwEFC2Fzc2V0SWRCU3RyBAhiYWxhbmNlQQkBE2dldFd4QWNjb3VudEJhbGFuY2UCBQRwb29sBQthc3NldElkQVN0cgQIYmFsYW5jZUIJARNnZXRXeEFjY291bnRCYWxhbmNlAgUEcG9vbAULYXNzZXRJZEJTdHIEC3Byb3RvY29sRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ13eFN3YXBBZGRyZXNzAg8lc19fcHJvdG9jb2xGZWUEB3Bvb2xGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDXd4U3dhcEFkZHJlc3MCCyVzX19wb29sRmVlBAVpbkZlZQkAuAICBQxTY2FsZTZCaWdJbnQJALwCAwkAtgIBCQBkAgULcHJvdG9jb2xGZWUFB3Bvb2xGZWUFDFNjYWxlNkJpZ0ludAUMU2NhbGU4QmlnSW50CQCbCgkJALYCAQUIYmFsYW5jZUEJALYCAQUIYmFsYW5jZUIFCGFzc2V0SWRBBQhhc3NldElkQgULYXNzZXRJZEFTdHIFC2Fzc2V0SWRCU3RyBQVpbkZlZQUMU2NhbGU2QmlnSW50BQ13eFN3YXBBZGRyZXNzAQhjYWxjU3dhcAUJcG10QW1vdW50CXRva2VuRnJvbQd0b2tlblRvBWluRmVlBm91dEZlZQQLY2xlYW5BbW91bnQJALwCAwUJcG10QW1vdW50BQVpbkZlZQUMU2NhbGU2QmlnSW50BBBhbW91bnRXaXRob3V0RmVlCQC8AgMFB3Rva2VuVG8FC2NsZWFuQW1vdW50CQC3AgIFC2NsZWFuQW1vdW50BQl0b2tlbkZyb20EDWFtb3VudFdpdGhGZWUJALwCAwUQYW1vdW50V2l0aG91dEZlZQUGb3V0RmVlBQxTY2FsZTZCaWdJbnQFDWFtb3VudFdpdGhGZWUBDGVzdGltYXRlU3dhcAMIcG9vbEluZm8HaW5Bc3NldAhpbkFtb3VudAQJcm91dGVBcmdzAwkAAAIFB2luQXNzZXQIBQhwb29sSW5mbwJfMwkAlQoDCAUIcG9vbEluZm8CXzQIBQhwb29sSW5mbwJfNgkBCGNhbGNTd2FwBQUIaW5BbW91bnQIBQhwb29sSW5mbwJfMQgFCHBvb2xJbmZvAl8yCAUIcG9vbEluZm8CXzcIBQhwb29sSW5mbwJfOAkAlQoDCAUIcG9vbEluZm8CXzMIBQhwb29sSW5mbwJfNQkBCGNhbGNTd2FwBQUIaW5BbW91bnQIBQhwb29sSW5mbwJfMggFCHBvb2xJbmZvAl8xCAUIcG9vbEluZm8CXzcIBQhwb29sSW5mbwJfOAQIZGFwcEFyZ3MDCQAAAggFCHBvb2xJbmZvAl85BQ13eFN3YXBBZGRyZXNzCQCUCgICBHN3YXAJAMwIAgAACQDMCAIIBQlyb3V0ZUFyZ3MCXzIJAMwIAgUOdGhpc0FkZHJlc3NTdHIFA25pbAkAlAoCAghleGNoYW5nZQkAzAgCAAEFA25pbAkAlgoECAUJcm91dGVBcmdzAl8xCAUJcm91dGVBcmdzAl8zCAUIZGFwcEFyZ3MCXzEIBQhkYXBwQXJncwJfMgENZXN0aW1hdGVSb3V0ZQYFcG9vbDEFcG9vbDIFcG9vbDMMcG9vbDFSZXZlcnNlDHBvb2wyUmV2ZXJzZQxwb29sM1JldmVyc2UEA2ExMgMFDHBvb2wxUmV2ZXJzZQgFBXBvb2wxAl8yCAUFcG9vbDECXzEEA2EyMQMFDHBvb2wxUmV2ZXJzZQgFBXBvb2wxAl8xCAUFcG9vbDECXzIEA2EyMwMFDHBvb2wyUmV2ZXJzZQgFBXBvb2wyAl8yCAUFcG9vbDICXzEEA2EzMgMFDHBvb2wyUmV2ZXJzZQgFBXBvb2wyAl8xCAUFcG9vbDICXzIEA2EzMQMFDHBvb2wzUmV2ZXJzZQgFBXBvb2wzAl8yCAUFcG9vbDMCXzEEA2ExMwMFDHBvb2wzUmV2ZXJzZQgFBXBvb2wzAl8xCAUFcG9vbDMCXzIEDWFhRGVub21pbmF0b3IJALcCAgUDYTIzCQC8AgMJALwCAwUDYTIxCAUFcG9vbDECXzgFDFNjYWxlNkJpZ0ludAgFBXBvb2wyAl83BQxTY2FsZTZCaWdJbnQEBGFhMTMJALwCAwUDYTEyBQNhMjMFDWFhRGVub21pbmF0b3IEBGFhMzEJALwCAwkAvAIDCQC8AgMFA2EyMQUDYTMyBQ1hYURlbm9taW5hdG9yCAUFcG9vbDICXzcFDFNjYWxlNkJpZ0ludAgFBXBvb2wyAl84BQxTY2FsZTZCaWdJbnQEDGFEZW5vbWluYXRvcgkAtwICBQNhMzEJALwCAwkAvAIDBQRhYTMxCAUFcG9vbDECXzcFDFNjYWxlNkJpZ0ludAgFBXBvb2wxAl84BQxTY2FsZTZCaWdJbnQEAWEJALwCAwUEYWExMwUDYTMxBQxhRGVub21pbmF0b3IEAmFhCQC8AgMJALwCAwkAvAIDBQRhYTMxBQNhMTMFDGFEZW5vbWluYXRvcggFBXBvb2wzAl83BQxTY2FsZTZCaWdJbnQIBQVwb29sMwJfOAUMU2NhbGU2QmlnSW50BAVkZWx0YQkAvAIDCQC4AgIJAQpzcXJ0QmlnSW50BAkAvAIDCQC8AgMJALwCAwUCYWEFAWEFDUluU2NhbGVCaWdJbnQIBQVwb29sMQJfNwUMU2NhbGU2QmlnSW50CAUFcG9vbDECXzgFDFNjYWxlNkJpZ0ludAUKSW5EZWNpbWFscwUKSW5EZWNpbWFscwUHQ0VJTElORwUBYQUMU2NhbGU2QmlnSW50CAUFcG9vbDECXzcDCQDAAgIFClplcm9CaWdJbnQFBWRlbHRhCQCUCgIAAAUDbmlsBAVpbnB1dAMJAL8CAgUFZGVsdGEFD2luQmFsYW5jZUJpZ0ludAUPaW5CYWxhbmNlQmlnSW50BQVkZWx0YQQFc3dhcDEJAQxlc3RpbWF0ZVN3YXADBQVwb29sMQUHSW5Bc3NldAUFaW5wdXQEBXN3YXAyCQEMZXN0aW1hdGVTd2FwAwUFcG9vbDIIBQVzd2FwMQJfMQgFBXN3YXAxAl8yBAVzd2FwMwkBDGVzdGltYXRlU3dhcAMFBXBvb2wzCAUFc3dhcDICXzEIBQVzd2FwMgJfMgkAlAoCCQCgAwEJALgCAggFBXN3YXAzAl8yBQVpbnB1dAkAzAgCCQCXCgUIBQVwb29sMQJfOQgFBXN3YXAxAl8zCAUFc3dhcDECXzQFB0luQXNzZXQJAKADAQUFaW5wdXQJAMwIAgkAlwoFCAUFcG9vbDICXzkIBQVzd2FwMgJfMwgFBXN3YXAyAl80CAUFc3dhcDECXzEJAKADAQgFBXN3YXAxAl8yCQDMCAIJAJcKBQgFBXBvb2wzAl85CAUFc3dhcDMCXzMIBQVzd2FwMwJfNAgFBXN3YXAyAl8xCQCgAwEIBQVzd2FwMgJfMgUDbmlsAQppbnZva2VTd2FwAQRhcmdzBA5jdXJyZW50QmFsYW5jZQkBCmdldEJhbGFuY2UBCAUEYXJncwJfNAQNdHJpbW1lZEFtb3VudAMJAGYCCAUEYXJncwJfNQUOY3VycmVudEJhbGFuY2UFDmN1cnJlbnRCYWxhbmNlCAUEYXJncwJfNQQMcmVzdWx0QW1vdW50AwkAAAIIBQRhcmdzAl80BQdJbkFzc2V0BQ10cmltbWVkQW1vdW50AwkAZgIFDmN1cnJlbnRCYWxhbmNlCAUEYXJncwJfNQUOY3VycmVudEJhbGFuY2UFDXRyaW1tZWRBbW91bnQJAPwHBAgFBGFyZ3MCXzEIBQRhcmdzAl8yCAUEYXJncwJfMwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AggFBGFyZ3MCXzQFDHJlc3VsdEFtb3VudAUDbmlsABRzd29wX3VzZGN3eGdfdXNkdHd4ZwkBC2dldFN3b3BQb29sAQkBB0FkZHJlc3MBARoBV7fNVPngN1PYwbqmtT5VPAwWH7fLrBaRKgANd3hfc3VyZl93YXZlcwkBCWdldFd4UG9vbAEJAQdBZGRyZXNzAQEaAVfktfkSPv3QP0tMJ98CoBZvEAsiS6hM5S4AD3d4X3N1cmZfdXNkY3d4ZwkBCWdldFd4UG9vbAEJAQdBZGRyZXNzAQEaAVdqxhGGceC5b2TQY/zcVjtAqGcauL66RJUAD3d4X3N1cmZfdXNkdHd4ZwkBCWdldFd4UG9vbAEJAQdBZGRyZXNzAQEaAVfSPg6CMddu1fBxEjrYMK+JPLL5YySRVnQAEHd4X3dhdmVzX3VzZGN3eGcJAQlnZXRXeFBvb2wBCQEHQWRkcmVzcwEBGgFXEyF1uGmUd54hELLaF3fjhDou4O6EeMvkABB3eF93YXZlc191c2R0d3hnCQEJZ2V0V3hQb29sAQkBB0FkZHJlc3MBARoBV78hMTD4WKILRT0WIKhM4LK5vTy1+KI3DwAGcm91dGVzCQDMCAIJAJgKBgUUc3dvcF91c2Rjd3hnX3VzZHR3eGcFEHd4X3dhdmVzX3VzZHR3eGcFEHd4X3dhdmVzX3VzZGN3eGcHBgcJAMwIAgkAmAoGBRB3eF93YXZlc191c2Rjd3hnBRB3eF93YXZlc191c2R0d3hnBRRzd29wX3VzZGN3eGdfdXNkdHd4ZwYHBgkAzAgCCQCYCgYFEHd4X3dhdmVzX3VzZGN3eGcFDXd4X3N1cmZfd2F2ZXMFD3d4X3N1cmZfdXNkY3d4ZwYGBwkAzAgCCQCYCgYFD3d4X3N1cmZfdXNkY3d4ZwUNd3hfc3VyZl93YXZlcwUQd3hfd2F2ZXNfdXNkY3d4ZwYHBwUDbmlsAQFpAQdkZWZhdWx0AAMJAQIhPQIIBQFpBmNhbGxlcgUGY2FsbGVyCQACAQILTm8gdG91Y2hpbmcKAQ1hY2N1bUZ1bmN0aW9uAgVhY2N1bQRuZXh0BAplc3RpbWF0aW9uCQENZXN0aW1hdGVSb3V0ZQYIBQRuZXh0Al8xCAUEbmV4dAJfMggFBG5leHQCXzMIBQRuZXh0Al80CAUEbmV4dAJfNQgFBG5leHQCXzYJAJQKAgkAzQgCCAUFYWNjdW0CXzEIBQplc3RpbWF0aW9uAl8xCQDNCAIIBQVhY2N1bQJfMggFCmVzdGltYXRpb24CXzIEBGZvbGQKAAIkbAUGcm91dGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENYWNjdW1GdW5jdGlvbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEBA1tYXhTd2FwUHJvZml0CQCWAwEIBQRmb2xkAl8xAwkAZwIAAAUNbWF4U3dhcFByb2ZpdAkAAgECDUVzdGltYXRlIGZhaWwED2VzdGltYXRlZFJlc3VsdAkAkQMCCAUEZm9sZAJfMgkBBXZhbHVlAQkAzwgCCAUEZm9sZAJfMQUNbWF4U3dhcFByb2ZpdAQHcmVzdWx0MQkBCmludm9rZVN3YXABCQCRAwIFD2VzdGltYXRlZFJlc3VsdAAAAwkAAAIFB3Jlc3VsdDEFB3Jlc3VsdDEEB3Jlc3VsdDIJAQppbnZva2VTd2FwAQkAkQMCBQ9lc3RpbWF0ZWRSZXN1bHQAAQMJAAACBQdyZXN1bHQyBQdyZXN1bHQyBAdyZXN1bHQzCQEKaW52b2tlU3dhcAEJAJEDAgUPZXN0aW1hdGVkUmVzdWx0AAIDCQAAAgUHcmVzdWx0MwUHcmVzdWx0MwQGcHJvZml0CQBlAgkBCmdldEJhbGFuY2UBBQdJbkFzc2V0BQlpbkJhbGFuY2UECnB1cmVQcm9maXQDCQBmAgkAagIIBQFpA2ZlZQAKAAAJAGUCBQZwcm9maXQAgMjQBwUGcHJvZml0AwkAZwIAAAUKcHVyZVByb2ZpdAkAAgECDEV4ZWN1dGUgZmFpbAMJAAACCAUJbGFzdEJsb2NrCWdlbmVyYXRvcgUJZ2VuZXJhdG9yCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC21ldnJlY2VpdmVyBQZwcm9maXQFB0luQXNzZXQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICC21ldl9wcm9maXRfBQpJbkFzc2V0U3RyAgFfCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQZwcm9maXQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIQbWV2X3RvdGFsUHJvZml0XwUKSW5Bc3NldFN0cgkAZAIJAQxnZXRJbnRPclplcm8BCQCsAgICEG1ldl90b3RhbFByb2ZpdF8FCkluQXNzZXRTdHIFBnByb2ZpdAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCHJlY2VpdmVyBQZwcm9maXQFB0luQXNzZXQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICB3Byb2ZpdF8FCkluQXNzZXRTdHICAV8JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAFBnByb2ZpdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAgx0b3RhbFByb2ZpdF8FCkluQXNzZXRTdHIJAGQCCQEMZ2V0SW50T3JaZXJvAQkArAICAgx0b3RhbFByb2ZpdF8FCkluQXNzZXRTdHIFBnByb2ZpdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAI/yeVY=", "chainId": 87, "height": 3650671, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 62aNRCwRhUeg8j92cpFwuGuuyqZ7Ex1weWQpcx8pW5qe Next: EhhGNZ6P619icbJbSKcMZkTYydB4tVzjXngS6DpBtMtx Diff:
OldNewDifferences
226226 let profit = (getBalance(InAsset) - inBalance)
227227 let pureProfit = if (((i.fee % 10) > 0))
228228 then (profit - 16000000)
229- else (profit - 250000)
229+ else profit
230230 if ((0 >= pureProfit))
231231 then throw("Execute fail")
232232 else if ((lastBlock.generator == generator))
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 Scale8 = 100000000
99
1010 let Scale8BigInt = toBigInt(Scale8)
1111
1212 let ZeroBigInt = toBigInt(0)
1313
1414 let SEP = "__"
1515
1616 let InScale = 1000000
1717
1818 let InDecimals = 6
1919
2020 let InScaleBigInt = toBigInt(InScale)
2121
2222 let InAsset = base58'6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ'
2323
2424 let InAssetStr = "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ"
2525
2626 let caller = Address(base58'3PQ23xgnf98t4qDtF5bscxdCDwgYoL7SPeK')
2727
2828 let generator = Address(base58'3PCrRrwHEjGXFjYtXDsNv78f3Ch3CH3p6V1')
2929
3030 let receiver = Address(base58'3PLoX5yufZz9jRahL1CVVRAXq8VpUmXBKLK')
3131
3232 let mevreceiver = Address(base58'3P4kBiU4wr2yV1S5gMfu3MdkVvy7kxXHsKe')
3333
3434 let wxSwapAddress = Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93')
3535
3636 let thisAddressStr = toString(this)
3737
3838 func getIntOrZero (key) = valueOrElse(getInteger(key), 0)
3939
4040
4141 func getBalance (asset) = if ((asset == unit))
4242 then wavesBalance(this).regular
4343 else assetBalance(this, value(asset))
4444
4545
4646 func getAssetOrWaves (assetStr) = if ((assetStr == "WAVES"))
4747 then unit
4848 else fromBase58String(assetStr)
4949
5050
5151 let inBalance = getBalance(InAsset)
5252
5353 let inBalanceBigInt = toBigInt(inBalance)
5454
5555 func getSwopPool (pool) = {
5656 let assetIdAStr = getStringValue(pool, "A_asset_id")
5757 let assetIdBStr = getStringValue(pool, "B_asset_id")
5858 let assetIdA = getAssetOrWaves(assetIdAStr)
5959 let assetIdB = getAssetOrWaves(assetIdBStr)
6060 let balanceA = getIntegerValue(pool, "A_asset_balance")
6161 let balanceB = getIntegerValue(pool, "B_asset_balance")
6262 let outFee = (Scale6BigInt - toBigInt(getIntegerValue(pool, "commission")))
6363 $Tuple9(toBigInt(balanceA), toBigInt(balanceB), assetIdA, assetIdB, assetIdAStr, assetIdBStr, Scale6BigInt, outFee, pool)
6464 }
6565
6666
6767 func keyAdditionalBalance (assetId) = makeString(["%s%s", "stakedBalance", assetId], SEP)
6868
6969
7070 func keyStakingAssetBalance (assetId) = makeString(["%s%s", "shareAssetBalance", assetId], SEP)
7171
7272
7373 func getAdditionalBalanceOrZero (pool,assetId) = valueOrElse(getInteger(pool, keyAdditionalBalance(assetId)), 0)
7474
7575
7676 func getStakingAssetBalanceOrZero (pool,assetId) = valueOrElse(getInteger(pool, keyStakingAssetBalance(assetId)), 0)
7777
7878
7979 func getWxAccountBalance (pool,assetId) = {
8080 let balanceOnPool = if ((assetId == "WAVES"))
8181 then wavesBalance(pool).available
8282 else assetBalance(pool, fromBase58String(assetId))
8383 let totalBalance = ((balanceOnPool + getAdditionalBalanceOrZero(pool, assetId)) - getStakingAssetBalanceOrZero(pool, assetId))
8484 max([0, totalBalance])
8585 }
8686
8787
8888 func getWxPool (pool) = {
8989 let assetIdAStr = getStringValue(pool, "%s__amountAsset")
9090 let assetIdBStr = getStringValue(pool, "%s__priceAsset")
9191 let assetIdA = getAssetOrWaves(assetIdAStr)
9292 let assetIdB = getAssetOrWaves(assetIdBStr)
9393 let balanceA = getWxAccountBalance(pool, assetIdAStr)
9494 let balanceB = getWxAccountBalance(pool, assetIdBStr)
9595 let protocolFee = getIntegerValue(wxSwapAddress, "%s__protocolFee")
9696 let poolFee = getIntegerValue(wxSwapAddress, "%s__poolFee")
9797 let inFee = (Scale6BigInt - fraction(toBigInt((protocolFee + poolFee)), Scale6BigInt, Scale8BigInt))
9898 $Tuple9(toBigInt(balanceA), toBigInt(balanceB), assetIdA, assetIdB, assetIdAStr, assetIdBStr, inFee, Scale6BigInt, wxSwapAddress)
9999 }
100100
101101
102102 func calcSwap (pmtAmount,tokenFrom,tokenTo,inFee,outFee) = {
103103 let cleanAmount = fraction(pmtAmount, inFee, Scale6BigInt)
104104 let amountWithoutFee = fraction(tokenTo, cleanAmount, (cleanAmount + tokenFrom))
105105 let amountWithFee = fraction(amountWithoutFee, outFee, Scale6BigInt)
106106 amountWithFee
107107 }
108108
109109
110110 func estimateSwap (poolInfo,inAsset,inAmount) = {
111111 let routeArgs = if ((inAsset == poolInfo._3))
112112 then $Tuple3(poolInfo._4, poolInfo._6, calcSwap(inAmount, poolInfo._1, poolInfo._2, poolInfo._7, poolInfo._8))
113113 else $Tuple3(poolInfo._3, poolInfo._5, calcSwap(inAmount, poolInfo._2, poolInfo._1, poolInfo._7, poolInfo._8))
114114 let dappArgs = if ((poolInfo._9 == wxSwapAddress))
115115 then $Tuple2("swap", [0, routeArgs._2, thisAddressStr])
116116 else $Tuple2("exchange", [1])
117117 $Tuple4(routeArgs._1, routeArgs._3, dappArgs._1, dappArgs._2)
118118 }
119119
120120
121121 func estimateRoute (pool1,pool2,pool3,pool1Reverse,pool2Reverse,pool3Reverse) = {
122122 let a12 = if (pool1Reverse)
123123 then pool1._2
124124 else pool1._1
125125 let a21 = if (pool1Reverse)
126126 then pool1._1
127127 else pool1._2
128128 let a23 = if (pool2Reverse)
129129 then pool2._2
130130 else pool2._1
131131 let a32 = if (pool2Reverse)
132132 then pool2._1
133133 else pool2._2
134134 let a31 = if (pool3Reverse)
135135 then pool3._2
136136 else pool3._1
137137 let a13 = if (pool3Reverse)
138138 then pool3._1
139139 else pool3._2
140140 let aaDenominator = (a23 + fraction(fraction(a21, pool1._8, Scale6BigInt), pool2._7, Scale6BigInt))
141141 let aa13 = fraction(a12, a23, aaDenominator)
142142 let aa31 = fraction(fraction(fraction(a21, a32, aaDenominator), pool2._7, Scale6BigInt), pool2._8, Scale6BigInt)
143143 let aDenominator = (a31 + fraction(fraction(aa31, pool1._7, Scale6BigInt), pool1._8, Scale6BigInt))
144144 let a = fraction(aa13, a31, aDenominator)
145145 let aa = fraction(fraction(fraction(aa31, a13, aDenominator), pool3._7, Scale6BigInt), pool3._8, Scale6BigInt)
146146 let delta = fraction((sqrtBigInt(fraction(fraction(fraction(aa, a, InScaleBigInt), pool1._7, Scale6BigInt), pool1._8, Scale6BigInt), InDecimals, InDecimals, CEILING) - a), Scale6BigInt, pool1._7)
147147 if ((ZeroBigInt >= delta))
148148 then $Tuple2(0, nil)
149149 else {
150150 let input = if ((delta > inBalanceBigInt))
151151 then inBalanceBigInt
152152 else delta
153153 let swap1 = estimateSwap(pool1, InAsset, input)
154154 let swap2 = estimateSwap(pool2, swap1._1, swap1._2)
155155 let swap3 = estimateSwap(pool3, swap2._1, swap2._2)
156156 $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))])
157157 }
158158 }
159159
160160
161161 func invokeSwap (args) = {
162162 let currentBalance = getBalance(args._4)
163163 let trimmedAmount = if ((args._5 > currentBalance))
164164 then currentBalance
165165 else args._5
166166 let resultAmount = if ((args._4 == InAsset))
167167 then trimmedAmount
168168 else if ((currentBalance > args._5))
169169 then currentBalance
170170 else trimmedAmount
171171 invoke(args._1, args._2, args._3, [AttachedPayment(args._4, resultAmount)])
172172 }
173173
174174
175175 let swop_usdcwxg_usdtwxg = getSwopPool(Address(base58'3PJgkN4gy6b8qpA86otcJ2KDTbL8ay2n91s'))
176176
177177 let wx_surf_waves = getWxPool(Address(base58'3PNnCngfvAzyvAQ1cEudZ3o6o3tFktsBVz5'))
178178
179179 let wx_surf_usdcwxg = getWxPool(Address(base58'3PBfTdcoKmMNxZcjP8eTokbLFqYTUdoNKWL'))
180180
181181 let wx_surf_usdtwxg = getWxPool(Address(base58'3PM6YyJauiFTZzVLuRcCkDwWBvWTvPYo1ZM'))
182182
183183 let wx_waves_usdcwxg = getWxPool(Address(base58'3P3g3eipfG2NZKKQE8DZXt2E9tRJqii9jcX'))
184184
185185 let wx_waves_usdtwxg = getWxPool(Address(base58'3PKMVZ7kQeaREajYi8Yc25Ro6mcNw5D6QSa'))
186186
187187 let routes = [$Tuple6(swop_usdcwxg_usdtwxg, wx_waves_usdtwxg, wx_waves_usdcwxg, false, true, false), $Tuple6(wx_waves_usdcwxg, wx_waves_usdtwxg, swop_usdcwxg_usdtwxg, true, false, true), $Tuple6(wx_waves_usdcwxg, wx_surf_waves, wx_surf_usdcwxg, true, true, false), $Tuple6(wx_surf_usdcwxg, wx_surf_waves, wx_waves_usdcwxg, true, false, false)]
188188
189189 @Callable(i)
190190 func default () = if ((i.caller != caller))
191191 then throw("No touching")
192192 else {
193193 func accumFunction (accum,next) = {
194194 let estimation = estimateRoute(next._1, next._2, next._3, next._4, next._5, next._6)
195195 $Tuple2((accum._1 :+ estimation._1), (accum._2 :+ estimation._2))
196196 }
197197
198198 let fold = {
199199 let $l = routes
200200 let $s = size($l)
201201 let $acc0 = $Tuple2(nil, nil)
202202 func $f0_1 ($a,$i) = if (($i >= $s))
203203 then $a
204204 else accumFunction($a, $l[$i])
205205
206206 func $f0_2 ($a,$i) = if (($i >= $s))
207207 then $a
208208 else throw("List size exceeds 4")
209209
210210 $f0_2($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4)
211211 }
212212 let maxSwapProfit = max(fold._1)
213213 if ((0 >= maxSwapProfit))
214214 then throw("Estimate fail")
215215 else {
216216 let estimatedResult = fold._2[value(indexOf(fold._1, maxSwapProfit))]
217217 let result1 = invokeSwap(estimatedResult[0])
218218 if ((result1 == result1))
219219 then {
220220 let result2 = invokeSwap(estimatedResult[1])
221221 if ((result2 == result2))
222222 then {
223223 let result3 = invokeSwap(estimatedResult[2])
224224 if ((result3 == result3))
225225 then {
226226 let profit = (getBalance(InAsset) - inBalance)
227227 let pureProfit = if (((i.fee % 10) > 0))
228228 then (profit - 16000000)
229- else (profit - 250000)
229+ else profit
230230 if ((0 >= pureProfit))
231231 then throw("Execute fail")
232232 else if ((lastBlock.generator == generator))
233233 then [ScriptTransfer(mevreceiver, profit, InAsset), IntegerEntry(((("mev_profit_" + InAssetStr) + "_") + toString(lastBlock.timestamp)), profit), IntegerEntry(("mev_totalProfit_" + InAssetStr), (getIntOrZero(("mev_totalProfit_" + InAssetStr)) + profit))]
234234 else [ScriptTransfer(receiver, profit, InAsset), IntegerEntry(((("profit_" + InAssetStr) + "_") + toString(lastBlock.timestamp)), profit), IntegerEntry(("totalProfit_" + InAssetStr), (getIntOrZero(("totalProfit_" + InAssetStr)) + profit))]
235235 }
236236 else throw("Strict value is not equal to itself.")
237237 }
238238 else throw("Strict value is not equal to itself.")
239239 }
240240 else throw("Strict value is not equal to itself.")
241241 }
242242 }
243243
244244

github/deemru/w8io/3ef1775 
54.80 ms