tx · 75xyz6nw5pVGFUjTh4JXoRS6Vm8wNXkmncRxwUx3x6DW 3PRDdJfgUDq4fCwbNLDaGnfs5eYc6S9A1xX: -0.00700000 Waves 2024.01.23 14:25 [4009836] smart account 3PRDdJfgUDq4fCwbNLDaGnfs5eYc6S9A1xX > SELF 0.00000000 Waves
{ "type": 13, "id": "75xyz6nw5pVGFUjTh4JXoRS6Vm8wNXkmncRxwUx3x6DW", "fee": 700000, "feeAssetId": null, "timestamp": 1706009104812, "version": 1, "sender": "3PRDdJfgUDq4fCwbNLDaGnfs5eYc6S9A1xX", "senderPublicKey": "ERHNiqFN8aMGPtaUbk2MctMJjSghqyTbsyQ5yYBBPzdk", "proofs": [ "49huBzzGDRtMhRLncHh21enNofNyy655meEtjRZFd3J6RKut9ctZH2T87LVWg3TDUdcShZe491gAybjKMrAx3rRG" ], "script": "base64:BgIVCAISBQoDCAgIEgMKAQESABIDCgEBGwAKa2V5X2FjdGl2ZQIGYWN0aXZlAA5rZXlfQV9hc3NldF9pZAIKQV9hc3NldF9pZAAOa2V5X0JfYXNzZXRfaWQCCkJfYXNzZXRfaWQAE2tleV9BX2Fzc2V0X2JhbGFuY2UCD0FfYXNzZXRfYmFsYW5jZQATa2V5X0JfYXNzZXRfYmFsYW5jZQIPQl9hc3NldF9iYWxhbmNlAAZhY3RpdmUJARFAZXh0ck5hdGl2ZSgxMDUxKQIFBHRoaXMFCmtleV9hY3RpdmUACkFfYXNzZXRfaWQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFDmtleV9BX2Fzc2V0X2lkAApCX2Fzc2V0X2lkCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQ5rZXlfQl9hc3NldF9pZAAPQV9hc3NldF9iYWxhbmNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRNrZXlfQV9hc3NldF9iYWxhbmNlAA9CX2Fzc2V0X2JhbGFuY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFE2tleV9CX2Fzc2V0X2JhbGFuY2UAA0ZFRQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAgNmZWUAhOY8AA9GRUVfREVOT01JTkFUT1IAwIQ9AAlrZXlfb3duZXICBW93bmVyAAlrZXlfdG9rZW4CBXRva2VuAAVvd25lcgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUJa2V5X293bmVyAAV0b2tlbgkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQlrZXlfdG9rZW4ADnRva2VuX3F1YW50aXR5CAkBBXZhbHVlAQkA7AcBBQV0b2tlbghxdWFudGl0eQAJUFJFQ0lTSU9OAIDC1y8BDGNoZWNrQWRkcmVzcwEDYTU4BAFhCQERQGV4dHJOYXRpdmUoMTA2MikBBQNhNTgJAKUIAQUBYQEKY2hlY2tBc3NldAEHYXNzZXQ1OAMJAAACBQdhc3NldDU4AgVXQVZFUwIFV0FWRVMEBWFzc2V0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJANkEAQUHYXNzZXQ1OAkArAICAhZ3cm9uZyBhc3NldCBlbmNvZGluZzogBQdhc3NldDU4BARpbmZvCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUFYXNzZXQJAKwCAgISd3JvbmcgYXNzZXQgaW5mbzogBQdhc3NldDU4AwkAAAIFBGluZm8FBGluZm8FB2Fzc2V0NTgJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BBWFzc2V0AQFhAwkAAAIFAWECBVdBVkVTBQR1bml0CQDZBAEFAWEBB2FsbG93ZWQBBmNhbGxlcgkBCGNvbnRhaW5zAgUFb3duZXIJAKUIAQUGY2FsbGVyAQptdWx0aXBsaWVyAQhkZWNpbWFscwQHJG1hdGNoMAUIZGVjaW1hbHMDCQAAAgAIBQckbWF0Y2gwAIDC1y8DCQAAAgAHBQckbWF0Y2gwAICt4gQDCQAAAgAGBQckbWF0Y2gwAMCEPQMJAAACAAUFByRtYXRjaDAAoI0GAwkAAAIABAUHJG1hdGNoMACQTgMJAAACAAMFByRtYXRjaDAA6AcDCQAAAgACBQckbWF0Y2gwAGQDCQAAAgABBQckbWF0Y2gwAAoDCQAAAgAABQckbWF0Y2gwAAEJAAIBCQCsAgICFnVuc3VwcG9ydGVkIGRlY2ltYWxzOiAJAKQDAQUIZGVjaW1hbHMBCGRlY2ltYWxzAQVhc3NldAMJAAACBQVhc3NldAIFV0FWRVMACAgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFBWFzc2V0Agt3cm9uZyBhc3NldAhkZWNpbWFscwEJbm9ybWFsaXplAgZhbW91bnQFYXNzZXQJAGgCBQZhbW91bnQJAQptdWx0aXBsaWVyAQkAZQIACAkBCGRlY2ltYWxzAQUFYXNzZXQBBXB1dF9BAQZhbW91bnQDCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMCBnB1dGdldAcJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BFVjdZQjhjYVhMZ1FQQ3VLSHRXdEZTRFRqZ3RiQXhncVoCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQVhc3NldAEFCkFfYXNzZXRfaWQFBmFtb3VudAUDbmlsBQNuaWwBBWdldF9BAQZhbW91bnQDCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMCBnB1dGdldAcJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BFVjdZQjhjYVhMZ1FQQ3VLSHRXdEZTRFRqZ3RiQXhncVoCCHdpdGhkcmF3CQDMCAIJAGQCBQZhbW91bnQA6AcFA25pbAUDbmlsBQNuaWwEA21zZwEEaW5pdAMGX293bmVyC19BX2Fzc2V0X2lkC19CX2Fzc2V0X2lkAwkBASEBCQCeCAEFBHRoaXMJAAIBAhNhbHJlYWR5IGluaXRpYWxpemVkAwkBAiE9AggFA21zZwZjYWxsZXIFBHRoaXMJAAIBAhhzZWxmIGluaXRpYWxpemF0aW9uIG9ubHkEBG5hbWUJAKwCAgkArAICAglDUE1NIExQICgJAK8CAgkA2AQBCQD3AwEJAMsBAgkAywECCQCbAwEJAKUIAQUEdGhpcwkAmwMBBQtfQV9hc3NldF9pZAkAmwMBBQtfQl9hc3NldF9pZAAGAgEpBAppc3N1ZVRva2VuCQDCCAUFBG5hbWUJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhJDUE1NIExQIHRva2VuIGZvciAFC19BX2Fzc2V0X2lkAgEvBQtfQl9hc3NldF9pZAIDIEAgCQClCAEFBHRoaXMAAAAIBgQHdG9rZW5JZAkA2AQBCQC4CAEFCmlzc3VlVG9rZW4JAMwIAgkBDEJvb2xlYW5FbnRyeQIFCmtleV9hY3RpdmUGCQDMCAIJAQtTdHJpbmdFbnRyeQIFDmtleV9BX2Fzc2V0X2lkCQEKY2hlY2tBc3NldAEFC19BX2Fzc2V0X2lkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDmtleV9CX2Fzc2V0X2lkCQEKY2hlY2tBc3NldAEFC19CX2Fzc2V0X2lkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlfQV9hc3NldF9iYWxhbmNlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tleV9CX2Fzc2V0X2JhbGFuY2UAAAkAzAgCCQELU3RyaW5nRW50cnkCBQlrZXlfb3duZXIJAQxjaGVja0FkZHJlc3MBBQZfb3duZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa2V5X3Rva2VuBQd0b2tlbklkCQDMCAIFCmlzc3VlVG9rZW4FA25pbANtc2cBFnJlcGxlbmlzaFdpdGhUd29Ub2tlbnMBD21pbl9taW50X2Ftb3VudAQGY2FsbGVyCAUDbXNnBmNhbGxlcgMJAQEhAQkBB2FsbG93ZWQBBQZjYWxsZXIJAAIBAgghYWxsb3dlZAMJAQEhAQUGYWN0aXZlCQACAQIHIWFjdGl2ZQMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwACCQACAQIVc2l6ZSggcGF5bWVudHMgKSAhPSAyBAlBX3BheW1lbnQJAJEDAggFA21zZwhwYXltZW50cwAABAlCX3BheW1lbnQJAJEDAggFA21zZwhwYXltZW50cwABBA9BX3BheW1lbnRfYXNzZXQIBQlBX3BheW1lbnQHYXNzZXRJZAQPQl9wYXltZW50X2Fzc2V0CAUJQl9wYXltZW50B2Fzc2V0SWQDAwkBAiE9AgUPQV9wYXltZW50X2Fzc2V0CQEFYXNzZXQBBQpBX2Fzc2V0X2lkBgkBAiE9AgUPQl9wYXltZW50X2Fzc2V0CQEFYXNzZXQBBQpCX2Fzc2V0X2lkCQACAQIMd3JvbmcgYXNzZXRzBBBBX3BheW1lbnRfYW1vdW50CAUJQV9wYXltZW50BmFtb3VudAQQQl9wYXltZW50X2Ftb3VudAgFCUJfcGF5bWVudAZhbW91bnQECyR0MDQyMjQ1NzE5AwkAAAIFDnRva2VuX3F1YW50aXR5AAADAwkAAAIFEEFfcGF5bWVudF9hbW91bnQAAAYJAAACBRBCX3BheW1lbnRfYW1vdW50AAAJAAIBAg13cm9uZyBhbW91bnRzCQCXCgUFEEFfcGF5bWVudF9hbW91bnQFEEJfcGF5bWVudF9hbW91bnQJAKADAQkBCnNxcnRCaWdJbnQECQC8AgMJALYCAQkBCW5vcm1hbGl6ZQIFEEFfcGF5bWVudF9hbW91bnQFCkFfYXNzZXRfaWQJALYCAQkBCW5vcm1hbGl6ZQIFEEJfcGF5bWVudF9hbW91bnQFCkJfYXNzZXRfaWQJALYCAQABAAAAAAUERE9XTgAAAAAECEFfZ3Jvd3RoCQBrAwUQQV9wYXltZW50X2Ftb3VudAUJUFJFQ0lTSU9OBQ9BX2Fzc2V0X2JhbGFuY2UECEJfZ3Jvd3RoCQBrAwUQQl9wYXltZW50X2Ftb3VudAUJUFJFQ0lTSU9OBQ9CX2Fzc2V0X2JhbGFuY2UECyR0MDQ5NjA1NDQyAwkAZgIFCEFfZ3Jvd3RoBQhCX2dyb3d0aAkAlQoDBQhCX2dyb3d0aAkAZQIFEEFfcGF5bWVudF9hbW91bnQJAGsDBQhCX2dyb3d0aAUPQV9hc3NldF9iYWxhbmNlBQlQUkVDSVNJT04AAAkAlQoDBQhBX2dyb3d0aAAACQBlAgUQQl9wYXltZW50X2Ftb3VudAkAawMFCEFfZ3Jvd3RoBQ9CX2Fzc2V0X2JhbGFuY2UFCVBSRUNJU0lPTgQGZ3Jvd3RoCAULJHQwNDk2MDU0NDICXzEEBkFfYmFjawgFCyR0MDQ5NjA1NDQyAl8yBAZCX2JhY2sIBQskdDA0OTYwNTQ0MgJfMwkAlwoFCQBlAgkAZAIFD0FfYXNzZXRfYmFsYW5jZQUQQV9wYXltZW50X2Ftb3VudAUGQV9iYWNrCQBlAgkAZAIFD0JfYXNzZXRfYmFsYW5jZQUQQl9wYXltZW50X2Ftb3VudAUGQl9iYWNrCQBrAwUGZ3Jvd3RoBQ50b2tlbl9xdWFudGl0eQUJUFJFQ0lTSU9OBQZBX2JhY2sFBkJfYmFjawQHQV9maW5hbAgFCyR0MDQyMjQ1NzE5Al8xBAdCX2ZpbmFsCAULJHQwNDIyNDU3MTkCXzIEC21pbnRfYW1vdW50CAULJHQwNDIyNDU3MTkCXzMEBkFfYmFjawgFCyR0MDQyMjQ1NzE5Al80BAZCX2JhY2sIBQskdDA0MjI0NTcxOQJfNQMJAGYCBQ9taW5fbWludF9hbW91bnQFC21pbnRfYW1vdW50CQACAQIUc2xpcHBhZ2Ugc2NyZXdlZCB5b3UEB3N0YWtpbmcJAQVwdXRfQQEJAGUCCQDwBwIFBHRoaXMJANkEAQUKQV9hc3NldF9pZAUGQV9iYWNrAwkAAAIFB3N0YWtpbmcFB3N0YWtpbmcJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlfQV9hc3NldF9iYWxhbmNlBQdBX2ZpbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlfQl9hc3NldF9iYWxhbmNlBQdCX2ZpbmFsCQDMCAIJAQdSZWlzc3VlAwUFdG9rZW4FC21pbnRfYW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFC21pbnRfYW1vdW50BQV0b2tlbgUDbmlsAwkBAiE9AgUGQV9iYWNrAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBQZBX2JhY2sFD0FfcGF5bWVudF9hc3NldAUDbmlsBQNuaWwDCQECIT0CBQZCX2JhY2sAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFBkJfYmFjawUPQl9wYXltZW50X2Fzc2V0BQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBCHdpdGhkcmF3AAQGY2FsbGVyCAUDbXNnBmNhbGxlcgMJAQEhAQkBB2FsbG93ZWQBBQZjYWxsZXIJAAIBAgghYWxsb3dlZAMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQIVc2l6ZSggcGF5bWVudHMgKSAhPSAxBAdwYXltZW50CQCRAwIIBQNtc2cIcGF5bWVudHMAAAMJAQIhPQIIBQdwYXltZW50B2Fzc2V0SWQFBXRva2VuCQACAQINdW5rbm93biB0b2tlbgQGYW1vdW50CAUHcGF5bWVudAZhbW91bnQEDEFfYW1vdW50X291dAkAawMFD0FfYXNzZXRfYmFsYW5jZQUGYW1vdW50BQ50b2tlbl9xdWFudGl0eQQMQl9hbW91bnRfb3V0CQBrAwUPQl9hc3NldF9iYWxhbmNlBQZhbW91bnQFDnRva2VuX3F1YW50aXR5BAdzdGFraW5nCQEFZ2V0X0EBBQxBX2Ftb3VudF9vdXQDCQAAAgUHc3Rha2luZwUHc3Rha2luZwkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa2V5X0FfYXNzZXRfYmFsYW5jZQkAZQIFD0FfYXNzZXRfYmFsYW5jZQUMQV9hbW91bnRfb3V0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlfQl9hc3NldF9iYWxhbmNlCQBlAgUPQl9hc3NldF9iYWxhbmNlBQxCX2Ftb3VudF9vdXQJAMwIAgkBBEJ1cm4CBQV0b2tlbgUGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgUMQV9hbW91bnRfb3V0CQEFYXNzZXQBBQpBX2Fzc2V0X2lkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgUMQl9hbW91bnRfb3V0CQEFYXNzZXQBBQpCX2Fzc2V0X2lkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnAQhleGNoYW5nZQESbWluQW1vdW50VG9SZWNlaXZlBAZjYWxsZXIIBQNtc2cGY2FsbGVyAwkBASEBCQEHYWxsb3dlZAEFBmNhbGxlcgkAAgECCCFhbGxvd2VkAwkBASEBBQZhY3RpdmUJAAIBAgchYWN0aXZlAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhVzaXplKCBwYXltZW50cyApICE9IDEEB3BheW1lbnQJAJEDAggFA21zZwhwYXltZW50cwAABA5wYXltZW50X2Ftb3VudAgFB3BheW1lbnQGYW1vdW50BA1wYXltZW50X2Fzc2V0CAUHcGF5bWVudAdhc3NldElkBAJhYgMJAAACBQ1wYXltZW50X2Fzc2V0CQEFYXNzZXQBBQpBX2Fzc2V0X2lkBgMJAAACBQ1wYXltZW50X2Fzc2V0CQEFYXNzZXQBBQpCX2Fzc2V0X2lkBwkAAgECC3dyb25nIGFzc2V0BAskdDA3NzQwNzg2MQMFAmFiCQCUCgIFD0FfYXNzZXRfYmFsYW5jZQUPQl9hc3NldF9iYWxhbmNlCQCUCgIFD0JfYXNzZXRfYmFsYW5jZQUPQV9hc3NldF9iYWxhbmNlBAl0b2tlbkZyb20IBQskdDA3NzQwNzg2MQJfMQQHdG9rZW5UbwgFCyR0MDc3NDA3ODYxAl8yBBBhbW91bnRXaXRob3V0RmVlCQBrAwUHdG9rZW5UbwUOcGF5bWVudF9hbW91bnQJAGQCBQ5wYXltZW50X2Ftb3VudAUJdG9rZW5Gcm9tBA1hbW91bnRXaXRoRmVlCQBrAwUQYW1vdW50V2l0aG91dEZlZQUDRkVFBQ9GRUVfREVOT01JTkFUT1IDCQBmAgUSbWluQW1vdW50VG9SZWNlaXZlBQ1hbW91bnRXaXRoRmVlCQACAQkArAICCQCsAgIJAKwCAgIdQ2FsY3VsYXRlZCBhbW91bnQgdG8gcmVjZWl2ZSAJAKQDAQUNYW1vdW50V2l0aEZlZQIgIGlzIGxlc3MgdGhhbiBzcGVjaWZpZWQgbWluaW11bSAJAKQDAQUSbWluQW1vdW50VG9SZWNlaXZlBAskdDA4MjI3ODQ1NwMFAmFiCQCVCgMJAGQCBQ9BX2Fzc2V0X2JhbGFuY2UFDnBheW1lbnRfYW1vdW50CQBlAgUPQl9hc3NldF9iYWxhbmNlBQ1hbW91bnRXaXRoRmVlBQpCX2Fzc2V0X2lkCQCVCgMJAGUCBQ9BX2Fzc2V0X2JhbGFuY2UFDWFtb3VudFdpdGhGZWUJAGQCBQ9CX2Fzc2V0X2JhbGFuY2UFDnBheW1lbnRfYW1vdW50BQpBX2Fzc2V0X2lkBAdBX2ZpbmFsCAULJHQwODIyNzg0NTcCXzEEB0JfZmluYWwIBQskdDA4MjI3ODQ1NwJfMgQLYXNzZXRfZmluYWwIBQskdDA4MjI3ODQ1NwJfMwQHc3Rha2luZwMJAAACBQthc3NldF9maW5hbAUKQV9hc3NldF9pZAkBBWdldF9BAQUNYW1vdW50V2l0aEZlZQkBBXB1dF9BAQkA8AcCBQR0aGlzCQDZBAEFCkFfYXNzZXRfaWQDCQAAAgUHc3Rha2luZwUHc3Rha2luZwkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlfQV9hc3NldF9iYWxhbmNlBQdBX2ZpbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlfQl9hc3NldF9iYWxhbmNlBQdCX2ZpbmFsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgUNYW1vdW50V2l0aEZlZQkBBWFzc2V0AQULYXNzZXRfZmluYWwFA25pbAUNYW1vdW50V2l0aEZlZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgA9C2i8", "chainId": 87, "height": 4009836, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 43hkrBJyTfZijz916dJvykXqM4MGpcBuxHtUiHn2gRrq Next: none Diff:
Old | New | Differences | |
---|---|---|---|
94 | 94 | func normalize (amount,asset) = (amount * multiplier((8 - decimals(asset)))) | |
95 | 95 | ||
96 | 96 | ||
97 | - | func put_A (amount) = invoke(addressFromStringValue("3PEV7YB8caXLgQPCuKHtWtFSDTjgtbAxgqZ"), "stake", nil, [AttachedPayment(asset(A_asset_id), amount)]) | |
97 | + | func put_A (amount) = if (valueOrElse(getBoolean(this, "putget"), false)) | |
98 | + | then invoke(addressFromStringValue("3PEV7YB8caXLgQPCuKHtWtFSDTjgtbAxgqZ"), "stake", nil, [AttachedPayment(asset(A_asset_id), amount)]) | |
99 | + | else nil | |
98 | 100 | ||
99 | 101 | ||
100 | - | func get_A (amount) = invoke(addressFromStringValue("3PEV7YB8caXLgQPCuKHtWtFSDTjgtbAxgqZ"), "withdraw", [(amount + 1000)], nil) | |
102 | + | func get_A (amount) = if (valueOrElse(getBoolean(this, "putget"), false)) | |
103 | + | then invoke(addressFromStringValue("3PEV7YB8caXLgQPCuKHtWtFSDTjgtbAxgqZ"), "withdraw", [(amount + 1000)], nil) | |
104 | + | else nil | |
101 | 105 | ||
102 | 106 | ||
103 | 107 | @Callable(msg) | |
135 | 139 | else { | |
136 | 140 | let A_payment_amount = A_payment.amount | |
137 | 141 | let B_payment_amount = B_payment.amount | |
138 | - | let $ | |
142 | + | let $t042245719 = if ((token_quantity == 0)) | |
139 | 143 | then if (if ((A_payment_amount == 0)) | |
140 | 144 | then true | |
141 | 145 | else (B_payment_amount == 0)) | |
144 | 148 | else { | |
145 | 149 | let A_growth = fraction(A_payment_amount, PRECISION, A_asset_balance) | |
146 | 150 | let B_growth = fraction(B_payment_amount, PRECISION, B_asset_balance) | |
147 | - | let $ | |
151 | + | let $t049605442 = if ((A_growth > B_growth)) | |
148 | 152 | then $Tuple3(B_growth, (A_payment_amount - fraction(B_growth, A_asset_balance, PRECISION)), 0) | |
149 | 153 | else $Tuple3(A_growth, 0, (B_payment_amount - fraction(A_growth, B_asset_balance, PRECISION))) | |
150 | - | let growth = $ | |
151 | - | let A_back = $ | |
152 | - | let B_back = $ | |
154 | + | let growth = $t049605442._1 | |
155 | + | let A_back = $t049605442._2 | |
156 | + | let B_back = $t049605442._3 | |
153 | 157 | $Tuple5(((A_asset_balance + A_payment_amount) - A_back), ((B_asset_balance + B_payment_amount) - B_back), fraction(growth, token_quantity, PRECISION), A_back, B_back) | |
154 | 158 | } | |
155 | - | let A_final = $ | |
156 | - | let B_final = $ | |
157 | - | let mint_amount = $ | |
158 | - | let A_back = $ | |
159 | - | let B_back = $ | |
159 | + | let A_final = $t042245719._1 | |
160 | + | let B_final = $t042245719._2 | |
161 | + | let mint_amount = $t042245719._3 | |
162 | + | let A_back = $t042245719._4 | |
163 | + | let B_back = $t042245719._5 | |
160 | 164 | if ((min_mint_amount > mint_amount)) | |
161 | 165 | then throw("slippage screwed you") | |
162 | 166 | else { | |
218 | 222 | else if ((payment_asset == asset(B_asset_id))) | |
219 | 223 | then false | |
220 | 224 | else throw("wrong asset") | |
221 | - | let $ | |
225 | + | let $t077407861 = if (ab) | |
222 | 226 | then $Tuple2(A_asset_balance, B_asset_balance) | |
223 | 227 | else $Tuple2(B_asset_balance, A_asset_balance) | |
224 | - | let tokenFrom = $ | |
225 | - | let tokenTo = $ | |
228 | + | let tokenFrom = $t077407861._1 | |
229 | + | let tokenTo = $t077407861._2 | |
226 | 230 | let amountWithoutFee = fraction(tokenTo, payment_amount, (payment_amount + tokenFrom)) | |
227 | 231 | let amountWithFee = fraction(amountWithoutFee, FEE, FEE_DENOMINATOR) | |
228 | 232 | if ((minAmountToReceive > amountWithFee)) | |
229 | 233 | then throw(((("Calculated amount to receive " + toString(amountWithFee)) + " is less than specified minimum ") + toString(minAmountToReceive))) | |
230 | 234 | else { | |
231 | - | let $ | |
235 | + | let $t082278457 = if (ab) | |
232 | 236 | then $Tuple3((A_asset_balance + payment_amount), (B_asset_balance - amountWithFee), B_asset_id) | |
233 | 237 | else $Tuple3((A_asset_balance - amountWithFee), (B_asset_balance + payment_amount), A_asset_id) | |
234 | - | let A_final = $ | |
235 | - | let B_final = $ | |
236 | - | let asset_final = $ | |
238 | + | let A_final = $t082278457._1 | |
239 | + | let B_final = $t082278457._2 | |
240 | + | let asset_final = $t082278457._3 | |
237 | 241 | let staking = if ((asset_final == A_asset_id)) | |
238 | 242 | then get_A(amountWithFee) | |
239 | 243 | else put_A(assetBalance(this, fromBase58String(A_asset_id))) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let key_active = "active" | |
5 | 5 | ||
6 | 6 | let key_A_asset_id = "A_asset_id" | |
7 | 7 | ||
8 | 8 | let key_B_asset_id = "B_asset_id" | |
9 | 9 | ||
10 | 10 | let key_A_asset_balance = "A_asset_balance" | |
11 | 11 | ||
12 | 12 | let key_B_asset_balance = "B_asset_balance" | |
13 | 13 | ||
14 | 14 | let active = getBooleanValue(this, key_active) | |
15 | 15 | ||
16 | 16 | let A_asset_id = getStringValue(this, key_A_asset_id) | |
17 | 17 | ||
18 | 18 | let B_asset_id = getStringValue(this, key_B_asset_id) | |
19 | 19 | ||
20 | 20 | let A_asset_balance = getIntegerValue(this, key_A_asset_balance) | |
21 | 21 | ||
22 | 22 | let B_asset_balance = getIntegerValue(this, key_B_asset_balance) | |
23 | 23 | ||
24 | 24 | let FEE = valueOrElse(getInteger(this, "fee"), 996100) | |
25 | 25 | ||
26 | 26 | let FEE_DENOMINATOR = 1000000 | |
27 | 27 | ||
28 | 28 | let key_owner = "owner" | |
29 | 29 | ||
30 | 30 | let key_token = "token" | |
31 | 31 | ||
32 | 32 | let owner = getStringValue(this, key_owner) | |
33 | 33 | ||
34 | 34 | let token = fromBase58String(getStringValue(this, key_token)) | |
35 | 35 | ||
36 | 36 | let token_quantity = value(assetInfo(token)).quantity | |
37 | 37 | ||
38 | 38 | let PRECISION = 100000000 | |
39 | 39 | ||
40 | 40 | func checkAddress (a58) = { | |
41 | 41 | let a = addressFromStringValue(a58) | |
42 | 42 | toString(a) | |
43 | 43 | } | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | func checkAsset (asset58) = if ((asset58 == "WAVES")) | |
47 | 47 | then "WAVES" | |
48 | 48 | else { | |
49 | 49 | let asset = valueOrErrorMessage(fromBase58String(asset58), ("wrong asset encoding: " + asset58)) | |
50 | 50 | let info = valueOrErrorMessage(assetInfo(asset), ("wrong asset info: " + asset58)) | |
51 | 51 | if ((info == info)) | |
52 | 52 | then asset58 | |
53 | 53 | else throw("Strict value is not equal to itself.") | |
54 | 54 | } | |
55 | 55 | ||
56 | 56 | ||
57 | 57 | func asset (a) = if ((a == "WAVES")) | |
58 | 58 | then unit | |
59 | 59 | else fromBase58String(a) | |
60 | 60 | ||
61 | 61 | ||
62 | 62 | func allowed (caller) = contains(owner, toString(caller)) | |
63 | 63 | ||
64 | 64 | ||
65 | 65 | func multiplier (decimals) = match decimals { | |
66 | 66 | case _ => | |
67 | 67 | if ((8 == $match0)) | |
68 | 68 | then 100000000 | |
69 | 69 | else if ((7 == $match0)) | |
70 | 70 | then 10000000 | |
71 | 71 | else if ((6 == $match0)) | |
72 | 72 | then 1000000 | |
73 | 73 | else if ((5 == $match0)) | |
74 | 74 | then 100000 | |
75 | 75 | else if ((4 == $match0)) | |
76 | 76 | then 10000 | |
77 | 77 | else if ((3 == $match0)) | |
78 | 78 | then 1000 | |
79 | 79 | else if ((2 == $match0)) | |
80 | 80 | then 100 | |
81 | 81 | else if ((1 == $match0)) | |
82 | 82 | then 10 | |
83 | 83 | else if ((0 == $match0)) | |
84 | 84 | then 1 | |
85 | 85 | else throw(("unsupported decimals: " + toString(decimals))) | |
86 | 86 | } | |
87 | 87 | ||
88 | 88 | ||
89 | 89 | func decimals (asset) = if ((asset == "WAVES")) | |
90 | 90 | then 8 | |
91 | 91 | else valueOrErrorMessage(assetInfo(fromBase58String(asset)), "wrong asset").decimals | |
92 | 92 | ||
93 | 93 | ||
94 | 94 | func normalize (amount,asset) = (amount * multiplier((8 - decimals(asset)))) | |
95 | 95 | ||
96 | 96 | ||
97 | - | func put_A (amount) = invoke(addressFromStringValue("3PEV7YB8caXLgQPCuKHtWtFSDTjgtbAxgqZ"), "stake", nil, [AttachedPayment(asset(A_asset_id), amount)]) | |
97 | + | func put_A (amount) = if (valueOrElse(getBoolean(this, "putget"), false)) | |
98 | + | then invoke(addressFromStringValue("3PEV7YB8caXLgQPCuKHtWtFSDTjgtbAxgqZ"), "stake", nil, [AttachedPayment(asset(A_asset_id), amount)]) | |
99 | + | else nil | |
98 | 100 | ||
99 | 101 | ||
100 | - | func get_A (amount) = invoke(addressFromStringValue("3PEV7YB8caXLgQPCuKHtWtFSDTjgtbAxgqZ"), "withdraw", [(amount + 1000)], nil) | |
102 | + | func get_A (amount) = if (valueOrElse(getBoolean(this, "putget"), false)) | |
103 | + | then invoke(addressFromStringValue("3PEV7YB8caXLgQPCuKHtWtFSDTjgtbAxgqZ"), "withdraw", [(amount + 1000)], nil) | |
104 | + | else nil | |
101 | 105 | ||
102 | 106 | ||
103 | 107 | @Callable(msg) | |
104 | 108 | func init (_owner,_A_asset_id,_B_asset_id) = if (!(isDataStorageUntouched(this))) | |
105 | 109 | then throw("already initialized") | |
106 | 110 | else if ((msg.caller != this)) | |
107 | 111 | then throw("self initialization only") | |
108 | 112 | else { | |
109 | 113 | let name = (("CPMM LP (" + take(toBase58String(sha256(((toBytes(toString(this)) + toBytes(_A_asset_id)) + toBytes(_B_asset_id)))), 6)) + ")") | |
110 | 114 | let issueToken = Issue(name, ((((("CPMM LP token for " + _A_asset_id) + "/") + _B_asset_id) + " @ ") + toString(this)), 0, 8, true) | |
111 | 115 | let tokenId = toBase58String(calculateAssetId(issueToken)) | |
112 | 116 | [BooleanEntry(key_active, true), StringEntry(key_A_asset_id, checkAsset(_A_asset_id)), StringEntry(key_B_asset_id, checkAsset(_B_asset_id)), IntegerEntry(key_A_asset_balance, 0), IntegerEntry(key_B_asset_balance, 0), StringEntry(key_owner, checkAddress(_owner)), StringEntry(key_token, tokenId), issueToken] | |
113 | 117 | } | |
114 | 118 | ||
115 | 119 | ||
116 | 120 | ||
117 | 121 | @Callable(msg) | |
118 | 122 | func replenishWithTwoTokens (min_mint_amount) = { | |
119 | 123 | let caller = msg.caller | |
120 | 124 | if (!(allowed(caller))) | |
121 | 125 | then throw("!allowed") | |
122 | 126 | else if (!(active)) | |
123 | 127 | then throw("!active") | |
124 | 128 | else if ((size(msg.payments) != 2)) | |
125 | 129 | then throw("size( payments ) != 2") | |
126 | 130 | else { | |
127 | 131 | let A_payment = msg.payments[0] | |
128 | 132 | let B_payment = msg.payments[1] | |
129 | 133 | let A_payment_asset = A_payment.assetId | |
130 | 134 | let B_payment_asset = B_payment.assetId | |
131 | 135 | if (if ((A_payment_asset != asset(A_asset_id))) | |
132 | 136 | then true | |
133 | 137 | else (B_payment_asset != asset(B_asset_id))) | |
134 | 138 | then throw("wrong assets") | |
135 | 139 | else { | |
136 | 140 | let A_payment_amount = A_payment.amount | |
137 | 141 | let B_payment_amount = B_payment.amount | |
138 | - | let $ | |
142 | + | let $t042245719 = if ((token_quantity == 0)) | |
139 | 143 | then if (if ((A_payment_amount == 0)) | |
140 | 144 | then true | |
141 | 145 | else (B_payment_amount == 0)) | |
142 | 146 | then throw("wrong amounts") | |
143 | 147 | else $Tuple5(A_payment_amount, B_payment_amount, toInt(sqrtBigInt(fraction(toBigInt(normalize(A_payment_amount, A_asset_id)), toBigInt(normalize(B_payment_amount, B_asset_id)), toBigInt(1)), 0, 0, DOWN)), 0, 0) | |
144 | 148 | else { | |
145 | 149 | let A_growth = fraction(A_payment_amount, PRECISION, A_asset_balance) | |
146 | 150 | let B_growth = fraction(B_payment_amount, PRECISION, B_asset_balance) | |
147 | - | let $ | |
151 | + | let $t049605442 = if ((A_growth > B_growth)) | |
148 | 152 | then $Tuple3(B_growth, (A_payment_amount - fraction(B_growth, A_asset_balance, PRECISION)), 0) | |
149 | 153 | else $Tuple3(A_growth, 0, (B_payment_amount - fraction(A_growth, B_asset_balance, PRECISION))) | |
150 | - | let growth = $ | |
151 | - | let A_back = $ | |
152 | - | let B_back = $ | |
154 | + | let growth = $t049605442._1 | |
155 | + | let A_back = $t049605442._2 | |
156 | + | let B_back = $t049605442._3 | |
153 | 157 | $Tuple5(((A_asset_balance + A_payment_amount) - A_back), ((B_asset_balance + B_payment_amount) - B_back), fraction(growth, token_quantity, PRECISION), A_back, B_back) | |
154 | 158 | } | |
155 | - | let A_final = $ | |
156 | - | let B_final = $ | |
157 | - | let mint_amount = $ | |
158 | - | let A_back = $ | |
159 | - | let B_back = $ | |
159 | + | let A_final = $t042245719._1 | |
160 | + | let B_final = $t042245719._2 | |
161 | + | let mint_amount = $t042245719._3 | |
162 | + | let A_back = $t042245719._4 | |
163 | + | let B_back = $t042245719._5 | |
160 | 164 | if ((min_mint_amount > mint_amount)) | |
161 | 165 | then throw("slippage screwed you") | |
162 | 166 | else { | |
163 | 167 | let staking = put_A((assetBalance(this, fromBase58String(A_asset_id)) - A_back)) | |
164 | 168 | if ((staking == staking)) | |
165 | 169 | then (([IntegerEntry(key_A_asset_balance, A_final), IntegerEntry(key_B_asset_balance, B_final), Reissue(token, mint_amount, true), ScriptTransfer(caller, mint_amount, token)] ++ (if ((A_back != 0)) | |
166 | 170 | then [ScriptTransfer(caller, A_back, A_payment_asset)] | |
167 | 171 | else nil)) ++ (if ((B_back != 0)) | |
168 | 172 | then [ScriptTransfer(caller, B_back, B_payment_asset)] | |
169 | 173 | else nil)) | |
170 | 174 | else throw("Strict value is not equal to itself.") | |
171 | 175 | } | |
172 | 176 | } | |
173 | 177 | } | |
174 | 178 | } | |
175 | 179 | ||
176 | 180 | ||
177 | 181 | ||
178 | 182 | @Callable(msg) | |
179 | 183 | func withdraw () = { | |
180 | 184 | let caller = msg.caller | |
181 | 185 | if (!(allowed(caller))) | |
182 | 186 | then throw("!allowed") | |
183 | 187 | else if ((size(msg.payments) != 1)) | |
184 | 188 | then throw("size( payments ) != 1") | |
185 | 189 | else { | |
186 | 190 | let payment = msg.payments[0] | |
187 | 191 | if ((payment.assetId != token)) | |
188 | 192 | then throw("unknown token") | |
189 | 193 | else { | |
190 | 194 | let amount = payment.amount | |
191 | 195 | let A_amount_out = fraction(A_asset_balance, amount, token_quantity) | |
192 | 196 | let B_amount_out = fraction(B_asset_balance, amount, token_quantity) | |
193 | 197 | let staking = get_A(A_amount_out) | |
194 | 198 | if ((staking == staking)) | |
195 | 199 | then [IntegerEntry(key_A_asset_balance, (A_asset_balance - A_amount_out)), IntegerEntry(key_B_asset_balance, (B_asset_balance - B_amount_out)), Burn(token, amount), ScriptTransfer(caller, A_amount_out, asset(A_asset_id)), ScriptTransfer(caller, B_amount_out, asset(B_asset_id))] | |
196 | 200 | else throw("Strict value is not equal to itself.") | |
197 | 201 | } | |
198 | 202 | } | |
199 | 203 | } | |
200 | 204 | ||
201 | 205 | ||
202 | 206 | ||
203 | 207 | @Callable(msg) | |
204 | 208 | func exchange (minAmountToReceive) = { | |
205 | 209 | let caller = msg.caller | |
206 | 210 | if (!(allowed(caller))) | |
207 | 211 | then throw("!allowed") | |
208 | 212 | else if (!(active)) | |
209 | 213 | then throw("!active") | |
210 | 214 | else if ((size(msg.payments) != 1)) | |
211 | 215 | then throw("size( payments ) != 1") | |
212 | 216 | else { | |
213 | 217 | let payment = msg.payments[0] | |
214 | 218 | let payment_amount = payment.amount | |
215 | 219 | let payment_asset = payment.assetId | |
216 | 220 | let ab = if ((payment_asset == asset(A_asset_id))) | |
217 | 221 | then true | |
218 | 222 | else if ((payment_asset == asset(B_asset_id))) | |
219 | 223 | then false | |
220 | 224 | else throw("wrong asset") | |
221 | - | let $ | |
225 | + | let $t077407861 = if (ab) | |
222 | 226 | then $Tuple2(A_asset_balance, B_asset_balance) | |
223 | 227 | else $Tuple2(B_asset_balance, A_asset_balance) | |
224 | - | let tokenFrom = $ | |
225 | - | let tokenTo = $ | |
228 | + | let tokenFrom = $t077407861._1 | |
229 | + | let tokenTo = $t077407861._2 | |
226 | 230 | let amountWithoutFee = fraction(tokenTo, payment_amount, (payment_amount + tokenFrom)) | |
227 | 231 | let amountWithFee = fraction(amountWithoutFee, FEE, FEE_DENOMINATOR) | |
228 | 232 | if ((minAmountToReceive > amountWithFee)) | |
229 | 233 | then throw(((("Calculated amount to receive " + toString(amountWithFee)) + " is less than specified minimum ") + toString(minAmountToReceive))) | |
230 | 234 | else { | |
231 | - | let $ | |
235 | + | let $t082278457 = if (ab) | |
232 | 236 | then $Tuple3((A_asset_balance + payment_amount), (B_asset_balance - amountWithFee), B_asset_id) | |
233 | 237 | else $Tuple3((A_asset_balance - amountWithFee), (B_asset_balance + payment_amount), A_asset_id) | |
234 | - | let A_final = $ | |
235 | - | let B_final = $ | |
236 | - | let asset_final = $ | |
238 | + | let A_final = $t082278457._1 | |
239 | + | let B_final = $t082278457._2 | |
240 | + | let asset_final = $t082278457._3 | |
237 | 241 | let staking = if ((asset_final == A_asset_id)) | |
238 | 242 | then get_A(amountWithFee) | |
239 | 243 | else put_A(assetBalance(this, fromBase58String(A_asset_id))) | |
240 | 244 | if ((staking == staking)) | |
241 | 245 | then $Tuple2([IntegerEntry(key_A_asset_balance, A_final), IntegerEntry(key_B_asset_balance, B_final), ScriptTransfer(caller, amountWithFee, asset(asset_final))], amountWithFee) | |
242 | 246 | else throw("Strict value is not equal to itself.") | |
243 | 247 | } | |
244 | 248 | } | |
245 | 249 | } | |
246 | 250 | ||
247 | 251 |
github/deemru/w8io/3ef1775 52.49 ms ◑