tx · HjkeEFcA6VXRaiEKKwb8c9hY7wWSAe6Rpq3R2B6pYvMk

3Muytcv8u3SKC8Nc76tUXTfq26nD3Mu5Vax:  -0.03700000 Waves

2023.01.09 11:38 [2397174] smart account 3Muytcv8u3SKC8Nc76tUXTfq26nD3Mu5Vax > SELF 0.00000000 Waves

{ "type": 13, "id": "HjkeEFcA6VXRaiEKKwb8c9hY7wWSAe6Rpq3R2B6pYvMk", "fee": 3700000, "feeAssetId": null, "timestamp": 1673253551866, "version": 2, "chainId": 84, "sender": "3Muytcv8u3SKC8Nc76tUXTfq26nD3Mu5Vax", "senderPublicKey": "2nfPSXMHiTFAPhqiE41GL52Ld7jy6D1wjZdhUmgfLNzk", "proofs": [ "3nf6aNTicAp2Dw5MRhkjUA6w1L8NQCNQWvF9kYqHom5i1RT5o5W9VcwAvqkYr7mZnt2h8VzQHUSfo85S2DnvPP19" ], "script": "base64:BgIiCAISBAoCCAgSAwoBCBIFCgMIAQgSBQoDCAEIEgUKAwgIAR8AEmtfYXNzZXRfY29sbGF0ZXJhbAISa19hc3NldF9jb2xsYXRlcmFsACBrX3RyYWRlcl9tYXJrZXRfYXNzZXRfY29sbGF0ZXJhbAIga190cmFkZXJfbWFya2V0X2Fzc2V0X2NvbGxhdGVyYWwAEWtfd2hpdGVsaXN0X2Fzc2V0AhFrX3doaXRlbGlzdF9hc3NldAANa19pbml0aWFsaXplZAINa19pbml0aWFsaXplZAAUa19jb29yZGluYXRvckFkZHJlc3MCFGtfY29vcmRpbmF0b3JBZGRyZXNzABJrX2dvdmVybmFuY2VfYXNzZXQCC2tfZ292X2Fzc2V0AA1rX3F1b3RlX2Fzc2V0Ag1rX3F1b3RlX2Fzc2V0ABJrX2FkbWluX3B1YmxpY19rZXkCEmtfYWRtaW5fcHVibGljX2tleQARa19tYW5hZ2VyX2FkZHJlc3MCEWtfbWFuYWdlcl9hZGRyZXNzAAVrX2FtbQIFa19hbW0AEmtfZXhjaGFuZ2VfYWRkcmVzcwISa19leGNoYW5nZV9hZGRyZXNzAA9rX3ZhdWx0X2FkZHJlc3MCD2tfdmF1bHRfYWRkcmVzcwEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDmFkbWluUHVibGljS2V5AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX2FkbWluX3B1YmxpY19rZXkBD2dvdmVybmFuY2VBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUSa19nb3Zlcm5hbmNlX2Fzc2V0AQpxdW90ZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0AQ5tYW5hZ2VyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRFrX21hbmFnZXJfYWRkcmVzcwIPTWFuYWdlciBub3Qgc2V0AQtpc1doaXRlbGlzdAEIX2FkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBC2Nvb3JkaW5hdG9yAAkBDnRvQ29tcG9zaXRlS2V5AgUFa19hbW0FCF9hZGRyZXNzBwEQaXNXaGl0ZWxpc3RBc3NldAEIX2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgURa193aGl0ZWxpc3RfYXNzZXQFCF9hc3NldElkBwEMdmF1bHRBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfdmF1bHRfYWRkcmVzcwINVmF1bHQgbm90IHNldAELc3dhcEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFEmtfZXhjaGFuZ2VfYWRkcmVzcwIPTm8gc3dhcCBhZGRyZXNzAhRJbnZhbGlkIHN3YXAgYWRkcmVzcwAMREVDSU1BTF9VTklUCQBoAgABCQBoAgkAaAIJAGgCCQBoAgkAaAIJAGgCCQBoAgAKAAoACgAKAAoACgAKAAoACERVUkFUSU9OCQBoAgkAaAIAPAA8ABgACk5PX0FERFJFU1MCAAAJTk9fU1RBS0VSAAABEHVzZG5Gcm9tRGVjaW1hbHMBB19hbW91bnQJAGkCBQdfYW1vdW50AGQBDnVzZG5Ub0RlY2ltYWxzAQdfYW1vdW50CQBoAgUHX2Ftb3VudABkAQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBHmdldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldEtleQMEX2FtbQhfYXNzZXRJZAdfdHJhZGVyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBSBrX3RyYWRlcl9tYXJrZXRfYXNzZXRfY29sbGF0ZXJhbAIBXwUEX2FtbQIBXwUIX2Fzc2V0SWQCAV8FB190cmFkZXIBG2dldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldAMEX2FtbQhfYXNzZXRJZAdfdHJhZGVyBANrZXkJAR5nZXRCb3Jyb3dlZEJ5VHJhZGVySW5NYXJrZXRLZXkDBQRfYW1tBQhfYXNzZXRJZAUHX3RyYWRlcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAUBaQEKaW5pdGlhbGl6ZQIMX2Nvb3JkaW5hdG9yCl93aGl0ZWxpc3QDCQELaW5pdGlhbGl6ZWQACQACAQITQWxyZWFkeSBpbml0aWFsaXplZAQPaW5pdGlhbEFzc2V0SWRzCQC1CQIFCl93aGl0ZWxpc3QCASwKAQtkb1doaXRlbGlzdAIEX2FjYwhfYXNzZXRJZAkAzQgCBQRfYWNjCQEMQm9vbGVhbkVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgURa193aGl0ZWxpc3RfYXNzZXQFCF9hc3NldElkBgkAzggCCgACJGwFD2luaXRpYWxBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELZG9XaGl0ZWxpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwUMX2Nvb3JkaW5hdG9yCQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rX2luaXRpYWxpemVkBgUDbmlsAWkBBmJvcnJvdwEHX3RyYWRlcgQGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQHYXNzZXRJZAkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAIQSW52YWxpZCBhc3NldCBpZAQDYW1tCQClCAEIBQFpBmNhbGxlcgMDCQEBIQEJAQtpc1doaXRlbGlzdAEFA2FtbQYJAQEhAQkBEGlzV2hpdGVsaXN0QXNzZXQBBQdhc3NldElkCQACAQIZSW52YWxpZCBib3Jyb3cgcGFyYW1ldGVycwQRd2l0aGRyYXdJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACCmFkZExvY2tlZFYJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBRF3aXRoZHJhd0luc3VyYW5jZQURd2l0aGRyYXdJbnN1cmFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5nZXRCb3Jyb3dlZEJ5VHJhZGVySW5NYXJrZXRLZXkDBQNhbW0FB2Fzc2V0SWQFB190cmFkZXIJAGQCCQEbZ2V0Qm9ycm93ZWRCeVRyYWRlckluTWFya2V0AwUDYW1tBQdhc3NldElkBQdfdHJhZGVyBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVyZXBheQMHX3RyYWRlcgdfYW1vdW50CF9hc3NldElkBANhbW0JAKUIAQgFAWkGY2FsbGVyAwMJAQEhAQkBC2lzV2hpdGVsaXN0AQUDYW1tBgkBASEBCQEQaXNXaGl0ZWxpc3RBc3NldAEFCF9hc3NldElkCQACAQIYSW52YWxpZCByZXBheSBwYXJhbWV0ZXJzBBF3aXRoZHJhd0luc3VyYW5jZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIPd2l0aGRyYXdMb2NrZWRWCQDMCAIFB19hbW91bnQFA25pbAUDbmlsAwkAAAIFEXdpdGhkcmF3SW5zdXJhbmNlBRF3aXRoZHJhd0luc3VyYW5jZQQHbmV3RGVidAkAZQIJARtnZXRCb3Jyb3dlZEJ5VHJhZGVySW5NYXJrZXQDBQNhbW0FCF9hc3NldElkBQdfdHJhZGVyBQdfYW1vdW50CQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQdfYW1vdW50CQDZBAEFCF9hc3NldElkBQNuaWwDCQBmAgUHbmV3RGVidAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEeZ2V0Qm9ycm93ZWRCeVRyYWRlckluTWFya2V0S2V5AwUDYW1tBQhfYXNzZXRJZAUHX3RyYWRlcgUHbmV3RGVidAUDbmlsCQDMCAIJAQtEZWxldGVFbnRyeQEJAR5nZXRCb3Jyb3dlZEJ5VHJhZGVySW5NYXJrZXRLZXkDBQNhbW0FCF9hc3NldElkBQdfdHJhZGVyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEYcmVhbGl6ZVBhcnRpYWxseUFuZENsb3NlAwdfdHJhZGVyB19hbW91bnQIX2Fzc2V0SWQEA2FtbQkApQgBCAUBaQZjYWxsZXIEBGRlYnQJARtnZXRCb3Jyb3dlZEJ5VHJhZGVySW5NYXJrZXQDBQNhbW0FCF9hc3NldElkBQdfdHJhZGVyBAZ0b1NlbGwJAGUCBQRkZWJ0BQdfYW1vdW50BAtzYW5pdHlDaGVjawMJAGcCAAAFBnRvU2VsbAkAAgECEVVzZSByZXBheSBpbnN0ZWFkBQNuaWwDCQAAAgULc2FuaXR5Q2hlY2sFC3Nhbml0eUNoZWNrAwMJAQEhAQkBC2lzV2hpdGVsaXN0AQUDYW1tBgkBASEBCQEQaXNXaGl0ZWxpc3RBc3NldAEFCF9hc3NldElkCQACAQIrSW52YWxpZCByZWFsaXplUGFydGlhbGx5QW5kQ2xvc2UgcGFyYW1ldGVycwQMYW1vdW50QmVmb3JlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAAACBQxhbW91bnRCZWZvcmUFDGFtb3VudEJlZm9yZQQGZG9Td2FwCQD8BwQJAQtzd2FwQWRkcmVzcwACBHN3YXAJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUIX2Fzc2V0SWQFBnRvU2VsbAUDbmlsAwkAAAIFBmRvU3dhcAUGZG9Td2FwBAthbW91bnRBZnRlcgkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgULYW1vdW50QWZ0ZXIFC2Ftb3VudEFmdGVyBA1zb2xkRm9yQW1vdW50CQBlAgULYW1vdW50QWZ0ZXIFDGFtb3VudEJlZm9yZQMJAAACBQ1zb2xkRm9yQW1vdW50BQ1zb2xkRm9yQW1vdW50BBVkZXBvc2l0U29sZENvbGxhdGVyYWwJAPwHBAkBDHZhdWx0QWRkcmVzcwACCWFkZExvY2tlZAkAzAgCBgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFDXNvbGRGb3JBbW91bnQFA25pbAMJAAACBRVkZXBvc2l0U29sZENvbGxhdGVyYWwFFWRlcG9zaXRTb2xkQ29sbGF0ZXJhbAQPd2l0aGRyYXdMb2NrZWRWCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg93aXRoZHJhd0xvY2tlZFYJAMwIAgUEZGVidAUDbmlsBQNuaWwDCQAAAgUPd2l0aGRyYXdMb2NrZWRWBQ93aXRoZHJhd0xvY2tlZFYECXRvR2V0QmFjawkAZQIFBGRlYnQFBnRvU2VsbAMJAGYCBQl0b0dldEJhY2sAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQRkZWJ0BQZ0b1NlbGwJANkEAQUIX2Fzc2V0SWQFA25pbAkAzggCBQNuaWwJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBHmdldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldEtleQMFA2FtbQUIX2Fzc2V0SWQFB190cmFkZXIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARByZWFsaXplUGFydGlhbGx5AwdfdHJhZGVyCF9hc3NldElkB190b1NlbGwEA2FtbQkApQgBCAUBaQZjYWxsZXIEBGRlYnQJARtnZXRCb3Jyb3dlZEJ5VHJhZGVySW5NYXJrZXQDBQNhbW0FCF9hc3NldElkBQdfdHJhZGVyBAtzYW5pdHlDaGVjawMDCQBnAgAABQdfdG9TZWxsBgkAZgIFB190b1NlbGwFBGRlYnQJAAIBAiNJbnZhbGlkIHJlYWxpemVQYXJ0aWFsbHkgcGFyYW1ldGVycwUDbmlsAwkAAAIFC3Nhbml0eUNoZWNrBQtzYW5pdHlDaGVjawMDCQEBIQEJAQtpc1doaXRlbGlzdAEFA2FtbQYJAQEhAQkBEGlzV2hpdGVsaXN0QXNzZXQBBQhfYXNzZXRJZAkAAgECK0ludmFsaWQgcmVhbGl6ZVBhcnRpYWxseUFuZENsb3NlIHBhcmFtZXRlcnMEDGFtb3VudEJlZm9yZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgUMYW1vdW50QmVmb3JlBQxhbW91bnRCZWZvcmUEBmRvU3dhcAkA/AcECQELc3dhcEFkZHJlc3MAAgRzd2FwCQDMCAIJANgEAQkBCnF1b3RlQXNzZXQACQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEFCF9hc3NldElkBQdfdG9TZWxsBQNuaWwDCQAAAgUGZG9Td2FwBQZkb1N3YXAEC2Ftb3VudEFmdGVyCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAAACBQthbW91bnRBZnRlcgULYW1vdW50QWZ0ZXIEDXNvbGRGb3JBbW91bnQJAGUCBQthbW91bnRBZnRlcgUMYW1vdW50QmVmb3JlAwkAAAIFDXNvbGRGb3JBbW91bnQFDXNvbGRGb3JBbW91bnQECWFkZExvY2tlZAkA/AcECQEMdmF1bHRBZGRyZXNzAAIJYWRkTG9ja2VkCQDMCAIGBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUNc29sZEZvckFtb3VudAUDbmlsAwkAAAIFCWFkZExvY2tlZAUJYWRkTG9ja2VkBA93aXRoZHJhd0xvY2tlZFYJAPwHBAkBDHZhdWx0QWRkcmVzcwACD3dpdGhkcmF3TG9ja2VkVgkAzAgCBQ1zb2xkRm9yQW1vdW50BQNuaWwFA25pbAMJAAACBQ93aXRoZHJhd0xvY2tlZFYFD3dpdGhkcmF3TG9ja2VkVgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmdldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldEtleQMFA2FtbQUIX2Fzc2V0SWQFB190cmFkZXIJAGUCCQEbZ2V0Qm9ycm93ZWRCeVRyYWRlckluTWFya2V0AwUDYW1tBQhfYXNzZXRJZAUHX3RyYWRlcgUHX3RvU2VsbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkBDmFkbWluUHVibGljS2V5AP7eLfY=", "height": 2397174, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: cYtdDP9cP222n2bY9fyS51hHKHzSL1VSkoUzdSb4FyH Next: none Diff:
OldNewDifferences
2121
2222 let k_amm = "k_amm"
2323
24-let k_insurance_address = "k_insurance_address"
24+let k_exchange_address = "k_exchange_address"
2525
26-let k_exchange_address = "k_exchange_address"
26+let k_vault_address = "k_vault_address"
2727
2828 func toCompositeKey (_key,_address) = ((_key + "_") + _address)
2929
4949 func isWhitelistAsset (_assetId) = valueOrElse(getBoolean(this, toCompositeKey(k_whitelist_asset, _assetId)), false)
5050
5151
52-func insuranceAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_insurance_address)), "Insurance not set")
52+func vaultAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_vault_address)), "Vault not set")
5353
5454
5555 func swapAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_exchange_address), "No swap address")), "Invalid swap address")
116116 else !(isWhitelistAsset(assetId)))
117117 then throw("Invalid borrow parameters")
118118 else {
119- let withdrawInsurance = invoke(insuranceAddress(), "withdraw", [amount], nil)
119+ let withdrawInsurance = invoke(vaultAddress(), "addLockedV", [amount], nil)
120120 if ((withdrawInsurance == withdrawInsurance))
121- then [ScriptTransfer(i.caller, amount, quoteAsset()), IntegerEntry(getBorrowedByTraderInMarketKey(amm, assetId, _trader), (getBorrowedByTraderInMarket(amm, assetId, _trader) + amount))]
121+ then [IntegerEntry(getBorrowedByTraderInMarketKey(amm, assetId, _trader), (getBorrowedByTraderInMarket(amm, assetId, _trader) + amount))]
122122 else throw("Strict value is not equal to itself.")
123123 }
124124 }
126126
127127
128128 @Callable(i)
129-func repay (_trader,_assetId) = {
130- let amount = i.payments[0].amount
129+func repay (_trader,_amount,_assetId) = {
131130 let amm = toString(i.caller)
132131 if (if (!(isWhitelist(amm)))
133132 then true
134133 else !(isWhitelistAsset(_assetId)))
135134 then throw("Invalid repay parameters")
136135 else {
137- let withdrawInsurance = invoke(insuranceAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), amount)])
136+ let withdrawInsurance = invoke(vaultAddress(), "withdrawLockedV", [_amount], nil)
138137 if ((withdrawInsurance == withdrawInsurance))
139138 then {
140- let newDebt = (getBorrowedByTraderInMarket(amm, _assetId, _trader) - amount)
141- ([ScriptTransfer(i.caller, amount, fromBase58String(_assetId))] ++ (if ((newDebt > 0))
139+ let newDebt = (getBorrowedByTraderInMarket(amm, _assetId, _trader) - _amount)
140+ ([ScriptTransfer(i.caller, _amount, fromBase58String(_assetId))] ++ (if ((newDebt > 0))
142141 then [IntegerEntry(getBorrowedByTraderInMarketKey(amm, _assetId, _trader), newDebt)]
143142 else [DeleteEntry(getBorrowedByTraderInMarketKey(amm, _assetId, _trader))]))
144143 }
149148
150149
151150 @Callable(i)
152-func realizePartiallyAndClose (_trader,_assetId) = {
153- let amount = if ((size(i.payments) > 0))
154- then i.payments[0].amount
155- else 0
151+func realizePartiallyAndClose (_trader,_amount,_assetId) = {
156152 let amm = toString(i.caller)
157153 let debt = getBorrowedByTraderInMarket(amm, _assetId, _trader)
158- let toSell = (debt - amount)
154+ let toSell = (debt - _amount)
159155 let sanityCheck = if ((0 >= toSell))
160156 then throw("Use repay instead")
161157 else nil
177173 let soldForAmount = (amountAfter - amountBefore)
178174 if ((soldForAmount == soldForAmount))
179175 then {
180- let withdrawInsurance = invoke(insuranceAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), (amount + soldForAmount))])
181- if ((withdrawInsurance == withdrawInsurance))
176+ let depositSoldCollateral = invoke(vaultAddress(), "addLocked", [true], [AttachedPayment(quoteAsset(), soldForAmount)])
177+ if ((depositSoldCollateral == depositSoldCollateral))
182178 then {
183- let toGetBack = (debt - toSell)
184- if ((toGetBack > 0))
185- then [ScriptTransfer(i.caller, (debt - toSell), fromBase58String(_assetId))]
186- else (nil ++ [DeleteEntry(getBorrowedByTraderInMarketKey(amm, _assetId, _trader))])
179+ let withdrawLockedV = invoke(vaultAddress(), "withdrawLockedV", [debt], nil)
180+ if ((withdrawLockedV == withdrawLockedV))
181+ then {
182+ let toGetBack = (debt - toSell)
183+ if ((toGetBack > 0))
184+ then [ScriptTransfer(i.caller, (debt - toSell), fromBase58String(_assetId))]
185+ else (nil ++ [DeleteEntry(getBorrowedByTraderInMarketKey(amm, _assetId, _trader))])
186+ }
187+ else throw("Strict value is not equal to itself.")
187188 }
188189 else throw("Strict value is not equal to itself.")
189190 }
207208 let sanityCheck = if (if ((0 >= _toSell))
208209 then true
209210 else (_toSell > debt))
210- then throw("Invalid realizePartiallyAndClose parameters")
211+ then throw("Invalid realizePartially parameters")
211212 else nil
212213 if ((sanityCheck == sanityCheck))
213214 then if (if (!(isWhitelist(amm)))
227228 let soldForAmount = (amountAfter - amountBefore)
228229 if ((soldForAmount == soldForAmount))
229230 then {
230- let withdrawInsurance = invoke(insuranceAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), soldForAmount)])
231- if ((withdrawInsurance == withdrawInsurance))
232- then [IntegerEntry(getBorrowedByTraderInMarketKey(amm, _assetId, _trader), (getBorrowedByTraderInMarket(amm, _assetId, _trader) - _toSell))]
231+ let addLocked = invoke(vaultAddress(), "addLocked", [true], [AttachedPayment(quoteAsset(), soldForAmount)])
232+ if ((addLocked == addLocked))
233+ then {
234+ let withdrawLockedV = invoke(vaultAddress(), "withdrawLockedV", [soldForAmount], nil)
235+ if ((withdrawLockedV == withdrawLockedV))
236+ then [IntegerEntry(getBorrowedByTraderInMarketKey(amm, _assetId, _trader), (getBorrowedByTraderInMarket(amm, _assetId, _trader) - _toSell))]
237+ else throw("Strict value is not equal to itself.")
238+ }
233239 else throw("Strict value is not equal to itself.")
234240 }
235241 else throw("Strict value is not equal to itself.")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let k_asset_collateral = "k_asset_collateral"
55
66 let k_trader_market_asset_collateral = "k_trader_market_asset_collateral"
77
88 let k_whitelist_asset = "k_whitelist_asset"
99
1010 let k_initialized = "k_initialized"
1111
1212 let k_coordinatorAddress = "k_coordinatorAddress"
1313
1414 let k_governance_asset = "k_gov_asset"
1515
1616 let k_quote_asset = "k_quote_asset"
1717
1818 let k_admin_public_key = "k_admin_public_key"
1919
2020 let k_manager_address = "k_manager_address"
2121
2222 let k_amm = "k_amm"
2323
24-let k_insurance_address = "k_insurance_address"
24+let k_exchange_address = "k_exchange_address"
2525
26-let k_exchange_address = "k_exchange_address"
26+let k_vault_address = "k_vault_address"
2727
2828 func toCompositeKey (_key,_address) = ((_key + "_") + _address)
2929
3030
3131 func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set")
3232
3333
3434 func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
3535
3636
3737 func governanceAsset () = fromBase58String(getStringValue(coordinator(), k_governance_asset))
3838
3939
4040 func quoteAsset () = fromBase58String(getStringValue(coordinator(), k_quote_asset))
4141
4242
4343 func managerAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_manager_address)), "Manager not set")
4444
4545
4646 func isWhitelist (_address) = valueOrElse(getBoolean(coordinator(), toCompositeKey(k_amm, _address)), false)
4747
4848
4949 func isWhitelistAsset (_assetId) = valueOrElse(getBoolean(this, toCompositeKey(k_whitelist_asset, _assetId)), false)
5050
5151
52-func insuranceAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_insurance_address)), "Insurance not set")
52+func vaultAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_vault_address)), "Vault not set")
5353
5454
5555 func swapAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_exchange_address), "No swap address")), "Invalid swap address")
5656
5757
5858 let DECIMAL_UNIT = (1 * (((((((10 * 10) * 10) * 10) * 10) * 10) * 10) * 10))
5959
6060 let DURATION = ((60 * 60) * 24)
6161
6262 let NO_ADDRESS = ""
6363
6464 let NO_STAKER = 0
6565
6666 func usdnFromDecimals (_amount) = (_amount / 100)
6767
6868
6969 func usdnToDecimals (_amount) = (_amount * 100)
7070
7171
7272 func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
7373
7474
7575 func getBorrowedByTraderInMarketKey (_amm,_assetId,_trader) = ((((((k_trader_market_asset_collateral + "_") + _amm) + "_") + _assetId) + "_") + _trader)
7676
7777
7878 func getBorrowedByTraderInMarket (_amm,_assetId,_trader) = {
7979 let key = getBorrowedByTraderInMarketKey(_amm, _assetId, _trader)
8080 valueOrElse(getInteger(this, key), 0)
8181 }
8282
8383
8484 @Callable(i)
8585 func initialize (_coordinator,_whitelist) = if (initialized())
8686 then throw("Already initialized")
8787 else {
8888 let initialAssetIds = split(_whitelist, ",")
8989 func doWhitelist (_acc,_assetId) = (_acc :+ BooleanEntry(toCompositeKey(k_whitelist_asset, _assetId), true))
9090
9191 ({
9292 let $l = initialAssetIds
9393 let $s = size($l)
9494 let $acc0 = nil
9595 func $f0_1 ($a,$i) = if (($i >= $s))
9696 then $a
9797 else doWhitelist($a, $l[$i])
9898
9999 func $f0_2 ($a,$i) = if (($i >= $s))
100100 then $a
101101 else throw("List size exceeds 20")
102102
103103 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
104104 } ++ [StringEntry(k_coordinatorAddress, _coordinator), BooleanEntry(k_initialized, true)])
105105 }
106106
107107
108108
109109 @Callable(i)
110110 func borrow (_trader) = {
111111 let amount = i.payments[0].amount
112112 let assetId = toBase58String(valueOrErrorMessage(i.payments[0].assetId, "Invalid asset id"))
113113 let amm = toString(i.caller)
114114 if (if (!(isWhitelist(amm)))
115115 then true
116116 else !(isWhitelistAsset(assetId)))
117117 then throw("Invalid borrow parameters")
118118 else {
119- let withdrawInsurance = invoke(insuranceAddress(), "withdraw", [amount], nil)
119+ let withdrawInsurance = invoke(vaultAddress(), "addLockedV", [amount], nil)
120120 if ((withdrawInsurance == withdrawInsurance))
121- then [ScriptTransfer(i.caller, amount, quoteAsset()), IntegerEntry(getBorrowedByTraderInMarketKey(amm, assetId, _trader), (getBorrowedByTraderInMarket(amm, assetId, _trader) + amount))]
121+ then [IntegerEntry(getBorrowedByTraderInMarketKey(amm, assetId, _trader), (getBorrowedByTraderInMarket(amm, assetId, _trader) + amount))]
122122 else throw("Strict value is not equal to itself.")
123123 }
124124 }
125125
126126
127127
128128 @Callable(i)
129-func repay (_trader,_assetId) = {
130- let amount = i.payments[0].amount
129+func repay (_trader,_amount,_assetId) = {
131130 let amm = toString(i.caller)
132131 if (if (!(isWhitelist(amm)))
133132 then true
134133 else !(isWhitelistAsset(_assetId)))
135134 then throw("Invalid repay parameters")
136135 else {
137- let withdrawInsurance = invoke(insuranceAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), amount)])
136+ let withdrawInsurance = invoke(vaultAddress(), "withdrawLockedV", [_amount], nil)
138137 if ((withdrawInsurance == withdrawInsurance))
139138 then {
140- let newDebt = (getBorrowedByTraderInMarket(amm, _assetId, _trader) - amount)
141- ([ScriptTransfer(i.caller, amount, fromBase58String(_assetId))] ++ (if ((newDebt > 0))
139+ let newDebt = (getBorrowedByTraderInMarket(amm, _assetId, _trader) - _amount)
140+ ([ScriptTransfer(i.caller, _amount, fromBase58String(_assetId))] ++ (if ((newDebt > 0))
142141 then [IntegerEntry(getBorrowedByTraderInMarketKey(amm, _assetId, _trader), newDebt)]
143142 else [DeleteEntry(getBorrowedByTraderInMarketKey(amm, _assetId, _trader))]))
144143 }
145144 else throw("Strict value is not equal to itself.")
146145 }
147146 }
148147
149148
150149
151150 @Callable(i)
152-func realizePartiallyAndClose (_trader,_assetId) = {
153- let amount = if ((size(i.payments) > 0))
154- then i.payments[0].amount
155- else 0
151+func realizePartiallyAndClose (_trader,_amount,_assetId) = {
156152 let amm = toString(i.caller)
157153 let debt = getBorrowedByTraderInMarket(amm, _assetId, _trader)
158- let toSell = (debt - amount)
154+ let toSell = (debt - _amount)
159155 let sanityCheck = if ((0 >= toSell))
160156 then throw("Use repay instead")
161157 else nil
162158 if ((sanityCheck == sanityCheck))
163159 then if (if (!(isWhitelist(amm)))
164160 then true
165161 else !(isWhitelistAsset(_assetId)))
166162 then throw("Invalid realizePartiallyAndClose parameters")
167163 else {
168164 let amountBefore = assetBalance(this, quoteAsset())
169165 if ((amountBefore == amountBefore))
170166 then {
171167 let doSwap = invoke(swapAddress(), "swap", [toBase58String(quoteAsset()), 0], [AttachedPayment(fromBase58String(_assetId), toSell)])
172168 if ((doSwap == doSwap))
173169 then {
174170 let amountAfter = assetBalance(this, quoteAsset())
175171 if ((amountAfter == amountAfter))
176172 then {
177173 let soldForAmount = (amountAfter - amountBefore)
178174 if ((soldForAmount == soldForAmount))
179175 then {
180- let withdrawInsurance = invoke(insuranceAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), (amount + soldForAmount))])
181- if ((withdrawInsurance == withdrawInsurance))
176+ let depositSoldCollateral = invoke(vaultAddress(), "addLocked", [true], [AttachedPayment(quoteAsset(), soldForAmount)])
177+ if ((depositSoldCollateral == depositSoldCollateral))
182178 then {
183- let toGetBack = (debt - toSell)
184- if ((toGetBack > 0))
185- then [ScriptTransfer(i.caller, (debt - toSell), fromBase58String(_assetId))]
186- else (nil ++ [DeleteEntry(getBorrowedByTraderInMarketKey(amm, _assetId, _trader))])
179+ let withdrawLockedV = invoke(vaultAddress(), "withdrawLockedV", [debt], nil)
180+ if ((withdrawLockedV == withdrawLockedV))
181+ then {
182+ let toGetBack = (debt - toSell)
183+ if ((toGetBack > 0))
184+ then [ScriptTransfer(i.caller, (debt - toSell), fromBase58String(_assetId))]
185+ else (nil ++ [DeleteEntry(getBorrowedByTraderInMarketKey(amm, _assetId, _trader))])
186+ }
187+ else throw("Strict value is not equal to itself.")
187188 }
188189 else throw("Strict value is not equal to itself.")
189190 }
190191 else throw("Strict value is not equal to itself.")
191192 }
192193 else throw("Strict value is not equal to itself.")
193194 }
194195 else throw("Strict value is not equal to itself.")
195196 }
196197 else throw("Strict value is not equal to itself.")
197198 }
198199 else throw("Strict value is not equal to itself.")
199200 }
200201
201202
202203
203204 @Callable(i)
204205 func realizePartially (_trader,_assetId,_toSell) = {
205206 let amm = toString(i.caller)
206207 let debt = getBorrowedByTraderInMarket(amm, _assetId, _trader)
207208 let sanityCheck = if (if ((0 >= _toSell))
208209 then true
209210 else (_toSell > debt))
210- then throw("Invalid realizePartiallyAndClose parameters")
211+ then throw("Invalid realizePartially parameters")
211212 else nil
212213 if ((sanityCheck == sanityCheck))
213214 then if (if (!(isWhitelist(amm)))
214215 then true
215216 else !(isWhitelistAsset(_assetId)))
216217 then throw("Invalid realizePartiallyAndClose parameters")
217218 else {
218219 let amountBefore = assetBalance(this, quoteAsset())
219220 if ((amountBefore == amountBefore))
220221 then {
221222 let doSwap = invoke(swapAddress(), "swap", [toBase58String(quoteAsset()), 0], [AttachedPayment(fromBase58String(_assetId), _toSell)])
222223 if ((doSwap == doSwap))
223224 then {
224225 let amountAfter = assetBalance(this, quoteAsset())
225226 if ((amountAfter == amountAfter))
226227 then {
227228 let soldForAmount = (amountAfter - amountBefore)
228229 if ((soldForAmount == soldForAmount))
229230 then {
230- let withdrawInsurance = invoke(insuranceAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), soldForAmount)])
231- if ((withdrawInsurance == withdrawInsurance))
232- then [IntegerEntry(getBorrowedByTraderInMarketKey(amm, _assetId, _trader), (getBorrowedByTraderInMarket(amm, _assetId, _trader) - _toSell))]
231+ let addLocked = invoke(vaultAddress(), "addLocked", [true], [AttachedPayment(quoteAsset(), soldForAmount)])
232+ if ((addLocked == addLocked))
233+ then {
234+ let withdrawLockedV = invoke(vaultAddress(), "withdrawLockedV", [soldForAmount], nil)
235+ if ((withdrawLockedV == withdrawLockedV))
236+ then [IntegerEntry(getBorrowedByTraderInMarketKey(amm, _assetId, _trader), (getBorrowedByTraderInMarket(amm, _assetId, _trader) - _toSell))]
237+ else throw("Strict value is not equal to itself.")
238+ }
233239 else throw("Strict value is not equal to itself.")
234240 }
235241 else throw("Strict value is not equal to itself.")
236242 }
237243 else throw("Strict value is not equal to itself.")
238244 }
239245 else throw("Strict value is not equal to itself.")
240246 }
241247 else throw("Strict value is not equal to itself.")
242248 }
243249 else throw("Strict value is not equal to itself.")
244250 }
245251
246252
247253 @Verifier(tx)
248254 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
249255

github/deemru/w8io/873ac7e 
38.37 ms