Devahoy Logo
PublishedAt

Foundry

ติดตั้งและลองใช้งาน Foundry

ติดตั้งและลองใช้งาน Foundry

วันนี้ได้ลองหัดเล่น Foundry ซึ่งเคยติดตั้งไว้นานมากๆ แล้ว แต่ไม่ได้ใช้งานซักที ฮ่าๆ วันนี้ลองมานั่งอ่าน Foundry Book นั่งเล่นใหม่ พบว่ามันน่าสนใจมากๆ

ตัว Foundry ให้คำนิยามตัวเองไว้ คือ Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.

GitHub - foundry-rs/foundry: Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust. - GitHub - foundry-rs/foundry: Foundry is a blazing fast, portable and modular toolkit…GitHubfoundry-rs

ซึ่งถ้าแบ่งเป็นหมวดหมู่ จะมี 4 ส่วนคือ

  • forge - Development tools เหมือน Hardhat ช่วย build, test, deploy Contract
  • cast - เป็น Command Line Tool สำหรับ Ethereum RPC
  • anvil - เป็นเหมือน Local Testnet คล้ายๆกับ Ganache หรือ Hardhat Node
  • chisel - เป็น Solidity REPL

การติดตั้ง

การติดตั้งง่ายมาก แค่สั่งรัน Script ผ่าน Terminal

Terminal window
curl -L https://foundry.paradigm.xyz | bash

ซึ่งเครื่องผม (Mac OS) มี warning เกี่ยวกับ libusb ก็เลยต้องลงเพิ่ม

Terminal window
brew install libusb

เมื่อรัน Script ติดตั้ง Foundry เสร็จ ก็รันคำสั่ง (ต้อง เปิด/ปิด Terminal ใหม่)

Terminal window
foundryup

การใช้งาน

วิธีการเรียนรู้ที่ดีที่สุด คือลงมือทำ เริ่มจากลองสร้างโปรเจ็คขึ้นมา

Terminal window
$ forge init hello_foundry
  • src - เป็น folder ที่เก็บ Contract
  • test - ไฟล์ test เป็น Solidity
  • foundry.toml - เป็น configuration files คล้ายๆ hardhat.config.js

ทดลอง build และ test ดูว่าเร็วแค่ไหน อ่าน log อ่านผลลัพธ์ดู

Terminal window
forge build
forge test

เขียน Test

ปกติเราเขียน Contract เป็น Solidity และเวลาเทส (Hardhat, Truffle) จะใช้ JavaScript ซึ่งตอนช่วงที่ผมหัดเขียน ผมก็แอบสงสัย ทำไมเราไม่เขียนเป็น Solidity ให้หมดเลย

พอเจอ Foundry ก็เห็นว่าตัวเทสก็เป็น Solidity เลย ตัว Contract เขียนไว้ยังไง เวลาเทส ก็เขียนคล้ายๆกัน ก็ทำให้ดู Logic ง่ายดีเหมือนกัน

ชอบตรง test เราสามารถ log level ได้เช่น

Terminal window
forge test -vv
forge test -vvvvv

Cast

เป็นเหมือนชุดคำสั่ง ผ่าน Command ส่วนใหญ่ ก็เอาไว้จัดการกับ Ethereum RPC ต่างๆ สามารถ call contract ทำการส่ง transactions ได้ รวมถึง ดึงข้อมูล blockchain, balance, abi, utilities หรือจัดการ wallet ได้หมดเลย ดูคำสั่งเพิ่มเติม

Terminal window
cast --help

เช่น ดู transaction

Terminal window
cast tx 0xab4e378941d462fb7b1f97fed7fec8ea5d93d50a120b3a67b97c9b1ac88003b9 --rpc-url=https://rpc.ankr.com/eth

ดูค่า gas

Terminal window
cast gas-price --rpc-url=https://rpc.ankr.com/eth

เราสามารถ กำหนด eth_rpc_url ใน foundry.toml ได้ จะได้ไม่ต้องใส่เป็น option ทุกครั้ง

Convert wei

Terminal window
cast --from-wei 123450000000000000
cast --to-wei 0.5

อันนี้จากตัวอย่างในหนังสือ ผมชอบมาก call contract ได้เลย (ตัวอย่างคือ call totalSupply() ของ DAI

Terminal window
$ cast call 0x6b175474e89094c44da98b954eedeac495271d0f "totalSupply()(uint256)" --rpc-url https://eth-mainnet.alchemyapi.io/v2/Lc7oIGYeL_QvInzI0Wiu_pOZZDEKBrdf
8603853182003814300330472690

เทียบกับ Hardhat

เนื่องจากผมเคยใช้แค่ Hardhat ก็เลยอยากลอง List ดูว่า มีอะไรเหมือน หรือคล้ายๆ กับที่ใช้ Hardhat เวลาจะเปลี่ยนมาใช้ จะได้เข้าใจมากขึ้น

  • ใช้ร่วมกับ Hardhat ได้ มีทั้ง Plugin ของ Foundry หรือใช้ hardhat-foundry ก็ได้
  • foundry.toml เหมือน hardhat.config.js เราสามารถกำหนด compiler, etherscan, private key, network อื่นๆ ได้
  • Foundry ใช้ Rust ส่วน Hardhat เป็น Node.js ฉะนั้นตัว library จะต่างกัน Hardhat ลง node_modules ซึ่งเราสามารถใช้ร่วมกันในโปรเจ็คได้ (แต่อาจจะต้อง config นิดนึง)
  • ตัว Foundry Test ได้ไวกว่า (อ่านจากบล็อกต่างๆ ส่วนผมยังไม่เคยได้เทสเองนะ 😅)
  • รู้สึกว่า Foundry ตัว Script ที่ Deploy มัน command line ยาวมาก อาจจะต้องทำเป็น Makefile, shell script และก็ตัว config ไม่แน่ใจแยก network ได้มั้ย หรือต้องคอย remapping ส่วนนี้ยังไม่ได้อ่าน

สรุป

วันนี้ก็ลองเล่นไปนิดๆหน่อย สิ่งที่เขียนหรือเข้าใจ ก็อาจจะผิดก็ได้นะครับ เดี๋ยววันถัดๆไป จะอ่านและทำความเข้าใจเพิ่ม เริ่มจากพวก Tutorials นี้ Creating an NFT with Solmate และก็จะลองเอาโปรเจ็คงาน Hardhat มาแปลงเป็น Foundry หรือใช้ร่วมกันดู ไว้มาเขียนบล็อกอัพเดทใหม่ วันหน้า

Happy Coding ❤️

References

Hardhat foundry Foundry Book

Authors
avatar

Chai Phonbopit

เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust

Related Posts