tx · DxWGX8z1i5MzLbdzh6cfZYKdSfGj9FwR119GFVMVrLBH

3P4PCxsJqMzQBALo8zANHtBDZRRquobHQp7:  -0.14000000 Waves

2022.06.26 11:20 [3178746] smart account 3P4PCxsJqMzQBALo8zANHtBDZRRquobHQp7 > SELF 0.00000000 Waves

{ "type": 13, "id": "DxWGX8z1i5MzLbdzh6cfZYKdSfGj9FwR119GFVMVrLBH", "fee": 14000000, "feeAssetId": null, "timestamp": 1656234192523, "version": 1, "sender": "3P4PCxsJqMzQBALo8zANHtBDZRRquobHQp7", "senderPublicKey": "H8Gooqgk4486MkqEQVwACpgoyEjt5Px4eskysnEDZ1nR", "proofs": [ "5VEVnTUQAHEkUtujYwEamnNyNgCmSMs5j1hcwkLt5vkm5zoXYZtkVDjeyrtZAUXrSESQbVSvtgyuusrkfbBYprxZ", "55XVKzKbEhjtoeEuntcYvya7YCbhvaZD7iTByJGpnTnfQ4FyCkfUdBLVPnATfC5C77VjToUNd9HpiqEuQWXsjVuW", "5iqngfTcGS6Ch2pRJdbV4Gmy8zuE1BDLMjYiuZsw1isqWjDopDL8DRSj8qA8ZhT17EjB9MkDfXywBX3unRLF3kuY", "4DBPczgvm7tHSAD5TBGewqcLjE21WY8WV9qxHNVVnFxz5itq4xfcD2x1AkZ5khMR5asuFKPRUySQ3iiw2kLGKhcM" ], "script": "base64:AAIEAAAAAAAAABEIAhIECgIBCBIAEgMKAQgSAAAAAD0AAAAAC3JldmlzaW9uTnVtAgAAAChiM2ZmNzQ3MmExZDU0YTlmMGM4ZjZkNjY2NWM0NDU4YzM2YTMxZTQ4AQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQAAAAAAAAAAAAEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkCAAAAAAEAAAAWZ2V0Qm9vbEJ5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5BwEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkCAAAAAAEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkAAAAAAAAAAAAAAAAAA1NFUAIAAAACX18AAAAAB1dBVkVMRVQAAAAAAAX14QAAAAAABVBBVUxJAAAAAAAAD0JAAAAAAAhQUklDRUxFVAAAAAAAAA9CQAAAAAAIQ0FOQ0VMRUQCAAAACGNhbmNlbGVkAAAAAANORVcCAAAAA25ldwAAAAAGRklMTEVEAgAAAAZmaWxsZWQAAAAAE05ldXRyaW5vQ29udHJhY3RLZXkCAAAAEW5ldXRyaW5vX2NvbnRyYWN0AAAAAAhQcmljZUtleQIAAAAFcHJpY2UAAAAADkJvbmRBc3NldElkS2V5AgAAAA1ib25kX2Fzc2V0X2lkAAAAABJOZXV0cmlub0Fzc2V0SWRLZXkCAAAAEW5ldXRyaW5vX2Fzc2V0X2lkAAAAABJDb250cm9sQ29udHJhY3RLZXkCAAAAEGNvbnRyb2xfY29udHJhY3QAAAAAEkF1Y3Rpb25Db250cmFjdEtleQIAAAAQYXVjdGlvbl9jb250cmFjdAAAAAARQmFsYW5jZUxvY2tlZGtLZXkCAAAADWJhbGFuY2VfbG9ja18AAAAAFVdhdmVzTG9ja2VkQmFsYW5jZUtleQkAASwAAAACBQAAABFCYWxhbmNlTG9ja2Vka0tleQIAAAAFd2F2ZXMAAAAAGE5ldXRyaW5vTG9ja2VkQmFsYW5jZUtleQkAASwAAAACBQAAABFCYWxhbmNlTG9ja2Vka0tleQIAAAAIbmV1dHJpbm8AAAAADUZpcnN0T3JkZXJLZXkCAAAAC29yZGVyX2ZpcnN0AAAAABZDdXJyZW50RGVmYXVsdE9yZGVyS2V5AgAAAA1vcmRlcl9kZWZhdWx0AQAAABBnZXRPcmRlclByaWNlS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAADG9yZGVyX3ByaWNlXwUAAAAHb3JkZXJJZAEAAAAQZ2V0T3JkZXJUb3RhbEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAAxvcmRlcl90b3RhbF8FAAAAB29yZGVySWQBAAAAEGdldE9yZGVyT3duZXJLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgIAAAAMb3JkZXJfb3duZXJfBQAAAAdvcmRlcklkAQAAABFnZXRPcmRlckhlaWdodEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAA1vcmRlcl9oZWlnaHRfBQAAAAdvcmRlcklkAQAAABFnZXRPcmRlclN0YXR1c0tleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAA1vcmRlcl9zdGF0dXNfBQAAAAdvcmRlcklkAQAAABZnZXRPcmRlckZpbGxlZFRvdGFsS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAAE29yZGVyX2ZpbGxlZF90b3RhbF8FAAAAB29yZGVySWQBAAAAD2dldFByZXZPcmRlcktleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAAtvcmRlcl9wcmV2XwUAAAAHb3JkZXJJZAEAAAAPZ2V0TmV4dE9yZGVyS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAAC29yZGVyX25leHRfBQAAAAdvcmRlcklkAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAABrAAAAAwkAAGsAAAADBQAAAAZhbW91bnQFAAAACFBSSUNFTEVUBQAAAAVwcmljZQUAAAAHV0FWRUxFVAUAAAAFUEFVTEkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACAAAABmFtb3VudAAAAAVwcmljZQkAAGsAAAADCQAAawAAAAMFAAAABmFtb3VudAUAAAAFcHJpY2UFAAAACFBSSUNFTEVUBQAAAAVQQVVMSQUAAAAHV0FWRUxFVAEAAAASY29udmVydFdhdmVzVG9Cb25kAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAGYW1vdW50BQAAAAVwcmljZQAAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAATTmV1dHJpbm9Db250cmFjdEtleQAAAAAPY29udHJvbENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAASQ29udHJvbENvbnRyYWN0S2V5AAAAAA9hdWN0aW9uQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAABJBdWN0aW9uQ29udHJhY3RLZXkAAAAAE2xpcXVpZGF0aW9uQ29udHJhY3QFAAAABHRoaXMAAAAAD25ldXRyaW5vQXNzZXRJZAkAAlkAAAABCQEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAASTmV1dHJpbm9Bc3NldElkS2V5AAAAAAtib25kQXNzZXRJZAkAAlkAAAABAgAAACw2blNwVnlOSDd5TTY5ZWc0NDZ3clFSOTRpcGJiY21aTVUxRU5Qd2FuQzk3ZwAAAAAKZmlyc3RPcmRlcgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAANRmlyc3RPcmRlcktleQAAAAAJaXNCbG9ja2VkCQEAAAAWZ2V0Qm9vbEJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAD2NvbnRyb2xDb250cmFjdAIAAAAKaXNfYmxvY2tlZAAAAAAMY3VycmVudFByaWNlCQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAPY29udHJvbENvbnRyYWN0BQAAAAhQcmljZUtleQAAAAAVbmV1dHJpbm9Mb2NrZWRCYWxhbmNlCQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAAYTmV1dHJpbm9Mb2NrZWRCYWxhbmNlS2V5AAAAABJ3YXZlc0xvY2tlZEJhbGFuY2UJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAABVXYXZlc0xvY2tlZEJhbGFuY2VLZXkAAAAAB3Jlc2VydmUJAABlAAAAAggJAAPvAAAAAQUAAAAQbmV1dHJpbm9Db250cmFjdAAAAAdyZWd1bGFyBQAAABJ3YXZlc0xvY2tlZEJhbGFuY2UAAAAADm5ldXRyaW5vU3VwcGx5CQAAZQAAAAIJAABlAAAAAgkAAGQAAAACBQAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEFAAAAD25ldXRyaW5vQXNzZXRJZAAAAAhxdWFudGl0eQkAA/AAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAAA9uZXV0cmlub0Fzc2V0SWQJAAPwAAAAAgUAAAATbGlxdWlkYXRpb25Db250cmFjdAUAAAAPbmV1dHJpbm9Bc3NldElkAAAAAAdzdXJwbHVzCQAAZQAAAAIJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAHcmVzZXJ2ZQUAAAAMY3VycmVudFByaWNlBQAAAA5uZXV0cmlub1N1cHBseQEAAAANZ2V0T3JkZXJQcmljZQAAAAEAAAACaWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABBnZXRPcmRlclByaWNlS2V5AAAAAQUAAAACaWQBAAAADWdldE9yZGVyVG90YWwAAAABAAAAAmlkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAQZ2V0T3JkZXJUb3RhbEtleQAAAAEFAAAAAmlkAQAAAA1nZXRPcmRlck93bmVyAAAAAQAAAAJpZAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEGdldE9yZGVyT3duZXJLZXkAAAABBQAAAAJpZAEAAAAOZ2V0T3JkZXJTdGF0dXMAAAABAAAAAmlkCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABBQAAAAJpZAEAAAATZ2V0T3JkZXJGaWxsZWRUb3RhbAAAAAEAAAACaWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABZnZXRPcmRlckZpbGxlZFRvdGFsS2V5AAAAAQUAAAACaWQBAAAADmdldE9yZGVySGVpZ2h0AAAAAQAAAAJpZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEWdldE9yZGVySGVpZ2h0S2V5AAAAAQUAAAACaWQBAAAADGdldFByZXZPcmRlcgAAAAEAAAACaWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAA9nZXRQcmV2T3JkZXJLZXkAAAABBQAAAAJpZAEAAAAMZ2V0TmV4dE9yZGVyAAAAAQAAAAJpZAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAD2dldE5leHRPcmRlcktleQAAAAEFAAAAAmlkAAAAABNjdXJyZW50RGVmYXVsdE9yZGVyCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAABZDdXJyZW50RGVmYXVsdE9yZGVyS2V5AQAAABtnZW5lcmF0ZURhdGFFbnRyeVRvQWRkT3JkZXIAAAAGAAAABXByaWNlAAAACm5ld09yZGVySWQAAAABaQAAAAlwcmV2T3JkZXIAAAAJbmV4dE9yZGVyAAAACmZpcnN0T3JkZXIEAAAABmFtb3VudAgJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50BAAAABBpc09uZUZvck9uZU9yZGVyCQAAAAAAAAIFAAAABXByaWNlAAAAAAAAAABkBAAAABBpc0ZpcnN0T3JkZXJFbXR5CQAAAAAAAAIFAAAACmZpcnN0T3JkZXICAAAAAAQAAAApaXNOZXdPcmRlclByaWNlTG93ZXJUaGFuQ3VycmVudEZpcnN0T3JkZXIJAABmAAAAAgkBAAAADWdldE9yZGVyUHJpY2UAAAABBQAAAApmaXJzdE9yZGVyBQAAAAVwcmljZQQAAAANbmV3Rmlyc3RPcmRlcgMFAAAAEGlzRmlyc3RPcmRlckVtdHkFAAAACm5ld09yZGVySWQDBQAAAClpc05ld09yZGVyUHJpY2VMb3dlclRoYW5DdXJyZW50Rmlyc3RPcmRlcgUAAAAKbmV3T3JkZXJJZAUAAAAKZmlyc3RPcmRlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPZ2V0UHJldk9yZGVyS2V5AAAAAQUAAAAKbmV3T3JkZXJJZAUAAAAJcHJldk9yZGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9nZXROZXh0T3JkZXJLZXkAAAABBQAAAApuZXdPcmRlcklkBQAAAAluZXh0T3JkZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2dldE5leHRPcmRlcktleQAAAAEFAAAACXByZXZPcmRlcgMJAAAAAAAAAgUAAAAJcHJldk9yZGVyAgAAAAAFAAAACXByZXZPcmRlcgUAAAAKbmV3T3JkZXJJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPZ2V0UHJldk9yZGVyS2V5AAAAAQUAAAAJbmV4dE9yZGVyAwkAAAAAAAACBQAAAAluZXh0T3JkZXICAAAAAAUAAAAJbmV4dE9yZGVyBQAAAApuZXdPcmRlcklkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADUZpcnN0T3JkZXJLZXkFAAAADW5ld0ZpcnN0T3JkZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABBnZXRPcmRlclByaWNlS2V5AAAAAQUAAAAKbmV3T3JkZXJJZAUAAAAFcHJpY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABBnZXRPcmRlclRvdGFsS2V5AAAAAQUAAAAKbmV3T3JkZXJJZAUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBnZXRPcmRlck93bmVyS2V5AAAAAQUAAAAKbmV3T3JkZXJJZAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABFnZXRPcmRlckhlaWdodEtleQAAAAEFAAAACm5ld09yZGVySWQFAAAABmhlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABBQAAAApuZXdPcmRlcklkBQAAAANORVcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAWQ3VycmVudERlZmF1bHRPcmRlcktleQMFAAAAEGlzT25lRm9yT25lT3JkZXIFAAAACm5ld09yZGVySWQFAAAAE2N1cnJlbnREZWZhdWx0T3JkZXIFAAAAA25pbAEAAAAbaW50ZXJuYWxBZGRMaXF1aWRhdGlvbk9yZGVyAAAAAwAAAAFpAAAABXByaWNlAAAACXByZXZPcmRlcgQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAApuZXdPcmRlcklkCQACWAAAAAEJAAH1AAAAAQkAAMsAAAACCQAAywAAAAIJAADLAAAAAgkAAZoAAAABCAUAAAADcG10AAAABmFtb3VudAgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwkAAZoAAAABBQAAAAZoZWlnaHQIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQEAAAABW93bmVyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAQaXNFbXB0eVByZXZPcmRlcgkAAAAAAAACBQAAAAlwcmV2T3JkZXICAAAAAAQAAAARaXNFbXB0eUZpcnN0T3JkZXIJAAAAAAAAAgUAAAAKZmlyc3RPcmRlcgIAAAAAAwUAAAAJaXNCbG9ja2VkCQAAAgAAAAECAAAAWWNvbnRyYWN0IGlzIGJsb2NrZWQgYnkgRU1FUkdFTkNZIFNIVVRET1dOIGFjdGlvbnMgdW50aWwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAwkAAGYAAAACBQAAAAVQQVVMSQgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQIAAAApb3JkZXIgYW1vdW50IHNob3VsZCBiZSBoaWdoZXIgdGhhbiAxIE5TQlQDCQAAZgAAAAIAAAAAAAAAAGQFAAAABXByaWNlCQAAAgAAAAEJAAEsAAAAAgIAAABMcHJpY2Ugc2hvdWxkIGJlIGVxdWFsIG9yIGhpZ2hlciB0aGFuIDEgbnNidCBmb3IgMSB1c2RuLiBpLmUuID49IDEwMDsgcHJpY2U6IAkAAaQAAAABBQAAAAVwcmljZQMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAALYm9uZEFzc2V0SWQJAAACAAAAAQIAAAA0Y2FuIHVzZSBhcHByb3ByaWF0ZSBuZXV0cmlubyBiYXNlIHRva2VucyAobnNidCkgb25seQMJAQAAAAIhPQAAAAIJAQAAAA1nZXRPcmRlck93bmVyAAAAAQUAAAAKbmV3T3JkZXJJZAIAAAAACQAAAgAAAAECAAAAGHRoZSBvcmRlciBhbHJlYWR5IGV4aXN0cwMDCQEAAAABIQAAAAEFAAAAEGlzRW1wdHlQcmV2T3JkZXIJAQAAAAIhPQAAAAIJAQAAAA5nZXRPcmRlclN0YXR1cwAAAAEFAAAACXByZXZPcmRlcgUAAAADTkVXBwkAAAIAAAABAgAAABxwcmV2IG9yZGVyIHN0YXR1cyBpcyBub3QgbmV3AwMFAAAAEWlzRW1wdHlGaXJzdE9yZGVyCQEAAAABIQAAAAEFAAAAEGlzRW1wdHlQcmV2T3JkZXIHCQAAAgAAAAECAAAAGndyb25nIHByZXYgb3JkZXIgcGFyYW1ldGVyBAAAAAluZXh0T3JkZXIDBQAAABBpc0VtcHR5UHJldk9yZGVyBQAAAApmaXJzdE9yZGVyCQEAAAAMZ2V0TmV4dE9yZGVyAAAAAQUAAAAJcHJldk9yZGVyBAAAABBpc0VtcHR5TmV4dE9yZGVyCQAAAAAAAAIFAAAACW5leHRPcmRlcgIAAAAAAwUAAAARaXNFbXB0eUZpcnN0T3JkZXIJAQAAABtnZW5lcmF0ZURhdGFFbnRyeVRvQWRkT3JkZXIAAAAGBQAAAAVwcmljZQUAAAAKbmV3T3JkZXJJZAUAAAABaQUAAAAJcHJldk9yZGVyBQAAAAluZXh0T3JkZXIFAAAACmZpcnN0T3JkZXIEAAAADm5leHRPcmRlclByaWNlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAQZ2V0T3JkZXJQcmljZUtleQAAAAEFAAAACW5leHRPcmRlcgQAAAAOcHJldk9yZGVyUHJpY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABBnZXRPcmRlclByaWNlS2V5AAAAAQUAAAAJcHJldk9yZGVyBAAAABBpc05leHRPcmRlckVycm9yAwkBAAAAASEAAAABBQAAABBpc0VtcHR5TmV4dE9yZGVyCQAAZwAAAAIFAAAABXByaWNlBQAAAA5uZXh0T3JkZXJQcmljZQcEAAAAEGlzUHJldk9yZGVyRXJyb3IDCQEAAAABIQAAAAEFAAAAEGlzRW1wdHlQcmV2T3JkZXIJAABmAAAAAgUAAAAOcHJldk9yZGVyUHJpY2UFAAAABXByaWNlBwMDBQAAABBpc05leHRPcmRlckVycm9yBgUAAAAQaXNQcmV2T3JkZXJFcnJvcgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB9pbnZhbGlkIG9yZGVyIGlzUHJldk9yZGVyRXJyb3I6CQABpQAAAAEFAAAAEGlzUHJldk9yZGVyRXJyb3ICAAAAEiBpc05leHRPcmRlckVycm9yOgkAAaUAAAABBQAAABBpc05leHRPcmRlckVycm9yCQEAAAAbZ2VuZXJhdGVEYXRhRW50cnlUb0FkZE9yZGVyAAAABgUAAAAFcHJpY2UFAAAACm5ld09yZGVySWQFAAAAAWkFAAAACXByZXZPcmRlcgUAAAAJbmV4dE9yZGVyBQAAAApmaXJzdE9yZGVyAQAAABpjb21wdXRlQ3VycmVudERlZmF1bHRPcmRlcgAAAAEAAAACaWQDCQEAAAACIT0AAAACBQAAAAJpZAUAAAATY3VycmVudERlZmF1bHRPcmRlcgUAAAATY3VycmVudERlZmF1bHRPcmRlcgIAAAAAAAAABAAAAAFpAQAAABxhZGRMaXF1aWRhdGlvbk9yZGVyV2l0aFByaWNlAAAAAgAAAAVwcmljZQAAAAlwcmV2T3JkZXIJAAACAAAAAQIAAABUTWV0aG9kIGhhcyBiZWVuIGRlcHJlY2F0ZWQ6IHBsZWFzZSB1c2UgYWRkTGlxdWlkYXRpb25PcmRlciBtZXRob2Qgd2l0aG91dCBwYXJhbWV0ZXJzAAAAAWkBAAAAE2FkZExpcXVpZGF0aW9uT3JkZXIAAAAACQEAAAAbaW50ZXJuYWxBZGRMaXF1aWRhdGlvbk9yZGVyAAAAAwUAAAABaQAAAAAAAAAAZAUAAAATY3VycmVudERlZmF1bHRPcmRlcgAAAAFpAQAAAAtjYW5jZWxPcmRlcgAAAAEAAAAHb3JkZXJJZAQAAAAFb3duZXIJAQAAAA1nZXRPcmRlck93bmVyAAAAAQUAAAAHb3JkZXJJZAQAAAAGYW1vdW50CQAAZQAAAAIJAQAAAA1nZXRPcmRlclRvdGFsAAAAAQUAAAAHb3JkZXJJZAkBAAAAE2dldE9yZGVyRmlsbGVkVG90YWwAAAABBQAAAAdvcmRlcklkBAAAAAZjYWxsZXIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAluZXh0T3JkZXIJAQAAAAxnZXROZXh0T3JkZXIAAAABBQAAAAdvcmRlcklkBAAAAAlwcmV2T3JkZXIJAQAAAAxnZXRQcmV2T3JkZXIAAAABBQAAAAdvcmRlcklkBAAAAA5pc0RlZmF1bHRPcmRlcgkAAAAAAAACBQAAAAdvcmRlcklkBQAAABNjdXJyZW50RGVmYXVsdE9yZGVyBAAAABZpc1ByZXZDYW5CZWNvbWVEZWZhdWx0CQAAAAAAAAIJAQAAAA5nZXRPcmRlclN0YXR1cwAAAAEFAAAACXByZXZPcmRlcgUAAAADTkVXBAAAAA9uZXdEZWZhdWx0T3JkZXIDBQAAAA5pc0RlZmF1bHRPcmRlcgMFAAAAFmlzUHJldkNhbkJlY29tZURlZmF1bHQFAAAACXByZXZPcmRlcgIAAAAABQAAABNjdXJyZW50RGVmYXVsdE9yZGVyAwUAAAAJaXNCbG9ja2VkCQAAAgAAAAECAAAAWWNvbnRyYWN0IGlzIGJsb2NrZWQgYnkgRU1FUkdFTkNZIFNIVVRET1dOIGFjdGlvbnMgdW50aWwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAwkBAAAAAiE9AAAAAgUAAAAFb3duZXIFAAAABmNhbGxlcgkAAAIAAAABAgAAABFwZXJtaXNzaW9uIGRlbmllZAMJAQAAAAIhPQAAAAIJAQAAAA5nZXRPcmRlclN0YXR1cwAAAAEFAAAAB29yZGVySWQFAAAAA05FVwkAAAIAAAABAgAAABRpbnZhbGlkIG9yZGVyIHN0YXR1cwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABZDdXJyZW50RGVmYXVsdE9yZGVyS2V5BQAAAA9uZXdEZWZhdWx0T3JkZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANRmlyc3RPcmRlcktleQMJAAAAAAAAAgUAAAAKZmlyc3RPcmRlcgUAAAAHb3JkZXJJZAUAAAAJbmV4dE9yZGVyBQAAAApmaXJzdE9yZGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9nZXROZXh0T3JkZXJLZXkAAAABBQAAAAlwcmV2T3JkZXIFAAAACW5leHRPcmRlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPZ2V0UHJldk9yZGVyS2V5AAAAAQUAAAAJbmV4dE9yZGVyBQAAAAlwcmV2T3JkZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWdldE9yZGVyU3RhdHVzS2V5AAAAAQUAAAAHb3JkZXJJZAUAAAAIQ0FOQ0VMRUQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAZhbW91bnQFAAAAC2JvbmRBc3NldElkBQAAAANuaWwAAAABaQEAAAANbGlxdWlkYXRlQm9uZAAAAAAEAAAAEmxpcXVpZGF0aW9uQmFsYW5jZQkAA/AAAAACBQAAAAR0aGlzBQAAAA9uZXV0cmlub0Fzc2V0SWQEAAAAD3N1cnBsdXNQb3NpdGl2ZQMJAABnAAAAAgAAAAAAAAAAAAUAAAAHc3VycGx1cwAAAAAAAAAAAAUAAAAHc3VycGx1cwQAAAAKdXNkbkFtb3VudAMJAABnAAAAAgUAAAAPc3VycGx1c1Bvc2l0aXZlBQAAABJsaXF1aWRhdGlvbkJhbGFuY2UFAAAAEmxpcXVpZGF0aW9uQmFsYW5jZQUAAAAPc3VycGx1c1Bvc2l0aXZlBAAAAAxyZXR1cm5BbW91bnQDCQAAZwAAAAIFAAAAD3N1cnBsdXNQb3NpdGl2ZQUAAAASbGlxdWlkYXRpb25CYWxhbmNlAAAAAAAAAAAACQAAZQAAAAIFAAAAEmxpcXVpZGF0aW9uQmFsYW5jZQUAAAAPc3VycGx1c1Bvc2l0aXZlAwUAAAAJaXNCbG9ja2VkCQAAAgAAAAECAAAAWWNvbnRyYWN0IGlzIGJsb2NrZWQgYnkgRU1FUkdFTkNZIFNIVVRET1dOIGFjdGlvbnMgdW50aWwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAwkAAAAAAAACBQAAABJsaXF1aWRhdGlvbkJhbGFuY2UAAAAAAAAAAAAJAAACAAAAAQIAAAAgd2l0aG91dCBiYXNlIHRva2VucyB0byBsaXF1aWRhdGUDCQAAZgAAAAIFAAAADHJldHVybkFtb3VudAAAAAAAAAAAAAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAAAxyZXR1cm5BbW91bnQFAAAAD25ldXRyaW5vQXNzZXRJZAUAAAADbmlsAwkAAAAAAAACBQAAAApmaXJzdE9yZGVyAgAAAAAJAAACAAAAAQIAAAAPZW1wdHkgb3JkZXJib29rBAAAAAluZXh0T3JkZXIJAQAAAAxnZXROZXh0T3JkZXIAAAABBQAAAApmaXJzdE9yZGVyBAAAAAtmaWxsZWRUb3RhbAkBAAAAE2dldE9yZGVyRmlsbGVkVG90YWwAAAABBQAAAApmaXJzdE9yZGVyBAAAAA5uc2J0MlVzZG5QcmljZQkBAAAADWdldE9yZGVyUHJpY2UAAAABBQAAAApmaXJzdE9yZGVyBAAAAA1yZW1haW5lZFRvdGFsCQAAZQAAAAIJAQAAAA1nZXRPcmRlclRvdGFsAAAAAQUAAAAKZmlyc3RPcmRlcgUAAAALZmlsbGVkVG90YWwEAAAAIHRvdGFsVVNETlJlcXVpcmVkVG9GaWxsT3JkZXJYMTAwCQAAawAAAAMFAAAADXJlbWFpbmVkVG90YWwFAAAADm5zYnQyVXNkblByaWNlAAAAAAAAAAABBAAAABx0b3RhbFVTRE5SZXF1aXJlZFRvRmlsbE9yZGVyCQAAaQAAAAIFAAAAIHRvdGFsVVNETlJlcXVpcmVkVG9GaWxsT3JkZXJYMTAwAAAAAAAAAABkBAAAABNpc09yZGVyRnVsbHlGaWxhYmxlCQAAZwAAAAIFAAAACnVzZG5BbW91bnQFAAAAHHRvdGFsVVNETlJlcXVpcmVkVG9GaWxsT3JkZXIEAAAAF2ZpbGxhYmxlT3JkZXJBbW91bnRYMTAwAwUAAAATaXNPcmRlckZ1bGx5RmlsYWJsZQUAAAAgdG90YWxVU0ROUmVxdWlyZWRUb0ZpbGxPcmRlclgxMDAJAABoAAAAAgUAAAAKdXNkbkFtb3VudAAAAAAAAAAAZAQAAAAQZmluYWxOQlRGaWxsYWJsZQkAAGsAAAADBQAAABdmaWxsYWJsZU9yZGVyQW1vdW50WDEwMAAAAAAAAAAAAQUAAAAObnNidDJVc2RuUHJpY2UEAAAAE2ZpbGxhYmxlT3JkZXJBbW91bnQJAABpAAAAAgUAAAAXZmlsbGFibGVPcmRlckFtb3VudFgxMDAAAAAAAAAAAGQEAAAAGm5iVG9rZW5zTGlxdWlkYXRlQ29uZGl0aW9uCQAAZwAAAAIJAABrAAAAAwkAAGQAAAACBQAAAAdzdXJwbHVzBQAAAA5uZXV0cmlub1N1cHBseQAAAAAAAAAAZAUAAAAObmV1dHJpbm9TdXBwbHkFAAAADm5zYnQyVXNkblByaWNlAwkBAAAAASEAAAABBQAAABpuYlRva2Vuc0xpcXVpZGF0ZUNvbmRpdGlvbgkAAAIAAAABCQABLAAAAAICAAAAF2lubmFwcm9wcmlhdGUgc3VycGx1czogCQABpAAAAAEFAAAAB3N1cnBsdXMEAAAAEmlzTm90aGluZ1RvRmlsbE5vdwkAAAAAAAACBQAAAA1yZW1haW5lZFRvdGFsAAAAAAAAAAAABAAAABRpc05vdGhpbmdUb0ZpbGxBdEFsbAkAAAAAAAACCQAAZAAAAAIFAAAAC2ZpbGxlZFRvdGFsBQAAABBmaW5hbE5CVEZpbGxhYmxlCQEAAAANZ2V0T3JkZXJUb3RhbAAAAAEFAAAACmZpcnN0T3JkZXIEAAAACW5ld1N0YXR1cwMDBQAAABNpc09yZGVyRnVsbHlGaWxhYmxlAwUAAAASaXNOb3RoaW5nVG9GaWxsTm93BgUAAAAUaXNOb3RoaW5nVG9GaWxsQXRBbGwHBQAAAAZGSUxMRUQFAAAAA05FVwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPZ2V0UHJldk9yZGVyS2V5AAAAAQUAAAAJbmV4dE9yZGVyAwkAAAAAAAACBQAAAAluZXdTdGF0dXMFAAAABkZJTExFRAIAAAAABQAAAApmaXJzdE9yZGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADUZpcnN0T3JkZXJLZXkDCQAAAAAAAAIFAAAACW5ld1N0YXR1cwUAAAAGRklMTEVEBQAAAAluZXh0T3JkZXIFAAAACmZpcnN0T3JkZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZnZXRPcmRlckZpbGxlZFRvdGFsS2V5AAAAAQUAAAAKZmlyc3RPcmRlcgkAAGQAAAACBQAAAAtmaWxsZWRUb3RhbAUAAAAQZmluYWxOQlRGaWxsYWJsZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABBQAAAApmaXJzdE9yZGVyBQAAAAluZXdTdGF0dXMJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAWQ3VycmVudERlZmF1bHRPcmRlcktleQMJAAAAAAAAAgUAAAAJbmV3U3RhdHVzBQAAAANORVcFAAAAE2N1cnJlbnREZWZhdWx0T3JkZXIJAQAAABpjb21wdXRlQ3VycmVudERlZmF1bHRPcmRlcgAAAAEFAAAACmZpcnN0T3JkZXIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAADWdldE9yZGVyT3duZXIAAAABBQAAAApmaXJzdE9yZGVyBQAAABNmaWxsYWJsZU9yZGVyQW1vdW50BQAAAA9uZXV0cmlub0Fzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAPYXVjdGlvbkNvbnRyYWN0BQAAABBmaW5hbE5CVEZpbGxhYmxlBQAAAAtib25kQXNzZXRJZAUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAATcHViS2V5QWRtaW5zTGlzdFN0cgkABLkAAAACCQAETAAAAAICAAAALEdKZExTYUxpdjVLN3h1ZWphYzhtY1JjSG95bzNkUHJFU3J2a3RHM2E2TUFSCQAETAAAAAICAAAALEVZd1ptVVJkNUtLYVFSQmpzVmE2ZzhEUGlzRm9TNlNvdlJKdEZpTDVnTUhVCQAETAAAAAICAAAALER0bUFmdURkQ3JISzhzcGRBZUFZenE2TXNaZWdlRDlnbnNycHVUUmtDYlZBCQAETAAAAAICAAAALDVXUlhGU2p3Y1RiTmZLY0pzOFpxWG1TU1dZc1NWSlV0TXZNcVpqNWhINE5jBQAAAANuaWwFAAAAA1NFUAQAAAAQcHViS2V5QWRtaW5zTGlzdAkABLUAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAAD2NvbnRyb2xDb250cmFjdAIAAAAMJXNfX211bHRpc2lnBQAAABNwdWJLZXlBZG1pbnNMaXN0U3RyBQAAAANTRVAEAAAABWNvdW50CQAAZAAAAAIJAABkAAAAAgkAAGQAAAACAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAEJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAABAAAAAAAAAAABAAAAAAAAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAIJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAACAAAAAAAAAAABAAAAAAAAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAMJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAADAAAAAAAAAAACAAAAAAAAAAAACQAAZwAAAAIFAAAABWNvdW50AAAAAAAAAAADPF3ceQ==", "chainId": 87, "height": 3178746, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 94SdDqDtnQB83EEpWpLHKs1p47UEh2A1MNfhvBtjFTBv Next: none Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let revisionNum = "b3ff7472a1d54a9f0c8f6d6665c4458c36a31e48"
55
66 func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0)
77
88
99 func getStringByKey (key) = valueOrElse(getString(this, key), "")
1010
1111
1212 func getBoolByAddressAndKey (address,key) = valueOrElse(getBoolean(address, key), false)
1313
1414
1515 func getStringByAddressAndKey (address,key) = valueOrElse(getString(address, key), "")
1616
1717
1818 func getNumberByAddressAndKey (address,key) = valueOrElse(getInteger(address, key), 0)
1919
2020
2121 let SEP = "__"
2222
2323 let WAVELET = 100000000
2424
2525 let PAULI = 1000000
2626
2727 let PRICELET = 1000000
2828
2929 let CANCELED = "canceled"
3030
3131 let NEW = "new"
3232
3333 let FILLED = "filled"
3434
3535 let NeutrinoContractKey = "neutrino_contract"
3636
3737 let PriceKey = "price"
3838
3939 let BondAssetIdKey = "bond_asset_id"
4040
4141 let NeutrinoAssetIdKey = "neutrino_asset_id"
4242
4343 let ControlContractKey = "control_contract"
4444
4545 let AuctionContractKey = "auction_contract"
4646
4747 let BalanceLockedkKey = "balance_lock_"
4848
4949 let WavesLockedBalanceKey = (BalanceLockedkKey + "waves")
5050
5151 let NeutrinoLockedBalanceKey = (BalanceLockedkKey + "neutrino")
5252
5353 let FirstOrderKey = "order_first"
5454
5555 let CurrentDefaultOrderKey = "order_default"
5656
5757 func getOrderPriceKey (orderId) = ("order_price_" + orderId)
5858
5959
6060 func getOrderTotalKey (orderId) = ("order_total_" + orderId)
6161
6262
6363 func getOrderOwnerKey (orderId) = ("order_owner_" + orderId)
6464
6565
6666 func getOrderHeightKey (orderId) = ("order_height_" + orderId)
6767
6868
6969 func getOrderStatusKey (orderId) = ("order_status_" + orderId)
7070
7171
7272 func getOrderFilledTotalKey (orderId) = ("order_filled_total_" + orderId)
7373
7474
7575 func getPrevOrderKey (orderId) = ("order_prev_" + orderId)
7676
7777
7878 func getNextOrderKey (orderId) = ("order_next_" + orderId)
7979
8080
8181 func convertNeutrinoToWaves (amount,price) = fraction(fraction(amount, PRICELET, price), WAVELET, PAULI)
8282
8383
8484 func convertWavesToNeutrino (amount,price) = fraction(fraction(amount, price, PRICELET), PAULI, WAVELET)
8585
8686
8787 func convertWavesToBond (amount,price) = convertWavesToNeutrino(amount, price)
8888
8989
9090 let neutrinoContract = addressFromStringValue(getStringByKey(NeutrinoContractKey))
9191
9292 let controlContract = addressFromStringValue(getStringByAddressAndKey(neutrinoContract, ControlContractKey))
9393
9494 let auctionContract = addressFromStringValue(getStringByAddressAndKey(neutrinoContract, AuctionContractKey))
9595
9696 let liquidationContract = this
9797
9898 let neutrinoAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, NeutrinoAssetIdKey))
9999
100100 let bondAssetId = fromBase58String("6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g")
101101
102102 let firstOrder = getStringByKey(FirstOrderKey)
103103
104104 let isBlocked = getBoolByAddressAndKey(controlContract, "is_blocked")
105105
106106 let currentPrice = getNumberByAddressAndKey(controlContract, PriceKey)
107107
108108 let neutrinoLockedBalance = getNumberByAddressAndKey(neutrinoContract, NeutrinoLockedBalanceKey)
109109
110110 let wavesLockedBalance = getNumberByAddressAndKey(neutrinoContract, WavesLockedBalanceKey)
111111
112112 let reserve = (wavesBalance(neutrinoContract).regular - wavesLockedBalance)
113113
114114 let neutrinoSupply = (((neutrinoLockedBalance + value(assetInfo(neutrinoAssetId)).quantity) - assetBalance(neutrinoContract, neutrinoAssetId)) - assetBalance(liquidationContract, neutrinoAssetId))
115115
116116 let surplus = (convertWavesToNeutrino(reserve, currentPrice) - neutrinoSupply)
117117
118118 func getOrderPrice (id) = getNumberByKey(getOrderPriceKey(id))
119119
120120
121121 func getOrderTotal (id) = getNumberByKey(getOrderTotalKey(id))
122122
123123
124124 func getOrderOwner (id) = getStringByKey(getOrderOwnerKey(id))
125125
126126
127127 func getOrderStatus (id) = getStringByKey(getOrderStatusKey(id))
128128
129129
130130 func getOrderFilledTotal (id) = getNumberByKey(getOrderFilledTotalKey(id))
131131
132132
133133 func getOrderHeight (id) = getNumberByKey(getOrderHeightKey(id))
134134
135135
136136 func getPrevOrder (id) = getStringByKey(getPrevOrderKey(id))
137137
138138
139139 func getNextOrder (id) = getStringByKey(getNextOrderKey(id))
140140
141141
142142 let currentDefaultOrder = getStringByKey(CurrentDefaultOrderKey)
143143
144144 func generateDataEntryToAddOrder (price,newOrderId,i,prevOrder,nextOrder,firstOrder) = {
145145 let amount = value(i.payments[0]).amount
146146 let isOneForOneOrder = (price == 100)
147147 let isFirstOrderEmty = (firstOrder == "")
148148 let isNewOrderPriceLowerThanCurrentFirstOrder = (getOrderPrice(firstOrder) > price)
149149 let newFirstOrder = if (isFirstOrderEmty)
150150 then newOrderId
151151 else if (isNewOrderPriceLowerThanCurrentFirstOrder)
152152 then newOrderId
153153 else firstOrder
154154 [StringEntry(getPrevOrderKey(newOrderId), prevOrder), StringEntry(getNextOrderKey(newOrderId), nextOrder), StringEntry(getNextOrderKey(prevOrder), if ((prevOrder == ""))
155155 then prevOrder
156156 else newOrderId), StringEntry(getPrevOrderKey(nextOrder), if ((nextOrder == ""))
157157 then nextOrder
158158 else newOrderId), StringEntry(FirstOrderKey, newFirstOrder), IntegerEntry(getOrderPriceKey(newOrderId), price), IntegerEntry(getOrderTotalKey(newOrderId), amount), StringEntry(getOrderOwnerKey(newOrderId), toString(i.caller)), IntegerEntry(getOrderHeightKey(newOrderId), height), StringEntry(getOrderStatusKey(newOrderId), NEW), StringEntry(CurrentDefaultOrderKey, if (isOneForOneOrder)
159159 then newOrderId
160160 else currentDefaultOrder)]
161161 }
162162
163163
164164 func internalAddLiquidationOrder (i,price,prevOrder) = {
165165 let pmt = value(i.payments[0])
166166 let newOrderId = toBase58String(keccak256((((toBytes(pmt.amount) + i.caller.bytes) + toBytes(height)) + i.transactionId)))
167167 let owner = toString(i.caller)
168168 let isEmptyPrevOrder = (prevOrder == "")
169169 let isEmptyFirstOrder = (firstOrder == "")
170170 if (isBlocked)
171171 then throw("contract is blocked by EMERGENCY SHUTDOWN actions until reactivation by emergency oracles")
172172 else if ((PAULI > pmt.amount))
173173 then throw("order amount should be higher than 1 NSBT")
174174 else if ((100 > price))
175175 then throw(("price should be equal or higher than 1 nsbt for 1 usdn. i.e. >= 100; price: " + toString(price)))
176176 else if ((pmt.assetId != bondAssetId))
177177 then throw("can use appropriate neutrino base tokens (nsbt) only")
178178 else if ((getOrderOwner(newOrderId) != ""))
179179 then throw("the order already exists")
180180 else if (if (!(isEmptyPrevOrder))
181181 then (getOrderStatus(prevOrder) != NEW)
182182 else false)
183183 then throw("prev order status is not new")
184184 else if (if (isEmptyFirstOrder)
185185 then !(isEmptyPrevOrder)
186186 else false)
187187 then throw("wrong prev order parameter")
188188 else {
189189 let nextOrder = if (isEmptyPrevOrder)
190190 then firstOrder
191191 else getNextOrder(prevOrder)
192192 let isEmptyNextOrder = (nextOrder == "")
193193 if (isEmptyFirstOrder)
194194 then generateDataEntryToAddOrder(price, newOrderId, i, prevOrder, nextOrder, firstOrder)
195195 else {
196196 let nextOrderPrice = getNumberByKey(getOrderPriceKey(nextOrder))
197197 let prevOrderPrice = getNumberByKey(getOrderPriceKey(prevOrder))
198198 let isNextOrderError = if (!(isEmptyNextOrder))
199199 then (price >= nextOrderPrice)
200200 else false
201201 let isPrevOrderError = if (!(isEmptyPrevOrder))
202202 then (prevOrderPrice > price)
203203 else false
204204 if (if (isNextOrderError)
205205 then true
206206 else isPrevOrderError)
207207 then throw(((("invalid order isPrevOrderError:" + toString(isPrevOrderError)) + " isNextOrderError:") + toString(isNextOrderError)))
208208 else generateDataEntryToAddOrder(price, newOrderId, i, prevOrder, nextOrder, firstOrder)
209209 }
210210 }
211211 }
212212
213213
214214 func computeCurrentDefaultOrder (id) = if ((id != currentDefaultOrder))
215215 then currentDefaultOrder
216216 else ""
217217
218218
219219 @Callable(i)
220220 func addLiquidationOrderWithPrice (price,prevOrder) = throw("Method has been deprecated: please use addLiquidationOrder method without parameters")
221221
222222
223223
224224 @Callable(i)
225225 func addLiquidationOrder () = internalAddLiquidationOrder(i, 100, currentDefaultOrder)
226226
227227
228228
229229 @Callable(i)
230230 func cancelOrder (orderId) = {
231231 let owner = getOrderOwner(orderId)
232232 let amount = (getOrderTotal(orderId) - getOrderFilledTotal(orderId))
233233 let caller = toString(i.caller)
234234 let nextOrder = getNextOrder(orderId)
235235 let prevOrder = getPrevOrder(orderId)
236236 let isDefaultOrder = (orderId == currentDefaultOrder)
237237 let isPrevCanBecomeDefault = (getOrderStatus(prevOrder) == NEW)
238238 let newDefaultOrder = if (isDefaultOrder)
239239 then if (isPrevCanBecomeDefault)
240240 then prevOrder
241241 else ""
242242 else currentDefaultOrder
243243 if (isBlocked)
244244 then throw("contract is blocked by EMERGENCY SHUTDOWN actions until reactivation by emergency oracles")
245245 else if ((owner != caller))
246246 then throw("permission denied")
247247 else if ((getOrderStatus(orderId) != NEW))
248248 then throw("invalid order status")
249249 else [StringEntry(CurrentDefaultOrderKey, newDefaultOrder), StringEntry(FirstOrderKey, if ((firstOrder == orderId))
250250 then nextOrder
251251 else firstOrder), StringEntry(getNextOrderKey(prevOrder), nextOrder), StringEntry(getPrevOrderKey(nextOrder), prevOrder), StringEntry(getOrderStatusKey(orderId), CANCELED), ScriptTransfer(i.caller, amount, bondAssetId)]
252252 }
253253
254254
255255
256256 @Callable(i)
257257 func liquidateBond () = {
258258 let liquidationBalance = assetBalance(this, neutrinoAssetId)
259259 let surplusPositive = if ((0 >= surplus))
260260 then 0
261261 else surplus
262262 let usdnAmount = if ((surplusPositive >= liquidationBalance))
263263 then liquidationBalance
264264 else surplusPositive
265265 let returnAmount = if ((surplusPositive >= liquidationBalance))
266266 then 0
267267 else (liquidationBalance - surplusPositive)
268268 if (isBlocked)
269269 then throw("contract is blocked by EMERGENCY SHUTDOWN actions until reactivation by emergency oracles")
270270 else if ((liquidationBalance == 0))
271271 then throw("without base tokens to liquidate")
272272 else if ((returnAmount > 0))
273273 then [ScriptTransfer(neutrinoContract, returnAmount, neutrinoAssetId)]
274274 else if ((firstOrder == ""))
275275 then throw("empty orderbook")
276276 else {
277277 let nextOrder = getNextOrder(firstOrder)
278278 let filledTotal = getOrderFilledTotal(firstOrder)
279279 let nsbt2UsdnPrice = getOrderPrice(firstOrder)
280280 let remainedTotal = (getOrderTotal(firstOrder) - filledTotal)
281281 let totalUSDNRequiredToFillOrderX100 = fraction(remainedTotal, nsbt2UsdnPrice, 1)
282282 let totalUSDNRequiredToFillOrder = (totalUSDNRequiredToFillOrderX100 / 100)
283283 let isOrderFullyFilable = (usdnAmount >= totalUSDNRequiredToFillOrder)
284284 let fillableOrderAmountX100 = if (isOrderFullyFilable)
285285 then totalUSDNRequiredToFillOrderX100
286286 else (usdnAmount * 100)
287287 let finalNBTFillable = fraction(fillableOrderAmountX100, 1, nsbt2UsdnPrice)
288288 let fillableOrderAmount = (fillableOrderAmountX100 / 100)
289289 let nbTokensLiquidateCondition = (fraction((surplus + neutrinoSupply), 100, neutrinoSupply) >= nsbt2UsdnPrice)
290290 if (!(nbTokensLiquidateCondition))
291291 then throw(("innapropriate surplus: " + toString(surplus)))
292292 else {
293293 let isNothingToFillNow = (remainedTotal == 0)
294294 let isNothingToFillAtAll = ((filledTotal + finalNBTFillable) == getOrderTotal(firstOrder))
295295 let newStatus = if (if (isOrderFullyFilable)
296296 then if (isNothingToFillNow)
297297 then true
298298 else isNothingToFillAtAll
299299 else false)
300300 then FILLED
301301 else NEW
302302 [StringEntry(getPrevOrderKey(nextOrder), if ((newStatus == FILLED))
303303 then ""
304304 else firstOrder), StringEntry(FirstOrderKey, if ((newStatus == FILLED))
305305 then nextOrder
306306 else firstOrder), IntegerEntry(getOrderFilledTotalKey(firstOrder), (filledTotal + finalNBTFillable)), StringEntry(getOrderStatusKey(firstOrder), newStatus), StringEntry(CurrentDefaultOrderKey, if ((newStatus == NEW))
307307 then currentDefaultOrder
308308 else computeCurrentDefaultOrder(firstOrder)), ScriptTransfer(addressFromStringValue(getOrderOwner(firstOrder)), fillableOrderAmount, neutrinoAssetId), ScriptTransfer(auctionContract, finalNBTFillable, bondAssetId)]
309309 }
310310 }
311311 }
312312
313313
314314 @Verifier(tx)
315315 func verify () = {
316316 let pubKeyAdminsListStr = makeString(["GJdLSaLiv5K7xuejac8mcRcHoyo3dPrESrvktG3a6MAR", "EYwZmURd5KKaQRBjsVa6g8DPisFoS6SovRJtFiL5gMHU", "DtmAfuDdCrHK8spdAeAYzq6MsZegeD9gnsrpuTRkCbVA", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"], SEP)
317317 let pubKeyAdminsList = split(valueOrElse(getString(controlContract, "%s__multisig"), pubKeyAdminsListStr), SEP)
318318 let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
319319 then 1
320320 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
321321 then 1
322322 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
323323 then 1
324324 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[3], fromBase58String(pubKeyAdminsList[3])))
325325 then 2
326326 else 0))
327327 (count >= 3)
328328 }
329329

github/deemru/w8io/3ef1775 
41.65 ms