tx · 38p7PXikfdfsTMYhNYjzUu3DP7EaMH9CsHBqHcm5UB2f 3MyaVYsqzGDdaQbE7uREMJZHcEbTQB8YGni: -0.01000000 Waves 2021.07.27 18:08 [1632212] smart account 3MyaVYsqzGDdaQbE7uREMJZHcEbTQB8YGni > SELF 0.00000000 Waves
{ "type": 13, "id": "38p7PXikfdfsTMYhNYjzUu3DP7EaMH9CsHBqHcm5UB2f", "fee": 1000000, "feeAssetId": null, "timestamp": 1627398544366, "version": 2, "chainId": 84, "sender": "3MyaVYsqzGDdaQbE7uREMJZHcEbTQB8YGni", "senderPublicKey": "J1663AujAooArK7NK4wm4ADjFD2QMEofeeSptgpLvCR1", "proofs": [ "666YwBZNw4twgP8yRsJGfvfGLDBh1aNcobGxVYcXLizw4SFpByyekjr7ZwpZo5xzkJSrZvKzYr2KgdtUAeNzyQtJ" ], "script": "base64:AAIEAAAAAAAAABMIAhIAEgMKAQgSCAoGAQEBAQEBAAAASgEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkAAAAAAAAAAAABAAAADmdldFN0cmluZ0J5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AgAAAAABAAAAFmdldEJvb2xCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQcBAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AgAAAAABAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AAAAAAAAAAAAAAAAAAdXQVZFTEVUAAAAAAAF9eEAAAAAAAVQQVVMSQAAAAAAAA9CQAAAAAAKUEFVTElTQ0FMRQAAAAAAAAAABgAAAAAIUFJJQ0VMRVQAAAAAAAAPQkAAAAAABE1VTFQAAAAAAAX14QAAAAAACU1VTFRTQ0FMRQAAAAAAAAAACAAAAAANTUlOT1JERVJUT1RBTAkAAGgAAAACAAAAAAAAAAAKBQAAAAdXQVZFTEVUAAAAAAZNQVhST0kAAAAAAAAAAF8AAAAACENBTkNFTEVEAgAAAAhjYW5jZWxlZAAAAAADTkVXAgAAAANuZXcAAAAABkZJTExFRAIAAAAGZmlsbGVkAAAAAAhQcmljZUtleQIAAAAFcHJpY2UAAAAADk5zYnRBc3NldElkS2V5AgAAAA1ib25kX2Fzc2V0X2lkAAAAABJOZXV0cmlub0Fzc2V0SWRLZXkCAAAAEW5ldXRyaW5vX2Fzc2V0X2lkAAAAABFCYWxhbmNlTG9ja2Vka0tleQIAAAANYmFsYW5jZV9sb2NrXwAAAAAVV2F2ZXNMb2NrZWRCYWxhbmNlS2V5CQABLAAAAAIFAAAAEUJhbGFuY2VMb2NrZWRrS2V5AgAAAAV3YXZlcwAAAAAYTmV1dHJpbm9Mb2NrZWRCYWxhbmNlS2V5CQABLAAAAAIFAAAAEUJhbGFuY2VMb2NrZWRrS2V5AgAAAAhuZXV0cmlubwAAAAANRmlyc3RPcmRlcktleQIAAAALb3JkZXJfZmlyc3QBAAAAEmdldFJvaUJ5T3JkZXJJZEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAABBkZWJ1Z19vcmRlcl9yb2lfBQAAAAdvcmRlcklkAQAAABBnZXRPcmRlclByaWNlS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAADG9yZGVyX3ByaWNlXwUAAAAHb3JkZXJJZAEAAAAQZ2V0T3JkZXJUb3RhbEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAAxvcmRlcl90b3RhbF8FAAAAB29yZGVySWQBAAAAEGdldE9yZGVyT3duZXJLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgIAAAAMb3JkZXJfb3duZXJfBQAAAAdvcmRlcklkAQAAABFnZXRPcmRlckhlaWdodEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAA1vcmRlcl9oZWlnaHRfBQAAAAdvcmRlcklkAQAAABFnZXRPcmRlclN0YXR1c0tleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAA1vcmRlcl9zdGF0dXNfBQAAAAdvcmRlcklkAQAAABZnZXRPcmRlckZpbGxlZFRvdGFsS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAAE29yZGVyX2ZpbGxlZF90b3RhbF8FAAAAB29yZGVySWQBAAAAD2dldFByZXZPcmRlcktleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAAtvcmRlcl9wcmV2XwUAAAAHb3JkZXJJZAEAAAAPZ2V0TmV4dE9yZGVyS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAAC29yZGVyX25leHRfBQAAAAdvcmRlcklkAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAABrAAAAAwkAAGsAAAADBQAAAAZhbW91bnQFAAAACFBSSUNFTEVUBQAAAAVwcmljZQUAAAAHV0FWRUxFVAUAAAAFUEFVTEkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACAAAABmFtb3VudAAAAAVwcmljZQkAAGsAAAADCQAAawAAAAMFAAAABmFtb3VudAUAAAAFcHJpY2UFAAAACFBSSUNFTEVUBQAAAAVQQVVMSQUAAAAHV0FWRUxFVAEAAAASY29udmVydFdhdmVzVG9Cb25kAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAGYW1vdW50BQAAAAVwcmljZQEAAAASY29udmVydEJvbmRUb1dhdmVzAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAGYW1vdW50BQAAAAVwcmljZQAAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAB0FkZHJlc3MAAAABAQAAABoBV3AEYqZHm+mtVmiUy++FjDCCICiaCBSWsgAAAAAPY29udHJvbENvbnRyYWN0CQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFXI7OtElyTpMrsOf5PRtbNVk0t+xD7Y5h6AAAAABNsaXF1aWRhdGlvbkNvbnRyYWN0CQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFXGupJy/oKfsoIfyjVn5WODHtptak4kR9IAAAAAA9uZXV0cmlub0Fzc2V0SWQBAAAAILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRAAAAAAtuc2J0QXNzZXRJZAEAAAAgVe7DvqoL8FDoccgbqm5wnqSxyP5KLrnB8czFaw94l0sAAAAACWlzQmxvY2tlZAkBAAAAFmdldEJvb2xCeUFkZHJlc3NBbmRLZXkAAAACBQAAAA9jb250cm9sQ29udHJhY3QCAAAACmlzX2Jsb2NrZWQAAAAADGN1cnJlbnRQcmljZQkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAD2NvbnRyb2xDb250cmFjdAUAAAAIUHJpY2VLZXkAAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAAGE5ldXRyaW5vTG9ja2VkQmFsYW5jZUtleQAAAAAHcmVzZXJ2ZQkAAGUAAAACCAkAA+8AAAABBQAAABBuZXV0cmlub0NvbnRyYWN0AAAAB3JlZ3VsYXIJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAABVXYXZlc0xvY2tlZEJhbGFuY2VLZXkAAAAADnJlc2VydmVzSW5Vc2RuCQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIFAAAAB3Jlc2VydmUFAAAADGN1cnJlbnRQcmljZQAAAAAObmV1dHJpbm9TdXBwbHkJAABlAAAAAgkAAGUAAAACCQAAZAAAAAIFAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAPbmV1dHJpbm9Bc3NldElkAAAACHF1YW50aXR5CQAD8AAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAAD25ldXRyaW5vQXNzZXRJZAkAA/AAAAACBQAAABNsaXF1aWRhdGlvbkNvbnRyYWN0BQAAAA9uZXV0cmlub0Fzc2V0SWQAAAAAB2RlZmljaXQJAABlAAAAAgUAAAAObmV1dHJpbm9TdXBwbHkFAAAADnJlc2VydmVzSW5Vc2RuAAAAAA1jdXJyZW50TWF4Um9pCQAAawAAAAMFAAAAB2RlZmljaXQAAAAAAAAAAGQFAAAADm5ldXRyaW5vU3VwcGx5AAAAAA1jdXJyZW50QnJNdWx0CQAAawAAAAMFAAAADnJlc2VydmVzSW5Vc2RuBQAAAARNVUxUBQAAAA5uZXV0cmlub1N1cHBseQAAAAAKZmlyc3RPcmRlcgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAANRmlyc3RPcmRlcktleQAAAAANbnNidFN1cHBseU1BWAgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAALbnNidEFzc2V0SWQAAAAIcXVhbnRpdHkAAAAACm5zYnRTdXBwbHkJAABlAAAAAgUAAAANbnNidFN1cHBseU1BWAkAA/AAAAACBQAAAAR0aGlzBQAAAAtuc2J0QXNzZXRJZAEAAAANZ2V0T3JkZXJQcmljZQAAAAEAAAACaWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABBnZXRPcmRlclByaWNlS2V5AAAAAQUAAAACaWQBAAAADWdldE9yZGVyVG90YWwAAAABAAAAAmlkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAQZ2V0T3JkZXJUb3RhbEtleQAAAAEFAAAAAmlkAQAAAA1nZXRPcmRlck93bmVyAAAAAQAAAAJpZAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEGdldE9yZGVyT3duZXJLZXkAAAABBQAAAAJpZAEAAAAOZ2V0T3JkZXJTdGF0dXMAAAABAAAAAmlkCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABBQAAAAJpZAEAAAATZ2V0T3JkZXJGaWxsZWRUb3RhbAAAAAEAAAACaWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABZnZXRPcmRlckZpbGxlZFRvdGFsS2V5AAAAAQUAAAACaWQBAAAADGdldFByZXZPcmRlcgAAAAEAAAACaWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAA9nZXRQcmV2T3JkZXJLZXkAAAABBQAAAAJpZAEAAAAMZ2V0TmV4dE9yZGVyAAAAAQAAAAJpZAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAD2dldE5leHRPcmRlcktleQAAAAEFAAAAAmlkAQAAAA5nZXRQcmljZUZvclJvaQAAAAEAAAALcm9pUGVyY2VudHMJAABrAAAAAwkAAGQAAAACAAAAAAAAAABkBQAAAAtyb2lQZXJjZW50cwUAAAAMY3VycmVudFByaWNlAAAAAAAAAABkAQAAAA9nZXRSZXZlcnNlUHJpY2UAAAABAAAABXByaWNlCQAAaQAAAAIJAABoAAAAAgUAAAAIUFJJQ0VMRVQFAAAACFBSSUNFTEVUBQAAAAVwcmljZQEAAAAWY2FsY05zYnQyV2F2ZXNQcmljZVJhdwAAAAIAAAANc3BlbnRXYXZlc1JhdwAAAA9yZWNlaXZlZE5zYnRSYXcJAABrAAAAAwUAAAANc3BlbnRXYXZlc1JhdwkAAGgAAAACBQAAAAVQQVVMSQUAAAAIUFJJQ0VMRVQFAAAAD3JlY2VpdmVkTnNidFJhdwEAAAAJb3JkZXJEYXRhAAAABwAAAAdvcmRlcklkAAAADXRvdGFsV2F2ZWxldHMAAAAOZmlsbGVkV2F2ZWxldHMAAAAFb3duZXIAAAAGc3RhdHVzAAAAA3JvaQAAAAVwcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEGdldE9yZGVyUHJpY2VLZXkAAAABBQAAAAdvcmRlcklkBQAAAAVwcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEGdldE9yZGVyVG90YWxLZXkAAAABBQAAAAdvcmRlcklkBQAAAA10b3RhbFdhdmVsZXRzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWZ2V0T3JkZXJGaWxsZWRUb3RhbEtleQAAAAEFAAAAB29yZGVySWQFAAAADmZpbGxlZFdhdmVsZXRzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBnZXRPcmRlck93bmVyS2V5AAAAAQUAAAAHb3JkZXJJZAUAAAAFb3duZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABFnZXRPcmRlckhlaWdodEtleQAAAAEFAAAAB29yZGVySWQFAAAABmhlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABBQAAAAdvcmRlcklkBQAAAAZzdGF0dXMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAZZGVidWdfb3JkZXJfY3VycmVudFByaWNlXwUAAAAHb3JkZXJJZAUAAAAMY3VycmVudFByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASZ2V0Um9pQnlPcmRlcklkS2V5AAAAAQUAAAAHb3JkZXJJZAUAAAADcm9pBQAAAANuaWwAAAAABElkeEEAAAAAAAAAAAAAAAAACElkeFBhdWxCAAAAAAAAAAAB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BQAAABJuc2J0MldhdmVzUHJpY2VSYXcJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAMb3duZXJBZGRyZXNzBQAAAApuc2J0QW1vdW50BQAAAAtuc2J0QXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAAAh3YXZlc1BheQUAAAAEdW5pdAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAABFkZWJ1Z19jdXJ2ZVJlc3VsdAkBAAAABXRvU3RyAAAAAgIAAAALY3VydmVSZXN1bHQFAAAAC2N1cnZlUmVzdWx0BQAAAANuaWwAAAABaQEAAAALY2FuY2VsT3JkZXIAAAABAAAAB29yZGVySWQEAAAABW93bmVyCQEAAAANZ2V0T3JkZXJPd25lcgAAAAEFAAAAB29yZGVySWQEAAAABmFtb3VudAkAAGUAAAACCQEAAAANZ2V0T3JkZXJUb3RhbAAAAAEFAAAAB29yZGVySWQJAQAAABNnZXRPcmRlckZpbGxlZFRvdGFsAAAAAQUAAAAHb3JkZXJJZAQAAAAGY2FsbGVyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAJbmV4dE9yZGVyCQEAAAAMZ2V0TmV4dE9yZGVyAAAAAQUAAAAHb3JkZXJJZAQAAAAJcHJldk9yZGVyCQEAAAAMZ2V0UHJldk9yZGVyAAAAAQUAAAAHb3JkZXJJZAMJAQAAAAIhPQAAAAIJAQAAAA5nZXRPcmRlclN0YXR1cwAAAAEFAAAAB29yZGVySWQFAAAAA05FVwkAAAIAAAABAgAAABRpbnZhbGlkIG9yZGVyIHN0YXR1cwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA1GaXJzdE9yZGVyS2V5AwkAAAAAAAACBQAAAApmaXJzdE9yZGVyBQAAAAdvcmRlcklkBQAAAAluZXh0T3JkZXIFAAAACmZpcnN0T3JkZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2dldE5leHRPcmRlcktleQAAAAEFAAAACXByZXZPcmRlcgUAAAAJbmV4dE9yZGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9nZXRQcmV2T3JkZXJLZXkAAAABBQAAAAluZXh0T3JkZXIFAAAACXByZXZPcmRlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABBQAAAAdvcmRlcklkBQAAAAhDQU5DRUxFRAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABmFtb3VudAUAAAAEdW5pdAUAAAADbmlsAAAAAWkBAAAACWN1cnZlUmVzdAAAAAYAAAAEd1JhdwAAAAR1UmF3AAAABXByaWNlAAAABG1SYXcAAAAEc1JhdwAAAAt3YXZlc1BheVJhdwQAAAALY3VydmVSZXN1bHQJAQAAAA1jdXJ2ZUZ1bmN0aW9uAAAABgUAAAAHcmVzZXJ2ZQUAAAAObmV1dHJpbm9TdXBwbHkFAAAADGN1cnJlbnRQcmljZQUAAAANbnNidFN1cHBseU1BWAUAAAAKbnNidFN1cHBseQUAAAALd2F2ZXNQYXlSYXcEAAAAB3Jlc3VsdHMJAQAAAAV0b1N0cgAAAAICAAAAC2N1cnZlUmVzdWx0BQAAAAtjdXJ2ZVJlc3VsdAkAAAIAAAABBQAAAAdyZXN1bHRzAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAQcHViS2V5QWRtaW5zTGlzdAkABEwAAAACAgAAACxHSmRMU2FMaXY1Szd4dWVqYWM4bWNSY0hveW8zZFByRVNydmt0RzNhNk1BUgkABEwAAAACAgAAACxGV1ZmZllyMkFMbUhNZWpabTNXcWVMejZTZHltM2dMRkd0Sm40S1R3eVU1eAkABEwAAAACAgAAACwzV2gyTGFXY2I1Z2c3SzJwUGNXM0VwNkVBdVJCellrQWdyZHB0NDNqVERGYQkABEwAAAACAgAAACw1V1JYRlNqd2NUYk5mS2NKczhacVhtU1NXWXNTVkpVdE12TXFaajVoSDROYwUAAAADbmlsBAAAAAVjb3VudAkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACQACWQAAAAEJAAGRAAAAAgUAAAAQcHViS2V5QWRtaW5zTGlzdAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAABCQACWQAAAAEJAAGRAAAAAgUAAAAQcHViS2V5QWRtaW5zTGlzdAAAAAAAAAAAAQAAAAAAAAAAAQAAAAAAAAAAAAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAACCQACWQAAAAEJAAGRAAAAAgUAAAAQcHViS2V5QWRtaW5zTGlzdAAAAAAAAAAAAgAAAAAAAAAAAQAAAAAAAAAAAAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAADCQACWQAAAAEJAAGRAAAAAgUAAAAQcHViS2V5QWRtaW5zTGlzdAAAAAAAAAAAAwAAAAAAAAAAAgAAAAAAAAAAAAkAAGcAAAACBQAAAAVjb3VudAAAAAAAAAAAA4rvdeY=", "height": 1632212, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 4 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0) | |
5 | + | ||
6 | + | ||
7 | + | func getStringByKey (key) = valueOrElse(getString(this, key), "") | |
8 | + | ||
9 | + | ||
10 | + | func getBoolByAddressAndKey (address,key) = valueOrElse(getBoolean(address, key), false) | |
11 | + | ||
12 | + | ||
13 | + | func getStringByAddressAndKey (address,key) = valueOrElse(getString(address, key), "") | |
14 | + | ||
15 | + | ||
16 | + | func getNumberByAddressAndKey (address,key) = valueOrElse(getInteger(address, key), 0) | |
17 | + | ||
18 | + | ||
19 | + | let WAVELET = 100000000 | |
20 | + | ||
21 | + | let PAULI = 1000000 | |
22 | + | ||
23 | + | let PAULISCALE = 6 | |
24 | + | ||
25 | + | let PRICELET = 1000000 | |
26 | + | ||
27 | + | let MULT = 100000000 | |
28 | + | ||
29 | + | let MULTSCALE = 8 | |
30 | + | ||
31 | + | let MINORDERTOTAL = (10 * WAVELET) | |
32 | + | ||
33 | + | let MAXROI = 95 | |
34 | + | ||
35 | + | let CANCELED = "canceled" | |
36 | + | ||
37 | + | let NEW = "new" | |
38 | + | ||
39 | + | let FILLED = "filled" | |
40 | + | ||
41 | + | let PriceKey = "price" | |
42 | + | ||
43 | + | let NsbtAssetIdKey = "bond_asset_id" | |
44 | + | ||
45 | + | let NeutrinoAssetIdKey = "neutrino_asset_id" | |
46 | + | ||
47 | + | let BalanceLockedkKey = "balance_lock_" | |
48 | + | ||
49 | + | let WavesLockedBalanceKey = (BalanceLockedkKey + "waves") | |
50 | + | ||
51 | + | let NeutrinoLockedBalanceKey = (BalanceLockedkKey + "neutrino") | |
52 | + | ||
53 | + | let FirstOrderKey = "order_first" | |
54 | + | ||
55 | + | func getRoiByOrderIdKey (orderId) = ("debug_order_roi_" + orderId) | |
56 | + | ||
57 | + | ||
58 | + | func getOrderPriceKey (orderId) = ("order_price_" + orderId) | |
59 | + | ||
60 | + | ||
61 | + | func getOrderTotalKey (orderId) = ("order_total_" + orderId) | |
62 | + | ||
63 | + | ||
64 | + | func getOrderOwnerKey (orderId) = ("order_owner_" + orderId) | |
65 | + | ||
66 | + | ||
67 | + | func getOrderHeightKey (orderId) = ("order_height_" + orderId) | |
68 | + | ||
69 | + | ||
70 | + | func getOrderStatusKey (orderId) = ("order_status_" + orderId) | |
71 | + | ||
72 | + | ||
73 | + | func getOrderFilledTotalKey (orderId) = ("order_filled_total_" + orderId) | |
74 | + | ||
75 | + | ||
76 | + | func getPrevOrderKey (orderId) = ("order_prev_" + orderId) | |
77 | + | ||
78 | + | ||
79 | + | func getNextOrderKey (orderId) = ("order_next_" + orderId) | |
80 | + | ||
81 | + | ||
82 | + | func convertNeutrinoToWaves (amount,price) = fraction(fraction(amount, PRICELET, price), WAVELET, PAULI) | |
83 | + | ||
84 | + | ||
85 | + | func convertWavesToNeutrino (amount,price) = fraction(fraction(amount, price, PRICELET), PAULI, WAVELET) | |
86 | + | ||
87 | + | ||
88 | + | func convertWavesToBond (amount,price) = convertWavesToNeutrino(amount, price) | |
89 | + | ||
90 | + | ||
91 | + | func convertBondToWaves (amount,price) = convertNeutrinoToWaves(amount, price) | |
92 | + | ||
93 | + | ||
94 | + | let neutrinoContract = Address(base58'3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo') | |
95 | + | ||
96 | + | let controlContract = Address(base58'3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP') | |
97 | + | ||
98 | + | let liquidationContract = Address(base58'3P4PCxsJqMzQBALo8zANHtBDZRRquobHQp7') | |
99 | + | ||
100 | + | let neutrinoAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p' | |
101 | + | ||
102 | + | let nsbtAssetId = base58'6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g' | |
103 | + | ||
104 | + | let isBlocked = getBoolByAddressAndKey(controlContract, "is_blocked") | |
105 | + | ||
106 | + | let currentPrice = getNumberByAddressAndKey(controlContract, PriceKey) | |
107 | + | ||
108 | + | let neutrinoLockedBalance = getNumberByAddressAndKey(neutrinoContract, NeutrinoLockedBalanceKey) | |
109 | + | ||
110 | + | let reserve = (wavesBalance(neutrinoContract).regular - getNumberByAddressAndKey(neutrinoContract, WavesLockedBalanceKey)) | |
111 | + | ||
112 | + | let reservesInUsdn = convertWavesToNeutrino(reserve, currentPrice) | |
113 | + | ||
114 | + | let neutrinoSupply = (((neutrinoLockedBalance + value(assetInfo(neutrinoAssetId)).quantity) - assetBalance(neutrinoContract, neutrinoAssetId)) - assetBalance(liquidationContract, neutrinoAssetId)) | |
115 | + | ||
116 | + | let deficit = (neutrinoSupply - reservesInUsdn) | |
117 | + | ||
118 | + | let currentMaxRoi = fraction(deficit, 100, neutrinoSupply) | |
119 | + | ||
120 | + | let currentBrMult = fraction(reservesInUsdn, MULT, neutrinoSupply) | |
121 | + | ||
122 | + | let firstOrder = getStringByKey(FirstOrderKey) | |
123 | + | ||
124 | + | let nsbtSupplyMAX = value(assetInfo(nsbtAssetId)).quantity | |
125 | + | ||
126 | + | let nsbtSupply = (nsbtSupplyMAX - assetBalance(this, nsbtAssetId)) | |
127 | + | ||
128 | + | func getOrderPrice (id) = getNumberByKey(getOrderPriceKey(id)) | |
129 | + | ||
130 | + | ||
131 | + | func getOrderTotal (id) = getNumberByKey(getOrderTotalKey(id)) | |
132 | + | ||
133 | + | ||
134 | + | func getOrderOwner (id) = getStringByKey(getOrderOwnerKey(id)) | |
135 | + | ||
136 | + | ||
137 | + | func getOrderStatus (id) = getStringByKey(getOrderStatusKey(id)) | |
138 | + | ||
139 | + | ||
140 | + | func getOrderFilledTotal (id) = getNumberByKey(getOrderFilledTotalKey(id)) | |
141 | + | ||
142 | + | ||
143 | + | func getPrevOrder (id) = getStringByKey(getPrevOrderKey(id)) | |
144 | + | ||
145 | + | ||
146 | + | func getNextOrder (id) = getStringByKey(getNextOrderKey(id)) | |
147 | + | ||
148 | + | ||
149 | + | func getPriceForRoi (roiPercents) = fraction((100 + roiPercents), currentPrice, 100) | |
150 | + | ||
151 | + | ||
152 | + | func getReversePrice (price) = ((PRICELET * PRICELET) / price) | |
153 | + | ||
154 | + | ||
155 | + | func calcNsbt2WavesPriceRaw (spentWavesRaw,receivedNsbtRaw) = fraction(spentWavesRaw, (PAULI * PRICELET), receivedNsbtRaw) | |
156 | + | ||
157 | + | ||
158 | + | func orderData (orderId,totalWavelets,filledWavelets,owner,status,roi,price) = [IntegerEntry(getOrderPriceKey(orderId), price), IntegerEntry(getOrderTotalKey(orderId), totalWavelets), IntegerEntry(getOrderFilledTotalKey(orderId), filledWavelets), StringEntry(getOrderOwnerKey(orderId), owner), IntegerEntry(getOrderHeightKey(orderId), height), StringEntry(getOrderStatusKey(orderId), status), IntegerEntry(("debug_order_currentPrice_" + orderId), currentPrice), IntegerEntry(getRoiByOrderIdKey(orderId), roi)] | |
159 | + | ||
160 | + | ||
161 | + | let IdxA = 0 | |
162 | + | ||
163 | + | let IdxPaulB = 1 | |
164 | + | ||
165 | + | let IdxWResAsUsdn = 2 | |
166 | + | ||
167 | + | let IdxMultBR = 3 | |
168 | + | ||
169 | + | let IdxMultPower = 4 | |
170 | + | ||
171 | + | let IdxMultExpInPower = 5 | |
172 | + | ||
173 | + | let IdxMultK = 6 | |
174 | + | ||
175 | + | func calculateK (wRaw,uRaw,price,mRaw,sRaw) = { | |
176 | + | let EXP = 271828100 | |
177 | + | let a = valueOrElse(getInteger(this, "nsbtCurveParam_a"), 3) | |
178 | + | let paulB = valueOrElse(getInteger(this, "nsbtCurveParam_b"), ((3 * PAULI) / 10)) | |
179 | + | let wReservesInUsdn = convertWavesToNeutrino(wRaw, price) | |
180 | + | let multBR = fraction(wReservesInUsdn, MULT, uRaw) | |
181 | + | let multPower = (a * (multBR - (1 * MULT))) | |
182 | + | let multExpInPower = pow(EXP, MULTSCALE, multPower, MULTSCALE, MULTSCALE, DOWN) | |
183 | + | let multK = fraction(paulB, multExpInPower, PAULI) | |
184 | + | [a, paulB, wReservesInUsdn, multBR, multPower, multExpInPower, multK] | |
185 | + | } | |
186 | + | ||
187 | + | ||
188 | + | func curveFunction (wRaw,uRaw,price,mRaw,sRaw,wavesPayRaw) = { | |
189 | + | let kCalcArray = calculateK(wRaw, uRaw, price, mRaw, sRaw) | |
190 | + | let multK = kCalcArray[IdxMultK] | |
191 | + | let usdnPay = convertWavesToNeutrino(wavesPayRaw, price) | |
192 | + | let multStepM1 = fraction(multK, mRaw, PAULI) | |
193 | + | let multStep2 = fraction(multStepM1, PAULI, (mRaw - sRaw)) | |
194 | + | let multStepM3 = (fraction(usdnPay, MULT, PAULI) + fraction(multStep2, mRaw, PAULI)) | |
195 | + | let multStep4 = fraction(multStepM1, MULT, multStepM3) | |
196 | + | let stepM5 = fraction(multStep4, mRaw, MULT) | |
197 | + | let nsbtAmountRaw = ((mRaw - sRaw) - stepM5) | |
198 | + | [nsbtAmountRaw, usdnPay, wRaw, uRaw, mRaw, sRaw, kCalcArray[IdxA], kCalcArray[IdxPaulB], kCalcArray[IdxWResAsUsdn], price, kCalcArray[IdxMultBR], kCalcArray[IdxMultPower], kCalcArray[IdxMultExpInPower], multK, multStepM1, multStep2, multStepM3, multStep4, stepM5] | |
199 | + | } | |
200 | + | ||
201 | + | ||
202 | + | func toStr (name,curveResult) = (((((((((((((((((((((((((((((((((((((((name + "[nsbtAmountRaw=") + toString(curveResult[0])) + " usdnPayment=") + toString(curveResult[1])) + " wRaw=") + toString(curveResult[2])) + " uRaw=") + toString(curveResult[3])) + " mRaw=") + toString(curveResult[4])) + " sRaw=") + toString(curveResult[5])) + " nsbtCurveParam_a=") + toString(curveResult[6])) + " nsbtCurveParam_b=") + toString(curveResult[7])) + " wReservesInUsdn=") + toString(curveResult[8])) + " price=") + toString(curveResult[9])) + " multBR=") + toString(curveResult[10])) + " multPower=") + toString(curveResult[11])) + " multExpInPower=") + toString(curveResult[12])) + " multK=") + toString(curveResult[13])) + " multStepM1=") + toString(curveResult[14])) + " multStep2=") + toString(curveResult[15])) + " multStepM3=") + toString(curveResult[16])) + " multStep4=") + toString(curveResult[17])) + " stepM5=") + toString(curveResult[18])) + "]") | |
203 | + | ||
204 | + | ||
205 | + | @Callable(i) | |
206 | + | func buyNsbt () = { | |
207 | + | let pmt = value(i.payments[0]) | |
208 | + | let pmtAmount = pmt.amount | |
209 | + | let wavesPay = pmtAmount | |
210 | + | let ownerAddress = i.caller | |
211 | + | if (isBlocked) | |
212 | + | then throw("contract is blocked by EMERGENCY SHUTDOWN actions until reactivation by emergency oracles") | |
213 | + | else if (isDefined(pmt.assetId)) | |
214 | + | then throw("can use waves only") | |
215 | + | else if (((10 * WAVELET) > pmtAmount)) | |
216 | + | then throw("min 10 waves expected") | |
217 | + | else { | |
218 | + | let curveResult = curveFunction(reserve, neutrinoSupply, currentPrice, nsbtSupplyMAX, nsbtSupply, wavesPay) | |
219 | + | let nsbtAmount = curveResult[0] | |
220 | + | if ((0 >= nsbtAmount)) | |
221 | + | then throw("nsbtAmount <= 0") | |
222 | + | else { | |
223 | + | let nsbt2WavesPriceRaw = calcNsbt2WavesPriceRaw(wavesPay, nsbtAmount) | |
224 | + | let roi = 0 | |
225 | + | (orderData(toBase58String(i.transactionId), pmtAmount, pmtAmount, toString(ownerAddress), FILLED, roi, nsbt2WavesPriceRaw) ++ [ScriptTransfer(ownerAddress, nsbtAmount, nsbtAssetId), ScriptTransfer(neutrinoContract, wavesPay, unit), StringEntry("debug_curveResult", toStr("curveResult", curveResult))]) | |
226 | + | } | |
227 | + | } | |
228 | + | } | |
229 | + | ||
230 | + | ||
231 | + | ||
232 | + | @Callable(i) | |
233 | + | func cancelOrder (orderId) = { | |
234 | + | let owner = getOrderOwner(orderId) | |
235 | + | let amount = (getOrderTotal(orderId) - getOrderFilledTotal(orderId)) | |
236 | + | let caller = toString(i.caller) | |
237 | + | let nextOrder = getNextOrder(orderId) | |
238 | + | let prevOrder = getPrevOrder(orderId) | |
239 | + | if ((getOrderStatus(orderId) != NEW)) | |
240 | + | then throw("invalid order status") | |
241 | + | else [StringEntry(FirstOrderKey, if ((firstOrder == orderId)) | |
242 | + | then nextOrder | |
243 | + | else firstOrder), StringEntry(getNextOrderKey(prevOrder), nextOrder), StringEntry(getPrevOrderKey(nextOrder), prevOrder), StringEntry(getOrderStatusKey(orderId), CANCELED), ScriptTransfer(i.caller, amount, unit)] | |
244 | + | } | |
245 | + | ||
246 | + | ||
247 | + | ||
248 | + | @Callable(i) | |
249 | + | func curveRest (wRaw,uRaw,price,mRaw,sRaw,wavesPayRaw) = { | |
250 | + | let curveResult = curveFunction(reserve, neutrinoSupply, currentPrice, nsbtSupplyMAX, nsbtSupply, wavesPayRaw) | |
251 | + | let results = toStr("curveResult", curveResult) | |
252 | + | throw(results) | |
253 | + | } | |
254 | + | ||
255 | + | ||
256 | + | @Verifier(tx) | |
257 | + | func verify () = { | |
258 | + | let pubKeyAdminsList = ["GJdLSaLiv5K7xuejac8mcRcHoyo3dPrESrvktG3a6MAR", "FWVffYr2ALmHMejZm3WqeLz6Sdym3gLFGtJn4KTwyU5x", "3Wh2LaWcb5gg7K2pPcW3Ep6EAuRBzYkAgrdpt43jTDFa", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"] | |
259 | + | let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0]))) | |
260 | + | then 1 | |
261 | + | else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1]))) | |
262 | + | then 1 | |
263 | + | else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2]))) | |
264 | + | then 1 | |
265 | + | else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[3], fromBase58String(pubKeyAdminsList[3]))) | |
266 | + | then 2 | |
267 | + | else 0)) | |
268 | + | (count >= 3) | |
269 | + | } | |
270 | + |
github/deemru/w8io/169f3d6 22.23 ms ◑