tx · 45dDeyhUhVVjpKMDBZyhGQMTpoidFAMpjSfunZ7dDsWz

3N6LHjfGb6Fgcy7YsVcNxGyPTj49XbQAijq:  -0.01300000 Waves

2023.02.10 14:38 [2443493] smart account 3N6LHjfGb6Fgcy7YsVcNxGyPTj49XbQAijq > SELF 0.00000000 Waves

{ "type": 13, "id": "45dDeyhUhVVjpKMDBZyhGQMTpoidFAMpjSfunZ7dDsWz", "fee": 1300000, "feeAssetId": null, "timestamp": 1676029101687, "version": 2, "chainId": 84, "sender": "3N6LHjfGb6Fgcy7YsVcNxGyPTj49XbQAijq", "senderPublicKey": "2u2wYYcVBQv43Cc71zkhHPPitkqgg6dqTZ3nUMvYJ1uq", "proofs": [ "5GjxwC4FsB7iPquW1Z5Jwfa4YYmFPvAgkamUNA1boS6xHpSfA98gyrtn6Tf7GRYmzTawgACYRoh2v5un9DbMhhf6" ], "script": "base64:BgIXCAISBQoDAQgIEgUKAwEICBIDCgEIEgAVAANTRVACAl9fAAhmZWVTY2FsZQkAtgIBAKCNBgEPZ2V0U3RyaW5nT3JGYWlsAQNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQNrZXkJAKwCAgIVTm8gZGF0YSBmb3IgdGhpcy5rZXk9BQNrZXkADHBvb2xEaXNhYmxlZAkAAgECDVBvb2wgZGlzYWJsZWQADHBvb2xOb3RFeGlzdAkAAgECEVBvb2wgaXMgbm90IGV4aXN0AA5zbGlwcGFnZVRvb0JpZwkAAgECE1NsaXBwYWdlIGlzIHRvbyBiaWcBE2tleU1hbmFnZXJQdWJsaWNLZXkAAhQlc19fbWFuYWdlclB1YmxpY0tleQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAmZjAAITJXNfX2ZhY3RvcnlDb250cmFjdAAPZmFjdG9yeUNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQEPZ2V0U3RyaW5nT3JGYWlsAQkBAmZjAAEaZmVlUHJvdG9jb2xDb250cmFjdEFkZHJlc3MACQC5CQIJAMwIAgICJXMJAMwIAgIaZmVlUHJvdG9jb2xDb250cmFjdEFkZHJlc3MFA25pbAUDU0VQAAtmZWVDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBD2dldFN0cmluZ09yRmFpbAEJARpmZWVQcm90b2NvbENvbnRyYWN0QWRkcmVzcwABC3Byb3RvY29sRmVlAAkAuQkCCQDMCAICAiVzCQDMCAICC3Byb3RvY29sRmVlBQNuaWwFA1NFUAEHcG9vbEZlZQAJALkJAgkAzAgCAgIlcwkAzAgCAgdwb29sRmVlBQNuaWwFA1NFUAEFYXNJbnQBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACA0ludAQGdmFsSW50BQckbWF0Y2gwBQZ2YWxJbnQJAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBFWRhdGFNYXBwaW5nUG9vbEFzc2V0cwIWaW50ZXJuYWxBbW91bnRBc3NldFN0chVpbnRlcm5hbFByaWNlQXNzZXRTdHIJALkJAgkAzAgCAgQlZCVkCQDMCAIJAKQDAQUWaW50ZXJuYWxBbW91bnRBc3NldFN0cgkAzAgCCQCkAwEFFWludGVybmFsUHJpY2VBc3NldFN0cgUDbmlsBQNTRVABFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABAckbWF0Y2gwCQCiCAEJARNrZXlNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAQHJG1hdGNoMAkAoggBCQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEJaXNNYW5hZ2VyAQFpBAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgELbXVzdE1hbmFnZXIBAWkDCQEJaXNNYW5hZ2VyAQUBaQYJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAENZ2V0QWNjQmFsYW5jZQEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQdhc3NldElkBAFpARVzd2FwQ2FsY3VsYXRlUkVBRE9OTFkDCGFtb3VudEluB2Fzc2V0SW4IYXNzZXRPdXQEBXByRmVlCQEFdmFsdWUBCQCfCAEJAQtwcm90b2NvbEZlZQAEFWZlZVByb3RvY29sQW1vdW50Q2FsYwkAvAIDCQC2AgEFCGFtb3VudEluCQC2AgEFBXByRmVlBQhmZWVTY2FsZQQFcGxGZWUJAQV2YWx1ZQEJAJ8IAQkBB3Bvb2xGZWUABBFmZWVQb29sQW1vdW50Q2FsYwkAvAIDCQC2AgEFCGFtb3VudEluCQC2AgEFBXBsRmVlBQhmZWVTY2FsZQQRZmVlUHJvdG9jb2xBbW91bnQDCQAAAgkAoAMBBRVmZWVQcm90b2NvbEFtb3VudENhbGMAAAkAtgIBAAEFFWZlZVByb3RvY29sQW1vdW50Q2FsYwQNZmVlUG9vbEFtb3VudAMJAAACCQCgAwEFEWZlZVBvb2xBbW91bnRDYWxjAAAJALYCAQABBRFmZWVQb29sQW1vdW50Q2FsYwQNY2xlYW5BbW91bnRJbgkAuAICCQC4AgIJALYCAQUIYW1vdW50SW4FEWZlZVByb3RvY29sQW1vdW50BRFmZWVQb29sQW1vdW50Q2FsYwQMbHBOb25SZXZlcnNlCQD8BwQFD2ZhY3RvcnlDb250cmFjdAIgZ2V0THBBc3NldEZyb21Qb29sQXNzZXRzUkVBRE9OTFkJAMwIAgUHYXNzZXRJbgkAzAgCBQhhc3NldE91dAUDbmlsBQNuaWwECWxwUmV2ZXJzZQkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCIGdldExwQXNzZXRGcm9tUG9vbEFzc2V0c1JFQURPTkxZCQDMCAIFCGFzc2V0T3V0CQDMCAIFB2Fzc2V0SW4FA25pbAUDbmlsBAskdDAyOTM0MzQzNwMJAQIhPQIFDGxwTm9uUmV2ZXJzZQUEdW5pdAQJaXNSZXZlcnNlBwQEcG9vbAoAAUAJAPwHBAUPZmFjdG9yeUNvbnRyYWN0AiFnZXRQb29sQWRkcmVzc0Zyb21McEFzc2V0UkVBRE9OTFkJAMwIAgUMbHBOb25SZXZlcnNlBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcJAJQKAgUJaXNSZXZlcnNlBQRwb29sAwkBAiE9AgUJbHBSZXZlcnNlBQR1bml0BAlpc1JldmVyc2UGBARwb29sCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCIWdldFBvb2xBZGRyZXNzRnJvbUxwQXNzZXRSRUFET05MWQkAzAgCBQlscFJldmVyc2UFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwkAlAoCBQlpc1JldmVyc2UFBHBvb2wFDHBvb2xOb3RFeGlzdAQJaXNSZXZlcnNlCAULJHQwMjkzNDM0MzcCXzEEBHBvb2wIBQskdDAyOTM0MzQzNwJfMgQKcG9vbFN0YXR1cwoAAUAJAPwHBAUPZmFjdG9yeUNvbnRyYWN0AhVnZXRQb29sU3RhdHVzUkVBRE9OTFkJAMwIAgUEcG9vbAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50BAVjaGVjawMJAAACBQpwb29sU3RhdHVzAAEGBQxwb29sRGlzYWJsZWQDCQAAAgUFY2hlY2sFBWNoZWNrBAdwb29sQWRyCQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCBQRwb29sAgAEA3JlcwoAAUAJAPwHBAUHcG9vbEFkcgIhY2FsY3VsYXRlQW1vdW50T3V0Rm9yU3dhcFJFQURPTkxZCQDMCAIJAKADAQUNY2xlYW5BbW91bnRJbgkAzAgCBQlpc1JldmVyc2UFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAkAlAoCBQNuaWwFA3JlcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQRzd2FwAwxhbW91bnRPdXRNaW4IYXNzZXRPdXQJYWRkcmVzc1RvBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJbgMJAAACCAUDcG10B2Fzc2V0SWQFBHVuaXQJAJsDAQIFV0FWRVMJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQIYW1vdW50SW4JAQV2YWx1ZQEIBQNwbXQGYW1vdW50BAVwckZlZQkBBXZhbHVlAQkAnwgBCQELcHJvdG9jb2xGZWUABBVmZWVQcm90b2NvbEFtb3VudENhbGMJALwCAwkAtgIBBQhhbW91bnRJbgkAtgIBBQVwckZlZQUIZmVlU2NhbGUEBXBsRmVlCQEFdmFsdWUBCQCfCAEJAQdwb29sRmVlAAQRZmVlUG9vbEFtb3VudENhbGMJALwCAwkAtgIBBQhhbW91bnRJbgkAtgIBBQVwbEZlZQUIZmVlU2NhbGUEEWZlZVByb3RvY29sQW1vdW50AwkAAAIJAKADAQUVZmVlUHJvdG9jb2xBbW91bnRDYWxjAAAJALYCAQABBRVmZWVQcm90b2NvbEFtb3VudENhbGMEDWZlZVBvb2xBbW91bnQDCQAAAgkAoAMBBRFmZWVQb29sQW1vdW50Q2FsYwAACQC2AgEAAQURZmVlUG9vbEFtb3VudENhbGMEDWNsZWFuQW1vdW50SW4JALgCAgkAuAICCQC2AgEFCGFtb3VudEluBRFmZWVQcm90b2NvbEFtb3VudAURZmVlUG9vbEFtb3VudENhbGMEBmNoZWNrcwkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQYJAAIBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQMbHBOb25SZXZlcnNlCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCIGdldExwQXNzZXRGcm9tUG9vbEFzc2V0c1JFQURPTkxZCQDMCAIJANgEAQUHYXNzZXRJbgkAzAgCBQhhc3NldE91dAUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0BAlscFJldmVyc2UKAAFACQD8BwQFD2ZhY3RvcnlDb250cmFjdAIgZ2V0THBBc3NldEZyb21Qb29sQXNzZXRzUkVBRE9OTFkJAMwIAgUIYXNzZXRPdXQJAMwIAgkA2AQBBQdhc3NldEluBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQECyR0MDUwNzM1NTkyAwkBAiE9AgUMbHBOb25SZXZlcnNlBQR1bml0BAlpc1JldmVyc2UHBARwb29sCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCIWdldFBvb2xBZGRyZXNzRnJvbUxwQXNzZXRSRUFET05MWQkAzAgCCQEFdmFsdWUBBQxscE5vblJldmVyc2UFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwkAlAoCBQlpc1JldmVyc2UFBHBvb2wDCQECIT0CBQlscFJldmVyc2UFBHVuaXQECWlzUmV2ZXJzZQYEBHBvb2wKAAFACQD8BwQFD2ZhY3RvcnlDb250cmFjdAIhZ2V0UG9vbEFkZHJlc3NGcm9tTHBBc3NldFJFQURPTkxZCQDMCAIJAQV2YWx1ZQEFCWxwUmV2ZXJzZQUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nCQCUCgIFCWlzUmV2ZXJzZQUEcG9vbAUMcG9vbE5vdEV4aXN0BAlpc1JldmVyc2UIBQskdDA1MDczNTU5MgJfMQQEcG9vbAgFCyR0MDUwNzM1NTkyAl8yBApwb29sU3RhdHVzCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCFWdldFBvb2xTdGF0dXNSRUFET05MWQkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQEBWNoZWNrAwkAAAIFCnBvb2xTdGF0dXMAAQYFDHBvb2xEaXNhYmxlZAMJAAACBQVjaGVjawUFY2hlY2sEB3Bvb2xBZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wEC3RvdGFsR2V0UmF3CgABQAkA/AcEBQdwb29sQWRyAiZjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwQW5kU2VuZFRva2VucwkAzAgCCQCgAwEFDWNsZWFuQW1vdW50SW4JAMwIAgUJaXNSZXZlcnNlCQDMCAIFDGFtb3VudE91dE1pbgkAzAgCBQlhZGRyZXNzVG8FA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJbgkAoAMBBQ1jbGVhbkFtb3VudEluBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULZmVlQ29udHJhY3QJAKADAQURZmVlUHJvdG9jb2xBbW91bnQFB2Fzc2V0SW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUHcG9vbEFkcgkAoAMBBQ1mZWVQb29sQW1vdW50BQdhc3NldEluBQNuaWwFC3RvdGFsR2V0UmF3CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnNldE1hbmFnZXIBF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEFWNoZWNrTWFuYWdlclB1YmxpY0tleQkA2QQBBRdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQMJAAACBRVjaGVja01hbmFnZXJQdWJsaWNLZXkFFWNoZWNrTWFuYWdlclB1YmxpY0tleQkAzAgCCQELU3RyaW5nRW50cnkCCQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkABRdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmNvbmZpcm1NYW5hZ2VyAAQCcG0JAR1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAEBWhhc1BNAwkBCWlzRGVmaW5lZAEFAnBtBgkAAgECEm5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQVoYXNQTQUFaGFzUE0EB2NoZWNrUE0DCQAAAggFAWkPY2FsbGVyUHVibGljS2V5CQEFdmFsdWUBBQJwbQYJAAIBAht5b3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUHY2hlY2tQTQUHY2hlY2tQTQkAzAgCCQELU3RyaW5nRW50cnkCCQETa2V5TWFuYWdlclB1YmxpY0tleQAJANgEAQkBBXZhbHVlAQUCcG0JAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQPdGFyZ2V0UHVibGljS2V5BAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQIBQJ0eA9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUPdGFyZ2V0UHVibGljS2V5mD1w7Q==", "height": 2443493, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8kuznLzHEABscZitMBk5NannaHhP3yZFWPby1SkdaQnb Next: 9vnSnznJu69UUXtsX2NnvoyBFyoFBCVV8ctQMf9STgLm Diff:
OldNewDifferences
3131 let feeContract = addressFromStringValue(getStringOrFail(feeProtocolContractAddress()))
3232
3333 func protocolFee () = makeString(["%s", "protocolFee"], SEP)
34+
35+
36+func poolFee () = makeString(["%s", "poolFee"], SEP)
3437
3538
3639 func asInt (val) = match val {
8891 func swapCalculateREADONLY (amountIn,assetIn,assetOut) = {
8992 let prFee = value(getInteger(protocolFee()))
9093 let feeProtocolAmountCalc = fraction(toBigInt(amountIn), toBigInt(prFee), feeScale)
94+ let plFee = value(getInteger(poolFee()))
95+ let feePoolAmountCalc = fraction(toBigInt(amountIn), toBigInt(plFee), feeScale)
9196 let feeProtocolAmount = if ((toInt(feeProtocolAmountCalc) == 0))
9297 then toBigInt(1)
9398 else feeProtocolAmountCalc
94- let cleanAmountIn = (toBigInt(amountIn) - feeProtocolAmount)
99+ let feePoolAmount = if ((toInt(feePoolAmountCalc) == 0))
100+ then toBigInt(1)
101+ else feePoolAmountCalc
102+ let cleanAmountIn = ((toBigInt(amountIn) - feeProtocolAmount) - feePoolAmountCalc)
95103 let lpNonReverse = invoke(factoryContract, "getLpAssetFromPoolAssetsREADONLY", [assetIn, assetOut], nil)
96104 let lpReverse = invoke(factoryContract, "getLpAssetFromPoolAssetsREADONLY", [assetOut, assetIn], nil)
97- let $t026163119 = if ((lpNonReverse != unit))
105+ let $t029343437 = if ((lpNonReverse != unit))
98106 then {
99107 let isReverse = false
100108 let pool = {
117125 $Tuple2(isReverse, pool)
118126 }
119127 else poolNotExist
120- let isReverse = $t026163119._1
121- let pool = $t026163119._2
128+ let isReverse = $t029343437._1
129+ let pool = $t029343437._2
122130 let poolStatus = {
123131 let @ = invoke(factoryContract, "getPoolStatusREADONLY", [pool], nil)
124132 if ($isInstanceOf(@, "Int"))
153161 let amountIn = value(pmt.amount)
154162 let prFee = value(getInteger(protocolFee()))
155163 let feeProtocolAmountCalc = fraction(toBigInt(amountIn), toBigInt(prFee), feeScale)
164+ let plFee = value(getInteger(poolFee()))
165+ let feePoolAmountCalc = fraction(toBigInt(amountIn), toBigInt(plFee), feeScale)
156166 let feeProtocolAmount = if ((toInt(feeProtocolAmountCalc) == 0))
157167 then toBigInt(1)
158168 else feeProtocolAmountCalc
159- let cleanAmountIn = (toBigInt(amountIn) - feeProtocolAmount)
169+ let feePoolAmount = if ((toInt(feePoolAmountCalc) == 0))
170+ then toBigInt(1)
171+ else feePoolAmountCalc
172+ let cleanAmountIn = ((toBigInt(amountIn) - feeProtocolAmount) - feePoolAmountCalc)
160173 let checks = [if ((size(i.payments) == 1))
161174 then true
162175 else throw("exactly 1 payment are expected")]
174187 then @
175188 else unit
176189 }
177- let $t044895008 = if ((lpNonReverse != unit))
190+ let $t050735592 = if ((lpNonReverse != unit))
178191 then {
179192 let isReverse = false
180193 let pool = {
197210 $Tuple2(isReverse, pool)
198211 }
199212 else poolNotExist
200- let isReverse = $t044895008._1
201- let pool = $t044895008._2
213+ let isReverse = $t050735592._1
214+ let pool = $t050735592._2
202215 let poolStatus = {
203216 let @ = invoke(factoryContract, "getPoolStatusREADONLY", [pool], nil)
204217 if ($isInstanceOf(@, "Int"))
217230 then @
218231 else throw(($getType(@) + " couldn't be cast to Int"))
219232 }
220- $Tuple2([ScriptTransfer(feeContract, toInt(feeProtocolAmount), assetIn)], totalGetRaw)
233+ $Tuple2([ScriptTransfer(feeContract, toInt(feeProtocolAmount), assetIn), ScriptTransfer(poolAdr, toInt(feePoolAmount), assetIn)], totalGetRaw)
221234 }
222235 else throw("Strict value is not equal to itself.")
223236 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let feeScale = toBigInt(100000)
77
88 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), ("No data for this.key=" + key))
99
1010
1111 let poolDisabled = throw("Pool disabled")
1212
1313 let poolNotExist = throw("Pool is not exist")
1414
1515 let slippageTooBig = throw("Slippage is too big")
1616
1717 func keyManagerPublicKey () = "%s__managerPublicKey"
1818
1919
2020 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
2121
2222
2323 func fc () = "%s__factoryContract"
2424
2525
2626 let factoryContract = addressFromStringValue(getStringOrFail(fc()))
2727
2828 func feeProtocolContractAddress () = makeString(["%s", "feeProtocolContractAddress"], SEP)
2929
3030
3131 let feeContract = addressFromStringValue(getStringOrFail(feeProtocolContractAddress()))
3232
3333 func protocolFee () = makeString(["%s", "protocolFee"], SEP)
34+
35+
36+func poolFee () = makeString(["%s", "poolFee"], SEP)
3437
3538
3639 func asInt (val) = match val {
3740 case valInt: Int =>
3841 valInt
3942 case _ =>
4043 throw("fail to cast into Int")
4144 }
4245
4346
4447 func dataMappingPoolAssets (internalAmountAssetStr,internalPriceAssetStr) = makeString(["%d%d", toString(internalAmountAssetStr), toString(internalPriceAssetStr)], SEP)
4548
4649
4750 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
4851 case s: String =>
4952 fromBase58String(s)
5053 case _: Unit =>
5154 unit
5255 case _ =>
5356 throw("Match error")
5457 }
5558
5659
5760 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
5861 case s: String =>
5962 fromBase58String(s)
6063 case _: Unit =>
6164 unit
6265 case _ =>
6366 throw("Match error")
6467 }
6568
6669
6770 func isManager (i) = match managerPublicKeyOrUnit() {
6871 case pk: ByteVector =>
6972 (i.callerPublicKey == pk)
7073 case _: Unit =>
7174 (i.caller == this)
7275 case _ =>
7376 throw("Match error")
7477 }
7578
7679
7780 func mustManager (i) = if (isManager(i))
7881 then true
7982 else throw("permission denied")
8083
8184
8285 func getAccBalance (assetId) = if ((assetId == "WAVES"))
8386 then wavesBalance(this).available
8487 else assetBalance(this, fromBase58String(assetId))
8588
8689
8790 @Callable(i)
8891 func swapCalculateREADONLY (amountIn,assetIn,assetOut) = {
8992 let prFee = value(getInteger(protocolFee()))
9093 let feeProtocolAmountCalc = fraction(toBigInt(amountIn), toBigInt(prFee), feeScale)
94+ let plFee = value(getInteger(poolFee()))
95+ let feePoolAmountCalc = fraction(toBigInt(amountIn), toBigInt(plFee), feeScale)
9196 let feeProtocolAmount = if ((toInt(feeProtocolAmountCalc) == 0))
9297 then toBigInt(1)
9398 else feeProtocolAmountCalc
94- let cleanAmountIn = (toBigInt(amountIn) - feeProtocolAmount)
99+ let feePoolAmount = if ((toInt(feePoolAmountCalc) == 0))
100+ then toBigInt(1)
101+ else feePoolAmountCalc
102+ let cleanAmountIn = ((toBigInt(amountIn) - feeProtocolAmount) - feePoolAmountCalc)
95103 let lpNonReverse = invoke(factoryContract, "getLpAssetFromPoolAssetsREADONLY", [assetIn, assetOut], nil)
96104 let lpReverse = invoke(factoryContract, "getLpAssetFromPoolAssetsREADONLY", [assetOut, assetIn], nil)
97- let $t026163119 = if ((lpNonReverse != unit))
105+ let $t029343437 = if ((lpNonReverse != unit))
98106 then {
99107 let isReverse = false
100108 let pool = {
101109 let @ = invoke(factoryContract, "getPoolAddressFromLpAssetREADONLY", [lpNonReverse], nil)
102110 if ($isInstanceOf(@, "String"))
103111 then @
104112 else throw(($getType(@) + " couldn't be cast to String"))
105113 }
106114 $Tuple2(isReverse, pool)
107115 }
108116 else if ((lpReverse != unit))
109117 then {
110118 let isReverse = true
111119 let pool = {
112120 let @ = invoke(factoryContract, "getPoolAddressFromLpAssetREADONLY", [lpReverse], nil)
113121 if ($isInstanceOf(@, "String"))
114122 then @
115123 else throw(($getType(@) + " couldn't be cast to String"))
116124 }
117125 $Tuple2(isReverse, pool)
118126 }
119127 else poolNotExist
120- let isReverse = $t026163119._1
121- let pool = $t026163119._2
128+ let isReverse = $t029343437._1
129+ let pool = $t029343437._2
122130 let poolStatus = {
123131 let @ = invoke(factoryContract, "getPoolStatusREADONLY", [pool], nil)
124132 if ($isInstanceOf(@, "Int"))
125133 then @
126134 else throw(($getType(@) + " couldn't be cast to Int"))
127135 }
128136 let check = if ((poolStatus == 1))
129137 then true
130138 else poolDisabled
131139 if ((check == check))
132140 then {
133141 let poolAdr = addressFromStringValue(valueOrElse(pool, ""))
134142 let res = {
135143 let @ = invoke(poolAdr, "calculateAmountOutForSwapREADONLY", [toInt(cleanAmountIn), isReverse], nil)
136144 if ($isInstanceOf(@, "Int"))
137145 then @
138146 else throw(($getType(@) + " couldn't be cast to Int"))
139147 }
140148 $Tuple2(nil, res)
141149 }
142150 else throw("Strict value is not equal to itself.")
143151 }
144152
145153
146154
147155 @Callable(i)
148156 func swap (amountOutMin,assetOut,addressTo) = {
149157 let pmt = value(i.payments[0])
150158 let assetIn = if ((pmt.assetId == unit))
151159 then toBytes("WAVES")
152160 else value(pmt.assetId)
153161 let amountIn = value(pmt.amount)
154162 let prFee = value(getInteger(protocolFee()))
155163 let feeProtocolAmountCalc = fraction(toBigInt(amountIn), toBigInt(prFee), feeScale)
164+ let plFee = value(getInteger(poolFee()))
165+ let feePoolAmountCalc = fraction(toBigInt(amountIn), toBigInt(plFee), feeScale)
156166 let feeProtocolAmount = if ((toInt(feeProtocolAmountCalc) == 0))
157167 then toBigInt(1)
158168 else feeProtocolAmountCalc
159- let cleanAmountIn = (toBigInt(amountIn) - feeProtocolAmount)
169+ let feePoolAmount = if ((toInt(feePoolAmountCalc) == 0))
170+ then toBigInt(1)
171+ else feePoolAmountCalc
172+ let cleanAmountIn = ((toBigInt(amountIn) - feeProtocolAmount) - feePoolAmountCalc)
160173 let checks = [if ((size(i.payments) == 1))
161174 then true
162175 else throw("exactly 1 payment are expected")]
163176 if ((checks == checks))
164177 then {
165178 let lpNonReverse = {
166179 let @ = invoke(factoryContract, "getLpAssetFromPoolAssetsREADONLY", [toBase58String(assetIn), assetOut], nil)
167180 if ($isInstanceOf(@, "String"))
168181 then @
169182 else unit
170183 }
171184 let lpReverse = {
172185 let @ = invoke(factoryContract, "getLpAssetFromPoolAssetsREADONLY", [assetOut, toBase58String(assetIn)], nil)
173186 if ($isInstanceOf(@, "String"))
174187 then @
175188 else unit
176189 }
177- let $t044895008 = if ((lpNonReverse != unit))
190+ let $t050735592 = if ((lpNonReverse != unit))
178191 then {
179192 let isReverse = false
180193 let pool = {
181194 let @ = invoke(factoryContract, "getPoolAddressFromLpAssetREADONLY", [value(lpNonReverse)], nil)
182195 if ($isInstanceOf(@, "String"))
183196 then @
184197 else throw(($getType(@) + " couldn't be cast to String"))
185198 }
186199 $Tuple2(isReverse, pool)
187200 }
188201 else if ((lpReverse != unit))
189202 then {
190203 let isReverse = true
191204 let pool = {
192205 let @ = invoke(factoryContract, "getPoolAddressFromLpAssetREADONLY", [value(lpReverse)], nil)
193206 if ($isInstanceOf(@, "String"))
194207 then @
195208 else throw(($getType(@) + " couldn't be cast to String"))
196209 }
197210 $Tuple2(isReverse, pool)
198211 }
199212 else poolNotExist
200- let isReverse = $t044895008._1
201- let pool = $t044895008._2
213+ let isReverse = $t050735592._1
214+ let pool = $t050735592._2
202215 let poolStatus = {
203216 let @ = invoke(factoryContract, "getPoolStatusREADONLY", [pool], nil)
204217 if ($isInstanceOf(@, "Int"))
205218 then @
206219 else throw(($getType(@) + " couldn't be cast to Int"))
207220 }
208221 let check = if ((poolStatus == 1))
209222 then true
210223 else poolDisabled
211224 if ((check == check))
212225 then {
213226 let poolAdr = addressFromStringValue(pool)
214227 let totalGetRaw = {
215228 let @ = invoke(poolAdr, "calculateAmountOutForSwapAndSendTokens", [toInt(cleanAmountIn), isReverse, amountOutMin, addressTo], [AttachedPayment(assetIn, toInt(cleanAmountIn))])
216229 if ($isInstanceOf(@, "Int"))
217230 then @
218231 else throw(($getType(@) + " couldn't be cast to Int"))
219232 }
220- $Tuple2([ScriptTransfer(feeContract, toInt(feeProtocolAmount), assetIn)], totalGetRaw)
233+ $Tuple2([ScriptTransfer(feeContract, toInt(feeProtocolAmount), assetIn), ScriptTransfer(poolAdr, toInt(feePoolAmount), assetIn)], totalGetRaw)
221234 }
222235 else throw("Strict value is not equal to itself.")
223236 }
224237 else throw("Strict value is not equal to itself.")
225238 }
226239
227240
228241
229242 @Callable(i)
230243 func setManager (pendingManagerPublicKey) = {
231244 let checkCaller = mustManager(i)
232245 if ((checkCaller == checkCaller))
233246 then {
234247 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
235248 if ((checkManagerPublicKey == checkManagerPublicKey))
236249 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
237250 else throw("Strict value is not equal to itself.")
238251 }
239252 else throw("Strict value is not equal to itself.")
240253 }
241254
242255
243256
244257 @Callable(i)
245258 func confirmManager () = {
246259 let pm = pendingManagerPublicKeyOrUnit()
247260 let hasPM = if (isDefined(pm))
248261 then true
249262 else throw("no pending manager")
250263 if ((hasPM == hasPM))
251264 then {
252265 let checkPM = if ((i.callerPublicKey == value(pm)))
253266 then true
254267 else throw("you are not pending manager")
255268 if ((checkPM == checkPM))
256269 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
257270 else throw("Strict value is not equal to itself.")
258271 }
259272 else throw("Strict value is not equal to itself.")
260273 }
261274
262275
263276 @Verifier(tx)
264277 func verify () = {
265278 let targetPublicKey = match managerPublicKeyOrUnit() {
266279 case pk: ByteVector =>
267280 pk
268281 case _: Unit =>
269282 tx.senderPublicKey
270283 case _ =>
271284 throw("Match error")
272285 }
273286 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
274287 }
275288

github/deemru/w8io/3ef1775 
68.80 ms