tx · AR2r6qEDbZGVEsM3Xsyvozi1PKdBTAKsWDrKFo9FTp9i

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.01400000 Waves

2023.03.30 13:08 [2512540] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "AR2r6qEDbZGVEsM3Xsyvozi1PKdBTAKsWDrKFo9FTp9i", "fee": 1400000, "feeAssetId": null, "timestamp": 1680170970787, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "Lc4kr1CzYKfvdGNBAas3BKshCzLAyWDmLVUFeLbuN3MZ1KJYHTeTNAYwmEVqUPR1F9T2JXtiv5KQmH6gLbapGEP" ], "script": "base64:BgIcCAISBQoDCAEIEgMKAQgSAwoBCBIHCgUICAEBASkAC1NGX1BPU19UWVBFAgJTRgALV1hfUE9TX1RZUEUCAldYAAZTQ0FMRTgAgMLXLwAKRkVFX1NDQUxFNgDAhD0AFGtTRlBvb2xBQXNzZXRCYWxhbmNlAg9BX2Fzc2V0X2JhbGFuY2UAFGtTRlBvb2xCQXNzZXRCYWxhbmNlAg9CX2Fzc2V0X2JhbGFuY2UAD2tTRlBvb2xBQXNzZXRJZAIKQV9hc3NldF9pZAAPa1NGUG9vbEJBc3NldElkAgpCX2Fzc2V0X2lkAA5rU0ZQb29sU2hhcmVJZAIOc2hhcmVfYXNzZXRfaWQAEGtTRkZhcm1pbmdTdGFrZWQCFF9zaGFyZV90b2tlbnNfbG9ja2VkAA1rVXNlclBvc2l0aW9uAg5fdXNlcl9wb3NpdGlvbgARa1VzZXJQb3NpdGlvblR5cGUCE191c2VyX3Bvc2l0aW9uX3R5cGUAEGtVc2VyUG9zaXRpb25OdW0CFV91c2VyX3Bvc2l0aW9uX251bWJlcgAOa1RvdGFsUG9zaXRpb24CD190b3RhbF9wb3NpdGlvbgAVa0F4bHlJbkZlZVdpdGhvdXRMb2FuAhZfYXhseV9mZWVfd2l0aG91dF9sb2FuABJrQXhseUluRmVlV2l0aExvYW4CE19heGx5X2ZlZV93aXRoX2xvYW4AC2tBeGx5Q2FwRmVlAg1fYXhseV9mZWVfY2FwAAprUmVxdWVzdElkAgtfcmVxdWVzdF9pZAAMa1JlcXVlc3RJdGVyAg1yZXF1ZXN0c19pdGVyAAVrUG9vbAIFcG9vbF8ACWtNb25leUJveAIOYXhseV9tb25leV9ib3gADmtTRkZhcm1pbmdBZGRyAhNzd29wZmlfZmFybWluZ19hZGRyAAxrTGVuZFNlcnZpY2UCEWxlbmRfc2VydmljZV9hZGRyAAxrUHJpY2VPcmFjbGUCDHByaWNlX29yYWNsZQAIbW9uZXlCb3gJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUJa01vbmV5Qm94AhhObyBheGx5IG1vbmV5Qm94IGFkZHJlc3MAD3ByaWNlT3JhY2xlQWRkcgkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrUHJpY2VPcmFjbGUCF05vIHByaWNlIG9yYWNsZSBhZGRyZXNzAQppc1NlbGZDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BDmFjY291bnRCYWxhbmNlAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDwBwIFBHRoaXMFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkAAgECC01hdGNoIGVycm9yAQ1nZXRTRlBvb2xEYXRhAQhwb29sQWRkcgkAlwoFCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFD2tTRlBvb2xBQXNzZXRJZAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ9rU0ZQb29sQkFzc2V0SWQCGUNhbid0IGdldCBwb29sIEIgYXNzZXQgaWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUUa1NGUG9vbEFBc3NldEJhbGFuY2UCHkNhbid0IGdldCBwb29sIEEgYXNzZXQgYmFsYW5jZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCHBvb2xBZGRyBRRrU0ZQb29sQkFzc2V0QmFsYW5jZQIeQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBiYWxhbmNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFDmtTRlBvb2xTaGFyZUlkAhhDYW4ndCBnZXQgc2hhcmUgYXNzZXQgaWQBDWdldFdYUG9vbERhdGEBCHBvb2xBZGRyBANjZmcKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRQb29sQ29uZmlnV3JhcHBlclJFQURPTkxZBQNuaWwFA25pbAMJAAECBQFAAglMaXN0W0FueV0FAUAJAAIBCQCsAgIJAAMBBQFAAh4gY291bGRuJ3QgYmUgY2FzdCB0byBMaXN0W0FueV0DCQAAAgUDY2ZnBQNjZmcJAJcKBQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcABAMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGUNhbid0IGdldCBwb29sIEEgYXNzZXQgaWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAJEDAgUDY2ZnAAUDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0AhlDYW4ndCBnZXQgcG9vbCBCIGFzc2V0IGlkAAAAAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcAAwMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGkNhbid0IGdldCBwb29sIExQIGFzc2V0IGlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARRnZXRBeGx5VG90YWxQb3NpdGlvbgEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtUb3RhbFBvc2l0aW9uAAABGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgIEcG9vbAR1c2VyCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRBrVXNlclBvc2l0aW9uTnVtAAAAAQEMZ2V0QXhseUluRmVlAgRwb29sCHdpdGhMb2FuAwUId2l0aExvYW4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUSa0F4bHlJbkZlZVdpdGhMb2FuCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgEQZ2V0U0ZGYXJtaW5nQWRkcgAJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUOa1NGRmFybWluZ0FkZHICHUNhbid0IGdldCBzd29wZmkgZmFybWluZyBhZGRyARBnZXRXWEZhcm1pbmdBZGRyAQhwb29sQWRkcgQJZkNvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQhwb29sQWRkcgITJXNfX2ZhY3RvcnlDb250cmFjdAIiQ2FuJ3QgZ2V0IFdYIGZhY3RvcnkgY29udHJhY3QgYWRkcgQKZmFjdHJveUNmZwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFCWZDb250cmFjdAIRJXNfX2ZhY3RvcnlDb25maWcCGENhbid0IGdldCBXWCBmYWN0b3J5IGNmZwICX18JAQdBZGRyZXNzAQkA2QQBCQCRAwIFCmZhY3Ryb3lDZmcAAQEOZ2V0TGVuZFNydkFkZHIACQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFDGtMZW5kU2VydmljZQIbQ2FuJ3QgZ2V0IGxlbmQgc2VydmljZSBhZGRyAQxhc3NldElkVG9TdHIBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJANgEAQUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDACBVdBVkVTCQACAQILTWF0Y2ggZXJyb3IBDmFzc2V0SWRGcm9tU3RyAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTBQR1bml0CQDZBAEFB2Fzc2V0SWQBEGdldEFzc2V0RGVjaW1hbHMBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMACAQHJG1hdGNoMAkA7AcBCQDZBAEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwCAUFYXNzZXQIZGVjaW1hbHMJAAIBAhBDYW4ndCBmaW5kIGFzc2V0AQ9yZXBsYW5pc2hTd29wRmkKBHVzZXIEcG9vbAh3aXRoTG9hbgRwbXRBCXBtdEFzc2V0QQRwbXRCCXBtdEFzc2V0QgRiYWxBBGJhbEIHc2hhcmVJZAQSc2hhcmVCYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQDZBAEFB3NoYXJlSWQDCQAAAgUSc2hhcmVCYWxhbmNlQmVmb3JlBRJzaGFyZUJhbGFuY2VCZWZvcmUECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQGcmF0aW9BCQBrAwUGU0NBTEU4BQRwbXRBBQRiYWxBBAZyYXRpb0IJAGsDBQZTQ0FMRTgFBHBtdEIFBGJhbEIECyR0MDUwNDM1MzM1AwkAZgIFBnJhdGlvQgUGcmF0aW9BBANwbXQJAG4EBQRiYWxCBQZyYXRpb0EFBlNDQUxFOAUHQ0VJTElORwkAlgoEBQRwbXRBBQNwbXQJAGUCBQRwbXRCBQNwbXQFCXBtdEFzc2V0QgQDcG10CQBuBAUEYmFsQQUGcmF0aW9CBQZTQ0FMRTgFB0NFSUxJTkcJAJYKBAUDcG10BQRwbXRCCQBlAgUEcG10QQUDcG10BQlwbXRBc3NldEEECnBtdEFtb3VudEEIBQskdDA1MDQzNTMzNQJfMQQKcG10QW1vdW50QggFCyR0MDUwNDM1MzM1Al8yBAZjaGFuZ2UIBQskdDA1MDQzNTMzNQJfMwQNY2hhbmdlQXNzZXRJZAgFCyR0MDUwNDM1MzM1Al80BARpbnYxAwMJAGYCBQpwbXRBbW91bnRBAAAJAGYCBQpwbXRBbW91bnRCAAAHBAhwYXltZW50cwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUJcG10QXNzZXRBBQpwbXRBbW91bnRBCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQlwbXRBc3NldEIFCnBtdEFtb3VudEIFA25pbAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICFnJlcGxlbmlzaFdpdGhUd29Ub2tlbnMJAMwIAgkAzAgCAgVmYWxzZQkAzAgCAgEwBQNuaWwFA25pbAUIcGF5bWVudHMAAAMJAAACBQRpbnYxBQRpbnYxBARpbnYyAwkAZgIFBmNoYW5nZQAABAhwYXltZW50cwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUNY2hhbmdlQXNzZXRJZAUGY2hhbmdlBQNuaWwEBHZhcnMJAMwIAgIBMAkAzAgCAgVmYWxzZQkAzAgCAgEwBQNuaWwJAPwHBAUIcG9vbEFkZHICF3JlcGxlbmlzaFdpdGhPbmVUb2tlblYyCQDMCAIHCQDMCAIAAAUDbmlsBQhwYXltZW50cwAAAwkAAAIFBGludjIFBGludjIEEXNoYXJlQmFsYW5jZUFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQDZBAEFB3NoYXJlSWQECnRvdGFsU2hhcmUJAGUCBRFzaGFyZUJhbGFuY2VBZnRlcgUSc2hhcmVCYWxhbmNlQmVmb3JlBAlheGx5SW5GZWUJAGsDBQp0b3RhbFNoYXJlCQEMZ2V0QXhseUluRmVlAgUEcG9vbAUId2l0aExvYW4FCkZFRV9TQ0FMRTYEEXVzZXJTaGFyZUZvclN0YWtlCQBlAgUKdG90YWxTaGFyZQUJYXhseUluRmVlAwkAZwIAAAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAihhbW91bnQgb2Ygc3Rha2VkIHNoYXJldG9rZW5zIG11c3QgYmUgPiAwBARpbnYzCQD8BwQJARBnZXRTRkZhcm1pbmdBZGRyAAIPbG9ja1NoYXJlVG9rZW5zCQDMCAIFBHBvb2wJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHc2hhcmVJZAURdXNlclNoYXJlRm9yU3Rha2UFA25pbAMJAAACBQRpbnYzBQRpbnYzBAt0b3RhbEFtb3VudAkBFGdldEF4bHlUb3RhbFBvc2l0aW9uAQUEcG9vbAQJbmV3UG9zTnVtCQEYZ2V0TmV3VXNlclBvc2l0aW9uTnVtYmVyAgUEcG9vbAUEdXNlcgQJYmFzZUVudHJ5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtUb3RhbFBvc2l0aW9uCQBkAgULdG90YWxBbW91bnQFEXVzZXJTaGFyZUZvclN0YWtlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQluZXdQb3NOdW0FDWtVc2VyUG9zaXRpb24FEXVzZXJTaGFyZUZvclN0YWtlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFCW5ld1Bvc051bQURa1VzZXJQb3NpdGlvblR5cGUFC1NGX1BPU19UWVBFCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRBrVXNlclBvc2l0aW9uTnVtBQluZXdQb3NOdW0JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIbW9uZXlCb3gFCWF4bHlJbkZlZQkA2QQBBQdzaGFyZUlkBQNuaWwJAJQKAgUJYmFzZUVudHJ5BRF1c2VyU2hhcmVGb3JTdGFrZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgELcmVwbGFuaXNoV1gIBHVzZXIEcG9vbAh3aXRoTG9hbgRwbXRBCXBtdEFzc2V0QQRwbXRCCXBtdEFzc2V0QgdzaGFyZUlkBAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wECyR0MDcyOTc4MTE2AwMJAGYCBQRwbXRBAAAJAGYCBQRwbXRCAAAHBApldmFsUHV0SW5BCgABQAkA/AcEBQhwb29sQWRkcgIgZXZhbHVhdGVQdXRCeUFtb3VudEFzc2V0UkVBRE9OTFkJAMwIAgUEcG10QQUDbmlsBQNuaWwDCQABAgUBQAIJTGlzdFtBbnldBQFACQACAQkArAICCQADAQUBQAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldAwkAAAIFCmV2YWxQdXRJbkEFCmV2YWxQdXRJbkEECmV2YWxQdXRJbkIKAAFACQD8BwQFCHBvb2xBZGRyAh9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZCQDMCAIFBHBtdEIFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQMJAAACBQpldmFsUHV0SW5CBQpldmFsUHV0SW5CBAVscEluQQoAAUAJAJEDAgUKZXZhbFB1dEluQQAAAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAQFbHBJbkIKAAFACQCRAwIFCmV2YWxQdXRJbkIAAAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQBmAgUFbHBJbkEFBWxwSW5CBAZwbXRJbkIKAAFACQCRAwIFCmV2YWxQdXRJbkIABwMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAJYKBAUEcG10QQUGcG10SW5CCQBlAgUEcG10QgUGcG10SW5CBQlwbXRBc3NldEIEBnBtdEluQQoAAUAJAJEDAgUKZXZhbFB1dEluQgAGAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAkAlgoEBQZwbXRJbkEFBHBtdEIJAGUCBQRwbXRBBQZwbXRJbkEFCXBtdEFzc2V0QQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAGYCBQRwbXRBAAAJAJYKBAUEcG10QQUEcG10QgUEcG10QQUJcG10QXNzZXRBAwkAZgIFBHBtdEIAAAkAlgoEBQRwbXRBBQRwbXRCBQRwbXRCBQlwbXRBc3NldEIJAAIBAhBwbXRzIG11c3QgYmUgPiAwBApwbXRBbW91bnRBCAULJHQwNzI5NzgxMTYCXzEECnBtdEFtb3VudEIIBQskdDA3Mjk3ODExNgJfMgQGY2hhbmdlCAULJHQwNzI5NzgxMTYCXzMEDWNoYW5nZUFzc2V0SWQIBQskdDA3Mjk3ODExNgJfNAQSc2hhcmVCYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQDZBAEFB3NoYXJlSWQDCQAAAgUSc2hhcmVCYWxhbmNlQmVmb3JlBRJzaGFyZUJhbGFuY2VCZWZvcmUEBGludjEDAwkAZgIFCnBtdEFtb3VudEEAAAkAZgIFCnBtdEFtb3VudEIAAAcECHBheW1lbnRzCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQlwbXRBc3NldEEFCnBtdEFtb3VudEEJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCXBtdEFzc2V0QgUKcG10QW1vdW50QgUDbmlsCQD8BwQFCHBvb2xBZGRyAgNwdXQJAMwIAgABCQDMCAIHBQNuaWwFCHBheW1lbnRzAAADCQAAAgUEaW52MQUEaW52MQQEaW52MgMJAGYCBQZjaGFuZ2UAAAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFDWNoYW5nZUFzc2V0SWQFBmNoYW5nZQUDbmlsCQD8BwQFCHBvb2xBZGRyAglwdXRPbmVUa24JAMwIAgAACQDMCAIHBQNuaWwFCHBheW1lbnRzAAADCQAAAgUEaW52MgUEaW52MgQRc2hhcmVCYWxhbmNlQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJANkEAQUHc2hhcmVJZAQKdG90YWxTaGFyZQkAZQIFEXNoYXJlQmFsYW5jZUFmdGVyBRJzaGFyZUJhbGFuY2VCZWZvcmUECWF4bHlJbkZlZQkAawMFCnRvdGFsU2hhcmUJAQxnZXRBeGx5SW5GZWUCBQRwb29sBQh3aXRoTG9hbgUKRkVFX1NDQUxFNgQRdXNlclNoYXJlRm9yU3Rha2UJAGUCBQp0b3RhbFNoYXJlBQlheGx5SW5GZWUDCQBnAgAABRF1c2VyU2hhcmVGb3JTdGFrZQkAAgECKGFtb3VudCBvZiBzdGFrZWQgc2hhcmV0b2tlbnMgbXVzdCBiZSA+IDAEBGludjMJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBBQhwb29sQWRkcgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQdzaGFyZUlkBRF1c2VyU2hhcmVGb3JTdGFrZQUDbmlsAwkAAAIFBGludjMFBGludjMEC3RvdGFsQW1vdW50CQEUZ2V0QXhseVRvdGFsUG9zaXRpb24BBQRwb29sBAluZXdQb3NOdW0JARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXICBQRwb29sBQR1c2VyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1RvdGFsUG9zaXRpb24JAGQCBQt0b3RhbEFtb3VudAURdXNlclNoYXJlRm9yU3Rha2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFCW5ld1Bvc051bQUNa1VzZXJQb3NpdGlvbgURdXNlclNoYXJlRm9yU3Rha2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUJbmV3UG9zTnVtBRFrVXNlclBvc2l0aW9uVHlwZQULU0ZfUE9TX1RZUEUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0FCW5ld1Bvc051bQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhtb25leUJveAUJYXhseUluRmVlCQDZBAEFB3NoYXJlSWQFA25pbAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EAWkBCXJlcGxhbmlzaAMEcG9vbAhsZXZlcmFnZQ1ib3Jyb3dBc3NldElkAwMJAGYCAGQFCGxldmVyYWdlBgkAZgIFCGxldmVyYWdlAKwCCQACAQIfTGV2ZXJhZ2UgY2FuJ3QgYmUgPDEwMCBhbmQgPjMwMAQEdHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAQMJHQwOTk2OTEwMjIwAwkAAAIFBHR5cGUFC1NGX1BPU19UWVBFCQENZ2V0U0ZQb29sRGF0YQEJAQdBZGRyZXNzAQkA2QQBBQRwb29sAwkAAAIFBHR5cGUFC1dYX1BPU19UWVBFCQENZ2V0V1hQb29sRGF0YQEJAQdBZGRyZXNzAQkA2QQBBQRwb29sCQACAQIPV3JvbmcgcG9vbCB0eXBlBANBSWQIBQwkdDA5OTY5MTAyMjACXzEEA0JJZAgFDCR0MDk5NjkxMDIyMAJfMgQEYmFsQQgFDCR0MDk5NjkxMDIyMAJfMwQEYmFsQggFDCR0MDk5NjkxMDIyMAJfNAQHc2hhcmVJZAgFDCR0MDk5NjkxMDIyMAJfNQQNJHQwMTAyMjMxMDg2MAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAIDCQECIT0CCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNBSWQJAAIBAhVXcm9uZyBwYXltZW50IGFzc2V0IEEDCQECIT0CCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBQNCSWQJAAIBAhVXcm9uZyBwYXltZW50IGFzc2V0IEIJAJYKBAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0FJZAgJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQFA0JJZAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEDCQAAAgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDQUlkCQCWCgQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNBSWQAAAUDQklkAwkAAAIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA0JJZAkAlgoEAAAFA0FJZAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0JJZAkAAgECDVdyb25nIHBheW1lbnQJAAIBAhxPbmUgb3IgdHdvIHBheW1lbnRzIGV4cGVjdGVkBARwbXRBCAUNJHQwMTAyMjMxMDg2MAJfMQQJcG10QXNzZXRBCAUNJHQwMTAyMjMxMDg2MAJfMgQEcG10QggFDSR0MDEwMjIzMTA4NjACXzMECXBtdEFzc2V0QggFDSR0MDEwMjIzMTA4NjACXzQDCQBmAgUIbGV2ZXJhZ2UAZAQHZFByaWNlQQgKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFCXBtdEFzc2V0QQkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzEEB2RQcmljZUIICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQlwbXRBc3NldEIJAMwIAgcFA25pbAUDbmlsAwkAAQIFAUACCihJbnQsIEludCkFAUAJAAIBCQCsAgIJAAMBBQFAAh8gY291bGRuJ3QgYmUgY2FzdCB0byAoSW50LCBJbnQpAl8xBAxwYXlkSW5Eb2xsYXIJAGQCCQBrAwUHZFByaWNlQQUEcG10QQkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFCXBtdEFzc2V0QQAAAAAFBERPV04JAGsDBQdkUHJpY2VCBQRwbXRCCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUJcG10QXNzZXRCAAAAAAUERE9XTgQMYm9ycm93QW1vdW50CQBrAwUMcGF5ZEluRG9sbGFyCQBlAgUIbGV2ZXJhZ2UAZABkBAdyZXF1ZXN0CQC5CQIJAMwIAgUEdHlwZQkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCBQRwb29sCQDMCAIJAKQDAQUEcG10QQkAzAgCBQlwbXRBc3NldEEJAMwIAgkApAMBBQRwbXRCCQDMCAIFCXBtdEFzc2V0QgkAzAgCCQCkAwEFBGJhbEEJAMwIAgkApAMBBQRiYWxCCQDMCAIFB3NoYXJlSWQJAMwIAgUNYm9ycm93QXNzZXRJZAkAzAgCCQCkAwEFDGJvcnJvd0Ftb3VudAUDbmlsAgEsBAxuZXdSZXF1ZXN0SWQKAAFACQD8BwQFBHRoaXMCEGNyZWF0ZU5ld1JlcXVlc3QJAMwIAgUHcmVxdWVzdAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFABQR1bml0AwkAAAIFDG5ld1JlcXVlc3RJZAUMbmV3UmVxdWVzdElkBARhcmdzCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFB3NoYXJlSWQJAMwIAgUNYm9ycm93QXNzZXRJZAkAzAgCBQxib3Jyb3dBbW91bnQJAMwIAgkApQgBBQR0aGlzCQDMCAICEXJlcGxhbmlzaEZyb21MYW5kCQDMCAIJAKQDAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQxuZXdSZXF1ZXN0SWQCGENhbid0IGNyZWF0ZSBuZXcgcmVxdWVzdAUDbmlsBANpbnYJAP0HBAkBDmdldExlbmRTcnZBZGRyAAINZmxhc2hQb3NpdGlvbgUEYXJncwUDbmlsAwkAAAIFA2ludgUDaW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEdHlwZQULU0ZfUE9TX1RZUEUJAQ9yZXBsYW5pc2hTd29wRmkKCQClCAEIBQFpBmNhbGxlcgUEcG9vbAcFBHBtdEEFCXBtdEFzc2V0QQUEcG10QgUJcG10QXNzZXRCBQRiYWxBBQRiYWxCBQdzaGFyZUlkCQELcmVwbGFuaXNoV1gICQClCAEIBQFpBmNhbGxlcgUEcG9vbAcFBHBtdEEFCXBtdEFzc2V0QQUEcG10QgUJcG10QXNzZXRCBQdzaGFyZUlkAWkBEXJlcGxhbmlzaEZyb21MYW5kAQlyZXF1ZXN0SWQEB3JlcXVlc3QJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkCQCsAgICE05vIHJlcXVlc3Qgd2l0aCBpZCAFCXJlcXVlc3RJZAIBLAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECEldyb25nIHBheW1lbnQgc2l6ZQMDCQECIT0CCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQCRAwIFB3JlcXVlc3QADAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAANCQACAQINV3JvbmcgcGF5bWVudAQEcG10QQMJAAACCQCRAwIFB3JlcXVlc3QABAkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAMICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAADBARwbXRCAwkAAAIJAJEDAgUHcmVxdWVzdAAGCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAMDCQAAAgkAkQMCBQdyZXF1ZXN0AAAFC1NGX1BPU19UWVBFBA0kdDAxMzI2NjEzNTgwCQEPcmVwbGFuaXNoU3dvcEZpCgkAkQMCBQdyZXF1ZXN0AAEJAJEDAgUHcmVxdWVzdAACBgUEcG10QQkAkQMCBQdyZXF1ZXN0AAQFBHBtdEIJAJEDAgUHcmVxdWVzdAAGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAICQCRAwIFB3JlcXVlc3QACQQHZW50cmllcwgFDSR0MDEzMjY2MTM1ODACXzEECGxwQW1vdW50CAUNJHQwMTMyNjYxMzU4MAJfMgkAlAoCCQDNCAIFB2VudHJpZXMJAQtEZWxldGVFbnRyeQEJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkBQhscEFtb3VudAMJAAACCQCRAwIFB3JlcXVlc3QAAAULU0ZfUE9TX1RZUEUEDSR0MDEzNjkxMTM5MjEJAQtyZXBsYW5pc2hXWAgJAJEDAgUHcmVxdWVzdAABCQCRAwIFB3JlcXVlc3QAAgYFBHBtdEEJAJEDAgUHcmVxdWVzdAAEBQRwbXRCCQCRAwIFB3JlcXVlc3QABgkAkQMCBQdyZXF1ZXN0AAkEB2VudHJpZXMIBQ0kdDAxMzY5MTEzOTIxAl8xBAhscEFtb3VudAgFDSR0MDEzNjkxMTM5MjECXzIJAJQKAgkAzQgCBQdlbnRyaWVzCQELRGVsZXRlRW50cnkBCQCsAgIFCXJlcXVlc3RJZAUKa1JlcXVlc3RJZAUIbHBBbW91bnQJAAIBAhJXcm9uZyByZXF1ZXN0IHR5cGUBaQEQY3JlYXRlTmV3UmVxdWVzdAEGcGFyYW1zCQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkEDG5ld1JlcXVlc3RJZAkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUMa1JlcXVlc3RJdGVyAAAAAQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkApAMBBQxuZXdSZXF1ZXN0SWQFCmtSZXF1ZXN0SWQFBnBhcmFtcwUDbmlsBQxuZXdSZXF1ZXN0SWQBaQELaW5pdE5ld1Bvb2wFBHR5cGUIcG9vbEFkZHILaW5GZWVOb0xvYW4JaW5GZWVMb2FuBmNhcEZlZQMDCQECIT0CBQR0eXBlBQtTRl9QT1NfVFlQRQkBAiE9AgUEdHlwZQULV1hfUE9TX1RZUEUHCQACAQIKV3JvbmcgdHlwZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUVa0F4bHlJbkZlZVdpdGhvdXRMb2FuBQtpbkZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUSa0F4bHlJbkZlZVdpdGhMb2FuBQlpbkZlZUxvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFC2tBeGx5Q2FwRmVlBQZjYXBGZWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQVrUG9vbAUIcG9vbEFkZHIFBHR5cGUFA25pbAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXnok5L1", "height": 2512540, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7W9rSazdqpfwrYAQFrUZxSrVEtRZUeS1At15QEx6x1wd Next: EVnEMdTbMB5sYEnYikVqHJ4NbvS6VVdEfMor82eUGtza Diff:
OldNewDifferences
383383 then {
384384 let args = [toString(i.caller), shareId, borrowAssetId, borrowAmount, toString(this), "replanishFromLand", toString(valueOrErrorMessage(newRequestId, "Can't create new request"))]
385385 let inv = reentrantInvoke(getLendSrvAddr(), "flashPosition", args, nil)
386- nil
386+ if ((inv == inv))
387+ then nil
388+ else throw("Strict value is not equal to itself.")
387389 }
388390 else throw("Strict value is not equal to itself.")
389391 }
412414 else parseIntValue(request[3])
413415 if ((request[0] == SF_POS_TYPE))
414416 then {
415- let $t01326313577 = replanishSwopFi(request[1], request[2], true, pmtA, request[4], pmtB, request[6], parseIntValue(request[7]), parseIntValue(request[8]), request[9])
416- let entries = $t01326313577._1
417- let lpAmount = $t01326313577._2
417+ let $t01326613580 = replanishSwopFi(request[1], request[2], true, pmtA, request[4], pmtB, request[6], parseIntValue(request[7]), parseIntValue(request[8]), request[9])
418+ let entries = $t01326613580._1
419+ let lpAmount = $t01326613580._2
418420 $Tuple2((entries :+ DeleteEntry((requestId + kRequestId))), lpAmount)
419421 }
420422 else if ((request[0] == SF_POS_TYPE))
421423 then {
422- let $t01368813918 = replanishWX(request[1], request[2], true, pmtA, request[4], pmtB, request[6], request[9])
423- let entries = $t01368813918._1
424- let lpAmount = $t01368813918._2
424+ let $t01369113921 = replanishWX(request[1], request[2], true, pmtA, request[4], pmtB, request[6], request[9])
425+ let entries = $t01369113921._1
426+ let lpAmount = $t01369113921._2
425427 $Tuple2((entries :+ DeleteEntry((requestId + kRequestId))), lpAmount)
426428 }
427429 else throw("Wrong request type")
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"
2121
2222 let kSFFarmingStaked = "_share_tokens_locked"
2323
2424 let kUserPosition = "_user_position"
2525
2626 let kUserPositionType = "_user_position_type"
2727
2828 let kUserPositionNum = "_user_position_number"
2929
3030 let kTotalPosition = "_total_position"
3131
3232 let kAxlyInFeeWithoutLoan = "_axly_fee_without_loan"
3333
3434 let kAxlyInFeeWithLoan = "_axly_fee_with_loan"
3535
3636 let kAxlyCapFee = "_axly_fee_cap"
3737
3838 let kRequestId = "_request_id"
3939
4040 let kRequestIter = "requests_iter"
4141
4242 let kPool = "pool_"
4343
4444 let kMoneyBox = "axly_money_box"
4545
4646 let kSFFarmingAddr = "swopfi_farming_addr"
4747
4848 let kLendService = "lend_service_addr"
4949
5050 let kPriceOracle = "price_oracle"
5151
5252 let moneyBox = Address(fromBase58String(valueOrErrorMessage(getString(this, kMoneyBox), "No axly moneyBox address")))
5353
5454 let priceOracleAddr = Address(fromBase58String(valueOrErrorMessage(getString(this, kPriceOracle), "No price oracle address")))
5555
5656 func isSelfCall (i) = if ((i.caller == this))
5757 then unit
5858 else throw("Only contract itself can call this function")
5959
6060
6161 func accountBalance (assetId) = match assetId {
6262 case id: ByteVector =>
6363 assetBalance(this, id)
6464 case waves: Unit =>
6565 wavesBalance(this).available
6666 case _ =>
6767 throw("Match error")
6868 }
6969
7070
7171 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"))
7272
7373
7474 func getWXPoolData (poolAddr) = {
7575 let cfg = {
7676 let @ = invoke(poolAddr, "getPoolConfigWrapperREADONLY", nil, nil)
7777 if ($isInstanceOf(@, "List[Any]"))
7878 then @
7979 else throw(($getType(@) + " couldn't be cast to List[Any]"))
8080 }
8181 if ((cfg == cfg))
8282 then $Tuple5(valueOrErrorMessage({
8383 let @ = cfg[4]
8484 if ($isInstanceOf(@, "String"))
8585 then @
8686 else unit
8787 }, "Can't get pool A asset id"), valueOrErrorMessage({
8888 let @ = cfg[5]
8989 if ($isInstanceOf(@, "String"))
9090 then @
9191 else unit
9292 }, "Can't get pool B asset id"), 0, 0, valueOrErrorMessage({
9393 let @ = cfg[3]
9494 if ($isInstanceOf(@, "String"))
9595 then @
9696 else unit
9797 }, "Can't get pool LP asset id"))
9898 else throw("Strict value is not equal to itself.")
9999 }
100100
101101
102102 func getAxlyTotalPosition (pool) = valueOrElse(getInteger(this, (pool + kTotalPosition)), 0)
103103
104104
105105 func getNewUserPositionNumber (pool,user) = (valueOrElse(getInteger(this, (((pool + "_") + user) + kUserPositionNum)), 0) + 1)
106106
107107
108108 func getAxlyInFee (pool,withLoan) = if (withLoan)
109109 then getIntegerValue(this, (pool + kAxlyInFeeWithLoan))
110110 else getIntegerValue(this, (pool + kAxlyInFeeWithoutLoan))
111111
112112
113113 func getSFFarmingAddr () = Address(fromBase58String(valueOrErrorMessage(getString(this, kSFFarmingAddr), "Can't get swopfi farming addr")))
114114
115115
116116 func getWXFarmingAddr (poolAddr) = {
117117 let fContract = Address(fromBase58String(valueOrElse(getString(poolAddr, "%s__factoryContract"), "Can't get WX factory contract addr")))
118118 let factroyCfg = split(valueOrElse(getString(fContract, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
119119 Address(fromBase58String(factroyCfg[1]))
120120 }
121121
122122
123123 func getLendSrvAddr () = Address(fromBase58String(valueOrErrorMessage(getString(this, kLendService), "Can't get lend service addr")))
124124
125125
126126 func assetIdToStr (assetId) = match assetId {
127127 case id: ByteVector =>
128128 toBase58String(id)
129129 case waves: Unit =>
130130 "WAVES"
131131 case _ =>
132132 throw("Match error")
133133 }
134134
135135
136136 func assetIdFromStr (assetId) = if ((assetId == "WAVES"))
137137 then unit
138138 else fromBase58String(assetId)
139139
140140
141141 func getAssetDecimals (assetId) = if ((assetId == "WAVES"))
142142 then 8
143143 else match assetInfo(fromBase58String(assetId)) {
144144 case asset: Asset =>
145145 asset.decimals
146146 case _ =>
147147 throw("Can't find asset")
148148 }
149149
150150
151151 func replanishSwopFi (user,pool,withLoan,pmtA,pmtAssetA,pmtB,pmtAssetB,balA,balB,shareId) = {
152152 let shareBalanceBefore = accountBalance(fromBase58String(shareId))
153153 if ((shareBalanceBefore == shareBalanceBefore))
154154 then {
155155 let poolAddr = Address(fromBase58String(pool))
156156 let ratioA = fraction(SCALE8, pmtA, balA)
157157 let ratioB = fraction(SCALE8, pmtB, balB)
158158 let $t050435335 = if ((ratioB > ratioA))
159159 then {
160160 let pmt = fraction(balB, ratioA, SCALE8, CEILING)
161161 $Tuple4(pmtA, pmt, (pmtB - pmt), pmtAssetB)
162162 }
163163 else {
164164 let pmt = fraction(balA, ratioB, SCALE8, CEILING)
165165 $Tuple4(pmt, pmtB, (pmtA - pmt), pmtAssetA)
166166 }
167167 let pmtAmountA = $t050435335._1
168168 let pmtAmountB = $t050435335._2
169169 let change = $t050435335._3
170170 let changeAssetId = $t050435335._4
171171 let inv1 = if (if ((pmtAmountA > 0))
172172 then (pmtAmountB > 0)
173173 else false)
174174 then {
175175 let payments = [AttachedPayment(assetIdFromStr(pmtAssetA), pmtAmountA), AttachedPayment(assetIdFromStr(pmtAssetB), pmtAmountB)]
176176 invoke(poolAddr, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], payments)
177177 }
178178 else 0
179179 if ((inv1 == inv1))
180180 then {
181181 let inv2 = if ((change > 0))
182182 then {
183183 let payments = [AttachedPayment(assetIdFromStr(changeAssetId), change)]
184184 let vars = ["0", "false", "0"]
185185 invoke(poolAddr, "replenishWithOneTokenV2", [false, 0], payments)
186186 }
187187 else 0
188188 if ((inv2 == inv2))
189189 then {
190190 let shareBalanceAfter = accountBalance(fromBase58String(shareId))
191191 let totalShare = (shareBalanceAfter - shareBalanceBefore)
192192 let axlyInFee = fraction(totalShare, getAxlyInFee(pool, withLoan), FEE_SCALE6)
193193 let userShareForStake = (totalShare - axlyInFee)
194194 if ((0 >= userShareForStake))
195195 then throw("amount of staked sharetokens must be > 0")
196196 else {
197197 let inv3 = invoke(getSFFarmingAddr(), "lockShareTokens", [pool, 0], [AttachedPayment(fromBase58String(shareId), userShareForStake)])
198198 if ((inv3 == inv3))
199199 then {
200200 let totalAmount = getAxlyTotalPosition(pool)
201201 let newPosNum = getNewUserPositionNumber(pool, user)
202202 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))]
203203 $Tuple2(baseEntry, userShareForStake)
204204 }
205205 else throw("Strict value is not equal to itself.")
206206 }
207207 }
208208 else throw("Strict value is not equal to itself.")
209209 }
210210 else throw("Strict value is not equal to itself.")
211211 }
212212 else throw("Strict value is not equal to itself.")
213213 }
214214
215215
216216 func replanishWX (user,pool,withLoan,pmtA,pmtAssetA,pmtB,pmtAssetB,shareId) = {
217217 let poolAddr = Address(fromBase58String(pool))
218218 let $t072978116 = if (if ((pmtA > 0))
219219 then (pmtB > 0)
220220 else false)
221221 then {
222222 let evalPutInA = {
223223 let @ = invoke(poolAddr, "evaluatePutByAmountAssetREADONLY", [pmtA], nil)
224224 if ($isInstanceOf(@, "List[Any]"))
225225 then @
226226 else throw(($getType(@) + " couldn't be cast to List[Any]"))
227227 }
228228 if ((evalPutInA == evalPutInA))
229229 then {
230230 let evalPutInB = {
231231 let @ = invoke(poolAddr, "evaluatePutByPriceAssetREADONLY", [pmtB], nil)
232232 if ($isInstanceOf(@, "List[Any]"))
233233 then @
234234 else throw(($getType(@) + " couldn't be cast to List[Any]"))
235235 }
236236 if ((evalPutInB == evalPutInB))
237237 then {
238238 let lpInA = {
239239 let @ = evalPutInA[0]
240240 if ($isInstanceOf(@, "Int"))
241241 then @
242242 else throw(($getType(@) + " couldn't be cast to Int"))
243243 }
244244 let lpInB = {
245245 let @ = evalPutInB[0]
246246 if ($isInstanceOf(@, "Int"))
247247 then @
248248 else throw(($getType(@) + " couldn't be cast to Int"))
249249 }
250250 if ((lpInA > lpInB))
251251 then {
252252 let pmtInB = {
253253 let @ = evalPutInB[7]
254254 if ($isInstanceOf(@, "Int"))
255255 then @
256256 else throw(($getType(@) + " couldn't be cast to Int"))
257257 }
258258 $Tuple4(pmtA, pmtInB, (pmtB - pmtInB), pmtAssetB)
259259 }
260260 else {
261261 let pmtInA = {
262262 let @ = evalPutInB[6]
263263 if ($isInstanceOf(@, "Int"))
264264 then @
265265 else throw(($getType(@) + " couldn't be cast to Int"))
266266 }
267267 $Tuple4(pmtInA, pmtB, (pmtA - pmtInA), pmtAssetA)
268268 }
269269 }
270270 else throw("Strict value is not equal to itself.")
271271 }
272272 else throw("Strict value is not equal to itself.")
273273 }
274274 else if ((pmtA > 0))
275275 then $Tuple4(pmtA, pmtB, pmtA, pmtAssetA)
276276 else if ((pmtB > 0))
277277 then $Tuple4(pmtA, pmtB, pmtB, pmtAssetB)
278278 else throw("pmts must be > 0")
279279 let pmtAmountA = $t072978116._1
280280 let pmtAmountB = $t072978116._2
281281 let change = $t072978116._3
282282 let changeAssetId = $t072978116._4
283283 let shareBalanceBefore = accountBalance(fromBase58String(shareId))
284284 if ((shareBalanceBefore == shareBalanceBefore))
285285 then {
286286 let inv1 = if (if ((pmtAmountA > 0))
287287 then (pmtAmountB > 0)
288288 else false)
289289 then {
290290 let payments = [AttachedPayment(assetIdFromStr(pmtAssetA), pmtAmountA), AttachedPayment(assetIdFromStr(pmtAssetB), pmtAmountB)]
291291 invoke(poolAddr, "put", [1, false], payments)
292292 }
293293 else 0
294294 if ((inv1 == inv1))
295295 then {
296296 let inv2 = if ((change > 0))
297297 then {
298298 let payments = [AttachedPayment(assetIdFromStr(changeAssetId), change)]
299299 invoke(poolAddr, "putOneTkn", [0, false], payments)
300300 }
301301 else 0
302302 if ((inv2 == inv2))
303303 then {
304304 let shareBalanceAfter = accountBalance(fromBase58String(shareId))
305305 let totalShare = (shareBalanceAfter - shareBalanceBefore)
306306 let axlyInFee = fraction(totalShare, getAxlyInFee(pool, withLoan), FEE_SCALE6)
307307 let userShareForStake = (totalShare - axlyInFee)
308308 if ((0 >= userShareForStake))
309309 then throw("amount of staked sharetokens must be > 0")
310310 else {
311311 let inv3 = invoke(getWXFarmingAddr(poolAddr), "stake", nil, [AttachedPayment(fromBase58String(shareId), userShareForStake)])
312312 if ((inv3 == inv3))
313313 then {
314314 let totalAmount = getAxlyTotalPosition(pool)
315315 let newPosNum = getNewUserPositionNumber(pool, user)
316316 $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)
317317 }
318318 else throw("Strict value is not equal to itself.")
319319 }
320320 }
321321 else throw("Strict value is not equal to itself.")
322322 }
323323 else throw("Strict value is not equal to itself.")
324324 }
325325 else throw("Strict value is not equal to itself.")
326326 }
327327
328328
329329 @Callable(i)
330330 func replanish (pool,leverage,borrowAssetId) = if (if ((100 > leverage))
331331 then true
332332 else (leverage > 300))
333333 then throw("Leverage can't be <100 and >300")
334334 else {
335335 let type = valueOrErrorMessage(getString(this, (kPool + pool)), "Pool is not inited")
336336 let $t0996910220 = if ((type == SF_POS_TYPE))
337337 then getSFPoolData(Address(fromBase58String(pool)))
338338 else if ((type == WX_POS_TYPE))
339339 then getWXPoolData(Address(fromBase58String(pool)))
340340 else throw("Wrong pool type")
341341 let AId = $t0996910220._1
342342 let BId = $t0996910220._2
343343 let balA = $t0996910220._3
344344 let balB = $t0996910220._4
345345 let shareId = $t0996910220._5
346346 let $t01022310860 = if ((size(i.payments) == 2))
347347 then if ((assetIdToStr(i.payments[0].assetId) != AId))
348348 then throw("Wrong payment asset A")
349349 else if ((assetIdToStr(i.payments[1].assetId) != BId))
350350 then throw("Wrong payment asset B")
351351 else $Tuple4(i.payments[0].amount, AId, i.payments[1].amount, BId)
352352 else if ((size(i.payments) == 1))
353353 then if ((assetIdToStr(i.payments[0].assetId) == AId))
354354 then $Tuple4(i.payments[0].amount, AId, 0, BId)
355355 else if ((assetIdToStr(i.payments[0].assetId) == BId))
356356 then $Tuple4(0, AId, i.payments[0].amount, BId)
357357 else throw("Wrong payment")
358358 else throw("One or two payments expected")
359359 let pmtA = $t01022310860._1
360360 let pmtAssetA = $t01022310860._2
361361 let pmtB = $t01022310860._3
362362 let pmtAssetB = $t01022310860._4
363363 if ((leverage > 100))
364364 then {
365365 let dPriceA = ( let @ = invoke(priceOracleAddr, "getTWAP60", [pmtAssetA, false], nil)
366366 if ($isInstanceOf(@, "(Int, Int)"))
367367 then @
368368 else throw(($getType(@) + " couldn't be cast to (Int, Int)")))._1
369369 let dPriceB = ( let @ = invoke(priceOracleAddr, "getTWAP60", [pmtAssetB, false], nil)
370370 if ($isInstanceOf(@, "(Int, Int)"))
371371 then @
372372 else throw(($getType(@) + " couldn't be cast to (Int, Int)")))._1
373373 let paydInDollar = (fraction(dPriceA, pmtA, pow(10, 0, getAssetDecimals(pmtAssetA), 0, 0, DOWN)) + fraction(dPriceB, pmtB, pow(10, 0, getAssetDecimals(pmtAssetB), 0, 0, DOWN)))
374374 let borrowAmount = fraction(paydInDollar, (leverage - 100), 100)
375375 let request = makeString([type, toString(i.caller), pool, toString(pmtA), pmtAssetA, toString(pmtB), pmtAssetB, toString(balA), toString(balB), shareId, borrowAssetId, toString(borrowAmount)], ",")
376376 let newRequestId = {
377377 let @ = invoke(this, "createNewRequest", [request], nil)
378378 if ($isInstanceOf(@, "Int"))
379379 then @
380380 else unit
381381 }
382382 if ((newRequestId == newRequestId))
383383 then {
384384 let args = [toString(i.caller), shareId, borrowAssetId, borrowAmount, toString(this), "replanishFromLand", toString(valueOrErrorMessage(newRequestId, "Can't create new request"))]
385385 let inv = reentrantInvoke(getLendSrvAddr(), "flashPosition", args, nil)
386- nil
386+ if ((inv == inv))
387+ then nil
388+ else throw("Strict value is not equal to itself.")
387389 }
388390 else throw("Strict value is not equal to itself.")
389391 }
390392 else if ((type == SF_POS_TYPE))
391393 then replanishSwopFi(toString(i.caller), pool, false, pmtA, pmtAssetA, pmtB, pmtAssetB, balA, balB, shareId)
392394 else replanishWX(toString(i.caller), pool, false, pmtA, pmtAssetA, pmtB, pmtAssetB, shareId)
393395 }
394396
395397
396398
397399 @Callable(i)
398400 func replanishFromLand (requestId) = {
399401 let request = split(valueOrErrorMessage(getString(this, (requestId + kRequestId)), ("No request with id " + requestId)), ",")
400402 if ((size(i.payments) != 1))
401403 then throw("Wrong payment size")
402404 else if (if ((assetIdToStr(i.payments[0].assetId) != request[12]))
403405 then true
404406 else (i.payments[0].amount != parseIntValue(request[13])))
405407 then throw("Wrong payment")
406408 else {
407409 let pmtA = if ((request[4] == assetIdToStr(i.payments[0].assetId)))
408410 then (parseIntValue(request[3]) + i.payments[0].amount)
409411 else parseIntValue(request[3])
410412 let pmtB = if ((request[6] == assetIdToStr(i.payments[0].assetId)))
411413 then (parseIntValue(request[5]) + i.payments[0].amount)
412414 else parseIntValue(request[3])
413415 if ((request[0] == SF_POS_TYPE))
414416 then {
415- let $t01326313577 = replanishSwopFi(request[1], request[2], true, pmtA, request[4], pmtB, request[6], parseIntValue(request[7]), parseIntValue(request[8]), request[9])
416- let entries = $t01326313577._1
417- let lpAmount = $t01326313577._2
417+ let $t01326613580 = replanishSwopFi(request[1], request[2], true, pmtA, request[4], pmtB, request[6], parseIntValue(request[7]), parseIntValue(request[8]), request[9])
418+ let entries = $t01326613580._1
419+ let lpAmount = $t01326613580._2
418420 $Tuple2((entries :+ DeleteEntry((requestId + kRequestId))), lpAmount)
419421 }
420422 else if ((request[0] == SF_POS_TYPE))
421423 then {
422- let $t01368813918 = replanishWX(request[1], request[2], true, pmtA, request[4], pmtB, request[6], request[9])
423- let entries = $t01368813918._1
424- let lpAmount = $t01368813918._2
424+ let $t01369113921 = replanishWX(request[1], request[2], true, pmtA, request[4], pmtB, request[6], request[9])
425+ let entries = $t01369113921._1
426+ let lpAmount = $t01369113921._2
425427 $Tuple2((entries :+ DeleteEntry((requestId + kRequestId))), lpAmount)
426428 }
427429 else throw("Wrong request type")
428430 }
429431 }
430432
431433
432434
433435 @Callable(i)
434436 func createNewRequest (params) = valueOrElse(isSelfCall(i), {
435437 let newRequestId = (valueOrElse(getInteger(this, kRequestIter), 0) + 1)
436438 $Tuple2([StringEntry((toString(newRequestId) + kRequestId), params)], newRequestId)
437439 })
438440
439441
440442
441443 @Callable(i)
442444 func initNewPool (type,poolAddr,inFeeNoLoan,inFeeLoan,capFee) = if (if ((type != SF_POS_TYPE))
443445 then (type != WX_POS_TYPE)
444446 else false)
445447 then throw("Wrong type")
446448 else [IntegerEntry((poolAddr + kAxlyInFeeWithoutLoan), inFeeNoLoan), IntegerEntry((poolAddr + kAxlyInFeeWithLoan), inFeeLoan), IntegerEntry((poolAddr + kAxlyCapFee), capFee), StringEntry((kPool + poolAddr), type)]
447449
448450
449451 @Verifier(tx)
450452 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
451453

github/deemru/w8io/169f3d6 
61.24 ms