tx · 5WiKyA1KQfvsWUt4BFKaDJfAKLpeyhebAVsEceEqi5FU

3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J:  -0.01400000 Waves

2022.04.25 19:27 [2024261] smart account 3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J > SELF 0.00000000 Waves

{ "type": 13, "id": "5WiKyA1KQfvsWUt4BFKaDJfAKLpeyhebAVsEceEqi5FU", "fee": 1400000, "feeAssetId": null, "timestamp": 1650904144769, "version": 1, "sender": "3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J", "senderPublicKey": "4DthuG3xjZV9WtZ34Y66AummdAr67wRzwWsVQL4y2bob", "proofs": [ "dQJUDmC3tjc2V6SVDcHijoGudP3hqPYviyt3zfaFUAjARXsTLxmWRT1B2mv8347h8mhCYfxhwZ6ZXuRRAS2TLnf" ], "script": "base64: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AaQAAAABCAUAAAAJbGFzdEJsb2NrAAAABmhlaWdodAkABEwAAAACCQABpAAAAAEIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAETAAAAAIJAAGkAAAAAQUAAAAJb2xkQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAIb2xkU3RhcnQJAARMAAAAAgkAAaQAAAABBQAAAAluZXdBbW91bnQJAARMAAAAAgkAAaQAAAABBQAAAAhuZXdTdGFydAUAAAADbmlsBQAAAAlzZXBhcmF0b3IBAAAAGGZvcm1hdENsYWltSGlzdG9yeVJlY29yZAAAAAIAAAAEdXNlcgAAAA5jbGFpbWVkUmV3YXJkcwkABLkAAAACCQAETAAAAAICAAAACCVzJWQlZCVzCQAETAAAAAIFAAAABHVzZXIJAARMAAAAAgkAAaQAAAABCAUAAAAJbGFzdEJsb2NrAAAABmhlaWdodAkABEwAAAACCQABpAAAAAEIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAETAAAAAIFAAAADmNsYWltZWRSZXdhcmRzBQAAAANuaWwFAAAACXNlcGFyYXRvcgEAAAASSGlzdG9yeVJlY29yZEVudHJ5AAAABwAAAAR0eXBlAAAAC3VzZXJBZGRyZXNzAAAABHR4SWQAAAAJb2xkQW1vdW50AAAACG9sZFN0YXJ0AAAACW5ld0Ftb3VudAAAAAhuZXdTdGFydAkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGtleUhpc3RvcnlSZWNvcmQAAAADBQAAAAR0eXBlBQAAAAt1c2VyQWRkcmVzcwUAAAAEdHhJZAkBAAAAE2Zvcm1hdEhpc3RvcnlSZWNvcmQAAAAEBQAAAAlvbGRBbW91bnQFAAAACG9sZFN0YXJ0BQAAAAluZXdBbW91bnQFAAAACG5ld1N0YXJ0AQAAABFDbGFpbUhpc3RvcnlFbnRyeQAAAAMAAAALdXNlckFkZHJlc3MAAAAEdHhJZAAAAA5jbGFpbWVkUmV3YXJkcwkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGtleUhpc3RvcnlSZWNvcmQAAAADAgAAAAVjbGFpbQUAAAALdXNlckFkZHJlc3MFAAAABHR4SWQJAQAAABhmb3JtYXRDbGFpbUhpc3RvcnlSZWNvcmQAAAACCQAEJQAAAAEFAAAAC3VzZXJBZGRyZXNzBQAAAA5jbGFpbWVkUmV3YXJkcwEAAAALU3RhdHNSZXN1bHQAAAADAAAADnRvdGFsTG9ja2VkSW5jAAAADGxvY2tDb3VudEluYwAAAA11c2Vyc0NvdW50SW5jBAAAAApsb2Nrc0NvdW50CQEAAAAMZ2V0SW50T3JaZXJvAAAAAQkBAAAAEmtleVN0YXRzTG9ja3NDb3VudAAAAAAEAAAACnVzZXJzQ291bnQJAQAAAAxnZXRJbnRPclplcm8AAAABCQEAAAASa2V5U3RhdHNVc2Vyc0NvdW50AAAAAAQAAAALdG90YWxBbW91bnQJAQAAAAxnZXRJbnRPclplcm8AAAABCQEAAAAXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAAABAAAAA50b3RhbEFtb3VudE5ldwkAAGQAAAACBQAAAAt0b3RhbEFtb3VudAUAAAAOdG90YWxMb2NrZWRJbmMJAAUVAAAAAwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEmtleVN0YXRzTG9ja3NDb3VudAAAAAAJAABkAAAAAgUAAAAKbG9ja3NDb3VudAUAAAAMbG9ja0NvdW50SW5jCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASa2V5U3RhdHNVc2Vyc0NvdW50AAAAAAkAAGQAAAACBQAAAAp1c2Vyc0NvdW50BQAAAA11c2Vyc0NvdW50SW5jCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAAABQAAAA50b3RhbEFtb3VudE5ldwUAAAADbmlsBQAAAAt0b3RhbEFtb3VudAUAAAAOdG90YWxBbW91bnROZXcBAAAAD0xvY2tQYXJhbXNFbnRyeQAAAAMAAAALdXNlckFkZHJlc3MAAAAGYW1vdW50AAAABXN0YXJ0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5TG9ja1BhcmFtVXNlckFtb3VudAAAAAEFAAAAC3VzZXJBZGRyZXNzBQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlMb2NrUGFyYW1TdGFydEJsb2NrAAAAAQUAAAALdXNlckFkZHJlc3MFAAAABXN0YXJ0BQAAAANuaWwBAAAAD2dldFBhcmFtc09yRmFpbAAAAAAEAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAaa2V5TmV1dHJpbm9Db250cmFjdEFkZHJlc3MAAAAACQAFFgAAAAQJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAGWtleUF1Y3Rpb25Db250cmFjdEFkZHJlc3MAAAAACQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAAxrZXlCb25kQXNzZXQAAAAACQEAAAAMZ2V0SW50T3JGYWlsAAAAAQkBAAAAEGtleU1pbkxvY2tBbW91bnQAAAAACQEAAAAMZ2V0SW50T3JGYWlsAAAAAQkBAAAAC2tleUhhbGZMaWZlAAAAAAEAAAAMaXNBY3RpdmVVc2VyAAAAAQAAAAt1c2VyQWRkcmVzcwkAAGYAAAACCQEAAAAMZ2V0SW50T3JFbHNlAAAAAgkBAAAAFmtleUxvY2tQYXJhbVVzZXJBbW91bnQAAAABBQAAAAt1c2VyQWRkcmVzcwAAAAAAAAAAAAAAAAAAAAAAAAEAAAATZ2V0VXNlclBhcmFtc09yVW5pdAAAAAEAAAALdXNlckFkZHJlc3MDCQEAAAAMaXNBY3RpdmVVc2VyAAAAAQUAAAALdXNlckFkZHJlc3MJAAUVAAAAAwcJAQAAAAxnZXRJbnRPckZhaWwAAAABCQEAAAAWa2V5TG9ja1BhcmFtVXNlckFtb3VudAAAAAEFAAAAC3VzZXJBZGRyZXNzCQEAAAAMZ2V0SW50T3JGYWlsAAAAAQkBAAAAFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sAAAABBQAAAAt1c2VyQWRkcmVzcwUAAAAEdW5pdAEAAAATZ2V0VXNlclBhcmFtc09yRmFpbAAAAAEAAAALdXNlckFkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAAE2dldFVzZXJQYXJhbXNPclVuaXQAAAABBQAAAAt1c2VyQWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAABVVzZXIgCQAEJQAAAAEFAAAAC3VzZXJBZGRyZXNzAgAAAA8gaXMgbm90IGRlZmluZWQAAAAAEnN1cHBvcnRlZEFzc2V0c1N0cgkBAAAADGdldFN0ck9yRWxzZQAAAAIJAQAAABhrZXlTdXBwb3J0ZWRSZXdhcmRBc3NldHMAAAAAAgAAAAAAAAAAE3N1cHBvcnRlZEFzc2V0c0xpc3QJAAS1AAAAAgUAAAASc3VwcG9ydGVkQXNzZXRzU3RyAgAAAAFfAQAAAApjYWxjUmV3YXJkAAAABQAAAAt1c2VyQWRkcmVzcwAAAAdhc3NldElkAAAADXN0YWtlZEFtb3VudFgAAAAOZGVwb3NpdE51bVVzZXIAAAAOZGVwb3NpdE51bUxhc3QEAAAAF3Jld2FyZFBlck5zYnRTdW1MYXN0S0VZCQEAAAAVa2V5UmV3YXJkUGVyTnNidFN1bUF0AAAAAgUAAAAOZGVwb3NpdE51bUxhc3QFAAAAB2Fzc2V0SWQEAAAACnN1bUxhc3RYMTgJAAGnAAAAAQkBAAAADGdldFN0ck9yRWxzZQAAAAIJAQAAABVrZXlSZXdhcmRQZXJOc2J0U3VtQXQAAAACBQAAAA5kZXBvc2l0TnVtTGFzdAUAAAAHYXNzZXRJZAIAAAABMAQAAAAKc3VtVXNlclgxOAkAAacAAAABCQEAAAAMZ2V0U3RyT3JFbHNlAAAAAgkBAAAAFWtleVJld2FyZFBlck5zYnRTdW1BdAAAAAIFAAAADmRlcG9zaXROdW1Vc2VyBQAAAAdhc3NldElkAgAAAAEwBAAAABFyZXdhcmREeW5hbWljUGFydAkAAaAAAAABCQABPAAAAAMJAAE4AAAAAgUAAAAKc3VtTGFzdFgxOAUAAAAKc3VtVXNlclgxOAUAAAANc3Rha2VkQW1vdW50WAUAAAAHTVVMVFgxOAQAAAATcmV3YXJkQ2FjaGVkUGFydEtFWQkBAAAACWtleVJld2FyZAAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAAdhc3NldElkBAAAABByZXdhcmRDYWNoZWRQYXJ0CQEAAAAMZ2V0SW50T3JFbHNlAAAAAgUAAAATcmV3YXJkQ2FjaGVkUGFydEtFWQAAAAAAAAAAAAkABRYAAAAECQAAZAAAAAIFAAAAEHJld2FyZENhY2hlZFBhcnQFAAAAEXJld2FyZER5bmFtaWNQYXJ0BQAAABByZXdhcmRDYWNoZWRQYXJ0BQAAABFyZXdhcmREeW5hbWljUGFydAUAAAATcmV3YXJkQ2FjaGVkUGFydEtFWQEAAAANUmV3YXJkRW50cmllcwAAAAMAAAAJaXNOZXdVc2VyAAAAC3VzZXJBZGRyZXNzAAAADHN0YWtlZEFtb3VudAQAAAANc3Rha2VkQW1vdW50WAkAATYAAAABBQAAAAxzdGFrZWRBbW91bnQEAAAAG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQkBAAAAG2tleVVzZXJSZXdhcmRGcm9tRGVwb3NpdE51bQAAAAEFAAAAC3VzZXJBZGRyZXNzBAAAAA5kZXBvc2l0TnVtVXNlcgkBAAAADGdldEludE9yRWxzZQAAAAIFAAAAG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQD//////////wQAAAAOZGVwb3NpdE51bUxhc3QJAQAAAAxnZXRJbnRPckVsc2UAAAACCQEAAAARa2V5RGVwb3NpdE51bUxhc3QAAAAAAP//////////CgEAAAAbZm9yRWFjaEFzc2V0Q2FjaGVVc2VyUmV3YXJkAAAAAgAAAAVhY2N1bQAAAAVhc3NldAQAAAALJHQwNzQwMDc1MzUJAQAAAApjYWxjUmV3YXJkAAAABQUAAAALdXNlckFkZHJlc3MFAAAABWFzc2V0BQAAAA1zdGFrZWRBbW91bnRYBQAAAA5kZXBvc2l0TnVtVXNlcgUAAAAOZGVwb3NpdE51bUxhc3QEAAAAC3Jld2FyZFRvdGFsCAUAAAALJHQwNzQwMDc1MzUAAAACXzEEAAAABmNhY2hlZAgFAAAACyR0MDc0MDA3NTM1AAAAAl8yBAAAAAdkeW5hbWljCAUAAAALJHQwNzQwMDc1MzUAAAACXzMEAAAAE3Jld2FyZENhY2hlZFBhcnRLRVkIBQAAAAskdDA3NDAwNzUzNQAAAAJfNAkABE0AAAACBQAAAAVhY2N1bQkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE3Jld2FyZENhY2hlZFBhcnRLRVkFAAAAC3Jld2FyZFRvdGFsAwMJAAAAAAAAAgUAAAAOZGVwb3NpdE51bUxhc3QA//////////8JAAAAAAAAAgUAAAAOZGVwb3NpdE51bVVzZXIA//////////8HBQAAAANuaWwDAwkAAAAAAAACBQAAAA5kZXBvc2l0TnVtTGFzdAD//////////wkAAGYAAAACBQAAAA5kZXBvc2l0TnVtVXNlcgD//////////wcJAAACAAAAAQIAAAAvaW52YWxpZCBkZXBvc2l0TnVtTGFzdCBhbmQgZGVwb3NpdE51bVVzZXIgc3RhdGUDAwkAAGYAAAACBQAAAA5kZXBvc2l0TnVtTGFzdAD//////////wkAAAAAAAACBQAAAA5kZXBvc2l0TnVtVXNlcgD//////////wcDBQAAAAlpc05ld1VzZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQUAAAAOZGVwb3NpdE51bUxhc3QFAAAAA25pbAkABE0AAAACCgAAAAACJGwFAAAAE3N1cHBvcnRlZEFzc2V0c0xpc3QKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwBQAAAANuaWwKAQAAAAUkZjBfMQAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAQAAABtmb3JFYWNoQXNzZXRDYWNoZVVzZXJSZXdhcmQAAAACBQAAAAIkYQkAAZEAAAACBQAAAAIkbAUAAAACJGkKAQAAAAUkZjBfMgAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAAACAAAAAQIAAAAUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQAAAAUkZjBfMgAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIFAAAABSRhY2MwAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAGAAAAAAAAAAAHAAAAAAAAAAAIAAAAAAAAAAAJAAAAAAAAAAAKCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAbdXNlclJld2FyZEZyb21EZXBvc2l0TnVtS0VZBQAAAA5kZXBvc2l0TnVtTGFzdAMDCQAAZgAAAAIFAAAADmRlcG9zaXROdW1MYXN0AP//////////CQAAZgAAAAIFAAAADmRlcG9zaXROdW1Vc2VyAP//////////BwMFAAAACWlzTmV3VXNlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAbdXNlclJld2FyZEZyb21EZXBvc2l0TnVtS0VZBQAAAA5kZXBvc2l0TnVtTGFzdAUAAAADbmlsCQAETQAAAAIKAAAAAAIkbAUAAAATc3VwcG9ydGVkQXNzZXRzTGlzdAoAAAAAAiRzCQABkAAAAAEFAAAAAiRsCgAAAAAFJGFjYzAFAAAAA25pbAoBAAAABSRmMF8xAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkBAAAAG2ZvckVhY2hBc3NldENhY2hlVXNlclJld2FyZAAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAABSRmMF8yAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkAAAIAAAABAgAAABRMaXN0IHNpemUgZXhjZWVkcyAxMAkBAAAABSRmMF8yAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkFAAAADmRlcG9zaXROdW1MYXN0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAJHVuY292ZXJlZCBjb25kaXRpb246IGRlcG9zaXROdW1MYXN0PQkAAaQAAAABBQAAAA5kZXBvc2l0TnVtTGFzdAIAAAAQIGRlcG9zaXROdW1Vc2VyPQkAAaQAAAABBQAAAA5kZXBvc2l0TnVtVXNlcgEAAAAiSW5jcmVtZW50Tm90RGlzdHJpYnV0ZWRSZXdhcmRFbnRyeQAAAAIAAAADdGtuAAAACWFtb3VudEluYwQAAAAXbm90RGlzdHJpYnV0ZWRSZXdhcmRLRVkJAQAAABdrZXlOb3REaXN0cmlidXRlZFJld2FyZAAAAAEFAAAAA3RrbgQAAAAUbm90RGlzdHJpYnV0ZWRSZXdhcmQJAQAAAAxnZXRJbnRPckVsc2UAAAACBQAAABdub3REaXN0cmlidXRlZFJld2FyZEtFWQAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAXbm90RGlzdHJpYnV0ZWRSZXdhcmRLRVkJAABkAAAAAgUAAAAUbm90RGlzdHJpYnV0ZWRSZXdhcmQFAAAACWFtb3VudEluYwUAAAADbmlsAAAABwAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAUAAAAXbmV1dHJpbm9Db250cmFjdEFkZHJlc3MAAAATbWF0aENvbnRyYWN0QWRkcmVzcwAAAA1taW5Mb2NrQW1vdW50AAAACGhhbGZMaWZlAAAAFXN1cHBvcnRlZFJld2FyZEFzc2V0cwMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABFQZXJtaXNzaW9uIGRlbmllZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaa2V5TmV1dHJpbm9Db250cmFjdEFkZHJlc3MAAAAABQAAABduZXV0cmlub0NvbnRyYWN0QWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAWa2V5TWF0aENvbnRyYWN0QWRkcmVzcwAAAAAFAAAAE21hdGhDb250cmFjdEFkZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABBrZXlNaW5Mb2NrQW1vdW50AAAAAAUAAAANbWluTG9ja0Ftb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAC2tleUhhbGZMaWZlAAAAAAUAAAAIaGFsZkxpZmUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGGtleVN1cHBvcnRlZFJld2FyZEFzc2V0cwAAAAAFAAAAFXN1cHBvcnRlZFJld2FyZEFzc2V0cwUAAAADbmlsAAAAAWkBAAAABXN0YWtlAAAAAAQAAAANJHQwMTExODkxMTI2OAkBAAAAD2dldFBhcmFtc09yRmFpbAAAAAAEAAAAD2F1Y3Rpb25Db250cmFjdAgFAAAADSR0MDExMTg5MTEyNjgAAAACXzEEAAAAC2JvbmRBc3NldElkCAUAAAANJHQwMTExODkxMTI2OAAAAAJfMgQAAAANbWluTG9ja0Ftb3VudAgFAAAADSR0MDExMTg5MTEyNjgAAAACXzMEAAAACGhhbGZMaWZlCAUAAAANJHQwMTExODkxMTI2OAAAAAJfNAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAVSW52YWxpZCBwYXltZW50cyBzaXplBAAAAAdwYXltZW50CQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAZhbW91bnQIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAATaW52YWxpZEFzc2V0TWVzc2FnZQkAASwAAAACCQABLAAAAAICAAAAD0ludmFsaWQgYXNzZXQuIAkAAlgAAAABBQAAAAtib25kQXNzZXRJZAIAAAAMIGlzIGV4cGVjdGVkBAAAAAdhc3NldElkCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQFAAAAE2ludmFsaWRBc3NldE1lc3NhZ2UDCQEAAAACIT0AAAACBQAAAAdhc3NldElkBQAAAAtib25kQXNzZXRJZAkAAAIAAAABBQAAABNpbnZhbGlkQXNzZXRNZXNzYWdlBAAAAAt1c2VyQWRkcmVzcwgFAAAAAWkAAAAGY2FsbGVyBAAAAA51c2VyQWRkcmVzc1N0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADSR0MDExODEwMTE5MTcJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAABNnZXRVc2VyUGFyYW1zT3JVbml0AAAAAQUAAAALdXNlckFkZHJlc3MJAAUVAAAAAwYAAAAAAAAAAAAA//////////8EAAAACWlzTmV3VXNlcggFAAAADSR0MDExODEwMTE5MTcAAAACXzEEAAAACmxvY2tBbW91bnQIBQAAAA0kdDAxMTgxMDExOTE3AAAAAl8yBAAAAA9sb2NrU3RhcnRIZWlnaHQIBQAAAA0kdDAxMTgxMDExOTE3AAAAAl8zBAAAAAxtZXJnZWRBbW91bnQDBQAAAAlpc05ld1VzZXIFAAAABmFtb3VudAkAAGQAAAACBQAAAAZhbW91bnQFAAAACmxvY2tBbW91bnQEAAAAEW1lcmdlZFN0YXJ0SGVpZ2h0AwUAAAAJaXNOZXdVc2VyBQAAAAZoZWlnaHQEAAAADG1hdGhDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAABZrZXlNYXRoQ29udHJhY3RBZGRyZXNzAAAAAAkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAAxtYXRoQ29udHJhY3QCAAAAE21lcmdlU3Rha2VzUkVBRE9OTFkJAARMAAAAAgUAAAAGYW1vdW50CQAETAAAAAIFAAAABmhlaWdodAkABEwAAAACBQAAAApsb2NrQW1vdW50CQAETAAAAAIFAAAAD2xvY2tTdGFydEhlaWdodAkABEwAAAACBQAAAAhoYWxmTGlmZQUAAAADbmlsBQAAAANuaWwDCQAAZgAAAAIFAAAADW1pbkxvY2tBbW91bnQFAAAADG1lcmdlZEFtb3VudAkAAAIAAAABCQABLAAAAAICAAAAE01pbiBsb2NrIGFtb3VudCBpcyAJAAGkAAAAAQUAAAANbWluTG9ja0Ftb3VudAQAAAANJHQwMTIzNjcxMjQ2OQkBAAAAC1N0YXRzUmVzdWx0AAAAAwUAAAAGYW1vdW50AAAAAAAAAAABAwUAAAAJaXNOZXdVc2VyAAAAAAAAAAABAAAAAAAAAAAABAAAAAxzdGF0c0VudHJpZXMIBQAAAA0kdDAxMjM2NzEyNDY5AAAAAl8xBAAAAAt0b3RhbFN0YWtlZAgFAAAADSR0MDEyMzY3MTI0NjkAAAACXzIEAAAADnRvdGFsU3Rha2VkTmV3CAUAAAANJHQwMTIzNjcxMjQ2OQAAAAJfMwkABE4AAAACCQAETgAAAAIJAAROAAAAAgkABEwAAAACCQEAAAASSGlzdG9yeVJlY29yZEVudHJ5AAAABwIAAAAFc3Rha2UFAAAAC3VzZXJBZGRyZXNzCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAApsb2NrQW1vdW50BQAAAA9sb2NrU3RhcnRIZWlnaHQFAAAADG1lcmdlZEFtb3VudAUAAAARbWVyZ2VkU3RhcnRIZWlnaHQFAAAAA25pbAkBAAAADVJld2FyZEVudHJpZXMAAAADBQAAAAlpc05ld1VzZXIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAApsb2NrQW1vdW50CQEAAAAPTG9ja1BhcmFtc0VudHJ5AAAAAwUAAAALdXNlckFkZHJlc3MFAAAADG1lcmdlZEFtb3VudAUAAAARbWVyZ2VkU3RhcnRIZWlnaHQFAAAADHN0YXRzRW50cmllcwAAAAFpAQAAAAd1bnN0YWtlAAAAAQAAAAZhbW91bnQDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAACQAAAgAAAAECAAAAI3Vuc3Rha2UgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50BAAAAAt1c2VyQWRkcmVzcwgFAAAAAWkAAAAGY2FsbGVyBAAAAA51c2VyQWRkcmVzc1N0cgkABCUAAAABBQAAAAt1c2VyQWRkcmVzcwQAAAANJHQwMTI5NTUxMzAzMwkBAAAAD2dldFBhcmFtc09yRmFpbAAAAAAEAAAADmF1Y3Rpb25BZGRyZXNzCAUAAAANJHQwMTI5NTUxMzAzMwAAAAJfMQQAAAALYm9uZEFzc2V0SWQIBQAAAA0kdDAxMjk1NTEzMDMzAAAAAl8yBAAAAA1taW5Mb2NrQW1vdW50CAUAAAAN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dWVPckVsc2UAAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAAB1dBVkVTSUQEAAAADXBtdEFzc2V0SWRTdHIJAAJYAAAAAQUAAAAKcG10QXNzZXRJZAQAAAAIcG10TXVsdFgDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAAB1dBVkVTSUQFAAAABk1VTFRYOAUAAAAGTVVMVFg2BAAAAAdhbW91bnRYCQABNgAAAAEFAAAABmFtb3VudAQAAAALdG90YWxTdGFrZWQJAQAAAAxnZXRJbnRPckVsc2UAAAACCQEAAAAXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAAAAAAAAAAAAAAABAAAAAx0b3RhbFN0YWtlZFgJAAE2AAAAAQUAAAALdG90YWxTdGFrZWQDCQAAZgAAAAIAAAAAAAAAAAAFAAAAC3RvdGFsU3Rha2VkCQAAAgAAAAECAAAAG1RPRE86IGNhc2UgaXMgbm90IHN1cHBvcnRlZAMJAAAAAAAAAgUAAAALdG90YWxTdGFrZWQAAAAAAAAAAAAJAQAAACJJbmNyZW1lbnROb3REaXN0cmlidXRlZFJld2FyZEVudHJ5AAAAAgUAAAANcG10QXNzZXRJZFN0cgUAAAAGYW1vdW50BAAAABByZXdhcmRQZXJOc2J0WDE4CQABPAAAAAMFAAAAB2Ftb3VudFgFAAAAB01VTFRYMTgFAAAADHRvdGFsU3Rha2VkWAQAAAARZGVwb3NpdE51bUxhc3RLRVkJAQAAABFrZXlEZXBvc2l0TnVtTGFzdAAAAAAEAAAADmRlcG9zaXROdW1MYXN0CQEAAAAMZ2V0SW50T3JFbHNlAAAAAgUAAAARZGVwb3NpdE51bUxhc3RLRVkA//////////8EAAAADWRlcG9zaXROdW1OZXcJAABkAAAAAgUAAAAOZGVwb3NpdE51bUxhc3QAAAAAAAAAAAEDCQEAAAABIQAAAAEJAQAAAAhjb250YWlucwAAAAIFAAAAEnN1cHBvcnRlZEFzc2V0c1N0cgUAAAANcG10QXNzZXRJZFN0cgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgUAAAASc3VwcG9ydGVkQXNzZXRzU3RyAgAAABEgZG9lc24ndCBjb250YWluIAUAAAANcG10QXNzZXRJZFN0cgoBAAAAF3Jl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AAD//////////woBAAAAH2ZvckVhY2hBc3NldENhbGNVbmNsYWltZWRSZXdhcmQAAAACAAAABWFjY3VtAAAABWFzc2V0BAAAAA0kdDAxNjM5NzE2NTM1CQEAAAAKY2FsY1Jld2FyZAAAAAUFAAAADnVzZXJBZGRyZXNzU3RyBQAAAAVhc3NldAUAAAANc3Rha2VkQW1vdW50WAUAAAAOZGVwb3NpdE51bVVzZXIFAAAADmRlcG9zaXROdW1MYXN0BAAAAAtyZXdhcmRUb3RhbAgFAAAADSR0MDE2Mzk3MTY1MzUAAAACXzEEAAAABmNhY2hlZAgFAAAADSR0MDE2Mzk3MTY1MzUAAAACXzIEAAAAB2R5bmFtaWMIBQAAAA0kdDAxNjM5NzE2NTM1AAAAAl8zBAAAABNyZXdhcmRDYWNoZWRQYXJ0S0VZCAUAAAANJHQwMTYzOTcxNjUzNQAAAAJfNAQAAAAKY2xhaW1lZEtFWQkBAAAACmtleUNsYWltZWQAAAACBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAFYXNzZXQEAAAADSR0MDE2NTk1MTY2MzIFAAAABWFjY3VtBAAAAARkYXRhCAUAAAANJHQwMTY1OTUxNjYzMgAAAAJfMQQAAAARY2xhaW1lZEFtdEJ5QXNzZXQIBQAAAA0kdDAxNjU5NTE2NjMyAAAAAl8yBAAAAAduZXdQYXJ0CQAEuQAAAAIJAARMAAAAAgUAAAAFYXNzZXQJAARMAAAAAgkAAaQAAAABBQAAAAtyZXdhcmRUb3RhbAUAAAADbmlsAgAAAAE6BAAAABRjbGFpbWVkQW10QnlBc3NldE5ldwkABLkAAAACCQAETAAAAAIFAAAAEWNsYWltZWRBbXRCeUFzc2V0CQAETAAAAAIFAAAAB25ld1BhcnQFAAAAA25pbAIAAAABXwMJAABnAAAAAgAAAAAAAAAAAAUAAAALcmV3YXJkVG90YWwJAAUUAAAAAgUAAAAEZGF0YQUAAAAUY2xhaW1lZEFtdEJ5QXNzZXROZXcJAAUUAAAAAgkABE0AAAACCQAETQAAAAIJAARNAAAAAgUAAAAEZGF0YQkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAALdXNlckFkZHJlc3MFAAAAC3Jld2FyZFRvdGFsCQEAAAALdG9Bc3NldFZlY3QA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BSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoEAAAAC3VzZXJBZGRyZXNzCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAA51c2VyQWRkcmVzc1N0cgQAAAANJHQwMTc4NjUxNzk3MAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAAE2dldFVzZXJQYXJhbXNPclVuaXQAAAABBQAAAAt1c2VyQWRkcmVzcwkABRUAAAADBgAAAAAAAAAAAAAAAAAAAAAAAAQAAAAJaXNOZXdVc2VyCAUAAAANJHQwMTc4NjUxNzk3MAAAAAJfMQQAAAAMc3Rha2VkQW1vdW50CAUAAAANJHQwMTc4NjUxNzk3MAAAAAJfMgQAAAAMc3Rha2luZ1N0YXJ0CAUAAAANJHQwMTc4NjUxNzk3MAAAAAJfMwQAAAANc3Rha2VkQW1vdW50WAkAATYAAAABBQAAAAxzdGFrZWRBbW91bnQEAAAAG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQkBAAAAG2tleVVzZXJSZXdhcmRGcm9tRGVwb3NpdE51bQAAAAEFAAAADnVzZXJBZGRyZXNzU3RyBAAAAA5kZXBvc2l0TnVtVXNlcgkBAAAADGdldEludE9yRWxzZQAAAAIFAAAAG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQD//////////wQAAAAOZGVwb3NpdE51bUxhc3QJAQAAAAxnZXRJbnRPckVsc2UAAAACCQEAAAARa2V5RGVwb3NpdE51bUxhc3QAAAAAAP//////////CgEAAAAfZm9yRWFjaEFzc2V0Q2FsY1VuY2xhaW1lZFJld2FyZAAAAAIAAAAFYWNjdW0AAAAFYXNzZXQEAAAADSR0MDE4MzE2MTg0NTQJAQAAAApjYWxjUmV3YXJkAAAABQUAAAAOdXNlckFkZHJlc3NTdHIFAAAA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", "chainId": 84, "height": 2024261, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6dE1gqpaf9zpKivoEwrQki2CfnyWWU8EdDSXpQKEPL6m Next: FANvdUD69AmAbDDCwtvkxuKJzLMN9ehHWEFBEepVWrrp Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = ""
4+let a = "__"
55
6-let b = "__"
6+let b = 1000000
77
8-let c = 1000000
8+let c = 100000000
99
10-let d = 100000000
10+let d = toBigInt(b)
1111
1212 let e = toBigInt(c)
1313
14-let f = toBigInt(d)
14+let f = toBigInt(1000000000000000000)
1515
16-let g = toBigInt(1000000000000000000)
16+let g = "WAVES"
1717
18-let h = "WAVES"
18+let h = fromBase58String(g)
1919
20-let i = fromBase58String(h)
21-
22-func j () = "bond_asset_id"
20+func i () = "bond_asset_id"
2321
2422
25-func k () = "auction_contract"
23+func j () = "auction_contract"
2624
2725
28-func l () = "%s__neutrinoContractAddress"
26+func k () = "%s__neutrinoContractAddress"
2927
3028
31-func m () = "%s__mathContract"
29+func l () = "%s__mathContract"
3230
3331
34-func n () = "%s__minLockAmount"
32+func m () = "%s__minLockAmount"
3533
3634
37-func o () = "%s__halfLife"
35+func n () = "%s__halfLife"
3836
3937
40-func p (q) = makeString(["%s%s%s", "paramByUser", toString(q), "amount"], b)
38+func o (p) = makeString(["%s%s%s", "paramByUser", toString(p), "amount"], a)
4139
4240
43-func r (q) = makeString(["%s%s%s", "paramByUser", toString(q), "start"], b)
41+func q (p) = makeString(["%s%s%s", "paramByUser", toString(p), "start"], a)
4442
4543
46-func s (t,q,u) = makeString(["%s%s%s%s", "history", t, toString(q), toBase58String(u)], b)
44+func r (s,p,t) = makeString(["%s%s%s%s", "history", s, toString(p), toBase58String(t)], a)
4745
4846
49-func v () = makeString(["%s%s", "stats", "activeTotalLocked"], b)
47+func u () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
5048
5149
52-func w () = makeString(["%s%s", "stats", "locksCount"], b)
50+func v () = makeString(["%s%s", "stats", "locksCount"], a)
5351
5452
55-func x () = makeString(["%s%s", "stats", "activeUsersCount"], b)
53+func w () = makeString(["%s%s", "stats", "activeUsersCount"], a)
5654
5755
58-func y () = "%s__nextPeriod"
56+func x () = "%s__nextPeriod"
5957
6058
61-func z () = "supportedRewardAssets"
59+func y () = "supportedRewardAssets"
6260
6361
64-func A () = makeString(["%s%s%s", "dep", "lastNum"], b)
62+func z () = makeString(["%s%s%s", "dep", "lastNum"], a)
6563
6664
67-func B (q) = makeString(["%s%s%s", "userRwdFromDepNum", q], b)
65+func A (p) = makeString(["%s%s%s", "userRwdFromDepNum", p], a)
6866
6967
70-func C (D,E) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(D), E], b)
68+func B (C,D) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(C), D], a)
7169
7270
73-func F (q,E) = makeString(["%s%s%s", "rwd", q, E], b)
71+func E (p,D) = makeString(["%s%s%s", "rwd", p, D], a)
7472
7573
76-func G (q,E) = makeString(["%s%s%s", "clm", q, E], b)
74+func F (p,D) = makeString(["%s%s%s", "clm", p, D], a)
7775
7876
79-func H (E) = makeString(["%s%s", "notDistributed", E], b)
77+func G (D) = makeString(["%s%s", "notDistributed", D], a)
8078
8179
82-func I (J,K) = fraction(toBigInt(J), g, K)
80+func H (I,J) = fraction(toBigInt(I), f, J)
8381
8482
85-func L (M) = valueOrElse(getInteger(this, M), 0)
83+func K (L) = valueOrElse(getInteger(this, L), 0)
8684
8785
88-func N (M,O) = valueOrElse(getInteger(this, M), O)
86+func M (L,N) = valueOrElse(getInteger(this, L), N)
8987
9088
91-func P (M) = valueOrErrorMessage(getInteger(this, M), (("Mandatory this." + M) + " is not defined"))
89+func O (L) = valueOrErrorMessage(getInteger(this, L), (("Mandatory this." + L) + " is not defined"))
9290
9391
94-func Q (M,O) = valueOrElse(getString(this, M), O)
92+func P (L,N) = valueOrElse(getString(this, L), N)
9593
9694
97-func R (M) = valueOrErrorMessage(getString(this, M), (("Mandatory this." + M) + " is not defined"))
95+func Q (L) = valueOrErrorMessage(getString(this, L), (("Mandatory this." + L) + " is not defined"))
9896
9997
100-func S (T) = valueOrErrorMessage(addressFromString(T), ("couldn't parse passed addressStr=" + T))
98+func R (S) = valueOrErrorMessage(addressFromString(S), ("couldn't parse passed addressStr=" + S))
10199
102100
103-func U (V) = if ((V == h))
101+func T (U) = if ((U == g))
104102 then unit
105- else fromBase58String(V)
103+ else fromBase58String(U)
106104
107105
108-func W (X) = {
109- let Y = X
110- if ($isInstanceOf(Y, "Int"))
106+func V (W) = {
107+ let X = W
108+ if ($isInstanceOf(X, "Int"))
111109 then {
112- let Z = Y
113- Z
110+ let Y = X
111+ Y
114112 }
115113 else throw("fail to cast into Int")
116114 }
117115
118116
119-func aa (ab,ac,ad,ae) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(ab), toString(ac), toString(ad), toString(ae)], b)
117+func Z (aa,ab,ac,ad) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aa), toString(ab), toString(ac), toString(ad)], a)
120118
121119
122-func af (ag,ah) = makeString(["%s%d%d%s", ag, toString(lastBlock.height), toString(lastBlock.timestamp), ah], b)
120+func ae (af,ag) = makeString(["%s%d%d%s", af, toString(lastBlock.height), toString(lastBlock.timestamp), ag], a)
123121
124122
125-func ai (t,q,u,ab,ac,ad,ae) = StringEntry(s(t, q, u), aa(ab, ac, ad, ae))
123+func ah (s,p,t,aa,ab,ac,ad) = StringEntry(r(s, p, t), Z(aa, ab, ac, ad))
126124
127125
128-func aj (q,u,ah) = StringEntry(s("claim", q, u), af(toString(q), ah))
126+func ai (p,t,ag) = StringEntry(r("claim", p, t), ae(toString(p), ag))
129127
130128
131-func ak (al,am,an) = {
132- let ao = L(w())
133- let ap = L(x())
134- let aq = L(v())
135- let ar = (aq + al)
136- $Tuple3([IntegerEntry(w(), (ao + am)), IntegerEntry(x(), (ap + an)), IntegerEntry(v(), ar)], aq, ar)
129+func aj (ak,al,am) = {
130+ let an = K(v())
131+ let ao = K(w())
132+ let ap = K(u())
133+ let aq = (ap + ak)
134+ $Tuple3([IntegerEntry(v(), (an + al)), IntegerEntry(w(), (ao + am)), IntegerEntry(u(), aq)], ap, aq)
137135 }
138136
139137
140-func as (q,at,au) = [IntegerEntry(p(q), at), IntegerEntry(r(q), au)]
138+func ar (p,as,at) = [IntegerEntry(o(p), as), IntegerEntry(q(p), at)]
141139
142140
143-func av () = {
144- let aw = addressFromStringValue(R(l()))
145- $Tuple4(fromBase58String(getStringValue(aw, k())), fromBase58String(getStringValue(aw, j())), P(n()), P(o()))
141+func au () = {
142+ let av = addressFromStringValue(Q(k()))
143+ $Tuple4(fromBase58String(getStringValue(av, j())), fromBase58String(getStringValue(av, i())), O(m()), O(n()))
146144 }
147145
148146
149-func ax (q) = (N(p(q), 0) > 0)
147+func aw (p) = (M(o(p), 0) > 0)
150148
151149
152-func ay (q) = if (ax(q))
153- then $Tuple3(false, P(p(q)), P(r(q)))
150+func ax (p) = if (aw(p))
151+ then $Tuple3(false, O(o(p)), O(q(p)))
154152 else unit
155153
156154
157-func az (q) = valueOrErrorMessage(ay(q), (("User " + toString(q)) + " is not defined"))
155+func ay (p) = valueOrErrorMessage(ax(p), (("User " + toString(p)) + " is not defined"))
158156
159157
160-let aA = Q(z(), "")
158+let az = P(y(), "")
161159
162-let aB = split(aA, "_")
160+let aA = split(az, "_")
163161
164-func aC (q,aD,aE,aF,aG) = {
165- let aH = C(aG, aD)
166- let aI = parseBigIntValue(Q(C(aG, aD), "0"))
167- let aJ = parseBigIntValue(Q(C(aF, aD), "0"))
168- let aK = toInt(fraction((aI - aJ), aE, g))
169- let aL = F(q, aD)
170- let aM = N(aL, 0)
171- $Tuple4((aM + aK), aM, aK, aL)
162+func aB (p,aC,aD,aE,aF) = {
163+ let aG = B(aF, aC)
164+ let aH = parseBigIntValue(P(B(aF, aC), "0"))
165+ let aI = parseBigIntValue(P(B(aE, aC), "0"))
166+ let aJ = toInt(fraction((aH - aI), aD, f))
167+ let aK = E(p, aC)
168+ let aL = M(aK, 0)
169+ $Tuple4((aL + aJ), aL, aJ, aK)
172170 }
173171
174172
175-func aN (aO,q,aP) = {
176- let aE = toBigInt(aP)
177- let aQ = B(q)
178- let aF = N(aQ, -1)
179- let aG = N(A(), -1)
180- func aR (aS,aT) = {
181- let aU = aC(q, aT, aE, aF, aG)
182- let aV = aU._1
183- let aW = aU._2
184- let aX = aU._3
185- let aL = aU._4
186- (aS :+ IntegerEntry(aL, aV))
173+func aM (aN,p,aO) = {
174+ let aD = toBigInt(aO)
175+ let aP = A(p)
176+ let aE = M(aP, -1)
177+ let aF = M(z(), -1)
178+ func aQ (aR,aS) = {
179+ let aT = aB(p, aS, aD, aE, aF)
180+ let aU = aT._1
181+ let aV = aT._2
182+ let aW = aT._3
183+ let aK = aT._4
184+ (aR :+ IntegerEntry(aK, aU))
187185 }
188186
189- if (if ((aG == -1))
190- then (aF == -1)
187+ if (if ((aF == -1))
188+ then (aE == -1)
191189 else false)
192190 then nil
193- else if (if ((aG == -1))
194- then (aF > -1)
191+ else if (if ((aF == -1))
192+ then (aE > -1)
195193 else false)
196194 then throw("invalid depositNumLast and depositNumUser state")
197- else if (if ((aG > -1))
198- then (aF == -1)
195+ else if (if ((aF > -1))
196+ then (aE == -1)
199197 else false)
200- then if (aO)
201- then [IntegerEntry(aQ, aG)]
198+ then if (aN)
199+ then [IntegerEntry(aP, aF)]
202200 else ({
203- let aY = aB
204- let aZ = size(aY)
205- let ba = nil
206- func bb (bc,bd) = if ((bd >= aZ))
207- then bc
208- else aR(bc, aY[bd])
201+ let aX = aA
202+ let aY = size(aX)
203+ let aZ = nil
204+ func ba (bb,bc) = if ((bc >= aY))
205+ then bb
206+ else aQ(bb, aX[bc])
209207
210- func be (bc,bd) = if ((bd >= aZ))
211- then bc
208+ func bd (bb,bc) = if ((bc >= aY))
209+ then bb
212210 else throw("List size exceeds 10")
213211
214- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
215- } :+ IntegerEntry(aQ, aG))
216- else if (if ((aG > -1))
217- then (aF > -1)
212+ bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
213+ } :+ IntegerEntry(aP, aF))
214+ else if (if ((aF > -1))
215+ then (aE > -1)
218216 else false)
219- then if (aO)
220- then [IntegerEntry(aQ, aG)]
217+ then if (aN)
218+ then [IntegerEntry(aP, aF)]
221219 else ({
222- let aY = aB
223- let aZ = size(aY)
224- let ba = nil
225- func bb (bc,bd) = if ((bd >= aZ))
226- then bc
227- else aR(bc, aY[bd])
220+ let aX = aA
221+ let aY = size(aX)
222+ let aZ = nil
223+ func ba (bb,bc) = if ((bc >= aY))
224+ then bb
225+ else aQ(bb, aX[bc])
228226
229- func be (bc,bd) = if ((bd >= aZ))
230- then bc
227+ func bd (bb,bc) = if ((bc >= aY))
228+ then bb
231229 else throw("List size exceeds 10")
232230
233- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
234- } :+ IntegerEntry(aQ, aG))
235- else throw(((("uncovered condition: depositNumLast=" + toString(aG)) + " depositNumUser=") + toString(aF)))
231+ bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
232+ } :+ IntegerEntry(aP, aF))
233+ else throw(((("uncovered condition: depositNumLast=" + toString(aF)) + " depositNumUser=") + toString(aE)))
236234 }
237235
238236
239-func bf (E,bg) = {
240- let bh = H(E)
241- let bi = N(bh, 0)
242-[IntegerEntry(bh, (bi + bg))]
237+func be (D,bf) = {
238+ let bg = G(D)
239+ let bh = M(bg, 0)
240+[IntegerEntry(bg, (bh + bf))]
243241 }
244242
245243
246-@Callable(bj)
247-func constructor (bk,bl,bm,bn,bo) = if ((bj.caller != this))
244+@Callable(bi)
245+func constructor (bj,bk,bl,bm,bn) = if ((bi.caller != this))
248246 then throw("Permission denied")
249- else [StringEntry(l(), bk), StringEntry(m(), bl), IntegerEntry(n(), bm), IntegerEntry(o(), bn), StringEntry(z(), bo)]
247+ else [StringEntry(k(), bj), StringEntry(l(), bk), IntegerEntry(m(), bl), IntegerEntry(n(), bm), StringEntry(y(), bn)]
250248
251249
252250
253-@Callable(bj)
251+@Callable(bi)
254252 func stake () = {
255- let bp = av()
256- let bq = bp._1
257- let br = bp._2
258- let bm = bp._3
259- let bn = bp._4
260- if ((size(bj.payments) != 1))
253+ let bo = au()
254+ let bp = bo._1
255+ let bq = bo._2
256+ let bl = bo._3
257+ let bm = bo._4
258+ if ((size(bi.payments) != 1))
261259 then throw("Invalid payments size")
262260 else {
263- let bs = bj.payments[0]
264- let at = bs.amount
265- let bt = (("Invalid asset. " + toBase58String(br)) + " is expected")
266- let aD = valueOrErrorMessage(bs.assetId, bt)
267- if ((aD != br))
268- then throw(bt)
261+ let br = bi.payments[0]
262+ let as = br.amount
263+ let bs = (("Invalid asset. " + toBase58String(bq)) + " is expected")
264+ let aC = valueOrErrorMessage(br.assetId, bs)
265+ if ((aC != bq))
266+ then throw(bs)
269267 else {
270- let q = bj.caller
271- let bu = toString(bj.caller)
272- let bv = valueOrElse(ay(q), $Tuple3(true, 0, -1))
273- let aO = bv._1
274- let bw = bv._2
275- let bx = bv._3
276- let by = if (aO)
277- then at
278- else (at + bw)
279- let bz = if (aO)
268+ let p = bi.caller
269+ let bt = toString(bi.caller)
270+ let bu = valueOrElse(ax(p), $Tuple3(true, 0, -1))
271+ let aN = bu._1
272+ let bv = bu._2
273+ let bw = bu._3
274+ let bx = if (aN)
275+ then as
276+ else (as + bv)
277+ let by = if (aN)
280278 then height
281279 else {
282- let bA = addressFromStringValue(R(m()))
283- W(invoke(bA, "mergeStakesREADONLY", [at, height, bw, bx, bn], nil))
280+ let bz = addressFromStringValue(Q(l()))
281+ V(invoke(bz, "mergeStakesREADONLY", [as, height, bv, bw, bm], nil))
284282 }
285- if ((bm > by))
286- then throw(("Min lock amount is " + toString(bm)))
283+ if ((bl > bx))
284+ then throw(("Min lock amount is " + toString(bl)))
287285 else {
288- let bB = ak(at, 1, if (aO)
286+ let bA = aj(as, 1, if (aN)
289287 then 1
290288 else 0)
291- let bC = bB._1
292- let bD = bB._2
293- let bE = bB._3
294- ((([ai("stake", q, bj.transactionId, bw, bx, by, bz)] ++ aN(aO, bu, bw)) ++ as(q, by, bz)) ++ bC)
289+ let bB = bA._1
290+ let bC = bA._2
291+ let bD = bA._3
292+ ((([ah("stake", p, bi.transactionId, bv, bw, bx, by)] ++ aM(aN, bt, bv)) ++ ar(p, bx, by)) ++ bB)
295293 }
296294 }
297295 }
299297
300298
301299
302-@Callable(bj)
303-func unstake (at) = if ((size(bj.payments) != 0))
300+@Callable(bi)
301+func unstake (as) = if ((size(bi.payments) != 0))
304302 then throw("unstake doesn't require any payment")
305303 else {
306- let q = bj.caller
307- let bu = toString(q)
308- let bF = av()
309- let bG = bF._1
310- let br = bF._2
311- let bm = bF._3
312- let bn = bF._4
313- let bH = az(q)
314- let aO = bH._1
315- let bw = bH._2
316- let bI = bH._3
317- if ((0 >= bw))
304+ let p = bi.caller
305+ let bt = toString(p)
306+ let bE = au()
307+ let bF = bE._1
308+ let bq = bE._2
309+ let bl = bE._3
310+ let bm = bE._4
311+ let bG = ay(p)
312+ let aN = bG._1
313+ let bv = bG._2
314+ let bH = bG._3
315+ if ((0 >= bv))
318316 then throw("Nothing to unstake")
319- else if ((at > bw))
320- then throw(((("Requested " + toString(at)) + ", but staked only ") + toString(bw)))
317+ else if ((as > bv))
318+ then throw(((("Requested " + toString(as)) + ", but staked only ") + toString(bv)))
321319 else {
322- let bA = addressFromStringValue(R(m()))
323- let bJ = W(invoke(bA, "getUnstakeComissionAmountREADONLY", [at, bI, bn], nil))
324- let bK = ak(-(at), if ((at == bw))
320+ let bz = addressFromStringValue(Q(l()))
321+ let bI = V(invoke(bz, "getUnstakeComissionAmountREADONLY", [as, bH, bm], nil))
322+ let bJ = aj(-(as), if ((as == bv))
325323 then -1
326- else 0, if ((at == bw))
324+ else 0, if ((as == bv))
327325 then -1
328326 else 0)
329- let bC = bK._1
330- let bD = bK._2
331- let bE = bK._3
332- ((([ScriptTransfer(q, (at - bJ), br), ScriptTransfer(Address(bG), bJ, br), ai("unstake", q, bj.transactionId, bw, bI, (bw - at), bI)] ++ aN(false, bu, bw)) ++ as(q, (bw - at), bI)) ++ bC)
327+ let bB = bJ._1
328+ let bC = bJ._2
329+ let bD = bJ._3
330+ ((([ScriptTransfer(p, (as - bI), bq), ScriptTransfer(Address(bF), bI, bq), ah("unstake", p, bi.transactionId, bv, bH, (bv - as), bH)] ++ aM(false, bt, bv)) ++ ar(p, (bv - as), bH)) ++ bB)
333331 }
334332 }
335333
336334
337335
338-@Callable(bj)
339-func deposit () = if ((size(bj.payments) != 1))
336+@Callable(bi)
337+func deposit () = if ((size(bi.payments) != 1))
340338 then throw("exact 1 payment is allowed only")
341339 else {
342- let bL = bj.payments[0]
343- let at = bL.amount
344- let bM = valueOrElse(bL.assetId, i)
345- let bN = toBase58String(bM)
346- let bO = if ((bM == i))
347- then f
348- else e
349- let bP = toBigInt(at)
350- let bD = N(v(), 0)
351- let bQ = toBigInt(bD)
352- if ((0 > bD))
340+ let bK = bi.payments[0]
341+ let as = bK.amount
342+ let bL = valueOrElse(bK.assetId, h)
343+ let bM = toBase58String(bL)
344+ let bN = if ((bL == h))
345+ then e
346+ else d
347+ let bO = toBigInt(as)
348+ let bC = M(u(), 0)
349+ let bP = toBigInt(bC)
350+ if ((0 > bC))
353351 then throw("TODO: case is not supported")
354- else if ((bD == 0))
355- then bf(bN, at)
352+ else if ((bC == 0))
353+ then be(bM, as)
356354 else {
357- let bR = fraction(bP, g, bQ)
358- let bS = A()
359- let aG = N(bS, -1)
360- let bT = (aG + 1)
361- if (!(contains(aA, bN)))
362- then throw(((aA + " doesn't contain ") + bN))
355+ let bQ = fraction(bO, f, bP)
356+ let bR = z()
357+ let aF = M(bR, -1)
358+ let bS = (aF + 1)
359+ if (!(contains(az, bM)))
360+ then throw(((az + " doesn't contain ") + bM))
363361 else {
364- func bU (aS,bV) = {
365- let bW = C(bT, bV)
366- let bX = Q(C(aG, bV), "0")
367- (aS :+ (if ((bV == bN))
368- then StringEntry(bW, toString((parseBigIntValue(bX) + bR)))
369- else StringEntry(bW, bX)))
362+ func bT (aR,bU) = {
363+ let bV = B(bS, bU)
364+ let bW = P(B(aF, bU), "0")
365+ (aR :+ (if ((bU == bM))
366+ then StringEntry(bV, toString((parseBigIntValue(bW) + bQ)))
367+ else StringEntry(bV, bW)))
370368 }
371369
372370 ({
373- let aY = aB
374- let aZ = size(aY)
375- let ba = nil
376- func bb (bc,bd) = if ((bd >= aZ))
377- then bc
378- else bU(bc, aY[bd])
371+ let aX = aA
372+ let aY = size(aX)
373+ let aZ = nil
374+ func ba (bb,bc) = if ((bc >= aY))
375+ then bb
376+ else bT(bb, aX[bc])
379377
380- func be (bc,bd) = if ((bd >= aZ))
381- then bc
378+ func bd (bb,bc) = if ((bc >= aY))
379+ then bb
382380 else throw("List size exceeds 10")
383381
384- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
385- } :+ IntegerEntry(bS, bT))
382+ bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
383+ } :+ IntegerEntry(bR, bS))
386384 }
387385 }
388386 }
389387
390388
391389
392-@Callable(bj)
390+@Callable(bi)
393391 func claimRewards () = {
394- let q = bj.caller
395- let bu = toString(q)
396- if ((size(bj.payments) > 0))
392+ let p = bi.caller
393+ let bt = toString(p)
394+ if ((size(bi.payments) > 0))
397395 then throw("payments are not accepted")
398396 else {
399- let bY = valueOrElse(ay(q), $Tuple3(true, 0, 0))
400- let aO = bY._1
401- let aP = bY._2
402- let bZ = bY._3
403- let aE = toBigInt(aP)
404- let aQ = B(bu)
405- let aF = N(aQ, -1)
406- let aG = N(A(), -1)
407- func ca (aS,aT) = {
408- let cb = aC(bu, aT, aE, aF, aG)
409- let aV = cb._1
410- let aW = cb._2
411- let aX = cb._3
412- let aL = cb._4
413- let cc = G(bu, aT)
414- let cd = aS
415- let ce = cd._1
416- let cf = cd._2
417- let cg = makeString([aT, toString(aV)], ":")
418- let ch = makeString([cf, cg], "_")
419- if ((0 >= aV))
420- then $Tuple2(ce, ch)
421- else $Tuple2((((ce :+ ScriptTransfer(q, aV, U(aT))) :+ IntegerEntry(cc, (valueOrElse(getInteger(cc), 0) + aV))) :+ IntegerEntry(aL, 0)), ch)
397+ let bX = valueOrElse(ax(p), $Tuple3(true, 0, 0))
398+ let aN = bX._1
399+ let aO = bX._2
400+ let bY = bX._3
401+ let aD = toBigInt(aO)
402+ let aP = A(bt)
403+ let aE = M(aP, -1)
404+ let aF = M(z(), -1)
405+ func bZ (aR,aS) = {
406+ let ca = aB(bt, aS, aD, aE, aF)
407+ let aU = ca._1
408+ let aV = ca._2
409+ let aW = ca._3
410+ let aK = ca._4
411+ let cb = F(bt, aS)
412+ let cc = aR
413+ let cd = cc._1
414+ let ce = cc._2
415+ let cf = makeString([aS, toString(aU)], ":")
416+ let cg = makeString([ce, cf], "_")
417+ if ((0 >= aU))
418+ then $Tuple2(cd, cg)
419+ else $Tuple2((((cd :+ ScriptTransfer(p, aU, T(aS))) :+ IntegerEntry(cb, (valueOrElse(getInteger(cb), 0) + aU))) :+ IntegerEntry(aK, 0)), cg)
422420 }
423421
424- let ci = {
425- let aY = aB
426- let aZ = size(aY)
427- let ba = $Tuple2(nil, "")
428- func bb (bc,bd) = if ((bd >= aZ))
429- then bc
430- else ca(bc, aY[bd])
422+ let ch = {
423+ let aX = aA
424+ let aY = size(aX)
425+ let aZ = $Tuple2(nil, "")
426+ func ba (bb,bc) = if ((bc >= aY))
427+ then bb
428+ else bZ(bb, aX[bc])
431429
432- func be (bc,bd) = if ((bd >= aZ))
433- then bc
430+ func bd (bb,bc) = if ((bc >= aY))
431+ then bb
434432 else throw("List size exceeds 10")
435433
436- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
434+ bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
437435 }
438- let cj = ci._1
439- let ck = ci._2
440- if ((0 >= size(cj)))
436+ let ci = ch._1
437+ let cj = ch._2
438+ if ((0 >= size(ci)))
441439 then throw("nothing to claim")
442- else ((cj :+ IntegerEntry(aQ, aG)) :+ aj(q, bj.transactionId, drop(ck, 1)))
440+ else ((ci :+ IntegerEntry(aP, aF)) :+ ai(p, bi.transactionId, drop(cj, 1)))
443441 }
444442 }
445443
446444
447445
448-@Callable(bj)
449-func unclaimedRewardsREADONLY (bu) = {
450- func cl (aS,aT) = ((aS + makeString([aT, "0", "0"], ":")) + "_")
446+@Callable(bi)
447+func unclaimedRewardsREADONLY (bt) = {
448+ func ck (aR,aS) = ((aR + makeString([aS, "0", "0"], ":")) + "_")
451449
452- let cm = if ((bu == ""))
450+ let cl = if ((bt == ""))
453451 then {
454- let aY = aB
455- let aZ = size(aY)
456- let ba = ""
457- func bb (bc,bd) = if ((bd >= aZ))
458- then bc
459- else cl(bc, aY[bd])
452+ let aX = aA
453+ let aY = size(aX)
454+ let aZ = ""
455+ func ba (bb,bc) = if ((bc >= aY))
456+ then bb
457+ else ck(bb, aX[bc])
460458
461- func be (bc,bd) = if ((bd >= aZ))
462- then bc
459+ func bd (bb,bc) = if ((bc >= aY))
460+ then bb
463461 else throw("List size exceeds 10")
464462
465- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
463+ bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
466464 }
467465 else {
468- let q = addressFromStringValue(bu)
469- let cn = valueOrElse(ay(q), $Tuple3(true, 0, 0))
470- let aO = cn._1
471- let aP = cn._2
472- let bZ = cn._3
473- let aE = toBigInt(aP)
474- let aQ = B(bu)
475- let aF = N(aQ, -1)
476- let aG = N(A(), -1)
477- func ca (aS,aT) = {
478- let co = aC(bu, aT, aE, aF, aG)
479- let aV = co._1
480- let aW = co._2
481- let aX = co._3
482- let aL = co._4
483- let cp = valueOrElse(getInteger(G(bu, aT)), 0)
484- ((aS + makeString([aT, "10", "10"], ":")) + "_")
466+ let p = addressFromStringValue(bt)
467+ let cm = valueOrElse(ax(p), $Tuple3(true, 0, 0))
468+ let aN = cm._1
469+ let aO = cm._2
470+ let bY = cm._3
471+ let aD = toBigInt(aO)
472+ let aP = A(bt)
473+ let aE = M(aP, -1)
474+ let aF = M(z(), -1)
475+ func bZ (aR,aS) = {
476+ let cn = aB(bt, aS, aD, aE, aF)
477+ let aU = cn._1
478+ let aV = cn._2
479+ let aW = cn._3
480+ let aK = cn._4
481+ let co = valueOrElse(getInteger(F(bt, aS)), 0)
482+ ((aR + makeString([aS, toString(aU), toString(co)], ":")) + "_")
485483 }
486484
487- let aY = aB
488- let aZ = size(aY)
489- let ba = ""
490- func bb (bc,bd) = if ((bd >= aZ))
491- then bc
492- else ca(bc, aY[bd])
485+ let aX = aA
486+ let aY = size(aX)
487+ let aZ = ""
488+ func ba (bb,bc) = if ((bc >= aY))
489+ then bb
490+ else bZ(bb, aX[bc])
493491
494- func be (bc,bd) = if ((bd >= aZ))
495- then bc
492+ func bd (bb,bc) = if ((bc >= aY))
493+ then bb
496494 else throw("List size exceeds 10")
497495
498- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
496+ bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
499497 }
500- $Tuple2(nil, dropRight(cm, 1))
498+ $Tuple2(nil, dropRight(cl, 1))
501499 }
502500
503501
504502
505-@Callable(bj)
506-func nsbtStakingSYSREADONLY (bu) = {
507- let cq = N(v(), 0)
508- if ((bu == ""))
509- then $Tuple2(nil, [0, cq, 0])
503+@Callable(bi)
504+func nsbtStakingSYSREADONLY (bt) = {
505+ let cp = M(u(), 0)
506+ if ((bt == ""))
507+ then $Tuple2(nil, [0, cp, 0])
510508 else {
511- let q = S(bu)
512- let cr = valueOrElse(ay(q), $Tuple3(true, 0, 0))
513- let aO = cr._1
514- let cs = cr._2
515- let bZ = cr._3
516- $Tuple2(nil, [cs, cq, bZ])
509+ let p = R(bt)
510+ let cq = valueOrElse(ax(p), $Tuple3(true, 0, 0))
511+ let aN = cq._1
512+ let cr = cq._2
513+ let bY = cq._3
514+ $Tuple2(nil, [cr, cp, bY])
517515 }
518516 }
519517
518+
519+@Verifier(cs)
520+func ct () = {
521+ let cu = ["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
522+ let cv = ((((if (sigVerify(cs.bodyBytes, cs.proofs[0], fromBase58String(cu[0])))
523+ then 1
524+ else 0) + (if (sigVerify(cs.bodyBytes, cs.proofs[1], fromBase58String(cu[1])))
525+ then 1
526+ else 0)) + (if (sigVerify(cs.bodyBytes, cs.proofs[2], fromBase58String(cu[2])))
527+ then 1
528+ else 0)) + (if (sigVerify(cs.bodyBytes, cs.proofs[3], fromBase58String(cu[3])))
529+ then 2
530+ else 0))
531+ (cv >= 3)
532+ }
520533
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = ""
4+let a = "__"
55
6-let b = "__"
6+let b = 1000000
77
8-let c = 1000000
8+let c = 100000000
99
10-let d = 100000000
10+let d = toBigInt(b)
1111
1212 let e = toBigInt(c)
1313
14-let f = toBigInt(d)
14+let f = toBigInt(1000000000000000000)
1515
16-let g = toBigInt(1000000000000000000)
16+let g = "WAVES"
1717
18-let h = "WAVES"
18+let h = fromBase58String(g)
1919
20-let i = fromBase58String(h)
21-
22-func j () = "bond_asset_id"
20+func i () = "bond_asset_id"
2321
2422
25-func k () = "auction_contract"
23+func j () = "auction_contract"
2624
2725
28-func l () = "%s__neutrinoContractAddress"
26+func k () = "%s__neutrinoContractAddress"
2927
3028
31-func m () = "%s__mathContract"
29+func l () = "%s__mathContract"
3230
3331
34-func n () = "%s__minLockAmount"
32+func m () = "%s__minLockAmount"
3533
3634
37-func o () = "%s__halfLife"
35+func n () = "%s__halfLife"
3836
3937
40-func p (q) = makeString(["%s%s%s", "paramByUser", toString(q), "amount"], b)
38+func o (p) = makeString(["%s%s%s", "paramByUser", toString(p), "amount"], a)
4139
4240
43-func r (q) = makeString(["%s%s%s", "paramByUser", toString(q), "start"], b)
41+func q (p) = makeString(["%s%s%s", "paramByUser", toString(p), "start"], a)
4442
4543
46-func s (t,q,u) = makeString(["%s%s%s%s", "history", t, toString(q), toBase58String(u)], b)
44+func r (s,p,t) = makeString(["%s%s%s%s", "history", s, toString(p), toBase58String(t)], a)
4745
4846
49-func v () = makeString(["%s%s", "stats", "activeTotalLocked"], b)
47+func u () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
5048
5149
52-func w () = makeString(["%s%s", "stats", "locksCount"], b)
50+func v () = makeString(["%s%s", "stats", "locksCount"], a)
5351
5452
55-func x () = makeString(["%s%s", "stats", "activeUsersCount"], b)
53+func w () = makeString(["%s%s", "stats", "activeUsersCount"], a)
5654
5755
58-func y () = "%s__nextPeriod"
56+func x () = "%s__nextPeriod"
5957
6058
61-func z () = "supportedRewardAssets"
59+func y () = "supportedRewardAssets"
6260
6361
64-func A () = makeString(["%s%s%s", "dep", "lastNum"], b)
62+func z () = makeString(["%s%s%s", "dep", "lastNum"], a)
6563
6664
67-func B (q) = makeString(["%s%s%s", "userRwdFromDepNum", q], b)
65+func A (p) = makeString(["%s%s%s", "userRwdFromDepNum", p], a)
6866
6967
70-func C (D,E) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(D), E], b)
68+func B (C,D) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(C), D], a)
7169
7270
73-func F (q,E) = makeString(["%s%s%s", "rwd", q, E], b)
71+func E (p,D) = makeString(["%s%s%s", "rwd", p, D], a)
7472
7573
76-func G (q,E) = makeString(["%s%s%s", "clm", q, E], b)
74+func F (p,D) = makeString(["%s%s%s", "clm", p, D], a)
7775
7876
79-func H (E) = makeString(["%s%s", "notDistributed", E], b)
77+func G (D) = makeString(["%s%s", "notDistributed", D], a)
8078
8179
82-func I (J,K) = fraction(toBigInt(J), g, K)
80+func H (I,J) = fraction(toBigInt(I), f, J)
8381
8482
85-func L (M) = valueOrElse(getInteger(this, M), 0)
83+func K (L) = valueOrElse(getInteger(this, L), 0)
8684
8785
88-func N (M,O) = valueOrElse(getInteger(this, M), O)
86+func M (L,N) = valueOrElse(getInteger(this, L), N)
8987
9088
91-func P (M) = valueOrErrorMessage(getInteger(this, M), (("Mandatory this." + M) + " is not defined"))
89+func O (L) = valueOrErrorMessage(getInteger(this, L), (("Mandatory this." + L) + " is not defined"))
9290
9391
94-func Q (M,O) = valueOrElse(getString(this, M), O)
92+func P (L,N) = valueOrElse(getString(this, L), N)
9593
9694
97-func R (M) = valueOrErrorMessage(getString(this, M), (("Mandatory this." + M) + " is not defined"))
95+func Q (L) = valueOrErrorMessage(getString(this, L), (("Mandatory this." + L) + " is not defined"))
9896
9997
100-func S (T) = valueOrErrorMessage(addressFromString(T), ("couldn't parse passed addressStr=" + T))
98+func R (S) = valueOrErrorMessage(addressFromString(S), ("couldn't parse passed addressStr=" + S))
10199
102100
103-func U (V) = if ((V == h))
101+func T (U) = if ((U == g))
104102 then unit
105- else fromBase58String(V)
103+ else fromBase58String(U)
106104
107105
108-func W (X) = {
109- let Y = X
110- if ($isInstanceOf(Y, "Int"))
106+func V (W) = {
107+ let X = W
108+ if ($isInstanceOf(X, "Int"))
111109 then {
112- let Z = Y
113- Z
110+ let Y = X
111+ Y
114112 }
115113 else throw("fail to cast into Int")
116114 }
117115
118116
119-func aa (ab,ac,ad,ae) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(ab), toString(ac), toString(ad), toString(ae)], b)
117+func Z (aa,ab,ac,ad) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aa), toString(ab), toString(ac), toString(ad)], a)
120118
121119
122-func af (ag,ah) = makeString(["%s%d%d%s", ag, toString(lastBlock.height), toString(lastBlock.timestamp), ah], b)
120+func ae (af,ag) = makeString(["%s%d%d%s", af, toString(lastBlock.height), toString(lastBlock.timestamp), ag], a)
123121
124122
125-func ai (t,q,u,ab,ac,ad,ae) = StringEntry(s(t, q, u), aa(ab, ac, ad, ae))
123+func ah (s,p,t,aa,ab,ac,ad) = StringEntry(r(s, p, t), Z(aa, ab, ac, ad))
126124
127125
128-func aj (q,u,ah) = StringEntry(s("claim", q, u), af(toString(q), ah))
126+func ai (p,t,ag) = StringEntry(r("claim", p, t), ae(toString(p), ag))
129127
130128
131-func ak (al,am,an) = {
132- let ao = L(w())
133- let ap = L(x())
134- let aq = L(v())
135- let ar = (aq + al)
136- $Tuple3([IntegerEntry(w(), (ao + am)), IntegerEntry(x(), (ap + an)), IntegerEntry(v(), ar)], aq, ar)
129+func aj (ak,al,am) = {
130+ let an = K(v())
131+ let ao = K(w())
132+ let ap = K(u())
133+ let aq = (ap + ak)
134+ $Tuple3([IntegerEntry(v(), (an + al)), IntegerEntry(w(), (ao + am)), IntegerEntry(u(), aq)], ap, aq)
137135 }
138136
139137
140-func as (q,at,au) = [IntegerEntry(p(q), at), IntegerEntry(r(q), au)]
138+func ar (p,as,at) = [IntegerEntry(o(p), as), IntegerEntry(q(p), at)]
141139
142140
143-func av () = {
144- let aw = addressFromStringValue(R(l()))
145- $Tuple4(fromBase58String(getStringValue(aw, k())), fromBase58String(getStringValue(aw, j())), P(n()), P(o()))
141+func au () = {
142+ let av = addressFromStringValue(Q(k()))
143+ $Tuple4(fromBase58String(getStringValue(av, j())), fromBase58String(getStringValue(av, i())), O(m()), O(n()))
146144 }
147145
148146
149-func ax (q) = (N(p(q), 0) > 0)
147+func aw (p) = (M(o(p), 0) > 0)
150148
151149
152-func ay (q) = if (ax(q))
153- then $Tuple3(false, P(p(q)), P(r(q)))
150+func ax (p) = if (aw(p))
151+ then $Tuple3(false, O(o(p)), O(q(p)))
154152 else unit
155153
156154
157-func az (q) = valueOrErrorMessage(ay(q), (("User " + toString(q)) + " is not defined"))
155+func ay (p) = valueOrErrorMessage(ax(p), (("User " + toString(p)) + " is not defined"))
158156
159157
160-let aA = Q(z(), "")
158+let az = P(y(), "")
161159
162-let aB = split(aA, "_")
160+let aA = split(az, "_")
163161
164-func aC (q,aD,aE,aF,aG) = {
165- let aH = C(aG, aD)
166- let aI = parseBigIntValue(Q(C(aG, aD), "0"))
167- let aJ = parseBigIntValue(Q(C(aF, aD), "0"))
168- let aK = toInt(fraction((aI - aJ), aE, g))
169- let aL = F(q, aD)
170- let aM = N(aL, 0)
171- $Tuple4((aM + aK), aM, aK, aL)
162+func aB (p,aC,aD,aE,aF) = {
163+ let aG = B(aF, aC)
164+ let aH = parseBigIntValue(P(B(aF, aC), "0"))
165+ let aI = parseBigIntValue(P(B(aE, aC), "0"))
166+ let aJ = toInt(fraction((aH - aI), aD, f))
167+ let aK = E(p, aC)
168+ let aL = M(aK, 0)
169+ $Tuple4((aL + aJ), aL, aJ, aK)
172170 }
173171
174172
175-func aN (aO,q,aP) = {
176- let aE = toBigInt(aP)
177- let aQ = B(q)
178- let aF = N(aQ, -1)
179- let aG = N(A(), -1)
180- func aR (aS,aT) = {
181- let aU = aC(q, aT, aE, aF, aG)
182- let aV = aU._1
183- let aW = aU._2
184- let aX = aU._3
185- let aL = aU._4
186- (aS :+ IntegerEntry(aL, aV))
173+func aM (aN,p,aO) = {
174+ let aD = toBigInt(aO)
175+ let aP = A(p)
176+ let aE = M(aP, -1)
177+ let aF = M(z(), -1)
178+ func aQ (aR,aS) = {
179+ let aT = aB(p, aS, aD, aE, aF)
180+ let aU = aT._1
181+ let aV = aT._2
182+ let aW = aT._3
183+ let aK = aT._4
184+ (aR :+ IntegerEntry(aK, aU))
187185 }
188186
189- if (if ((aG == -1))
190- then (aF == -1)
187+ if (if ((aF == -1))
188+ then (aE == -1)
191189 else false)
192190 then nil
193- else if (if ((aG == -1))
194- then (aF > -1)
191+ else if (if ((aF == -1))
192+ then (aE > -1)
195193 else false)
196194 then throw("invalid depositNumLast and depositNumUser state")
197- else if (if ((aG > -1))
198- then (aF == -1)
195+ else if (if ((aF > -1))
196+ then (aE == -1)
199197 else false)
200- then if (aO)
201- then [IntegerEntry(aQ, aG)]
198+ then if (aN)
199+ then [IntegerEntry(aP, aF)]
202200 else ({
203- let aY = aB
204- let aZ = size(aY)
205- let ba = nil
206- func bb (bc,bd) = if ((bd >= aZ))
207- then bc
208- else aR(bc, aY[bd])
201+ let aX = aA
202+ let aY = size(aX)
203+ let aZ = nil
204+ func ba (bb,bc) = if ((bc >= aY))
205+ then bb
206+ else aQ(bb, aX[bc])
209207
210- func be (bc,bd) = if ((bd >= aZ))
211- then bc
208+ func bd (bb,bc) = if ((bc >= aY))
209+ then bb
212210 else throw("List size exceeds 10")
213211
214- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
215- } :+ IntegerEntry(aQ, aG))
216- else if (if ((aG > -1))
217- then (aF > -1)
212+ bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
213+ } :+ IntegerEntry(aP, aF))
214+ else if (if ((aF > -1))
215+ then (aE > -1)
218216 else false)
219- then if (aO)
220- then [IntegerEntry(aQ, aG)]
217+ then if (aN)
218+ then [IntegerEntry(aP, aF)]
221219 else ({
222- let aY = aB
223- let aZ = size(aY)
224- let ba = nil
225- func bb (bc,bd) = if ((bd >= aZ))
226- then bc
227- else aR(bc, aY[bd])
220+ let aX = aA
221+ let aY = size(aX)
222+ let aZ = nil
223+ func ba (bb,bc) = if ((bc >= aY))
224+ then bb
225+ else aQ(bb, aX[bc])
228226
229- func be (bc,bd) = if ((bd >= aZ))
230- then bc
227+ func bd (bb,bc) = if ((bc >= aY))
228+ then bb
231229 else throw("List size exceeds 10")
232230
233- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
234- } :+ IntegerEntry(aQ, aG))
235- else throw(((("uncovered condition: depositNumLast=" + toString(aG)) + " depositNumUser=") + toString(aF)))
231+ bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
232+ } :+ IntegerEntry(aP, aF))
233+ else throw(((("uncovered condition: depositNumLast=" + toString(aF)) + " depositNumUser=") + toString(aE)))
236234 }
237235
238236
239-func bf (E,bg) = {
240- let bh = H(E)
241- let bi = N(bh, 0)
242-[IntegerEntry(bh, (bi + bg))]
237+func be (D,bf) = {
238+ let bg = G(D)
239+ let bh = M(bg, 0)
240+[IntegerEntry(bg, (bh + bf))]
243241 }
244242
245243
246-@Callable(bj)
247-func constructor (bk,bl,bm,bn,bo) = if ((bj.caller != this))
244+@Callable(bi)
245+func constructor (bj,bk,bl,bm,bn) = if ((bi.caller != this))
248246 then throw("Permission denied")
249- else [StringEntry(l(), bk), StringEntry(m(), bl), IntegerEntry(n(), bm), IntegerEntry(o(), bn), StringEntry(z(), bo)]
247+ else [StringEntry(k(), bj), StringEntry(l(), bk), IntegerEntry(m(), bl), IntegerEntry(n(), bm), StringEntry(y(), bn)]
250248
251249
252250
253-@Callable(bj)
251+@Callable(bi)
254252 func stake () = {
255- let bp = av()
256- let bq = bp._1
257- let br = bp._2
258- let bm = bp._3
259- let bn = bp._4
260- if ((size(bj.payments) != 1))
253+ let bo = au()
254+ let bp = bo._1
255+ let bq = bo._2
256+ let bl = bo._3
257+ let bm = bo._4
258+ if ((size(bi.payments) != 1))
261259 then throw("Invalid payments size")
262260 else {
263- let bs = bj.payments[0]
264- let at = bs.amount
265- let bt = (("Invalid asset. " + toBase58String(br)) + " is expected")
266- let aD = valueOrErrorMessage(bs.assetId, bt)
267- if ((aD != br))
268- then throw(bt)
261+ let br = bi.payments[0]
262+ let as = br.amount
263+ let bs = (("Invalid asset. " + toBase58String(bq)) + " is expected")
264+ let aC = valueOrErrorMessage(br.assetId, bs)
265+ if ((aC != bq))
266+ then throw(bs)
269267 else {
270- let q = bj.caller
271- let bu = toString(bj.caller)
272- let bv = valueOrElse(ay(q), $Tuple3(true, 0, -1))
273- let aO = bv._1
274- let bw = bv._2
275- let bx = bv._3
276- let by = if (aO)
277- then at
278- else (at + bw)
279- let bz = if (aO)
268+ let p = bi.caller
269+ let bt = toString(bi.caller)
270+ let bu = valueOrElse(ax(p), $Tuple3(true, 0, -1))
271+ let aN = bu._1
272+ let bv = bu._2
273+ let bw = bu._3
274+ let bx = if (aN)
275+ then as
276+ else (as + bv)
277+ let by = if (aN)
280278 then height
281279 else {
282- let bA = addressFromStringValue(R(m()))
283- W(invoke(bA, "mergeStakesREADONLY", [at, height, bw, bx, bn], nil))
280+ let bz = addressFromStringValue(Q(l()))
281+ V(invoke(bz, "mergeStakesREADONLY", [as, height, bv, bw, bm], nil))
284282 }
285- if ((bm > by))
286- then throw(("Min lock amount is " + toString(bm)))
283+ if ((bl > bx))
284+ then throw(("Min lock amount is " + toString(bl)))
287285 else {
288- let bB = ak(at, 1, if (aO)
286+ let bA = aj(as, 1, if (aN)
289287 then 1
290288 else 0)
291- let bC = bB._1
292- let bD = bB._2
293- let bE = bB._3
294- ((([ai("stake", q, bj.transactionId, bw, bx, by, bz)] ++ aN(aO, bu, bw)) ++ as(q, by, bz)) ++ bC)
289+ let bB = bA._1
290+ let bC = bA._2
291+ let bD = bA._3
292+ ((([ah("stake", p, bi.transactionId, bv, bw, bx, by)] ++ aM(aN, bt, bv)) ++ ar(p, bx, by)) ++ bB)
295293 }
296294 }
297295 }
298296 }
299297
300298
301299
302-@Callable(bj)
303-func unstake (at) = if ((size(bj.payments) != 0))
300+@Callable(bi)
301+func unstake (as) = if ((size(bi.payments) != 0))
304302 then throw("unstake doesn't require any payment")
305303 else {
306- let q = bj.caller
307- let bu = toString(q)
308- let bF = av()
309- let bG = bF._1
310- let br = bF._2
311- let bm = bF._3
312- let bn = bF._4
313- let bH = az(q)
314- let aO = bH._1
315- let bw = bH._2
316- let bI = bH._3
317- if ((0 >= bw))
304+ let p = bi.caller
305+ let bt = toString(p)
306+ let bE = au()
307+ let bF = bE._1
308+ let bq = bE._2
309+ let bl = bE._3
310+ let bm = bE._4
311+ let bG = ay(p)
312+ let aN = bG._1
313+ let bv = bG._2
314+ let bH = bG._3
315+ if ((0 >= bv))
318316 then throw("Nothing to unstake")
319- else if ((at > bw))
320- then throw(((("Requested " + toString(at)) + ", but staked only ") + toString(bw)))
317+ else if ((as > bv))
318+ then throw(((("Requested " + toString(as)) + ", but staked only ") + toString(bv)))
321319 else {
322- let bA = addressFromStringValue(R(m()))
323- let bJ = W(invoke(bA, "getUnstakeComissionAmountREADONLY", [at, bI, bn], nil))
324- let bK = ak(-(at), if ((at == bw))
320+ let bz = addressFromStringValue(Q(l()))
321+ let bI = V(invoke(bz, "getUnstakeComissionAmountREADONLY", [as, bH, bm], nil))
322+ let bJ = aj(-(as), if ((as == bv))
325323 then -1
326- else 0, if ((at == bw))
324+ else 0, if ((as == bv))
327325 then -1
328326 else 0)
329- let bC = bK._1
330- let bD = bK._2
331- let bE = bK._3
332- ((([ScriptTransfer(q, (at - bJ), br), ScriptTransfer(Address(bG), bJ, br), ai("unstake", q, bj.transactionId, bw, bI, (bw - at), bI)] ++ aN(false, bu, bw)) ++ as(q, (bw - at), bI)) ++ bC)
327+ let bB = bJ._1
328+ let bC = bJ._2
329+ let bD = bJ._3
330+ ((([ScriptTransfer(p, (as - bI), bq), ScriptTransfer(Address(bF), bI, bq), ah("unstake", p, bi.transactionId, bv, bH, (bv - as), bH)] ++ aM(false, bt, bv)) ++ ar(p, (bv - as), bH)) ++ bB)
333331 }
334332 }
335333
336334
337335
338-@Callable(bj)
339-func deposit () = if ((size(bj.payments) != 1))
336+@Callable(bi)
337+func deposit () = if ((size(bi.payments) != 1))
340338 then throw("exact 1 payment is allowed only")
341339 else {
342- let bL = bj.payments[0]
343- let at = bL.amount
344- let bM = valueOrElse(bL.assetId, i)
345- let bN = toBase58String(bM)
346- let bO = if ((bM == i))
347- then f
348- else e
349- let bP = toBigInt(at)
350- let bD = N(v(), 0)
351- let bQ = toBigInt(bD)
352- if ((0 > bD))
340+ let bK = bi.payments[0]
341+ let as = bK.amount
342+ let bL = valueOrElse(bK.assetId, h)
343+ let bM = toBase58String(bL)
344+ let bN = if ((bL == h))
345+ then e
346+ else d
347+ let bO = toBigInt(as)
348+ let bC = M(u(), 0)
349+ let bP = toBigInt(bC)
350+ if ((0 > bC))
353351 then throw("TODO: case is not supported")
354- else if ((bD == 0))
355- then bf(bN, at)
352+ else if ((bC == 0))
353+ then be(bM, as)
356354 else {
357- let bR = fraction(bP, g, bQ)
358- let bS = A()
359- let aG = N(bS, -1)
360- let bT = (aG + 1)
361- if (!(contains(aA, bN)))
362- then throw(((aA + " doesn't contain ") + bN))
355+ let bQ = fraction(bO, f, bP)
356+ let bR = z()
357+ let aF = M(bR, -1)
358+ let bS = (aF + 1)
359+ if (!(contains(az, bM)))
360+ then throw(((az + " doesn't contain ") + bM))
363361 else {
364- func bU (aS,bV) = {
365- let bW = C(bT, bV)
366- let bX = Q(C(aG, bV), "0")
367- (aS :+ (if ((bV == bN))
368- then StringEntry(bW, toString((parseBigIntValue(bX) + bR)))
369- else StringEntry(bW, bX)))
362+ func bT (aR,bU) = {
363+ let bV = B(bS, bU)
364+ let bW = P(B(aF, bU), "0")
365+ (aR :+ (if ((bU == bM))
366+ then StringEntry(bV, toString((parseBigIntValue(bW) + bQ)))
367+ else StringEntry(bV, bW)))
370368 }
371369
372370 ({
373- let aY = aB
374- let aZ = size(aY)
375- let ba = nil
376- func bb (bc,bd) = if ((bd >= aZ))
377- then bc
378- else bU(bc, aY[bd])
371+ let aX = aA
372+ let aY = size(aX)
373+ let aZ = nil
374+ func ba (bb,bc) = if ((bc >= aY))
375+ then bb
376+ else bT(bb, aX[bc])
379377
380- func be (bc,bd) = if ((bd >= aZ))
381- then bc
378+ func bd (bb,bc) = if ((bc >= aY))
379+ then bb
382380 else throw("List size exceeds 10")
383381
384- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
385- } :+ IntegerEntry(bS, bT))
382+ bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
383+ } :+ IntegerEntry(bR, bS))
386384 }
387385 }
388386 }
389387
390388
391389
392-@Callable(bj)
390+@Callable(bi)
393391 func claimRewards () = {
394- let q = bj.caller
395- let bu = toString(q)
396- if ((size(bj.payments) > 0))
392+ let p = bi.caller
393+ let bt = toString(p)
394+ if ((size(bi.payments) > 0))
397395 then throw("payments are not accepted")
398396 else {
399- let bY = valueOrElse(ay(q), $Tuple3(true, 0, 0))
400- let aO = bY._1
401- let aP = bY._2
402- let bZ = bY._3
403- let aE = toBigInt(aP)
404- let aQ = B(bu)
405- let aF = N(aQ, -1)
406- let aG = N(A(), -1)
407- func ca (aS,aT) = {
408- let cb = aC(bu, aT, aE, aF, aG)
409- let aV = cb._1
410- let aW = cb._2
411- let aX = cb._3
412- let aL = cb._4
413- let cc = G(bu, aT)
414- let cd = aS
415- let ce = cd._1
416- let cf = cd._2
417- let cg = makeString([aT, toString(aV)], ":")
418- let ch = makeString([cf, cg], "_")
419- if ((0 >= aV))
420- then $Tuple2(ce, ch)
421- else $Tuple2((((ce :+ ScriptTransfer(q, aV, U(aT))) :+ IntegerEntry(cc, (valueOrElse(getInteger(cc), 0) + aV))) :+ IntegerEntry(aL, 0)), ch)
397+ let bX = valueOrElse(ax(p), $Tuple3(true, 0, 0))
398+ let aN = bX._1
399+ let aO = bX._2
400+ let bY = bX._3
401+ let aD = toBigInt(aO)
402+ let aP = A(bt)
403+ let aE = M(aP, -1)
404+ let aF = M(z(), -1)
405+ func bZ (aR,aS) = {
406+ let ca = aB(bt, aS, aD, aE, aF)
407+ let aU = ca._1
408+ let aV = ca._2
409+ let aW = ca._3
410+ let aK = ca._4
411+ let cb = F(bt, aS)
412+ let cc = aR
413+ let cd = cc._1
414+ let ce = cc._2
415+ let cf = makeString([aS, toString(aU)], ":")
416+ let cg = makeString([ce, cf], "_")
417+ if ((0 >= aU))
418+ then $Tuple2(cd, cg)
419+ else $Tuple2((((cd :+ ScriptTransfer(p, aU, T(aS))) :+ IntegerEntry(cb, (valueOrElse(getInteger(cb), 0) + aU))) :+ IntegerEntry(aK, 0)), cg)
422420 }
423421
424- let ci = {
425- let aY = aB
426- let aZ = size(aY)
427- let ba = $Tuple2(nil, "")
428- func bb (bc,bd) = if ((bd >= aZ))
429- then bc
430- else ca(bc, aY[bd])
422+ let ch = {
423+ let aX = aA
424+ let aY = size(aX)
425+ let aZ = $Tuple2(nil, "")
426+ func ba (bb,bc) = if ((bc >= aY))
427+ then bb
428+ else bZ(bb, aX[bc])
431429
432- func be (bc,bd) = if ((bd >= aZ))
433- then bc
430+ func bd (bb,bc) = if ((bc >= aY))
431+ then bb
434432 else throw("List size exceeds 10")
435433
436- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
434+ bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
437435 }
438- let cj = ci._1
439- let ck = ci._2
440- if ((0 >= size(cj)))
436+ let ci = ch._1
437+ let cj = ch._2
438+ if ((0 >= size(ci)))
441439 then throw("nothing to claim")
442- else ((cj :+ IntegerEntry(aQ, aG)) :+ aj(q, bj.transactionId, drop(ck, 1)))
440+ else ((ci :+ IntegerEntry(aP, aF)) :+ ai(p, bi.transactionId, drop(cj, 1)))
443441 }
444442 }
445443
446444
447445
448-@Callable(bj)
449-func unclaimedRewardsREADONLY (bu) = {
450- func cl (aS,aT) = ((aS + makeString([aT, "0", "0"], ":")) + "_")
446+@Callable(bi)
447+func unclaimedRewardsREADONLY (bt) = {
448+ func ck (aR,aS) = ((aR + makeString([aS, "0", "0"], ":")) + "_")
451449
452- let cm = if ((bu == ""))
450+ let cl = if ((bt == ""))
453451 then {
454- let aY = aB
455- let aZ = size(aY)
456- let ba = ""
457- func bb (bc,bd) = if ((bd >= aZ))
458- then bc
459- else cl(bc, aY[bd])
452+ let aX = aA
453+ let aY = size(aX)
454+ let aZ = ""
455+ func ba (bb,bc) = if ((bc >= aY))
456+ then bb
457+ else ck(bb, aX[bc])
460458
461- func be (bc,bd) = if ((bd >= aZ))
462- then bc
459+ func bd (bb,bc) = if ((bc >= aY))
460+ then bb
463461 else throw("List size exceeds 10")
464462
465- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
463+ bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
466464 }
467465 else {
468- let q = addressFromStringValue(bu)
469- let cn = valueOrElse(ay(q), $Tuple3(true, 0, 0))
470- let aO = cn._1
471- let aP = cn._2
472- let bZ = cn._3
473- let aE = toBigInt(aP)
474- let aQ = B(bu)
475- let aF = N(aQ, -1)
476- let aG = N(A(), -1)
477- func ca (aS,aT) = {
478- let co = aC(bu, aT, aE, aF, aG)
479- let aV = co._1
480- let aW = co._2
481- let aX = co._3
482- let aL = co._4
483- let cp = valueOrElse(getInteger(G(bu, aT)), 0)
484- ((aS + makeString([aT, "10", "10"], ":")) + "_")
466+ let p = addressFromStringValue(bt)
467+ let cm = valueOrElse(ax(p), $Tuple3(true, 0, 0))
468+ let aN = cm._1
469+ let aO = cm._2
470+ let bY = cm._3
471+ let aD = toBigInt(aO)
472+ let aP = A(bt)
473+ let aE = M(aP, -1)
474+ let aF = M(z(), -1)
475+ func bZ (aR,aS) = {
476+ let cn = aB(bt, aS, aD, aE, aF)
477+ let aU = cn._1
478+ let aV = cn._2
479+ let aW = cn._3
480+ let aK = cn._4
481+ let co = valueOrElse(getInteger(F(bt, aS)), 0)
482+ ((aR + makeString([aS, toString(aU), toString(co)], ":")) + "_")
485483 }
486484
487- let aY = aB
488- let aZ = size(aY)
489- let ba = ""
490- func bb (bc,bd) = if ((bd >= aZ))
491- then bc
492- else ca(bc, aY[bd])
485+ let aX = aA
486+ let aY = size(aX)
487+ let aZ = ""
488+ func ba (bb,bc) = if ((bc >= aY))
489+ then bb
490+ else bZ(bb, aX[bc])
493491
494- func be (bc,bd) = if ((bd >= aZ))
495- then bc
492+ func bd (bb,bc) = if ((bc >= aY))
493+ then bb
496494 else throw("List size exceeds 10")
497495
498- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
496+ bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
499497 }
500- $Tuple2(nil, dropRight(cm, 1))
498+ $Tuple2(nil, dropRight(cl, 1))
501499 }
502500
503501
504502
505-@Callable(bj)
506-func nsbtStakingSYSREADONLY (bu) = {
507- let cq = N(v(), 0)
508- if ((bu == ""))
509- then $Tuple2(nil, [0, cq, 0])
503+@Callable(bi)
504+func nsbtStakingSYSREADONLY (bt) = {
505+ let cp = M(u(), 0)
506+ if ((bt == ""))
507+ then $Tuple2(nil, [0, cp, 0])
510508 else {
511- let q = S(bu)
512- let cr = valueOrElse(ay(q), $Tuple3(true, 0, 0))
513- let aO = cr._1
514- let cs = cr._2
515- let bZ = cr._3
516- $Tuple2(nil, [cs, cq, bZ])
509+ let p = R(bt)
510+ let cq = valueOrElse(ax(p), $Tuple3(true, 0, 0))
511+ let aN = cq._1
512+ let cr = cq._2
513+ let bY = cq._3
514+ $Tuple2(nil, [cr, cp, bY])
517515 }
518516 }
519517
518+
519+@Verifier(cs)
520+func ct () = {
521+ let cu = ["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
522+ let cv = ((((if (sigVerify(cs.bodyBytes, cs.proofs[0], fromBase58String(cu[0])))
523+ then 1
524+ else 0) + (if (sigVerify(cs.bodyBytes, cs.proofs[1], fromBase58String(cu[1])))
525+ then 1
526+ else 0)) + (if (sigVerify(cs.bodyBytes, cs.proofs[2], fromBase58String(cu[2])))
527+ then 1
528+ else 0)) + (if (sigVerify(cs.bodyBytes, cs.proofs[3], fromBase58String(cu[3])))
529+ then 2
530+ else 0))
531+ (cv >= 3)
532+ }
520533

github/deemru/w8io/169f3d6 
217.90 ms