tx · cYtdDP9cP222n2bY9fyS51hHKHzSL1VSkoUzdSb4FyH

3Muytcv8u3SKC8Nc76tUXTfq26nD3Mu5Vax:  -0.03400000 Waves

2022.11.10 12:51 [2310897] smart account 3Muytcv8u3SKC8Nc76tUXTfq26nD3Mu5Vax > SELF 0.00000000 Waves

{ "type": 13, "id": "cYtdDP9cP222n2bY9fyS51hHKHzSL1VSkoUzdSb4FyH", "fee": 3400000, "feeAssetId": null, "timestamp": 1668073879178, "version": 2, "chainId": 84, "sender": "3Muytcv8u3SKC8Nc76tUXTfq26nD3Mu5Vax", "senderPublicKey": "2nfPSXMHiTFAPhqiE41GL52Ld7jy6D1wjZdhUmgfLNzk", "proofs": [ "387xWRCqeGHsaG4KQSctjAPJL4eLbmFyXP2xqGQy8AmoavWqg9HjQu2Qqiy4UMJ8QV6VLgwSg6dhrpyud2yYhd3G" ], "script": "base64:BgIgCAISBAoCCAgSAwoBCBIECgIICBIECgIICBIFCgMICAEfABJrX2Fzc2V0X2NvbGxhdGVyYWwCEmtfYXNzZXRfY29sbGF0ZXJhbAAga190cmFkZXJfbWFya2V0X2Fzc2V0X2NvbGxhdGVyYWwCIGtfdHJhZGVyX21hcmtldF9hc3NldF9jb2xsYXRlcmFsABFrX3doaXRlbGlzdF9hc3NldAIRa193aGl0ZWxpc3RfYXNzZXQADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwASa19nb3Zlcm5hbmNlX2Fzc2V0AgtrX2dvdl9hc3NldAANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAASa19hZG1pbl9wdWJsaWNfa2V5AhJrX2FkbWluX3B1YmxpY19rZXkAEWtfbWFuYWdlcl9hZGRyZXNzAhFrX21hbmFnZXJfYWRkcmVzcwAFa19hbW0CBWtfYW1tABNrX2luc3VyYW5jZV9hZGRyZXNzAhNrX2luc3VyYW5jZV9hZGRyZXNzABJrX2V4Y2hhbmdlX2FkZHJlc3MCEmtfZXhjaGFuZ2VfYWRkcmVzcwEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDmFkbWluUHVibGljS2V5AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX2FkbWluX3B1YmxpY19rZXkBD2dvdmVybmFuY2VBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUSa19nb3Zlcm5hbmNlX2Fzc2V0AQpxdW90ZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0AQ5tYW5hZ2VyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRFrX21hbmFnZXJfYWRkcmVzcwIPTWFuYWdlciBub3Qgc2V0AQtpc1doaXRlbGlzdAEIX2FkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBC2Nvb3JkaW5hdG9yAAkBDnRvQ29tcG9zaXRlS2V5AgUFa19hbW0FCF9hZGRyZXNzBwEQaXNXaGl0ZWxpc3RBc3NldAEIX2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgURa193aGl0ZWxpc3RfYXNzZXQFCF9hc3NldElkBwEQaW5zdXJhbmNlQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRNrX2luc3VyYW5jZV9hZGRyZXNzAhFJbnN1cmFuY2Ugbm90IHNldAELc3dhcEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFEmtfZXhjaGFuZ2VfYWRkcmVzcwIPTm8gc3dhcCBhZGRyZXNzAhRJbnZhbGlkIHN3YXAgYWRkcmVzcwAMREVDSU1BTF9VTklUCQBoAgABCQBoAgkAaAIJAGgCCQBoAgkAaAIJAGgCCQBoAgAKAAoACgAKAAoACgAKAAoACERVUkFUSU9OCQBoAgkAaAIAPAA8ABgACk5PX0FERFJFU1MCAAAJTk9fU1RBS0VSAAABEHVzZG5Gcm9tRGVjaW1hbHMBB19hbW91bnQJAGkCBQdfYW1vdW50AGQBDnVzZG5Ub0RlY2ltYWxzAQdfYW1vdW50CQBoAgUHX2Ftb3VudABkAQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBHmdldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldEtleQMEX2FtbQhfYXNzZXRJZAdfdHJhZGVyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBSBrX3RyYWRlcl9tYXJrZXRfYXNzZXRfY29sbGF0ZXJhbAIBXwUEX2FtbQIBXwUIX2Fzc2V0SWQCAV8FB190cmFkZXIBG2dldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldAMEX2FtbQhfYXNzZXRJZAdfdHJhZGVyBANrZXkJAR5nZXRCb3Jyb3dlZEJ5VHJhZGVySW5NYXJrZXRLZXkDBQRfYW1tBQhfYXNzZXRJZAUHX3RyYWRlcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAUBaQEKaW5pdGlhbGl6ZQIMX2Nvb3JkaW5hdG9yCl93aGl0ZWxpc3QDCQELaW5pdGlhbGl6ZWQACQACAQITQWxyZWFkeSBpbml0aWFsaXplZAQPaW5pdGlhbEFzc2V0SWRzCQC1CQIFCl93aGl0ZWxpc3QCASwKAQtkb1doaXRlbGlzdAIEX2FjYwhfYXNzZXRJZAkAzQgCBQRfYWNjCQEMQm9vbGVhbkVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgURa193aGl0ZWxpc3RfYXNzZXQFCF9hc3NldElkBgkAzggCCgACJGwFD2luaXRpYWxBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELZG9XaGl0ZWxpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwUMX2Nvb3JkaW5hdG9yCQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rX2luaXRpYWxpemVkBgUDbmlsAWkBBmJvcnJvdwEHX3RyYWRlcgQGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQHYXNzZXRJZAkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAIQSW52YWxpZCBhc3NldCBpZAQDYW1tCQClCAEIBQFpBmNhbGxlcgMDCQEBIQEJAQtpc1doaXRlbGlzdAEFA2FtbQYJAQEhAQkBEGlzV2hpdGVsaXN0QXNzZXQBBQdhc3NldElkCQACAQIZSW52YWxpZCBib3Jyb3cgcGFyYW1ldGVycwQRd2l0aGRyYXdJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFEXdpdGhkcmF3SW5zdXJhbmNlBRF3aXRoZHJhd0luc3VyYW5jZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAkBCnF1b3RlQXNzZXQACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEeZ2V0Qm9ycm93ZWRCeVRyYWRlckluTWFya2V0S2V5AwUDYW1tBQdhc3NldElkBQdfdHJhZGVyCQBkAgkBG2dldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldAMFA2FtbQUHYXNzZXRJZAUHX3RyYWRlcgUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFcmVwYXkCB190cmFkZXIIX2Fzc2V0SWQEBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEA2FtbQkApQgBCAUBaQZjYWxsZXIDAwkBASEBCQELaXNXaGl0ZWxpc3QBBQNhbW0GCQEBIQEJARBpc1doaXRlbGlzdEFzc2V0AQUIX2Fzc2V0SWQJAAIBAhhJbnZhbGlkIHJlcGF5IHBhcmFtZXRlcnMEEXdpdGhkcmF3SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFBmFtb3VudAUDbmlsAwkAAAIFEXdpdGhkcmF3SW5zdXJhbmNlBRF3aXRoZHJhd0luc3VyYW5jZQQHbmV3RGVidAkAZQIJARtnZXRCb3Jyb3dlZEJ5VHJhZGVySW5NYXJrZXQDBQNhbW0FCF9hc3NldElkBQdfdHJhZGVyBQZhbW91bnQJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAkA2QQBBQhfYXNzZXRJZAUDbmlsAwkAZgIFB25ld0RlYnQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmdldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldEtleQMFA2FtbQUIX2Fzc2V0SWQFB190cmFkZXIFB25ld0RlYnQFA25pbAkAzAgCCQELRGVsZXRlRW50cnkBCQEeZ2V0Qm9ycm93ZWRCeVRyYWRlckluTWFya2V0S2V5AwUDYW1tBQhfYXNzZXRJZAUHX3RyYWRlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGHJlYWxpemVQYXJ0aWFsbHlBbmRDbG9zZQIHX3RyYWRlcghfYXNzZXRJZAQGYW1vdW50AwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAAQDYW1tCQClCAEIBQFpBmNhbGxlcgQEZGVidAkBG2dldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldAMFA2FtbQUIX2Fzc2V0SWQFB190cmFkZXIEBnRvU2VsbAkAZQIFBGRlYnQFBmFtb3VudAQLc2FuaXR5Q2hlY2sDCQBnAgAABQZ0b1NlbGwJAAIBAhFVc2UgcmVwYXkgaW5zdGVhZAUDbmlsAwkAAAIFC3Nhbml0eUNoZWNrBQtzYW5pdHlDaGVjawMDCQEBIQEJAQtpc1doaXRlbGlzdAEFA2FtbQYJAQEhAQkBEGlzV2hpdGVsaXN0QXNzZXQBBQhfYXNzZXRJZAkAAgECK0ludmFsaWQgcmVhbGl6ZVBhcnRpYWxseUFuZENsb3NlIHBhcmFtZXRlcnMEDGFtb3VudEJlZm9yZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgUMYW1vdW50QmVmb3JlBQxhbW91bnRCZWZvcmUEBmRvU3dhcAkA/AcECQELc3dhcEFkZHJlc3MAAgRzd2FwCQDMCAIJANgEAQkBCnF1b3RlQXNzZXQACQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEFCF9hc3NldElkBQZ0b1NlbGwFA25pbAMJAAACBQZkb1N3YXAFBmRvU3dhcAQLYW1vdW50QWZ0ZXIJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAAAIFC2Ftb3VudEFmdGVyBQthbW91bnRBZnRlcgQNc29sZEZvckFtb3VudAkAZQIFC2Ftb3VudEFmdGVyBQxhbW91bnRCZWZvcmUDCQAAAgUNc29sZEZvckFtb3VudAUNc29sZEZvckFtb3VudAQRd2l0aGRyYXdJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAkAZAIFBmFtb3VudAUNc29sZEZvckFtb3VudAUDbmlsAwkAAAIFEXdpdGhkcmF3SW5zdXJhbmNlBRF3aXRoZHJhd0luc3VyYW5jZQQJdG9HZXRCYWNrCQBlAgUEZGVidAUGdG9TZWxsAwkAZgIFCXRvR2V0QmFjawAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFBGRlYnQFBnRvU2VsbAkA2QQBBQhfYXNzZXRJZAUDbmlsCQDOCAIFA25pbAkAzAgCCQELRGVsZXRlRW50cnkBCQEeZ2V0Qm9ycm93ZWRCeVRyYWRlckluTWFya2V0S2V5AwUDYW1tBQhfYXNzZXRJZAUHX3RyYWRlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEHJlYWxpemVQYXJ0aWFsbHkDB190cmFkZXIIX2Fzc2V0SWQHX3RvU2VsbAQDYW1tCQClCAEIBQFpBmNhbGxlcgQEZGVidAkBG2dldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldAMFA2FtbQUIX2Fzc2V0SWQFB190cmFkZXIEC3Nhbml0eUNoZWNrAwMJAGcCAAAFB190b1NlbGwGCQBmAgUHX3RvU2VsbAUEZGVidAkAAgECK0ludmFsaWQgcmVhbGl6ZVBhcnRpYWxseUFuZENsb3NlIHBhcmFtZXRlcnMFA25pbAMJAAACBQtzYW5pdHlDaGVjawULc2FuaXR5Q2hlY2sDAwkBASEBCQELaXNXaGl0ZWxpc3QBBQNhbW0GCQEBIQEJARBpc1doaXRlbGlzdEFzc2V0AQUIX2Fzc2V0SWQJAAIBAitJbnZhbGlkIHJlYWxpemVQYXJ0aWFsbHlBbmRDbG9zZSBwYXJhbWV0ZXJzBAxhbW91bnRCZWZvcmUJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAAAIFDGFtb3VudEJlZm9yZQUMYW1vdW50QmVmb3JlBAZkb1N3YXAJAPwHBAkBC3N3YXBBZGRyZXNzAAIEc3dhcAkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQhfYXNzZXRJZAUHX3RvU2VsbAUDbmlsAwkAAAIFBmRvU3dhcAUGZG9Td2FwBAthbW91bnRBZnRlcgkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgULYW1vdW50QWZ0ZXIFC2Ftb3VudEFmdGVyBA1zb2xkRm9yQW1vdW50CQBlAgULYW1vdW50QWZ0ZXIFDGFtb3VudEJlZm9yZQMJAAACBQ1zb2xkRm9yQW1vdW50BQ1zb2xkRm9yQW1vdW50BBF3aXRoZHJhd0luc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ1zb2xkRm9yQW1vdW50BQNuaWwDCQAAAgURd2l0aGRyYXdJbnN1cmFuY2UFEXdpdGhkcmF3SW5zdXJhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEeZ2V0Qm9ycm93ZWRCeVRyYWRlckluTWFya2V0S2V5AwUDYW1tBQhfYXNzZXRJZAUHX3RyYWRlcgkAZQIJARtnZXRCb3Jyb3dlZEJ5VHJhZGVySW5NYXJrZXQDBQNhbW0FCF9hc3NldElkBQdfdHJhZGVyBQdfdG9TZWxsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQEOYWRtaW5QdWJsaWNLZXkAaxX5PQ==", "height": 2310897, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: HjkeEFcA6VXRaiEKKwb8c9hY7wWSAe6Rpq3R2B6pYvMk Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let k_asset_collateral = "k_asset_collateral"
5+
6+let k_trader_market_asset_collateral = "k_trader_market_asset_collateral"
7+
8+let k_whitelist_asset = "k_whitelist_asset"
9+
10+let k_initialized = "k_initialized"
11+
12+let k_coordinatorAddress = "k_coordinatorAddress"
13+
14+let k_governance_asset = "k_gov_asset"
15+
16+let k_quote_asset = "k_quote_asset"
17+
18+let k_admin_public_key = "k_admin_public_key"
19+
20+let k_manager_address = "k_manager_address"
21+
22+let k_amm = "k_amm"
23+
24+let k_insurance_address = "k_insurance_address"
25+
26+let k_exchange_address = "k_exchange_address"
27+
28+func toCompositeKey (_key,_address) = ((_key + "_") + _address)
29+
30+
31+func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set")
32+
33+
34+func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
35+
36+
37+func governanceAsset () = fromBase58String(getStringValue(coordinator(), k_governance_asset))
38+
39+
40+func quoteAsset () = fromBase58String(getStringValue(coordinator(), k_quote_asset))
41+
42+
43+func managerAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_manager_address)), "Manager not set")
44+
45+
46+func isWhitelist (_address) = valueOrElse(getBoolean(coordinator(), toCompositeKey(k_amm, _address)), false)
47+
48+
49+func isWhitelistAsset (_assetId) = valueOrElse(getBoolean(this, toCompositeKey(k_whitelist_asset, _assetId)), false)
50+
51+
52+func insuranceAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_insurance_address)), "Insurance not set")
53+
54+
55+func swapAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_exchange_address), "No swap address")), "Invalid swap address")
56+
57+
58+let DECIMAL_UNIT = (1 * (((((((10 * 10) * 10) * 10) * 10) * 10) * 10) * 10))
59+
60+let DURATION = ((60 * 60) * 24)
61+
62+let NO_ADDRESS = ""
63+
64+let NO_STAKER = 0
65+
66+func usdnFromDecimals (_amount) = (_amount / 100)
67+
68+
69+func usdnToDecimals (_amount) = (_amount * 100)
70+
71+
72+func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
73+
74+
75+func getBorrowedByTraderInMarketKey (_amm,_assetId,_trader) = ((((((k_trader_market_asset_collateral + "_") + _amm) + "_") + _assetId) + "_") + _trader)
76+
77+
78+func getBorrowedByTraderInMarket (_amm,_assetId,_trader) = {
79+ let key = getBorrowedByTraderInMarketKey(_amm, _assetId, _trader)
80+ valueOrElse(getInteger(this, key), 0)
81+ }
82+
83+
84+@Callable(i)
85+func initialize (_coordinator,_whitelist) = if (initialized())
86+ then throw("Already initialized")
87+ else {
88+ let initialAssetIds = split(_whitelist, ",")
89+ func doWhitelist (_acc,_assetId) = (_acc :+ BooleanEntry(toCompositeKey(k_whitelist_asset, _assetId), true))
90+
91+ ({
92+ let $l = initialAssetIds
93+ let $s = size($l)
94+ let $acc0 = nil
95+ func $f0_1 ($a,$i) = if (($i >= $s))
96+ then $a
97+ else doWhitelist($a, $l[$i])
98+
99+ func $f0_2 ($a,$i) = if (($i >= $s))
100+ then $a
101+ else throw("List size exceeds 20")
102+
103+ $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)
104+ } ++ [StringEntry(k_coordinatorAddress, _coordinator), BooleanEntry(k_initialized, true)])
105+ }
106+
107+
108+
109+@Callable(i)
110+func borrow (_trader) = {
111+ let amount = i.payments[0].amount
112+ let assetId = toBase58String(valueOrErrorMessage(i.payments[0].assetId, "Invalid asset id"))
113+ let amm = toString(i.caller)
114+ if (if (!(isWhitelist(amm)))
115+ then true
116+ else !(isWhitelistAsset(assetId)))
117+ then throw("Invalid borrow parameters")
118+ else {
119+ let withdrawInsurance = invoke(insuranceAddress(), "withdraw", [amount], nil)
120+ if ((withdrawInsurance == withdrawInsurance))
121+ then [ScriptTransfer(i.caller, amount, quoteAsset()), IntegerEntry(getBorrowedByTraderInMarketKey(amm, assetId, _trader), (getBorrowedByTraderInMarket(amm, assetId, _trader) + amount))]
122+ else throw("Strict value is not equal to itself.")
123+ }
124+ }
125+
126+
127+
128+@Callable(i)
129+func repay (_trader,_assetId) = {
130+ let amount = i.payments[0].amount
131+ let amm = toString(i.caller)
132+ if (if (!(isWhitelist(amm)))
133+ then true
134+ else !(isWhitelistAsset(_assetId)))
135+ then throw("Invalid repay parameters")
136+ else {
137+ let withdrawInsurance = invoke(insuranceAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), amount)])
138+ if ((withdrawInsurance == withdrawInsurance))
139+ then {
140+ let newDebt = (getBorrowedByTraderInMarket(amm, _assetId, _trader) - amount)
141+ ([ScriptTransfer(i.caller, amount, fromBase58String(_assetId))] ++ (if ((newDebt > 0))
142+ then [IntegerEntry(getBorrowedByTraderInMarketKey(amm, _assetId, _trader), newDebt)]
143+ else [DeleteEntry(getBorrowedByTraderInMarketKey(amm, _assetId, _trader))]))
144+ }
145+ else throw("Strict value is not equal to itself.")
146+ }
147+ }
148+
149+
150+
151+@Callable(i)
152+func realizePartiallyAndClose (_trader,_assetId) = {
153+ let amount = if ((size(i.payments) > 0))
154+ then i.payments[0].amount
155+ else 0
156+ let amm = toString(i.caller)
157+ let debt = getBorrowedByTraderInMarket(amm, _assetId, _trader)
158+ let toSell = (debt - amount)
159+ let sanityCheck = if ((0 >= toSell))
160+ then throw("Use repay instead")
161+ else nil
162+ if ((sanityCheck == sanityCheck))
163+ then if (if (!(isWhitelist(amm)))
164+ then true
165+ else !(isWhitelistAsset(_assetId)))
166+ then throw("Invalid realizePartiallyAndClose parameters")
167+ else {
168+ let amountBefore = assetBalance(this, quoteAsset())
169+ if ((amountBefore == amountBefore))
170+ then {
171+ let doSwap = invoke(swapAddress(), "swap", [toBase58String(quoteAsset()), 0], [AttachedPayment(fromBase58String(_assetId), toSell)])
172+ if ((doSwap == doSwap))
173+ then {
174+ let amountAfter = assetBalance(this, quoteAsset())
175+ if ((amountAfter == amountAfter))
176+ then {
177+ let soldForAmount = (amountAfter - amountBefore)
178+ if ((soldForAmount == soldForAmount))
179+ then {
180+ let withdrawInsurance = invoke(insuranceAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), (amount + soldForAmount))])
181+ if ((withdrawInsurance == withdrawInsurance))
182+ 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))])
187+ }
188+ else throw("Strict value is not equal to itself.")
189+ }
190+ else throw("Strict value is not equal to itself.")
191+ }
192+ else throw("Strict value is not equal to itself.")
193+ }
194+ else throw("Strict value is not equal to itself.")
195+ }
196+ else throw("Strict value is not equal to itself.")
197+ }
198+ else throw("Strict value is not equal to itself.")
199+ }
200+
201+
202+
203+@Callable(i)
204+func realizePartially (_trader,_assetId,_toSell) = {
205+ let amm = toString(i.caller)
206+ let debt = getBorrowedByTraderInMarket(amm, _assetId, _trader)
207+ let sanityCheck = if (if ((0 >= _toSell))
208+ then true
209+ else (_toSell > debt))
210+ then throw("Invalid realizePartiallyAndClose parameters")
211+ else nil
212+ if ((sanityCheck == sanityCheck))
213+ then if (if (!(isWhitelist(amm)))
214+ then true
215+ else !(isWhitelistAsset(_assetId)))
216+ then throw("Invalid realizePartiallyAndClose parameters")
217+ else {
218+ let amountBefore = assetBalance(this, quoteAsset())
219+ if ((amountBefore == amountBefore))
220+ then {
221+ let doSwap = invoke(swapAddress(), "swap", [toBase58String(quoteAsset()), 0], [AttachedPayment(fromBase58String(_assetId), _toSell)])
222+ if ((doSwap == doSwap))
223+ then {
224+ let amountAfter = assetBalance(this, quoteAsset())
225+ if ((amountAfter == amountAfter))
226+ then {
227+ let soldForAmount = (amountAfter - amountBefore)
228+ if ((soldForAmount == soldForAmount))
229+ 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))]
233+ else throw("Strict value is not equal to itself.")
234+ }
235+ else throw("Strict value is not equal to itself.")
236+ }
237+ else throw("Strict value is not equal to itself.")
238+ }
239+ else throw("Strict value is not equal to itself.")
240+ }
241+ else throw("Strict value is not equal to itself.")
242+ }
243+ else throw("Strict value is not equal to itself.")
244+ }
245+
246+
247+@Verifier(tx)
248+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
249+

github/deemru/w8io/873ac7e 
25.93 ms