{"id":304413,"date":"2020-05-28T15:00:30","date_gmt":"2020-05-28T15:00:30","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=304413"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=304413","title":{"rendered":"\u041a\u043e\u0434 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 Nethermind \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PVS-Studio C# \u0434\u043b\u044f Linux"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/504320\/\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b64\/5fc\/72d\/b645fc72ddcded21612bdc5e9fac2c78.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1\"><\/div>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0438\u0443\u0440\u043e\u0447\u0435\u043d\u0430 \u043a \u0441\u0442\u0430\u0440\u0442\u0443 \u0431\u0435\u0442\u0430-\u0442\u0435\u0441\u0442\u0430 PVS-Studio C# \u0434\u043b\u044f Linux, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f Rider. \u041f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u043c\u0443 \u043f\u043e\u0432\u043e\u0434\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 Nethermind \u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438.<br \/>  <a name=\"habracut\"><\/a><br \/>  <a href=\"https:\/\/nethermind.io\/\">Nethermind<\/a> \u2014 \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f .NET Core Ethereum \u0434\u043b\u044f Linux, Windows, MacOs. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0447\u0430\u0441\u0442\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 Ethereum \u0438\u043b\u0438 dApps. Nethermind \u0438\u043c\u0435\u0435\u0442 <a href=\"https:\/\/github.com\/NethermindEth\/nethermind\">\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/a> \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 GitHub. \u041f\u0440\u043e\u0435\u043a\u0442 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u0432 2017 \u0433\u043e\u0434\u0443 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041b\u044e\u0431\u0438\u0442\u0435 \u043b\u0438 \u0432\u044b \u0440\u0443\u0447\u043d\u043e\u0439 \u0442\u0440\u0443\u0434? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a \u043f\u043e\u0438\u0441\u043a \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u043c\u0438 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u0438\u043b\u0438 \u0446\u0435\u043b\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u043a\u0430\u0432\u0435\u0440\u0437\u043d\u043e\u0433\u043e \u0431\u0430\u0433\u0430. \u041b\u0430\u0434\u043d\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u043d\u0443 \u0441\u043a\u0430\u0436\u0435\u043c 5000 \u0441\u0442\u0440\u043e\u0447\u0435\u043a, \u0430 \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0432\u0430\u043b\u0438\u043b \u0437\u0430 \u0441\u0442\u043e \u0442\u044b\u0441\u044f\u0447 \u0438\u043b\u0438 \u0437\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0441\u0442\u0440\u043e\u043a? \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043e\u043d \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c\u0438 \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043e\u0432\u0430\u0440\u0438\u043c\u043e\u043c \u0432\u0438\u0434\u0435. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435? \u041d\u0435\u0443\u0436\u0435\u043b\u0438 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u043d\u0435\u0434\u043e\u0441\u043f\u0430\u0442\u044c, \u0433\u0434\u0435-\u0442\u043e \u043d\u0435\u0434\u043e\u0435\u0441\u0442\u044c \u0438 100% \u0441\u0432\u043e\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0441\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 \u043d\u0435\u0441\u043a\u043e\u043d\u0447\u0430\u0435\u043c\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0433\u0434\u0435 \u0436\u0435 \u044d\u0442\u0430 \u043c\u0435\u0440\u0437\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430? \u0421\u043e\u043c\u043d\u0435\u0432\u0430\u044e\u0441\u044c, \u0447\u0442\u043e \u0432\u0430\u043c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c. \u0422\u0430\u043a \u0447\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u0442\u044c, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u043a\u0430\u043a-\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c?<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/34f\/9eb\/338\/34f9eb3387d61eb4ebfa67f0dbccbef7.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3\"><\/div>\n<p>  \u0418 \u0442\u0443\u0442 \u0432\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u0438\u0433\u0440\u0443 \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430. \u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u2013 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0435\u0444\u0435\u043a\u0442\u043e\u0432 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u0434 \u0440\u0443\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c:<\/p>\n<ul>\n<li>\u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442 \u0432\u0430\u0448\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u043c\u0435\u0441\u0442\u0430 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438 (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u044d\u0442\u043e \u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0439 copy-paste \u0433\u043b\u0430\u0437\u0430\u043c\u0438);<\/li>\n<li>\u043d\u0435 \u0443\u0441\u0442\u0430\u0435\u0442, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u044b\u0445;<\/li>\n<li>\u0437\u043d\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043e\u0448\u0438\u0431\u043e\u043a, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0436\u0435 \u0438 \u043d\u0435 \u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f; <\/li>\n<li>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043a\u0430\u043a: \u0430\u043d\u0430\u043b\u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435;<\/li>\n<li>\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0438 \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437;<\/li>\n<li>\u0438 \u0442.\u0434.<\/li>\n<\/ul>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u0434\u0430 \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0438 \u043d\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u0431\u0437\u043e\u0440\u044b \u043a\u043e\u0434\u0430. \u0417\u0430\u0442\u043e \u043e\u0431\u0437\u043e\u0440\u044b \u043a\u043e\u0434\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438. \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043e\u0438\u0441\u043a\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0437\u043d\u0430\u043d\u0438\u0439, \u0430 \u043d\u0435 \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0441\u0442\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c, \u0442\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e <a href=\"https:\/\/www.viva64.com\/ru\/t\/0046\/\">\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e<\/a>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u0430\u0442\u044c\u044e \u043e <a href=\"https:\/\/www.viva64.com\/ru\/b\/0592\/\">\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0445<\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0432 PVS-Studio.<\/p>\n<h2>PVS-Studio C# \u0434\u043b\u044f Linux\/macOS<\/h2>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e C# \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u0434 .NET Core, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0434\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f IDE Rider.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0431\u0435\u0442\u0430-\u0442\u0435\u0441\u0442 \u043c\u043e\u0436\u043d\u043e, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0432 \u0444\u043e\u0440\u043c\u0443 <a href=\"https:\/\/www.viva64.com\/ru\/pvs-studio-eap\/\">\u043d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/a>. \u041d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u0432\u0430\u043c\u0438 \u043f\u043e\u0447\u0442\u0443 \u043f\u0440\u0438\u0434\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 (\u043d\u0435 \u043f\u0443\u0433\u0430\u0439\u0442\u0435\u0441\u044c, \u043e\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430.<\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 Rider \u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c PVS-Studio:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/rp\/p6\/f_\/rpp6f_9oohudg2ov2jt-hdu0yg0.png\" alt=\"Picture 4\"><\/div>\n<h2>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435\u0433\u043e\u0434\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>  \u0425\u043e\u0447\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0431\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 Nethermind, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043d\u0435\u043c \u0432\u043f\u043e\u043b\u043d\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0434\u043b\u0438\u043d\u043e\u0439 \u043f\u043e 300-500 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u0414\u0430-\u0434\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0431\u0435\u0437 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 1 \u0441\u0442\u0440\u043e\u043a\u0443. \u0418 \u0432 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0440\u043d\u0430\u0440\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0438 \u0447\u0442\u043e \u0442\u0430\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0442. \u0412 \u043e\u0431\u0449\u0435\u043c \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435 \u043a\u0430\u043a \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u0435\u0437\u043e\u043d\u0430 \u0438\u0433\u0440\u044b \u043f\u0440\u0435\u0441\u0442\u043e\u043b\u043e\u0432.<\/p>\n<p>  \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u044f\u0441\u043d\u044e \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043e\u0432. \u0423 \u043c\u0435\u043d\u044f UltraWide \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u043e\u043a\u043e\u043b\u043e 82 \u0441\u0430\u043d\u0442\u0438\u043c\u0435\u0442\u0440\u043e\u0432. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u044f \u043d\u0430 \u043d\u0435\u043c IDE \u043d\u0430 \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d, \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u043a\u043e\u043b\u043e 340 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u0433\u043e\u0432\u043e\u0440\u044e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u044e\u0442. \u0415\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442, \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0441\u0441\u044b\u043b\u043a\u0438 \u0444\u0430\u0439\u043b\u044b \u043d\u0430 GitHub:<\/p>\n<p>  <b>\u041f\u0440\u0438\u043c\u0435\u0440 1<\/b>  <\/p>\n<pre><code class=\"cs\">private void LogBlockAuthorNicely(Block block, ISyncPeer syncPeer) {     string authorString = (block.Author == null ? null : &quot;sealed by &quot; + (KnownAddresses.GoerliValidators.ContainsKey(block.Author) ? KnownAddresses.GoerliValidators[block.Author] : block.Author?.ToString())) ?? (block.Beneficiary == null ? string.Empty : &quot;mined by &quot; + (KnownAddresses.KnownMiners.ContainsKey(block.Beneficiary) ? KnownAddresses.KnownMiners[block.Beneficiary] : block.Beneficiary?.ToString()));     if (_logger.IsInfo)     {         if (_logger.IsInfo) _logger.Info($&quot;Discovered a new block {string.Empty.PadLeft(9 - block.Number.ToString().Length, ' ')}{block.ToString(Block.Format.HashNumberAndTx)} {authorString}, sent by {syncPeer:s}&quot;);     } }<\/code><\/pre>\n<p>  <a href=\"https:\/\/github.com\/NethermindEth\/nethermind\/blob\/master\/src\/Nethermind\/Nethermind.Synchronization\/SyncServer.cs\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0444\u0430\u0439\u043b<\/a>.<\/p>\n<p>  <b>\u041f\u0440\u0438\u043c\u0435\u0440 2<\/b>  <\/p>\n<pre><code class=\"cs\">private void BuildTransitions() {     ...     releaseSpec.IsEip1283Enabled = (_chainSpec.Parameters.Eip1283Transition ?? long.MaxValue) &lt;= releaseStartBlock &amp;&amp; ((_chainSpec.Parameters.Eip1283DisableTransition ?? long.MaxValue)  &gt; releaseStartBlock || (_chainSpec.Parameters.Eip1283ReenableTransition ?? long.MaxValue) &lt;= releaseStartBlock);                ... }<\/code><\/pre>\n<p>  <a href=\"https:\/\/github.com\/NethermindEth\/nethermind\/blob\/master\/src\/Nethermind\/Nethermind.Specs\/ChainSpecStyle\/ChainSpecBasedSpecProvider.cs\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0444\u0430\u0439\u043b<\/a>.  <\/p>\n<pre><code class=\"cs\">public void  Will_not_reject_block_with_bad_total_diff_but_will_reset_diff_to_null() {     ...     _syncServer = new SyncServer(new StateDb(), new StateDb(), localBlockTree, NullReceiptStorage.Instance, new BlockValidator(Always.Valid, new HeaderValidator(localBlockTree, Always.Valid, MainnetSpecProvider.Instance, LimboLogs.Instance), Always.Valid, MainnetSpecProvider.Instance,  LimboLogs.Instance), Always.Valid, _peerPool, StaticSelector.Full,  new SyncConfig(), LimboLogs.Instance);     ...      }<\/code><\/pre>\n<p>  <a href=\"https:\/\/github.com\/NethermindEth\/nethermind\/blob\/master\/src\/Nethermind\/Nethermind.Synchronization.Test\/SyncServerTests.cs\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0444\u0430\u0439\u043b<\/a>.<\/p>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u043a\u0435 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0435\u0435 \u0438\u0441\u043a\u0430\u0442\u044c? \u0423\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u043d\u0435\u0442, \u0438 \u0432\u0441\u0435 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442, \u0447\u0442\u043e \u0442\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f. \u0418 \u043a\u0441\u0442\u0430\u0442\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u0442\u044c.<\/p>\n<h2>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/h2>\n<p>  <\/p>\n<h3>\u0423\u0441\u043b\u043e\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043b\u044e\u0431\u044f\u0442 0<\/h3>\n<p>  <b>\u0423\u0441\u043b\u043e\u0432\u0438\u0435 1<\/b>  <\/p>\n<pre><code class=\"cs\">public ReceiptsMessage Deserialize(byte[] bytes) {     if (bytes.Length == 0 &amp;&amp; bytes[0] == Rlp.OfEmptySequence[0])         return new ReceiptsMessage(null);     ... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3106\/\">V3106<\/a> Possibly index is out of bound. The &#8216;0&#8217; index is pointing beyond &#8216;bytes&#8217; bound. Nethermind.Network ReceiptsMessageSerializer.cs 50<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u0447\u0438\u0441\u043b\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e 0. \u0422\u043e\u0433\u0434\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 <i>bytes.Length == 0<\/i> \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u043c \u0438 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a 0 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>IndexOutOfRangeException<\/i>. <\/p>\n<p>  \u0418\u0437 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0445\u043e\u0442\u0435\u043b\u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443, \u0435\u0441\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0443\u0441\u0442\u043e\u0439 \u0438\u043b\u0438 0 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0440\u0430\u0432\u0435\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e, \u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043b\u0438 &quot;||&quot; \u0441 &quot;&amp;&amp;&quot;. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"cs\">public ReceiptsMessage Deserialize(byte[] bytes) {     if (bytes.Length == 0 || bytes[0] == Rlp.OfEmptySequence[0])         return new ReceiptsMessage(null);     ... }<\/code><\/pre>\n<p>  <b>\u0423\u0441\u043b\u043e\u0432\u0438\u0435 2<\/b>  <\/p>\n<pre><code class=\"cs\">public void DiscoverAll() {     ...     Type? GetStepType(Type[] typesInGroup)     {         Type? GetStepTypeRecursive(Type? contextType)         {             ...         }         ...         return typesInGroup.Length == 0 ? typesInGroup[0] :                GetStepTypeRecursive(_context.GetType());     }     ... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3106\/\">V3106<\/a> Possibly index is out of bound. The &#8216;0&#8217; index is pointing beyond &#8216;typesInGroup&#8217; bound. Nethermind.Runner EthereumStepsManager.cs 70<\/p>\n<p>  \u041f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0442\u043e\u0439, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432\u044b\u0448\u0435. \u0415\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 <i>typesInGroup<\/i> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e 0, \u0442\u043e \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a 0 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>IndexOutOfRangeException<\/i>. <\/p>\n<p>  \u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0447\u0442\u043e \u0445\u043e\u0442\u0435\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u043c\u0435\u0441\u0442\u043e <i>typesInGroup[0]<\/i> \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <i>null<\/i>.<\/p>\n<h3>\u041e\u0448\u0438\u0431\u043a\u0430 \u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f?<\/h3>\n<p>  <\/p>\n<pre><code class=\"cs\">private void DeleteBlocks(Keccak deletePointer) {    ...    if (currentLevel.BlockInfos.Length == 1)    {       shouldRemoveLevel = true;    }    else    {       for (int i = 0; i &lt; currentLevel.BlockInfos.Length; i++)       {          if (currentLevel.BlockInfos[0].BlockHash == currentHash) \/\/ &lt;=          {             currentLevel.BlockInfos = currentLevel.BlockInfos                                       .Where(bi =&gt; bi.BlockHash != currentHash)                                       .ToArray();             break;          }       }    }    ... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3102\/\">V3102<\/a> Suspicious access to element of &#8216;currentLevel.BlockInfos&#8217; object by a constant index inside a loop. Nethermind.Blockchain BlockTree.cs 895<\/p>\n<p>  \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043e\u0448\u0438\u0431\u043a\u0430 \u044f\u0432\u043d\u0430\u044f \u2013 \u0446\u0438\u043a\u043b \u043d\u0430\u0446\u0435\u043b\u0435\u043d \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 <i>currentLevel.BlockInfos<\/i>, \u043d\u043e \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e <i>currentLevel.BlockInfos[i]<\/i> \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 <i>currentLevel.BlockInfos[0]<\/i>. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c 0 \u043d\u0430 <i>i<\/i> \u0438 \u043c\u0438\u0441\u0441\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430. \u041d\u043e \u043d\u0435 \u0441\u043f\u0435\u0448\u0438\u0442\u0435, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f.<\/p>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b <i>Length<\/i> \u0440\u0430\u0437 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a <i>BlockHash <\/i> \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. E\u0441\u043b\u0438 \u043e\u043d \u0440\u0430\u0432\u0435\u043d <i>currentHash<\/i>, \u0442\u043e \u0431\u0435\u0440\u0435\u043c \u0438\u0437 <i>currentLevel.BlockInfos<\/i> \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0440\u0430\u0432\u043d\u044b <i>currentHash<\/i>, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u043d\u0435\u0433\u043e \u0436\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0446\u0438\u043a\u043b\u0430. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0446\u0438\u043a\u043b \u043b\u0438\u0448\u043d\u0438\u0439. <\/p>\n<p>  \u042f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u0442\u0443\u0442 \u0431\u044b\u043b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\/\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <i>linq<\/i>, \u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a. \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043b\u043e\u0436\u043d\u043e, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438. <\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u043b\u0438 \u0431\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u043e \u043f\u0438\u0441\u0430\u043b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0440\u0435\u0436\u0438\u043c <a href=\"https:\/\/www.viva64.com\/ru\/m\/0024\/\">\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430<\/a>, \u0442\u043e \u043e\u043d \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u0432\u0441\u0435 \u0431\u044b \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043b. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0431\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u0434 \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cs\">private void DeleteBlocks(Keccak deletePointer) {     ...     if (currentLevel.BlockInfos.Length == 1)     {         shouldRemoveLevel = true;     }     else     {         currentLevel.BlockInfos = currentLevel.BlockInfos                                   .Where(bi =&gt; bi.BlockHash != currentHash)                                   .ToArray();     }     ... }<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0420\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438<\/h3>\n<p>  <b>\u0420\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 1<\/b>  <\/p>\n<pre><code class=\"cs\">public void Sign(Transaction tx, int chainId) {     if (_logger.IsDebug)         _logger?.Debug($&quot;Signing transaction: {tx.Value} to {tx.To}&quot;);     IBasicWallet.Sign(this, tx, chainId); }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3095\/\">V3095<\/a> The &#8216;_logger&#8217; object was used before it was verified against null. Check lines: 118, 118. Nethermind.Wallet DevKeyStoreWallet.cs 118<\/p>\n<p>  \u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a <i>_logger.IsDebug<\/i> \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 <i>_logger<\/i> \u043d\u0430 <i>null<\/i>. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 <i>_logger<\/i> \u0440\u0430\u0432\u0435\u043d <i>null<\/i>, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>.<\/p>\n<p>  <b>\u0420\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 2<\/b>  <\/p>\n<pre><code class=\"cs\">private void PopAction() {   if (IsTracingInstructions)   {       _currentVmTrace.VmTrace.Operations                        = _currentVmTrace.Ops.ToArray();        \/\/ &lt;=       _vmTraceStack.Pop();       _currentVmTrace = _vmTraceStack.Count == 0 ?                          (null, null) : _vmTraceStack.Peek();       _currentOperation = _currentVmTrace.Ops?.Last();        \/\/ &lt;=       _gasAlreadySetForCurrentOp = false;       }   }   ... }<\/code><\/pre>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3095\/\">V3095<\/a> The &#8216;_currentVmTrace.Ops&#8217; object was used before it was verified against null. Check lines: 218, 221. Nethermind.Evm ParityLikeTxTracer.cs 218<\/p>\n<p>  \u0422\u0430 \u0436\u0435 \u0441\u0430\u043c\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0447\u0442\u043e \u0438 \u0432\u044b\u0448\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 <i>_currentVmTrace.Ops.ToArray()<\/i>, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 <i>_currentVmTrace.Ops<\/i> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 <i>null<\/i>.<\/p>\n<p>  <b>\u0420\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 3<\/b>  <\/p>\n<pre><code class=\"cs\">private void BuildNodeInfo() {     _nodeInfo = new NodeInfo();     _nodeInfo.Name = ClientVersion.Description;     _nodeInfo.Enode = _enode.Info;                           \/\/ &lt;=     byte[] publicKeyBytes = _enode?.PublicKey?.Bytes;        \/\/ &lt;=     _nodeInfo.Id = (publicKeyBytes == null ? Keccak.Zero :                    Keccak.Compute(publicKeyBytes)).ToString(false);     _nodeInfo.Ip = _enode?.HostIp?.ToString();     _nodeInfo.ListenAddress = $&quot;{_enode.HostIp}:{_enode.Port}&quot;;     _nodeInfo.Ports.Discovery = _networkConfig.DiscoveryPort;     _nodeInfo.Ports.Listener = _networkConfig.P2PPort;     UpdateEthProtocolInfo(); }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3095\/\">V3095<\/a> The &#8216;_enode&#8217; object was used before it was verified against null. Check lines: 55, 56. Nethermind.JsonRpc AdminModule.cs 55<\/p>\n<p>  \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0432\u0438\u043d\u043e\u0432\u043d\u0438\u043a\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <i>_enode<\/i>.<\/p>\n<p>  \u0425\u043e\u0447\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 null, \u0442\u043e \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0443\u0436\u0435 \u0443\u043f\u0430\u0434\u0435\u0442. \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0436\u0435 \u0432\u0430\u043c \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u0442 \u043e\u0431 \u044d\u0442\u043e\u043c \u0438 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<h3>\u041d\u0430\u0448 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 Copy-Paste<\/h3>\n<p>  <b>\u0421\u043b\u0443\u0447\u0430\u0439 1<\/b>  <\/p>\n<pre><code class=\"cs\">public static bool Equals(ref UInt256 a, ref UInt256 b) {     return a.s0 == b.s0 &amp;&amp; a.s1 == b.s1 &amp;&amp; a.s2 == b.s2 &amp;&amp; a.s2 == b.s2; }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3001\/\">V3001<\/a> There are identical sub-expressions &#8216;a.s2 == b.s2&#8217; to the left and to the right of the &#8216;&amp;&amp;&#8217; operator. Nethermind.Dirichlet.Numerics UInt256.cs 1154<\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c 2 \u0440\u0430\u0437\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u0438 \u0442\u043e\u0436\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435:  <\/p>\n<pre><code class=\"cs\">a.s2 == b.s2<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 <i>a<\/i> \u0438 <i>b<\/i> \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435 <i>s3<\/i>, \u0442\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u043f\u0440\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0431\u044b\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c <i>s2<\/i> \u043d\u0430 <i>s3<\/i>.<\/p>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0432\u043d\u044b \u0447\u0430\u0449\u0435, \u0447\u0435\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u043e\u0441\u044c \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u043a\u043e\u0434\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0434\u0443\u043c\u0430\u044e\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u044e\u0442 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0432 \u0438\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0442\u0440\u0430\u0442\u044f \u043c\u043d\u043e\u0433\u043e \u0441\u0438\u043b \u0438 \u043d\u0435\u0440\u0432\u043e\u0432.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0430. \u0412\u0438\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b, \u0441\u0447\u0438\u0442\u0430\u044f \u0442\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438, \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0438\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0431\u0440\u0435\u0436\u043d\u043e \u0438 \u043d\u0435\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e. <a href=\"https:\/\/www.viva64.com\/ru\/b\/0509\/\">Proof<\/a>. \u0417\u043d\u0430\u044f \u044d\u0442\u043e, \u0431\u0443\u0434\u044c\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b :)!<\/p>\n<p>  <b>\u0421\u043b\u0443\u0447\u0430\u0439 2<\/b>  <\/p>\n<pre><code class=\"cs\">public async Task&lt;ApiResponse&gt;  PublishBlockAsync(SignedBeaconBlock signedBlock,                   CancellationToken cancellationToken) {     bool acceptedLocally = false;     ...     if (acceptedLocally)     {         return new ApiResponse(StatusCode.Success);     }     else     {         return new ApiResponse(StatusCode.Success);     }     ... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3004\/\">V3004<\/a> The &#8216;then&#8217; statement is equivalent to the &#8216;else&#8217; statement. Nethermind.BeaconNode BeaconNodeFacade.cs 177<\/p>\n<p>  \u041f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>acceptedLocally <\/i> \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e\u0436\u0435. \u0421\u043b\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0430 \u044d\u0442\u043e \u0438\u043b\u0438 \u043d\u0435\u0442. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0438 \u0437\u0430\u0431\u044b\u043b \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c <i>StatusCode.Success<\/i> \u043d\u0430 \u0447\u0442\u043e-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435, \u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0441\u0430\u043c\u0430\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0447\u0442\u043e \u0443 <i>StatusCode<\/i> \u0438\u043c\u0435\u0435\u0442\u0441\u044f <i>InternalError<\/i> \u0438 <i>InvalidRequest<\/i>. \u041d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u0438\u043d\u043e\u0439 \u0432\u0441\u0435\u043c\u0443 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u043e\u0434\u0430 \u0438 \u043d\u0430\u043c \u0443\u0436\u0435 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>acceptedLocally<\/i>, \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0442\u0435\u043c \u043c\u0435\u0441\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0438\u0434\u0435\u0442\u044c \u0438 \u0434\u0443\u043c\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0430 \u044d\u0442\u043e \u0438\u043b\u0438 \u043d\u0435\u0442. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439. <\/p>\n<p>  <b>\u0421\u043b\u0443\u0447\u0430\u0439 3<\/b>  <\/p>\n<pre><code class=\"cs\">public void TearDown() {     ...     foreach (var testResult in _results)     {          string message = $&quot;{testResult.Order}. {testResult.Name} has &quot;                 + $&quot;{(testResult.Passed ? &quot;passed [+]&quot; : &quot;failed [-]&quot;)}&quot;;          if (testResult.Passed)          {                TestContext.WriteLine(message);          }          else          {                TestContext.WriteLine(message);          }      } }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3004\/\">V3004<\/a> The &#8216;then&#8217; statement is equivalent to the &#8216;else&#8217; statement. Nethermind.Overseer.Test TestBuilder.cs 46<\/p>\n<p>  \u0418 \u0441\u043d\u043e\u0432\u0430 \u043d\u0430\u043c \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u0432\u0435\u0434\u044c \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0434\u043d\u043e \u0438 \u0442\u043e\u0436\u0435. \u0418 \u0441\u043d\u043e\u0432\u0430 \u0441\u0438\u0434\u0438\u043c \u0438 \u043c\u0443\u0447\u0430\u0435\u043c\u0441\u044f, \u0434\u0443\u043c\u0430\u044f, \u0430 \u0447\u0442\u043e \u0436\u0435 \u0442\u0443\u0442 \u0445\u043e\u0442\u0435\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0411\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u0430\u044f \u0442\u0440\u0430\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0438 \u0441\u0440\u0430\u0437\u0443 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u0442\u0430\u043a\u043e\u0439 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>  <b>\u0421\u043b\u0443\u0447\u0430\u0439 4<\/b>  <\/p>\n<pre><code class=\"cs\">public void Setup() {     if (_decoderBuffer.ReadableBytes &gt; 0)     {         throw new Exception(&quot;decoder buffer&quot;);     }      if (_decoderBuffer.ReadableBytes &gt; 0)     {         throw new Exception(&quot;decoder buffer&quot;);     }     ... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3021\/\">V3021<\/a> There are two &#8216;if&#8217; statements with identical conditional expressions. The first &#8216;if&#8217; statement contains method return. This means that the second &#8216;if&#8217; statement is senseless Nethermind.Network.Benchmark InFlowBenchmarks.cs 55<\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043d\u0430\u0436\u0430\u043b\u0438 <i>Ctrl+V<\/i>. \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u043b\u0438\u0448\u043d\u044e\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0438 \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e. \u0423\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0431\u044b \u0442\u0443\u0442 \u0431\u044b\u043b\u043e \u0432\u0430\u0436\u043d\u043e \u0435\u0449\u0435 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0442\u043e \u0432\u0441\u0435 \u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c <i>if <\/i> \u0447\u0435\u0440\u0435\u0437 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0418.<\/p>\n<p>  <b>\u0421\u043b\u0443\u0447\u0430\u0439 5<\/b>  <\/p>\n<pre><code class=\"cs\">private void LogBlockAuthorNicely(Block block, ISyncPeer syncPeer) {     if (_logger.IsInfo)     {         if (_logger.IsInfo)         {             ...         }     } }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3030\/\">V3030<\/a> Recurring check. The &#8216;_logger.IsInfo&#8217; condition was already verified in line 242. Nethermind.Synchronization SyncServer.cs 244<\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u043d\u044f\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 <i>_logger<\/i> \u0435\u0441\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u0430 \u0435\u0449\u0435 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 &#8216;<i>bool IsError { get; }<\/i>&#8216;. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u0434, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cs\">private void LogBlockAuthorNicely(Block block, ISyncPeer syncPeer) {     if (_logger.IsInfo)     {         if (!_logger.IsError) \/\/ &lt;=         {             ...         }     } }<\/code><\/pre>\n<p>  \u041d\u0443 \u0438\u043b\u0438 \u0432\u0441\u0435\u043c\u0443 \u0432\u0438\u043d\u043e\u0439 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u043e\u0434\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430.<\/p>\n<p>  <b>\u0421\u043b\u0443\u0447\u0430\u0439 6<\/b>  <\/p>\n<pre><code class=\"cs\">if (missingParamsCount != 0) {     bool incorrectParametersCount = missingParamsCount != 0; \/\/ &lt;=     if (missingParamsCount &gt; 0)     {         ...     }     ... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3022\/\">V3022<\/a> Expression &#8216;missingParamsCount != 0&#8217; is always true. Nethermind.JsonRpc JsonRpcService.cs 127<\/p>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 (missingParamsCount != 0) \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0438\u0441\u0442\u0438\u043d\u043d\u043e, \u0442\u043e \u043e\u043f\u044f\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c true.<\/p>\n<h3>\u041f\u0443\u0442\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/h3>\n<p>  <\/p>\n<pre><code class=\"cs\">public async Task&lt;long&gt;  DownloadHeaders(PeerInfo bestPeer,                  BlocksRequest blocksRequest,                  CancellationToken cancellation) {   ...   for (int i = 1; i &lt; headers.Length; i++)   {     ...     BlockHeader currentHeader = headers[i];     ...     bool isValid = i &gt; 1 ?          _blockValidator.ValidateHeader(currentHeader, headers[i - 1], false):         _blockValidator.ValidateHeader(currentHeader, false);     ...     if (HandleAddResult(bestPeer,                          currentHeader,                          i == 0,                              \/\/ &lt;=                         _blockTree.Insert(currentHeader)))      {        headersSynced++;     }      ...   }   ... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3022\/\">V3022<\/a> Expression &#8216;i == 0&#8217; is always false. Nethermind.Synchronization BlockDownloader.cs 192<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443. \u041f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>i<\/i> \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 1. \u0414\u0430\u043b\u0435\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>false<\/i>. <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 <i>HandleAddResult<\/i>:  <\/p>\n<pre><code class=\"cs\">private bool HandleAddResult(PeerInfo peerInfo,                               BlockHeader block,                              bool isFirstInBatch,                               AddBlockResult addResult) {     ...     if (isFirstInBatch)     {         ...     }     else     {         ...     }     ... }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 <i>isFirstInBatch<\/i>. \u0415\u0441\u043b\u0438 \u0441\u0443\u0434\u0438\u0442\u044c \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u0442\u043e \u043e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u043e, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u0432 \u043f\u0430\u0440\u0442\u0438\u0438. \u0425\u043c, \u043f\u0435\u0440\u0432\u044b\u043c. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c-\u043a\u0430 \u043e\u043f\u044f\u0442\u044c \u0432\u044b\u0448\u0435 \u0438 \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u0435\u0442\u0441\u044f 2 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <i>i<\/i>:  <\/p>\n<pre><code class=\"cs\">BlockHeader currentHeader = headers[i]; _blockValidator.ValidateHeader(currentHeader, headers[i - 1], false)<\/code><\/pre>\n<p>  \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u043e\u0442\u0441\u0447\u0435\u0442 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0434\u0435\u0442 \u0441 1. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 2 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430: \u043b\u0438\u0431\u043e \u043f\u043e\u0434 \u00ab\u043f\u0435\u0440\u0432\u044b\u043c\u00bb \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u043e\u0434 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c 1, \u043b\u0438\u0431\u043e \u043f\u043e\u0434 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c 0. \u041d\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c <i>i<\/i> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e 1.<\/p>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cs\">HandleAddResult(bestPeer, currentHeader,                  i == 1, _blockTree.Insert(currentHeader))<\/code><\/pre>\n<p>  \u0418\u043b\u0438 \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cs\">HandleAddResult(bestPeer, currentHeader,                  i - 1 == 0, _blockTree.Insert(currentHeader))<\/code><\/pre>\n<p>  \u0418 \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u0435\u0441\u043b\u0438 \u0431\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c, \u0442\u043e \u043e\u043d, \u043d\u0430\u043f\u0438\u0441\u0430\u0432 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0438 \u0443\u0432\u0438\u0434\u0435\u0432 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435, \u0431\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u0431\u044b \u0432\u0441\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b \u0438 \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u043b\u0441\u044f \u0436\u0438\u0437\u043d\u044c\u044e. <\/p>\n<h3>\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 ??<\/h3>\n<p>  <b>\u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f 1<\/b>  <\/p>\n<pre><code class=\"cs\">public int MemorySize {   get   {     int unaligned = (Keccak == null ? MemorySizes.RefSize :          MemorySizes.RefSize + Keccak.MemorySize)          + (MemorySizes.RefSize + FullRlp?.Length                                   ?? MemorySizes.ArrayOverhead)   \/\/ &lt;=         + (MemorySizes.RefSize + _rlpStream?.MemorySize                                   ?? MemorySizes.RefSize)         \/\/ &lt;=         + MemorySizes.RefSize + (MemorySizes.ArrayOverhead + _data?.Length          * MemorySizes.RefSize ?? MemorySizes.ArrayOverhead)          + MemorySizes.SmallObjectOverhead + (Key?.MemorySize ?? 0);     return MemorySizes.Align(unaligned);   } }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio: <\/p>\n<ul>\n<li>V3123 Perhaps the &#8216;??&#8217; operator works in a different way than it was expected. Its priority is lower than priority of other operators in its left part. Nethermind.Trie TrieNode.cs 43<\/li>\n<li>V3123 Perhaps the &#8216;??&#8217; operator works in a different way than it was expected. Its priority is lower than priority of other operators in its left part. Nethermind.Trie TrieNode.cs 44<\/li>\n<\/ul>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0441\u043e\u0432\u0435\u0442\u0443\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0442\u043e, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b &quot;??&quot;, \u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0432 \u0447\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u043e\u0442 \u043d\u0430 \u044d\u0442\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443:  <\/p>\n<pre><code class=\"cs\">(MemorySizes.RefSize + FullRlp?.Length ?? MemorySizes.ArrayOverhead)<\/code><\/pre>\n<p>  <i>MemorySizes.RefSize<\/i> \u0438 <i>MemorySizes.ArrayOverhead<\/i> \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438:  <\/p>\n<pre><code class=\"cs\">public static class MemorySizes {     ...     public const int RefSize = 8;     public const int ArrayOverhead = 20;     ... }<\/code><\/pre>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443, \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0432 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"cs\">(8 + FullRlp?.Length ?? 20)<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0447\u0442\u043e <i>FullRlp<\/i> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u044b\u043c <i>null. <\/i>\u0422\u043e\u0433\u0434\u0430<i> (8+null) <\/i>\u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e null<i>. <\/i>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435(<i>null ?? 20<\/i>), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0435\u0440\u043d\u0435\u0442 20. <\/p>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 <i>FullRlp<\/i> \u0440\u0430\u0432\u043d\u043e <i>null<\/i>, \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 <i>MemorySizes.ArrayOverhead<\/i> \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u0447\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 <i>MemorySizes.RefSize.<\/i> \u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0441\u0442\u0440\u043e\u0447\u043a\u043e\u0439 \u043d\u0438\u0436\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d.<\/p>\n<p>  \u041d\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u0432 \u0442\u043e\u043c, \u044d\u0442\u043e\u0433\u043e \u043b\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0445\u043e\u0442\u0435\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a? \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443:  <\/p>\n<pre><code class=\"cs\">MemorySizes.RefSize + (MemorySizes.ArrayOverhead      + _data?.Length * MemorySizes.RefSize ?? MemorySizes.ArrayOverhead) <\/code><\/pre>\n<p>  \u0422\u0443\u0442, \u043a\u0430\u043a \u0438 \u0432 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0432\u044b\u0448\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0430\u0445 <i>MemorySizes.RefSize<\/i> \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c, \u043d\u043e<\/p>\n<p>  \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 &quot;+&quot; \u0441\u0442\u043e\u0438\u0442 \u0441\u043a\u043e\u0431\u043a\u0430. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043a <i>MemorySizes.RefSize <\/i> \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0430 \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0440\u0430\u0432\u043d\u043e <i>null<\/i>, \u0442\u043e \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0443\u0436\u0435 \u0434\u0440\u0443\u0433\u043e\u0435. \u0417\u043d\u0430\u0447\u0438\u0442 \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cs\">public int MemorySize {   get   {     int unaligned = (Keccak == null ? MemorySizes.RefSize :         MemorySizes.RefSize + Keccak.MemorySize)         + (MemorySizes.RefSize + (FullRlp?.Length                                   ?? MemorySizes.ArrayOverhead))    \/\/ &lt;=        + (MemorySizes.RefSize + (_rlpStream?.MemorySize                                   ?? MemorySizes.RefSize))          \/\/ &lt;=        + MemorySizes.RefSize + (MemorySizes.ArrayOverhead + _data?.Length         * MemorySizes.RefSize ?? MemorySizes.ArrayOverhead)         + MemorySizes.SmallObjectOverhead + (Key?.MemorySize ?? 0);     return MemorySizes.Align(unaligned);   } }<\/code><\/pre>\n<p>  \u041e\u043f\u044f\u0442\u044c \u0436\u0435 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0445\u043e\u0442\u0435\u043b \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u0442\u043e\u0433\u0434\u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e \u044f\u0432\u043d\u043e \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c:  <\/p>\n<pre><code class=\"cs\">((MemorySizes.RefSize + FullRlp?.Length) ?? MemorySizes.ArrayOverhead)<\/code><\/pre>\n<p>  \u0418 \u0442\u043e\u0433\u0434\u0430, \u0442\u043e\u043c\u0443 \u043a\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0434\u043e\u043b\u0433\u043e \u0432\u043d\u0438\u043a\u0430\u0442\u044c, \u0447\u0442\u043e \u0436\u0435 \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0438 \u0447\u0435\u0433\u043e \u0436\u0435 \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442.<\/p>\n<p>  <b>\u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f 2<\/b>  <\/p>\n<pre><code class=\"cs\">private async Task&lt;JsonRpcResponse&gt;  ExecuteAsync(JsonRpcRequest request,               string methodName,              (MethodInfo Info, bool ReadOnly) method) {     var expectedParameters = method.Info.GetParameters();     var providedParameters = request.Params;     ...     int missingParamsCount = expectedParameters.Length              - (providedParameters?.Length ?? 0)              + providedParameters?.Count(string.IsNullOrWhiteSpace) ?? 0; \/\/ &lt;=     if (missingParamsCount != 0)     {         ...     }     ... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3123\/\">V3123<\/a> Perhaps the &#8216;??&#8217; operator works in a different way than it was expected. Its priority is lower than priority of other operators in its left part. Nethermind.JsonRpc JsonRpcService.cs 123<\/p>\n<p>  \u0418 \u043e\u043f\u044f\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 &quot;??&quot;, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u043e\u0442 \u043d\u0430 \u044d\u0442\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443:  <\/p>\n<pre><code class=\"cs\">expectedParameters.Length              - (providedParameters?.Length ?? 0)              + providedParameters?.Count(string.IsNullOrWhiteSpace) ?? 0;<\/code><\/pre>\n<p>  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0447\u0442\u043e <i>providedParameters <\/i> \u0440\u0430\u0432\u043d\u043e <i>null<\/i>, \u0442\u043e\u0433\u0434\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438\u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0432\u0441\u0435 \u0447\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 <i>providedParameters <\/i>\u043d\u0430<i> null, <\/i>\u0430 \u0432\u043c\u0435\u0441\u0442\u043e <i>expectedParameters.Length <\/i>\u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:  <\/p>\n<pre><code class=\"cs\">100 - (null ?? 0) + null ?? 0;<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043c\u0435\u0442\u043d\u043e, \u0447\u0442\u043e \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0434\u0432\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 \u0435\u0441\u0442\u044c, \u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043d\u0435\u0442. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c, \u0447\u0442\u043e (<i>null ?? 0<\/i>) \u0432\u0435\u0440\u043d\u0435\u0442 0, \u0434\u0430\u043b\u0435\u0435 \u0438\u0437 100 \u0432\u044b\u0447\u0438\u0442\u0430\u0435\u043c 0 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 100:  <\/p>\n<pre><code class=\"cs\">100 + null ?? 0;<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u043a \u043f\u0440\u0435\u0436\u0434\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c &quot;<i>null ?? 0<\/i>&quot; \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c (<i>100 + 0<\/i>), \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0438\u043d\u043e\u0435. <\/p>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f (<i>100 + null<\/i>) \u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c <i>null<\/i>. \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f (<i>null ?? 0<\/i>), \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043e\u0439 missingParamsCount \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e 0.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0435\u0435 \u043d\u0435\u0440\u0430\u0432\u043d\u043e \u043b\u0438 <i>missingParamsCount <\/i> \u043d\u0443\u043b\u044e, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438 \u0434\u043e\u0431\u0438\u0432\u0430\u043b\u0441\u044f. \u0410 \u044f \u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043a\u043e\u0431\u043a\u0438 \u0438 \u044f\u0432\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043c\u044b\u0441\u043b\u0438? \u0412\u043e\u043e\u0431\u0449\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0438\u0437-\u0437\u0430 \u043d\u0435\u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f 0, \u0438 \u044d\u0442\u043e \u043d\u0438\u0447\u0442\u043e \u0438\u043d\u043e\u0435 \u043a\u0430\u043a \u043a\u043e\u0441\u0442\u044b\u043b\u044c. <\/p>\n<p>  \u0418 \u0441\u043d\u043e\u0432\u0430 \u043c\u044b \u0442\u0440\u0430\u0442\u0438\u043c \u0432\u0440\u0435\u043c\u044f, \u0445\u043e\u0442\u044f \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 \u0440\u0435\u0436\u0438\u043c <a href=\"https:\/\/www.viva64.com\/ru\/m\/0024\/\">\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430<\/a>.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0441\u043c\u043e\u0433 \u0434\u043e\u043d\u0435\u0441\u0442\u0438 \u0434\u043e \u0432\u0430\u0441 \u0442\u043e, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u2014 \u044d\u0442\u043e \u0432\u0430\u0448 \u0434\u0440\u0443\u0433, \u0430 \u043d\u0435 \u0437\u043b\u043e\u0439 \u043d\u0430\u0434\u0437\u0438\u0440\u0430\u0442\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0438 \u0436\u0434\u0435\u0442 \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043e\u0448\u0438\u0431\u043b\u0438\u0441\u044c.<\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0435\u0433\u043e \u0440\u0435\u0434\u043a\u043e, \u0432\u044b \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u0431\u0443\u0434\u0435\u0442\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u0434\u0430\u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0438 \u0442\u0430\u043a\u0438\u0435, \u043d\u0430\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043d\u0430\u0434\u043e \u043f\u043e\u043b\u043e\u043c\u0430\u0442\u044c \u0433\u043e\u043b\u043e\u0432\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e. \u0422\u043e\u0433\u0434\u0430 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0438\u0441\u0442\u0438\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u044e\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u0412\u0441\u0435 \u043c\u044b \u0443\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430\u0445, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0442\u0435\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0438 \u043f\u043e\u043d\u044f\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u044d\u0442\u0438\u0445 \u0441\u0430\u043c\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 PVS-Studio. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/p>\n<p><a href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/504316\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/eb2\/f9c\/3bb\/eb2f9c3bb5f32f39239298d36431961c.png\"><\/div>\n<p><\/a><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439, \u0442\u043e \u043f\u0440\u043e\u0448\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434: Nikolay Mironov. <a href=\"https:\/\/www.viva64.com\/en\/b\/0737\/\">Single line code or check of Nethermind using PVS-Studio C# for Linux<\/a>.<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/504320\/\"> https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/504320\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/504320\/\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b64\/5fc\/72d\/b645fc72ddcded21612bdc5e9fac2c78.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1\"><\/div>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0438\u0443\u0440\u043e\u0447\u0435\u043d\u0430 \u043a \u0441\u0442\u0430\u0440\u0442\u0443 \u0431\u0435\u0442\u0430-\u0442\u0435\u0441\u0442\u0430 PVS-Studio C# \u0434\u043b\u044f Linux, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f Rider. \u041f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u043c\u0443 \u043f\u043e\u0432\u043e\u0434\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 Nethermind \u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-304413","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/304413","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=304413"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/304413\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=304413"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=304413"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=304413"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}