Published on
Solana

บันทึก Solana Blockchain Developer Bootcamp โดย Chainlink

chainlink-bootcamp-solana-2022

สวัสดีครับ วันนี้เป็นการจัดบันทึกนะครับ เนื้อหาอาจจะไม่ได้เรียบเรียงเท่าไหร่ เมื่อสัปดาห์ที่แล้ว ผมได้เรียน Bootcamp ที่จัดโดย Chainlink ครับ เป็น Online Bootcamp 2วัน เลือกเรียนได้ วันธรรมดา หรือ วันหยุด ซึ่งผมเลือกเรียนวันเสาร์ อาทิตย์ เพราะว่างแค่ช่วงนั้น

คอร์สมี 2 วัน แบ่งเป็นวันละ 3 ชั่วโมง

  • วันแรกเรียนเกี่ยวกับ Solana และการเขียน Program on chain ด้วย Solana Program
  • วันที่สองใช้ Anchor และมีติดต่อกับ Chainlink เพื่อดึง PriceFeed มาแสดง ใน Exercises สุดท้าย

เรียนผ่าน Zoom ถามตอบเป็นข้อความ และก็มี Google Meet ระหว่างทำ exercise (ผมไม่ได้เข้าไปแฮะ เลยไม่รู้เป็นไง) และก็ถามตอบใน Discord ในห้อง #bootcamp ของ Chainlink ได้เช่นกัน

ต้องบอกว่าช่วงนี้ตั้งแต่ต้นปี ผมเริ่มสนใจ Web3 / Blockchain มากๆ(ก่อนหน้านี้แค่พออ่าน contract ได้คร่าวๆ พอรู้ว่าฟังค์ชั่นทำอะไร แต่ไม่เคยลงมือเขียนจริงๆเลย ฮ่าๆ) แต่เอาจริงๆ ก็ยังไม่รู้ว่าจะโฟกัสไปที่ตรงไหน น่าสนใจไปหมด ก็เลยลองมันหลายๆ อย่างไปก่อน เอาที่ทำแล้วสนุก เรียนแล้วสนุก แล้วเดี๋ยวมันจะรู้เองว่าไปต่อตรงไหน 🤣

ซึ่งบางส่วนผมก็จดๆ ไว้ใน repo แล้ว แต่เดี๋ยวเอาพวก script หรือ snippet มาใส่ไว้ในโพสนี้ เผื่อใครที่หลงเข้ามาอ่าน และสนใจพอดี

ตัวคอร์ส, Presentation และสรุป รวมถึง Exercises Source Code เดี๋ยวทาง Chainlink จะเอามาสรุปเขียนบล็อกให้อีกทีครับ

Day 1

  • วันแรกจะเรียนแบบพื้นฐาน Overview เกี่ยวกับ Solana ว่าคืออะไร ทำอะไรได้บ้าง
  • อธิบายการ send transaction / เกี่ยวกับ PoH consensus
  • Program คือ on-chain smart contract เป็น stateless ไม่มี global variable.
  • Instruction มี ProgramId, Accounts และ Instruction Data (ดูได้ใน entrypoint)
  • Accounts ประกอบไปด้วย Public Key, is_signer และ is_writeable
  • Data - เป็น byte array สำหรับส่ง input data ไป on-chain program.
  • เรื่องของ Storage rent อันนี้ยังไม่ค่อยเข้าใจเท่าไหร่
  • Program compile เป็น BPF (Berkley Packet Filter)
  • Program เขียนด้วยภาษาอะไรก็ได้ ขอให้ compile เป็น BPF bytecode ได้ก็พอ
  • อธิบายพื้นฐาน Rust

ตัว Solana Project Layout จะเป็นแบบนี้

├── Cargo.toml
└── src
    ├── entrypoint.rs
    ├── instruction.rs
    ├── lib.rs
    ├── processor.rs
    └── state.rs

entrypoint เป็น function หลักที๋โปรแกรมทำงาน

  • Native Program เช่น System Program, Config Program, Stake Program
  • ติดตั้ง Solana Tool Suite
  • Solana Explorer เอาไว้ดู เหมือนกับ etherscan

ตัว test validator มาพร้อมกับ Solana CLI

solana-test-validator
  • Serialize คือการแปลง memory object เป็น -> stream of bytes.
  • Deserialize คือการแปลง stream of bytes เป็น -> object
  • การส่งข้อมูลผ่าน JSON RPC ต้อง serialzie/deserialize

ตัวอย่าง

Program ID: abcdefg12345
Accounts: <Acct1, Acct2>
Data: [1,2,3,4,5,6]
  • ใช้ Borsh ในการจัดการเรื่อง Serialize/Deserialize
  • Solana Program Library(SPL) เอาไว้เขียน Token Program, Token swap, Token Lending เป็นต้น
  • Program Derived Address (PDA) - account เจ้าของ program (ไม่ได้ใช้ private key) ให้ program sign โดยไม่ต้องใช้ private key
  • ตัวอย่าง Exercise 2 ทำ Token Contract.

เราสามารถสร้าง Token เองได้ โดยไม่ต้องเขียนโค๊ดซักบรรทัดก็ได้ โดยใช้ spl-token-cli

Day 2

  • ทำ GM เหมือนเดิม แต่มาใช้ Anchor แทน ซึ่งง่ายมาก ไม่ต้องเสียเวลา deserialize/serialize แล้ว
  • Anchor Book กับ Anchor Getting Started
  • Anchor program มี program module, Account structs และ declare id macro (เก็บ address ของ program)
  • anchor init <program_name> ไว้สร้างโปรเจ็คด้วย anchor
  • สร้าง IDL คล้ายๆกับ ABI ของ EVM-based
  • ฝั่ง client ตัว anchor อ่านค่าจาก IDL (เหมือน web3/ethers) จริงๆ syntax คล้ายๆ web3/ethers มากๆ
  • anchor build สำหรับ build และ anchor deploy [cluster] สำหรับ deploy
  • ยังไม่ค่อยเข้าใจวิธีการคำนวน space
  • Exercises 2 ทำ Solana Social Program ระบบ Blog Post มี new post, update และ delete
  • Exercises 3 เชื่อม Price Feed กับ Chailink (ยังไม่ mainnet ใช้ devnet)
  • วันนี้ส่วนใหญ่คือนั่งโค๊ด (ส่วนใหญ่ copy-paste จาก exercises) ยังแทบจะทำไม่ทันเลย
  • แนะนำ resources ต่างๆ ที่ไว้อ่านเพิ่มเติม ซึ่งจริงๆ ก็รู้หมดแล้ว ที่เหลือก็แค่ หาเวลาอ่าน หาเวลาเรียน แล้วก็ฝึกเท่านั้น

รีวิวหลังเรียน

ต้องบอกว่าจริงๆ เนื้อหามันเยอะมากๆ Presentation ก็ค่อนข้างโอเค และตัว Exercises ก็มีหลายๆ ตัวอย่าง ทำให้เห็นภาพในหลายๆ use case ถึงแม้ว่า ส่วนมาก คือการ copy-paste มาวางเพื่อรันโปรแกรม (เนื่องด้วยเวลาจำกัด)

แต่เราก็สามารถมานั่งทบทวนทีหลังได้ ว่าทำไม Program มันถึงรันได้แบบนี้ ซึ่ง ก็เป็นส่วนที่ทำไมผมถึงเขียนบันทึกไว้ และอัพโค๊ดลง Github เผื่อเอาไว้ทบทวน และเรียนรู้เพิ่มเติม

จบ ด้วยการนอนดึก (เกือบเช้า) ทั้งสองวัน เพราะหลังจบคอร์ส ก็นั่งอ่าน นั่งเขียนโค๊ดไป เพลินๆ ดูนาฬิกาอีกที ตี4 ตี5 ซะแล้ว

สุดท้าย Chainlink Hackathon จะมีวันที่ 22 เมษายน - 27 พฤษภาคม นะครับ ลองไปติดตามดูได้

Authors
Discord