Как да синхронизирам Ethereum възел, без да правя грешките, които направих

Когато за първи път започнах да се развивам на платформата Ethereum, синхронизирането на възел беше едно от първите няколко неща, които направих. Тъй като нямаше кой да ме държи за ръка и нямаше къде да консолидирам всички често срещани грешки, които срещнах, пропилях седмици, просто синхронизирайки възел. Беше толкова главоболие, че почти се отказах.

Непознаването на терминологията само затрудни.

И така, в тази статия искам да консолидирам всички често срещани грешки, с които може да се сблъскате, и да обясня причините зад всяка стъпка при синхронизиране на възел. Надяваме се, че няма да имате толкова неприятен ранен опит като мен.

Бързо въведение

В Ethereum разработчиците създават части от приложение, които работят в мрежата. Те се наричат интелигентни договори . Въпреки че можете да ги разположите ръчно, без да синхронизирате с възел Ethereum, в дългосрочен план е по-удобно за процеса на разработка да се синхронизира (особено когато искаме да използваме рамки за разработка като Truffle).

За да синхронизираме Ethereum възел, ще ни е необходим следният софтуер:

  • Geth - Клиент за Ethereum възел.
  • Ethereum Wallet - Потребителски интерфейс за Ethereum възел.

Да започваме.

Инсталирайте Geth

За да изтеглите Geth, отидете тук за потребители на Windows. След това кликнете върху бутона „Geth за Windows“.

За потребители на MacOS препоръчвам да изтегляте с помощта на homebrew. Можете да го направите със следните команди:

brew tap ethereum/ethereumbrew install ethereum

Вижте инструкциите на Geth за повече подробности.

Проверете дали Geth е инсталиран правилно, като напишете geth versionв терминала (MacOS) или PowerShell (Windows).

Инсталирайте Ethereum Wallet

GUI, който взаимодейства с мрежата, наричаме „портфейл“. Можете да намерите много различни портфейли за Ethereum с бързо търсене в Google (като Parity, Jaxx и MyEtherWallet). Аз лично обичам да използвам Ethereum Wallet. Той има удобен за потребителя интерфейс и аз също съм малко пристрастен, защото е разработен от самия Ethereum.

Можете да намерите инсталатора тук.

Забележка: Предпочитам Ethereum Wallet пред Mist . Mist е основно браузър, който прави децентрализирани приложения (dApps) и уебсайтове.

За разработването на интелигентен договор ще ни е необходим само Ethereum Wallet.

Mainnet срещу Testnet

В Ethereum има две основни мрежи: mainnet и testnet.

Главната мрежа се използва за транзакция на истински етер. Стойността на Ether е обвързана с реална фиатна валута чрез борси за криптовалути.

Като разработчици не искаме да провеждаме тестове за приложения с реални пари. За това е тестовата мрежа.

Ние наричаме тестовата мрежа Ропстен .

Стартирайте Geth и Ethereum Wallet

Когато разработвате интелигентен договор, първо трябва да синхронизирате тестовата мрежа. Ще трябва да синхронизираме главната мрежа само когато сме готови за разполагане.

За да синхронизирате тестова мрежа, ще ви трябват около 30 GB място за съхранение. Тъй като има повече транзакции в основната мрежа, ще ви трябват около 100 GB, за да синхронизирате основната мрежа.

Забележка: някои казват, че имате нужда от SSD хранилище за бързо писане, за да може синхронизирането да навакса най-новия блок. Лично аз намирам, че HDD съхранението е наред. Ако обаче ми бъде даден избор, определено бих използвал SSD съхранение.

За потребители на Windows

За лесен достъп препоръчвам да създадете папка за съхранение на блокчейна. Например „C: \ EthereumTestnet“.

След като създадете папката, опитайте да изпълните следната команда:

geth — testnet — data-dir=”C:\EthereumTestnet” — rpc — rpcapi eth,web3,net,personal

Редактиране: Изглежда, че някои аргументи са се променили. Ако срещнете такава грешка „флагът е предоставен, но не е дефиниран: -data-dir“, опитайте да промените името на аргумента на - datadir вместо на data-dir.

Аргументът --testnetуказва, че искаме да се синхронизираме с мрежата Ropsten. По този начин, за да синхронизирате основната мрежа, просто трябва да извадите аргумента --testnetи да промените директорията с данни. Например:

geth — data-dir=”C:\EthereumMainnet” — rpc — rpcapi eth,web3,net,personal

На --rpcаргумента дава възможност на HTTP-RPC сървър. Това ни позволява да използваме определени услуги, като това, което е посочено в --rpcapi eth,web3,net,personal.

След въвеждане на командата трябва да видите нещо подобно:

За да не повредите блокчейна, особено след много часово синхронизиране, НЕ трябва да затваряте рязко командния ред. Винаги спирайте синхронизирането, като натиснете Ctrl + C и изчакайте, докато Geth изключи програмата вместо вас.

Трудно е обаче да запомните всички командни и rpc услуги, от които се нуждаете. Ето защо предлагам да създадете пряк път или команден файл, който да ви помогне.

Просто създайте файл, като използвате всеки текстов редактор, който имате, и го запазете като .bat файл. Например RunGethTestnet.bat (името не е важно). Копирайте и поставете командата във файла и я запазете. Следващият път, когато трябва да стартирате Geth за Ropsten, просто щракнете два пъти върху файла.

След като стартираме Geth, трябва да стартираме Ethereum Wallet. Тъй като искаме интерфейсът да намери точното място, където сме синхронизирали нашите файлове с помощта на Geth, ние го изпълняваме от конзолата.

Подобно на Geth, и аз запазих партиден файл за него с примерна команда, като тази по-долу:

Имайте предвид, че вашата команда може да изглежда малко по-различно от моята, тъй като можете да съхранявате приложението си в друга директория.

Като алтернатива можете да добавите приложението към вашия път.

Аргументът --node-datadir="C:\EthereumTestnet"посочва къде съм съхранил данните си от веригата, които са точно същите, които посочих за Geth.

За потребители на Mac

Това е малко по-просто за MacOS, защото данните на веригата се изтеглят автоматично в библиотеката и не са скрити от нас. Така че, няма да е необходимо да посочваме директорията с данни.

Въпреки това препоръчвам да създадете скриптов файл, за да улесните стартирането на Geth и Ethereum Wallet.

Забележка: Geth трябва да работи преди Ethereum Wallet .

Самото стартиране на Ethereum Wallet автоматично ще стартира процеса на синхронизиране, тъй като автоматично ще стартира Geth клиент във фонов режим. Това е удобно за потребителя, но не позволява RPC услугите, които искаме да използваме. По този начин искаме да гарантираме, че RPC е активиран както в изпълнението на Geth, така и в Ethereum Wallet.

Няколко бележки

  1. Процесът на синхронизиране е много дълъг и може да отнеме до 2-3 дни. Моля, имайте търпение и помислете дали да оставите компютъра си включен за една нощ.
  2. Скоростта на синхронизиране зависи от вашата интернет скорост, броя на връстниците и скоростта на запис на вашето устройство за съхранение.
  3. Тъй като данните се съхраняват в блокове и се свързват заедно, повредата в един блок може да повреди цялата верижна информация. Това потенциално може да загуби усилията ви в дни на изчакване, за да се синхронизира възелът. Ето защо е много важно да изключите правилно своя Geth. В някои случаи може да искате да върнете обратно. Но превенцията е по-добра от лечението тук.
  4. Лентата за напредъка на вашия Ethereum Wallet НЕ е точна. Разчитането на него ще ви достави много безпокойство и разочарование.
  5. Geth работи на порт 30303 за външно слушане.
  6. Портът по подразбиране, използван за вътрешна комуникация, например между вашия портфейл и Geth, е 8545.

Уверете се, че вашият порт към Geth клиент е отворен

Наистина е важно да се уверите, че връзката с вашия Geth клиент не е ограничена. Едно огромно главоболие, което срещнах, беше да позволя на защитната ми стена да ограничи броя на връзките, които можех да имам чрез клиента на Geth.

Можете да забележите този проблем, като погледнете броя на връстниците . Ако остане постоянно ниско на около 1–3 връстници (за поне половин час), има голяма вероятност връзката ви да е ограничена. Здравословният диапазон е над 5 връстници.

Потребители на MacOS

Когато стартирате Geth, трябва да има известие, за да разрешите свързването. Е, разбира се, кликнете върху „Разреши.

За да проверите, отидете на Системни предпочитания> Система и поверителност.

В раздела Защитна стена кликнете върху Опции на защитната стена .

Потребители на Windows

За да отворите порта си, отидете на Контролен панел> Система и защита> Защитна стена на Windows Defender.

Щракнете върху Разширени настройки . На страничния панел кликнете върху Входящи правила .

Входящите портове, които искате да отворите, са TCP и UDP 30303. Затова създадох едно правило за TCP 30303 и друго за UDP 30303.

Може да се наложи да отворите изходящите си портове и за TCP 30303.

Имайте предвид, че всяка защитна стена / антивирус на трета страна може да ограничи и вашите връзки, така че не забравяйте да я конфигурирате по съответния начин.

Прикрепете към Geth

За да извлечете повече информация за вашия възел, можете да се прикачите към клиента Geth и да изпълнявате команди с него, използвайки RPC услугите.

Ето един лесен начин да проверите състоянието си на синхронизиране: прикачете се към клиента, като въведете следната команда на отделен терминал / конзола.

geth attach //127.0.0.1:8545

Отново, може да искате да го съхраните в партиден / скриптов файл за ваше удобство.

След като изпълните командата, трябва да видите нещо подобно.

Въведете web3.ethи трябва да видите много информация. За да извлечете конкретна информация за синхронизирането, въведете web3.eth.syncingвместо това.

Както можете да видите, лентата за напредъка в горната част на Ethereum Wallet е просто сравнение между най- високия и текущия блок . Тъй като highestBlock известно, че компютърът ви може да не действителната най-висока блок, лентата за напредъка може да не отразява реалната напредък.

Всъщност, най- високият блок и известните държави ще продължат да се увеличават, докато синхронизирате вашите възли.

Някои финални точки

Тъй като технологията се променя бързо, винаги използвайте стабилната версия на клиента и портфейла, за да не си създавате повече главоболия.

Също така имайте предвид, че винаги има решение за всеки проблем, с който се сблъсквате. Когато се сблъскате с проблем при синхронизирането, можете да опитате да търсите решения, тъй като вероятно не сте първият, който се сблъсква със същия проблем.

И винаги си напомняйте, че не е необходимо да синхронизирате възел, за да разработите интелигентен договор. Това само помага да улесните разбирането си за околната среда, както и процеса на развитие. Така че, не се бийте, ако срещнете проблеми толкова рано в процеса на разработка.

За повече от такива статии, следвайте ме или посетете моя сайт - перспектива на разработчика.