tx · GDKW3UDDBE6382rTSZo4yK5ZTPhWHDHpKEdvS7t8516c

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.01300000 Waves

2023.03.30 12:34 [2512505] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "GDKW3UDDBE6382rTSZo4yK5ZTPhWHDHpKEdvS7t8516c", "fee": 1300000, "feeAssetId": null, "timestamp": 1680168870148, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "3n9Sb5gR9PRxf1ng35EPFxjidcwKAPv5hM5tNiWx5cRYvt8T6MDR9CHK4K5E85UdqqdFAudqdoEpH7Li9vrbMwKw" ], "script": "base64:BgIcCAISBQoDCAEIEgMKAQgSAwoBCBIHCgUICAEBASkAC1NGX1BPU19UWVBFAgJTRgALV1hfUE9TX1RZUEUCAldYAAZTQ0FMRTgAgMLXLwAKRkVFX1NDQUxFNgDAhD0AFGtTRlBvb2xBQXNzZXRCYWxhbmNlAg9BX2Fzc2V0X2JhbGFuY2UAFGtTRlBvb2xCQXNzZXRCYWxhbmNlAg9CX2Fzc2V0X2JhbGFuY2UAD2tTRlBvb2xBQXNzZXRJZAIKQV9hc3NldF9pZAAPa1NGUG9vbEJBc3NldElkAgpCX2Fzc2V0X2lkAA5rU0ZQb29sU2hhcmVJZAIOc2hhcmVfYXNzZXRfaWQAEGtTRkZhcm1pbmdTdGFrZWQCFF9zaGFyZV90b2tlbnNfbG9ja2VkAA1rVXNlclBvc2l0aW9uAg5fdXNlcl9wb3NpdGlvbgARa1VzZXJQb3NpdGlvblR5cGUCE191c2VyX3Bvc2l0aW9uX3R5cGUAEGtVc2VyUG9zaXRpb25OdW0CFV91c2VyX3Bvc2l0aW9uX251bWJlcgAOa1RvdGFsUG9zaXRpb24CD190b3RhbF9wb3NpdGlvbgAVa0F4bHlJbkZlZVdpdGhvdXRMb2FuAhZfYXhseV9mZWVfd2l0aG91dF9sb2FuABJrQXhseUluRmVlV2l0aExvYW4CE19heGx5X2ZlZV93aXRoX2xvYW4AC2tBeGx5Q2FwRmVlAg1fYXhseV9mZWVfY2FwAAprUmVxdWVzdElkAgtfcmVxdWVzdF9pZAAMa1JlcXVlc3RJdGVyAg1yZXF1ZXN0c19pdGVyAAVrUG9vbAIFcG9vbF8ACWtNb25leUJveAIOYXhseV9tb25leV9ib3gADmtTRkZhcm1pbmdBZGRyAhNzd29wZmlfZmFybWluZ19hZGRyAAxrTGVuZFNlcnZpY2UCEWxlbmRfc2VydmljZV9hZGRyAAxrUHJpY2VPcmFjbGUCDHByaWNlX29yYWNsZQAIbW9uZXlCb3gJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUJa01vbmV5Qm94AhhObyBheGx5IG1vbmV5Qm94IGFkZHJlc3MAD3ByaWNlT3JhY2xlQWRkcgkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrUHJpY2VPcmFjbGUCF05vIHByaWNlIG9yYWNsZSBhZGRyZXNzAQppc1NlbGZDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BDmFjY291bnRCYWxhbmNlAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDwBwIFBHRoaXMFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkAAgECC01hdGNoIGVycm9yAQ1nZXRTRlBvb2xEYXRhAQhwb29sQWRkcgkAlwoFCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFD2tTRlBvb2xBQXNzZXRJZAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ9rU0ZQb29sQkFzc2V0SWQCGUNhbid0IGdldCBwb29sIEIgYXNzZXQgaWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUUa1NGUG9vbEFBc3NldEJhbGFuY2UCHkNhbid0IGdldCBwb29sIEEgYXNzZXQgYmFsYW5jZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCHBvb2xBZGRyBRRrU0ZQb29sQkFzc2V0QmFsYW5jZQIeQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBiYWxhbmNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFDmtTRlBvb2xTaGFyZUlkAhhDYW4ndCBnZXQgc2hhcmUgYXNzZXQgaWQBDWdldFdYUG9vbERhdGEBCHBvb2xBZGRyBANjZmcKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRQb29sQ29uZmlnV3JhcHBlclJFQURPTkxZBQNuaWwFA25pbAMJAAECBQFAAglMaXN0W0FueV0FAUAJAAIBCQCsAgIJAAMBBQFAAh4gY291bGRuJ3QgYmUgY2FzdCB0byBMaXN0W0FueV0DCQAAAgUDY2ZnBQNjZmcJAJcKBQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcABAMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGUNhbid0IGdldCBwb29sIEEgYXNzZXQgaWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAJEDAgUDY2ZnAAUDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0AhlDYW4ndCBnZXQgcG9vbCBCIGFzc2V0IGlkAAAAAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcAAwMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGkNhbid0IGdldCBwb29sIExQIGFzc2V0IGlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARRnZXRBeGx5VG90YWxQb3NpdGlvbgEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtUb3RhbFBvc2l0aW9uAAABGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgIEcG9vbAR1c2VyCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRBrVXNlclBvc2l0aW9uTnVtAAAAAQEMZ2V0QXhseUluRmVlAgRwb29sCHdpdGhMb2FuAwUId2l0aExvYW4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUSa0F4bHlJbkZlZVdpdGhMb2FuCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgEQZ2V0U0ZGYXJtaW5nQWRkcgAJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUOa1NGRmFybWluZ0FkZHICHUNhbid0IGdldCBzd29wZmkgZmFybWluZyBhZGRyARBnZXRXWEZhcm1pbmdBZGRyAQhwb29sQWRkcgQJZkNvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQhwb29sQWRkcgITJXNfX2ZhY3RvcnlDb250cmFjdAIiQ2FuJ3QgZ2V0IFdYIGZhY3RvcnkgY29udHJhY3QgYWRkcgQKZmFjdHJveUNmZwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFCWZDb250cmFjdAIRJXNfX2ZhY3RvcnlDb25maWcCGENhbid0IGdldCBXWCBmYWN0b3J5IGNmZwICX18JAQdBZGRyZXNzAQkA2QQBCQCRAwIFCmZhY3Ryb3lDZmcAAQEOZ2V0TGVuZFNydkFkZHIACQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFDGtMZW5kU2VydmljZQIbQ2FuJ3QgZ2V0IGxlbmQgc2VydmljZSBhZGRyAQxhc3NldElkVG9TdHIBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJANgEAQUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDACBVdBVkVTCQACAQILTWF0Y2ggZXJyb3IBDmFzc2V0SWRGcm9tU3RyAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTBQR1bml0CQDZBAEFB2Fzc2V0SWQBEGdldEFzc2V0RGVjaW1hbHMBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMACAQHJG1hdGNoMAkA7AcBCQDZBAEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwCAUFYXNzZXQIZGVjaW1hbHMJAAIBAhBDYW4ndCBmaW5kIGFzc2V0AQ9yZXBsYW5pc2hTd29wRmkKBHVzZXIEcG9vbAh3aXRoTG9hbgRwbXRBCXBtdEFzc2V0QQRwbXRCCXBtdEFzc2V0QgRiYWxBBGJhbEIHc2hhcmVJZAQSc2hhcmVCYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQDZBAEFB3NoYXJlSWQDCQAAAgUSc2hhcmVCYWxhbmNlQmVmb3JlBRJzaGFyZUJhbGFuY2VCZWZvcmUECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQGcmF0aW9BCQBrAwUGU0NBTEU4BQRwbXRBBQRiYWxBBAZyYXRpb0IJAGsDBQZTQ0FMRTgFBHBtdEIFBGJhbEIECyR0MDUwNDM1MzM1AwkAZgIFBnJhdGlvQgUGcmF0aW9BBANwbXQJAG4EBQRiYWxCBQZyYXRpb0EFBlNDQUxFOAUHQ0VJTElORwkAlgoEBQRwbXRBBQNwbXQJAGUCBQRwbXRCBQNwbXQFCXBtdEFzc2V0QgQDcG10CQBuBAUEYmFsQQUGcmF0aW9CBQZTQ0FMRTgFB0NFSUxJTkcJAJYKBAUDcG10BQRwbXRCCQBlAgUEcG10QQUDcG10BQlwbXRBc3NldEEECnBtdEFtb3VudEEIBQskdDA1MDQzNTMzNQJfMQQKcG10QW1vdW50QggFCyR0MDUwNDM1MzM1Al8yBAZjaGFuZ2UIBQskdDA1MDQzNTMzNQJfMwQNY2hhbmdlQXNzZXRJZAgFCyR0MDUwNDM1MzM1Al80BARpbnYxAwMJAGYCBQpwbXRBbW91bnRBAAAJAGYCBQpwbXRBbW91bnRCAAAHBAhwYXltZW50cwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUJcG10QXNzZXRBBQpwbXRBbW91bnRBCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQlwbXRBc3NldEIFCnBtdEFtb3VudEIFA25pbAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICFnJlcGxlbmlzaFdpdGhUd29Ub2tlbnMJAMwIAgkAzAgCAgVmYWxzZQkAzAgCAgEwBQNuaWwFA25pbAUIcGF5bWVudHMAAAMJAAACBQRpbnYxBQRpbnYxBARpbnYyAwkAZgIFBmNoYW5nZQAABAhwYXltZW50cwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUNY2hhbmdlQXNzZXRJZAUGY2hhbmdlBQNuaWwEBHZhcnMJAMwIAgIBMAkAzAgCAgVmYWxzZQkAzAgCAgEwBQNuaWwJAPwHBAUIcG9vbEFkZHICF3JlcGxlbmlzaFdpdGhPbmVUb2tlblYyCQDMCAIHCQDMCAIAAAUDbmlsBQhwYXltZW50cwAAAwkAAAIFBGludjIFBGludjIEEXNoYXJlQmFsYW5jZUFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQDZBAEFB3NoYXJlSWQECnRvdGFsU2hhcmUJAGUCBRFzaGFyZUJhbGFuY2VBZnRlcgUSc2hhcmVCYWxhbmNlQmVmb3JlBAlheGx5SW5GZWUJAGsDBQp0b3RhbFNoYXJlCQEMZ2V0QXhseUluRmVlAgUEcG9vbAUId2l0aExvYW4FCkZFRV9TQ0FMRTYEEXVzZXJTaGFyZUZvclN0YWtlCQBlAgUKdG90YWxTaGFyZQUJYXhseUluRmVlAwkAZwIAAAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAihhbW91bnQgb2Ygc3Rha2VkIHNoYXJldG9rZW5zIG11c3QgYmUgPiAwBARpbnYzCQD8BwQJARBnZXRTRkZhcm1pbmdBZGRyAAIPbG9ja1NoYXJlVG9rZW5zCQDMCAIFBHBvb2wJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHc2hhcmVJZAURdXNlclNoYXJlRm9yU3Rha2UFA25pbAMJAAACBQRpbnYzBQRpbnYzBAt0b3RhbEFtb3VudAkBFGdldEF4bHlUb3RhbFBvc2l0aW9uAQUEcG9vbAQJbmV3UG9zTnVtCQEYZ2V0TmV3VXNlclBvc2l0aW9uTnVtYmVyAgUEcG9vbAUEdXNlcgQJYmFzZUVudHJ5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtUb3RhbFBvc2l0aW9uCQBkAgULdG90YWxBbW91bnQFEXVzZXJTaGFyZUZvclN0YWtlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQluZXdQb3NOdW0FDWtVc2VyUG9zaXRpb24FEXVzZXJTaGFyZUZvclN0YWtlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFCW5ld1Bvc051bQURa1VzZXJQb3NpdGlvblR5cGUFC1NGX1BPU19UWVBFCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRBrVXNlclBvc2l0aW9uTnVtBQluZXdQb3NOdW0JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIbW9uZXlCb3gFCWF4bHlJbkZlZQkA2QQBBQdzaGFyZUlkBQNuaWwJAJQKAgUJYmFzZUVudHJ5BRF1c2VyU2hhcmVGb3JTdGFrZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgELcmVwbGFuaXNoV1gIBHVzZXIEcG9vbAh3aXRoTG9hbgRwbXRBCXBtdEFzc2V0QQRwbXRCCXBtdEFzc2V0QgdzaGFyZUlkBAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wECyR0MDcyOTc4MTE2AwMJAGYCBQRwbXRBAAAJAGYCBQRwbXRCAAAHBApldmFsUHV0SW5BCgABQAkA/AcEBQhwb29sQWRkcgIgZXZhbHVhdGVQdXRCeUFtb3VudEFzc2V0UkVBRE9OTFkJAMwIAgUEcG10QQUDbmlsBQNuaWwDCQABAgUBQAIJTGlzdFtBbnldBQFACQACAQkArAICCQADAQUBQAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldAwkAAAIFCmV2YWxQdXRJbkEFCmV2YWxQdXRJbkEECmV2YWxQdXRJbkIKAAFACQD8BwQFCHBvb2xBZGRyAh9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZCQDMCAIFBHBtdEIFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQMJAAACBQpldmFsUHV0SW5CBQpldmFsUHV0SW5CBAVscEluQQoAAUAJAJEDAgUKZXZhbFB1dEluQQAAAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAQFbHBJbkIKAAFACQCRAwIFCmV2YWxQdXRJbkIAAAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQBmAgUFbHBJbkEFBWxwSW5CBAZwbXRJbkIKAAFACQCRAwIFCmV2YWxQdXRJbkIABwMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAJYKBAUEcG10QQUGcG10SW5CCQBlAgUEcG10QgUGcG10SW5CBQlwbXRBc3NldEIEBnBtdEluQQoAAUAJAJEDAgUKZXZhbFB1dEluQgAGAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAkAlgoEBQZwbXRJbkEFBHBtdEIJAGUCBQRwbXRBBQZwbXRJbkEFCXBtdEFzc2V0QQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAGYCBQRwbXRBAAAJAJYKBAUEcG10QQUEcG10QgUEcG10QQUJcG10QXNzZXRBAwkAZgIFBHBtdEIAAAkAlgoEBQRwbXRBBQRwbXRCBQRwbXRCBQlwbXRBc3NldEIJAAIBAhBwbXRzIG11c3QgYmUgPiAwBApwbXRBbW91bnRBCAULJHQwNzI5NzgxMTYCXzEECnBtdEFtb3VudEIIBQskdDA3Mjk3ODExNgJfMgQGY2hhbmdlCAULJHQwNzI5NzgxMTYCXzMEDWNoYW5nZUFzc2V0SWQIBQskdDA3Mjk3ODExNgJfNAQSc2hhcmVCYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQDZBAEFB3NoYXJlSWQDCQAAAgUSc2hhcmVCYWxhbmNlQmVmb3JlBRJzaGFyZUJhbGFuY2VCZWZvcmUEBGludjEDAwkAZgIFCnBtdEFtb3VudEEAAAkAZgIFCnBtdEFtb3VudEIAAAcECHBheW1lbnRzCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQlwbXRBc3NldEEFCnBtdEFtb3VudEEJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCXBtdEFzc2V0QgUKcG10QW1vdW50QgUDbmlsCQD8BwQFCHBvb2xBZGRyAgNwdXQJAMwIAgABCQDMCAIHBQNuaWwFCHBheW1lbnRzAAADCQAAAgUEaW52MQUEaW52MQQEaW52MgMJAGYCBQZjaGFuZ2UAAAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFDWNoYW5nZUFzc2V0SWQFBmNoYW5nZQUDbmlsCQD8BwQFCHBvb2xBZGRyAglwdXRPbmVUa24JAMwIAgAACQDMCAIHBQNuaWwFCHBheW1lbnRzAAADCQAAAgUEaW52MgUEaW52MgQRc2hhcmVCYWxhbmNlQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJANkEAQUHc2hhcmVJZAQKdG90YWxTaGFyZQkAZQIFEXNoYXJlQmFsYW5jZUFmdGVyBRJzaGFyZUJhbGFuY2VCZWZvcmUECWF4bHlJbkZlZQkAawMFCnRvdGFsU2hhcmUJAQxnZXRBeGx5SW5GZWUCBQRwb29sBQh3aXRoTG9hbgUKRkVFX1NDQUxFNgQRdXNlclNoYXJlRm9yU3Rha2UJAGUCBQp0b3RhbFNoYXJlBQlheGx5SW5GZWUDCQBnAgAABRF1c2VyU2hhcmVGb3JTdGFrZQkAAgECKGFtb3VudCBvZiBzdGFrZWQgc2hhcmV0b2tlbnMgbXVzdCBiZSA+IDAEBGludjMJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBBQhwb29sQWRkcgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQdzaGFyZUlkBRF1c2VyU2hhcmVGb3JTdGFrZQUDbmlsAwkAAAIFBGludjMFBGludjMEC3RvdGFsQW1vdW50CQEUZ2V0QXhseVRvdGFsUG9zaXRpb24BBQRwb29sBAluZXdQb3NOdW0JARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXICBQRwb29sBQR1c2VyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1RvdGFsUG9zaXRpb24JAGQCBQt0b3RhbEFtb3VudAURdXNlclNoYXJlRm9yU3Rha2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFCW5ld1Bvc051bQUNa1VzZXJQb3NpdGlvbgURdXNlclNoYXJlRm9yU3Rha2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUJbmV3UG9zTnVtBRFrVXNlclBvc2l0aW9uVHlwZQULU0ZfUE9TX1RZUEUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0FCW5ld1Bvc051bQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhtb25leUJveAUJYXhseUluRmVlCQDZBAEFB3NoYXJlSWQFA25pbAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EAWkBCXJlcGxhbmlzaAMEcG9vbAhsZXZlcmFnZQ1ib3Jyb3dBc3NldElkAwMJAGYCAGQFCGxldmVyYWdlBgkAZgIFCGxldmVyYWdlAKwCCQACAQIfTGV2ZXJhZ2UgY2FuJ3QgYmUgPDEwMCBhbmQgPjMwMAQEdHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAQMJHQwOTk2OTEwMjIwAwkAAAIFBHR5cGUFC1NGX1BPU19UWVBFCQENZ2V0U0ZQb29sRGF0YQEJAQdBZGRyZXNzAQkA2QQBBQRwb29sAwkAAAIFBHR5cGUFC1dYX1BPU19UWVBFCQENZ2V0V1hQb29sRGF0YQEJAQdBZGRyZXNzAQkA2QQBBQRwb29sCQACAQIPV3JvbmcgcG9vbCB0eXBlBANBSWQIBQwkdDA5OTY5MTAyMjACXzEEA0JJZAgFDCR0MDk5NjkxMDIyMAJfMgQEYmFsQQgFDCR0MDk5NjkxMDIyMAJfMwQEYmFsQggFDCR0MDk5NjkxMDIyMAJfNAQHc2hhcmVJZAgFDCR0MDk5NjkxMDIyMAJfNQQNJHQwMTAyMjMxMDg2MAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAIDCQECIT0CCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNBSWQJAAIBAhVXcm9uZyBwYXltZW50IGFzc2V0IEEDCQECIT0CCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBQNCSWQJAAIBAhVXcm9uZyBwYXltZW50IGFzc2V0IEIJAJYKBAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0FJZAgJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQFA0JJZAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEDCQAAAgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDQUlkCQCWCgQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNBSWQAAAUDQklkAwkAAAIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA0JJZAkAlgoEAAAFA0FJZAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0JJZAkAAgECDVdyb25nIHBheW1lbnQJAAIBAhxPbmUgb3IgdHdvIHBheW1lbnRzIGV4cGVjdGVkBARwbXRBCAUNJHQwMTAyMjMxMDg2MAJfMQQJcG10QXNzZXRBCAUNJHQwMTAyMjMxMDg2MAJfMgQEcG10QggFDSR0MDEwMjIzMTA4NjACXzMECXBtdEFzc2V0QggFDSR0MDEwMjIzMTA4NjACXzQDCQBmAgUIbGV2ZXJhZ2UAZAQHZFByaWNlQQoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUJcG10QXNzZXRBCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQEB2RQcmljZUIKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFCXBtdEFzc2V0QgkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50BAxwYXlkSW5Eb2xsYXIJAGQCCQBrAwUHZFByaWNlQQUEcG10QQkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFCXBtdEFzc2V0QQAAAAAFBERPV04JAGsDBQdkUHJpY2VCBQRwbXRCCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUJcG10QXNzZXRCAAAAAAUERE9XTgQMYm9ycm93QW1vdW50CQBrAwUMcGF5ZEluRG9sbGFyCQBlAgUIbGV2ZXJhZ2UAZABkBAdyZXF1ZXN0CQC5CQIJAMwIAgUEdHlwZQkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCBQRwb29sCQDMCAIJAKQDAQUEcG10QQkAzAgCBQlwbXRBc3NldEEJAMwIAgkApAMBBQRwbXRCCQDMCAIFCXBtdEFzc2V0QgkAzAgCCQCkAwEFBGJhbEEJAMwIAgkApAMBBQRiYWxCCQDMCAIFB3NoYXJlSWQJAMwIAgUNYm9ycm93QXNzZXRJZAkAzAgCCQCkAwEFDGJvcnJvd0Ftb3VudAUDbmlsAgEsBAxuZXdSZXF1ZXN0SWQKAAFACQD8BwQFBHRoaXMCEGNyZWF0ZU5ld1JlcXVlc3QJAMwIAgUHcmVxdWVzdAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFABQR1bml0AwkAAAIFDG5ld1JlcXVlc3RJZAUMbmV3UmVxdWVzdElkBARhcmdzCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFB3NoYXJlSWQJAMwIAgUNYm9ycm93QXNzZXRJZAkAzAgCBQxib3Jyb3dBbW91bnQJAMwIAgkApQgBBQR0aGlzCQDMCAICEXJlcGxhbmlzaEZyb21MYW5kCQDMCAIJAKQDAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQxuZXdSZXF1ZXN0SWQCGENhbid0IGNyZWF0ZSBuZXcgcmVxdWVzdAUDbmlsBANpbnYJAP0HBAkBDmdldExlbmRTcnZBZGRyAAINZmxhc2hQb3NpdGlvbgUEYXJncwUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEdHlwZQULU0ZfUE9TX1RZUEUJAQ9yZXBsYW5pc2hTd29wRmkKCQClCAEIBQFpBmNhbGxlcgUEcG9vbAcFBHBtdEEFCXBtdEFzc2V0QQUEcG10QgUJcG10QXNzZXRCBQRiYWxBBQRiYWxCBQdzaGFyZUlkCQELcmVwbGFuaXNoV1gICQClCAEIBQFpBmNhbGxlcgUEcG9vbAcFBHBtdEEFCXBtdEFzc2V0QQUEcG10QgUJcG10QXNzZXRCBQdzaGFyZUlkAWkBEXJlcGxhbmlzaEZyb21MYW5kAQlyZXF1ZXN0SWQEB3JlcXVlc3QJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkCQCsAgICE05vIHJlcXVlc3Qgd2l0aCBpZCAFCXJlcXVlc3RJZAIBLAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECEldyb25nIHBheW1lbnQgc2l6ZQMDCQECIT0CCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQCRAwIFB3JlcXVlc3QADAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAANCQACAQINV3JvbmcgcGF5bWVudAQEcG10QQMJAAACCQCRAwIFB3JlcXVlc3QABAkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAMICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAADBARwbXRCAwkAAAIJAJEDAgUHcmVxdWVzdAAGCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAMDCQAAAgkAkQMCBQdyZXF1ZXN0AAAFC1NGX1BPU19UWVBFBA0kdDAxMzI0MzEzNTU3CQEPcmVwbGFuaXNoU3dvcEZpCgkAkQMCBQdyZXF1ZXN0AAEJAJEDAgUHcmVxdWVzdAACBgUEcG10QQkAkQMCBQdyZXF1ZXN0AAQFBHBtdEIJAJEDAgUHcmVxdWVzdAAGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAICQCRAwIFB3JlcXVlc3QACQQHZW50cmllcwgFDSR0MDEzMjQzMTM1NTcCXzEECGxwQW1vdW50CAUNJHQwMTMyNDMxMzU1NwJfMgkAlAoCCQDNCAIFB2VudHJpZXMJAQtEZWxldGVFbnRyeQEJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkBQhscEFtb3VudAMJAAACCQCRAwIFB3JlcXVlc3QAAAULU0ZfUE9TX1RZUEUEDSR0MDEzNjY4MTM4OTgJAQtyZXBsYW5pc2hXWAgJAJEDAgUHcmVxdWVzdAABCQCRAwIFB3JlcXVlc3QAAgYFBHBtdEEJAJEDAgUHcmVxdWVzdAAEBQRwbXRCCQCRAwIFB3JlcXVlc3QABgkAkQMCBQdyZXF1ZXN0AAkEB2VudHJpZXMIBQ0kdDAxMzY2ODEzODk4Al8xBAhscEFtb3VudAgFDSR0MDEzNjY4MTM4OTgCXzIJAJQKAgkAzQgCBQdlbnRyaWVzCQELRGVsZXRlRW50cnkBCQCsAgIFCXJlcXVlc3RJZAUKa1JlcXVlc3RJZAUIbHBBbW91bnQJAAIBAhJXcm9uZyByZXF1ZXN0IHR5cGUBaQEQY3JlYXRlTmV3UmVxdWVzdAEGcGFyYW1zCQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkEDG5ld1JlcXVlc3RJZAkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUMa1JlcXVlc3RJdGVyAAAAAQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkApAMBBQxuZXdSZXF1ZXN0SWQFCmtSZXF1ZXN0SWQFBnBhcmFtcwUDbmlsBQxuZXdSZXF1ZXN0SWQBaQELaW5pdE5ld1Bvb2wFBHR5cGUIcG9vbEFkZHILaW5GZWVOb0xvYW4JaW5GZWVMb2FuBmNhcEZlZQMDCQECIT0CBQR0eXBlBQtTRl9QT1NfVFlQRQkBAiE9AgUEdHlwZQULV1hfUE9TX1RZUEUHCQACAQIKV3JvbmcgdHlwZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUVa0F4bHlJbkZlZVdpdGhvdXRMb2FuBQtpbkZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUSa0F4bHlJbkZlZVdpdGhMb2FuBQlpbkZlZUxvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFC2tBeGx5Q2FwRmVlBQZjYXBGZWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQVrUG9vbAUIcG9vbEFkZHIFBHR5cGUFA25pbAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXmoGuyN", "height": 2512505, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 46drfk4cqfd98yHBmxgEe9oJDMQ4by34r7Nw4bgQoGFp Next: 7W9rSazdqpfwrYAQFrUZxSrVEtRZUeS1At15QEx6x1wd Diff:
OldNewDifferences
1818 let kSFPoolBAssetId = "B_asset_id"
1919
2020 let kSFPoolShareId = "share_asset_id"
21-
22-let kSFPoolVersion = "version"
2321
2422 let kSFFarmingStaked = "_share_tokens_locked"
2523
4947
5048 let kLendService = "lend_service_addr"
5149
50+let kPriceOracle = "price_oracle"
51+
5252 let moneyBox = Address(fromBase58String(valueOrErrorMessage(getString(this, kMoneyBox), "No axly moneyBox address")))
53+
54+let priceOracleAddr = Address(fromBase58String(valueOrErrorMessage(getString(this, kPriceOracle), "No price oracle address")))
5355
5456 func isSelfCall (i) = if ((i.caller == this))
5557 then unit
6971 func getSFPoolData (poolAddr) = $Tuple5(valueOrErrorMessage(getString(poolAddr, kSFPoolAAssetId), "Can't get pool A asset id"), valueOrErrorMessage(getString(poolAddr, kSFPoolBAssetId), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(poolAddr, kSFPoolAAssetBalance), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(poolAddr, kSFPoolBAssetBalance), "Can't get pool B asset balance"), valueOrErrorMessage(getString(poolAddr, kSFPoolShareId), "Can't get share asset id"))
7072
7173
72-func getWXPoolData (poolAddr) = $Tuple5(valueOrErrorMessage(getString(poolAddr, kSFPoolAAssetId), "Can't get pool A asset id"), valueOrErrorMessage(getString(poolAddr, kSFPoolBAssetId), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(poolAddr, kSFPoolAAssetBalance), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(poolAddr, kSFPoolBAssetBalance), "Can't get pool B asset balance"), valueOrErrorMessage(getString(poolAddr, kSFPoolShareId), "Can't get share asset id"))
74+func getWXPoolData (poolAddr) = {
75+ let cfg = {
76+ let @ = invoke(poolAddr, "getPoolConfigWrapperREADONLY", nil, nil)
77+ if ($isInstanceOf(@, "List[Any]"))
78+ then @
79+ else throw(($getType(@) + " couldn't be cast to List[Any]"))
80+ }
81+ if ((cfg == cfg))
82+ then $Tuple5(valueOrErrorMessage({
83+ let @ = cfg[4]
84+ if ($isInstanceOf(@, "String"))
85+ then @
86+ else unit
87+ }, "Can't get pool A asset id"), valueOrErrorMessage({
88+ let @ = cfg[5]
89+ if ($isInstanceOf(@, "String"))
90+ then @
91+ else unit
92+ }, "Can't get pool B asset id"), 0, 0, valueOrErrorMessage({
93+ let @ = cfg[3]
94+ if ($isInstanceOf(@, "String"))
95+ then @
96+ else unit
97+ }, "Can't get pool LP asset id"))
98+ else throw("Strict value is not equal to itself.")
99+ }
73100
74101
75102 func getAxlyTotalPosition (pool) = valueOrElse(getInteger(this, (pool + kTotalPosition)), 0)
84111
85112
86113 func getSFFarmingAddr () = Address(fromBase58String(valueOrErrorMessage(getString(this, kSFFarmingAddr), "Can't get swopfi farming addr")))
114+
115+
116+func getWXFarmingAddr (poolAddr) = {
117+ let fContract = Address(fromBase58String(valueOrElse(getString(poolAddr, "%s__factoryContract"), "Can't get WX factory contract addr")))
118+ let factroyCfg = split(valueOrElse(getString(fContract, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
119+ Address(fromBase58String(factroyCfg[1]))
120+ }
87121
88122
89123 func getLendSrvAddr () = Address(fromBase58String(valueOrErrorMessage(getString(this, kLendService), "Can't get lend service addr")))
104138 else fromBase58String(assetId)
105139
106140
107-func replanishSwopFi (user,pool,withLoan,pmtA,pmtAssetA,pmtB,pmtAssetB,balA,balB,shareId,virtualSwapTokenPay,virtualSwapTokenGet) = {
141+func getAssetDecimals (assetId) = if ((assetId == "WAVES"))
142+ then 8
143+ else match assetInfo(fromBase58String(assetId)) {
144+ case asset: Asset =>
145+ asset.decimals
146+ case _ =>
147+ throw("Can't find asset")
148+ }
149+
150+
151+func replanishSwopFi (user,pool,withLoan,pmtA,pmtAssetA,pmtB,pmtAssetB,balA,balB,shareId) = {
108152 let shareBalanceBefore = accountBalance(fromBase58String(shareId))
109153 if ((shareBalanceBefore == shareBalanceBefore))
110154 then {
111155 let poolAddr = Address(fromBase58String(pool))
112156 let ratioA = fraction(SCALE8, pmtA, balA)
113157 let ratioB = fraction(SCALE8, pmtB, balB)
114- let $t045474840 = if ((ratioB > ratioA))
158+ let $t050435335 = if ((ratioB > ratioA))
115159 then {
116160 let pmt = fraction(balB, ratioA, SCALE8, CEILING)
117161 $Tuple4(pmtA, pmt, (pmtB - pmt), pmtAssetB)
120164 let pmt = fraction(balA, ratioB, SCALE8, CEILING)
121165 $Tuple4(pmt, pmtB, (pmtA - pmt), pmtAssetA)
122166 }
123- let pmtAmountA = $t045474840._1
124- let pmtAmountB = $t045474840._2
125- let change = $t045474840._3
126- let changeAssetId = $t045474840._4
127- let poolVersion = getStringValue(poolAddr, "version")
167+ let pmtAmountA = $t050435335._1
168+ let pmtAmountB = $t050435335._2
169+ let change = $t050435335._3
170+ let changeAssetId = $t050435335._4
128171 let inv1 = if (if ((pmtAmountA > 0))
129172 then (pmtAmountB > 0)
130173 else false)
131174 then {
132175 let payments = [AttachedPayment(assetIdFromStr(pmtAssetA), pmtAmountA), AttachedPayment(assetIdFromStr(pmtAssetB), pmtAmountB)]
133- if ((poolVersion == "1.0.0"))
134- then invoke(poolAddr, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], payments)
135- else if ((poolVersion == "2.0.0"))
136- then invoke(poolAddr, "replenishWithTwoTokensV2", [false, 0], payments)
137- else throw("Wrong pool type")
176+ invoke(poolAddr, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], payments)
138177 }
139178 else 0
140179 if ((inv1 == inv1))
142181 let inv2 = if ((change > 0))
143182 then {
144183 let payments = [AttachedPayment(assetIdFromStr(changeAssetId), change)]
145- if ((poolVersion == "1.0.0"))
146- then {
147- let vars = ["0", "false", "0"]
148- invoke(poolAddr, "callFunction", ["replenishWithOneToken", vars], payments)
149- }
150- else if ((poolVersion == "2.0.0"))
151- then {
152- let vars = [virtualSwapTokenPay, virtualSwapTokenGet, false, 0]
153- invoke(poolAddr, "replenishWithOneTokenV2", [false, 0], payments)
154- }
155- else throw("Wrong pool type")
184+ let vars = ["0", "false", "0"]
185+ invoke(poolAddr, "replenishWithOneTokenV2", [false, 0], payments)
156186 }
157187 else 0
158188 if ((inv2 == inv2))
165195 then throw("amount of staked sharetokens must be > 0")
166196 else {
167197 let inv3 = invoke(getSFFarmingAddr(), "lockShareTokens", [pool, 0], [AttachedPayment(fromBase58String(shareId), userShareForStake)])
198+ if ((inv3 == inv3))
199+ then {
200+ let totalAmount = getAxlyTotalPosition(pool)
201+ let newPosNum = getNewUserPositionNumber(pool, user)
202+ let baseEntry = [IntegerEntry((pool + kTotalPosition), (totalAmount + userShareForStake)), IntegerEntry((((((pool + "_") + user) + "_") + toString(newPosNum)) + kUserPosition), userShareForStake), StringEntry((((((pool + "_") + user) + "_") + toString(newPosNum)) + kUserPositionType), SF_POS_TYPE), IntegerEntry((((pool + "_") + user) + kUserPositionNum), newPosNum), ScriptTransfer(moneyBox, axlyInFee, fromBase58String(shareId))]
203+ $Tuple2(baseEntry, userShareForStake)
204+ }
205+ else throw("Strict value is not equal to itself.")
206+ }
207+ }
208+ else throw("Strict value is not equal to itself.")
209+ }
210+ else throw("Strict value is not equal to itself.")
211+ }
212+ else throw("Strict value is not equal to itself.")
213+ }
214+
215+
216+func replanishWX (user,pool,withLoan,pmtA,pmtAssetA,pmtB,pmtAssetB,shareId) = {
217+ let poolAddr = Address(fromBase58String(pool))
218+ let $t072978116 = if (if ((pmtA > 0))
219+ then (pmtB > 0)
220+ else false)
221+ then {
222+ let evalPutInA = {
223+ let @ = invoke(poolAddr, "evaluatePutByAmountAssetREADONLY", [pmtA], nil)
224+ if ($isInstanceOf(@, "List[Any]"))
225+ then @
226+ else throw(($getType(@) + " couldn't be cast to List[Any]"))
227+ }
228+ if ((evalPutInA == evalPutInA))
229+ then {
230+ let evalPutInB = {
231+ let @ = invoke(poolAddr, "evaluatePutByPriceAssetREADONLY", [pmtB], nil)
232+ if ($isInstanceOf(@, "List[Any]"))
233+ then @
234+ else throw(($getType(@) + " couldn't be cast to List[Any]"))
235+ }
236+ if ((evalPutInB == evalPutInB))
237+ then {
238+ let lpInA = {
239+ let @ = evalPutInA[0]
240+ if ($isInstanceOf(@, "Int"))
241+ then @
242+ else throw(($getType(@) + " couldn't be cast to Int"))
243+ }
244+ let lpInB = {
245+ let @ = evalPutInB[0]
246+ if ($isInstanceOf(@, "Int"))
247+ then @
248+ else throw(($getType(@) + " couldn't be cast to Int"))
249+ }
250+ if ((lpInA > lpInB))
251+ then {
252+ let pmtInB = {
253+ let @ = evalPutInB[7]
254+ if ($isInstanceOf(@, "Int"))
255+ then @
256+ else throw(($getType(@) + " couldn't be cast to Int"))
257+ }
258+ $Tuple4(pmtA, pmtInB, (pmtB - pmtInB), pmtAssetB)
259+ }
260+ else {
261+ let pmtInA = {
262+ let @ = evalPutInB[6]
263+ if ($isInstanceOf(@, "Int"))
264+ then @
265+ else throw(($getType(@) + " couldn't be cast to Int"))
266+ }
267+ $Tuple4(pmtInA, pmtB, (pmtA - pmtInA), pmtAssetA)
268+ }
269+ }
270+ else throw("Strict value is not equal to itself.")
271+ }
272+ else throw("Strict value is not equal to itself.")
273+ }
274+ else if ((pmtA > 0))
275+ then $Tuple4(pmtA, pmtB, pmtA, pmtAssetA)
276+ else if ((pmtB > 0))
277+ then $Tuple4(pmtA, pmtB, pmtB, pmtAssetB)
278+ else throw("pmts must be > 0")
279+ let pmtAmountA = $t072978116._1
280+ let pmtAmountB = $t072978116._2
281+ let change = $t072978116._3
282+ let changeAssetId = $t072978116._4
283+ let shareBalanceBefore = accountBalance(fromBase58String(shareId))
284+ if ((shareBalanceBefore == shareBalanceBefore))
285+ then {
286+ let inv1 = if (if ((pmtAmountA > 0))
287+ then (pmtAmountB > 0)
288+ else false)
289+ then {
290+ let payments = [AttachedPayment(assetIdFromStr(pmtAssetA), pmtAmountA), AttachedPayment(assetIdFromStr(pmtAssetB), pmtAmountB)]
291+ invoke(poolAddr, "put", [1, false], payments)
292+ }
293+ else 0
294+ if ((inv1 == inv1))
295+ then {
296+ let inv2 = if ((change > 0))
297+ then {
298+ let payments = [AttachedPayment(assetIdFromStr(changeAssetId), change)]
299+ invoke(poolAddr, "putOneTkn", [0, false], payments)
300+ }
301+ else 0
302+ if ((inv2 == inv2))
303+ then {
304+ let shareBalanceAfter = accountBalance(fromBase58String(shareId))
305+ let totalShare = (shareBalanceAfter - shareBalanceBefore)
306+ let axlyInFee = fraction(totalShare, getAxlyInFee(pool, withLoan), FEE_SCALE6)
307+ let userShareForStake = (totalShare - axlyInFee)
308+ if ((0 >= userShareForStake))
309+ then throw("amount of staked sharetokens must be > 0")
310+ else {
311+ let inv3 = invoke(getWXFarmingAddr(poolAddr), "stake", nil, [AttachedPayment(fromBase58String(shareId), userShareForStake)])
168312 if ((inv3 == inv3))
169313 then {
170314 let totalAmount = getAxlyTotalPosition(pool)
182326 }
183327
184328
185-func replanishWX (user,pool,withLoan,pmtA,pmtAssetA,pmtB,pmtAssetB,balA,balB,shareId,virtualSwapTokenPay,virtualSwapTokenGet) = nil
186-
187-
188329 @Callable(i)
189-func replanish (pool,borrowAmount,borrowAssetId,virtualSwapTokenPay,virtualSwapTokenGet) = {
190- let type = valueOrErrorMessage(getString(this, (kPool + pool)), "Pool is not inited")
191- let $t075947845 = if ((type == SF_POS_TYPE))
192- then getSFPoolData(Address(fromBase58String(pool)))
193- else if ((type == WX_POS_TYPE))
194- then getWXPoolData(Address(fromBase58String(pool)))
195- else throw("Wrong pool type")
196- let AId = $t075947845._1
197- let BId = $t075947845._2
198- let balA = $t075947845._3
199- let balB = $t075947845._4
200- let shareId = $t075947845._5
201- let $t078498486 = if ((size(i.payments) == 2))
202- then if ((assetIdToStr(i.payments[0].assetId) != AId))
203- then throw("Wrong payment asset A")
204- else if ((assetIdToStr(i.payments[1].assetId) != BId))
205- then throw("Wrong payment asset B")
206- else $Tuple4(i.payments[0].amount, AId, i.payments[1].amount, BId)
207- else if ((size(i.payments) == 1))
208- then if ((assetIdToStr(i.payments[0].assetId) == AId))
209- then $Tuple4(i.payments[0].amount, AId, 0, BId)
210- else if ((assetIdToStr(i.payments[0].assetId) == BId))
211- then $Tuple4(0, AId, i.payments[0].amount, BId)
212- else throw("Wrong payment")
213- else throw("One or two payments expected")
214- let pmtA = $t078498486._1
215- let pmtAssetA = $t078498486._2
216- let pmtB = $t078498486._3
217- let pmtAssetB = $t078498486._4
218- if ((borrowAmount > 0))
219- then {
220- let request = makeString([type, toString(i.caller), pool, toString(pmtA), pmtAssetA, toString(pmtB), pmtAssetB, toString(balA), toString(balB), shareId, toString(virtualSwapTokenPay), toString(virtualSwapTokenGet), borrowAssetId, toString(borrowAmount)], ",")
221- let newRequestId = {
222- let @ = invoke(this, "createNewRequest", [request], nil)
223- if ($isInstanceOf(@, "Int"))
224- then @
225- else unit
330+func replanish (pool,leverage,borrowAssetId) = if (if ((100 > leverage))
331+ then true
332+ else (leverage > 300))
333+ then throw("Leverage can't be <100 and >300")
334+ else {
335+ let type = valueOrErrorMessage(getString(this, (kPool + pool)), "Pool is not inited")
336+ let $t0996910220 = if ((type == SF_POS_TYPE))
337+ then getSFPoolData(Address(fromBase58String(pool)))
338+ else if ((type == WX_POS_TYPE))
339+ then getWXPoolData(Address(fromBase58String(pool)))
340+ else throw("Wrong pool type")
341+ let AId = $t0996910220._1
342+ let BId = $t0996910220._2
343+ let balA = $t0996910220._3
344+ let balB = $t0996910220._4
345+ let shareId = $t0996910220._5
346+ let $t01022310860 = if ((size(i.payments) == 2))
347+ then if ((assetIdToStr(i.payments[0].assetId) != AId))
348+ then throw("Wrong payment asset A")
349+ else if ((assetIdToStr(i.payments[1].assetId) != BId))
350+ then throw("Wrong payment asset B")
351+ else $Tuple4(i.payments[0].amount, AId, i.payments[1].amount, BId)
352+ else if ((size(i.payments) == 1))
353+ then if ((assetIdToStr(i.payments[0].assetId) == AId))
354+ then $Tuple4(i.payments[0].amount, AId, 0, BId)
355+ else if ((assetIdToStr(i.payments[0].assetId) == BId))
356+ then $Tuple4(0, AId, i.payments[0].amount, BId)
357+ else throw("Wrong payment")
358+ else throw("One or two payments expected")
359+ let pmtA = $t01022310860._1
360+ let pmtAssetA = $t01022310860._2
361+ let pmtB = $t01022310860._3
362+ let pmtAssetB = $t01022310860._4
363+ if ((leverage > 100))
364+ then {
365+ let dPriceA = {
366+ let @ = invoke(priceOracleAddr, "getTWAP60", [pmtAssetA, false], nil)
367+ if ($isInstanceOf(@, "Int"))
368+ then @
369+ else throw(($getType(@) + " couldn't be cast to Int"))
370+ }
371+ let dPriceB = {
372+ let @ = invoke(priceOracleAddr, "getTWAP60", [pmtAssetB, false], nil)
373+ if ($isInstanceOf(@, "Int"))
374+ then @
375+ else throw(($getType(@) + " couldn't be cast to Int"))
376+ }
377+ let paydInDollar = (fraction(dPriceA, pmtA, pow(10, 0, getAssetDecimals(pmtAssetA), 0, 0, DOWN)) + fraction(dPriceB, pmtB, pow(10, 0, getAssetDecimals(pmtAssetB), 0, 0, DOWN)))
378+ let borrowAmount = fraction(paydInDollar, (leverage - 100), 100)
379+ let request = makeString([type, toString(i.caller), pool, toString(pmtA), pmtAssetA, toString(pmtB), pmtAssetB, toString(balA), toString(balB), shareId, borrowAssetId, toString(borrowAmount)], ",")
380+ let newRequestId = {
381+ let @ = invoke(this, "createNewRequest", [request], nil)
382+ if ($isInstanceOf(@, "Int"))
383+ then @
384+ else unit
385+ }
386+ if ((newRequestId == newRequestId))
387+ then {
388+ let args = [toString(i.caller), shareId, borrowAssetId, borrowAmount, toString(this), "replanishFromLand", toString(valueOrErrorMessage(newRequestId, "Can't create new request"))]
389+ let inv = reentrantInvoke(getLendSrvAddr(), "flashPosition", args, nil)
390+ nil
391+ }
392+ else throw("Strict value is not equal to itself.")
226393 }
227- if ((newRequestId == newRequestId))
228- then {
229- let args = [toString(i.caller), shareId, borrowAssetId, borrowAmount, toString(this), "replanishFromLand", toString(valueOrErrorMessage(newRequestId, "Can't create new request"))]
230- let inv = reentrantInvoke(getLendSrvAddr(), "flashPosition", args, nil)
231- nil
232- }
233- else throw("Strict value is not equal to itself.")
234- }
235- else if ((type == SF_POS_TYPE))
236- then replanishSwopFi(toString(i.caller), pool, false, pmtA, pmtAssetA, pmtB, pmtAssetB, balA, balB, shareId, virtualSwapTokenPay, virtualSwapTokenGet)
237- else throw("Cant wx")
238- }
394+ else if ((type == SF_POS_TYPE))
395+ then replanishSwopFi(toString(i.caller), pool, false, pmtA, pmtAssetA, pmtB, pmtAssetB, balA, balB, shareId)
396+ else replanishWX(toString(i.caller), pool, false, pmtA, pmtAssetA, pmtB, pmtAssetB, shareId)
397+ }
239398
240399
241400
257416 else parseIntValue(request[3])
258417 if ((request[0] == SF_POS_TYPE))
259418 then {
260- let $t01070711133 = replanishSwopFi(request[1], request[2], true, pmtA, request[4], pmtB, request[6], parseIntValue(request[7]), parseIntValue(request[8]), request[9], parseIntValue(request[10]), parseIntValue(request[11]))
261- let entries = $t01070711133._1
262- let lpAmount = $t01070711133._2
419+ let $t01324313557 = replanishSwopFi(request[1], request[2], true, pmtA, request[4], pmtB, request[6], parseIntValue(request[7]), parseIntValue(request[8]), request[9])
420+ let entries = $t01324313557._1
421+ let lpAmount = $t01324313557._2
263422 $Tuple2((entries :+ DeleteEntry((requestId + kRequestId))), lpAmount)
264423 }
265- else throw("Cant wx")
424+ else if ((request[0] == SF_POS_TYPE))
425+ then {
426+ let $t01366813898 = replanishWX(request[1], request[2], true, pmtA, request[4], pmtB, request[6], request[9])
427+ let entries = $t01366813898._1
428+ let lpAmount = $t01366813898._2
429+ $Tuple2((entries :+ DeleteEntry((requestId + kRequestId))), lpAmount)
430+ }
431+ else throw("Wrong request type")
266432 }
267433 }
268434
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SF_POS_TYPE = "SF"
55
66 let WX_POS_TYPE = "WX"
77
88 let SCALE8 = 100000000
99
1010 let FEE_SCALE6 = 1000000
1111
1212 let kSFPoolAAssetBalance = "A_asset_balance"
1313
1414 let kSFPoolBAssetBalance = "B_asset_balance"
1515
1616 let kSFPoolAAssetId = "A_asset_id"
1717
1818 let kSFPoolBAssetId = "B_asset_id"
1919
2020 let kSFPoolShareId = "share_asset_id"
21-
22-let kSFPoolVersion = "version"
2321
2422 let kSFFarmingStaked = "_share_tokens_locked"
2523
2624 let kUserPosition = "_user_position"
2725
2826 let kUserPositionType = "_user_position_type"
2927
3028 let kUserPositionNum = "_user_position_number"
3129
3230 let kTotalPosition = "_total_position"
3331
3432 let kAxlyInFeeWithoutLoan = "_axly_fee_without_loan"
3533
3634 let kAxlyInFeeWithLoan = "_axly_fee_with_loan"
3735
3836 let kAxlyCapFee = "_axly_fee_cap"
3937
4038 let kRequestId = "_request_id"
4139
4240 let kRequestIter = "requests_iter"
4341
4442 let kPool = "pool_"
4543
4644 let kMoneyBox = "axly_money_box"
4745
4846 let kSFFarmingAddr = "swopfi_farming_addr"
4947
5048 let kLendService = "lend_service_addr"
5149
50+let kPriceOracle = "price_oracle"
51+
5252 let moneyBox = Address(fromBase58String(valueOrErrorMessage(getString(this, kMoneyBox), "No axly moneyBox address")))
53+
54+let priceOracleAddr = Address(fromBase58String(valueOrErrorMessage(getString(this, kPriceOracle), "No price oracle address")))
5355
5456 func isSelfCall (i) = if ((i.caller == this))
5557 then unit
5658 else throw("Only contract itself can call this function")
5759
5860
5961 func accountBalance (assetId) = match assetId {
6062 case id: ByteVector =>
6163 assetBalance(this, id)
6264 case waves: Unit =>
6365 wavesBalance(this).available
6466 case _ =>
6567 throw("Match error")
6668 }
6769
6870
6971 func getSFPoolData (poolAddr) = $Tuple5(valueOrErrorMessage(getString(poolAddr, kSFPoolAAssetId), "Can't get pool A asset id"), valueOrErrorMessage(getString(poolAddr, kSFPoolBAssetId), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(poolAddr, kSFPoolAAssetBalance), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(poolAddr, kSFPoolBAssetBalance), "Can't get pool B asset balance"), valueOrErrorMessage(getString(poolAddr, kSFPoolShareId), "Can't get share asset id"))
7072
7173
72-func getWXPoolData (poolAddr) = $Tuple5(valueOrErrorMessage(getString(poolAddr, kSFPoolAAssetId), "Can't get pool A asset id"), valueOrErrorMessage(getString(poolAddr, kSFPoolBAssetId), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(poolAddr, kSFPoolAAssetBalance), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(poolAddr, kSFPoolBAssetBalance), "Can't get pool B asset balance"), valueOrErrorMessage(getString(poolAddr, kSFPoolShareId), "Can't get share asset id"))
74+func getWXPoolData (poolAddr) = {
75+ let cfg = {
76+ let @ = invoke(poolAddr, "getPoolConfigWrapperREADONLY", nil, nil)
77+ if ($isInstanceOf(@, "List[Any]"))
78+ then @
79+ else throw(($getType(@) + " couldn't be cast to List[Any]"))
80+ }
81+ if ((cfg == cfg))
82+ then $Tuple5(valueOrErrorMessage({
83+ let @ = cfg[4]
84+ if ($isInstanceOf(@, "String"))
85+ then @
86+ else unit
87+ }, "Can't get pool A asset id"), valueOrErrorMessage({
88+ let @ = cfg[5]
89+ if ($isInstanceOf(@, "String"))
90+ then @
91+ else unit
92+ }, "Can't get pool B asset id"), 0, 0, valueOrErrorMessage({
93+ let @ = cfg[3]
94+ if ($isInstanceOf(@, "String"))
95+ then @
96+ else unit
97+ }, "Can't get pool LP asset id"))
98+ else throw("Strict value is not equal to itself.")
99+ }
73100
74101
75102 func getAxlyTotalPosition (pool) = valueOrElse(getInteger(this, (pool + kTotalPosition)), 0)
76103
77104
78105 func getNewUserPositionNumber (pool,user) = (valueOrElse(getInteger(this, (((pool + "_") + user) + kUserPositionNum)), 0) + 1)
79106
80107
81108 func getAxlyInFee (pool,withLoan) = if (withLoan)
82109 then getIntegerValue(this, (pool + kAxlyInFeeWithLoan))
83110 else getIntegerValue(this, (pool + kAxlyInFeeWithoutLoan))
84111
85112
86113 func getSFFarmingAddr () = Address(fromBase58String(valueOrErrorMessage(getString(this, kSFFarmingAddr), "Can't get swopfi farming addr")))
114+
115+
116+func getWXFarmingAddr (poolAddr) = {
117+ let fContract = Address(fromBase58String(valueOrElse(getString(poolAddr, "%s__factoryContract"), "Can't get WX factory contract addr")))
118+ let factroyCfg = split(valueOrElse(getString(fContract, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
119+ Address(fromBase58String(factroyCfg[1]))
120+ }
87121
88122
89123 func getLendSrvAddr () = Address(fromBase58String(valueOrErrorMessage(getString(this, kLendService), "Can't get lend service addr")))
90124
91125
92126 func assetIdToStr (assetId) = match assetId {
93127 case id: ByteVector =>
94128 toBase58String(id)
95129 case waves: Unit =>
96130 "WAVES"
97131 case _ =>
98132 throw("Match error")
99133 }
100134
101135
102136 func assetIdFromStr (assetId) = if ((assetId == "WAVES"))
103137 then unit
104138 else fromBase58String(assetId)
105139
106140
107-func replanishSwopFi (user,pool,withLoan,pmtA,pmtAssetA,pmtB,pmtAssetB,balA,balB,shareId,virtualSwapTokenPay,virtualSwapTokenGet) = {
141+func getAssetDecimals (assetId) = if ((assetId == "WAVES"))
142+ then 8
143+ else match assetInfo(fromBase58String(assetId)) {
144+ case asset: Asset =>
145+ asset.decimals
146+ case _ =>
147+ throw("Can't find asset")
148+ }
149+
150+
151+func replanishSwopFi (user,pool,withLoan,pmtA,pmtAssetA,pmtB,pmtAssetB,balA,balB,shareId) = {
108152 let shareBalanceBefore = accountBalance(fromBase58String(shareId))
109153 if ((shareBalanceBefore == shareBalanceBefore))
110154 then {
111155 let poolAddr = Address(fromBase58String(pool))
112156 let ratioA = fraction(SCALE8, pmtA, balA)
113157 let ratioB = fraction(SCALE8, pmtB, balB)
114- let $t045474840 = if ((ratioB > ratioA))
158+ let $t050435335 = if ((ratioB > ratioA))
115159 then {
116160 let pmt = fraction(balB, ratioA, SCALE8, CEILING)
117161 $Tuple4(pmtA, pmt, (pmtB - pmt), pmtAssetB)
118162 }
119163 else {
120164 let pmt = fraction(balA, ratioB, SCALE8, CEILING)
121165 $Tuple4(pmt, pmtB, (pmtA - pmt), pmtAssetA)
122166 }
123- let pmtAmountA = $t045474840._1
124- let pmtAmountB = $t045474840._2
125- let change = $t045474840._3
126- let changeAssetId = $t045474840._4
127- let poolVersion = getStringValue(poolAddr, "version")
167+ let pmtAmountA = $t050435335._1
168+ let pmtAmountB = $t050435335._2
169+ let change = $t050435335._3
170+ let changeAssetId = $t050435335._4
128171 let inv1 = if (if ((pmtAmountA > 0))
129172 then (pmtAmountB > 0)
130173 else false)
131174 then {
132175 let payments = [AttachedPayment(assetIdFromStr(pmtAssetA), pmtAmountA), AttachedPayment(assetIdFromStr(pmtAssetB), pmtAmountB)]
133- if ((poolVersion == "1.0.0"))
134- then invoke(poolAddr, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], payments)
135- else if ((poolVersion == "2.0.0"))
136- then invoke(poolAddr, "replenishWithTwoTokensV2", [false, 0], payments)
137- else throw("Wrong pool type")
176+ invoke(poolAddr, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], payments)
138177 }
139178 else 0
140179 if ((inv1 == inv1))
141180 then {
142181 let inv2 = if ((change > 0))
143182 then {
144183 let payments = [AttachedPayment(assetIdFromStr(changeAssetId), change)]
145- if ((poolVersion == "1.0.0"))
146- then {
147- let vars = ["0", "false", "0"]
148- invoke(poolAddr, "callFunction", ["replenishWithOneToken", vars], payments)
149- }
150- else if ((poolVersion == "2.0.0"))
151- then {
152- let vars = [virtualSwapTokenPay, virtualSwapTokenGet, false, 0]
153- invoke(poolAddr, "replenishWithOneTokenV2", [false, 0], payments)
154- }
155- else throw("Wrong pool type")
184+ let vars = ["0", "false", "0"]
185+ invoke(poolAddr, "replenishWithOneTokenV2", [false, 0], payments)
156186 }
157187 else 0
158188 if ((inv2 == inv2))
159189 then {
160190 let shareBalanceAfter = accountBalance(fromBase58String(shareId))
161191 let totalShare = (shareBalanceAfter - shareBalanceBefore)
162192 let axlyInFee = fraction(totalShare, getAxlyInFee(pool, withLoan), FEE_SCALE6)
163193 let userShareForStake = (totalShare - axlyInFee)
164194 if ((0 >= userShareForStake))
165195 then throw("amount of staked sharetokens must be > 0")
166196 else {
167197 let inv3 = invoke(getSFFarmingAddr(), "lockShareTokens", [pool, 0], [AttachedPayment(fromBase58String(shareId), userShareForStake)])
198+ if ((inv3 == inv3))
199+ then {
200+ let totalAmount = getAxlyTotalPosition(pool)
201+ let newPosNum = getNewUserPositionNumber(pool, user)
202+ let baseEntry = [IntegerEntry((pool + kTotalPosition), (totalAmount + userShareForStake)), IntegerEntry((((((pool + "_") + user) + "_") + toString(newPosNum)) + kUserPosition), userShareForStake), StringEntry((((((pool + "_") + user) + "_") + toString(newPosNum)) + kUserPositionType), SF_POS_TYPE), IntegerEntry((((pool + "_") + user) + kUserPositionNum), newPosNum), ScriptTransfer(moneyBox, axlyInFee, fromBase58String(shareId))]
203+ $Tuple2(baseEntry, userShareForStake)
204+ }
205+ else throw("Strict value is not equal to itself.")
206+ }
207+ }
208+ else throw("Strict value is not equal to itself.")
209+ }
210+ else throw("Strict value is not equal to itself.")
211+ }
212+ else throw("Strict value is not equal to itself.")
213+ }
214+
215+
216+func replanishWX (user,pool,withLoan,pmtA,pmtAssetA,pmtB,pmtAssetB,shareId) = {
217+ let poolAddr = Address(fromBase58String(pool))
218+ let $t072978116 = if (if ((pmtA > 0))
219+ then (pmtB > 0)
220+ else false)
221+ then {
222+ let evalPutInA = {
223+ let @ = invoke(poolAddr, "evaluatePutByAmountAssetREADONLY", [pmtA], nil)
224+ if ($isInstanceOf(@, "List[Any]"))
225+ then @
226+ else throw(($getType(@) + " couldn't be cast to List[Any]"))
227+ }
228+ if ((evalPutInA == evalPutInA))
229+ then {
230+ let evalPutInB = {
231+ let @ = invoke(poolAddr, "evaluatePutByPriceAssetREADONLY", [pmtB], nil)
232+ if ($isInstanceOf(@, "List[Any]"))
233+ then @
234+ else throw(($getType(@) + " couldn't be cast to List[Any]"))
235+ }
236+ if ((evalPutInB == evalPutInB))
237+ then {
238+ let lpInA = {
239+ let @ = evalPutInA[0]
240+ if ($isInstanceOf(@, "Int"))
241+ then @
242+ else throw(($getType(@) + " couldn't be cast to Int"))
243+ }
244+ let lpInB = {
245+ let @ = evalPutInB[0]
246+ if ($isInstanceOf(@, "Int"))
247+ then @
248+ else throw(($getType(@) + " couldn't be cast to Int"))
249+ }
250+ if ((lpInA > lpInB))
251+ then {
252+ let pmtInB = {
253+ let @ = evalPutInB[7]
254+ if ($isInstanceOf(@, "Int"))
255+ then @
256+ else throw(($getType(@) + " couldn't be cast to Int"))
257+ }
258+ $Tuple4(pmtA, pmtInB, (pmtB - pmtInB), pmtAssetB)
259+ }
260+ else {
261+ let pmtInA = {
262+ let @ = evalPutInB[6]
263+ if ($isInstanceOf(@, "Int"))
264+ then @
265+ else throw(($getType(@) + " couldn't be cast to Int"))
266+ }
267+ $Tuple4(pmtInA, pmtB, (pmtA - pmtInA), pmtAssetA)
268+ }
269+ }
270+ else throw("Strict value is not equal to itself.")
271+ }
272+ else throw("Strict value is not equal to itself.")
273+ }
274+ else if ((pmtA > 0))
275+ then $Tuple4(pmtA, pmtB, pmtA, pmtAssetA)
276+ else if ((pmtB > 0))
277+ then $Tuple4(pmtA, pmtB, pmtB, pmtAssetB)
278+ else throw("pmts must be > 0")
279+ let pmtAmountA = $t072978116._1
280+ let pmtAmountB = $t072978116._2
281+ let change = $t072978116._3
282+ let changeAssetId = $t072978116._4
283+ let shareBalanceBefore = accountBalance(fromBase58String(shareId))
284+ if ((shareBalanceBefore == shareBalanceBefore))
285+ then {
286+ let inv1 = if (if ((pmtAmountA > 0))
287+ then (pmtAmountB > 0)
288+ else false)
289+ then {
290+ let payments = [AttachedPayment(assetIdFromStr(pmtAssetA), pmtAmountA), AttachedPayment(assetIdFromStr(pmtAssetB), pmtAmountB)]
291+ invoke(poolAddr, "put", [1, false], payments)
292+ }
293+ else 0
294+ if ((inv1 == inv1))
295+ then {
296+ let inv2 = if ((change > 0))
297+ then {
298+ let payments = [AttachedPayment(assetIdFromStr(changeAssetId), change)]
299+ invoke(poolAddr, "putOneTkn", [0, false], payments)
300+ }
301+ else 0
302+ if ((inv2 == inv2))
303+ then {
304+ let shareBalanceAfter = accountBalance(fromBase58String(shareId))
305+ let totalShare = (shareBalanceAfter - shareBalanceBefore)
306+ let axlyInFee = fraction(totalShare, getAxlyInFee(pool, withLoan), FEE_SCALE6)
307+ let userShareForStake = (totalShare - axlyInFee)
308+ if ((0 >= userShareForStake))
309+ then throw("amount of staked sharetokens must be > 0")
310+ else {
311+ let inv3 = invoke(getWXFarmingAddr(poolAddr), "stake", nil, [AttachedPayment(fromBase58String(shareId), userShareForStake)])
168312 if ((inv3 == inv3))
169313 then {
170314 let totalAmount = getAxlyTotalPosition(pool)
171315 let newPosNum = getNewUserPositionNumber(pool, user)
172316 $Tuple2([IntegerEntry((pool + kTotalPosition), (totalAmount + userShareForStake)), IntegerEntry((((((pool + "_") + user) + "_") + toString(newPosNum)) + kUserPosition), userShareForStake), StringEntry((((((pool + "_") + user) + "_") + toString(newPosNum)) + kUserPositionType), SF_POS_TYPE), IntegerEntry((((pool + "_") + user) + kUserPositionNum), newPosNum), ScriptTransfer(moneyBox, axlyInFee, fromBase58String(shareId))], userShareForStake)
173317 }
174318 else throw("Strict value is not equal to itself.")
175319 }
176320 }
177321 else throw("Strict value is not equal to itself.")
178322 }
179323 else throw("Strict value is not equal to itself.")
180324 }
181325 else throw("Strict value is not equal to itself.")
182326 }
183327
184328
185-func replanishWX (user,pool,withLoan,pmtA,pmtAssetA,pmtB,pmtAssetB,balA,balB,shareId,virtualSwapTokenPay,virtualSwapTokenGet) = nil
186-
187-
188329 @Callable(i)
189-func replanish (pool,borrowAmount,borrowAssetId,virtualSwapTokenPay,virtualSwapTokenGet) = {
190- let type = valueOrErrorMessage(getString(this, (kPool + pool)), "Pool is not inited")
191- let $t075947845 = if ((type == SF_POS_TYPE))
192- then getSFPoolData(Address(fromBase58String(pool)))
193- else if ((type == WX_POS_TYPE))
194- then getWXPoolData(Address(fromBase58String(pool)))
195- else throw("Wrong pool type")
196- let AId = $t075947845._1
197- let BId = $t075947845._2
198- let balA = $t075947845._3
199- let balB = $t075947845._4
200- let shareId = $t075947845._5
201- let $t078498486 = if ((size(i.payments) == 2))
202- then if ((assetIdToStr(i.payments[0].assetId) != AId))
203- then throw("Wrong payment asset A")
204- else if ((assetIdToStr(i.payments[1].assetId) != BId))
205- then throw("Wrong payment asset B")
206- else $Tuple4(i.payments[0].amount, AId, i.payments[1].amount, BId)
207- else if ((size(i.payments) == 1))
208- then if ((assetIdToStr(i.payments[0].assetId) == AId))
209- then $Tuple4(i.payments[0].amount, AId, 0, BId)
210- else if ((assetIdToStr(i.payments[0].assetId) == BId))
211- then $Tuple4(0, AId, i.payments[0].amount, BId)
212- else throw("Wrong payment")
213- else throw("One or two payments expected")
214- let pmtA = $t078498486._1
215- let pmtAssetA = $t078498486._2
216- let pmtB = $t078498486._3
217- let pmtAssetB = $t078498486._4
218- if ((borrowAmount > 0))
219- then {
220- let request = makeString([type, toString(i.caller), pool, toString(pmtA), pmtAssetA, toString(pmtB), pmtAssetB, toString(balA), toString(balB), shareId, toString(virtualSwapTokenPay), toString(virtualSwapTokenGet), borrowAssetId, toString(borrowAmount)], ",")
221- let newRequestId = {
222- let @ = invoke(this, "createNewRequest", [request], nil)
223- if ($isInstanceOf(@, "Int"))
224- then @
225- else unit
330+func replanish (pool,leverage,borrowAssetId) = if (if ((100 > leverage))
331+ then true
332+ else (leverage > 300))
333+ then throw("Leverage can't be <100 and >300")
334+ else {
335+ let type = valueOrErrorMessage(getString(this, (kPool + pool)), "Pool is not inited")
336+ let $t0996910220 = if ((type == SF_POS_TYPE))
337+ then getSFPoolData(Address(fromBase58String(pool)))
338+ else if ((type == WX_POS_TYPE))
339+ then getWXPoolData(Address(fromBase58String(pool)))
340+ else throw("Wrong pool type")
341+ let AId = $t0996910220._1
342+ let BId = $t0996910220._2
343+ let balA = $t0996910220._3
344+ let balB = $t0996910220._4
345+ let shareId = $t0996910220._5
346+ let $t01022310860 = if ((size(i.payments) == 2))
347+ then if ((assetIdToStr(i.payments[0].assetId) != AId))
348+ then throw("Wrong payment asset A")
349+ else if ((assetIdToStr(i.payments[1].assetId) != BId))
350+ then throw("Wrong payment asset B")
351+ else $Tuple4(i.payments[0].amount, AId, i.payments[1].amount, BId)
352+ else if ((size(i.payments) == 1))
353+ then if ((assetIdToStr(i.payments[0].assetId) == AId))
354+ then $Tuple4(i.payments[0].amount, AId, 0, BId)
355+ else if ((assetIdToStr(i.payments[0].assetId) == BId))
356+ then $Tuple4(0, AId, i.payments[0].amount, BId)
357+ else throw("Wrong payment")
358+ else throw("One or two payments expected")
359+ let pmtA = $t01022310860._1
360+ let pmtAssetA = $t01022310860._2
361+ let pmtB = $t01022310860._3
362+ let pmtAssetB = $t01022310860._4
363+ if ((leverage > 100))
364+ then {
365+ let dPriceA = {
366+ let @ = invoke(priceOracleAddr, "getTWAP60", [pmtAssetA, false], nil)
367+ if ($isInstanceOf(@, "Int"))
368+ then @
369+ else throw(($getType(@) + " couldn't be cast to Int"))
370+ }
371+ let dPriceB = {
372+ let @ = invoke(priceOracleAddr, "getTWAP60", [pmtAssetB, false], nil)
373+ if ($isInstanceOf(@, "Int"))
374+ then @
375+ else throw(($getType(@) + " couldn't be cast to Int"))
376+ }
377+ let paydInDollar = (fraction(dPriceA, pmtA, pow(10, 0, getAssetDecimals(pmtAssetA), 0, 0, DOWN)) + fraction(dPriceB, pmtB, pow(10, 0, getAssetDecimals(pmtAssetB), 0, 0, DOWN)))
378+ let borrowAmount = fraction(paydInDollar, (leverage - 100), 100)
379+ let request = makeString([type, toString(i.caller), pool, toString(pmtA), pmtAssetA, toString(pmtB), pmtAssetB, toString(balA), toString(balB), shareId, borrowAssetId, toString(borrowAmount)], ",")
380+ let newRequestId = {
381+ let @ = invoke(this, "createNewRequest", [request], nil)
382+ if ($isInstanceOf(@, "Int"))
383+ then @
384+ else unit
385+ }
386+ if ((newRequestId == newRequestId))
387+ then {
388+ let args = [toString(i.caller), shareId, borrowAssetId, borrowAmount, toString(this), "replanishFromLand", toString(valueOrErrorMessage(newRequestId, "Can't create new request"))]
389+ let inv = reentrantInvoke(getLendSrvAddr(), "flashPosition", args, nil)
390+ nil
391+ }
392+ else throw("Strict value is not equal to itself.")
226393 }
227- if ((newRequestId == newRequestId))
228- then {
229- let args = [toString(i.caller), shareId, borrowAssetId, borrowAmount, toString(this), "replanishFromLand", toString(valueOrErrorMessage(newRequestId, "Can't create new request"))]
230- let inv = reentrantInvoke(getLendSrvAddr(), "flashPosition", args, nil)
231- nil
232- }
233- else throw("Strict value is not equal to itself.")
234- }
235- else if ((type == SF_POS_TYPE))
236- then replanishSwopFi(toString(i.caller), pool, false, pmtA, pmtAssetA, pmtB, pmtAssetB, balA, balB, shareId, virtualSwapTokenPay, virtualSwapTokenGet)
237- else throw("Cant wx")
238- }
394+ else if ((type == SF_POS_TYPE))
395+ then replanishSwopFi(toString(i.caller), pool, false, pmtA, pmtAssetA, pmtB, pmtAssetB, balA, balB, shareId)
396+ else replanishWX(toString(i.caller), pool, false, pmtA, pmtAssetA, pmtB, pmtAssetB, shareId)
397+ }
239398
240399
241400
242401 @Callable(i)
243402 func replanishFromLand (requestId) = {
244403 let request = split(valueOrErrorMessage(getString(this, (requestId + kRequestId)), ("No request with id " + requestId)), ",")
245404 if ((size(i.payments) != 1))
246405 then throw("Wrong payment size")
247406 else if (if ((assetIdToStr(i.payments[0].assetId) != request[12]))
248407 then true
249408 else (i.payments[0].amount != parseIntValue(request[13])))
250409 then throw("Wrong payment")
251410 else {
252411 let pmtA = if ((request[4] == assetIdToStr(i.payments[0].assetId)))
253412 then (parseIntValue(request[3]) + i.payments[0].amount)
254413 else parseIntValue(request[3])
255414 let pmtB = if ((request[6] == assetIdToStr(i.payments[0].assetId)))
256415 then (parseIntValue(request[5]) + i.payments[0].amount)
257416 else parseIntValue(request[3])
258417 if ((request[0] == SF_POS_TYPE))
259418 then {
260- let $t01070711133 = replanishSwopFi(request[1], request[2], true, pmtA, request[4], pmtB, request[6], parseIntValue(request[7]), parseIntValue(request[8]), request[9], parseIntValue(request[10]), parseIntValue(request[11]))
261- let entries = $t01070711133._1
262- let lpAmount = $t01070711133._2
419+ let $t01324313557 = replanishSwopFi(request[1], request[2], true, pmtA, request[4], pmtB, request[6], parseIntValue(request[7]), parseIntValue(request[8]), request[9])
420+ let entries = $t01324313557._1
421+ let lpAmount = $t01324313557._2
263422 $Tuple2((entries :+ DeleteEntry((requestId + kRequestId))), lpAmount)
264423 }
265- else throw("Cant wx")
424+ else if ((request[0] == SF_POS_TYPE))
425+ then {
426+ let $t01366813898 = replanishWX(request[1], request[2], true, pmtA, request[4], pmtB, request[6], request[9])
427+ let entries = $t01366813898._1
428+ let lpAmount = $t01366813898._2
429+ $Tuple2((entries :+ DeleteEntry((requestId + kRequestId))), lpAmount)
430+ }
431+ else throw("Wrong request type")
266432 }
267433 }
268434
269435
270436
271437 @Callable(i)
272438 func createNewRequest (params) = valueOrElse(isSelfCall(i), {
273439 let newRequestId = (valueOrElse(getInteger(this, kRequestIter), 0) + 1)
274440 $Tuple2([StringEntry((toString(newRequestId) + kRequestId), params)], newRequestId)
275441 })
276442
277443
278444
279445 @Callable(i)
280446 func initNewPool (type,poolAddr,inFeeNoLoan,inFeeLoan,capFee) = if (if ((type != SF_POS_TYPE))
281447 then (type != WX_POS_TYPE)
282448 else false)
283449 then throw("Wrong type")
284450 else [IntegerEntry((poolAddr + kAxlyInFeeWithoutLoan), inFeeNoLoan), IntegerEntry((poolAddr + kAxlyInFeeWithLoan), inFeeLoan), IntegerEntry((poolAddr + kAxlyCapFee), capFee), StringEntry((kPool + poolAddr), type)]
285451
286452
287453 @Verifier(tx)
288454 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
289455

github/deemru/w8io/169f3d6 
52.77 ms