این سری پست ها یه راهنمای کلی برای توسعه اپلیکیشن های اتریوم با استفاده از Go هستن، و اگه آشنایی خوبی با اتریوم و Go دارید میتونن نقطه شروع خوبی برای به کارگیریشون با هم باشن. توی این سری آموزش نحوه برقراری ارتباط با بلاکچین و تعامل با قرارداد های هوشمند رو با استفاده از GoLang مورد بررسی قرار میدیم.
منبع اصلی مورد استفاده من کتاب goethereumbook نوشته شده توسط Miguel Mota هست که به صورت آزاد، رایگان و با فرمت های مختلف در دسترسه و خوندنش رو شدیدا توصیه میکنم.
هرجا هم که بتونم مطلبی اضافه میکنم :)
کلاینت نقطه ورود ما به شبکه اتریومه.
کلاینت برای انتشار تراکنشها و خواندن دادههای بلاکچین مورد نیازه. توی این بخش نحوه راه اندازی این کلاینت رو بررسی میکنیم. برای این کار اول از همه پکیج ethclient از go-ethereum رو وارد میکنیم و با اجرای Dial راهاندازی اولیش رو انجام میدیم که یه آدرس ارائهدهنده هم میگیره.
برای آدرس ارایه دهنده انتخاب های زیادی هست. یکی از اونها استفاده از infura هست که درگاهی امن، قابل اعتماد و مقیاس پذیر برای تعامل با شبکه اتریوم به ما میده. همینطور یه انتخاب خیلی خوب دیگمون alchemy هست. اینجا برای نمونه از درگاه اتریوم cloudflare استفاده کردیم.
client, err := ethclient.Dial("https://cloudflare-eth.com")
همینطور اگه یه نسخه geth درحال اجرای لوکال داشته باشیم میتونیم مسیر فایل اندپوینت IPC رو بهش بدیم.
client, err := ethclient.Dial("/home/user/.ethereum/geth.ipc")
شبکه های تست لوکال
برای تست و توسعه صرفا نیاز نیست از این درگاه های مختلف استفاده کنیم، مخصوصا با در نظر گرفتن سرعت و کیفیت ارتباط، خیلی به صرفه تره که از شبکه های تست لوکال استفاده کنیم.
استفاده از Ganache
یکی از این شبکه ها Ganache هست که به عنوان پیاده سازی ای از اتریوم با node.js برای تست و توسعه لوکال مورد استفاده قرار میگیره. اینجا ما مراحل نصب و اتصال بهش رو میبینیم.
اول با استفاده از NPM نصبش میکنیم.
npm install -g ganache-cli
و بعد کلاینت CLI اون رو اجرا میکنیم.
ganache-cli
حالا میتونیم به شکل قبل از آدرس RPC اون توی کدمون برای اتصال بهش استفاده کنیم.
client, err := ethclient.Dial("http://localhost:8545")
همینطور میتونیم توی زمان اجرای Ganache از mnemonic های قبلی استفاده کنیم که دوباره آدرس های قبلی رو برامون ایجاد کنه.
ganache-cli -m "much repair shock carbon improve miss forget sock include bullet interest solution"
همینطور توصیه میشه که با خوندن داکیومنتیشن Ganache بیشتر باهاش آشنا بشید، اگه نمیخواید از کلاینت CLI استفاده کنید هم نسخه GUI اش موجوده.
استفاده از Hardhat
انتخاب دیگه ای که داریم استفاده از Hardhat هست که بیشتر توصیه میکنم، Hardhat یک فریمورک برای تست و توسعه قرارداد های هوشمند اتریومه که به همراهش یک پیاده سازی شبکه اتریوم برای تست لوکال داره.
برای استفاده از Hardhat به دایرکتوری مورد نظر میریم.
mkdir hardhat-tutorial cd hardhat-tutorial
و پروژه NPM جدیدی رو راهاندازی اولیه میکنیم.
npm init
حالا میتونیم Hardhat رو نصب کنیم.
npm install --save-dev hardhat
بعد از نصب توی همون دایرکتوری دستور زیر رو اجرا میکنیم.
npx hardhat
و از گزینه های موجود Create an empty hardhat.config.js رو انتخاب میکنیم تا یه پروژه خالی بهمون تحویل بده. این فایل تنظیمات Hardhat رو شامل میشه.
حالا میتونیم شبکه تستی لوکال خودمون رو اجرا کنیم.
npx hardhat node
و مثل قبل بهش متصل بشیم.
client, err := ethclient.Dial("http://localhost:8545")
کد کامل
package main import ( "fmt" "log" "github.com/ethereum/go-ethereum/ethclient" ) func main() { client, err := ethclient.Dial("https://cloudflare-eth.com") if err != nil { log.Fatal(err) } fmt.Println("we have a connection") _ = client // we'll use this in the upcoming sections }
بخش بعدی در مورد اکانت های اتریوم و والت ها، ایجاد، استفاده، ذخیره سازیشون و تعامل باهاشونه.