tx · CbuxTXgujJpCcxsWrCB5c8yy6653gmqZrQPpTe6hQc3q

3N5nmMvMH8o3RPEyCKCaoWahBTYTexnZy62:  -0.02000000 Waves

2021.01.22 19:18 [1364906] smart account 3N5nmMvMH8o3RPEyCKCaoWahBTYTexnZy62 > SELF 0.00000000 Waves

{ "type": 13, "id": "CbuxTXgujJpCcxsWrCB5c8yy6653gmqZrQPpTe6hQc3q", "fee": 2000000, "feeAssetId": null, "timestamp": 1611332283609, "version": 1, "sender": "3N5nmMvMH8o3RPEyCKCaoWahBTYTexnZy62", "senderPublicKey": "6PBV8fVJwLaUQbCyG7iqoKR3x1nqFRZFNeuN9qodoiTu", "proofs": [ "4gijk7EG1ukcmaw2E6BJQuWptjM4cxVENHujs5xXB7jvYRyh4sersr24Tfmeeh4sDKBPxJHLfazgBJr3hL9h5sKF", "64bifFtpFz8YHEFAy52vHdn6bKd4NDboXs4eNinVB9vwsLkCB7hP1mUDspDrBuSHBTkUhxpZxG3YdKbhjBokRM7p", "33ohysNDNhMJzNc6ZTr1xZYh7aVzKkjhpERnR9RinLwnQQ3ZpMc4hWbGuKKQMWWApY4Rjy9W5nFMw4qrk4iUwNMA" ], "script": "base64:AAIEAAAAAAAAABEIAhIECgIBCBIAEgMKAQgSAAAAADsBAAAADmdldE51bWJlckJ5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQIAAAAAAQAAABZnZXRCb29sQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkHAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQIAAAAAAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQAAAAAAAAAAAAAAAAAHV0FWRUxFVAAAAAAABfXhAAAAAAAFUEFVTEkAAAAAAAAPQkAAAAAACFBSSUNFTEVUAAAAAAAAD0JAAAAAAAhDQU5DRUxFRAIAAAAIY2FuY2VsZWQAAAAAA05FVwIAAAADbmV3AAAAAAZGSUxMRUQCAAAABmZpbGxlZAAAAAATTmV1dHJpbm9Db250cmFjdEtleQIAAAARbmV1dHJpbm9fY29udHJhY3QAAAAACFByaWNlS2V5AgAAAAVwcmljZQAAAAAOQm9uZEFzc2V0SWRLZXkCAAAADWJvbmRfYXNzZXRfaWQAAAAAEk5ldXRyaW5vQXNzZXRJZEtleQIAAAARbmV1dHJpbm9fYXNzZXRfaWQAAAAAEkNvbnRyb2xDb250cmFjdEtleQIAAAAQY29udHJvbF9jb250cmFjdAAAAAASQXVjdGlvbkNvbnRyYWN0S2V5AgAAABBhdWN0aW9uX2NvbnRyYWN0AAAAABFCYWxhbmNlTG9ja2Vka0tleQIAAAANYmFsYW5jZV9sb2NrXwAAAAAVV2F2ZXNMb2NrZWRCYWxhbmNlS2V5CQABLAAAAAIFAAAAEUJhbGFuY2VMb2NrZWRrS2V5AgAAAAV3YXZlcwAAAAAYTmV1dHJpbm9Mb2NrZWRCYWxhbmNlS2V5CQABLAAAAAIFAAAAEUJhbGFuY2VMb2NrZWRrS2V5AgAAAAhuZXV0cmlubwAAAAANRmlyc3RPcmRlcktleQIAAAALb3JkZXJfZmlyc3QAAAAAFkN1cnJlbnREZWZhdWx0T3JkZXJLZXkCAAAADW9yZGVyX2RlZmF1bHQBAAAAEGdldE9yZGVyUHJpY2VLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgIAAAAMb3JkZXJfcHJpY2VfBQAAAAdvcmRlcklkAQAAABBnZXRPcmRlclRvdGFsS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAADG9yZGVyX3RvdGFsXwUAAAAHb3JkZXJJZAEAAAAQZ2V0T3JkZXJPd25lcktleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAAxvcmRlcl9vd25lcl8FAAAAB29yZGVySWQBAAAAEWdldE9yZGVySGVpZ2h0S2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAADW9yZGVyX2hlaWdodF8FAAAAB29yZGVySWQBAAAAEWdldE9yZGVyU3RhdHVzS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAADW9yZGVyX3N0YXR1c18FAAAAB29yZGVySWQBAAAAFmdldE9yZGVyRmlsbGVkVG90YWxLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgIAAAATb3JkZXJfZmlsbGVkX3RvdGFsXwUAAAAHb3JkZXJJZAEAAAAPZ2V0UHJldk9yZGVyS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAAC29yZGVyX3ByZXZfBQAAAAdvcmRlcklkAQAAAA9nZXROZXh0T3JkZXJLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgIAAAALb3JkZXJfbmV4dF8FAAAAB29yZGVySWQBAAAAFmNvbnZlcnROZXV0cmlub1RvV2F2ZXMAAAACAAAABmFtb3VudAAAAAVwcmljZQkAAGsAAAADCQAAawAAAAMFAAAABmFtb3VudAUAAAAIUFJJQ0VMRVQFAAAABXByaWNlBQAAAAdXQVZFTEVUBQAAAAVQQVVMSQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIAAAAGYW1vdW50AAAABXByaWNlCQAAawAAAAMJAABrAAAAAwUAAAAGYW1vdW50BQAAAAVwcmljZQUAAAAIUFJJQ0VMRVQFAAAABVBBVUxJBQAAAAdXQVZFTEVUAQAAABJjb252ZXJ0V2F2ZXNUb0JvbmQAAAACAAAABmFtb3VudAAAAAVwcmljZQkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACBQAAAAZhbW91bnQFAAAABXByaWNlAAAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAABNOZXV0cmlub0NvbnRyYWN0S2V5AAAAAA9jb250cm9sQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAABJDb250cm9sQ29udHJhY3RLZXkAAAAAD2F1Y3Rpb25Db250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAAEkF1Y3Rpb25Db250cmFjdEtleQAAAAATbGlxdWlkYXRpb25Db250cmFjdAUAAAAEdGhpcwAAAAAPbmV1dHJpbm9Bc3NldElkCQACWQAAAAEJAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAABJOZXV0cmlub0Fzc2V0SWRLZXkAAAAAC2JvbmRBc3NldElkCQACWQAAAAECAAAALEJHaFBZcXVYU0s2VVlqblBMRW45NGdGaGV0cDRKdmY3dG9la0VZNHgxVkRIAAAAAApmaXJzdE9yZGVyCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAA1GaXJzdE9yZGVyS2V5AAAAAAlpc0Jsb2NrZWQJAQAAABZnZXRCb29sQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAPY29udHJvbENvbnRyYWN0AgAAAAppc19ibG9ja2VkAAAAAAxjdXJyZW50UHJpY2UJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAAA9jb250cm9sQ29udHJhY3QFAAAACFByaWNlS2V5AAAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAABhOZXV0cmlub0xvY2tlZEJhbGFuY2VLZXkAAAAAEndhdmVzTG9ja2VkQmFsYW5jZQkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAAFVdhdmVzTG9ja2VkQmFsYW5jZUtleQAAAAAHcmVzZXJ2ZQkAAGUAAAACCAkAA+8AAAABBQAAABBuZXV0cmlub0NvbnRyYWN0AAAAB3JlZ3VsYXIFAAAAEndhdmVzTG9ja2VkQmFsYW5jZQAAAAAObmV1dHJpbm9TdXBwbHkJAABlAAAAAgkAAGUAAAACCQAAZAAAAAIFAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAPbmV1dHJpbm9Bc3NldElkAAAACHF1YW50aXR5CQAD8AAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAAD25ldXRyaW5vQXNzZXRJZAkAA/AAAAACBQAAABNsaXF1aWRhdGlvbkNvbnRyYWN0BQAAAA9uZXV0cmlub0Fzc2V0SWQAAAAAB3N1cnBsdXMJAABlAAAAAgkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACBQAAAAdyZXNlcnZlBQAAAAxjdXJyZW50UHJpY2UFAAAADm5ldXRyaW5vU3VwcGx5AQAAAA1nZXRPcmRlclByaWNlAAAAAQAAAAJpZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEGdldE9yZGVyUHJpY2VLZXkAAAABBQAAAAJpZAEAAAANZ2V0T3JkZXJUb3RhbAAAAAEAAAACaWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABBnZXRPcmRlclRvdGFsS2V5AAAAAQUAAAACaWQBAAAADWdldE9yZGVyT3duZXIAAAABAAAAAmlkCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAQZ2V0T3JkZXJPd25lcktleQAAAAEFAAAAAmlkAQAAAA5nZXRPcmRlclN0YXR1cwAAAAEAAAACaWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABFnZXRPcmRlclN0YXR1c0tleQAAAAEFAAAAAmlkAQAAABNnZXRPcmRlckZpbGxlZFRvdGFsAAAAAQAAAAJpZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmdldE9yZGVyRmlsbGVkVG90YWxLZXkAAAABBQAAAAJpZAEAAAAOZ2V0T3JkZXJIZWlnaHQAAAABAAAAAmlkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAARZ2V0T3JkZXJIZWlnaHRLZXkAAAABBQAAAAJpZAEAAAAMZ2V0UHJldk9yZGVyAAAAAQAAAAJpZAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAD2dldFByZXZPcmRlcktleQAAAAEFAAAAAmlkAQAAAAxnZXROZXh0T3JkZXIAAAABAAAAAmlkCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAPZ2V0TmV4dE9yZGVyS2V5AAAAAQUAAAACaWQAAAAAE2N1cnJlbnREZWZhdWx0T3JkZXIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAFkN1cnJlbnREZWZhdWx0T3JkZXJLZXkBAAAAG2dlbmVyYXRlRGF0YUVudHJ5VG9BZGRPcmRlcgAAAAYAAAAFcHJpY2UAAAAKbmV3T3JkZXJJZAAAAAFpAAAACXByZXZPcmRlcgAAAAluZXh0T3JkZXIAAAAKZmlyc3RPcmRlcgQAAAAGYW1vdW50CAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAAEGlzT25lRm9yT25lT3JkZXIJAAAAAAAAAgUAAAAFcHJpY2UAAAAAAAAAAGQEAAAAEGlzRmlyc3RPcmRlckVtdHkJAAAAAAAAAgUAAAAKZmlyc3RPcmRlcgIAAAAABAAAAClpc05ld09yZGVyUHJpY2VMb3dlclRoYW5DdXJyZW50Rmlyc3RPcmRlcgkAAGYAAAACCQEAAAANZ2V0T3JkZXJQcmljZQAAAAEFAAAACmZpcnN0T3JkZXIFAAAABXByaWNlBAAAAA1uZXdGaXJzdE9yZGVyAwUAAAAQaXNGaXJzdE9yZGVyRW10eQUAAAAKbmV3T3JkZXJJZAMFAAAAKWlzTmV3T3JkZXJQcmljZUxvd2VyVGhhbkN1cnJlbnRGaXJzdE9yZGVyBQAAAApuZXdPcmRlcklkBQAAAApmaXJzdE9yZGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9nZXRQcmV2T3JkZXJLZXkAAAABBQAAAApuZXdPcmRlcklkBQAAAAlwcmV2T3JkZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2dldE5leHRPcmRlcktleQAAAAEFAAAACm5ld09yZGVySWQFAAAACW5leHRPcmRlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPZ2V0TmV4dE9yZGVyS2V5AAAAAQUAAAAJcHJldk9yZGVyAwkAAAAAAAACBQAAAAlwcmV2T3JkZXICAAAAAAUAAAAJcHJldk9yZGVyBQAAAApuZXdPcmRlcklkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9nZXRQcmV2T3JkZXJLZXkAAAABBQAAAAluZXh0T3JkZXIDCQAAAAAAAAIFAAAACW5leHRPcmRlcgIAAAAABQAAAAluZXh0T3JkZXIFAAAACm5ld09yZGVySWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANRmlyc3RPcmRlcktleQUAAAANbmV3Rmlyc3RPcmRlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEGdldE9yZGVyUHJpY2VLZXkAAAABBQAAAApuZXdPcmRlcklkBQAAAAVwcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEGdldE9yZGVyVG90YWxLZXkAAAABBQAAAApuZXdPcmRlcklkBQAAAAZhbW91bnQJAARM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BQAAAAlwcmV2T3JkZXIFAAAACW5leHRPcmRlcgUAAAAKZmlyc3RPcmRlcgQAAAAObmV4dE9yZGVyUHJpY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABBnZXRPcmRlclByaWNlS2V5AAAAAQUAAAAJbmV4dE9yZGVyBAAAAA5wcmV2T3JkZXJQcmljZQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEGdldE9yZGVyUHJpY2VLZXkAAAABBQAAAAlwcmV2T3JkZXIEAAAAEGlzTmV4dE9yZGVyRXJyb3IDCQEAAAABIQAAAAEFAAAAEGlzRW1wdHlOZXh0T3JkZXIJAABnAAAAAgUAAAAFcHJpY2UFAAAADm5leHRPcmRlclByaWNlBwQAAAAQaXNQcmV2T3JkZXJFcnJvcgMJAQAAAAEhAAAAAQUAAAAQaXNFbXB0eVByZXZPcmRlcgkAAGYAAAACBQAAAA5wcmV2T3JkZXJQcmljZQUAAAAFcHJpY2UHAwMFAAAAEGlzTmV4dE9yZGVyRXJyb3IGBQAAABBpc1ByZXZPcmRlckVycm9yCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAH2ludmFsaWQgb3JkZXIgaXNQcmV2T3JkZXJFcnJvcjoJAAGlAAAAAQUAAAAQaXNQcmV2T3JkZXJFcnJvcgIAAAASIGlzTmV4dE9yZGVyRXJyb3I6CQABpQAAAAEFAAAAEGlzTmV4dE9yZGVyRXJyb3IJAQAAABtnZW5lcmF0ZURhdGFFbnRyeVRvQWRkT3JkZXIAAAAGBQAAAAVwcmljZQUAAAAKbmV3T3JkZXJJZAUAAAABaQUAAAAJcHJldk9yZGVyBQAAAAluZXh0T3JkZXIFAAAACmZpcnN0T3JkZXIBAAAAGmNvbXB1dGVDdXJyZW50RGVmYXVsdE9yZGVyAAAAAQAAAAJpZAMJAQAAAAIhPQAAAAIFAAAAAmlkBQAAABNjdXJyZW50RGVmYXVsdE9yZGVyBQAAABNjdXJyZW50RGVmYXVsdE9yZGVyAgAAAAAAAAAEAAAAAWkBAAAAHGFkZExpcXVpZGF0aW9uT3JkZXJXaXRoUHJpY2UAAAACAAAABXByaWNlAAAACXByZXZPcmRlcgkAAAIAAAABAgAAAFRNZXRob2QgaGFzIGJlZW4gZGVwcmVjYXRlZDogcGxlYXNlIHVzZSBhZGRMaXF1aWRhdGlvbk9yZGVyIG1ldGhvZCB3aXRob3V0IHBhcmFtZXRlcnMAAAABaQEAAAATYWRkTGlxdWlkYXRpb25PcmRlcgAAAAAJAQAAABtpbnRlcm5hbEFkZExpcXVpZGF0aW9uT3JkZXIAAAADBQAAAAFpAAAAAAAAAABkBQAAABNjdXJyZW50RGVmYXVsdE9yZGVyAAAAAWkBAAAAC2NhbmNlbE9yZGVyAAAAAQAAAAdvcmRlcklkBAAAAAVvd25lcgkBAAAADWdldE9yZGVyT3duZXIAAAABBQAAAAdvcmRlcklkBAAAAAZhbW91bnQJAABlAAAAAgkBAAAADWdldE9yZGVyVG90YWwAAAABBQAAAAdvcmRlcklkCQEAAAATZ2V0T3JkZXJGaWxsZWRUb3RhbAAAAAEFAAAAB29yZGVySWQEAAAABmNhbGxlcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAACW5leHRPcmRlcgkBAAAADGdldE5leHRPcmRlcgAAAAEFAAAAB29yZGVySWQEAAAACXByZXZPcmRlcgkBAAAADGdldFByZXZPcmRlcgAAAAEFAAAAB29yZGVySWQEAAAADmlzRGVmYXVsdE9yZGVyCQAAAAAAAAIFAAAAB29yZGVySWQFAAAAE2N1cnJlbnREZWZhdWx0T3JkZXIEAAAAFmlzUHJldkNhbkJlY29tZURlZmF1bHQJAAAAAAAAAgkBAAAADmdldE9yZGVyU3RhdHVzAAAAAQUAAAAJcHJldk9yZGVyBQAAAANORVcEAAAAD25ld0RlZmF1bHRPcmRlcgMFAAAADmlzRGVmYXVsdE9yZGVyAwUAAAAWaXNQcmV2Q2FuQmVjb21lRGVmYXVsdAUAAAAJcHJldk9yZGVyAgAAAAAFAAAAE2N1cnJlbnREZWZhdWx0T3JkZXIDBQAAAAlpc0Jsb2NrZWQJAAACAAAAAQIAAABZY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04gYWN0aW9ucyB1bnRpbCByZWFjdGl2YXRpb24gYnkgZW1lcmdlbmN5IG9yYWNsZXMDCQEAAAACIT0AAAACBQAAAAVvd25lcgUAAAAGY2FsbGVyCQAAAgAAAAECAAAAEXBlcm1pc3Npb24gZGVuaWVkAwkBAAAAAiE9AAAAAgkBAAAADmdldE9yZGVyU3RhdHVzAAAAAQUAAAAHb3JkZXJJZAUAAAADTkVXCQAAAgAAAAECAAAAFGludmFsaWQgb3JkZXIgc3RhdHVzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAFkN1cnJlbnREZWZhdWx0T3JkZXJLZXkFAAAAD25ld0RlZmF1bHRPcmRlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA1GaXJzdE9yZGVyS2V5AwkAAAAAAAACBQAAAApmaXJzdE9yZGVyBQAAAAdvcmRlcklkBQAAAAluZXh0T3JkZXIFAAAACmZpcnN0T3JkZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2dldE5leHRPcmRlcktleQAAAAEFAAAACXByZXZPcmRlcgUAAAAJbmV4dE9yZGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9nZXRQcmV2T3JkZXJLZXkAAAABBQAAAAluZXh0T3JkZXIFAAAACXByZXZPcmRlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABBQAAAAdvcmRlcklkBQAAAAhDQU5DRUxFRAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABmFtb3VudAUAAAALYm9uZEFzc2V0SWQFAAAAA25pbAAAAAFpAQAAAA1saXF1aWRhdGVCb25kAAAAAAQAAAASbGlxdWlkYXRpb25CYWxhbmNlCQAD8AAAAAIFAAAABHRoaXMFAAAAD25ldXRyaW5vQXNzZXRJZAQAAAAPc3VycGx1c1Bvc2l0aXZlAwkAAGcAAAACAAAAAAAAAAAABQAAAAdzdXJwbHVzAAAAAAAAAAAABQAAAAdzdXJwbHVzBAAAAAp1c2RuQW1vdW50AwkAAGcAAAACBQAAAA9zdXJwbHVzUG9zaXRpdmUFAAAAEmxpcXVpZGF0aW9uQmFsYW5jZQUAAAASbGlxdWlkYXRpb25CYWxhbmNlBQAAAA9zdXJwbHVzUG9zaXRpdmUEAAAADHJldHVybkFtb3VudAMJAABnAAAAAgUAAAAPc3VycGx1c1Bvc2l0aXZlBQAAABJsaXF1aWRhdGlvbkJhbGFuY2UAAAAAAAAAAAAJAABlAAAAAgUAAAASbGlxdWlkYXRpb25CYWxhbmNlBQAAAA9zdXJwbHVzUG9zaXRpdmUDBQAAAAlpc0Jsb2NrZWQJAAACAAAAAQIAAABZY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04gYWN0aW9ucyB1bnRpbCByZWFjdGl2YXRpb24gYnkgZW1lcmdlbmN5IG9yYWNsZXMDCQAAAAAAAAIFAAAAEmxpcXVpZGF0aW9uQmFsYW5jZQAAAAAAAAAAAAkAAAIAAAABAgAAACB3aXRob3V0IGJhc2UgdG9rZW5zIHRvIGxpcXVpZGF0ZQMJAABmAAAAAgUAAAAMcmV0dXJuQW1vdW50AAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAADHJldHVybkFtb3VudAUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwDCQAAAAAAAAIFAAAACmZpcnN0T3JkZXICAAAAAAkAAAIAAAABAgAAAA9lbXB0eSBvcmRlcmJvb2sEAAAACW5leHRPcmRlcgkBAAAADGdldE5leHRPcmRlcgAAAAEFAAAACmZpcnN0T3JkZXIEAAAAC2ZpbGxlZFRvdGFsCQEAAAATZ2V0T3JkZXJGaWxsZWRUb3RhbAAAAAEFAAAACmZpcnN0T3JkZXIEAAAADm5zYnQyVXNkblByaWNlCQEAAAANZ2V0T3JkZXJQcmljZQAAAAEFAAAACmZpcnN0T3JkZXIEAAAADXJlbWFpbmVkVG90YWwJAABlAAAAAgkBAAAADWdldE9yZGVyVG90YWwAAAABBQAAAApmaXJzdE9yZGVyBQAAAAtmaWxsZWRUb3RhbAQAAAAgdG90YWxVU0ROUmVxdWlyZWRUb0ZpbGxPcmRlclgxMDAJAABrAAAAAwUAAAANcmVtYWluZWRUb3RhbAUAAAAObnNidDJVc2RuUHJpY2UAAAAAAAAAAAEEAAAAHHRvdGFsVVNETlJlcXVpcmVkVG9GaWxsT3JkZXIJAABpAAAAAgUAAAAgdG90YWxVU0ROUmVxdWlyZWRUb0ZpbGxPcmRlclgxMDAAAAAAAAAAAGQEAAAAE2lzT3JkZXJGdWxseUZpbGFibGUJAABnAAAAAgUAAAAKdXNkbkFtb3VudAUAAAAcdG90YWxVU0ROUmVxdWlyZWRUb0ZpbGxPcmRlcgQAAAAXZmlsbGFibGVPcmRlckFtb3VudFgxMDADBQAAABNpc09yZGVyRnVsbHlGaWxhYmxlBQAAACB0b3RhbFVTRE5SZXF1aXJlZFRvRmlsbE9yZGVyWDEwMAkAAGgAAAACBQAAAAp1c2RuQW1vdW50AAAAAAAAAABkBAAAABBmaW5hbE5CVEZpbGxhYmxlCQAAawAAAAMFAAAAF2ZpbGxhYmxlT3JkZXJBbW91bnRYMTAwAAAAAAAAAAABBQAAAA5uc2J0MlVzZG5QcmljZQQAAAATZmlsbGFibGVPcmRlckFtb3VudAkAAGkAAAACBQAAABdmaWxsYWJsZU9yZGVyQW1vdW50WDEwMAAAAAAAAAAAZAQAAAAabmJUb2tlbnNMaXF1aWRhdGVDb25kaXRpb24JAABnAAAAAgkAAGsAAAADCQAAZAAAAAIFAAAAB3N1cnBsdXMFAAAADm5ldXRyaW5vU3VwcGx5AAAAAAAAAABkBQAAAA5uZXV0cmlub1N1cHBseQUAAAAObnNidDJVc2RuUHJpY2UDCQEAAAABIQAAAAEFAAAAGm5iVG9rZW5zTGlxdWlkYXRlQ29uZGl0aW9uCQAAAgAAAAEJAAEsAAAAAgIAAAAXaW5uYXByb3ByaWF0ZSBzdXJwbHVzOiAJAAGkAAAAAQUAAAAHc3VycGx1cwQAAAASaXNOb3RoaW5nVG9GaWxsTm93CQAAAAAAAAIFAAAADXJlbWFpbmVkVG90YWwAAAAAAAAAAAAEAAAAFGlzTm90aGluZ1RvRmlsbEF0QWxsCQAAAAAAAAIJAABkAAAAAgUAAAALZmlsbGVkVG90YWwFAAAAEGZpbmFsTkJURmlsbGFibGUJAQAAAA1nZXRPcmRlclRvdGFsAAAAAQUAAAAKZmlyc3RPcmRlcgQAAAAJbmV3U3RhdHVzAwMFAAAAE2lzT3JkZXJGdWxseUZpbGFibGUDBQAAABJpc05vdGhpbmdUb0ZpbGxOb3cGBQAAABRpc05vdGhpbmdUb0ZpbGxBdEFsbAcFAAAABkZJTExFRAUAAAADTkVXCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9nZXRQcmV2T3JkZXJLZXkAAAABBQAAAAluZXh0T3JkZXIDCQAAAAAAAAIFAAAACW5ld1N0YXR1cwUAAAAGRklMTEVEAgAAAAAFAAAACmZpcnN0T3JkZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANRmlyc3RPcmRlcktleQMJAAAAAAAAAgUAAAAJbmV3U3RhdHVzBQAAAAZGSUxMRUQFAAAACW5leHRPcmRlcgUAAAAKZmlyc3RPcmRlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmdldE9yZGVyRmlsbGVkVG90YWxLZXkAAAABBQAAAApmaXJzdE9yZGVyCQAAZAAAAAIFAAAAC2ZpbGxlZFRvdGFsBQAAABBmaW5hbE5CVEZpbGxhYmxlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFnZXRPcmRlclN0YXR1c0tleQAAAAEFAAAACmZpcnN0T3JkZXIFAAAACW5ld1N0YXR1cwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABZDdXJyZW50RGVmYXVsdE9yZGVyS2V5AwkAAAAAAAACBQAAAAluZXdTdGF0dXMFAAAAA05FVwUAAAATY3VycmVudERlZmF1bHRPcmRlcgkBAAAAGmNvbXB1dGVDdXJyZW50RGVmYXVsdE9yZGVyAAAAAQUAAAAKZmlyc3RPcmRlcgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAANZ2V0T3JkZXJPd25lcgAAAAEFAAAACmZpcnN0T3JkZXIFAAAAE2ZpbGxhYmxlT3JkZXJBbW91bnQFAAAAD25ldXRyaW5vQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA9hdWN0aW9uQ29udHJhY3QFAAAAEGZpbmFsTkJURmlsbGFibGUFAAAAC2JvbmRBc3NldElkBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAABBwdWJLZXlBZG1pbnNMaXN0CQAETAAAAAICAAAALEdKZExTYUxpdjVLN3h1ZWphYzhtY1JjSG95bzNkUHJFU3J2a3RHM2E2TUFSCQAETAAAAAICAAAALDN4dW14NGhyUHBlZW9vNzlITEdiWkNnZno5NUwzOVpGZHh4d1dlU1VDMlB1CQAETAAAAAICAAAALEQ0Q3F0SzVmQnNuelJvMzNaTWhyTTduaUxzZURIMnVSb0s2d2VCcTJKUTNBCQAETAAAAAICAAAALDVXUlhGU2p3Y1RiTmZLY0pzOFpxWG1TU1dZc1NWSlV0TXZNcVpqNWhINE5jBQAAAANuaWwEAAAABWNvdW50CQAAZAAAAAIJAABkAAAAAgkAAGQAAAACAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAEJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAABAAAAAAAAAAABAAAAAAAAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAIJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAACAAAAAAAAAAABAAAAAAAAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAMJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAADAAAAAAAAAAACAAAAAAAAAAAACQAAZwAAAAIFAAAABWNvdW50AAAAAAAAAAADbru9Hg==", "chainId": 84, "height": 1364906, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 51vNC5dKpKsd6aahk5aZbbZKKMT5vHpbDmz9JV6frXRv Next: none Diff:
OldNewDifferences
3737 let NeutrinoAssetIdKey = "neutrino_asset_id"
3838
3939 let ControlContractKey = "control_contract"
40+
41+let AuctionContractKey = "auction_contract"
4042
4143 let BalanceLockedkKey = "balance_lock_"
4244
8486 let neutrinoContract = addressFromStringValue(getStringByKey(NeutrinoContractKey))
8587
8688 let controlContract = addressFromStringValue(getStringByAddressAndKey(neutrinoContract, ControlContractKey))
89+
90+let auctionContract = addressFromStringValue(getStringByAddressAndKey(neutrinoContract, AuctionContractKey))
8791
8892 let liquidationContract = this
8993
297301 then nextOrder
298302 else firstOrder), IntegerEntry(getOrderFilledTotalKey(firstOrder), (filledTotal + finalNBTFillable)), StringEntry(getOrderStatusKey(firstOrder), newStatus), StringEntry(CurrentDefaultOrderKey, if ((newStatus == NEW))
299303 then currentDefaultOrder
300- else computeCurrentDefaultOrder(firstOrder)), ScriptTransfer(addressFromStringValue(getOrderOwner(firstOrder)), fillableOrderAmount, neutrinoAssetId), ScriptTransfer(neutrinoContract, finalNBTFillable, bondAssetId)]
304+ else computeCurrentDefaultOrder(firstOrder)), ScriptTransfer(addressFromStringValue(getOrderOwner(firstOrder)), fillableOrderAmount, neutrinoAssetId), ScriptTransfer(auctionContract, finalNBTFillable, bondAssetId)]
301305 }
302306 }
303307 }
305309
306310 @Verifier(tx)
307311 func verify () = {
308- let pubKeyAdminsList = ["GXxmZaCigPgJsT6d1cLr8nUXA65nGX8V7FuAzzrY8wQE", "3xumx4hrPpeeoo79HLGbZCgfz95L39ZFdxxwWeSUC2Pu", "D4CqtK5fBsnzRo33ZMhrM7niLseDH2uRoK6weBq2JQ3A", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
312+ let pubKeyAdminsList = ["GJdLSaLiv5K7xuejac8mcRcHoyo3dPrESrvktG3a6MAR", "3xumx4hrPpeeoo79HLGbZCgfz95L39ZFdxxwWeSUC2Pu", "D4CqtK5fBsnzRo33ZMhrM7niLseDH2uRoK6weBq2JQ3A", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
309313 let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
310314 then 1
311315 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0)
55
66
77 func getStringByKey (key) = valueOrElse(getString(this, key), "")
88
99
1010 func getBoolByAddressAndKey (address,key) = valueOrElse(getBoolean(address, key), false)
1111
1212
1313 func getStringByAddressAndKey (address,key) = valueOrElse(getString(address, key), "")
1414
1515
1616 func getNumberByAddressAndKey (address,key) = valueOrElse(getInteger(address, key), 0)
1717
1818
1919 let WAVELET = 100000000
2020
2121 let PAULI = 1000000
2222
2323 let PRICELET = 1000000
2424
2525 let CANCELED = "canceled"
2626
2727 let NEW = "new"
2828
2929 let FILLED = "filled"
3030
3131 let NeutrinoContractKey = "neutrino_contract"
3232
3333 let PriceKey = "price"
3434
3535 let BondAssetIdKey = "bond_asset_id"
3636
3737 let NeutrinoAssetIdKey = "neutrino_asset_id"
3838
3939 let ControlContractKey = "control_contract"
40+
41+let AuctionContractKey = "auction_contract"
4042
4143 let BalanceLockedkKey = "balance_lock_"
4244
4345 let WavesLockedBalanceKey = (BalanceLockedkKey + "waves")
4446
4547 let NeutrinoLockedBalanceKey = (BalanceLockedkKey + "neutrino")
4648
4749 let FirstOrderKey = "order_first"
4850
4951 let CurrentDefaultOrderKey = "order_default"
5052
5153 func getOrderPriceKey (orderId) = ("order_price_" + orderId)
5254
5355
5456 func getOrderTotalKey (orderId) = ("order_total_" + orderId)
5557
5658
5759 func getOrderOwnerKey (orderId) = ("order_owner_" + orderId)
5860
5961
6062 func getOrderHeightKey (orderId) = ("order_height_" + orderId)
6163
6264
6365 func getOrderStatusKey (orderId) = ("order_status_" + orderId)
6466
6567
6668 func getOrderFilledTotalKey (orderId) = ("order_filled_total_" + orderId)
6769
6870
6971 func getPrevOrderKey (orderId) = ("order_prev_" + orderId)
7072
7173
7274 func getNextOrderKey (orderId) = ("order_next_" + orderId)
7375
7476
7577 func convertNeutrinoToWaves (amount,price) = fraction(fraction(amount, PRICELET, price), WAVELET, PAULI)
7678
7779
7880 func convertWavesToNeutrino (amount,price) = fraction(fraction(amount, price, PRICELET), PAULI, WAVELET)
7981
8082
8183 func convertWavesToBond (amount,price) = convertWavesToNeutrino(amount, price)
8284
8385
8486 let neutrinoContract = addressFromStringValue(getStringByKey(NeutrinoContractKey))
8587
8688 let controlContract = addressFromStringValue(getStringByAddressAndKey(neutrinoContract, ControlContractKey))
89+
90+let auctionContract = addressFromStringValue(getStringByAddressAndKey(neutrinoContract, AuctionContractKey))
8791
8892 let liquidationContract = this
8993
9094 let neutrinoAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, NeutrinoAssetIdKey))
9195
9296 let bondAssetId = fromBase58String("BGhPYquXSK6UYjnPLEn94gFhetp4Jvf7toekEY4x1VDH")
9397
9498 let firstOrder = getStringByKey(FirstOrderKey)
9599
96100 let isBlocked = getBoolByAddressAndKey(controlContract, "is_blocked")
97101
98102 let currentPrice = getNumberByAddressAndKey(controlContract, PriceKey)
99103
100104 let neutrinoLockedBalance = getNumberByAddressAndKey(neutrinoContract, NeutrinoLockedBalanceKey)
101105
102106 let wavesLockedBalance = getNumberByAddressAndKey(neutrinoContract, WavesLockedBalanceKey)
103107
104108 let reserve = (wavesBalance(neutrinoContract).regular - wavesLockedBalance)
105109
106110 let neutrinoSupply = (((neutrinoLockedBalance + value(assetInfo(neutrinoAssetId)).quantity) - assetBalance(neutrinoContract, neutrinoAssetId)) - assetBalance(liquidationContract, neutrinoAssetId))
107111
108112 let surplus = (convertWavesToNeutrino(reserve, currentPrice) - neutrinoSupply)
109113
110114 func getOrderPrice (id) = getNumberByKey(getOrderPriceKey(id))
111115
112116
113117 func getOrderTotal (id) = getNumberByKey(getOrderTotalKey(id))
114118
115119
116120 func getOrderOwner (id) = getStringByKey(getOrderOwnerKey(id))
117121
118122
119123 func getOrderStatus (id) = getStringByKey(getOrderStatusKey(id))
120124
121125
122126 func getOrderFilledTotal (id) = getNumberByKey(getOrderFilledTotalKey(id))
123127
124128
125129 func getOrderHeight (id) = getNumberByKey(getOrderHeightKey(id))
126130
127131
128132 func getPrevOrder (id) = getStringByKey(getPrevOrderKey(id))
129133
130134
131135 func getNextOrder (id) = getStringByKey(getNextOrderKey(id))
132136
133137
134138 let currentDefaultOrder = getStringByKey(CurrentDefaultOrderKey)
135139
136140 func generateDataEntryToAddOrder (price,newOrderId,i,prevOrder,nextOrder,firstOrder) = {
137141 let amount = value(i.payments[0]).amount
138142 let isOneForOneOrder = (price == 100)
139143 let isFirstOrderEmty = (firstOrder == "")
140144 let isNewOrderPriceLowerThanCurrentFirstOrder = (getOrderPrice(firstOrder) > price)
141145 let newFirstOrder = if (isFirstOrderEmty)
142146 then newOrderId
143147 else if (isNewOrderPriceLowerThanCurrentFirstOrder)
144148 then newOrderId
145149 else firstOrder
146150 [StringEntry(getPrevOrderKey(newOrderId), prevOrder), StringEntry(getNextOrderKey(newOrderId), nextOrder), StringEntry(getNextOrderKey(prevOrder), if ((prevOrder == ""))
147151 then prevOrder
148152 else newOrderId), StringEntry(getPrevOrderKey(nextOrder), if ((nextOrder == ""))
149153 then nextOrder
150154 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)
151155 then newOrderId
152156 else currentDefaultOrder)]
153157 }
154158
155159
156160 func internalAddLiquidationOrder (i,price,prevOrder) = {
157161 let pmt = value(i.payments[0])
158162 let newOrderId = toBase58String(keccak256((((toBytes(pmt.amount) + i.caller.bytes) + toBytes(height)) + i.transactionId)))
159163 let owner = toString(i.caller)
160164 let isEmptyPrevOrder = (prevOrder == "")
161165 let isEmptyFirstOrder = (firstOrder == "")
162166 if (isBlocked)
163167 then throw("contract is blocked by EMERGENCY SHUTDOWN actions until reactivation by emergency oracles")
164168 else if ((PAULI > pmt.amount))
165169 then throw("order amount should be higher than 1 NSBT")
166170 else if ((100 > price))
167171 then throw(("price should be equal or higher than 1 nsbt for 1 usdn. i.e. >= 100; price: " + toString(price)))
168172 else if ((pmt.assetId != bondAssetId))
169173 then throw("can use appropriate neutrino base tokens (nsbt) only")
170174 else if ((getOrderOwner(newOrderId) != ""))
171175 then throw("the order already exists")
172176 else if (if (!(isEmptyPrevOrder))
173177 then (getOrderStatus(prevOrder) != NEW)
174178 else false)
175179 then throw("prev order status is not new")
176180 else if (if (isEmptyFirstOrder)
177181 then !(isEmptyPrevOrder)
178182 else false)
179183 then throw("wrong prev order parameter")
180184 else {
181185 let nextOrder = if (isEmptyPrevOrder)
182186 then firstOrder
183187 else getNextOrder(prevOrder)
184188 let isEmptyNextOrder = (nextOrder == "")
185189 if (isEmptyFirstOrder)
186190 then generateDataEntryToAddOrder(price, newOrderId, i, prevOrder, nextOrder, firstOrder)
187191 else {
188192 let nextOrderPrice = getNumberByKey(getOrderPriceKey(nextOrder))
189193 let prevOrderPrice = getNumberByKey(getOrderPriceKey(prevOrder))
190194 let isNextOrderError = if (!(isEmptyNextOrder))
191195 then (price >= nextOrderPrice)
192196 else false
193197 let isPrevOrderError = if (!(isEmptyPrevOrder))
194198 then (prevOrderPrice > price)
195199 else false
196200 if (if (isNextOrderError)
197201 then true
198202 else isPrevOrderError)
199203 then throw(((("invalid order isPrevOrderError:" + toString(isPrevOrderError)) + " isNextOrderError:") + toString(isNextOrderError)))
200204 else generateDataEntryToAddOrder(price, newOrderId, i, prevOrder, nextOrder, firstOrder)
201205 }
202206 }
203207 }
204208
205209
206210 func computeCurrentDefaultOrder (id) = if ((id != currentDefaultOrder))
207211 then currentDefaultOrder
208212 else ""
209213
210214
211215 @Callable(i)
212216 func addLiquidationOrderWithPrice (price,prevOrder) = throw("Method has been deprecated: please use addLiquidationOrder method without parameters")
213217
214218
215219
216220 @Callable(i)
217221 func addLiquidationOrder () = internalAddLiquidationOrder(i, 100, currentDefaultOrder)
218222
219223
220224
221225 @Callable(i)
222226 func cancelOrder (orderId) = {
223227 let owner = getOrderOwner(orderId)
224228 let amount = (getOrderTotal(orderId) - getOrderFilledTotal(orderId))
225229 let caller = toString(i.caller)
226230 let nextOrder = getNextOrder(orderId)
227231 let prevOrder = getPrevOrder(orderId)
228232 let isDefaultOrder = (orderId == currentDefaultOrder)
229233 let isPrevCanBecomeDefault = (getOrderStatus(prevOrder) == NEW)
230234 let newDefaultOrder = if (isDefaultOrder)
231235 then if (isPrevCanBecomeDefault)
232236 then prevOrder
233237 else ""
234238 else currentDefaultOrder
235239 if (isBlocked)
236240 then throw("contract is blocked by EMERGENCY SHUTDOWN actions until reactivation by emergency oracles")
237241 else if ((owner != caller))
238242 then throw("permission denied")
239243 else if ((getOrderStatus(orderId) != NEW))
240244 then throw("invalid order status")
241245 else [StringEntry(CurrentDefaultOrderKey, newDefaultOrder), StringEntry(FirstOrderKey, if ((firstOrder == orderId))
242246 then nextOrder
243247 else firstOrder), StringEntry(getNextOrderKey(prevOrder), nextOrder), StringEntry(getPrevOrderKey(nextOrder), prevOrder), StringEntry(getOrderStatusKey(orderId), CANCELED), ScriptTransfer(i.caller, amount, bondAssetId)]
244248 }
245249
246250
247251
248252 @Callable(i)
249253 func liquidateBond () = {
250254 let liquidationBalance = assetBalance(this, neutrinoAssetId)
251255 let surplusPositive = if ((0 >= surplus))
252256 then 0
253257 else surplus
254258 let usdnAmount = if ((surplusPositive >= liquidationBalance))
255259 then liquidationBalance
256260 else surplusPositive
257261 let returnAmount = if ((surplusPositive >= liquidationBalance))
258262 then 0
259263 else (liquidationBalance - surplusPositive)
260264 if (isBlocked)
261265 then throw("contract is blocked by EMERGENCY SHUTDOWN actions until reactivation by emergency oracles")
262266 else if ((liquidationBalance == 0))
263267 then throw("without base tokens to liquidate")
264268 else if ((returnAmount > 0))
265269 then [ScriptTransfer(neutrinoContract, returnAmount, neutrinoAssetId)]
266270 else if ((firstOrder == ""))
267271 then throw("empty orderbook")
268272 else {
269273 let nextOrder = getNextOrder(firstOrder)
270274 let filledTotal = getOrderFilledTotal(firstOrder)
271275 let nsbt2UsdnPrice = getOrderPrice(firstOrder)
272276 let remainedTotal = (getOrderTotal(firstOrder) - filledTotal)
273277 let totalUSDNRequiredToFillOrderX100 = fraction(remainedTotal, nsbt2UsdnPrice, 1)
274278 let totalUSDNRequiredToFillOrder = (totalUSDNRequiredToFillOrderX100 / 100)
275279 let isOrderFullyFilable = (usdnAmount >= totalUSDNRequiredToFillOrder)
276280 let fillableOrderAmountX100 = if (isOrderFullyFilable)
277281 then totalUSDNRequiredToFillOrderX100
278282 else (usdnAmount * 100)
279283 let finalNBTFillable = fraction(fillableOrderAmountX100, 1, nsbt2UsdnPrice)
280284 let fillableOrderAmount = (fillableOrderAmountX100 / 100)
281285 let nbTokensLiquidateCondition = (fraction((surplus + neutrinoSupply), 100, neutrinoSupply) >= nsbt2UsdnPrice)
282286 if (!(nbTokensLiquidateCondition))
283287 then throw(("innapropriate surplus: " + toString(surplus)))
284288 else {
285289 let isNothingToFillNow = (remainedTotal == 0)
286290 let isNothingToFillAtAll = ((filledTotal + finalNBTFillable) == getOrderTotal(firstOrder))
287291 let newStatus = if (if (isOrderFullyFilable)
288292 then if (isNothingToFillNow)
289293 then true
290294 else isNothingToFillAtAll
291295 else false)
292296 then FILLED
293297 else NEW
294298 [StringEntry(getPrevOrderKey(nextOrder), if ((newStatus == FILLED))
295299 then ""
296300 else firstOrder), StringEntry(FirstOrderKey, if ((newStatus == FILLED))
297301 then nextOrder
298302 else firstOrder), IntegerEntry(getOrderFilledTotalKey(firstOrder), (filledTotal + finalNBTFillable)), StringEntry(getOrderStatusKey(firstOrder), newStatus), StringEntry(CurrentDefaultOrderKey, if ((newStatus == NEW))
299303 then currentDefaultOrder
300- else computeCurrentDefaultOrder(firstOrder)), ScriptTransfer(addressFromStringValue(getOrderOwner(firstOrder)), fillableOrderAmount, neutrinoAssetId), ScriptTransfer(neutrinoContract, finalNBTFillable, bondAssetId)]
304+ else computeCurrentDefaultOrder(firstOrder)), ScriptTransfer(addressFromStringValue(getOrderOwner(firstOrder)), fillableOrderAmount, neutrinoAssetId), ScriptTransfer(auctionContract, finalNBTFillable, bondAssetId)]
301305 }
302306 }
303307 }
304308
305309
306310 @Verifier(tx)
307311 func verify () = {
308- let pubKeyAdminsList = ["GXxmZaCigPgJsT6d1cLr8nUXA65nGX8V7FuAzzrY8wQE", "3xumx4hrPpeeoo79HLGbZCgfz95L39ZFdxxwWeSUC2Pu", "D4CqtK5fBsnzRo33ZMhrM7niLseDH2uRoK6weBq2JQ3A", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
312+ let pubKeyAdminsList = ["GJdLSaLiv5K7xuejac8mcRcHoyo3dPrESrvktG3a6MAR", "3xumx4hrPpeeoo79HLGbZCgfz95L39ZFdxxwWeSUC2Pu", "D4CqtK5fBsnzRo33ZMhrM7niLseDH2uRoK6weBq2JQ3A", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
309313 let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
310314 then 1
311315 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
312316 then 1
313317 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
314318 then 1
315319 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[3], fromBase58String(pubKeyAdminsList[3])))
316320 then 2
317321 else 0))
318322 (count >= 3)
319323 }
320324

github/deemru/w8io/6500d08 
47.65 ms