tx · 6dE1gqpaf9zpKivoEwrQki2CfnyWWU8EdDSXpQKEPL6m

3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J:  -0.01400000 Waves

2022.03.25 16:23 [1979511] smart account 3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J > SELF 0.00000000 Waves

{ "type": 13, "id": "6dE1gqpaf9zpKivoEwrQki2CfnyWWU8EdDSXpQKEPL6m", "fee": 1400000, "feeAssetId": null, "timestamp": 1648214625330, "version": 1, "sender": "3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J", "senderPublicKey": "4DthuG3xjZV9WtZ34Y66AummdAr67wRzwWsVQL4y2bob", "proofs": [ "4z5Wmt9nw26tPWpnnurHr26pX1azd8n46XhdzXskZCER2SkQ5FL2cURdDotLZ6JDddkdCj79brxr4TwUSWwVsaL9" ], "script": "base64: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ABhmb3JtYXRDbGFpbUhpc3RvcnlSZWNvcmQAAAACCQAEJQAAAAEFAAAAC3VzZXJBZGRyZXNzBQAAAA5jbGFpbWVkUmV3YXJkcwEAAAALU3RhdHNSZXN1bHQAAAADAAAADnRvdGFsTG9ja2VkSW5jAAAADGxvY2tDb3VudEluYwAAAA11c2Vyc0NvdW50SW5jBAAAAApsb2Nrc0NvdW50CQEAAAAMZ2V0SW50T3JaZXJvAAAAAQkBAAAAEmtleVN0YXRzTG9ja3NDb3VudAAAAAAEAAAACnVzZXJzQ291bnQJAQAAAAxnZXRJbnRPclplcm8AAAABCQEAAAASa2V5U3RhdHNVc2Vyc0NvdW50AAAAAAQAAAALdG90YWxBbW91bnQJAQAAAAxnZXRJbnRPclplcm8AAAABCQEAAAAXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAAABAAAAA50b3RhbEFtb3VudE5ldwkAAGQAAAACBQAAAAt0b3RhbEFtb3VudAUAAAAOdG90YWxMb2NrZWRJbmMJAAUVAAAAAwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEmtleVN0YXRzTG9ja3NDb3VudAAAAAAJAABkAAAAAgUAAAAKbG9ja3NDb3VudAUAAAAMbG9ja0NvdW50SW5jCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASa2V5U3RhdHNVc2Vyc0NvdW50AAAAAAkAAGQAAAACBQAAAAp1c2Vyc0NvdW50BQAAAA11c2Vyc0NvdW50SW5jCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAAABQAAAA50b3RhbEFtb3VudE5ldwUAAAADbmlsBQAAAAt0b3RhbEFtb3VudAUAAAAOdG90YWxBbW91bnROZXcBAAAAD0xvY2tQYXJhbXNFbnRyeQAAAAMAAAALdXNlckFkZHJlc3MAAAAGYW1vdW50AAAABXN0YXJ0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5TG9ja1BhcmFtVXNlckFtb3VudAAAAAEFAAAAC3VzZXJBZGRyZXNzBQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlMb2NrUGFyYW1TdGFydEJsb2NrAAAAAQUAAAALdXNlckFkZHJlc3MFAAAABXN0YXJ0BQAAAANuaWwBAAAAD2dldFBhcmFtc09yRmFpbAAAAAAEAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAaa2V5TmV1dHJpbm9Db250cmFjdEFkZHJlc3MAAAAACQAFFgAAAAQJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAGWtleUF1Y3Rpb25Db250cmFjdEFkZHJlc3MAAAAACQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAAxrZXlCb25kQXNzZXQAAAAACQEAAAAMZ2V0SW50T3JGYWlsAAAAAQkBAAAAEGtleU1pbkxvY2tBbW91bnQAAAAACQEAAAAMZ2V0SW50T3JGYWlsAAAAAQkBAAAAC2tleUhhbGZMaWZlAAAAAAEAAAAMaXNBY3RpdmVVc2VyAAAAAQAAAAt1c2VyQWRkcmVzcwkAAGYAAAACCQEAAAAMZ2V0SW50T3JFbHNlAAAAAgkBAAAAFmtleUxvY2tQYXJhbVVzZXJBbW91bnQAAAABBQAAAAt1c2VyQWRkcmVzcwAAAAAAAAAAAAAAAAAAAAAAAAEAAAATZ2V0VXNlclBhcmFtc09yVW5pdAAAAAEAAAALdXNlckFkZHJlc3MDCQEAAAAMaXNBY3RpdmVVc2VyAAAAAQUAAAALdXNlckFkZHJlc3MJAAUVAAAAAwcJAQAAAAxnZXRJbnRPckZhaWwAAAABCQEAAAAWa2V5TG9ja1BhcmFtVXNlckFtb3VudAAAAAEFAAAAC3VzZXJBZGRyZXNzCQEAAAAMZ2V0SW50T3JGYWlsAAAAAQkBAAAAFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sAAAABBQAAAAt1c2VyQWRkcmVzcwUAAAAEdW5pdAEAAAATZ2V0VXNlclBhcmFtc09yRmFpbAAAAAEAAAALdXNlckFkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAAE2dldFVzZXJQYXJhbXNPclVuaXQAAAABBQAAAAt1c2VyQWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAABVVzZXIgCQAEJQAAAAEFAAAAC3VzZXJBZGRyZXNzAgAAAA8gaXMgbm90IGRlZmluZWQAAAAAEnN1cHBvcnRlZEFzc2V0c1N0cgkBAAAADGdldFN0ck9yRWxzZQAAAAIJAQAAABhrZXlTdXBwb3J0ZWRSZXdhcmRBc3NldHMAAAAAAgAAAAAAAAAAE3N1cHBvcnRlZEFzc2V0c0xpc3QJAAS1AAAAAgUAAAASc3VwcG9ydGVkQXNzZXRzU3RyAgAAAAFfAQAAAApjYWxjUmV3YXJkAAAABQAAAAt1c2VyQWRkcmVzcwAAAAdhc3NldElkAAAADXN0YWtlZEFtb3VudFgAAAAOZGVwb3NpdE51bVVzZXIAAAAOZGVwb3NpdE51bUxhc3QEAAAAF3Jld2FyZFBlck5zYnRTdW1MYXN0S0VZCQEAAAAVa2V5UmV3YXJkUGVyTnNidFN1bUF0AAAAAgUAAAAOZGVwb3NpdE51bUxhc3QFAAAAB2Fzc2V0SWQEAAAACnN1bUxhc3RYMTgJAAGnAAAAAQkBAAAADGdldFN0ck9yRWxzZQAAAAIJAQAAABVrZXlSZXdhcmRQZXJOc2J0U3VtQXQAAAACBQAAAA5kZXBvc2l0TnVtTGFzdAUAAAAHYXNzZXRJZAIAAAABMAQAAAAKc3VtVXNlclgxOAkAAacAAAABCQEAAAAMZ2V0U3RyT3JFbHNlAAAAAgkBAAAAFWtleVJld2FyZFBlck5zYnRTdW1BdAAAAAIFAAAADmRlcG9zaXROdW1Vc2VyBQAAAAdhc3NldElkAgAAAAEwBAAAABFyZXdhcmREeW5hbWljUGFydAkAAaAAAAABCQABPAAAAAMJAAE4AAAAAgUAAAAKc3VtTGFzdFgxOAUAAAAKc3VtVXNlclgxOAUAAAANc3Rha2VkQW1vdW50WAUAAAAHTVVMVFgxOAQAAAATcmV3YXJkQ2FjaGVkUGFydEtFWQkBAAAACWtleVJld2FyZAAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAAdhc3NldElkBAAAABByZXdhcmRDYWNoZWRQYXJ0CQEAAAAMZ2V0SW50T3JFbHNlAAAAAgUAAAATcmV3YXJkQ2FjaGVkUGFydEtFWQAAAAAAAAAAAAkABRYAAAAECQAAZAAAAAIFAAAAEHJld2FyZENhY2hlZFBhcnQFAAAAEXJld2FyZER5bmFtaWNQYXJ0BQAAABByZXdhcmRDYWNoZWRQYXJ0BQAAABFyZXdhcmREeW5hbWljUGFydAUAAAATcmV3YXJkQ2FjaGVkUGFydEtFWQEAAAANUmV3YXJkRW50cmllcwAAAAMAAAAJaXNOZXdVc2VyAAAAC3VzZXJBZGRyZXNzAAAADHN0YWtlZEFtb3VudAQAAAANc3Rha2VkQW1vdW50WAkAATYAAAABBQAAAAxzdGFrZWRBbW91bnQEAAAAG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQkBAAAAG2tleVVzZXJSZXdhcmRGcm9tRGVwb3NpdE51bQAAAAEFAAAAC3VzZXJBZGRyZXNzBAAAAA5kZXBvc2l0TnVtVXNlcgkBAAAADGdldEludE9yRWxzZQAAAAIFAAAAG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQD//////////wQAAAAOZGVwb3NpdE51bUxhc3QJAQAAAAxnZXRJbnRPckVsc2UAAAACCQEAAAARa2V5RGVwb3NpdE51bUxhc3QAAAAAAP//////////CgEAAAAbZm9yRWFjaEFzc2V0Q2FjaGVVc2VyUmV3YXJkAAAAAgAAAAVhY2N1bQAAAAVhc3NldAQAAAALJHQwNzM2MTc0OTYJAQAAAApjYWxjUmV3YXJkAAAABQUAAAALdXNlckFkZHJlc3MFAAAABWFzc2V0BQAAAA1zdGFrZWRBbW91bnRYBQAAAA5kZXBvc2l0TnVtVXNlcgUAAAAOZGVwb3NpdE51bUxhc3QEAAAAC3Jld2FyZFRvdGFsCAUAAAALJHQwNzM2MTc0OTYAAAACXzEEAAAABmNhY2hlZAgFAAAACyR0MDczNjE3NDk2AAAAAl8yBAAAAAdkeW5hbWljCAUAAAALJHQwNzM2MTc0OTYAAAACXzMEAAAAE3Jld2FyZENhY2hlZFBhcnRLRVkIBQAAAAskdDA3MzYxNzQ5NgAAAAJfNAkABE0AAAACBQAAAAVhY2N1bQkBAAAADEludGVnZXJFbnRyeQAAAAIF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AAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkFAAAADmRlcG9zaXROdW1MYXN0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAJHVuY292ZXJlZCBjb25kaXRpb246IGRlcG9zaXROdW1MYXN0PQkAAaQAAAABBQAAAA5kZXBvc2l0TnVtTGFzdAIAAAAQIGRlcG9zaXROdW1Vc2VyPQkAAaQAAAABBQAAAA5kZXBvc2l0TnVtVXNlcgEAAAAiSW5jcmVtZW50Tm90RGlzdHJpYnV0ZWRSZXdhcmRFbnRyeQAAAAIAAAADdGtuAAAACWFtb3VudEluYwQAAAAXbm90RGlzdHJpYnV0ZWRSZXdhcmRLRVkJAQAAABdrZXlOb3REaXN0cmlidXRlZFJld2FyZAAAAAEFAAAAA3RrbgQAAAAUbm90RGlzdHJpYnV0ZWRSZXdhcmQJAQAAAAxnZXRJbnRPckVsc2UAAAACBQAAABdub3REaXN0cmlidXRlZFJld2FyZEtFWQAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAXbm90RGlzdHJpYnV0ZWRSZXdhcmRLRVkJAABkAAAAAgUAAAAUbm90RGlzdHJpYnV0ZWRSZXdhcmQFAAAACWFtb3VudEluYwUAAAADbmlsAAAABwAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAUAAAAXbmV1dHJpbm9Db250cmFjdEFkZHJlc3MAAAATbWF0aENvbnRyYWN0QWRkcmVzcwAAAA1taW5Mb2NrQW1vdW50AAAACGhhbGZMaWZlAAAAFXN1cHBvcnRlZFJld2FyZEFzc2V0cwMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABFQZXJtaXNzaW9uIGRlbmllZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaa2V5TmV1dHJpbm9Db250cmFjdEFkZHJlc3MAAAAABQAAABduZXV0cmlub0NvbnRyYWN0QWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAWa2V5TWF0aENvbnRyYWN0QWRkcmVzcwAAAAAFAAAAE21hdGhDb250cmFjdEFkZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABBrZXlNaW5Mb2NrQW1vdW50AAAAAAUAAAANbWluTG9ja0Ftb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAC2tleUhhbGZMaWZlAAAAAAUAAAAIaGFsZkxpZmUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGGtleVN1cHBvcnRlZFJld2FyZEFzc2V0cwAAAAAFAAAAFXN1cHBvcnRlZFJld2FyZEFzc2V0cwUAAAADbmlsAAAAAWkBAAAABXN0YWtlAAAAAAQAAAANJHQwMTExNTAxMTIyOQkBAAAAD2dldFBhcmFtc09yRmFpbAAAAAAEAAAAD2F1Y3Rpb25Db250cmFjdAgFAAAADSR0MDExMTUwMTEyMjkAAAACXzEEAAAAC2JvbmRBc3NldElkCAUAAAANJHQwMTExNTAxMTIyOQAAAAJfMgQAAAANbWluTG9ja0Ftb3VudAgFAAAADSR0MDExMTUwMTEyMjkAAAACXzMEAAAACGhhbGZMaWZlCAUAAAANJHQwMTExNTAxMTIyOQAAAAJfNAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAVSW52YWxpZCBwYXltZW50cyBzaXplBAAAAAdwYXltZW50CQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAZhbW91bnQIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAATaW52YWxpZEFzc2V0TWVzc2FnZQkAASwAAAACCQABLAAAAAICAAAAD0ludmFsaWQgYXNzZXQuIAkAAlgAAAABBQAAAAtib25kQXNzZXRJZAIAAAAMIGlzIGV4cGVjdGVkBAAAAAdhc3NldElkCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQFAAAAE2ludmFsaWRBc3NldE1lc3NhZ2UDCQEAAAACIT0AAAACBQAAAAdhc3NldElkBQAAAAtib25kQXNzZXRJZAkAAAIAAAABBQAAABNpbnZhbGlkQXNzZXRNZXNzYWdlBAAAAAt1c2VyQWRkcmVzcwgFAAAAAWkAAAAGY2FsbGVyBAAAAA51c2VyQWRkcmVzc1N0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADSR0MDExNzcxMTE4NzgJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAABNnZXRVc2VyUGFyYW1zT3JVbml0AAAAAQUAAAALdXNlckFkZHJlc3MJAAUVAAAAAwYAAAAAAAAAAAAA//////////8EAAAACWlzTmV3VXNlcggFAAAADSR0MDExNzcxMTE4NzgAAAACXzEEAAAACmxvY2tBbW91bnQIBQAAAA0kdDAxMTc3MTExODc4AAAAAl8yBAAAAA9sb2NrU3RhcnRIZWlnaHQIBQAAAA0kdDAxMTc3MTExODc4AAAAAl8zBAAAAAxtZXJnZWRBbW91bnQDBQAAAAlpc05ld1VzZXIFAAAABmFtb3VudAkAAGQAAAACBQAAAAZhbW91bnQFAAAACmxvY2tBbW91bnQEAAAAEW1lcmdlZFN0YXJ0SGVpZ2h0AwUAAAAJaXNOZXdVc2VyBQAAAAZoZWlnaHQEAAAADG1hdGhDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAABZrZXlNYXRoQ29udHJhY3RBZGRyZXNzAAAAAAkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAAxtYXRoQ29udHJhY3QCAAAAE21lcmdlU3Rha2VzUkVBRE9OTFkJAARMAAAAAgUAAAAGYW1vdW50CQAETAAAAAIFAAAABmhlaWdodAkABEwAAAACBQAAAApsb2NrQW1vdW50CQAETAAAAAIFAAAAD2xvY2tTdGFydEhlaWdodAkABEwAAAACBQAAAAhoYWxmTGlmZQUAAAADbmlsBQAAAANuaWwDCQAAZgAAAAIFAAAADW1pbkxvY2tBbW91bnQFAAAADG1lcmdlZEFtb3VudAkAAAIAAAABCQABLAAAAAICAAAAE01pbiBsb2NrIGFtb3VudCBpcyAJAAGkAAAAAQUAAAANbWluTG9ja0Ftb3VudAQAAAANJHQwMTIzMjgxMjQzMAkBAAAAC1N0YXRzUmVzdWx0AAAAAwUAAAAGYW1vdW50AAAAAAAAAAABAwUAAAAJaXNOZXdVc2VyAAAAAAAAAAABAAAAAAAAAAAABAAAAAxzdGF0c0VudHJpZXMIBQAAAA0kdDAxMjMyODEyNDMwAAAAAl8xBAAAAAt0b3RhbFN0YWtlZAgFAAAADSR0MDEyMzI4MTI0MzAAAAACXzIEAAAADnRvdGFsU3Rha2VkTmV3CAUAAAANJHQwMTIzMjgxMjQzMAAAAAJfMwkABE4AAAACCQAETgAAAAIJAAROAAAAAgkABEwAAAACCQEAAAASSGlzdG9yeVJlY29yZEVudHJ5AAAABwIAAAAFc3Rha2UFAAAAC3VzZXJBZGRyZXNzCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAApsb2NrQW1vdW50BQAAAA9sb2NrU3RhcnRIZWlnaHQFAAAADG1lcmdlZEFtb3VudAUAAAARbWVyZ2VkU3RhcnRIZWlnaHQFAAAAA25pbAkBAAAADVJld2FyZEVudHJpZXMAAAADBQAAAAlpc05ld1VzZXIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAApsb2NrQW1vdW50CQEAAAAPTG9ja1BhcmFtc0VudHJ5AAAAAwUAAAALdXNlckFkZHJlc3MFAAAADG1lcmdlZEFtb3VudAUAAAARbWVyZ2VkU3RhcnRIZWlnaHQFAAAADHN0YXRzRW50cmllcwAAAAFpAQAAAAd1bnN0YWtlAAAAAQAAAAZhbW91bnQDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAACQAAAgAAAAECAAAAI3Vuc3Rha2UgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50BAAAAAt1c2VyQWRkcmVzcwgFAAAAAWkAAAAGY2FsbGVyBAAAAA51c2VyQWRkcmVzc1N0cgkABCUAAAABBQAAAAt1c2VyQWRkcmVzcwQAAAANJHQwMTI5MTYxMjk5NAkBAAAAD2dldFBhcmFtc09yRmFpbAAAAAAEAAAADmF1Y3Rpb25BZGRyZXNzCAUAAAANJHQwMTI5MTYxMjk5NAAAAAJfMQQAAAALYm9uZEFzc2V0SWQIBQAAAA0kdDAxMjkxNjEyOTk0AAAAAl8yBAAA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AApwbXRBc3NldElkCQEAAAALdmFsdWVPckVsc2UAAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAAB1dBVkVTSUQEAAAADXBtdEFzc2V0SWRTdHIJAAJYAAAAAQUAAAAKcG10QXNzZXRJZAQAAAAIcG10TXVsdFgDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAAB1dBVkVTSUQFAAAABk1VTFRYOAUAAAAGTVVMVFg2BAAAAAdhbW91bnRYCQABNgAAAAEFAAAABmFtb3VudAQAAAALdG90YWxTdGFrZWQJAQAAAAxnZXRJbnRPckVsc2UAAAACCQEAAAAXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAAAAAAAAAAAAAAABAAAAAx0b3RhbFN0YWtlZFgJAAE2AAAAAQUAAAALdG90YWxTdGFrZWQDCQAAZgAAAAIAAAAAAAAAAAAFAAAAC3RvdGFsU3Rha2VkCQAAAgAAAAECAAAAG1RPRE86IGNhc2UgaXMgbm90IHN1cHBvcnRlZAMJAAAAAAAAAgUAAAALdG90YWxTdGFrZWQAAAAAAAAAAAAJAQAAACJJbmNyZW1lbnROb3REaXN0cmlidXRlZFJld2FyZEVudHJ5AAAAAgUAAAANcG10QXNzZXRJZFN0cgUAAAAGYW1vdW50BAAAABByZXdhcmRQZXJOc2J0WDE4CQABPAAAAAMFAAAAB2Ftb3VudFgFAAAAB01VTFRYMTgFAAAADHRvdGFsU3Rha2VkWAQAAAARZGVwb3NpdE51bUxhc3RLRVkJAQAAABFrZXlEZXBvc2l0TnVtTGFzdAAAAAAEAAAADmRlcG9zaXROdW1MYXN0CQEAAAAMZ2V0SW50T3JFbHNlAAAAAgUAAAARZGVwb3NpdE51bUxhc3RLRVkA//////////8EAAAADWRlcG9zaXROdW1OZXcJAABkAAAAAgUAAAAOZGVwb3NpdE51bUxhc3QAAAAAAAAAAAEDCQEAAAABIQAAAAEJAQAAAAhjb250YWlucwAAAAIFAAAAEnN1cHBvcnRlZEFzc2V0c1N0cgUAAAANcG10QXNzZXRJZFN0cgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgUAAAASc3VwcG9ydGVkQXNzZXRzU3RyAgAAABEgZG9lc24ndCBjb250YWluIAUAAAAN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EWtleURlcG9zaXROdW1MYXN0AAAAAAD//////////woBAAAAH2ZvckVhY2hBc3NldENhbGNVbmNsYWltZWRSZXdhcmQAAAACAAAABWFjY3VtAAAABWFzc2V0BAAAAA0kdDAxNjM1ODE2NDk2CQEAAAAKY2FsY1Jld2FyZAAAAAUFAAAADnVzZXJBZGRyZXNzU3RyBQAAAAVhc3NldAUAAAANc3Rha2VkQW1vdW50WAUAAAAOZGVwb3NpdE51bVVzZXIFAAAADmRlcG9zaXROdW1MYXN0BAAAAAtyZXdhcmRUb3RhbAgFAAAADSR0MDE2MzU4MTY0OTYAAAACXzEEAAAABmNhY2hlZAgFAAAADSR0MDE2MzU4MTY0OTYAAAACXzIEAAAAB2R5bmFtaWMIBQAAAA0kdDAxNjM1ODE2NDk2AAAAAl8zBAAAABNyZXdhcmRDYWNoZWRQYXJ0S0VZCAUAAAANJHQwMTYzNTgxNjQ5NgAAAAJfNAQAAAAKY2xhaW1lZEtFWQkBAAAACmtleUNsYWltZWQAAAACBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAFYXNzZXQEAAAADSR0MDE2NTU2MTY1OTMFAAAABWFjY3VtBAAAAARkYXRhCAUAAAANJHQwMTY1NTYxNjU5MwAAAAJfMQQAAAARY2xhaW1lZEFtdEJ5QXNzZXQIBQAAAA0kdDAxNjU1NjE2NTkzAAAAAl8yBAAAAAduZXdQYXJ0CQAEuQAAAAIJAARMAAAAAgUAAAAFYXNzZXQJAARMAAAAAgkAAaQAAAABBQAAAAtyZXdhcmRUb3RhbAUAAAADbmlsAgAAAAE6BAAAABRjbGFpbWVkQW10QnlBc3NldE5ldwkABLkAAAACCQAETAAAAAIFAAAAEWNsYWltZWRBbXRCeUFzc2V0CQAETAAAAAIFAAAAB25ld1BhcnQFAAAAA25pbAIAAAABXwMJAABnAAAAAgAAAAAAAAAAAAUAAAALcmV3YXJkVG90YWwJAAUUAAAAAgUAAAAEZGF0YQUAAAAUY2xhaW1lZEFtdEJ5QXNzZXROZXcJAAUUAAAAAgkABE0AAAACCQAETQAAAAIJAARNAAAAAgUAAAAEZGF0YQkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAALdXNlckFkZHJlc3MFAAAAC3Jld2FyZFRvdGFsCQEAAAALdG9Bc3NldFZlY3QAAAABBQAAAAVhc3NldAkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACmNsYWltZWRLRVkJAABkAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABBQAAAApjbGFpbWVkS0VZAAAAAAAAAAAABQAAAAtyZXdhcmRUb3RhbAkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE3Jld2FyZENhY2hlZFBhcnRLRVkAAAAAAAAAAAAFAAAAFGNsYWltZWRBbXRCeUFzc2V0TmV3BAAAAA0kdDAxNzA1MzE3MTY3CgAAAAACJGwFAAAAE3N1cHBvcnRlZEFzc2V0c0xpc3QKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwCQAFFAAAAAIFAAAAA25pbAIAAAAACgEAAAAFJGYwXzEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAAfZm9yRWFjaEFzc2V0Q2FsY1VuY2xhaW1lZFJld2FyZAAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAABSRmMF8yAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkAAAIAAAABAgAAABRMaXN0IHNpemUgZXhjZWVkcyAxMAkBAAAABSRmMF8yAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoEAAAACXRyYW5zZmVycwgFAAAADSR0MDE3MDUzMTcxNjcAAAACXzEEAAAAF2NsYWltZWRBbXRCeUFzc2V0UmVzdWx0CAUAAAANJHQwMTcwNTMxNzE2NwAAAAJfMgMJAABnAAAAAgAAAAAAAAAAAAkAAZAAAAABBQAAAAl0cmFuc2ZlcnMJAAACAAAAAQIAAAAQbm90aGluZyB0byBjbGFpbQkABE0AAAACCQAETQAAAAIFAAAACXRyYW5zZmVycwkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQUAAAAOZGVwb3NpdE51bUxhc3QJAQAAABFDbGFpbUhpc3RvcnlFbnRyeQAAAAMFAAAAC3VzZXJBZGRyZXNzCAUAAAABaQAAAA10cmFuc2FjdGlvbklkCQABMAAAAAIFAAAAF2NsYWltZWRBbXRCeUFzc2V0UmVzdWx0AAAAAAAAAAABAAAAAWkBAAAAGHVuY2xhaW1lZFJld2FyZHNSRUFET05MWQAAAAEAAAAOdXNlckFkZHJlc3NTdHIKAQAAABZmb3JFYWNoQXNzZXRaZXJvUmV3YXJkAAAAAgAAAAVhY2N1bQAAAAVhc3NldAkAASwAAAACCQABLAAAAAIFAAAABWFjY3VtCQAEuQAAAAIJAARMAAAAAgUAAAAFYXNzZXQJAARMAAAAAgIAAAABMAkABEwAAAACAgAAAAEwBQAAAANuaWwCAAAAAToCAAAAAV8EAAAAEnVuY2xhaW1lZFJld2FyZFN0cgMJAAAAAAAAAgUAAAAOdXNlckFkZHJlc3NTdHICAAAAAAoAAAAAAiRsBQAAABNzdXBwb3J0ZWRBc3NldHNMaXN0CgAAAAACJHMJAAGQAAAAAQUAAAACJGwKAAAAAAUkYWNjMAIAAAAACgEAAAAFJGYwXzEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAAWZm9yRWFjaEFzc2V0WmVyb1Jld2FyZAAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAABSRmMF8yAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkAAAIAAAABAgAAABRMaXN0IHNpemUgZXhjZWVkcyAxMAkBAAAABSRmMF8yAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoEAAAAC3VzZXJBZGRyZXNzCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAA51c2VyQWRkcmVzc1N0cgQAAAANJHQwMTc4MjYxNzkzMQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAAE2dldFVzZXJQYXJhbXNPclVuaXQAAAABBQAAAAt1c2VyQWRkcmVzcwkABRUAAAADBgAAAAAAAAAAAAAAAAAAAAAAAAQAAAAJaXNOZXdVc2VyCAUAAAANJHQwMTc4MjYxNzkzMQAAAAJfMQQAAAAMc3Rha2VkQW1vdW50CAUAAAANJHQwMTc4MjYxNzkzMQAAAAJfMgQAAAAMc3Rha2luZ1N0YXJ0CAUAAAANJHQwMTc4MjYxNzkzMQAAAAJfMwQAAAANc3Rha2VkQW1vdW50WAkAATYAAAABBQAAAAxzdGFrZWRBbW91bnQEAAAAG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQkBAAAAG2tleVVzZXJSZXdhcmRGcm9tRGVwb3NpdE51bQAAAAEFAAAADnVzZXJBZGRyZXNzU3RyBAAAAA5kZXBvc2l0TnVtVXNlcgkBAAAADGdldEludE9yRWxzZQAAAAIFAAAAG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQD//////////wQAAAAOZGVwb3NpdE51bUxhc3QJAQAAAAxnZXRJbnRPckVsc2UAAAACCQEAAAARa2V5RGVwb3NpdE51bUxhc3QAAAAAAP//////////CgEAAAAfZm9yRWFjaEFzc2V0Q2FsY1VuY2xhaW1lZFJld2FyZAAAAAIAAAAFYWNjdW0AAAAFYXNzZXQEAAAADSR0MDE4Mjc3MTg0MTUJAQAAAApjYWxjUmV3YXJkAAAABQUAAAAOdXNlckFkZHJlc3NTdHIFAAAABWFzc2V0BQAAAA1zdGFrZWRBbW91bnRYBQAAAA5kZXBvc2l0TnVtVXNlcgUAAAAOZGVwb3NpdE51bUxhc3QEAAAAC3Jld2FyZFRvdGFsCAUAAAANJHQwMTgyNzcxODQxNQAAAAJfMQQAAAAGY2FjaGVkCAUAAAANJHQwMTgyNzcxODQxNQAAAAJfMgQAAAAHZHluYW1pYwgFAAAADSR0MDE4Mjc3MTg0MTUAAAACXzMEAAAAE3Jld2FyZENhY2hlZFBhcnRLRVkIBQAAAA0kdDAxODI3NzE4NDE1AAAAAl80BAAAAAdjbGFpbWVkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEJAQAAAAprZXlDbGFpbWVkAAAAAgUAAAAOdXNlckFkZHJlc3NTdHIFAAAABWFzc2V0AAAAAAAAAAAACQABLAAAAAIJAAEsAAAAAgUAAAAFYWNjdW0JAAS5AAAAAgkABEwAAAACBQAAAAVhc3NldAkABEwAAAACAgAAAAIxMAkABEwAAAACAgAAAAIxMAUAAAADbmlsAgAAAAE6AgAAAAFfCgAAAAACJGwFAAAAE3N1cHBvcnRlZEFzc2V0c0xpc3QKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwAgAAAAAKAQAAAAUkZjBfMQAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAQAAAB9mb3JFYWNoQXNzZXRDYWxjVW5jbGFpbWVkUmV3YXJkAAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAAFJGYwXzIAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQAAAgAAAAECAAAAFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEAAAAFJGYwXzIAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACBQAAAAUkYWNjMAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAAAAAAAAAAACQAAAAAAAAAACgkABRQAAAACBQAAAANuaWwJAQAAAAlkcm9wUmlnaHQAAAACBQAAABJ1bmNsYWltZWRSZXdhcmRTdHIAAAAAAAAAAAEAAAABaQEAAAAWbnNidFN0YWtpbmdTWVNSRUFET05MWQAAAAEAAAAOdXNlckFkZHJlc3NTdHIEAAAADHRvdGFsTnNidEFtdAkBAAAADGdldEludE9yRWxzZQAAAAIJAQAAABdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudAAAAAAAAAAAAAAAAAADCQAAAAAAAAIFAAAADnVzZXJBZGRyZXNzU3RyAgAAAAAJAAUUAAAAAgUAAAADbmlsCQAETAAAAAIAAAAAAAAAAAAJAARMAAAAAgUAAAAMdG90YWxOc2J0QW10CQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAQAAAALdXNlckFkZHJlc3MJAQAAAA90b0FkZHJlc3NPckZhaWwAAAABBQAAAA51c2VyQWRkcmVzc1N0cgQAAAANJHQwMTg5ODcxOTA5MQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAAE2dldFVzZXJQYXJhbXNPclVuaXQAAAABBQAAAAt1c2VyQWRkcmVzcwkABRUAAAADBgAAAAAAAAAAAAAAAAAAAAAAAAQAAAAJaXNOZXdVc2VyCAUAAAANJHQwMTg5ODcxOTA5MQAAAAJfMQQAAAALdXNlck5zYnRBbXQIBQAAAA0kdDAxODk4NzE5MDkxAAAAAl8yBAAAAAxzdGFraW5nU3RhcnQIBQAAAA0kdDAxODk4NzE5MDkxAAAAAl8zCQAFFAAAAAIFAAAAA25pbAkABEwAAAACBQAAAAt1c2VyTnNidEFtdAkABEwAAAACBQAAAAx0b3RhbE5zYnRBbXQJAARMAAAAAgUAAAAMc3Rha2luZ1N0YXJ0BQAAAANuaWwAAAAAD9rPZQ==", "chainId": 84, "height": 1979511, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Fz8XGheAiqPy5iQSzyAZibArWH7mqsxfC91NZ4Xy29vc Next: 5WiKyA1KQfvsWUt4BFKaDJfAKLpeyhebAVsEceEqi5FU Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let revisionNum = ""
5+
46 let separator = "__"
57
68 let MULT6 = 1000000
173175 let depositNumUser = getIntOrElse(userRewardFromDepositNumKEY, -1)
174176 let depositNumLast = getIntOrElse(keyDepositNumLast(), -1)
175177 func forEachAssetCacheUserReward (accum,asset) = {
176- let $t073597494 = calcReward(userAddress, asset, stakedAmountX, depositNumUser, depositNumLast)
177- let rewardTotal = $t073597494._1
178- let cached = $t073597494._2
179- let dynamic = $t073597494._3
180- let rewardCachedPartKEY = $t073597494._4
178+ let $t073617496 = calcReward(userAddress, asset, stakedAmountX, depositNumUser, depositNumLast)
179+ let rewardTotal = $t073617496._1
180+ let cached = $t073617496._2
181+ let dynamic = $t073617496._3
182+ let rewardCachedPartKEY = $t073617496._4
181183 (accum :+ IntegerEntry(rewardCachedPartKEY, rewardTotal))
182184 }
183185
247249
248250 @Callable(i)
249251 func stake () = {
250- let $t01114811227 = getParamsOrFail()
251- let auctionContract = $t01114811227._1
252- let bondAssetId = $t01114811227._2
253- let minLockAmount = $t01114811227._3
254- let halfLife = $t01114811227._4
252+ let $t01115011229 = getParamsOrFail()
253+ let auctionContract = $t01115011229._1
254+ let bondAssetId = $t01115011229._2
255+ let minLockAmount = $t01115011229._3
256+ let halfLife = $t01115011229._4
255257 if ((size(i.payments) != 1))
256258 then throw("Invalid payments size")
257259 else {
264266 else {
265267 let userAddress = i.caller
266268 let userAddressStr = toString(i.caller)
267- let $t01176911876 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, -1))
268- let isNewUser = $t01176911876._1
269- let lockAmount = $t01176911876._2
270- let lockStartHeight = $t01176911876._3
269+ let $t01177111878 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, -1))
270+ let isNewUser = $t01177111878._1
271+ let lockAmount = $t01177111878._2
272+ let lockStartHeight = $t01177111878._3
271273 let mergedAmount = if (isNewUser)
272274 then amount
273275 else (amount + lockAmount)
280282 if ((minLockAmount > mergedAmount))
281283 then throw(("Min lock amount is " + toString(minLockAmount)))
282284 else {
283- let $t01232612428 = StatsResult(amount, 1, if (isNewUser)
285+ let $t01232812430 = StatsResult(amount, 1, if (isNewUser)
284286 then 1
285287 else 0)
286- let statsEntries = $t01232612428._1
287- let totalStaked = $t01232612428._2
288- let totalStakedNew = $t01232612428._3
288+ let statsEntries = $t01232812430._1
289+ let totalStaked = $t01232812430._2
290+ let totalStakedNew = $t01232812430._3
289291 ((([HistoryRecordEntry("stake", userAddress, i.transactionId, lockAmount, lockStartHeight, mergedAmount, mergedStartHeight)] ++ RewardEntries(isNewUser, userAddressStr, lockAmount)) ++ LockParamsEntry(userAddress, mergedAmount, mergedStartHeight)) ++ statsEntries)
290292 }
291293 }
300302 else {
301303 let userAddress = i.caller
302304 let userAddressStr = toString(userAddress)
303- let $t01291412992 = getParamsOrFail()
304- let auctionAddress = $t01291412992._1
305- let bondAssetId = $t01291412992._2
306- let minLockAmount = $t01291412992._3
307- let halfLife = $t01291412992._4
308- let $t01299513069 = getUserParamsOrFail(userAddress)
309- let isNewUser = $t01299513069._1
310- let lockAmount = $t01299513069._2
311- let lockStart = $t01299513069._3
305+ let $t01291612994 = getParamsOrFail()
306+ let auctionAddress = $t01291612994._1
307+ let bondAssetId = $t01291612994._2
308+ let minLockAmount = $t01291612994._3
309+ let halfLife = $t01291612994._4
310+ let $t01299713071 = getUserParamsOrFail(userAddress)
311+ let isNewUser = $t01299713071._1
312+ let lockAmount = $t01299713071._2
313+ let lockStart = $t01299713071._3
312314 if ((0 >= lockAmount))
313315 then throw("Nothing to unstake")
314316 else if ((amount > lockAmount))
316318 else {
317319 let mathContract = addressFromStringValue(getStringOrFail(keyMathContractAddress()))
318320 let comissionAmount = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, lockStart, halfLife], nil))
319- let $t01347013624 = StatsResult(-(amount), if ((amount == lockAmount))
321+ let $t01347213626 = StatsResult(-(amount), if ((amount == lockAmount))
320322 then -1
321323 else 0, if ((amount == lockAmount))
322324 then -1
323325 else 0)
324- let statsEntries = $t01347013624._1
325- let totalStaked = $t01347013624._2
326- let totalStakedNew = $t01347013624._3
326+ let statsEntries = $t01347213626._1
327+ let totalStaked = $t01347213626._2
328+ let totalStakedNew = $t01347213626._3
327329 ((([ScriptTransfer(userAddress, (amount - comissionAmount), bondAssetId), ScriptTransfer(Address(auctionAddress), comissionAmount, bondAssetId), HistoryRecordEntry("unstake", userAddress, i.transactionId, lockAmount, lockStart, (lockAmount - amount), lockStart)] ++ RewardEntries(false, userAddressStr, lockAmount)) ++ LockParamsEntry(userAddress, (lockAmount - amount), lockStart)) ++ statsEntries)
328330 }
329331 }
391393 if ((size(i.payments) > 0))
392394 then throw("payments are not accepted")
393395 else {
394- let $t01588015985 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, 0))
395- let isNewUser = $t01588015985._1
396- let stakedAmount = $t01588015985._2
397- let stakingStart = $t01588015985._3
396+ let $t01588215987 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, 0))
397+ let isNewUser = $t01588215987._1
398+ let stakedAmount = $t01588215987._2
399+ let stakingStart = $t01588215987._3
398400 let stakedAmountX = toBigInt(stakedAmount)
399401 let userRewardFromDepositNumKEY = keyUserRewardFromDepositNum(userAddressStr)
400402 let depositNumUser = getIntOrElse(userRewardFromDepositNumKEY, -1)
401403 let depositNumLast = getIntOrElse(keyDepositNumLast(), -1)
402404 func forEachAssetCalcUnclaimedReward (accum,asset) = {
403- let $t01635616494 = calcReward(userAddressStr, asset, stakedAmountX, depositNumUser, depositNumLast)
404- let rewardTotal = $t01635616494._1
405- let cached = $t01635616494._2
406- let dynamic = $t01635616494._3
407- let rewardCachedPartKEY = $t01635616494._4
405+ let $t01635816496 = calcReward(userAddressStr, asset, stakedAmountX, depositNumUser, depositNumLast)
406+ let rewardTotal = $t01635816496._1
407+ let cached = $t01635816496._2
408+ let dynamic = $t01635816496._3
409+ let rewardCachedPartKEY = $t01635816496._4
408410 let claimedKEY = keyClaimed(userAddressStr, asset)
409- let $t01655416591 = accum
410- let data = $t01655416591._1
411- let claimedAmtByAsset = $t01655416591._2
411+ let $t01655616593 = accum
412+ let data = $t01655616593._1
413+ let claimedAmtByAsset = $t01655616593._2
412414 let newPart = makeString([asset, toString(rewardTotal)], ":")
413415 let claimedAmtByAssetNew = makeString([claimedAmtByAsset, newPart], "_")
414416 if ((0 >= rewardTotal))
416418 else $Tuple2((((data :+ ScriptTransfer(userAddress, rewardTotal, toAssetVect(asset))) :+ IntegerEntry(claimedKEY, (valueOrElse(getInteger(claimedKEY), 0) + rewardTotal))) :+ IntegerEntry(rewardCachedPartKEY, 0)), claimedAmtByAssetNew)
417419 }
418420
419- let $t01705117165 = {
421+ let $t01705317167 = {
420422 let $l = supportedAssetsList
421423 let $s = size($l)
422424 let $acc0 = $Tuple2(nil, "")
430432
431433 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
432434 }
433- let transfers = $t01705117165._1
434- let claimedAmtByAssetResult = $t01705117165._2
435+ let transfers = $t01705317167._1
436+ let claimedAmtByAssetResult = $t01705317167._2
435437 if ((0 >= size(transfers)))
436438 then throw("nothing to claim")
437439 else ((transfers :+ IntegerEntry(userRewardFromDepositNumKEY, depositNumLast)) :+ ClaimHistoryEntry(userAddress, i.transactionId, drop(claimedAmtByAssetResult, 1)))
461463 }
462464 else {
463465 let userAddress = addressFromStringValue(userAddressStr)
464- let $t01782417929 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, 0))
465- let isNewUser = $t01782417929._1
466- let stakedAmount = $t01782417929._2
467- let stakingStart = $t01782417929._3
466+ let $t01782617931 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, 0))
467+ let isNewUser = $t01782617931._1
468+ let stakedAmount = $t01782617931._2
469+ let stakingStart = $t01782617931._3
468470 let stakedAmountX = toBigInt(stakedAmount)
469471 let userRewardFromDepositNumKEY = keyUserRewardFromDepositNum(userAddressStr)
470472 let depositNumUser = getIntOrElse(userRewardFromDepositNumKEY, -1)
471473 let depositNumLast = getIntOrElse(keyDepositNumLast(), -1)
472474 func forEachAssetCalcUnclaimedReward (accum,asset) = {
473- let $t01827518413 = calcReward(userAddressStr, asset, stakedAmountX, depositNumUser, depositNumLast)
474- let rewardTotal = $t01827518413._1
475- let cached = $t01827518413._2
476- let dynamic = $t01827518413._3
477- let rewardCachedPartKEY = $t01827518413._4
475+ let $t01827718415 = calcReward(userAddressStr, asset, stakedAmountX, depositNumUser, depositNumLast)
476+ let rewardTotal = $t01827718415._1
477+ let cached = $t01827718415._2
478+ let dynamic = $t01827718415._3
479+ let rewardCachedPartKEY = $t01827718415._4
478480 let claimed = valueOrElse(getInteger(keyClaimed(userAddressStr, asset)), 0)
479- ((accum + makeString([asset, toString(rewardTotal), toString(claimed)], ":")) + "_")
481+ ((accum + makeString([asset, "10", "10"], ":")) + "_")
480482 }
481483
482484 let $l = supportedAssetsList
504506 then $Tuple2(nil, [0, totalNsbtAmt, 0])
505507 else {
506508 let userAddress = toAddressOrFail(userAddressStr)
507- let $t01901719121 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, 0))
508- let isNewUser = $t01901719121._1
509- let userNsbtAmt = $t01901719121._2
510- let stakingStart = $t01901719121._3
509+ let $t01898719091 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, 0))
510+ let isNewUser = $t01898719091._1
511+ let userNsbtAmt = $t01898719091._2
512+ let stakingStart = $t01898719091._3
511513 $Tuple2(nil, [userNsbtAmt, totalNsbtAmt, stakingStart])
512514 }
513515 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let revisionNum = ""
5+
46 let separator = "__"
57
68 let MULT6 = 1000000
79
810 let MULT8 = 100000000
911
1012 let MULTX6 = toBigInt(MULT6)
1113
1214 let MULTX8 = toBigInt(MULT8)
1315
1416 let MULTX18 = toBigInt(1000000000000000000)
1517
1618 let WAVESIDSTR = "WAVES"
1719
1820 let WAVESID = fromBase58String(WAVESIDSTR)
1921
2022 func keyBondAsset () = "bond_asset_id"
2123
2224
2325 func keyAuctionContractAddress () = "auction_contract"
2426
2527
2628 func keyNeutrinoContractAddress () = "%s__neutrinoContractAddress"
2729
2830
2931 func keyMathContractAddress () = "%s__mathContract"
3032
3133
3234 func keyMinLockAmount () = "%s__minLockAmount"
3335
3436
3537 func keyHalfLife () = "%s__halfLife"
3638
3739
3840 func keyLockParamUserAmount (userAddress) = makeString(["%s%s%s", "paramByUser", toString(userAddress), "amount"], separator)
3941
4042
4143 func keyLockParamStartBlock (userAddress) = makeString(["%s%s%s", "paramByUser", toString(userAddress), "start"], separator)
4244
4345
4446 func keyHistoryRecord (type,userAddress,txId) = makeString(["%s%s%s%s", "history", type, toString(userAddress), toBase58String(txId)], separator)
4547
4648
4749 func keyLockParamTotalAmount () = makeString(["%s%s", "stats", "activeTotalLocked"], separator)
4850
4951
5052 func keyStatsLocksCount () = makeString(["%s%s", "stats", "locksCount"], separator)
5153
5254
5355 func keyStatsUsersCount () = makeString(["%s%s", "stats", "activeUsersCount"], separator)
5456
5557
5658 func keyNextPeriod () = "%s__nextPeriod"
5759
5860
5961 func keySupportedRewardAssets () = "supportedRewardAssets"
6062
6163
6264 func keyDepositNumLast () = makeString(["%s%s%s", "dep", "lastNum"], separator)
6365
6466
6567 func keyUserRewardFromDepositNum (userAddress) = makeString(["%s%s%s", "userRwdFromDepNum", userAddress], separator)
6668
6769
6870 func keyRewardPerNsbtSumAt (depositNum,tkn) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(depositNum), tkn], separator)
6971
7072
7173 func keyReward (userAddress,tkn) = makeString(["%s%s%s", "rwd", userAddress, tkn], separator)
7274
7375
7476 func keyClaimed (userAddress,tkn) = makeString(["%s%s%s", "clm", userAddress, tkn], separator)
7577
7678
7779 func keyNotDistributedReward (tkn) = makeString(["%s%s", "notDistributed", tkn], separator)
7880
7981
8082 func toX18 (origVal,origMult) = fraction(toBigInt(origVal), MULTX18, origMult)
8183
8284
8385 func getIntOrZero (key) = valueOrElse(getInteger(this, key), 0)
8486
8587
8688 func getIntOrElse (key,defaultVal) = valueOrElse(getInteger(this, key), defaultVal)
8789
8890
8991 func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), (("Mandatory this." + key) + " is not defined"))
9092
9193
9294 func getStrOrElse (key,defaultVal) = valueOrElse(getString(this, key), defaultVal)
9395
9496
9597 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (("Mandatory this." + key) + " is not defined"))
9698
9799
98100 func toAddressOrFail (addressStr) = valueOrErrorMessage(addressFromString(addressStr), ("couldn't parse passed addressStr=" + addressStr))
99101
100102
101103 func toAssetVect (assetStr) = if ((assetStr == WAVESIDSTR))
102104 then unit
103105 else fromBase58String(assetStr)
104106
105107
106108 func asInt (val) = match val {
107109 case valInt: Int =>
108110 valInt
109111 case _ =>
110112 throw("fail to cast into Int")
111113 }
112114
113115
114116 func formatHistoryRecord (oldAmount,oldStart,newAmount,newStart) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(oldAmount), toString(oldStart), toString(newAmount), toString(newStart)], separator)
115117
116118
117119 func formatClaimHistoryRecord (user,claimedRewards) = makeString(["%s%d%d%s", user, toString(lastBlock.height), toString(lastBlock.timestamp), claimedRewards], separator)
118120
119121
120122 func HistoryRecordEntry (type,userAddress,txId,oldAmount,oldStart,newAmount,newStart) = StringEntry(keyHistoryRecord(type, userAddress, txId), formatHistoryRecord(oldAmount, oldStart, newAmount, newStart))
121123
122124
123125 func ClaimHistoryEntry (userAddress,txId,claimedRewards) = StringEntry(keyHistoryRecord("claim", userAddress, txId), formatClaimHistoryRecord(toString(userAddress), claimedRewards))
124126
125127
126128 func StatsResult (totalLockedInc,lockCountInc,usersCountInc) = {
127129 let locksCount = getIntOrZero(keyStatsLocksCount())
128130 let usersCount = getIntOrZero(keyStatsUsersCount())
129131 let totalAmount = getIntOrZero(keyLockParamTotalAmount())
130132 let totalAmountNew = (totalAmount + totalLockedInc)
131133 $Tuple3([IntegerEntry(keyStatsLocksCount(), (locksCount + lockCountInc)), IntegerEntry(keyStatsUsersCount(), (usersCount + usersCountInc)), IntegerEntry(keyLockParamTotalAmount(), totalAmountNew)], totalAmount, totalAmountNew)
132134 }
133135
134136
135137 func LockParamsEntry (userAddress,amount,start) = [IntegerEntry(keyLockParamUserAmount(userAddress), amount), IntegerEntry(keyLockParamStartBlock(userAddress), start)]
136138
137139
138140 func getParamsOrFail () = {
139141 let neutrinoContract = addressFromStringValue(getStringOrFail(keyNeutrinoContractAddress()))
140142 $Tuple4(fromBase58String(getStringValue(neutrinoContract, keyAuctionContractAddress())), fromBase58String(getStringValue(neutrinoContract, keyBondAsset())), getIntOrFail(keyMinLockAmount()), getIntOrFail(keyHalfLife()))
141143 }
142144
143145
144146 func isActiveUser (userAddress) = (getIntOrElse(keyLockParamUserAmount(userAddress), 0) > 0)
145147
146148
147149 func getUserParamsOrUnit (userAddress) = if (isActiveUser(userAddress))
148150 then $Tuple3(false, getIntOrFail(keyLockParamUserAmount(userAddress)), getIntOrFail(keyLockParamStartBlock(userAddress)))
149151 else unit
150152
151153
152154 func getUserParamsOrFail (userAddress) = valueOrErrorMessage(getUserParamsOrUnit(userAddress), (("User " + toString(userAddress)) + " is not defined"))
153155
154156
155157 let supportedAssetsStr = getStrOrElse(keySupportedRewardAssets(), "")
156158
157159 let supportedAssetsList = split(supportedAssetsStr, "_")
158160
159161 func calcReward (userAddress,assetId,stakedAmountX,depositNumUser,depositNumLast) = {
160162 let rewardPerNsbtSumLastKEY = keyRewardPerNsbtSumAt(depositNumLast, assetId)
161163 let sumLastX18 = parseBigIntValue(getStrOrElse(keyRewardPerNsbtSumAt(depositNumLast, assetId), "0"))
162164 let sumUserX18 = parseBigIntValue(getStrOrElse(keyRewardPerNsbtSumAt(depositNumUser, assetId), "0"))
163165 let rewardDynamicPart = toInt(fraction((sumLastX18 - sumUserX18), stakedAmountX, MULTX18))
164166 let rewardCachedPartKEY = keyReward(userAddress, assetId)
165167 let rewardCachedPart = getIntOrElse(rewardCachedPartKEY, 0)
166168 $Tuple4((rewardCachedPart + rewardDynamicPart), rewardCachedPart, rewardDynamicPart, rewardCachedPartKEY)
167169 }
168170
169171
170172 func RewardEntries (isNewUser,userAddress,stakedAmount) = {
171173 let stakedAmountX = toBigInt(stakedAmount)
172174 let userRewardFromDepositNumKEY = keyUserRewardFromDepositNum(userAddress)
173175 let depositNumUser = getIntOrElse(userRewardFromDepositNumKEY, -1)
174176 let depositNumLast = getIntOrElse(keyDepositNumLast(), -1)
175177 func forEachAssetCacheUserReward (accum,asset) = {
176- let $t073597494 = calcReward(userAddress, asset, stakedAmountX, depositNumUser, depositNumLast)
177- let rewardTotal = $t073597494._1
178- let cached = $t073597494._2
179- let dynamic = $t073597494._3
180- let rewardCachedPartKEY = $t073597494._4
178+ let $t073617496 = calcReward(userAddress, asset, stakedAmountX, depositNumUser, depositNumLast)
179+ let rewardTotal = $t073617496._1
180+ let cached = $t073617496._2
181+ let dynamic = $t073617496._3
182+ let rewardCachedPartKEY = $t073617496._4
181183 (accum :+ IntegerEntry(rewardCachedPartKEY, rewardTotal))
182184 }
183185
184186 if (if ((depositNumLast == -1))
185187 then (depositNumUser == -1)
186188 else false)
187189 then nil
188190 else if (if ((depositNumLast == -1))
189191 then (depositNumUser > -1)
190192 else false)
191193 then throw("invalid depositNumLast and depositNumUser state")
192194 else if (if ((depositNumLast > -1))
193195 then (depositNumUser == -1)
194196 else false)
195197 then if (isNewUser)
196198 then [IntegerEntry(userRewardFromDepositNumKEY, depositNumLast)]
197199 else ({
198200 let $l = supportedAssetsList
199201 let $s = size($l)
200202 let $acc0 = nil
201203 func $f0_1 ($a,$i) = if (($i >= $s))
202204 then $a
203205 else forEachAssetCacheUserReward($a, $l[$i])
204206
205207 func $f0_2 ($a,$i) = if (($i >= $s))
206208 then $a
207209 else throw("List size exceeds 10")
208210
209211 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
210212 } :+ IntegerEntry(userRewardFromDepositNumKEY, depositNumLast))
211213 else if (if ((depositNumLast > -1))
212214 then (depositNumUser > -1)
213215 else false)
214216 then if (isNewUser)
215217 then [IntegerEntry(userRewardFromDepositNumKEY, depositNumLast)]
216218 else ({
217219 let $l = supportedAssetsList
218220 let $s = size($l)
219221 let $acc0 = nil
220222 func $f0_1 ($a,$i) = if (($i >= $s))
221223 then $a
222224 else forEachAssetCacheUserReward($a, $l[$i])
223225
224226 func $f0_2 ($a,$i) = if (($i >= $s))
225227 then $a
226228 else throw("List size exceeds 10")
227229
228230 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
229231 } :+ IntegerEntry(userRewardFromDepositNumKEY, depositNumLast))
230232 else throw(((("uncovered condition: depositNumLast=" + toString(depositNumLast)) + " depositNumUser=") + toString(depositNumUser)))
231233 }
232234
233235
234236 func IncrementNotDistributedRewardEntry (tkn,amountInc) = {
235237 let notDistributedRewardKEY = keyNotDistributedReward(tkn)
236238 let notDistributedReward = getIntOrElse(notDistributedRewardKEY, 0)
237239 [IntegerEntry(notDistributedRewardKEY, (notDistributedReward + amountInc))]
238240 }
239241
240242
241243 @Callable(i)
242244 func constructor (neutrinoContractAddress,mathContractAddress,minLockAmount,halfLife,supportedRewardAssets) = if ((i.caller != this))
243245 then throw("Permission denied")
244246 else [StringEntry(keyNeutrinoContractAddress(), neutrinoContractAddress), StringEntry(keyMathContractAddress(), mathContractAddress), IntegerEntry(keyMinLockAmount(), minLockAmount), IntegerEntry(keyHalfLife(), halfLife), StringEntry(keySupportedRewardAssets(), supportedRewardAssets)]
245247
246248
247249
248250 @Callable(i)
249251 func stake () = {
250- let $t01114811227 = getParamsOrFail()
251- let auctionContract = $t01114811227._1
252- let bondAssetId = $t01114811227._2
253- let minLockAmount = $t01114811227._3
254- let halfLife = $t01114811227._4
252+ let $t01115011229 = getParamsOrFail()
253+ let auctionContract = $t01115011229._1
254+ let bondAssetId = $t01115011229._2
255+ let minLockAmount = $t01115011229._3
256+ let halfLife = $t01115011229._4
255257 if ((size(i.payments) != 1))
256258 then throw("Invalid payments size")
257259 else {
258260 let payment = i.payments[0]
259261 let amount = payment.amount
260262 let invalidAssetMessage = (("Invalid asset. " + toBase58String(bondAssetId)) + " is expected")
261263 let assetId = valueOrErrorMessage(payment.assetId, invalidAssetMessage)
262264 if ((assetId != bondAssetId))
263265 then throw(invalidAssetMessage)
264266 else {
265267 let userAddress = i.caller
266268 let userAddressStr = toString(i.caller)
267- let $t01176911876 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, -1))
268- let isNewUser = $t01176911876._1
269- let lockAmount = $t01176911876._2
270- let lockStartHeight = $t01176911876._3
269+ let $t01177111878 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, -1))
270+ let isNewUser = $t01177111878._1
271+ let lockAmount = $t01177111878._2
272+ let lockStartHeight = $t01177111878._3
271273 let mergedAmount = if (isNewUser)
272274 then amount
273275 else (amount + lockAmount)
274276 let mergedStartHeight = if (isNewUser)
275277 then height
276278 else {
277279 let mathContract = addressFromStringValue(getStringOrFail(keyMathContractAddress()))
278280 asInt(invoke(mathContract, "mergeStakesREADONLY", [amount, height, lockAmount, lockStartHeight, halfLife], nil))
279281 }
280282 if ((minLockAmount > mergedAmount))
281283 then throw(("Min lock amount is " + toString(minLockAmount)))
282284 else {
283- let $t01232612428 = StatsResult(amount, 1, if (isNewUser)
285+ let $t01232812430 = StatsResult(amount, 1, if (isNewUser)
284286 then 1
285287 else 0)
286- let statsEntries = $t01232612428._1
287- let totalStaked = $t01232612428._2
288- let totalStakedNew = $t01232612428._3
288+ let statsEntries = $t01232812430._1
289+ let totalStaked = $t01232812430._2
290+ let totalStakedNew = $t01232812430._3
289291 ((([HistoryRecordEntry("stake", userAddress, i.transactionId, lockAmount, lockStartHeight, mergedAmount, mergedStartHeight)] ++ RewardEntries(isNewUser, userAddressStr, lockAmount)) ++ LockParamsEntry(userAddress, mergedAmount, mergedStartHeight)) ++ statsEntries)
290292 }
291293 }
292294 }
293295 }
294296
295297
296298
297299 @Callable(i)
298300 func unstake (amount) = if ((size(i.payments) != 0))
299301 then throw("unstake doesn't require any payment")
300302 else {
301303 let userAddress = i.caller
302304 let userAddressStr = toString(userAddress)
303- let $t01291412992 = getParamsOrFail()
304- let auctionAddress = $t01291412992._1
305- let bondAssetId = $t01291412992._2
306- let minLockAmount = $t01291412992._3
307- let halfLife = $t01291412992._4
308- let $t01299513069 = getUserParamsOrFail(userAddress)
309- let isNewUser = $t01299513069._1
310- let lockAmount = $t01299513069._2
311- let lockStart = $t01299513069._3
305+ let $t01291612994 = getParamsOrFail()
306+ let auctionAddress = $t01291612994._1
307+ let bondAssetId = $t01291612994._2
308+ let minLockAmount = $t01291612994._3
309+ let halfLife = $t01291612994._4
310+ let $t01299713071 = getUserParamsOrFail(userAddress)
311+ let isNewUser = $t01299713071._1
312+ let lockAmount = $t01299713071._2
313+ let lockStart = $t01299713071._3
312314 if ((0 >= lockAmount))
313315 then throw("Nothing to unstake")
314316 else if ((amount > lockAmount))
315317 then throw(((("Requested " + toString(amount)) + ", but staked only ") + toString(lockAmount)))
316318 else {
317319 let mathContract = addressFromStringValue(getStringOrFail(keyMathContractAddress()))
318320 let comissionAmount = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, lockStart, halfLife], nil))
319- let $t01347013624 = StatsResult(-(amount), if ((amount == lockAmount))
321+ let $t01347213626 = StatsResult(-(amount), if ((amount == lockAmount))
320322 then -1
321323 else 0, if ((amount == lockAmount))
322324 then -1
323325 else 0)
324- let statsEntries = $t01347013624._1
325- let totalStaked = $t01347013624._2
326- let totalStakedNew = $t01347013624._3
326+ let statsEntries = $t01347213626._1
327+ let totalStaked = $t01347213626._2
328+ let totalStakedNew = $t01347213626._3
327329 ((([ScriptTransfer(userAddress, (amount - comissionAmount), bondAssetId), ScriptTransfer(Address(auctionAddress), comissionAmount, bondAssetId), HistoryRecordEntry("unstake", userAddress, i.transactionId, lockAmount, lockStart, (lockAmount - amount), lockStart)] ++ RewardEntries(false, userAddressStr, lockAmount)) ++ LockParamsEntry(userAddress, (lockAmount - amount), lockStart)) ++ statsEntries)
328330 }
329331 }
330332
331333
332334
333335 @Callable(i)
334336 func deposit () = if ((size(i.payments) != 1))
335337 then throw("exact 1 payment is allowed only")
336338 else {
337339 let pmt = i.payments[0]
338340 let amount = pmt.amount
339341 let pmtAssetId = valueOrElse(pmt.assetId, WAVESID)
340342 let pmtAssetIdStr = toBase58String(pmtAssetId)
341343 let pmtMultX = if ((pmtAssetId == WAVESID))
342344 then MULTX8
343345 else MULTX6
344346 let amountX = toBigInt(amount)
345347 let totalStaked = getIntOrElse(keyLockParamTotalAmount(), 0)
346348 let totalStakedX = toBigInt(totalStaked)
347349 if ((0 > totalStaked))
348350 then throw("TODO: case is not supported")
349351 else if ((totalStaked == 0))
350352 then IncrementNotDistributedRewardEntry(pmtAssetIdStr, amount)
351353 else {
352354 let rewardPerNsbtX18 = fraction(amountX, MULTX18, totalStakedX)
353355 let depositNumLastKEY = keyDepositNumLast()
354356 let depositNumLast = getIntOrElse(depositNumLastKEY, -1)
355357 let depositNumNew = (depositNumLast + 1)
356358 if (!(contains(supportedAssetsStr, pmtAssetIdStr)))
357359 then throw(((supportedAssetsStr + " doesn't contain ") + pmtAssetIdStr))
358360 else {
359361 func refreshRewardPerNsbtSUM (accum,nextAsset) = {
360362 let rewardPerNsbtSumNewKEY = keyRewardPerNsbtSumAt(depositNumNew, nextAsset)
361363 let sumLastStr = getStrOrElse(keyRewardPerNsbtSumAt(depositNumLast, nextAsset), "0")
362364 (accum :+ (if ((nextAsset == pmtAssetIdStr))
363365 then StringEntry(rewardPerNsbtSumNewKEY, toString((parseBigIntValue(sumLastStr) + rewardPerNsbtX18)))
364366 else StringEntry(rewardPerNsbtSumNewKEY, sumLastStr)))
365367 }
366368
367369 ({
368370 let $l = supportedAssetsList
369371 let $s = size($l)
370372 let $acc0 = nil
371373 func $f0_1 ($a,$i) = if (($i >= $s))
372374 then $a
373375 else refreshRewardPerNsbtSUM($a, $l[$i])
374376
375377 func $f0_2 ($a,$i) = if (($i >= $s))
376378 then $a
377379 else throw("List size exceeds 10")
378380
379381 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
380382 } :+ IntegerEntry(depositNumLastKEY, depositNumNew))
381383 }
382384 }
383385 }
384386
385387
386388
387389 @Callable(i)
388390 func claimRewards () = {
389391 let userAddress = i.caller
390392 let userAddressStr = toString(userAddress)
391393 if ((size(i.payments) > 0))
392394 then throw("payments are not accepted")
393395 else {
394- let $t01588015985 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, 0))
395- let isNewUser = $t01588015985._1
396- let stakedAmount = $t01588015985._2
397- let stakingStart = $t01588015985._3
396+ let $t01588215987 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, 0))
397+ let isNewUser = $t01588215987._1
398+ let stakedAmount = $t01588215987._2
399+ let stakingStart = $t01588215987._3
398400 let stakedAmountX = toBigInt(stakedAmount)
399401 let userRewardFromDepositNumKEY = keyUserRewardFromDepositNum(userAddressStr)
400402 let depositNumUser = getIntOrElse(userRewardFromDepositNumKEY, -1)
401403 let depositNumLast = getIntOrElse(keyDepositNumLast(), -1)
402404 func forEachAssetCalcUnclaimedReward (accum,asset) = {
403- let $t01635616494 = calcReward(userAddressStr, asset, stakedAmountX, depositNumUser, depositNumLast)
404- let rewardTotal = $t01635616494._1
405- let cached = $t01635616494._2
406- let dynamic = $t01635616494._3
407- let rewardCachedPartKEY = $t01635616494._4
405+ let $t01635816496 = calcReward(userAddressStr, asset, stakedAmountX, depositNumUser, depositNumLast)
406+ let rewardTotal = $t01635816496._1
407+ let cached = $t01635816496._2
408+ let dynamic = $t01635816496._3
409+ let rewardCachedPartKEY = $t01635816496._4
408410 let claimedKEY = keyClaimed(userAddressStr, asset)
409- let $t01655416591 = accum
410- let data = $t01655416591._1
411- let claimedAmtByAsset = $t01655416591._2
411+ let $t01655616593 = accum
412+ let data = $t01655616593._1
413+ let claimedAmtByAsset = $t01655616593._2
412414 let newPart = makeString([asset, toString(rewardTotal)], ":")
413415 let claimedAmtByAssetNew = makeString([claimedAmtByAsset, newPart], "_")
414416 if ((0 >= rewardTotal))
415417 then $Tuple2(data, claimedAmtByAssetNew)
416418 else $Tuple2((((data :+ ScriptTransfer(userAddress, rewardTotal, toAssetVect(asset))) :+ IntegerEntry(claimedKEY, (valueOrElse(getInteger(claimedKEY), 0) + rewardTotal))) :+ IntegerEntry(rewardCachedPartKEY, 0)), claimedAmtByAssetNew)
417419 }
418420
419- let $t01705117165 = {
421+ let $t01705317167 = {
420422 let $l = supportedAssetsList
421423 let $s = size($l)
422424 let $acc0 = $Tuple2(nil, "")
423425 func $f0_1 ($a,$i) = if (($i >= $s))
424426 then $a
425427 else forEachAssetCalcUnclaimedReward($a, $l[$i])
426428
427429 func $f0_2 ($a,$i) = if (($i >= $s))
428430 then $a
429431 else throw("List size exceeds 10")
430432
431433 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
432434 }
433- let transfers = $t01705117165._1
434- let claimedAmtByAssetResult = $t01705117165._2
435+ let transfers = $t01705317167._1
436+ let claimedAmtByAssetResult = $t01705317167._2
435437 if ((0 >= size(transfers)))
436438 then throw("nothing to claim")
437439 else ((transfers :+ IntegerEntry(userRewardFromDepositNumKEY, depositNumLast)) :+ ClaimHistoryEntry(userAddress, i.transactionId, drop(claimedAmtByAssetResult, 1)))
438440 }
439441 }
440442
441443
442444
443445 @Callable(i)
444446 func unclaimedRewardsREADONLY (userAddressStr) = {
445447 func forEachAssetZeroReward (accum,asset) = ((accum + makeString([asset, "0", "0"], ":")) + "_")
446448
447449 let unclaimedRewardStr = if ((userAddressStr == ""))
448450 then {
449451 let $l = supportedAssetsList
450452 let $s = size($l)
451453 let $acc0 = ""
452454 func $f0_1 ($a,$i) = if (($i >= $s))
453455 then $a
454456 else forEachAssetZeroReward($a, $l[$i])
455457
456458 func $f0_2 ($a,$i) = if (($i >= $s))
457459 then $a
458460 else throw("List size exceeds 10")
459461
460462 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
461463 }
462464 else {
463465 let userAddress = addressFromStringValue(userAddressStr)
464- let $t01782417929 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, 0))
465- let isNewUser = $t01782417929._1
466- let stakedAmount = $t01782417929._2
467- let stakingStart = $t01782417929._3
466+ let $t01782617931 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, 0))
467+ let isNewUser = $t01782617931._1
468+ let stakedAmount = $t01782617931._2
469+ let stakingStart = $t01782617931._3
468470 let stakedAmountX = toBigInt(stakedAmount)
469471 let userRewardFromDepositNumKEY = keyUserRewardFromDepositNum(userAddressStr)
470472 let depositNumUser = getIntOrElse(userRewardFromDepositNumKEY, -1)
471473 let depositNumLast = getIntOrElse(keyDepositNumLast(), -1)
472474 func forEachAssetCalcUnclaimedReward (accum,asset) = {
473- let $t01827518413 = calcReward(userAddressStr, asset, stakedAmountX, depositNumUser, depositNumLast)
474- let rewardTotal = $t01827518413._1
475- let cached = $t01827518413._2
476- let dynamic = $t01827518413._3
477- let rewardCachedPartKEY = $t01827518413._4
475+ let $t01827718415 = calcReward(userAddressStr, asset, stakedAmountX, depositNumUser, depositNumLast)
476+ let rewardTotal = $t01827718415._1
477+ let cached = $t01827718415._2
478+ let dynamic = $t01827718415._3
479+ let rewardCachedPartKEY = $t01827718415._4
478480 let claimed = valueOrElse(getInteger(keyClaimed(userAddressStr, asset)), 0)
479- ((accum + makeString([asset, toString(rewardTotal), toString(claimed)], ":")) + "_")
481+ ((accum + makeString([asset, "10", "10"], ":")) + "_")
480482 }
481483
482484 let $l = supportedAssetsList
483485 let $s = size($l)
484486 let $acc0 = ""
485487 func $f0_1 ($a,$i) = if (($i >= $s))
486488 then $a
487489 else forEachAssetCalcUnclaimedReward($a, $l[$i])
488490
489491 func $f0_2 ($a,$i) = if (($i >= $s))
490492 then $a
491493 else throw("List size exceeds 10")
492494
493495 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
494496 }
495497 $Tuple2(nil, dropRight(unclaimedRewardStr, 1))
496498 }
497499
498500
499501
500502 @Callable(i)
501503 func nsbtStakingSYSREADONLY (userAddressStr) = {
502504 let totalNsbtAmt = getIntOrElse(keyLockParamTotalAmount(), 0)
503505 if ((userAddressStr == ""))
504506 then $Tuple2(nil, [0, totalNsbtAmt, 0])
505507 else {
506508 let userAddress = toAddressOrFail(userAddressStr)
507- let $t01901719121 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, 0))
508- let isNewUser = $t01901719121._1
509- let userNsbtAmt = $t01901719121._2
510- let stakingStart = $t01901719121._3
509+ let $t01898719091 = valueOrElse(getUserParamsOrUnit(userAddress), $Tuple3(true, 0, 0))
510+ let isNewUser = $t01898719091._1
511+ let userNsbtAmt = $t01898719091._2
512+ let stakingStart = $t01898719091._3
511513 $Tuple2(nil, [userNsbtAmt, totalNsbtAmt, stakingStart])
512514 }
513515 }
514516
515517

github/deemru/w8io/873ac7e 
92.43 ms