tx · 8nHt1e6wLaFg4xBwUUANrzfbmZ8vH68P9GXY85AYpnRB

3PCxF4JryswYYp9mpUtE725wjTgvpBmp3M9:  -0.01000000 Waves

2024.03.26 14:46 [4100892] smart account 3PCxF4JryswYYp9mpUtE725wjTgvpBmp3M9 > SELF 0.00000000 Waves

{ "type": 13, "id": "8nHt1e6wLaFg4xBwUUANrzfbmZ8vH68P9GXY85AYpnRB", "fee": 1000000, "feeAssetId": null, "timestamp": 1711453623771, "version": 2, "chainId": 87, "sender": "3PCxF4JryswYYp9mpUtE725wjTgvpBmp3M9", "senderPublicKey": "ABaPDrNzForWeg3KKG9KFKPWxuihEJxK9fjZ9nDfvE26", "proofs": [ "2HHE14pZ7PAspJtkjTvZpMsmPD2HvJ2FGz8L3mrkC5HRDumsnRSCNjz8PgSpcNSyUj9DtVKivUcb4S78K9QvqyqR" ], "script": "base64:BgIbCAISAwoBBBIDCgEEEgMKAQESBAoCCAESABIAGwAHaW52b2tlcgkBB0FkZHJlc3MBARoBVxiJGyRtL+JEpbK5LtBkI1AuKd9yMNoyWQAIVVNEVGRhcHAJAQdBZGRyZXNzAQEaAVf71JwncFfMM9/6I0kiQLjvSbBsjAn0RXkACFVTRENkYXBwCQEHQWRkcmVzcwEBGgFXz6aN3s2+zY3dv+vX54lGQL255gN5PxhyAAp6ZXJvQmlnSW50CQC2AgEAAAAEYmlnMAkAtgIBAAAABGJpZzEJALYCAQABAARiaWcyCQC2AgEAAgAEYmlnMwkAtgIBAAMABGJpZzQJALYCAQAEAAt3YXZlc1N0cmluZwIFV0FWRVMABUFtdWx0AgMxMDAAFWtleVNlbGVjdG9ySXNTaHV0ZG93bgIUc2VsZWN0b3JfaXNfc2h1dGRvd24ABGFtSWQCLDNheUgzUGhXTWtoRnN5U3NVVmNDOEJ2RmYxUXl4R0I1Qlp1VFB5VnRtUDR2AARwcklkAixHNVdXV3p6VnNXUnl6R2YzMnhvamJuZnA3Z1hiV3JncUpUOFJjVldFZkxtQwABQQIEMjAwMAAQa2V5VHJhZGluZ1ZvbHVtZQIddG90YWwgdHJhZGluZyB2b2x1bWUgY2VudGxldHMAA2ZlZQABAAhmZWVTY2FsZQCQTgACZDYAwIQ9AQ10cnlHZXRJbnRlZ2VyAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABD2Fzc2V0SWRUb1N0cmluZwEFaW5wdXQDCQAAAgUFaW5wdXQFBHVuaXQFC3dhdmVzU3RyaW5nCQDYBAEJAQV2YWx1ZQEFBWlucHV0AQlhYnNCaWdJbnQBA3ZhbAMJAL8CAgUKemVyb0JpZ0ludAUDdmFsCQC+AgEFA3ZhbAUDdmFsAQ1nZXRBY2NCYWxhbmNlAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQFBGFtSWQJAGQCCQDwBwIFBHRoaXMJANkEAQUHYXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTApAgUIVVNEQ2RhcHAJAKwCAgIJVVNFUl9MUF9fCQClCAEFBHRoaXMJAGQCCQDwBwIFBHRoaXMJANkEAQUHYXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTApAgUIVVNEVGRhcHAJAKwCAgIJVVNFUl9MUF9fCQClCAEFBHRoaXMBDHBhcnNlQXNzZXRJZAEFaW5wdXQDCQAAAgUFaW5wdXQFC3dhdmVzU3RyaW5nBQR1bml0CQDZBAEFBWlucHV0AQRnZXREAQJ4cAQDeHAwCQCRAwIFAnhwAAAEA3hwMQkAkQMCBQJ4cAABBAFzCQC3AgIFA3hwMAUDeHAxAwkAAAIFAXMFBGJpZzAFBGJpZzAEAWEJAQ1wYXJzZUludFZhbHVlAQUBQQQDYW5uCQBoAgUBYQACBAFwCQC8AgMFA3hwMAUDeHAxBQRiaWcxBAt4cDBfeHAxX25fbgkAvAIDBQFwBQRiaWc0BQRiaWcxBAVhbm5fcwkAvAIDCQC2AgEFA2FubgUBcwUEYmlnMQQFYW5uXzEJALYCAQkAZQIFA2FubgABCgEJY2FsY0ROZXh0AQFkBAJkZAkAvAIDBQFkBQFkBQRiaWcxBANkZGQJALwCAwUCZGQFAWQFBGJpZzEEAmRwCQC8AgMFA2RkZAUEYmlnMQULeHAwX3hwMV9uX24JALwCAwkAtwICBQVhbm5fcwkAvAIDBQJkcAUEYmlnMgUEYmlnMQUBZAkAtwICCQC8AgMFBWFubl8xBQFkBQRiaWcxCQC8AgMFBGJpZzMFAmRwBQRiaWcxCgEEY2FsYwIDYWNjAWkDCAUDYWNjAl8yBQNhY2MEAWQIBQNhY2MCXzEEBWROZXh0CQEJY2FsY0ROZXh0AQUBZAQIZERpZmZSYXcJALgCAgUFZE5leHQJAQV2YWx1ZQEFAWQEBWREaWZmAwkAvwICBQRiaWcwBQhkRGlmZlJhdwkAvgIBBQhkRGlmZlJhdwUIZERpZmZSYXcDCQDAAgIFBGJpZzEFBWREaWZmCQCUCgIFBWROZXh0BgkAlAoCBQVkTmV4dAcEA2FycgkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgkAzAgCAA8JAMwIAgAQBQNuaWwECyR0MDI3NTcyODA1CgACJGwFA2FycgoAAiRzCQCQAwEF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BQckbWF0Y2gwAgdCb29sZWFuBAF4BQckbWF0Y2gwBQF4BwYBaQEIc2h1dGRvd24BCHNodXRkb3duAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgILaXNfc2h1dGRvd24FCHNodXRkb3duBQNuaWwJAAIBAgphZG1pbiBvbmx5AWkBEHNodXRkb3duU2VsZWN0b3IBCHNodXRkb3duAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUVa2V5U2VsZWN0b3JJc1NodXRkb3duBQhzaHV0ZG93bgUDbmlsCQACAQIKYWRtaW4gb25seQFpAQRzd2FwAQxhbW91bnRPdXRNaW4DAwkAAAIJAQppc1NodXRkb3duAAYJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBV44d5lHKOCPOw5HDxFaL1YPTb4hW/zbdCwcJAAIBAhRjb250cmFjdCBpcyBzaHV0ZG93bgQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAECGFtb3VudEluAwkAZgIJAGkCBQJkNgAKCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAAgECC21pbmltdW0gMC4xCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQNZmVlUG9vbEFtb3VudAkAawMFCGFtb3VudEluBQNmZWUFCGZlZVNjYWxlBA1jbGVhbkFtb3VudEluCQBlAgUIYW1vdW50SW4FDWZlZVBvb2xBbW91bnQEB2Fzc2V0SW4DAwkAAAIJAQ9hc3NldElkVG9TdHJpbmcBCAUDcG10B2Fzc2V0SWQFBGFtSWQGCQAAAgkBD2Fzc2V0SWRUb1N0cmluZwEIBQNwbXQHYXNzZXRJZAUEcHJJZAkBD2Fzc2V0SWRUb1N0cmluZwEIBQNwbXQHYXNzZXRJZAkAAgECDndyb25nIGFzc2V0IGlkBAlpc1JldmVyc2UDCQAAAgUHYXNzZXRJbgUEYW1JZAcGBAhBc3NldE91dAMJAAACBQdhc3NldEluBQRhbUlkBQRwcklkBQRhbUlkBAskdDA2MDU2NjQzNgMJAAACBQlpc1JldmVyc2UHBAhhc3NldE91dAUEcHJJZAQTcG9vbEFtb3VudEluQmFsYW5jZQkAtwICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAkAtgIBBQ1jbGVhbkFtb3VudEluCQCUCgIFCGFzc2V0T3V0BRNwb29sQW1vdW50SW5CYWxhbmNlBAhhc3NldE91dAUEYW1JZAQTcG9vbEFtb3VudEluQmFsYW5jZQkAtwICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEcHJJZAkAtgIBBQ1jbGVhbkFtb3VudEluCQCUCgIFCGFzc2V0T3V0BRNwb29sQW1vdW50SW5CYWxhbmNlBAhhc3NldE91dAgFCyR0MDYwNTY2NDM2Al8xBBNwb29sQW1vdW50SW5CYWxhbmNlCAULJHQwNjA1NjY0MzYCXzIEAnhwAwkAAAIFCWlzUmV2ZXJzZQcJAMwIAgkAuAICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAkAtgIBCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAzAgCCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEcHJJZAUDbmlsCQDMCAIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRhbUlkCQDMCAIJALgCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQJALYCAQgJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA25pbAQBRAkBBGdldEQBBQJ4cAQBeQkBBGdldFkDBQlpc1JldmVyc2UFAUQJALYCAQAABAJkeQkAuAICCQC4AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQhBc3NldE91dAUBeQkAtgIBAAEEC3RvdGFsR2V0UmF3CQCWAwEJAMwIAgAACQDMCAIJAKADAQUCZHkFA25pbAQIY2hlY2tNaW4DCQBnAgULdG90YWxHZXRSYXcFDGFtb3VudE91dE1pbgYJAAIBAixFeGNoYW5nZSByZXN1bHQgaXMgZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAMJAAACBQhjaGVja01pbgUIY2hlY2tNaW4EBW5ld1hwAwkAAAIFCWlzUmV2ZXJzZQcJAMwIAgkAtwICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAkAtgIBBQ1mZWVQb29sQW1vdW50CQDMCAIJALgCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQFAmR5BQNuaWwJAMwIAgkAuAICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAUCZHkJAMwIAgkAtwICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEcHJJZAkAtgIBBQ1mZWVQb29sQW1vdW50BQNuaWwEBG5ld0QJAQRnZXREAQUFbmV3WHAEBmNoZWNrRAMJAMACAgUEbmV3RAUBRAYJAAIBAhRuZXcgRCBpcyBmZXdlciBlcnJvcgMJAAACBQZjaGVja0QFBmNoZWNrRAQHdW5zdGFrZQMJAAACBQhBc3NldE91dAUEYW1JZAMJAGYCBQt0b3RhbEdldFJhdwkA8AcCBQR0aGlzASAmayw0f5EMiLgWXB633gaEsrOhJTNLbYg6Ch9lNW5viwkA/AcEBQhVU0RDZGFwcAIHdW5zdGFrZQkAzAgCCQBlAgULdG90YWxHZXRSYXcJAPAHAgUEdGhpcwEgJmssNH+RDIi4Flwet94GhLKzoSUzS22IOgofZTVub4sFA25pbAUDbmlsBQR1bml0AwkAZgIFC3RvdGFsR2V0UmF3CQDwBwIFBHRoaXMBIOAG/jNgURmsDaH0/Lr83+C6nyVqY4hD5jTlJpTwnV8PCQD8BwQFCFVTRFRkYXBwAgd1bnN0YWtlCQDMCAIJAGUCBQt0b3RhbEdldFJhdwkA8AcCBQR0aGlzASDgBv4zYFEZrA2h9Py6/N/gup8lamOIQ+Y05SaU8J1fDwUDbmlsBQNuaWwFBHVuaXQDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQFc3Rha2UDCQAAAgUIQXNzZXRPdXQFBGFtSWQJAPwHBAUIVVNEVGRhcHACBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUEcHJJZAkA8AcCBQR0aGlzCQDZBAEFBHBySWQFA25pbAkA/AcEBQhVU0RDZGFwcAIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQRhbUlkCQDwBwIFBHRoaXMJANkEAQUEYW1JZAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQIc2VsZWN0b3IDCQAAAgkAmwgCBQR0aGlzBRVrZXlTZWxlY3RvcklzU2h1dGRvd24GBQR1bml0CQD8BwQFB2ludm9rZXICCHNlbGVjdG9yBQNuaWwFA25pbAMJAAACBQhzZWxlY3RvcgUIc2VsZWN0b3IJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQt0b3RhbEdldFJhdwkBDHBhcnNlQXNzZXRJZAEFCGFzc2V0T3V0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrZXlUcmFkaW5nVm9sdW1lCQBkAgUIYW1vdW50SW4JAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUQa2V5VHJhZGluZ1ZvbHVtZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCHJlYWRTd2FwAgdBc3NldEluCEFtb3VudEluAwMJAAACCQEKaXNTaHV0ZG93bgAGCQECIT0CCAUBaQZjYWxsZXIJAQdBZGRyZXNzAQEaAVeOHeZRyjgjzsORw8RWi9WD02+IVv823QsHCQACAQIUY29udHJhY3QgaXMgc2h1dGRvd24EA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAhhbW91bnRJbgMJAGYCCQBpAgUCZDYACgkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAAIBAgttaW5pbXVtIDAuMQkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEDWZlZVBvb2xBbW91bnQJAGsDBQhhbW91bnRJbgUDZmVlBQhmZWVTY2FsZQQNY2xlYW5BbW91bnRJbgkAZQIFCGFtb3VudEluBQ1mZWVQb29sQW1vdW50BAdhc3NldEluAwMJAAACCQEPYXNzZXRJZFRvU3RyaW5nAQgFA3BtdAdhc3NldElkBQRhbUlkBgkAAAIJAQ9hc3NldElkVG9TdHJpbmcBCAUDcG10B2Fzc2V0SWQFBHBySWQJAQ9hc3NldElkVG9TdHJpbmcBCAUDcG10B2Fzc2V0SWQJAAIBAg53cm9uZyBhc3NldCBpZAQJaXNSZXZlcnNlAwkAAAIFB2Fzc2V0SW4FBGFtSWQHBgQIQXNzZXRPdXQDCQAAAgUHYXNzZXRJbgUEYW1JZAUEcHJJZAUEYW1JZAQLJHQwOTE4Nzk1NjcDCQAAAgUJaXNSZXZlcnNlBwQIYXNzZXRPdXQFBHBySWQEE3Bvb2xBbW91bnRJbkJhbGFuY2UJALcCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBGFtSWQJALYCAQUNY2xlYW5BbW91bnRJbgkAlAoCBQhhc3NldE91dAUTcG9vbEFtb3VudEluQmFsYW5jZQQIYXNzZXRPdXQFBGFtSWQEE3Bvb2xBbW91bnRJbkJhbGFuY2UJALcCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQJALYCAQUNY2xlYW5BbW91bnRJbgkAlAoCBQhhc3NldE91dAUTcG9vbEFtb3VudEluQmFsYW5jZQQIYXNzZXRPdXQIBQskdDA5MTg3OTU2NwJfMQQTcG9vbEFtb3VudEluQmFsYW5jZQgFCyR0MDkxODc5NTY3Al8yBAJ4cAMJAAACBQlpc1JldmVyc2UHCQDMCAIJALgCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBGFtSWQJALYCAQgJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAMwIAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQFA25pbAkAzAgCCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAkAzAgCCQC4AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRwcklkCQC2AgEICQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNuaWwEAUQJAQRnZXREAQUCeHAEAXkJAQRnZXRZAwUJaXNSZXZlcnNlBQFECQC2AgEAAAQCZHkJALgCAgkAuAICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUIQXNzZXRPdXQFAXkJALYCAQABBAt0b3RhbEdldFJhdwkAlgMBCQDMCAIAAAkAzAgCCQCgAwEFAmR5BQNuaWwEBW5ld1hwAwkAAAIFCWlzUmV2ZXJzZQcJAMwIAgkAtwICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAkAtgIBBQ1mZWVQb29sQW1vdW50CQDMCAIJALgCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQFAmR5BQNuaWwJAMwIAgkAuAICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAUCZHkJAMwIAgkAtwICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEcHJJZAkAtgIBBQ1mZWVQb29sQW1vdW50BQNuaWwEBG5ld0QJAQRnZXREAQUFbmV3WHAEBmNoZWNrRAMJAMACAgUEbmV3RAUBRAYJAAIBAhRuZXcgRCBpcyBmZXdlciBlcnJvcgMJAAACBQZjaGVja0QFBmNoZWNrRAkAzAgCCQELU3RyaW5nRW50cnkCAhBhc3NldCBpZCBwYXltZW50BQdBc3NldEluCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgthbW91bnQgcGFpZAUIQW1vdW50SW4JAMwIAgkBDEludGVnZXJFbnRyeQICJGFtb3VudCBwYWlkIHJvdW5kZWQgd2l0aG91dCBkZWNpbWFscwkAaQIFCEFtb3VudEluBQJkNgkAzAgCCQELU3RyaW5nRW50cnkCAhNhc3NldCBpZCB0byByZWNlaXZlBQhBc3NldE91dAkAzAgCCQEMSW50ZWdlckVudHJ5AgIRYW1vdW50IHRvIHJlY2VpdmUFC3RvdGFsR2V0UmF3CQDMCAIJAQxJbnRlZ2VyRW50cnkCAiphbW91bnQgdG8gcmVjZWl2ZSByb3VuZGVkIHdpdGhvdXQgZGVjaW1hbHMJAGkCBQt0b3RhbEdldFJhdwUCZDYJAMwIAgkBDEludGVnZXJFbnRyeQICBXByaWNlCQBrAwUCZDYFCEFtb3VudEluBQt0b3RhbEdldFJhdwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDGJhbGFuY2VfaW5mbwAJAMwIAgkBDEludGVnZXJFbnRyeQICBFVTREMJAGkCCQENZ2V0QWNjQmFsYW5jZQEFBGFtSWQFAmQ2CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgRVU0RUCQBpAgkBDWdldEFjY0JhbGFuY2UBBQRwcklkBQJkNgkAzAgCCQEMSW50ZWdlckVudHJ5AgIJVVNEIHRvdGFsCQBpAgkAZAIJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAkBDWdldEFjY0JhbGFuY2UBBQRwcklkBQJkNgUDbmlsAWkBFHJlc2V0X3RyYWRpbmdfdm9sdW1lAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtleVRyYWRpbmdWb2x1bWUAAAUDbmlsALdkqOY=", "height": 4100892, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3F1cahotfKCPgpGfgNUhBEmz2guPbCQm4e5XUJhLkw3J Next: EiCCoqeM1em1NnsWVDN9GPPKNxUEabcAQqpWyaKLhwqL Diff:
OldNewDifferences
3131
3232 let A = "2000"
3333
34+let keyTradingVolume = "total trading volume centlets"
35+
3436 let fee = 1
3537
3638 let feeScale = 10000
3739
3840 let d6 = 1000000
41+
42+func tryGetInteger (address,key) = match getInteger(address, key) {
43+ case b: Int =>
44+ b
45+ case _ =>
46+ 0
47+}
48+
3949
4050 func assetIdToString (input) = if ((input == unit))
4151 then wavesString
92102 }
93103
94104 let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
95- let $t025612609 = {
105+ let $t027572805 = {
96106 let $l = arr
97107 let $s = size($l)
98108 let $acc0 = $Tuple2(s, false)
106116
107117 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17)
108118 }
109- let d = $t025612609._1
110- let found = $t025612609._2
119+ let d = $t027572805._1
120+ let found = $t027572805._2
111121 if (found)
112122 then d
113123 else throw(("D calculation error, D = " + toString(d)))
128138 let c = (((((D * D) / (x * n)) * D) * aPrecision) / (ann * n))
129139 let b = ((s + ((D * aPrecision) / ann)) - D)
130140 func calc (acc,cur) = {
131- let $t042074227 = acc
132- let y = $t042074227._1
133- let found = $t042074227._2
141+ let $t044034423 = acc
142+ let y = $t044034423._1
143+ let found = $t044034423._2
134144 if ((found != unit))
135145 then acc
136146 else {
143153 }
144154
145155 let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
146- let $t045584605 = {
156+ let $t047544801 = {
147157 let $l = arr
148158 let $s = size($l)
149159 let $acc0 = $Tuple2(D, unit)
157167
158168 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
159169 }
160- let y = $t045584605._1
161- let found = $t045584605._2
170+ let y = $t047544801._1
171+ let found = $t047544801._2
162172 if ((found != unit))
163173 then y
164174 else throw(("Y calculation error, Y = " + toString(y)))
210220 let AssetOut = if ((assetIn == amId))
211221 then prId
212222 else amId
213- let $t058606240 = if ((isReverse == false))
223+ let $t060566436 = if ((isReverse == false))
214224 then {
215225 let assetOut = prId
216226 let poolAmountInBalance = (toBigInt(getAccBalance(amId)) + toBigInt(cleanAmountIn))
221231 let poolAmountInBalance = (toBigInt(getAccBalance(prId)) + toBigInt(cleanAmountIn))
222232 $Tuple2(assetOut, poolAmountInBalance)
223233 }
224- let assetOut = $t058606240._1
225- let poolAmountInBalance = $t058606240._2
234+ let assetOut = $t060566436._1
235+ let poolAmountInBalance = $t060566436._2
226236 let xp = if ((isReverse == false))
227237 then [(toBigInt(getAccBalance(amId)) - toBigInt(value(i.payments[0]).amount)), toBigInt(getAccBalance(prId))]
228238 else [toBigInt(getAccBalance(amId)), (toBigInt(getAccBalance(prId)) - toBigInt(value(i.payments[0]).amount))]
262272 then unit
263273 else invoke(invoker, "selector", nil, nil)
264274 if ((selector == selector))
265- then [ScriptTransfer(i.caller, totalGetRaw, parseAssetId(assetOut))]
275+ then [ScriptTransfer(i.caller, totalGetRaw, parseAssetId(assetOut)), IntegerEntry(keyTradingVolume, (amountIn + tryGetInteger(this, keyTradingVolume)))]
266276 else throw("Strict value is not equal to itself.")
267277 }
268278 else throw("Strict value is not equal to itself.")
277287
278288
279289 @Callable(i)
280-func readSwap (AssetIn,AmountIn,AssetOut) = if (if ((isShutdown() == true))
290+func readSwap (AssetIn,AmountIn) = if (if ((isShutdown() == true))
281291 then (i.caller != Address(base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk'))
282292 else false)
283293 then throw("contract is shutdown")
284294 else {
285- let amountIn = AmountIn
295+ let pmt = value(i.payments[0])
296+ let amountIn = if (((d6 / 10) > value(i.payments[0].amount)))
297+ then throw("minimum 0.1")
298+ else value(i.payments[0].amount)
286299 let feePoolAmount = fraction(amountIn, fee, feeScale)
287300 let cleanAmountIn = (amountIn - feePoolAmount)
288- let assetIn = AssetIn
301+ let assetIn = if (if ((assetIdToString(pmt.assetId) == amId))
302+ then true
303+ else (assetIdToString(pmt.assetId) == prId))
304+ then assetIdToString(pmt.assetId)
305+ else throw("wrong asset id")
289306 let isReverse = if ((assetIn == amId))
290307 then false
291308 else true
292- let $t085958975 = if ((isReverse == false))
309+ let AssetOut = if ((assetIn == amId))
310+ then prId
311+ else amId
312+ let $t091879567 = if ((isReverse == false))
293313 then {
294314 let assetOut = prId
295315 let poolAmountInBalance = (toBigInt(getAccBalance(amId)) + toBigInt(cleanAmountIn))
300320 let poolAmountInBalance = (toBigInt(getAccBalance(prId)) + toBigInt(cleanAmountIn))
301321 $Tuple2(assetOut, poolAmountInBalance)
302322 }
303- let assetOut = $t085958975._1
304- let poolAmountInBalance = $t085958975._2
323+ let assetOut = $t091879567._1
324+ let poolAmountInBalance = $t091879567._2
305325 let xp = if ((isReverse == false))
306326 then [(toBigInt(getAccBalance(amId)) - toBigInt(value(i.payments[0]).amount)), toBigInt(getAccBalance(prId))]
307327 else [toBigInt(getAccBalance(amId)), (toBigInt(getAccBalance(prId)) - toBigInt(value(i.payments[0]).amount))]
327347 func balance_info () = [IntegerEntry("USDC", (getAccBalance(amId) / d6)), IntegerEntry("USDT", (getAccBalance(prId) / d6)), IntegerEntry("USD total", ((getAccBalance(amId) + getAccBalance(prId)) / d6))]
328348
329349
350+
351+@Callable(i)
352+func reset_trading_volume () = if ((i.caller != this))
353+ then throw("access only by project owner")
354+ else [IntegerEntry(keyTradingVolume, 0)]
355+
356+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let invoker = Address(base58'3P4AdC9J6MzTEi2LL9xgQN8EimMnbk4d6Nt')
55
66 let USDTdapp = Address(base58'3PQtT2o7g8HmcZLGodx4L7YDe7ngb26wjYk')
77
88 let USDCdapp = Address(base58'3PLrr8LpfYjUadnEQ1ov61uMWHdMopUCNAm')
99
1010 let zeroBigInt = toBigInt(0)
1111
1212 let big0 = toBigInt(0)
1313
1414 let big1 = toBigInt(1)
1515
1616 let big2 = toBigInt(2)
1717
1818 let big3 = toBigInt(3)
1919
2020 let big4 = toBigInt(4)
2121
2222 let wavesString = "WAVES"
2323
2424 let Amult = "100"
2525
2626 let keySelectorIsShutdown = "selector_is_shutdown"
2727
2828 let amId = "3ayH3PhWMkhFsySsUVcC8BvFf1QyxGB5BZuTPyVtmP4v"
2929
3030 let prId = "G5WWWzzVsWRyzGf32xojbnfp7gXbWrgqJT8RcVWEfLmC"
3131
3232 let A = "2000"
3333
34+let keyTradingVolume = "total trading volume centlets"
35+
3436 let fee = 1
3537
3638 let feeScale = 10000
3739
3840 let d6 = 1000000
41+
42+func tryGetInteger (address,key) = match getInteger(address, key) {
43+ case b: Int =>
44+ b
45+ case _ =>
46+ 0
47+}
48+
3949
4050 func assetIdToString (input) = if ((input == unit))
4151 then wavesString
4252 else toBase58String(value(input))
4353
4454
4555 func absBigInt (val) = if ((zeroBigInt > val))
4656 then -(val)
4757 else val
4858
4959
5060 func getAccBalance (assetId) = if ((assetId == amId))
5161 then (assetBalance(this, fromBase58String(assetId)) + getIntegerValue(USDCdapp, ("USER_LP__" + toString(this))))
5262 else (assetBalance(this, fromBase58String(assetId)) + getIntegerValue(USDTdapp, ("USER_LP__" + toString(this))))
5363
5464
5565 func parseAssetId (input) = if ((input == wavesString))
5666 then unit
5767 else fromBase58String(input)
5868
5969
6070 func getD (xp) = {
6171 let xp0 = xp[0]
6272 let xp1 = xp[1]
6373 let s = (xp0 + xp1)
6474 if ((s == big0))
6575 then big0
6676 else {
6777 let a = parseIntValue(A)
6878 let ann = (a * 2)
6979 let p = fraction(xp0, xp1, big1)
7080 let xp0_xp1_n_n = fraction(p, big4, big1)
7181 let ann_s = fraction(toBigInt(ann), s, big1)
7282 let ann_1 = toBigInt((ann - 1))
7383 func calcDNext (d) = {
7484 let dd = fraction(d, d, big1)
7585 let ddd = fraction(dd, d, big1)
7686 let dp = fraction(ddd, big1, xp0_xp1_n_n)
7787 fraction((ann_s + fraction(dp, big2, big1)), d, (fraction(ann_1, d, big1) + fraction(big3, dp, big1)))
7888 }
7989
8090 func calc (acc,i) = if (acc._2)
8191 then acc
8292 else {
8393 let d = acc._1
8494 let dNext = calcDNext(d)
8595 let dDiffRaw = (dNext - value(d))
8696 let dDiff = if ((big0 > dDiffRaw))
8797 then -(dDiffRaw)
8898 else dDiffRaw
8999 if ((big1 >= dDiff))
90100 then $Tuple2(dNext, true)
91101 else $Tuple2(dNext, false)
92102 }
93103
94104 let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
95- let $t025612609 = {
105+ let $t027572805 = {
96106 let $l = arr
97107 let $s = size($l)
98108 let $acc0 = $Tuple2(s, false)
99109 func $f0_1 ($a,$i) = if (($i >= $s))
100110 then $a
101111 else calc($a, $l[$i])
102112
103113 func $f0_2 ($a,$i) = if (($i >= $s))
104114 then $a
105115 else throw("List size exceeds 17")
106116
107117 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17)
108118 }
109- let d = $t025612609._1
110- let found = $t025612609._2
119+ let d = $t027572805._1
120+ let found = $t027572805._2
111121 if (found)
112122 then d
113123 else throw(("D calculation error, D = " + toString(d)))
114124 }
115125 }
116126
117127
118128 func getY (isReverse,D,poolAmountInBalance) = {
119129 let n = big2
120130 let aPrecision = parseBigIntValue(Amult)
121131 let a = (parseBigIntValue(A) * aPrecision)
122132 let xp = if ((isReverse == false))
123133 then [(toBigInt(getAccBalance(amId)) + poolAmountInBalance), toBigInt(getAccBalance(prId))]
124134 else [(toBigInt(getAccBalance(prId)) + poolAmountInBalance), toBigInt(getAccBalance(amId))]
125135 let x = xp[0]
126136 let s = x
127137 let ann = (a * n)
128138 let c = (((((D * D) / (x * n)) * D) * aPrecision) / (ann * n))
129139 let b = ((s + ((D * aPrecision) / ann)) - D)
130140 func calc (acc,cur) = {
131- let $t042074227 = acc
132- let y = $t042074227._1
133- let found = $t042074227._2
141+ let $t044034423 = acc
142+ let y = $t044034423._1
143+ let found = $t044034423._2
134144 if ((found != unit))
135145 then acc
136146 else {
137147 let yNext = (((y * y) + c) / ((big2 * y) + b))
138148 let yDiff = absBigInt((yNext - value(y)))
139149 if ((big1 >= yDiff))
140150 then $Tuple2(yNext, cur)
141151 else $Tuple2(yNext, unit)
142152 }
143153 }
144154
145155 let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
146- let $t045584605 = {
156+ let $t047544801 = {
147157 let $l = arr
148158 let $s = size($l)
149159 let $acc0 = $Tuple2(D, unit)
150160 func $f0_1 ($a,$i) = if (($i >= $s))
151161 then $a
152162 else calc($a, $l[$i])
153163
154164 func $f0_2 ($a,$i) = if (($i >= $s))
155165 then $a
156166 else throw("List size exceeds 15")
157167
158168 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
159169 }
160- let y = $t045584605._1
161- let found = $t045584605._2
170+ let y = $t047544801._1
171+ let found = $t047544801._2
162172 if ((found != unit))
163173 then y
164174 else throw(("Y calculation error, Y = " + toString(y)))
165175 }
166176
167177
168178 func isShutdown () = match getBoolean(this, "is_shutdown") {
169179 case x: Boolean =>
170180 x
171181 case _ =>
172182 false
173183 }
174184
175185
176186 @Callable(i)
177187 func shutdown (shutdown) = if ((i.caller == this))
178188 then [BooleanEntry("is_shutdown", shutdown)]
179189 else throw("admin only")
180190
181191
182192
183193 @Callable(i)
184194 func shutdownSelector (shutdown) = if ((i.caller == this))
185195 then [BooleanEntry(keySelectorIsShutdown, shutdown)]
186196 else throw("admin only")
187197
188198
189199
190200 @Callable(i)
191201 func swap (amountOutMin) = if (if ((isShutdown() == true))
192202 then (i.caller != Address(base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk'))
193203 else false)
194204 then throw("contract is shutdown")
195205 else {
196206 let pmt = value(i.payments[0])
197207 let amountIn = if (((d6 / 10) > value(i.payments[0].amount)))
198208 then throw("minimum 0.1")
199209 else value(i.payments[0].amount)
200210 let feePoolAmount = fraction(amountIn, fee, feeScale)
201211 let cleanAmountIn = (amountIn - feePoolAmount)
202212 let assetIn = if (if ((assetIdToString(pmt.assetId) == amId))
203213 then true
204214 else (assetIdToString(pmt.assetId) == prId))
205215 then assetIdToString(pmt.assetId)
206216 else throw("wrong asset id")
207217 let isReverse = if ((assetIn == amId))
208218 then false
209219 else true
210220 let AssetOut = if ((assetIn == amId))
211221 then prId
212222 else amId
213- let $t058606240 = if ((isReverse == false))
223+ let $t060566436 = if ((isReverse == false))
214224 then {
215225 let assetOut = prId
216226 let poolAmountInBalance = (toBigInt(getAccBalance(amId)) + toBigInt(cleanAmountIn))
217227 $Tuple2(assetOut, poolAmountInBalance)
218228 }
219229 else {
220230 let assetOut = amId
221231 let poolAmountInBalance = (toBigInt(getAccBalance(prId)) + toBigInt(cleanAmountIn))
222232 $Tuple2(assetOut, poolAmountInBalance)
223233 }
224- let assetOut = $t058606240._1
225- let poolAmountInBalance = $t058606240._2
234+ let assetOut = $t060566436._1
235+ let poolAmountInBalance = $t060566436._2
226236 let xp = if ((isReverse == false))
227237 then [(toBigInt(getAccBalance(amId)) - toBigInt(value(i.payments[0]).amount)), toBigInt(getAccBalance(prId))]
228238 else [toBigInt(getAccBalance(amId)), (toBigInt(getAccBalance(prId)) - toBigInt(value(i.payments[0]).amount))]
229239 let D = getD(xp)
230240 let y = getY(isReverse, D, toBigInt(0))
231241 let dy = ((toBigInt(getAccBalance(AssetOut)) - y) - toBigInt(1))
232242 let totalGetRaw = max([0, toInt(dy)])
233243 let checkMin = if ((totalGetRaw >= amountOutMin))
234244 then true
235245 else throw("Exchange result is fewer coins than expected")
236246 if ((checkMin == checkMin))
237247 then {
238248 let newXp = if ((isReverse == false))
239249 then [(toBigInt(getAccBalance(amId)) + toBigInt(feePoolAmount)), (toBigInt(getAccBalance(prId)) - dy)]
240250 else [(toBigInt(getAccBalance(amId)) - dy), (toBigInt(getAccBalance(prId)) + toBigInt(feePoolAmount))]
241251 let newD = getD(newXp)
242252 let checkD = if ((newD >= D))
243253 then true
244254 else throw("new D is fewer error")
245255 if ((checkD == checkD))
246256 then {
247257 let unstake = if ((AssetOut == amId))
248258 then if ((totalGetRaw > assetBalance(this, base58'3ayH3PhWMkhFsySsUVcC8BvFf1QyxGB5BZuTPyVtmP4v')))
249259 then invoke(USDCdapp, "unstake", [(totalGetRaw - assetBalance(this, base58'3ayH3PhWMkhFsySsUVcC8BvFf1QyxGB5BZuTPyVtmP4v'))], nil)
250260 else unit
251261 else if ((totalGetRaw > assetBalance(this, base58'G5WWWzzVsWRyzGf32xojbnfp7gXbWrgqJT8RcVWEfLmC')))
252262 then invoke(USDTdapp, "unstake", [(totalGetRaw - assetBalance(this, base58'G5WWWzzVsWRyzGf32xojbnfp7gXbWrgqJT8RcVWEfLmC'))], nil)
253263 else unit
254264 if ((unstake == unstake))
255265 then {
256266 let stake = if ((AssetOut == amId))
257267 then invoke(USDTdapp, "stake", nil, [AttachedPayment(fromBase58String(prId), assetBalance(this, fromBase58String(prId)))])
258268 else invoke(USDCdapp, "stake", nil, [AttachedPayment(fromBase58String(amId), assetBalance(this, fromBase58String(amId)))])
259269 if ((stake == stake))
260270 then {
261271 let selector = if ((getBoolean(this, keySelectorIsShutdown) == true))
262272 then unit
263273 else invoke(invoker, "selector", nil, nil)
264274 if ((selector == selector))
265- then [ScriptTransfer(i.caller, totalGetRaw, parseAssetId(assetOut))]
275+ then [ScriptTransfer(i.caller, totalGetRaw, parseAssetId(assetOut)), IntegerEntry(keyTradingVolume, (amountIn + tryGetInteger(this, keyTradingVolume)))]
266276 else throw("Strict value is not equal to itself.")
267277 }
268278 else throw("Strict value is not equal to itself.")
269279 }
270280 else throw("Strict value is not equal to itself.")
271281 }
272282 else throw("Strict value is not equal to itself.")
273283 }
274284 else throw("Strict value is not equal to itself.")
275285 }
276286
277287
278288
279289 @Callable(i)
280-func readSwap (AssetIn,AmountIn,AssetOut) = if (if ((isShutdown() == true))
290+func readSwap (AssetIn,AmountIn) = if (if ((isShutdown() == true))
281291 then (i.caller != Address(base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk'))
282292 else false)
283293 then throw("contract is shutdown")
284294 else {
285- let amountIn = AmountIn
295+ let pmt = value(i.payments[0])
296+ let amountIn = if (((d6 / 10) > value(i.payments[0].amount)))
297+ then throw("minimum 0.1")
298+ else value(i.payments[0].amount)
286299 let feePoolAmount = fraction(amountIn, fee, feeScale)
287300 let cleanAmountIn = (amountIn - feePoolAmount)
288- let assetIn = AssetIn
301+ let assetIn = if (if ((assetIdToString(pmt.assetId) == amId))
302+ then true
303+ else (assetIdToString(pmt.assetId) == prId))
304+ then assetIdToString(pmt.assetId)
305+ else throw("wrong asset id")
289306 let isReverse = if ((assetIn == amId))
290307 then false
291308 else true
292- let $t085958975 = if ((isReverse == false))
309+ let AssetOut = if ((assetIn == amId))
310+ then prId
311+ else amId
312+ let $t091879567 = if ((isReverse == false))
293313 then {
294314 let assetOut = prId
295315 let poolAmountInBalance = (toBigInt(getAccBalance(amId)) + toBigInt(cleanAmountIn))
296316 $Tuple2(assetOut, poolAmountInBalance)
297317 }
298318 else {
299319 let assetOut = amId
300320 let poolAmountInBalance = (toBigInt(getAccBalance(prId)) + toBigInt(cleanAmountIn))
301321 $Tuple2(assetOut, poolAmountInBalance)
302322 }
303- let assetOut = $t085958975._1
304- let poolAmountInBalance = $t085958975._2
323+ let assetOut = $t091879567._1
324+ let poolAmountInBalance = $t091879567._2
305325 let xp = if ((isReverse == false))
306326 then [(toBigInt(getAccBalance(amId)) - toBigInt(value(i.payments[0]).amount)), toBigInt(getAccBalance(prId))]
307327 else [toBigInt(getAccBalance(amId)), (toBigInt(getAccBalance(prId)) - toBigInt(value(i.payments[0]).amount))]
308328 let D = getD(xp)
309329 let y = getY(isReverse, D, toBigInt(0))
310330 let dy = ((toBigInt(getAccBalance(AssetOut)) - y) - toBigInt(1))
311331 let totalGetRaw = max([0, toInt(dy)])
312332 let newXp = if ((isReverse == false))
313333 then [(toBigInt(getAccBalance(amId)) + toBigInt(feePoolAmount)), (toBigInt(getAccBalance(prId)) - dy)]
314334 else [(toBigInt(getAccBalance(amId)) - dy), (toBigInt(getAccBalance(prId)) + toBigInt(feePoolAmount))]
315335 let newD = getD(newXp)
316336 let checkD = if ((newD >= D))
317337 then true
318338 else throw("new D is fewer error")
319339 if ((checkD == checkD))
320340 then [StringEntry("asset id payment", AssetIn), IntegerEntry("amount paid", AmountIn), IntegerEntry("amount paid rounded without decimals", (AmountIn / d6)), StringEntry("asset id to receive", AssetOut), IntegerEntry("amount to receive", totalGetRaw), IntegerEntry("amount to receive rounded without decimals", (totalGetRaw / d6)), IntegerEntry("price", fraction(d6, AmountIn, totalGetRaw))]
321341 else throw("Strict value is not equal to itself.")
322342 }
323343
324344
325345
326346 @Callable(i)
327347 func balance_info () = [IntegerEntry("USDC", (getAccBalance(amId) / d6)), IntegerEntry("USDT", (getAccBalance(prId) / d6)), IntegerEntry("USD total", ((getAccBalance(amId) + getAccBalance(prId)) / d6))]
328348
329349
350+
351+@Callable(i)
352+func reset_trading_volume () = if ((i.caller != this))
353+ then throw("access only by project owner")
354+ else [IntegerEntry(keyTradingVolume, 0)]
355+
356+

github/deemru/w8io/3ef1775 
110.25 ms