{"id":28996,"date":"2023-07-03T10:57:25","date_gmt":"2023-07-03T07:27:25","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/building-a-ethereum-wallet-watcher-using-concurrent-programming-in-golang-4686\/"},"modified":"2023-07-03T10:57:25","modified_gmt":"2023-07-03T07:27:25","slug":"building-a-ethereum-wallet-watcher-using-concurrent-programming-in-golang-4686","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/building-a-ethereum-wallet-watcher-using-concurrent-programming-in-golang-4686\/","title":{"rendered":"\u0633\u0627\u062e\u062a\u0646 \u062a\u0645\u0627\u0634\u0627\u06af\u0631 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0627\u062a\u0631\u06cc\u0648\u0645 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0647\u0645\u0632\u0645\u0627\u0646 \u062f\u0631 GoLang"},"content":{"rendered":"<div data-article-id=\"1520120\" id=\"article-body\">\n<blockquote>\n<p>\u0639\u06a9\u0633 \u0631\u0648\u06cc \u062c\u0644\u062f \u062a\u0648\u0633\u0637 Mika Baumeister \/ Unsplash<\/p>\n<\/blockquote>\n<p>\u062f\u0631 \u0622\u062e\u0631\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u062e\u0648\u062f \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646\u06a9\u0647 \u0686\u0642\u062f\u0631 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0647\u0645\u0632\u0645\u0627\u0646 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0632\u0628\u0627\u0646 Go \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f \u0635\u062d\u0628\u062a \u06a9\u0631\u062f\u0645\u060c \u062f\u06cc\u062f\u06cc\u0645 \u06a9\u0647 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0622\u0646 \u0686\u0642\u062f\u0631 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u0648 \u0686\u0642\u062f\u0631 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u06a9\u0627\u0631\u0622\u0645\u062f \u0628\u0627\u0634\u062f\u060c \u0628\u0647 \u0644\u0637\u0641 \u0633\u0627\u062e\u062a \u0622\u0646 \u06a9\u0647 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f\u06cc \u0631\u0627 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u062f. \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0627\u0645\u0644 \u0627\u0632 \u067e\u062a\u0627\u0646\u0633\u06cc\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0647\u0645\u0632\u0645\u0627\u0646.  \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0646\u06af\u0627\u0647\u06cc \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645 \u0639\u0645\u0644\u06cc \u0628\u0647 \u0646\u062d\u0648\u0647 \u0633\u0627\u062e\u062a \u06cc\u06a9 \u0648\u0627\u0686 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0627\u062a\u0631\u06cc\u0648\u0645 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0642\u062f\u0631\u062a GoLang \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u0634\u062a.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/building-a-ethereum-wallet-watcher-using-concurrent-programming-in-golang-4686\/#%D9%85%D8%AA%D9%86_%D9%86%D9%88%D8%B4%D8%AA%D9%87\" >\u0645\u062a\u0646 \u0646\u0648\u0634\u062a\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/building-a-ethereum-wallet-watcher-using-concurrent-programming-in-golang-4686\/#%D9%87%D8%AF%D9%81\" >\u0647\u062f\u0641<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/building-a-ethereum-wallet-watcher-using-concurrent-programming-in-golang-4686\/#%D9%82%D8%A8%D9%84_%D8%A7%D8%B2_%D8%A7%DB%8C%D9%86%DA%A9%D9%87_%D8%B4%D8%B1%D9%88%D8%B9_%DA%A9%D9%86%DB%8C%D9%85\" >\u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/building-a-ethereum-wallet-watcher-using-concurrent-programming-in-golang-4686\/#%D8%B4%D8%B1%D9%88%D8%B9_%D8%B4%D8%AF%D9%86\" >\u0634\u0631\u0648\u0639 \u0634\u062f\u0646<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/building-a-ethereum-wallet-watcher-using-concurrent-programming-in-golang-4686\/#%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%AA%D9%85%D8%A7%D8%B4%D8%A7%DA%AF%D8%B1_%DA%A9%DB%8C%D9%81_%D9%BE%D9%88%D9%84_%D9%85%D8%A7_%D8%A8%D8%A7_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_%DA%AF%D9%88%D8%B1%D9%88%D8%AA%DB%8C%D9%86_%D9%87%D8%A7\" >\u0627\u06cc\u062c\u0627\u062f \u062a\u0645\u0627\u0634\u0627\u06af\u0631 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0645\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646 \u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/building-a-ethereum-wallet-watcher-using-concurrent-programming-in-golang-4686\/#%D9%82%D8%B1%D8%A7%D8%B1_%D8%AF%D8%A7%D8%AF%D9%86_%DB%8C%DA%A9_Rest_API_%D8%AF%D8%B1_%D9%85%D8%B9%D8%B1%D8%B6_%D9%86%D9%85%D8%A7%DB%8C%D8%B4_%D8%AF%D8%A7%D8%AF%D9%87_%D8%B4%D8%AF\" >\u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u06cc\u06a9 Rest API \u062f\u0631 \u0645\u0639\u0631\u0636 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0634\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/building-a-ethereum-wallet-watcher-using-concurrent-programming-in-golang-4686\/#%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DB%8C%DA%A9_%D8%B3%D8%B1%D9%88%DB%8C%D8%B3_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A8%D8%B3%D8%AA%D9%87_%E2%80%9C%DA%A9%DB%8C%D9%81_%D9%BE%D9%88%D9%84%E2%80%9D_%D9%85%D8%A7\" >\u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u0628\u0631\u0627\u06cc \u0628\u0633\u062a\u0647 &#8220;\u06a9\u06cc\u0641 \u067e\u0648\u0644&#8221; \u0645\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/building-a-ethereum-wallet-watcher-using-concurrent-programming-in-golang-4686\/#%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%AA%D9%88%D8%A7%D8%A8%D8%B9_gin_handler_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A7%D9%81%D8%B4%D8%A7%DB%8C_API_%D9%85%D8%A7\" >\u0627\u06cc\u062c\u0627\u062f \u062a\u0648\u0627\u0628\u0639 gin handler \u0628\u0631\u0627\u06cc \u0627\u0641\u0634\u0627\u06cc API \u0645\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/building-a-ethereum-wallet-watcher-using-concurrent-programming-in-golang-4686\/#%D9%86%D8%AA%DB%8C%D8%AC%D9%87\" >\u0646\u062a\u06cc\u062c\u0647<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D8%AA%D9%86_%D9%86%D9%88%D8%B4%D8%AA%D9%87\"><\/span>\n<p>  \u0645\u062a\u0646 \u0646\u0648\u0634\u062a\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0648\u0628 3 \u0627\u0632 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0628\u0647 \u0645\u0637\u0627\u0644\u0639\u0627\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u062e\u0648\u062f \u0628\u0627\u0632\u06af\u0634\u062a\u0645 \u0647\u0645\u06cc\u0634\u0647 \u0645\u0648\u0636\u0648\u0639\u06cc \u0628\u0648\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0633\u06cc\u0627\u0631 \u0628\u0647 \u0622\u0646 \u0639\u0644\u0627\u0642\u0647 \u0645\u0646\u062f \u0647\u0633\u062a\u0645\u060c \u0645\u0646 \u0627\u0632 \u0639\u0644\u0627\u0642\u0647 \u0645\u0646\u062f\u0627\u0646 \u0628\u0647 \u0641\u0646\u0627\u0648\u0631\u06cc \u0628\u0644\u0627\u06a9 \u0686\u06cc\u0646 \u062f\u0631 \u067e\u0634\u062a \u0627\u06a9\u062b\u0631 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062a\u0648\u0633\u0639\u0647 \u06cc\u0627\u0641\u062a\u0647 \u0647\u0633\u062a\u0645 \u0648 \u0628\u0647 \u0627\u0635\u0637\u0644\u0627\u062d \u0627\u062e\u06cc\u0631\u0627\u064b \u062f\u0631 \u0631\u0627\u0647 \u062d\u0644 \u0647\u0627\u06cc \u0633\u0646\u062a\u06cc \u062a\u0631 \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0642\u0631\u0627\u0631 \u06af\u0631\u0641\u062a\u0647 \u0627\u0633\u062a.  \u0628\u0631\u062e\u06cc \u0627\u0632 \u06a9\u06cc\u0641 \u067e\u0648\u0644\u200c\u0647\u0627 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062e\u0635\u0648\u0635\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0639\u0645\u0648\u0645\u06cc \u062f\u0631 \u0645\u0639\u0631\u0636 \u062f\u06cc\u062f \u0639\u0645\u0648\u0645 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f\u060c \u0627\u06a9\u062b\u0631 \u0622\u0646\u0647\u0627 \u062a\u0648\u0633\u0637 \u06a9\u06cc\u062a\u200c\u0647\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u06cc\u06a9 \u06af\u0631\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0645\u062d\u0644\u06cc \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.  \u0628\u0631\u062e\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0628\u0627 \u0628\u06cc \u062f\u0642\u062a\u06cc \u0648 \u0639\u062f\u0645 \u062a\u0648\u062c\u0647\u060c \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0645\u0642\u0627\u062f\u06cc\u0631\u06cc \u0631\u0627 \u0628\u0647 \u0622\u062f\u0631\u0633 \u0627\u06cc\u0646 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u062f\u0631 \u0634\u0628\u06a9\u0647 \u0627\u0635\u0644\u06cc (\u0628\u0647 \u0627\u0635\u0637\u0644\u0627\u062d \u062f\u0631 \u062d\u0627\u0644 \u062a\u0648\u0644\u06cc\u062f) \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u0646\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%87%D8%AF%D9%81\"><\/span>\n<p>  \u0647\u062f\u0641<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0627 \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u062f\u0631 GoLang \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u062a\u0627 \u06a9\u06cc\u0641 \u067e\u0648\u0644\u200c\u0647\u0627\u06cc \u0627\u062a\u0631\u06cc\u0648\u0645 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0627\u06af\u0631 \u062a\u0631\u0627\u06a9\u0646\u0634\u200c\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f\u06cc \u0648\u0631\u0648\u062f\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\u060c \u0633\u0639\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u06cc\u06a9 \u062a\u0631\u0627\u06a9\u0646\u0634 \u062e\u0631\u0648\u062c\u06cc \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0622\u0646 \u0645\u0642\u0627\u062f\u06cc\u0631 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644 \u0628\u06cc\u0634\u062a\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0647\u0645\u0632\u0645\u0627\u0646\u060c \u06cc\u06a9 API \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 \u06cc\u06a9 \u0622\u062f\u0631\u0633 \u0627\u062a\u0631\u06cc\u0648\u0645 \u0646\u06cc\u0632 \u0627\u0631\u0627\u0626\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<p>\u0628\u0647 \u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647\u060c \u0645\u0627 \u0633\u0631\u0648\u06cc\u0633 Wallet Watcher \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u06a9\u0646\u0627\u0631 \u06cc\u06a9 \u0627\u0633\u062a\u0631\u0627\u062d\u062a API \u0627\u062c\u0631\u0627 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.  \u0628\u06cc\u0627 \u0628\u0631\u06cc\u0645\u061f<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%82%D8%A8%D9%84_%D8%A7%D8%B2_%D8%A7%DB%8C%D9%86%DA%A9%D9%87_%D8%B4%D8%B1%D9%88%D8%B9_%DA%A9%D9%86%DB%8C%D9%85\"><\/span>\n<p>  \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0633\u0648\u0631\u0633 \u06a9\u062f \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u062f\u0631 GitHub \u0645\u0646 \u0627\u0633\u062a\u060c \u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 git clone \u0648 \u0627\u062c\u0631\u0627\u06cc \u0622\u0646 \u0628\u0631 \u0631\u0648\u06cc \u062f\u0633\u062a\u06af\u0627\u0647 \u062e\u0648\u062f \u06a9\u0644\u0648\u0646 \u06a9\u0646\u06cc\u062f\u060c \u0641\u0631\u0627\u0645\u0648\u0634 \u0646\u06a9\u0646\u06cc\u062f \u06a9\u0647 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 .env \u062f\u0631 \u0631\u06cc\u0634\u0647 \u067e\u0631\u0648\u0698\u0647 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 .env.example \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>git clone https:\/\/github.com\/ronilsonalves\/go-wallet-watcher.git\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06af\u0631 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f Rest API \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u0631\u0633 \u0648 \u062c\u0648\u0647\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f\u060c \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u06a9\u0644\u06cc\u062f API \u0627\u0632 Etherscan.io \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u0648 \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u0631\u0627\u06cc\u06af\u0627\u0646 \u062f\u0631 https:\/\/etherscan.io\/myapikey \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0646\u06cc\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B4%D8%B1%D9%88%D8%B9_%D8%B4%D8%AF%D9%86\"><\/span>\n<p>  \u0634\u0631\u0648\u0639 \u0634\u062f\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0622\u0646 \u0631\u0627 \u0634\u0631\u0648\u0639 \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u062f\u0631 \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u0628\u0627\u06cc\u062f \u062a\u0627\u06cc\u067e \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">go<\/span> <span class=\"n\">mod<\/span> <span class=\"n\">init<\/span> <span class=\"err\">'<\/span><span class=\"n\">project<\/span><span class=\"o\">-<\/span><span class=\"n\">name<\/span><span class=\"err\">'<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0642\u0628\u0644 \u0627\u0632 \u0627\u062f\u0627\u0645\u0647\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0645\u0627\u0698\u0648\u0644 \u0647\u0627\u06cc go-ethereum \u0648 godotenv \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0628\u0647 \u0645\u0627 \u062f\u0631 \u0633\u0627\u062e\u062a \u0633\u0631\u0648\u06cc\u0633 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">go<\/span> <span class=\"n\">get<\/span> <span class=\"n\">github<\/span><span class=\"o\">.<\/span><span class=\"n\">com<\/span><span class=\"o\">\/<\/span><span class=\"n\">ethereum<\/span><span class=\"o\">\/<\/span><span class=\"k\">go<\/span><span class=\"o\">-<\/span><span class=\"n\">ethereum<\/span>\n<span class=\"k\">go<\/span> <span class=\"n\">get<\/span> <span class=\"n\">github<\/span><span class=\"o\">.<\/span><span class=\"n\">com<\/span><span class=\"o\">\/<\/span><span class=\"n\">joho<\/span><span class=\"o\">\/<\/span><span class=\"n\">godotenv<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062d\u0627\u0644 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0628\u0647 \u0646\u0627\u0645 \u062f\u0627\u062e\u0644\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u062f\u0627\u062e\u0644\u06cc \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0631\u0627 \u0633\u0627\u0632\u0645\u0627\u0646\u062f\u0647\u06cc \u06a9\u0646\u06cc\u0645\u060c \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646 \u067e\u0648\u0634\u0647 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0628\u0633\u062a\u0647 \u062f\u0627\u0645\u0646\u0647 \u0645\u0627 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f \u0648 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0641\u0627\u06cc\u0644 wallet.go \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u062d\u0627\u0648\u06cc \u06cc\u06a9 \u0633\u0627\u062e\u062a\u0627\u0631\u06cc \u06a9\u0647 \u06cc\u06a9 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0627\u062a\u0631\u06cc\u0648\u0645 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">package<\/span> <span class=\"n\">domain<\/span>\n\n<span class=\"k\">type<\/span> <span class=\"n\">Wallet<\/span> <span class=\"k\">struct<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">Address<\/span>      <span class=\"kt\">string<\/span>        <span class=\"s\">`json:\"address\"`<\/span>\n    <span class=\"n\">SecretKey<\/span>    <span class=\"kt\">string<\/span>        <span class=\"s\">`json:\"secret-key,omitempty\"`<\/span>\n    <span class=\"n\">Balance<\/span>      <span class=\"kt\">float64<\/span>       <span class=\"s\">`json:\"balance\"`<\/span>\n    <span class=\"n\">Transactions<\/span> <span class=\"p\">[]<\/span><span class=\"n\">Transaction<\/span> <span class=\"s\">`json:\"transactions,omitempty\"`<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0647\u0645\u0686\u0646\u06cc\u0646\u060c \u0645\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0633\u0627\u062e\u062a\u0627\u0631 \u0628\u0631\u0627\u06cc \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0646 \u06cc\u06a9 \u062a\u0631\u0627\u06a9\u0646\u0634 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645\u060c \u062f\u0631 \u0627\u062f\u0627\u0645\u0647 \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">package<\/span> <span class=\"n\">domain<\/span>\n\n<span class=\"k\">type<\/span> <span class=\"n\">Transaction<\/span> <span class=\"k\">struct<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">BlockNumber<\/span>       <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"blockNumber,omitempty\"`<\/span>\n    <span class=\"n\">TimeStamp<\/span>         <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"timeStamp,omitempty\"`<\/span>\n    <span class=\"n\">Hash<\/span>              <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"hash,omitempty\"`<\/span>\n    <span class=\"n\">Nonce<\/span>             <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"nonce,omitempty\"`<\/span>\n    <span class=\"n\">BlockHash<\/span>         <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"blockHash,omitempty\"`<\/span>\n    <span class=\"n\">TransactionIndex<\/span>  <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"transactionIndex,omitempty\"`<\/span>\n    <span class=\"n\">From<\/span>              <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"from,omitempty\"`<\/span>\n    <span class=\"n\">To<\/span>                <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"to,omitempty\"`<\/span>\n    <span class=\"n\">Value<\/span>             <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"value,omitempty\"`<\/span>\n    <span class=\"n\">Gas<\/span>               <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"gas,omitempty\"`<\/span>\n    <span class=\"n\">GasPrice<\/span>          <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"gasPrice,omitempty\"`<\/span>\n    <span class=\"n\">IsError<\/span>           <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"isError,omitempty\"`<\/span>\n    <span class=\"n\">TxreceiptStatus<\/span>   <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"txreceipt_status,omitempty\"`<\/span>\n    <span class=\"n\">Input<\/span>             <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"input,omitempty\"`<\/span>\n    <span class=\"n\">ContractAddress<\/span>   <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"contractAddress,omitempty\"`<\/span>\n    <span class=\"n\">CumulativeGasUsed<\/span> <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"cumulativeGasUsed,omitempty\"`<\/span>\n    <span class=\"n\">GasUsed<\/span>           <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"gasUsed,omitempty\"`<\/span>\n    <span class=\"n\">Confirmations<\/span>     <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"confirmations,omitempty\"`<\/span>\n    <span class=\"n\">MethodId<\/span>          <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"methodId,omitempty\"`<\/span>\n    <span class=\"n\">FunctionName<\/span>      <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"functionName,omitempty\"`<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%AA%D9%85%D8%A7%D8%B4%D8%A7%DA%AF%D8%B1_%DA%A9%DB%8C%D9%81_%D9%BE%D9%88%D9%84_%D9%85%D8%A7_%D8%A8%D8%A7_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_%DA%AF%D9%88%D8%B1%D9%88%D8%AA%DB%8C%D9%86_%D9%87%D8%A7\"><\/span>\n<p>  \u0627\u06cc\u062c\u0627\u062f \u062a\u0645\u0627\u0634\u0627\u06af\u0631 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0645\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646 \u0647\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0647\u0646\u0648\u0632 \u062f\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u062f\u0627\u062e\u0644\u06cc\u060c \u0628\u0633\u062a\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0647 \u0646\u0627\u0645 &#8220;watcher&#8221; \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646 \u0641\u0627\u06cc\u0644 service.go \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u062a\u0645\u0627\u0634\u0627\u06af\u0631 \u062e\u0648\u062f \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u0627\u0628\u062a\u062f\u0627 \u062a\u0627\u0628\u0639\u06cc \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0645\u0633\u0626\u0648\u0644 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0633\u0631\u0648\u06cc\u0633 \u062e\u0648\u062f \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"c\">\/\/ StartWatcherService load from environment the data and start running goroutines to perform wallet watcher service.<\/span>\n<span class=\"k\">func<\/span> <span class=\"n\">StartWatcherService<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n\n    <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">godotenv<\/span><span class=\"o\">.<\/span><span class=\"n\">Load<\/span><span class=\"p\">()<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Fatalln<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Error loading .env file\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">())<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">var<\/span> <span class=\"n\">wfe<\/span> <span class=\"p\">[<\/span><span class=\"m\">20<\/span><span class=\"p\">]<\/span><span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span>\n    <span class=\"k\">var<\/span> <span class=\"n\">wallets<\/span> <span class=\"p\">[]<\/span><span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span>\n\n    <span class=\"k\">for<\/span> <span class=\"n\">index<\/span> <span class=\"o\">:=<\/span> <span class=\"k\">range<\/span> <span class=\"n\">wfe<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">wallet<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">{<\/span>\n            <span class=\"n\">Address<\/span><span class=\"o\">:<\/span>   <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Getenv<\/span><span class=\"p\">(<\/span><span class=\"s\">\"WATCHER_WALLET\"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">strconv<\/span><span class=\"o\">.<\/span><span class=\"n\">Itoa<\/span><span class=\"p\">(<\/span><span class=\"n\">index<\/span><span class=\"o\">+<\/span><span class=\"m\">1<\/span><span class=\"p\">)),<\/span>\n            <span class=\"n\">SecretKey<\/span><span class=\"o\">:<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Getenv<\/span><span class=\"p\">(<\/span><span class=\"s\">\"WATCHER_SECRET\"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">strconv<\/span><span class=\"o\">.<\/span><span class=\"n\">Itoa<\/span><span class=\"p\">(<\/span><span class=\"n\">index<\/span><span class=\"o\">+<\/span><span class=\"m\">1<\/span><span class=\"p\">)),<\/span>\n        <span class=\"p\">}<\/span>\n        <span class=\"n\">wallets<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">wallets<\/span><span class=\"p\">,<\/span> <span class=\"n\">wallet<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"c\">\/\/ contains filtered fields or functions<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0642\u0637\u0639\u0647 \u06a9\u062f \u0628\u0627\u0644\u0627\u060c \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u0646\u0628\u0627\u06cc\u062f \u062f\u0631 \u0645\u0639\u0631\u0636 \u0646\u0645\u0627\u06cc\u0634 \u0642\u0631\u0627\u0631 \u06af\u06cc\u0631\u0646\u062f\u060c \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644\u060c 20 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0648 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062e\u0635\u0648\u0635\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u062d\u062f\u0648\u062f\u0647 for \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0647\u0646\u0648\u0632 \u062f\u0631 service.go \u0645\u0627\u060c \u06cc\u06a9 \u06af\u0631\u0648\u0647 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0628\u0631\u0627\u06cc \u06af\u0648\u0631\u0648\u062a\u06cc\u0646\u200c\u0647\u0627\u06cc \u062e\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"c\">\/\/ StartWatcherService load from environment the data and start running goroutines to perform wallet watcher service.<\/span>\n<span class=\"k\">func<\/span> <span class=\"n\">StartWatcherService<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n\n    <span class=\"c\">\/\/ contains filtered fields or functions<\/span>\n\n    <span class=\"c\">\/\/ Create a wait group to synchronize goroutines<\/span>\n    <span class=\"k\">var<\/span> <span class=\"n\">wg<\/span> <span class=\"n\">sync<\/span><span class=\"o\">.<\/span><span class=\"n\">WaitGroup<\/span>\n    <span class=\"n\">wg<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">wallets<\/span><span class=\"p\">))<\/span>\n\n    <span class=\"c\">\/\/ contains filtered fields or functions<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u062f\u0627\u0645\u0647\u060c \u0645\u0627 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646 \u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"c\">\/\/ StartWatcherService load from environment the data and start runing goroutines to perform wallet watcher service.<\/span>\n<span class=\"k\">func<\/span> <span class=\"n\">StartWatcherService<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c\">\/\/ contains filtered fields or functions<\/span>\n    <span class=\"c\">\/\/ Start a goroutine for each wallet<\/span>\n    <span class=\"k\">for<\/span> <span class=\"n\">_<\/span><span class=\"p\">,<\/span> <span class=\"n\">wallet<\/span> <span class=\"o\">:=<\/span> <span class=\"k\">range<\/span> <span class=\"n\">wallets<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">go<\/span> <span class=\"k\">func<\/span><span class=\"p\">(<\/span><span class=\"n\">wallet<\/span> <span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"c\">\/\/ Connect to the Ethereum client<\/span>\n            <span class=\"n\">client<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">rpc<\/span><span class=\"o\">.<\/span><span class=\"n\">Dial<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Getenv<\/span><span class=\"p\">(<\/span><span class=\"s\">\"WATCHER_RPC_ADDRESS\"<\/span><span class=\"p\">))<\/span>\n            <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n                <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to connect to the RPC client for address %s: %v <\/span><span class=\"se\">\\n<\/span><span class=\"s\"> Trying fallback rpc server...\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">wallet<\/span><span class=\"o\">.<\/span><span class=\"n\">Address<\/span><span class=\"o\">.<\/span><span class=\"n\">Hex<\/span><span class=\"p\">(),<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">}<\/span>\n            <span class=\"n\">client<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">=<\/span> <span class=\"n\">rpc<\/span><span class=\"o\">.<\/span><span class=\"n\">Dial<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Getenv<\/span><span class=\"p\">(<\/span><span class=\"s\">\"WATCHER_RPC_FALLBACK_ADDRESS\"<\/span><span class=\"p\">))<\/span>\n            <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n                <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to connect to the Ethereum client for address %s: %v\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">wallet<\/span><span class=\"o\">.<\/span><span class=\"n\">Address<\/span><span class=\"o\">.<\/span><span class=\"n\">Hex<\/span><span class=\"p\">(),<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n                <span class=\"n\">wg<\/span><span class=\"o\">.<\/span><span class=\"n\">Done<\/span><span class=\"p\">()<\/span>\n                <span class=\"k\">return<\/span>\n            <span class=\"p\">}<\/span>\n\n            <span class=\"c\">\/\/ Create an instance of the Ethereum client<\/span>\n            <span class=\"n\">ethClient<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">ethclient<\/span><span class=\"o\">.<\/span><span class=\"n\">NewClient<\/span><span class=\"p\">(<\/span><span class=\"n\">client<\/span><span class=\"p\">)<\/span>\n\n            <span class=\"k\">for<\/span> <span class=\"p\">{<\/span>\n                <span class=\"c\">\/\/ Get the balance of the address<\/span>\n                <span class=\"n\">balance<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">ethClient<\/span><span class=\"o\">.<\/span><span class=\"n\">BalanceAt<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"o\">.<\/span><span class=\"n\">Background<\/span><span class=\"p\">(),<\/span> <span class=\"n\">common<\/span><span class=\"o\">.<\/span><span class=\"n\">HexToAddress<\/span><span class=\"p\">(<\/span><span class=\"n\">wallet<\/span><span class=\"o\">.<\/span><span class=\"n\">Address<\/span><span class=\"p\">),<\/span> <span class=\"no\">nil<\/span><span class=\"p\">)<\/span>\n                <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n                    <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to get balance for address %s: %v\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">wallet<\/span><span class=\"o\">.<\/span><span class=\"n\">Address<\/span><span class=\"o\">.<\/span><span class=\"n\">Hex<\/span><span class=\"p\">(),<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n                    <span class=\"k\">continue<\/span>\n                <span class=\"p\">}<\/span>\n\n                <span class=\"n\">balanceInEther<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">Float<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">Quo<\/span><span class=\"p\">(<\/span><span class=\"nb\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">Float<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">SetInt<\/span><span class=\"p\">(<\/span><span class=\"n\">balance<\/span><span class=\"p\">),<\/span> <span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">NewFloat<\/span><span class=\"p\">(<\/span><span class=\"m\">1e18<\/span><span class=\"p\">))<\/span>\n\n                <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Balance for address %s: %.16f ETH\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">wallet<\/span><span class=\"o\">.<\/span><span class=\"n\">Address<\/span><span class=\"o\">.<\/span><span class=\"n\">Hex<\/span><span class=\"p\">(),<\/span> <span class=\"n\">balanceInEther<\/span><span class=\"p\">)<\/span>\n\n\n                <span class=\"c\">\/\/ if the wallet has a balance superior to 0.0005 ETH, we are sending the balance to another wallet<\/span>\n                <span class=\"k\">if<\/span> <span class=\"n\">balanceInEther<\/span><span class=\"o\">.<\/span><span class=\"n\">Cmp<\/span><span class=\"p\">(<\/span><span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">NewFloat<\/span><span class=\"p\">(<\/span><span class=\"m\">0.0005<\/span><span class=\"p\">))<\/span> <span class=\"o\">&gt;<\/span> <span class=\"m\">0<\/span> <span class=\"p\">{<\/span>\n                    <span class=\"n\">sendBalanceToAnotherWallet<\/span><span class=\"p\">(<\/span><span class=\"n\">common<\/span><span class=\"o\">.<\/span><span class=\"n\">HexToAddress<\/span><span class=\"p\">(<\/span><span class=\"n\">wallet<\/span><span class=\"o\">.<\/span><span class=\"n\">Address<\/span><span class=\"p\">),<\/span> <span class=\"n\">balance<\/span><span class=\"p\">,<\/span> <span class=\"n\">wallet<\/span><span class=\"o\">.<\/span><span class=\"n\">SecretKey<\/span><span class=\"p\">)<\/span>\n                <span class=\"p\">}<\/span>\n\n                <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Sleep<\/span><span class=\"p\">(<\/span><span class=\"m\">300<\/span> <span class=\"o\">*<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Millisecond<\/span><span class=\"p\">)<\/span> <span class=\"c\">\/\/ Wait for a while before checking for the next block<\/span>\n            <span class=\"p\">}<\/span>\n        <span class=\"p\">}(<\/span><span class=\"n\">wallet<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n        <span class=\"c\">\/\/ Wait for all goroutines to finish<\/span>\n    <span class=\"n\">wg<\/span><span class=\"o\">.<\/span><span class=\"n\">Wait<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0627 \u062a\u0627\u0628\u0639 \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0645\u0633\u0626\u0648\u0644 \u0627\u06cc\u062c\u0627\u062f \u0648 \u0627\u0645\u0636\u0627\u06cc \u062a\u0631\u0627\u06a9\u0646\u0634 \u0627\u0633\u062a \u06a9\u0647 \u0645\u0648\u062c\u0648\u062f\u06cc \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0647\u0627 \u0631\u0627 \u0628\u0647 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u062f\u06cc\u06af\u0631\u06cc \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"c\">\/\/ sendBalanceToAnotherWallet when find some values in any wallet perform a SendTransaction(ctx context.Context,<\/span>\n<span class=\"c\">\/\/ tx *types.Transaction) function<\/span>\n<span class=\"k\">func<\/span> <span class=\"n\">sendBalanceToAnotherWallet<\/span><span class=\"p\">(<\/span><span class=\"n\">fromAddress<\/span> <span class=\"n\">common<\/span><span class=\"o\">.<\/span><span class=\"n\">Address<\/span><span class=\"p\">,<\/span> <span class=\"n\">balance<\/span> <span class=\"o\">*<\/span><span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">Int<\/span><span class=\"p\">,<\/span> <span class=\"n\">privateKeyHex<\/span> <span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">toAddress<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">common<\/span><span class=\"o\">.<\/span><span class=\"n\">HexToAddress<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Getenv<\/span><span class=\"p\">(<\/span><span class=\"s\">\"WATCHER_DEST_ADDRESS\"<\/span><span class=\"p\">))<\/span>\n    <span class=\"n\">chainID<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">NewInt<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"c\">\/\/ Connect to the Ethereum client<\/span>\n    <span class=\"n\">client<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">rpc<\/span><span class=\"o\">.<\/span><span class=\"n\">Dial<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Getenv<\/span><span class=\"p\">(<\/span><span class=\"s\">\"WATCHER_RPC_ADDRESS\"<\/span><span class=\"p\">))<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to connect to the Ethereum client: %v...\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">ethClient<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">ethclient<\/span><span class=\"o\">.<\/span><span class=\"n\">NewClient<\/span><span class=\"p\">(<\/span><span class=\"n\">client<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"c\">\/\/ Load the private key<\/span>\n    <span class=\"n\">privateKey<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">crypto<\/span><span class=\"o\">.<\/span><span class=\"n\">HexToECDSA<\/span><span class=\"p\">(<\/span><span class=\"n\">privateKeyHex<\/span><span class=\"p\">[<\/span><span class=\"m\">2<\/span><span class=\"o\">:<\/span><span class=\"p\">])<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Fatalf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to load private key: %v\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c\">\/\/ Get the current nonce for the fromAddress<\/span>\n    <span class=\"n\">nonce<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">ethClient<\/span><span class=\"o\">.<\/span><span class=\"n\">PendingNonceAt<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"o\">.<\/span><span class=\"n\">Background<\/span><span class=\"p\">(),<\/span> <span class=\"n\">fromAddress<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to retrieve nonce: %v\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c\">\/\/ Create a new transaction<\/span>\n    <span class=\"n\">gasLimit<\/span> <span class=\"o\">:=<\/span> <span class=\"kt\">uint64<\/span><span class=\"p\">(<\/span><span class=\"m\">21000<\/span><span class=\"p\">)<\/span> <span class=\"c\">\/\/ Definimos o limite para a taxa de Gas da transa\u00e7\u00e3o baseada no seu tipo<\/span>\n    <span class=\"n\">gasPrice<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">ethClient<\/span><span class=\"o\">.<\/span><span class=\"n\">SuggestGasPrice<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"o\">.<\/span><span class=\"n\">Background<\/span><span class=\"p\">())<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to retrieve gas price: %v\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n\n    <span class=\"n\">tx<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">types<\/span><span class=\"o\">.<\/span><span class=\"n\">NewTx<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"n\">types<\/span><span class=\"o\">.<\/span><span class=\"n\">LegacyTx<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">Nonce<\/span><span class=\"o\">:<\/span>    <span class=\"n\">nonce<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">GasPrice<\/span><span class=\"o\">:<\/span> <span class=\"n\">gasPrice<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">Gas<\/span><span class=\"o\">:<\/span>      <span class=\"n\">gasLimit<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">To<\/span><span class=\"o\">:<\/span>       <span class=\"o\">&amp;<\/span><span class=\"n\">toAddress<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">Value<\/span><span class=\"o\">:<\/span>    <span class=\"nb\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">Int<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">Sub<\/span><span class=\"p\">(<\/span><span class=\"n\">balance<\/span><span class=\"p\">,<\/span> <span class=\"nb\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">Int<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">Mul<\/span><span class=\"p\">(<\/span><span class=\"n\">gasPrice<\/span><span class=\"p\">,<\/span> <span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">NewInt<\/span><span class=\"p\">(<\/span><span class=\"kt\">int64<\/span><span class=\"p\">(<\/span><span class=\"n\">gasLimit<\/span><span class=\"p\">)))),<\/span>\n        <span class=\"n\">Data<\/span><span class=\"o\">:<\/span>     <span class=\"no\">nil<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">})<\/span>\n    <span class=\"n\">valueInEther<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">Float<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">Quo<\/span><span class=\"p\">(<\/span><span class=\"nb\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">Float<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">SetInt<\/span><span class=\"p\">(<\/span><span class=\"n\">tx<\/span><span class=\"o\">.<\/span><span class=\"n\">Value<\/span><span class=\"p\">()),<\/span> <span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">NewFloat<\/span><span class=\"p\">(<\/span><span class=\"m\">1e18<\/span><span class=\"p\">))<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">valueInEther<\/span><span class=\"o\">.<\/span><span class=\"n\">Cmp<\/span><span class=\"p\">(<\/span><span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">NewFloat<\/span><span class=\"p\">(<\/span><span class=\"m\">0<\/span><span class=\"p\">))<\/span> <span class=\"o\">&lt;<\/span> <span class=\"m\">0<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"ERROR: Insufficient funds to make transfer\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c\">\/\/ Sign the transaction<\/span>\n    <span class=\"n\">signedTx<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">types<\/span><span class=\"o\">.<\/span><span class=\"n\">SignTx<\/span><span class=\"p\">(<\/span><span class=\"n\">tx<\/span><span class=\"p\">,<\/span> <span class=\"n\">types<\/span><span class=\"o\">.<\/span><span class=\"n\">NewEIP155Signer<\/span><span class=\"p\">(<\/span><span class=\"n\">chainID<\/span><span class=\"p\">),<\/span> <span class=\"n\">privateKey<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to sign transaction: %v\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c\">\/\/ Send the signed transaction<\/span>\n    <span class=\"n\">err<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ethClient<\/span><span class=\"o\">.<\/span><span class=\"n\">SendTransaction<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"o\">.<\/span><span class=\"n\">Background<\/span><span class=\"p\">(),<\/span> <span class=\"n\">signedTx<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to send transaction: %v\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Transaction sent: %s\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">signedTx<\/span><span class=\"o\">.<\/span><span class=\"n\">Hash<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"n\">Hex<\/span><span class=\"p\">())<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0633\u0631\u0648\u06cc\u0633 \u0646\u0638\u0627\u0631\u062a \u0628\u0631 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0645\u0627 \u0622\u0645\u0627\u062f\u0647 \u0627\u0633\u062a\u060c watcher\/service.go \u0645\u0627 \u0628\u0627\u06cc\u062f \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0628\u0627\u0634\u062f:<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0627\u06af\u0631 \u0646\u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u0645 API Rest \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645\u060c \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f StartWatcherService() \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 main.go \u062e\u0648\u062f \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">func<\/span> <span class=\"n\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c\">\/\/ filtered fields or functions<\/span>\n\n    <span class=\"c\">\/\/ Start our watcher<\/span>\n    <span class=\"k\">go<\/span> <span class=\"n\">watcher<\/span><span class=\"o\">.<\/span><span class=\"n\">StartWatcherService<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"c\">\/\/ Wait for the server and the watcher service to finish<\/span>\n    <span class=\"k\">select<\/span> <span class=\"p\">{}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%82%D8%B1%D8%A7%D8%B1_%D8%AF%D8%A7%D8%AF%D9%86_%DB%8C%DA%A9_Rest_API_%D8%AF%D8%B1_%D9%85%D8%B9%D8%B1%D8%B6_%D9%86%D9%85%D8%A7%DB%8C%D8%B4_%D8%AF%D8%A7%D8%AF%D9%87_%D8%B4%D8%AF\"><\/span>\n<p>  \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u06cc\u06a9 Rest API \u062f\u0631 \u0645\u0639\u0631\u0636 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0634\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0627 \u0627\u0632 Gin Web Framework \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u06cc\u06a9 Rest API \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0631\u0627 \u062f\u0631 \u0645\u0639\u0631\u0636 \u067e\u0631\u0633 \u0648 \u062c\u0648\u06cc \u0645\u0648\u062c\u0648\u062f\u06cc \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0648 \u062a\u0631\u0627\u06a9\u0646\u0634 \u0647\u0627\u06cc \u0627\u062e\u06cc\u0631 \u0627\u0632 \u06cc\u06a9 \u0622\u062f\u0631\u0633 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u06cc\u0645.  \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627\u06cc\u062f \u0645\u0627\u0698\u0648\u0644 o gin-gonic \u0631\u0627 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">go<\/span> <span class=\"n\">get<\/span> <span class=\"n\">github<\/span><span class=\"o\">.<\/span><span class=\"n\">com<\/span><span class=\"o\">\/<\/span><span class=\"n\">gin<\/span><span class=\"o\">-<\/span><span class=\"n\">gonic<\/span><span class=\"o\">\/<\/span><span class=\"n\">gin<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DB%8C%DA%A9_%D8%B3%D8%B1%D9%88%DB%8C%D8%B3_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A8%D8%B3%D8%AA%D9%87_%E2%80%9C%DA%A9%DB%8C%D9%81_%D9%BE%D9%88%D9%84%E2%80%9D_%D9%85%D8%A7\"><\/span>\n<p>  \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u0628\u0631\u0627\u06cc \u0628\u0633\u062a\u0647 &#8220;\u06a9\u06cc\u0641 \u067e\u0648\u0644&#8221; \u0645\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06a9\u0646\u0648\u0646\u060c \u062f\u0631 \u062f\u0627\u062e\u0644 \u062f\u0627\u062e\u0644\u06cc\u060c \u06cc\u06a9 \u0628\u0633\u062a\u0647 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u062f\u0631 \u0627\u06cc\u0646 \u0628\u0633\u062a\u0647 \u0645\u0627 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 service.go \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 API Etherscan.io \u062a\u0645\u0627\u0633 \u0645\u06cc \u06af\u06cc\u0631\u06cc\u0645 \u062a\u0627 \u067e\u0631\u0633 \u0648 \u062c\u0648\u0647\u0627\u06cc \u062a\u0631\u0627\u06a9\u0646\u0634 \u0648 \u062a\u0639\u0627\u062f\u0644 \u0631\u0627 \u0628\u0631\u0642\u0631\u0627\u0631 \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">type<\/span> <span class=\"n\">Service<\/span> <span class=\"k\">interface<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">GetWalletBalanceByAddress<\/span><span class=\"p\">(<\/span><span class=\"n\">address<\/span> <span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"p\">(<\/span><span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">GetTransactionsByAddress<\/span><span class=\"p\">(<\/span><span class=\"n\">address<\/span><span class=\"p\">,<\/span> <span class=\"n\">page<\/span><span class=\"p\">,<\/span> <span class=\"n\">size<\/span> <span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"p\">(<\/span><span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">type<\/span> <span class=\"n\">service<\/span> <span class=\"k\">struct<\/span><span class=\"p\">{}<\/span>\n\n<span class=\"c\">\/\/ NewService creates a new instance of the Wallet Service.<\/span>\n<span class=\"k\">func<\/span> <span class=\"n\">NewService<\/span><span class=\"p\">()<\/span> <span class=\"n\">Service<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">service<\/span><span class=\"p\">{}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u0628\u062a\u062f\u0627 \u0631\u0648\u0634\u06cc \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 \u0622\u062f\u0631\u0633\u06cc \u06a9\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f (\u0628\u0647 \u0632\u0648\u062f\u06cc \u062a\u0627\u0628\u0639 gin handler \u0631\u0627 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u06cc\u062f):<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"c\">\/\/ GetWalletBalanceByAddress retrieves the wallet balance for the given address<\/span>\n<span class=\"k\">func<\/span> <span class=\"p\">(<\/span><span class=\"n\">s<\/span> <span class=\"n\">service<\/span><span class=\"p\">)<\/span> <span class=\"n\">GetWalletBalanceByAddress<\/span><span class=\"p\">(<\/span><span class=\"n\">address<\/span> <span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"p\">(<\/span><span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u062f\u0627\u062e\u0644 \u0627\u06cc\u0646\u060c Etherscan.io APIKey \u0631\u0627 \u0627\u0632 \u0645\u062d\u06cc\u0637 \u062e\u0648\u062f \u062f\u0631\u06cc\u0627\u0641\u062a \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"c\">\/\/ GetWalletBalanceByAddress retrieves the wallet balance for the given address<\/span>\n<span class=\"k\">func<\/span> <span class=\"p\">(<\/span><span class=\"n\">s<\/span> <span class=\"n\">service<\/span><span class=\"p\">)<\/span> <span class=\"n\">GetWalletBalanceByAddress<\/span><span class=\"p\">(<\/span><span class=\"n\">address<\/span> <span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"p\">(<\/span><span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c\">\/\/ Retrieves Etherscan.io API Key from environment<\/span>\n    <span class=\"n\">apiKey<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Getenv<\/span><span class=\"p\">(<\/span><span class=\"s\">\"WATCHER_ETHERSCAN_API\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">url<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Sprintf<\/span><span class=\"p\">(<\/span><span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Sprintf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"https:\/\/api.etherscan.io\/api?module=account&amp;action=balance&amp;address=%s&amp;tag=latest&amp;apikey=%s\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">address<\/span><span class=\"p\">,<\/span> <span class=\"n\">apiKey<\/span><span class=\"p\">))<\/span>\n    <span class=\"c\">\/\/ Contains filtered fields or functions<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u062f\u0627\u0645\u0647\u060c \u06cc\u06a9 HTTP GET \u0628\u0631\u0627\u06cc API Etherscan \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0645\u062d\u062a\u0648\u0627\u06cc \u067e\u0627\u0633\u062e \u0631\u0627 \u0645\u06cc \u062e\u0648\u0627\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"c\">\/\/ GetWalletBalanceByAddress retrieves the wallet balance for the given address<\/span>\n<span class=\"k\">func<\/span> <span class=\"p\">(<\/span><span class=\"n\">s<\/span> <span class=\"n\">service<\/span><span class=\"p\">)<\/span> <span class=\"n\">GetWalletBalanceByAddress<\/span><span class=\"p\">(<\/span><span class=\"n\">address<\/span> <span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"p\">(<\/span><span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\n    <span class=\"c\">\/\/ Contains filtered fields or functions<\/span>\n\n    <span class=\"c\">\/\/ Send GET request to the Etherscan API<\/span>\n    <span class=\"n\">response<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">Get<\/span><span class=\"p\">(<\/span><span class=\"n\">url<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to make Etherscan API request: %v\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">{},<\/span> <span class=\"n\">err<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"k\">defer<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">Body<\/span><span class=\"o\">.<\/span><span class=\"n\">Close<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"c\">\/\/ Read the response body<\/span>\n    <span class=\"n\">body<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">io<\/span><span class=\"o\">.<\/span><span class=\"n\">ReadAll<\/span><span class=\"p\">(<\/span><span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">Body<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to read response body: %v\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">{},<\/span> <span class=\"n\">err<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c\">\/\/ Creates a struct to represent etherscan API response<\/span>\n    <span class=\"k\">var<\/span> <span class=\"n\">result<\/span> <span class=\"k\">struct<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">Status<\/span>  <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"status\"`<\/span>\n        <span class=\"n\">Message<\/span> <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"message\"`<\/span>\n        <span class=\"n\">Result<\/span>  <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"result\"`<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c\">\/\/ Contains filtered fields or functions<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0645\u0627 \u067e\u0627\u0633\u062e Etherscan.io API \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u0648 \u0622\u0646 \u0631\u0627 \u0645\u0637\u0627\u0628\u0642 \u0628\u0627 \u0633\u0627\u062e\u062a\u0627\u0631 \u062e\u0648\u062f \u0633\u0627\u062e\u062a\u0627\u0631 \u0645\u06cc\u200c\u062f\u0647\u06cc\u0645\u060c \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc\u200c\u0647\u0627\u06cc\u06cc \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645 \u0648 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"c\">\/\/ GetWalletBalanceByAddress retrieves the wallet balance for the given address<\/span>\n<span class=\"k\">func<\/span> <span class=\"p\">(<\/span><span class=\"n\">s<\/span> <span class=\"n\">service<\/span><span class=\"p\">)<\/span> <span class=\"n\">GetWalletBalanceByAddress<\/span><span class=\"p\">(<\/span><span class=\"n\">address<\/span> <span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"p\">(<\/span><span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\n    <span class=\"c\">\/\/ Contains filtered fields or functions<\/span>\n\n    <span class=\"c\">\/\/ Parse the JSON response<\/span>\n    <span class=\"n\">err<\/span> <span class=\"o\">=<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">Unmarshal<\/span><span class=\"p\">(<\/span><span class=\"n\">body<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">result<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to parse JSON response: %v\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">{},<\/span> <span class=\"n\">err<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">if<\/span> <span class=\"n\">result<\/span><span class=\"o\">.<\/span><span class=\"n\">Status<\/span> <span class=\"o\">!=<\/span> <span class=\"s\">\"1\"<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"API returned error: %s\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">result<\/span><span class=\"o\">.<\/span><span class=\"n\">Message<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">{},<\/span> <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"API error: %s\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">result<\/span><span class=\"o\">.<\/span><span class=\"n\">Message<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">wbBigInt<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">Int<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">wbBigInt<\/span><span class=\"p\">,<\/span> <span class=\"n\">ok<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">wbBigInt<\/span><span class=\"o\">.<\/span><span class=\"n\">SetString<\/span><span class=\"p\">(<\/span><span class=\"n\">result<\/span><span class=\"o\">.<\/span><span class=\"n\">Result<\/span><span class=\"p\">,<\/span> <span class=\"m\">10<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"o\">!<\/span><span class=\"n\">ok<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to parse string to BigInt\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">{},<\/span> <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"failed to parse string into BigInt. result.Result value: %s\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">result<\/span><span class=\"o\">.<\/span><span class=\"n\">Result<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">wb<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">Float<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">Quo<\/span><span class=\"p\">(<\/span><span class=\"nb\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">Float<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">SetInt<\/span><span class=\"p\">(<\/span><span class=\"n\">wbBigInt<\/span><span class=\"p\">),<\/span> <span class=\"n\">big<\/span><span class=\"o\">.<\/span><span class=\"n\">NewFloat<\/span><span class=\"p\">(<\/span><span class=\"m\">1e18<\/span><span class=\"p\">))<\/span>\n    <span class=\"n\">v<\/span><span class=\"p\">,<\/span> <span class=\"n\">_<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">strconv<\/span><span class=\"o\">.<\/span><span class=\"n\">ParseFloat<\/span><span class=\"p\">(<\/span><span class=\"n\">wb<\/span><span class=\"o\">.<\/span><span class=\"n\">String<\/span><span class=\"p\">(),<\/span> <span class=\"m\">64<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">Address<\/span><span class=\"o\">:<\/span> <span class=\"n\">address<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">Balance<\/span><span class=\"o\">:<\/span> <span class=\"n\">v<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">},<\/span> <span class=\"no\">nil<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0627 \u0642\u0628\u0644\u0627\u064b \u0631\u0648\u0634 \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0648\u062c\u0648\u062f\u06cc \u0627\u0632 \u06cc\u06a9 \u0622\u062f\u0631\u0633 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u062f\u0627\u0631\u06cc\u0645\u060c \u0627\u06a9\u0646\u0648\u0646 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0631\u0648\u0634 \u062f\u06cc\u06af\u0631\u06cc \u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644 wallet\/service.go \u062e\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u062a\u0631\u0627\u06a9\u0646\u0634 \u0647\u0627 \u0631\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u06cc\u0645\u060c \u0645\u0646\u0637\u0642 \u0645\u0627\u0646\u0646\u062f \u0631\u0648\u0634 \u0642\u0628\u0644\u06cc \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f\u060c \u062a\u0641\u0627\u0648\u062a \u062f\u0631 \u0646\u062d\u0648\u0647 \u0627\u0646\u062c\u0627\u0645 \u0645\u0627 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f. \u067e\u0627\u0633\u062e Etherscan.io API \u0648 \u0646\u062d\u0648\u0647 \u0627\u06cc\u062c\u0627\u062f \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc URL \u0628\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a GET \u0631\u0627 \u062a\u0631\u0633\u06cc\u0645 \u06a9\u0646\u06cc\u062f\u060c \u0632\u06cc\u0631\u0627 \u0635\u0641\u062d\u0647 \u0648 \u062a\u0639\u062f\u0627\u062f \u0645\u0648\u0627\u0631\u062f \u062f\u0631 \u0647\u0631 \u0635\u0641\u062d\u0647 \u0641\u0631\u0627\u062a\u0631 \u0627\u0632 \u0622\u062f\u0631\u0633 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u0634\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"c\">\/\/ GetTransactionsByAddress retrieves the wallet balance and last transactions for the given address paggeable<\/span>\n<span class=\"k\">func<\/span> <span class=\"p\">(<\/span><span class=\"n\">s<\/span> <span class=\"n\">service<\/span><span class=\"p\">)<\/span> <span class=\"n\">GetTransactionsByAddress<\/span><span class=\"p\">(<\/span><span class=\"n\">address<\/span><span class=\"p\">,<\/span> <span class=\"n\">page<\/span><span class=\"p\">,<\/span> <span class=\"n\">size<\/span> <span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"p\">(<\/span><span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c\">\/\/ Fazemos a chamada para o m\u00e9todo GetWalletBalanceByAddress para montarmos uma carteira e seu saldo<\/span>\n    <span class=\"n\">wallet<\/span><span class=\"p\">,<\/span> <span class=\"n\">_<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">s<\/span><span class=\"o\">.<\/span><span class=\"n\">GetWalletBalanceByAddress<\/span><span class=\"p\">(<\/span><span class=\"n\">address<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">apiKey<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Getenv<\/span><span class=\"p\">(<\/span><span class=\"s\">\"WATCHER_ETHERSCAN_API\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">url<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Sprintf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"https:\/\/api.etherscan.io\/api?module=account&amp;action=txlist&amp;address=%s&amp;startblock=0&amp;endblock=99999999&amp;page=%s&amp;offset=%s&amp;sort=desc&amp;apikey=%s\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">address<\/span><span class=\"p\">,<\/span> <span class=\"n\">page<\/span><span class=\"p\">,<\/span> <span class=\"n\">size<\/span><span class=\"p\">,<\/span> <span class=\"n\">apiKey<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"c\">\/\/ Contains filtered fields or functions<\/span>\n\n    <span class=\"c\">\/\/ Parse the JSON response<\/span>\n    <span class=\"k\">var<\/span> <span class=\"n\">transactions<\/span> <span class=\"k\">struct<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">Status<\/span>  <span class=\"kt\">string<\/span>               <span class=\"s\">`json:\"status\"`<\/span>\n        <span class=\"n\">Message<\/span> <span class=\"kt\">string<\/span>               <span class=\"s\">`json:\"message\"`<\/span>\n        <span class=\"n\">Result<\/span>  <span class=\"p\">[]<\/span><span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Transaction<\/span> <span class=\"s\">`json:\"result\"`<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c\">\/\/ Adicionamos as transa\u00e7\u00f5es \u00e0 nossa struct carteira<\/span>\n    <span class=\"n\">wallet<\/span><span class=\"o\">.<\/span><span class=\"n\">Transactions<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">wallet<\/span><span class=\"o\">.<\/span><span class=\"n\">Transactions<\/span><span class=\"p\">,<\/span> <span class=\"n\">transactions<\/span><span class=\"o\">.<\/span><span class=\"n\">Result<\/span><span class=\"o\">...<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"n\">wallet<\/span><span class=\"p\">,<\/span> <span class=\"no\">nil<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u06a9\u06cc\u0641 \u067e\u0648\u0644\/service.go \u062e\u0648\u062f \u0631\u0627 \u062a\u0645\u0627\u0645 \u06a9\u0631\u062f\u06cc\u0645 \u0648 \u06a9\u0644 \u0641\u0627\u06cc\u0644 \u0628\u0627\u06cc\u062f \u0645\u0627\u0646\u0646\u062f \u0627\u0635\u0644 \u0632\u06cc\u0631 \u0628\u0627\u0634\u062f:<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%AA%D9%88%D8%A7%D8%A8%D8%B9_gin_handler_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A7%D9%81%D8%B4%D8%A7%DB%8C_API_%D9%85%D8%A7\"><\/span>\n<p>  \u0627\u06cc\u062c\u0627\u062f \u062a\u0648\u0627\u0628\u0639 gin handler \u0628\u0631\u0627\u06cc \u0627\u0641\u0634\u0627\u06cc API \u0645\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u062f\u0627\u0645\u0647 \u0645\u0627 gin handlerFunc \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 \u06a9\u06cc\u0641 \u067e\u0648\u0644\/service.go \u062e\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0644\u0627\u0632\u0645 \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0627\u0632 \u0645\u0648\u062c\u0648\u062f\u06cc \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0648 \u062a\u0631\u0627\u06a9\u0646\u0634 \u0647\u0627\u06cc \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0627\u062a\u0631\u06cc\u0648\u0645 \u062f\u0631 \u0645\u0639\u0631\u0636 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc \u06af\u0630\u0627\u0631\u06cc\u0645.<\/p>\n<p>\u0645\u0627 \u06cc\u06a9 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u062f\u0631 \u0631\u06cc\u0634\u0647 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 cmd \u0645\u06cc \u06a9\u0646\u06cc\u0645 (\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 main.go \u0648 \u0628\u0633\u062a\u0647 handler \u0631\u0627 \u0627\u0632 API \u062e\u0648\u062f \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u06cc\u0645\u060c \u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0628\u0627\u06cc\u062f \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0628\u0627\u0634\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>.env.example\ncmd\n   |-- server\n   |   |-- handler\n   |   |   |-- wallet.go\n   |   |-- main.go\ninternal\n   |-- domain\n   |   |-- transaction.go\n   |   |-- wallet.go\n   |-- wallet\n   |   |-- dto.go\n   |   |-- service.go\n   |-- watcher\n   |   |-- service.go\npkg\n   |-- web\n   |   |-- response.go\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0628\u0633\u062a\u0647 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 wallet.go \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">package<\/span> <span class=\"n\">handler<\/span>\n\n<span class=\"k\">type<\/span> <span class=\"n\">walletHandler<\/span> <span class=\"k\">struct<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">s<\/span> <span class=\"n\">wallet<\/span><span class=\"o\">.<\/span><span class=\"n\">Service<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c\">\/\/ NewWalletHandler creates a new instance of the Wallet Handler.<\/span>\n<span class=\"k\">func<\/span> <span class=\"n\">NewWalletHandler<\/span><span class=\"p\">(<\/span><span class=\"n\">s<\/span> <span class=\"n\">wallet<\/span><span class=\"o\">.<\/span><span class=\"n\">Service<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span><span class=\"n\">walletHandler<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">walletHandler<\/span><span class=\"p\">{<\/span><span class=\"n\">s<\/span><span class=\"o\">:<\/span> <span class=\"n\">s<\/span><span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u062f\u0627\u062e\u0644 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0645\u0627 \u062f\u0648 \u062a\u0627\u0628\u0639 handler \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f: GetWalletByAddress() \u0648 GetTransactionsByAddress() \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0645\u0648\u062c\u0648\u062f\u06cc \u0648 \u062a\u0631\u0627\u06a9\u0646\u0634 \u0647\u0627\u06cc \u06a9\u06cc\u0641 \u067e\u0648\u0644:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"c\">\/\/ GetWalletByAddress get wallet info balance from a given address<\/span>\n<span class=\"k\">func<\/span> <span class=\"p\">(<\/span><span class=\"n\">h<\/span> <span class=\"o\">*<\/span><span class=\"n\">walletHandler<\/span><span class=\"p\">)<\/span> <span class=\"n\">GetWalletByAddress<\/span><span class=\"p\">()<\/span> <span class=\"n\">gin<\/span><span class=\"o\">.<\/span><span class=\"n\">HandlerFunc<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"k\">func<\/span><span class=\"p\">(<\/span><span class=\"n\">ctx<\/span> <span class=\"o\">*<\/span><span class=\"n\">gin<\/span><span class=\"o\">.<\/span><span class=\"n\">Context<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">ap<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"n\">Param<\/span><span class=\"p\">(<\/span><span class=\"s\">\"address\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">w<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">h<\/span><span class=\"o\">.<\/span><span class=\"n\">s<\/span><span class=\"o\">.<\/span><span class=\"n\">GetWalletBalanceByAddress<\/span><span class=\"p\">(<\/span><span class=\"n\">ap<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">web<\/span><span class=\"o\">.<\/span><span class=\"n\">BadResponse<\/span><span class=\"p\">(<\/span><span class=\"n\">ctx<\/span><span class=\"p\">,<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusBadRequest<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"error\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">())<\/span>\n            <span class=\"k\">return<\/span>\n        <span class=\"p\">}<\/span>\n        <span class=\"n\">web<\/span><span class=\"o\">.<\/span><span class=\"n\">OKResponse<\/span><span class=\"p\">(<\/span><span class=\"n\">ctx<\/span><span class=\"p\">,<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusOK<\/span><span class=\"p\">,<\/span> <span class=\"n\">w<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"c\">\/\/ GetTransactionsByAddress retrieves up to 10000 transactions by given adrress in a paggeable response<\/span>\n<span class=\"k\">func<\/span> <span class=\"p\">(<\/span><span class=\"n\">h<\/span> <span class=\"o\">*<\/span><span class=\"n\">walletHandler<\/span><span class=\"p\">)<\/span> <span class=\"n\">GetTransactionsByAddress<\/span><span class=\"p\">()<\/span> <span class=\"n\">gin<\/span><span class=\"o\">.<\/span><span class=\"n\">HandlerFunc<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"k\">func<\/span><span class=\"p\">(<\/span><span class=\"n\">ctx<\/span> <span class=\"o\">*<\/span><span class=\"n\">gin<\/span><span class=\"o\">.<\/span><span class=\"n\">Context<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">address<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"n\">Param<\/span><span class=\"p\">(<\/span><span class=\"s\">\"address\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">page<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"n\">Query<\/span><span class=\"p\">(<\/span><span class=\"s\">\"page\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">size<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"n\">Query<\/span><span class=\"p\">(<\/span><span class=\"s\">\"pageSize\"<\/span><span class=\"p\">)<\/span>\n\n        <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">page<\/span><span class=\"p\">)<\/span> <span class=\"o\">==<\/span> <span class=\"m\">0<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">page<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"1\"<\/span>\n        <span class=\"p\">}<\/span>\n        <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">size<\/span><span class=\"p\">)<\/span> <span class=\"o\">==<\/span> <span class=\"m\">0<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">size<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"10\"<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">if<\/span> <span class=\"n\">_<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">strconv<\/span><span class=\"o\">.<\/span><span class=\"n\">Atoi<\/span><span class=\"p\">(<\/span><span class=\"n\">page<\/span><span class=\"p\">);<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">web<\/span><span class=\"o\">.<\/span><span class=\"n\">BadResponse<\/span><span class=\"p\">(<\/span><span class=\"n\">ctx<\/span><span class=\"p\">,<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusBadRequest<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"error\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Sprintf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Invalid page param. Verify page value: %s\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">page<\/span><span class=\"p\">))<\/span>\n            <span class=\"k\">return<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">if<\/span> <span class=\"n\">_<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">strconv<\/span><span class=\"o\">.<\/span><span class=\"n\">Atoi<\/span><span class=\"p\">(<\/span><span class=\"n\">size<\/span><span class=\"p\">);<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">web<\/span><span class=\"o\">.<\/span><span class=\"n\">BadResponse<\/span><span class=\"p\">(<\/span><span class=\"n\">ctx<\/span><span class=\"p\">,<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusBadRequest<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"error\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Sprintf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Invalid pageSize param. Verify pageSize value: %s\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">size<\/span><span class=\"p\">))<\/span>\n            <span class=\"k\">return<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"n\">response<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">h<\/span><span class=\"o\">.<\/span><span class=\"n\">s<\/span><span class=\"o\">.<\/span><span class=\"n\">GetTransactionsByAddress<\/span><span class=\"p\">(<\/span><span class=\"n\">address<\/span><span class=\"p\">,<\/span> <span class=\"n\">page<\/span><span class=\"p\">,<\/span> <span class=\"n\">size<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">web<\/span><span class=\"o\">.<\/span><span class=\"n\">BadResponse<\/span><span class=\"p\">(<\/span><span class=\"n\">ctx<\/span><span class=\"p\">,<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusBadRequest<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"error\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">())<\/span>\n            <span class=\"k\">return<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">var<\/span> <span class=\"n\">pageableResponse<\/span> <span class=\"k\">struct<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">Page<\/span>  <span class=\"kt\">string<\/span>      <span class=\"s\">`json:\"page\"`<\/span>\n            <span class=\"n\">Items<\/span> <span class=\"kt\">string<\/span>      <span class=\"s\">`json:\"items\"`<\/span>\n            <span class=\"n\">Data<\/span>  <span class=\"k\">interface<\/span><span class=\"p\">{}<\/span> <span class=\"s\">`json:\"data\"`<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"n\">pageableResponse<\/span><span class=\"o\">.<\/span><span class=\"n\">Page<\/span> <span class=\"o\">=<\/span> <span class=\"n\">page<\/span>\n        <span class=\"n\">pageableResponse<\/span><span class=\"o\">.<\/span><span class=\"n\">Items<\/span> <span class=\"o\">=<\/span> <span class=\"n\">size<\/span>\n        <span class=\"n\">pageableResponse<\/span><span class=\"o\">.<\/span><span class=\"n\">Data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">response<\/span>\n\n        <span class=\"n\">web<\/span><span class=\"o\">.<\/span><span class=\"n\">OKResponse<\/span><span class=\"p\">(<\/span><span class=\"n\">ctx<\/span><span class=\"p\">,<\/span> <span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusOK<\/span><span class=\"p\">,<\/span> <span class=\"n\">pageableResponse<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0627\u0632\u06af\u0634\u062a \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0647\u0645\u0632\u0645\u0627\u0646\u060c \u062f\u0631 \u062f\u0627\u062e\u0644 \u0641\u0627\u06cc\u0644 main.go \u062e\u0648\u062f\u060c walletService \u0648 walletHandler \u062e\u0648\u062f \u0631\u0627 \u0646\u0645\u0648\u0646\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u06cc\u06a9 \u0633\u0631\u0648\u0631 \u062c\u06cc\u0646 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646 \u0646\u0645\u0648\u0646\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">func<\/span> <span class=\"n\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n\n    <span class=\"n\">wService<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">wallet<\/span><span class=\"o\">.<\/span><span class=\"n\">NewService<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">wHandler<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">handler<\/span><span class=\"o\">.<\/span><span class=\"n\">NewWalletHandler<\/span><span class=\"p\">(<\/span><span class=\"n\">wService<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">r<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">gin<\/span><span class=\"o\">.<\/span><span class=\"n\">New<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">Use<\/span><span class=\"p\">(<\/span><span class=\"n\">gin<\/span><span class=\"o\">.<\/span><span class=\"n\">Recovery<\/span><span class=\"p\">(),<\/span> <span class=\"n\">gin<\/span><span class=\"o\">.<\/span><span class=\"n\">Logger<\/span><span class=\"p\">())<\/span>\n\n    <span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">GET<\/span><span class=\"p\">(<\/span><span class=\"s\">\"https:\/\/dev.to\/\"<\/span><span class=\"p\">,<\/span> <span class=\"k\">func<\/span><span class=\"p\">(<\/span><span class=\"n\">c<\/span> <span class=\"o\">*<\/span><span class=\"n\">gin<\/span><span class=\"o\">.<\/span><span class=\"n\">Context<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">JSON<\/span><span class=\"p\">(<\/span><span class=\"n\">http<\/span><span class=\"o\">.<\/span><span class=\"n\">StatusOK<\/span><span class=\"p\">,<\/span> <span class=\"n\">gin<\/span><span class=\"o\">.<\/span><span class=\"n\">H<\/span><span class=\"p\">{<\/span>\n            <span class=\"s\">\"message\"<\/span><span class=\"o\">:<\/span> <span class=\"s\">\"Everything is okay here\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">})<\/span>\n    <span class=\"p\">})<\/span>\n\n    <span class=\"n\">api<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">Group<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/api\/v1\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"n\">ethNet<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">api<\/span><span class=\"o\">.<\/span><span class=\"n\">Group<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/eth\/wallets\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"n\">ethNet<\/span><span class=\"o\">.<\/span><span class=\"n\">GET<\/span><span class=\"p\">(<\/span><span class=\"s\">\":address\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">wHandler<\/span><span class=\"o\">.<\/span><span class=\"n\">GetWalletByAddress<\/span><span class=\"p\">())<\/span>\n            <span class=\"n\">ethNet<\/span><span class=\"o\">.<\/span><span class=\"n\">GET<\/span><span class=\"p\">(<\/span><span class=\"s\">\":address\/transactions\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">wHandler<\/span><span class=\"o\">.<\/span><span class=\"n\">GetTransactionsByAddress<\/span><span class=\"p\">())<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c\">\/\/ Start the Gin server in a goroutine<\/span>\n    <span class=\"k\">go<\/span> <span class=\"k\">func<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">Run<\/span><span class=\"p\">(<\/span><span class=\"s\">\":8080\"<\/span><span class=\"p\">);<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"ERROR IN GONIC: \"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"o\">.<\/span><span class=\"n\">Error<\/span><span class=\"p\">())<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}()<\/span>\n\n    <span class=\"c\">\/\/ Contains filtered fields or functions<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0627 \u0628\u0627\u06cc\u062f \u0633\u0631\u0648\u0631 \u062c\u06cc\u0646 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646 \u0628\u0647 API \u062e\u0648\u062f \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0633\u0631\u0648\u06cc\u0633 \u0646\u0627\u0638\u0631 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0645\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0647\u0645\u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0634\u0648\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0633\u0631\u0648\u06cc\u0633 \u0646\u0627\u0638\u0631 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646 \u062f\u06cc\u06af\u0631\u06cc \u0634\u0631\u0648\u0639 \u0645\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">func<\/span> <span class=\"n\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c\">\/\/ Filtered fields or functions<\/span>\n\n    <span class=\"c\">\/\/ Start our watcher<\/span>\n    <span class=\"k\">go<\/span> <span class=\"n\">watcher<\/span><span class=\"o\">.<\/span><span class=\"n\">StartWatcherService<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"c\">\/\/ Wait for the server and the watcher service to finish<\/span>\n    <span class=\"k\">select<\/span> <span class=\"p\">{}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0627 \u0627\u062c\u0631\u0627\u06cc API \u0648 \u0633\u0631\u0648\u06cc\u0633 \u0646\u0627\u0638\u0631 \u062e\u0648\u062f \u0631\u0627 \u0646\u0647\u0627\u06cc\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c \u0632\u06cc\u0631\u0627 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u0645 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646\u200c\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0646\u0627\u0638\u0631 \u0647\u0645\u0686\u0646\u0627\u0646 \u0628\u0647 \u0627\u062c\u0631\u0627 \u062f\u0631\u0622\u06cc\u0646\u062f \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627 \u0627\u0646\u062a\u062e\u0627\u0628{} \u0631\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f\u060c \u0645\u0646\u062a\u0638\u0631 \u062a\u06a9\u0645\u06cc\u0644 \u0622\u0646\u200c\u0647\u0627 \u0645\u06cc\u200c\u0645\u0627\u0646\u0646\u062f\u060c \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0645\u0627 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646 \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u06cc\u06a9 \u0627\u0632 \u06a9\u06cc\u0641\u200c\u067e\u0648\u0644\u200c\u0647\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645. &#8220;\u0628\u0631\u0627\u06cc&#8221; \u0628\u062f\u0648\u0646 \u0628\u0646\u062f \u062e\u0631\u0648\u062c\u060c \u0645\u0633\u0626\u0648\u0644 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u062a\u06a9\u0645\u06cc\u0644 \u0634\u062f\u0646 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646 \u0647\u0627\u06cc \u0645\u0627 \u067e\u0633 \u0627\u0632 \u0627\u0648\u0644\u06cc\u0646 \u0627\u062c\u0631\u0627\u06cc \u0622\u0646\u0647\u0627 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"c\">\/\/watcher\/service.go<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"n\">StartWatcherService<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c\">\/\/ Contains filtered fiels or functions<\/span>\n\n        <span class=\"k\">go<\/span> <span class=\"k\">func<\/span><span class=\"p\">(<\/span><span class=\"n\">wallet<\/span> <span class=\"n\">domain<\/span><span class=\"o\">.<\/span><span class=\"n\">Wallet<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">for<\/span> <span class=\"p\">{<\/span>\n                <span class=\"c\">\/\/ Get the balance of the address<\/span>\n                <span class=\"n\">balance<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">ethClient<\/span><span class=\"o\">.<\/span><span class=\"n\">BalanceAt<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"o\">.<\/span><span class=\"n\">Background<\/span><span class=\"p\">(),<\/span> <span class=\"n\">common<\/span><span class=\"o\">.<\/span><span class=\"n\">HexToAddress<\/span><span class=\"p\">(<\/span><span class=\"n\">wallet<\/span><span class=\"o\">.<\/span><span class=\"n\">Address<\/span><span class=\"p\">),<\/span> <span class=\"no\">nil<\/span><span class=\"p\">)<\/span>\n\n                <span class=\"c\">\/\/ Contains filtered fields or functions<\/span>\n\n                <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Sleep<\/span><span class=\"p\">(<\/span><span class=\"m\">300<\/span> <span class=\"o\">*<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Millisecond<\/span><span class=\"p\">)<\/span> <span class=\"c\">\/\/ Wait for a while before checking for the next block<\/span>\n\n                <span class=\"c\">\/\/ Contains filtered fields or functions<\/span>\n                <span class=\"p\">}<\/span>\n        <span class=\"p\">}<\/span>\n        <span class=\"c\">\/\/ Esperando por todas as goroutines para finalizar - n\u00e3o ir\u00e1 finalizar por conta do for rodando pelo infinito<\/span>\n        <span class=\"n\">wg<\/span><span class=\"o\">.<\/span><span class=\"n\">Wait<\/span><span class=\"p\">()<\/span>\n\n        <span class=\"c\">\/\/ Contains filtered fields or functions<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AA%DB%8C%D8%AC%D9%87\"><\/span>\n<p>  \u0646\u062a\u06cc\u062c\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0647\u0645\u0632\u0645\u0627\u0646 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u062f\u0631 \u062a\u0648\u0633\u0639\u0647 \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631 \u0627\u0633\u062a\u060c \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\/\u0622\u0645\u0648\u0632\u0634 \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645 \u062f\u06cc\u062f\u06cc\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0622\u0646 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0622\u0646\u0647\u0627 \u0631\u0627 \u062f\u0631 \u0648\u0627\u0686 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0627\u062a\u0631\u06cc\u0648\u0645 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u06a9\u0646\u06cc\u0645\u060c 20 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0631\u0627 \u0628\u0627 \u0647\u0632\u0627\u0631\u0627\u0646 \u06cc\u0627 \u0647\u0632\u0627\u0631\u0627\u0646 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0631\u0627 \u0628\u0627 \u0647\u0632\u0627\u0631\u0627\u0646 \u06a9\u06cc\u0641 \u067e\u0648\u0644 \u0645\u0628\u0627\u062f\u0644\u0647 \u06a9\u0646\u06cc\u0645. \u0635\u0641\u200c\u0647\u0627\u06cc \u067e\u06cc\u0627\u0645 \u06cc\u0627 \u062c\u0631\u06cc\u0627\u0646\u200c\u0647\u0627\u06cc \u062f\u0627\u062f\u0647\u060c \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc go \u0627\u0632 \u0645\u0646\u0627\u0628\u0639 \u0645\u0648\u062c\u0648\u062f \u0645\u0631\u0627\u0642\u0628\u062a \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0647 \u0646\u062d\u0648 \u0627\u062d\u0633\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f.  \u062f\u0631 \u0645\u062b\u0627\u0644 \u0645\u0627\u060c 20 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646\u06cc \u06a9\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0647\u0645\u0632\u0645\u0627\u0646 \u062f\u0631 \u0647\u0631 300 \u0645\u06cc\u0644\u06cc \u062b\u0627\u0646\u06cc\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f\u060c 63 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a \u0627\u0632 \u062d\u0627\u0641\u0638\u0647 \u0645\u0648\u062c\u0648\u062f \u0645\u0635\u0631\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 CPU 6\u066a \u0628\u0648\u062f\u060c \u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 \u062f\u0631 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0645\u0634\u062a\u0631\u06a9 \u0627\u0632 256 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a \u0627\u0632 \u0633\u0637\u062d \u0631\u0627\u06cc\u06af\u0627\u0646 Fly.io \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u0634\u062f:<br \/><br \/><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/07\/1688369245_752_\u0633\u0627\u062e\u062a\u0646-\u062a\u0645\u0627\u0634\u0627\u06af\u0631-\u06a9\u06cc\u0641-\u067e\u0648\u0644-\u0627\u062a\u0631\u06cc\u0648\u0645-\u0628\u0627-\u0627\u0633\u062a\u0641\u0627\u062f\u0647-\u0627\u0632-\u0628\u0631\u0646\u0627\u0645\u0647-\u0646\u0648\u06cc\u0633\u06cc.png\" alt=\"\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 CPU\" loading=\"lazy\" width=\"800\" height=\"548\" title=\"\"><\/p>\n<p>\u0627\u0645\u06cc\u062f\u0648\u0627\u0631\u0645 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0645\u0641\u06cc\u062f \u0628\u0648\u062f\u0647 \u0628\u0627\u0634\u062f \u0648 \u0628\u0647 \u0634\u0645\u0627 \u062f\u0631 \u062f\u0631\u06a9 \u0628\u0647\u062a\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0647\u0645\u0632\u0645\u0627\u0646 \u0648 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646 \u0647\u0627 \u062f\u0631 Go \u06a9\u0645\u06a9 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u062f.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0639\u06a9\u0633 \u0631\u0648\u06cc \u062c\u0644\u062f \u062a\u0648\u0633\u0637 Mika Baumeister \/ Unsplash \u062f\u0631 \u0622\u062e\u0631\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u062e\u0648\u062f \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646\u06a9\u0647 \u0686\u0642\u062f\u0631 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0647\u0645\u0632\u0645\u0627\u0646 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0632\u0628\u0627\u0646 Go \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f \u0635\u062d\u0628\u062a \u06a9\u0631\u062f\u0645\u060c \u062f\u06cc\u062f\u06cc\u0645 \u06a9\u0647 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0622\u0646 \u0686\u0642\u062f\u0631 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u0648 \u0686\u0642\u062f\u0631 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u06a9\u0627\u0631\u0622\u0645\u062f \u0628\u0627\u0634\u062f\u060c \u0628\u0647 \u0644\u0637\u0641 \u0633\u0627\u062e\u062a \u0622\u0646 \u06a9\u0647 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":28997,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-28996","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/28996","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=28996"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/28996\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/28997"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=28996"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=28996"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=28996"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}