در روزهای اخیر با توجه به رشد زیاد استفاده از پروژههای دیفای (DeFi) رشد چشمگیری در قیمت ارزهای دیجیتال دیده شده است. اتریوم هم از این موضوع مستثنی نبوده است. ارز دیجیتال اتریوم به تازگی فاز صفر خود را با تست چندکاربره اتریوم ۲ توسط Medella راهاندازی کرد. این تست توسط Goerli در اتریوم ۱ پشتیبانی میشود. در این مقاله، قصد داریم به مراحل مورد نیاز برای تبدیل شدن به یک نود اتریوم ۲ بپردازیم. در ابتدا باید ببینیم لایت هوس چیست.
لایت هاوس (Light House) چیست؟
لایت هاوس یک شرکت امنیت اطلاعات و مهندسی نرم افزار است که به عنوان یکی از اعضای تیم سازندۀ اتریوم ۲ در میان ۹ عضو دیگر قرار دارد. از زبان برنامه نویسی Rust استفاده میکند و تمرکز شدیدی بر سرعت و امنیت دارد. همچنین این شرکت از بنیاد اتریوم، ConsenSys و شخص ویتالیک بوترین سرمایه دریافت کرده است.
نکات لازم برای تبدیل شدن به نود اتریوم ۲
طی کردن مراحل لازم برای تبدیل شدن به یک نود اتریوم ۲ کار سادهای نیست و شما برای این کار باید دانش نسبی و صحیحی راجع به سیستمعاملهای پیشرفتۀ لینوکس همچون Firewall، SSH، حسابهای کاربری و پیکربندی سرویسهای لینوکس داشته باشید. همچنین باید بدانید که چگونه میتوان یک فول نود اتریوم ۱٫۰ بود و با مفاهیم پایهای و بنیادین تکنولوژی بلاکچین و اتریوم همچون عبارات بازیابی، کلیدهای خصوصی و عمومی، آدرسها، کیف پول متامسک، قراردادهای سالیدیتی (Solidity Contracts)، و تراکنشها آشنا باشید.
در ادامه به مراحل لازم برای تبدیل شدن به نود اتریوم ۲ اشاره خواهیم کرد. طی کردن این مراحل ممکن است وقتگیر باشد.
مراحل لازم :
- یکی از نودهای تستی اتریوم ۱٫۰ در Goerli را از سرور مربوطه نصب کنید و سپس اجازه دهید که با تست نت آخرین بلاک، سینک (Synch) شود.
- سپس نود Lighthouse beacon را نصب و تنظیم نمایید.
- قرارداد واریز را تکمیل کنید.
- کلیدهای ولیدیتور (Validator) را ایجاد و فعال کنید.
- ولیدیتور لایت هاوس کاربر را تنظیم نمایید.
مرحلۀ پیشنیاز (آماده سازی نود اتریوم ۲)
برای این کار میتوان از یک سرور کامودیتی (Commodity) در Digital ocean یا Raspberry pi 4 استفاده کرد. اگر دستگاه توسط ساب نت عمومی/خصوصی با VPC در AWS پشتیبانی شود، تنظیمات سرور باید مطابق با پورتهای زیر صورت بگیرد. علاوه بر این برای این تنظیمات نیاز به استفاده از یک سرویس UFW فایروال لینوکس دارید.
سپس سیستم خود را بهروزرسانی و آپدیت کنید.
sudo apt-get update -y && sudo apt-get upgrade -y
به صورت پیشفرض UFW غیرفعال است و برای فعالسازی آن باید موارد زیر را بررسی کنید:
- پورت ۲۲ برای اتصال به SSH
- پورت TCP/UDP 30303 برای تعامل نود Geth با دیگر نودهای همتایش
- ۹۰۰۰/TCP و ۹۰۰۰/UDP برای صدور مجوز اتصال P2P لایت هاوس با همتایان دیگرش برای فعالیت در نود Beacon
دستورات Ufw را به صورت زیر اجرا کنید.
> ufw allow 22/tcp > ufw allow 30303/tcp > ufw allow 30303/udp > ufw allow 9000/tcp > ufw allow 9000/udp > ufw enable > ufw status numbered
خروجی باید چیزی شبیه به متن زیر باشد.
>ufw status numbered Status: active
To Action From -- ------ ---- [ ۱] ۲۲/tcp ALLOW IN Anywhere [ ۲] ۳۰۳۰۳/tcp ALLOW IN Anywhere [ ۳] ۳۰۳۰۳/udp ALLOW IN Anywhere [ ۴] ۹۰۰۰/tcp ALLOW IN Anywhere [ ۵] ۹۰۰۰/udp ALLOW IN Anywhere [ ۶] ۲۲/tcp (v6) ALLOW IN Anywhere (v6) [ ۷] ۳۰۳۰۳/tcp (v6) ALLOW IN Anywhere (v6) [ ۸] ۳۰۳۰۳/udp (v6) ALLOW IN Anywhere (v6) [ ۹] ۹۰۰۰/tcp (v6) ALLOW IN Anywhere (v6) [۱۰] ۹۰۰۰/udp (v6) ALLOW IN Anywhere (v6)
مرحله اول: نصب و راهاندازی نود GO Ethereum
> sudo add-apt-repository -y ppa:ethereum/ethereum > sudo apt-get update > sudo apt-get install ethereum
Go ethereum را نصب کنید.
برای تبدیل شدن به نود اتریوم ۲، از آنجایی که قرار است سیستمهای مختلفی در سرور اجرا شوند و این سیستمها به صورت مجزا کار میکنند، میبایست آنها را به شکل سرویسهای لینوکس نصب و تنظیم نمایید.
Go ethereum به عنوان سرویس پشتیبان
- یک حساب کاربری مهمان (no-home account) ایجاد کنید. این حساب نمیتواند به سرور وارد شود.
- یک فهرست داده برای زنجیرۀ Georli ایجاد کنید. این کار برای ذخیرۀ اطلاعات بلاک در نود Goerli مورد نیاز است.
- مجوزهای لازم را ایجاد کنید. حساب کاربری goerli برای توصیف فهرست دادهها به مجوزهایی نیاز دارد.
- برای ذخیرۀ تنظیمات سرویس، یک Systemd service file ایجاد کنید. این کار بعدتر برای دستور اجرای پروسۀ Geth به Systemd لازم است.
> sudo useradd --no-create-home --shell /bin/false goerli > sudo mkdir -p /var/lib/goethereum > sudo chown -R goerli:goerli /var/lib/goethereum > sudo nano /etc/systemd/system/geth.service
تنظیمات سرویس Geth را با استفاده از کدهای زیر بهروزرسانی کنید. همچنین میتوانید از دستورات زیر در مواقع نیاز استفاده نمایید.
[Unit] Description=Ethereum go client After=network.target Wants=network.target[Service] User=goeth Group=goeth Type=simple Restart=always RestartSec=5 ExecStart=/usr/bin/geth --goerli --http --datadir /var/lib/goethereum --bootnodes "enode://d67359082562e4a599d0572c5a04909ca6e8650228c98f0a3a6844514f3a1ae0a8b0b6fe635a2e2f0e0e6be9f08d80f1994f4399e154134bc07080f0b0b64e42@68.183.59.172:30303,enode://95f5d03a95e7c5d0eb655b2fe3b5495b86d424b4681a200d402c30f233e1edc1846f2837b0dfe7df691fe007236ed1998d178774c9b8bc049be75a2c21038978@95.217.215.48:30303,enode://79e5d36f90ee0314293f4c1b1a4cd9ea13f1acd3d79b5a506870c70b6dbac6f9652ca86455886be854c9a1cfcc00d82cf0fa5d256bf7c40ae1fae0c21b437c7d@13.66.153.22:37912,enode://a9f7bb623c007d2b28038978dac6ebbe945c74f07cc91820c88cc95633b29468ca4708781fc99346a74ee43024b5e7cbb8b0803a988b57841b757cf975efa333@104.211.30.135:30303,enode://02200a7b5253969458e2addf6838b3f064c9c6b22288e92848a7ac5a367553d8d8c871b1af0603ac6ac2118bc15795b5aefe2d29b4729ae1e61e51a14201c8e9@18.194.247.237:30303,enode://553b679e4f84048f4340de271025fdd047869b39d419352d30cfd48dc97868263c8dc1481337946a41ef2836d2b5afece993012af982d8097de4cc062f50cda1@52.87.240.248:48584,enode://4531d2559d9707406f5132d9e9490b9ab6b1fa62ba9b10486d3f0eb7d8f6643b25f679c28ba4d4e0ac8e218d424aed8bd3a0a4ba9dd7bdec4823047adb8d0145@24.74.186.77:36804,enode://aaf930ed9bd450fe48b2f953da22393d6a0d0fdb2810ed16885d382d67fd89108d5777161c3b7401b922f34d8c416c74770f901147faf79c190de5bbbf0e3cc8@192.241.134.195:30303,enode://00e496ab9153d4dd8b88275352831fd3c75fdc255e57fdf9fe5875164672fb722889b0732f8df9aab3e16e82bef9b979840800e740bca1914252c598378ec52e@24.4.149.245:30304,enode://d26b54f391088fa3868811c643a72f42ea23be850670695c52bdd5ef6421e227c376d476e94e32de09793eec38cacaf69bd6f79f71a34e8662cc9ed0b35e7976@185.228.47.193:30303,enode://15032b1dcc97ebcbb9e060c27b775b81472653d19f932f75d0fd96a2ec1184698c7064401a01b08533783d8039c837a1dce3d69c23ef22289f02bb53a1dd70f7@202.187.155.60:30303,enode://4d03cdfa08658d6737fd18507b54e6653a236d41039d0dd8a3f9d0a3b06dff98c2af903daf99fe4cd2c6bfbb36f47554151336f42b971698c8bccf970f28c98a@51.210.9.77:40404,enode://3d4d8863396c39fa0710504dbe8803b776bef9d7fe3f732967fb8681552fd6d2dbe0c6f4642b45528060f5b168820ae93eb14d260617d29d815ffadc5c7db6f2@95.216.206.118:30303,enode://9a3f770e82a128ea27d1b73ca9819b05cf6f16275b7d9ee6151efe751966c771f7a82425447be97119743680c3bd421f024eccf24066aa46020d061aac5128dc@64.120.90.247:33656,enode://f7d7aa996c18e45efbe9b8a532f9f32bbdef027dc60a6999b6a06b97b3bd933995280b0a1390a4281edc2556ddfc46521814feb0e5839f82010dcaba1afec445@51.77.211.174:30303,enode://bfe4ae8c9638e56dc6c252d5fdf8fd7251b2ad82cbb89c56923c2e6ece2f5f71888d1fa6849a2f6aee901835876d6001bfce8aa29fa27aa4715fc2420596e399@155.93.136.72:56792,enode://10e545ef1ede27c90ef69863d50328f66de1ac806c67cf60d1bb4c72cc644fe11b6597ebd30d9e100d7ccdd05ae6b5d133d93122d81139baab03c2dd9e10c758@95.217.12.192:30303,enode://ca77b80280e607104f3997e92f1e9ea14e009cd51a471960f43c2a5c0f95405e6f669ac15a46db4f3dbdc77411551926dca0da0db32680a21b65cef80273bf5a@150.214.106.123:47524,enode://00b77e6c1f44719d48b305da24965e6c7b8af5ec614e883efb0c80617670585c4a949fe4a3fbacf6454afce7d074ecaac40213a893425522f1e941de71c007ed@155.93.196.78:58992,enode://6781b3fa91a8e5b2a89682f9307d2b66e21a4ae595d1b2dfe2662e5fbf7326f5db7a9acdcc64e8402b31a1e8fbefc6ba13fa0af4015a373a42a4de14fd6a306b@164.90.236.249:30303,enode://1d63c062e215caa90ab8348ab25bc38546d7112bf829d5e9a272e88fab0869bbef206e848acb4290448c6b6e077f312efef6075116a9bbeb0b069a95dbd7f103@86.88.214.39:30303,enode://6b5ee2f457fc091b762f9a058d35f7fc73f1c8116a1853b3db2279eba56dbd990c309084c002476a9cb1b8584ac3ee58e91184376ad22af337088ea357f0ef2e@86.154.249.228:30303,enode://c40e962b9bb3433303ea77a9d785faa4a6c43d67d813f3cbe42006412df64a74aab206c7138b90a74e4152bde99f5f94a310fe673e9c5b5b899c5c61e5c28de5@82.233.188.75:30303"[Install] WantedBy=default.target
–goerli به عنوان یک فلگ (Flag) برای اجرای شبکۀ آزمایشی Goerli، –http به عنوان یک فلگ برای نمایش اندپوینتی که به زنجیرۀ Beacon متصل میشود و –bootnodes به عنوان یک فلگ برای اتصال نودهای انتخابی به نودهای Geth استفاده میشوند.
برای اعمال تغییرات، آغاز به کار سیستم و حصول اطمینان از عملکرد درست، Systemd را مجدداً بارگیری نمایید.
> sudo systemctl daemon-reload > sudo systemctl start geth > sudo systemctl status geth geth.service - Ethereum go client Loaded: loaded (/etc/systemd/system/geth.service; enabled; vendor preset: enabled) Aug 13 12:04:00 ubuntu-s-2vcpu-4gb-sgp1-eth geth[852]: INFO [08–۱۳|۱۲:۰۴:۰۰٫۶۵۴] Imported new chain segment blocks=1 txs=0 mgas=0.000 elapsed=”۲۲۳٫۳۴۳µs” mgasps=0.0 Aug 13 12:04:13 ubuntu-s-2vcpu-4gb-sgp1-eth geth[852]: INFO [08–۱۳|۱۲:۰۴:۱۳٫۰۹۵] Chain reorg detected number=3217563 hash=”d20e45…۴۸۸۱۸۲" drop=1 dropfrom=”۶۸۸۲ Aug 13 12:04:13 ubuntu-s-2vcpu-4gb-sgp1-eth geth[852]: INFO [08–۱۳|۱۲:۰۴:۱۳٫۰۹۵] Imported new chain segment blocks=1 txs=3 mgas=0.796 elapsed=13.377ms mgasps=59.
نمایان شدن این تصویر به معنی آغاز به کار نود است. ممکن است چند ساعت تا چند روز طول بکشد تا نود به طور کامل با بلاکچین Goerli سینک شود.
مرحله دوم: ساخت لایت هاوس (Lighthouse)
موارد مورد نیاز جانبی را نصب نمایید.
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
همانطور که میدانید، لایت هاوس با زبان برنامه نویسی Rust نوشته شده است. زمانی که Rust توصیف متغیر PATH را آغاز نماید، باید از حساب خود خارج و مجدداً وارد شوید یا ممکن است با خطای Command not found روبهرو شوید.
To get started you need Cargo’s bin directory ($HOME/.cargo/bin) in your PATH environment variable. Next time you log in this will be done automatically.
همچنین در این پروسه به (git, gcc, g++, make, cmake, …) نیاز دارید.
$ sudo apt install -y git gcc g++ make cmake pkg-config libssl-dev $ sudo apt update
ساخت لایت هاوس
جهت تبدیل شدن به نود اتریوم ۲، بعد از نصب موارد جانبی، باید یک حساب کاربری لایت هاوس ایجاد کنید. در این مرحله، یک لایت هاوس باینری (Lighthouse binary) ایجاد میشود. این باینری میتواند برای اجرای نودهای Beacon و کاربران ولیدیتور نیز استفاده شود. منبع اصلی لایت هاوس را شبیهسازی کنید و سپس با استفاده از گزینۀ make، لایت هاوس باینری را کامپایل کنید و به فولدر bin منتقل نمایید.
> git clone https://github.com/sigp/lighthouse.git > cd lighthouse > make > sudo cp /$HOME/.cargo/bin/lighthouse /usr/local/bin
مرحلۀ سوم: تنظیمات نود Beacon
توجه داشته باشید که شما نود Beacon را به عنوان یک سرویس اجرا کردهاید و در صورتی که سیستم شما مجدداً راهاندازی شود، این پروسه نیز به صورت خودکار شروع به بکآپگیری میکند.
پیاده سازی نود بیکن به عنوان سرویس پشتیبان نود اتریوم ۲
- یک حساب کاربری مهمان در Lighthousebeacon ایجاد کنید.
- به منظور ذخیره سازی اطلاعات نود توسط نود Lighthouse beacon، یک فهرست داده ایجاد کنید.
- مجوزهای لازم را ایجاد کنید. حساب کاربری Lighthousebeacon برای توصیف فهرست دادهها به این مجوزها نیاز دارد.
- در کیف پول متامسک خود یک آدرس جدید اتریوم ۱ ایجاد نمایید و با استفاده از آیکون نارنجیرنگ مربوط به لایت هاوس که در سمت چپ قرار دارد، آن آدرس را کپی کنید.
- از طریق مراجعه به آدرس زیر، نشان POAP (Proof of Attendance Protocol) را دریافت کنید. جایگذاری آن در بلاک اکسپلورر، گواهی برای مشارکت شما در فاز آزمایشی تلقی میشود.
یک Systemd file service برای ذخیرهسازی تنظیمات سرویس ایجاد نمایید. بعداً برای ارسال دستور اجرای پروسۀ Lighthousebeacon به Systemd از فایل تنظیمات استفاده خواهید کرد.
> sudo useradd --no-create-home --shell /bin/false lighthousebeacon > sudo mkdir -p /var/lib/lighthouse/beacon-node > sudo chown -R lighthousebeacon:lighthousebeacon /var/lib/lighthouse/beacon-node > sudo nano /etc/systemd/system/lighthousebeacon.service
با استفاده از کدهای زیر، تنظیمات Lighthiussebeacon service را آپدیت کنید.
[Unit] Description=Lighthouse Beacon Node After=network.target Wants=network.target[Service] User=lighthousebeacon Group=lighthousebeacon Type=simple Restart=always RestartSec=5 ExecStart=/usr/local/bin/lighthouse beacon_node --datadir /var/lib/lighthouse/beacon-node --testnet medalla --http --eth1-endpoint http://127.0.0.1:8545 --graffiti <abcdefg12345saf>[Install] WantedBy=default.target
برای اعمال تغییرات، آغاز به کار سیستم و حصول اطمینان از عملکرد درست، Systemd را مجدداً بارگیری نمایید.
> sudo systemctl daemon-reload
> sudo systemctl start lighthousebeacon
> sudo journalctl -f -u lighthousebeacon.serviceAug 12 08:09:50 ubuntu-s-2vcpu-4gb-sgp1-eth lighthouse[7237]: Aug 12 08:09:50.000 INFO Syncing est_time: 40 mins, speed: 5.33 slots/sec, distance: 12820 slots (1 days 18 hrs), peers: 51, service: slot_notifier
Aug 12 08:10:02 ubuntu-s-2vcpu-4gb-sgp1-eth lighthouse[7237]: Aug 12 08:10:02.001 INFO Syncing est_time: 39 mins, speed: 5.33 slots/sec, distance: 12693 slots (1 days 18 hrs), peers: 51, service: slot_notifier
Aug 12 08:10:14 ubuntu-s-2vcpu-4gb-sgp1-eth lighthouse[7237]: Aug 12 08:10:14.001 INFO Syncing est_time: 31 mins, speed: 6.67 slots/sec, distance: 12630 slots (1 days 18 hrs), peers: 53, service: slot_notifier
Aug 12 08:10:26 ubuntu-s-2vcpu-4gb-sgp1-eth lighthouse[7237]: Aug 12 08:10:26.001 INFO Syncing est_time: 31 mins, speed: 6.67 slots/sec, distance: 12567 slots (1 days 17 hrs), peers: 52, service: slot_notifier
اجازه دهید که نود بیکن با آخرین وضعیت، سینک و منطبق شود. ‘est_time’ توسط ETA نمایش داده میشود. نمایان شدن تصویر زیر به معنای سینک کامل نود بیکن است.
> sudo journalctl -f -u lighthousebeacon.service Aug 12 10:28:20 ubuntu-s-2vcpu-4gb-sgp1-eth lighthouse[7237]: Aug 12 10:28:20.893 INFO New block received hash: 0x7d84…۹۵d2, slot: 56841, service: router Aug 12 10:28:26 ubuntu-s-2vcpu-4gb-sgp1-eth lighthouse[7237]: Aug 12 10:28:26.000 INFO Synced slot: 56841, block: 0x7d84…۹۵d2, epoch: 1776, finalized_epoch: 1774, finalized_root: 0x9bf1…f0db, peers: 55, service: slot_notifier Aug 12 10:28:33 ubuntu-s-2vcpu-4gb-sgp1-eth lighthouse[7237]: Aug 12 10:28:33.846 INFO New block received hash: 0xcb1f…۰۵bc, slot: 56842, service: router Aug 12 10:28:38 ubuntu-s-2vcpu-4gb-sgp1-eth lighthouse[7237]: Aug 12 10:28:38.000 INFO Synced slot: 56842, block: 0xcb1f…۰۵bc, epoch: 1776, finalized_epoch: 1774, finalized_root: 0x9bf1…f0db, peers: 52, service: slot_notifier
مرحلۀ چهارم: تعیین سهم ولیدیتور در مدلا (Medella)
Goerli Staking Ethereum را دریافت کنید.
- با استفاده از فاست موجود در تست نت Goerli درخواست ۳۲ ETH را ثبت کنید.
- اگر چندین ولیدیتور نود اتریوم ۲ دارید، میتوانید این درخواست را به ازای هر یک از آنها ثبت نمایید.
- زمانی که Goerli Ethereum در کیف پول متامسک شما نمایان شد، میتوانید وارد مرحلۀ بعد شوید.
استیکینگ Goerli ETH
برای نصب اسکریپت ‘eth2deposit’ و اجرای آن مطابق با دستورات دادهشده، مراحل زیر را طی کنید:
> cd ~ > curl -LO https://github.com/ethereum/eth2.0-deposit-cli/releases/download/v0.2.1/eth2deposit-cli-v0.2.1-linux-amd64.tar.gz eth2deposit-cli-v0.2.1-linux-amd64.tar.gz 100%[========================================================================================>] 14.56M 5.47MB/s in 2.7s ۲۰۲۰-۰۸-۱۲ ۰۷:۱۹:۲۵ (۵٫۴۷ MB/s) - 'eth2deposit-cli-v0.2.1-linux-amd64.tar.gz' saved [15271039/15271039] -rw-r--r-- 1 root root 15M Jul 28 07:10 eth2deposit-cli-v0.2.1-linux-amd64.tar.gz> tar -xzf eth2deposit-cli-v0.2.1-linux-amd64.tar.gz > cd eth2deposit-cli-de03fe3-linux-amd64 -rwxr-xr-x 1 goerli lighthousebeacon 15M Jul 28 07:00 deposit> ./deposit --num_validators 1 --chain medallaPlease choose your mnemonic language (italian, korean, spanish, chinese_traditional, chinese_simplified, english, czech) [english]: <Enter> Type the password that secures your validator keystore(s): <Enter the password> Repeat for confirmation: <Enter the password>This is your seed phrase. Write it down and store it safely, it is the ONLY way to retrieve your deposit. <Enter your mnemonics>Press any key when you have written down your mnemonic.Creating your keys. Saving your keystore(s). Creating your deposit(s). Verifying your keystore(s). Verifying your deposit(s).Success! Your keys can be found at: /root/eth2deposit-cli-de03fe3-linux-amd64/validator_keys➜ validator_keys l total 16K drwxr-xr-x 2 root root 4.0K Aug 12 07:25 . drwxrwxr-x 3 goerli lighthousebeacon 4.0K Aug 12 07:25 .. -rw-r--r-- 1 root root 647 Aug 12 07:25 deposit_data-1597217105.json -rw-r--r-- 1 root root 710 Aug 12 07:25 keystore-m_12381_3600_0_0_0-1597217104.json> sudo chown -R root:root /var/lib/lighthouse/validator > lighthouse account validator import - directory ~/eth2deposit-cli-de03fe3-linux-amd64/validator_keys - validator-dir /var/lib/lighthouse/validator Successfully moved keystore. Successfully updated validator_definitions.yml. Successfully imported 1 validators.
میتوانید تراکنشهای استیکینگ در تست نت Goerli را رهگیری نمایید. تمامی کسانی که از زمان اتریوم ۱ فعالیت میکنند، میدانند که در قراردادهای سالیدیتی ایجادشده توسط MedellaBeaconContractor، به ارسال ۳۲ Goerli ETH قبل از تبدیل به یک ولیدیتور در بلاکچین Beacon نیاز است. این ۳۲ اتریوم برای پروسۀ استیکینگ استفاده میشود و احتمالاً دیگر قابل برداشت نیست.