ทำความรู้จัก Solana 101 แบบเดฟ ๆ

Blockchain & Cryptocurrency Jul 23, 2025

ในปีนี้ก็ไม่ได้ปั่นของส่งงาน Solana Breakout Hackathon ของทาง Colosseum อีกเช่นเคย แต่ได้ฟังความรู้จากคอมมู Solana Developer Thailand แล้วสนุกดี ได้เรียนรู้อะไรใหม่ ๆ เลยมาแบ่งปันในเพจ แล้วเขียนลงในนี้อีกทีนึง

กับ 5 session ที่เราได้เข้าไปฟัง ดังนี้

ทำความรู้จัก core concept เบื้องหลังการโอนเหรียญบน Solana

การโอนเหรียญบน Solana ทำงานยังไง?

มาทำความรู้จัก Core Concept ของ Solana กัน

สรุปจาก session “Token Transfer Hooks with Token Extensions on Solana” ของทาง Solana Developer Thailand จากคุณกอล์ฟ จากทาง Moose Labs เรียกได้ว่าเปิดโลกมาก ๆ เพราะทางนี้เป็น web2 developer เป็นหลัก แหะ ๆ

เขาบอกให้ทิ้ง concept ของเชนอื่นไปก่อน เพราะแนวคิดต่างจากเชนอื่น ๆ 😆

🟣 Solana Core Concepts

ของ Solana มองว่าเป็นการเช่า storage เป็นช่อง ๆ แต่ละช่องเขาเรียกว่า account ซึ่งมี 2 ประเภทด้วยกัน

  • State Account: เก็บ data บนเชน เช่น Mint account เก็บข้อมูลของ account เช่น token หมูเด้ง เจ้าของเป็นใคร, Token account
  • Stateless Account + Executable: เช่าและเก็บ logic บางอย่างใน account และสามารถ execute ได้ โดยการโยน logic ของ smart contract เข้าไป เช่น Token Program, Swap Program

🟣 SPL Token Standard

หลังจากเรามี account สามารถเปลี่ยนเป็นอะไรได้บ้าง แล้วเหตุการณ์ในเชนเกิดอะไรขึ้นบ้าง เช่น ตอน transfer token ไปให้เพื่อน

  • Token Program: เป็น executable ในการทำ function พื้นฐาน อย่างการ mint (เสกเหรียญ), transfer (โอนเหรียญ), burn (เผาเหรียญ) สำหรับ Fungible Token อย่างพวกเหรียญต่าง ๆ และ Non Fungible Token ก็คือ NFT นั่นแหละ
  • Mint Account: เป็น readonly อ่านอย่างเดียว เก็บ data ที่เกี่ยวข้องกับเหรียญ เช่น เหรียญนี้ คนที่มีสิทธิแก้ไข, supply ทั้งหมดของเหรียญ, decimal, เหรียญนี้ถูก init หรือยัง, คนที่มีสิทธิ freeze ไม่ให้เกิดการโอนขึ้นเป็นใคร
  • Token Account: เป็น mutable (เขียนได้นั่นแหละ) สมมุติโอนเหรียญ MOODENG กัน มีการสร้าง MOODENG token account เพื่อเก็บข้อมูลว่าเหรียญที่เก็บอยู่คือเหรียญอะไร, เจ้าของคือใคร, ถือเหรียญกันอยู่เท่าไหร่, ใครที่มีสิทธิ์ใช้เงินของเรา, เป็น native หรือ SOL ไหม (น่าจะไม่), ตัวแทนดึงเหรียญไปใช้ได้เท่าไหร่, ใครมีสิทธิ์ปิด account

flow: โอน MOODENG instruct ไปให้ Token Program เอา instruction มาแกะ แล้วมา check ว่า mint ถูกต้อง ตัว Token Program เปลี่ยนค่า sender และ recipient โดยการลบฝั่ง sender และเพิ่ม recipient ใน field amount (ไม่มีการ consensus ก่อนบันทึกบน blockchain ใช่ไหมนะ)

สรุป: token account แก้ token program กับ mint account อ่านได้อย่างเดียว

ทำไมถึงออกแบบซับซ้อน? ถ้า 2 account ที่ถูกแก้ไข สามารถทำ parallel พร้อมกับคนอื่น และอ่านพร้อมกันได้หมด ถ้าแก้ไขก็ต้องรอกัน ถ้าไม่แก้ก็ทำพร้อมกัน ทำให้จัดการ transection แบบ parallel ได้ ไม่จำเป็นต้องรอ

Instruction คราฟเพื่อ execute instruction การโอน ใน 1 อันประกอบด้วย

  • Program ID: บอกว่ากำลัง execute program อะไร
  • Accounts: เรียกใช้งาน token ไหนบ้าง มี 4 account และระบุแต่ละ account ว่าทำหน้าที่อะไรบ้าง ซึ่งก็คือเมื่อกี้นั่นแหละ มี writable 2 Token Account คือคนส่ง กับคนรับ, readonly ก็คือ Mint Account และตัว signer ก็คือ Token Program
  • Instruction Data: บอกว่าใน program นี้เรากำลังจะ call function อะไร และมี parameter อะไรบ้าง เช่น TransferChecked มี amount เท่าไหร่ และ decimal เป็นอะไร

ทั้งหมดที่ฟังก็คือเป็นการโอน token account แบบปกติ สามารถ mint เพิ่มได้ โอนได้ burn ได้ ซึ่งความสามารถจะถูก freeze แค่นี้ เพราะ token program สร้างด้วยทีม Solana และอยู่บน on-chain

การสร้างเหรียญใหม่ ก็ทำ Mint Account, Token Account และใช้ Token Program ร่วมกัน

🟣 Token-2022

ทำไมต้องการ token program? เพิ่ม เพราะถูก deploy มานานมาก ไม่มีความสามารถอื่น ๆ เลย ไม่เหมือน ERC-20 ที่เราอยากทำก็ fork smart contract แล้วเขียนบางอย่างลงไป ส่วน solana มีแค่ data ไม่มี logic? ก็เลยใช้ token program ตัวเก่า

อีกทั้งเริ่มไม่พอสำหรับ use case ใหม่ ๆ เลยสร้างมาตรฐานขึ้นมาใหม่ ชื่อว่า Token-2022 ซะเลย

Token-2022 เป็น super set ของ token program มีความสามารถเดิม และเพิ่มเติมความสามารถใหม่ อยู่ที่สร้างว่าจะเอา extension อะไรบ้าง และ customize เก็บรายละเอียดของเหรียญ ว่าจะเติม extension แบบไหนเข้าไป ซึ่งมันจะมี Mint extension และ Token Account extension

ใน session นี้พูดถึง transfer hook คือ เมื่อเกิดการโอนขึ้น execute business logic ได้ว่าให้ทำอะไร โดยเป็น Mint extension

🟣 Transfer Hooks Extension

extension ความสามารถพิเศษในการสร้าง account แล้วพอใส่แล้ว flow ต่างจากเดิมยังไง?

สร้าง transfer hook program และ require การสร้าง external metadata list ขึ้นมาอีกตัว เช่น check ว่าผู้รับอยู่ใน whitelist ไหม → ExtraAccountMetaList เมื่อมีการ transfer 1 ครั้ง แตะ counter เพื่อเก็บจำนวน

craft instruction → token-2022 program check ว่าข้อมูลชอง mint ถูกต้องไหม เหรียญ USDC จริงไหม และทำ logic เพิ่มเติม ว่ามีการไปเรียกข้างนอกเพิ่มเติมไหม แล้วไปเรียกโปรแกรมข้างนอกเพื่อ execute แล้ว return result กลับมา แล้วไป execute business logic เหมือนเดิม

สไลด์ของ speaker

Solana: Transfer-Hook Extension
Transfer-Hook Extension On Token-2022 Kiettiphong Manovisut Moose Labs / Byte Cat pawsengineer pawsengineer https://paws.engineer
https://docs.google.com/presentation/d/1n7g8j1IfmmKgl4W0lEVzSfLXuBYXSLG26xzTdMOMY54/edit#slide=id.g34e37b9e192_0_0

คลิปย้อนหลัง

https://www.youtube.com/watch?v=LnR90O31WUI

link post ที่เคยสรุป:

จ่ายเงินเดือนบน blockchain ยังไง ให้ยังเป็นความลับอยู่

มารู้จัก Confidential Transfers ของ Token-2022 บน Solana กัน

สรุปจาก session “Unlocking Privacy on Solana” ของทาง Solana Developer Thailand เช่นเคย โดยคุณเต้ ซึ่งจากอาทิตย์ก่อนที่เรารู้จัก Core Concept ของ Solana และ Token-2022 กันไปบ้างแล้ว

ก่อนอื่นเลย ทุกคนคงรู้กันอยู่แล้วเนอะ ว่าการทำธุรกรรมบน blockchain นั้น โปร่งใส่ ตรวจสอบได้ สามารถ audit ได้

แล้วเคสที่ confidencial ล่ะ? เช่น จ่ายเงินเดือนพนักงานบน blockchain ทุกคนสามารถเห็นเงินเดือนของคนในบริษัทได้ ก็อาจจะสามารถสืบเรื่องกระเป๋าได้ว่าอันนี้ของใคร ได้เงินเดือนเท่าไหร่ อะไรงี้

แล้วปัญหานี้จะแก้ยังไงดีล่ะ? แก้ด้วย Token-2022 บน Solana นั่นเอง ตอนนี้อยู่บน mainnet สักพักแล้ว รอ audit และแก้ issue

ใน transaction ปกติ ที่มีการ transfer token กัน มันจะเปิด instuction แล้วเห็นหมด แต่สำหรับอันนี้เป็น binary ที่เหมือนไม่ได้เปิด IDL และเป็น unknown และ token balance เป็น 0 หมด

🟣 Solana & Tokens

โดย default แล้ว Solana มีมาตรฐาน token ของเขาก็คือ SPL Token เป็น token program ดั้งเดิมของ Solana และ data ที่อยู่บนเชนใช้ระบบ account

มีโปรแกรมดั้งเดิมเป็น SPL Token เป็น data บน blockchain ที่ใช้ระบบ account มี 4 แบบใหญ่ ๆ คือ

  1. program account
  2. native program account
  3. system account คือ wallet ทั้งหลาย
  4. stage account คือตัวเก็บข้อมูลบน program account

ซึ่งทำเหมือนกันหมดทั้งโปรแกรม ไม่ว่าจะมาจากทาง Solana เอง หรือเราเขียนเองก็ตาม

การทำงานจะมี main token เป็น program account มีชื่อของ token program อยู่และมีการเก็บ คือ

  1. mint: เหรียญที่เราใส่เข้าไป มี property คือ supply, authority, decimals ในการ convert เป็นเท่าไหร่
  2. account: คล้าย ๆ กับ generic เลยใช้คำว่า token account ในการสื่อสารแทน แต่ตอนเขียนโค้ดใช้คำว่า account แหละ มี property หลัก ๆ คือ mint, owner, amount, delegate

และทั้งสอง owned by physically ด้วย token program ส่วน owner ใน account เป็น logical owner เป็นกระเป๋า หรือโปรแกรม ที่เป็นเจ้าของ token account นี้

token account มี program id ของมัน หลัก ๆ ที่ใช้จะมี mint, transfer, burn

ทุกอย่างที่อยู่บน transaction ของ token account สามารถ review และเปิดดูได้ เข้าไปแกะว่าใครมีเท่าไหร่ ส่งไปเท่าไหร่ เคยมีอยู่เท่าไหร่ แล้วเหลืออยู่เท่าไหร่

🟣 Privacy มาตอนไหน?

มาตอนช่วง RWA (real-world asset) ที่คนย้าย fund ทั้งหมดมาที่ on-chain เริ่มทำจ่ายเงินในส่วน B2B และมี confidencial มากขึ้น เลยมี use case ตรงนี้เข้ามา แต่ระบบยังมี account กำกับ เขา focus ในการซ่อน amount ก่อนในตอนนี้

🟣 แล้ว Token-2022 เข้ามาช่วยยังไง?

ตัว SPL Token เนี่ย แน่นอนมันไม่มีความสามารถนี้ เลยไปทำใน Token-2022 ซึ่งเป็น version 2 ของ SPL Token ส่วน 2022 หลายคนคงสงสัยว่ามันคืออะไร มันคือปีที่เริ่ม announce ตัวนี้นั่นเอง ในนี้จะมี confidential transfer, fees, hooks, metadata และอื่น ๆ

เช่น อยาก embeded ชื่อ icon symbol เข้าไปใน metadata และบันทึกบน on-chain ได้ล่ะ

token-2022 ทำงานยังไง? มี token เหมือนโปรแกรมปกติ โครงสร้างเดิม เพิ่มเติมความสามารถตรง account โดยการขยายพื้นที่ของ account เพื่อแทรกความสามารถอื่น ๆ เข้าไป เช่น mint account อยากเพิ่ม metadata จึง extend แล้วยัด json เข้ามา เอามาใส่ใน extension ตรงนี้ได้ หรือใส่ transfer hook ว่าเราจะ hook ไปที่ไหน ยังไง รวมถึง confidencial transfer ก็จะขยายพื้นที่ออกมา

ส่วน token account ก็เช่นกัน รองรับพื้นที่ที่เพิ่มขึ้นของตัว extension ขยายพื้นที่ตาม extension ที่ต้องใช้

สิ่งที่ต่างกัน คือ token account สามารถขยายพื้นที่ได้ตลอดเวลา เช่นอยากเพิ่มโน้นนี่ก็ยัดลงไปได้เลย แต่ mint account ไม่สามารถ expend ตัว storage ได้ จพต้องทำตอน create mint เท่านั้น ดังนั้นต้อง design ให้ชัดเจนว่า mint account ต้องการทำอะไร

🟣 แล้ว confidential transfer ทำงานยังไง?

confidential transfer เป็นหนึ่ง extension ในการซ่อน amount ในการ mint หรือ transfer

เรายังเห็น address ของ sender กับ receiver อยู่ใน transaction นะ แต่เราจะไม่เห็นปริมาณ และมี auditor ได้ในกรณีที่เหรียญนั้นต้องมี compliant สามารถเพิ่ม auditor key เพื่อ confirm ว่า auditor เข้ามาดู transaction แล้วนะ สามารถ decode และ verify ข้อมูลได้

workflow:

  1. สร้าง mint ใหม่ด้วย extension ที่สร้างด้วย Token-2022 เท่านั้น มีการ extend ตัว confidential transfer ออกมาใน data ของเขา มี confidential mint และ confidential burn โดยที่ไม่บอกให้เรารู้ว่ามีปริมาณ token อยู่เท่าไหร่ mint เสร็จเข้า token account ได้เลย
  2. config token account
  3. deposit เข้าไปในกระเป๋า
  4. transfer แบบ confidential
  5. withdraw balance ออกมา

ขั้นตอนการทำ confidential transfer ต่างจาก transfer ปกติยังไง? แบ่งโครงสร้างออกเป็น 2 ส่วน คือ

  1. token account เดิม
  2. encrypt data มีส่วน public data และ encrypt data เป็นส่วน confidential transfer extension

ก่อนใช้งานจะ deposit คือการย้ายเงินจาก account ปกติ เข้ามาใน encrypt zone เราจะรู้แค่ว่าก่อนย้ายมีเท่าไหร่ แล้วทำการ transfer ไปด้วย confidential transfer ซึ่งมีการทำ encryption ของข้อมูล หลังจากรับเงินยังไม่เห็นตัวเลขทันทีใน balance ของเขา ต้องกด apply ก่อนว่าเรารับเงินมาแล้วนะ และทำการ withdraw เงินออกไปใน token account จะเป็น visible area คนจะเห็นตัวเลขจากตรงนี้ ซึ่งเราไม่จำเป็นต้องถอนหมด แต่ถ้าทำ transaction แล้วได้ amount เท่าเดิมอาจจะจับได้ด้วยพฤติกรรมนะ 🤣

ทำไมต้อง apply ตรงนั้นล่ะ?

ตอน withdraw เกิด transaction และมี amount เพิ่มขึ้น และต้องการ key ทั้งสองฝ่าย เพื่อเขียนเข้าไปใน transaction เพื่อ provide encrypt key

มันจะมี pending balance ที่ใช้ encrypt ที่เป็น private มา decrypt ได้ และต้อง apply เต็มจำนวน แต่ withdraw แล้วแต่จะถอนออกเท่าไหร่

🟣 Cryptography ข้างหลัง มีอะไรบ้าง?

  1. Zero-knowledge proof: encrypt data แล้วพิสูจน์ได้ว่าตัวเลขตอนส่งมา กับตอน apply ตัวเลขฝั่งคนรับ ตรงกัน การ verify จะไม่มีการแงะ หรือ encrypt data เลย
  2. ElGamal key: เป็น key ที่มี purpose ในการ encryption ใช้ public key ในการ encrypt และใช้ private key ในการ decrypt รูปแบบนี้เรียกว่า asynnetric key นั่นเอง
  3. Access Encryption Key: เอาไว้ encrypt balance ของ token account มี purpose คือให้เจ้าของ token account สามารถ track ดู available balance ของเขาได้ และ audit ไม่สามารถ decrypt ได้
  4. Auditor Role: ให้ auditor แงะข้อมูลใน transaction ได้ว่าตัวที่เป็น zero-knowledge proof มี value เป็นอะไร และใช้ ZK เข้ามา proof authority ของ auditor ด้วย แต่เห็น full balance ไม่ได้เน้อ คือแกะของคนรับ กับคนส่งไม่ได้

⭐ encryption เกิดบน off-chain ส่วน proof เกิดบน on-chain และ Solan มี zk proof program เอาไว้ทำเรื่องนี้โดยเฉพาะด้วย แต่ตอนนี้มี issue เรื่องการ verify อยู่

🟣 Use cases

  • Paxos ทำ confidential mint ออกมา เป็น USDP
  • payroll: จ่ายเงินเดือนยังไงให้ยังเป็นความลับอยู่
  • B2B settlement: เขาไม่ได้อยากให้คนเห็นว่าทำธุรกิจอะไร
  • Compliant: ต้องการ audit แต่ไม่ต้องการเปิดตัวเลข

🟣 Benefits

  • ตัวโปรแกรมเปน native ดังนั้นจะอยู่ตรงนี้เสมอ
  • สามารถ scale แบ่ง instruction แบ่ง account model ตรงนี้ได้

⭐ ตอนนี้ที่ยังไม่เห็น เพราะถูกบล็อกด้วยความซับซ้อนของการส่ง transaction และยังไม่มี wallet อะไรมา support ก็คือใช้ Phantom ในการทำสิ่งนี้ไม่ได้ ต้องรออีกสักพักถึงจะ address เรื่องตรงนี้ และ ElGamal key เนี่ย คนละ key กับพวก private key และ public key แล้ว key นี้จะอยู่ที่ไหน ยังเป็นเรื่องของการ design usecase อยู่นั่นเอง

สไลด์ของ speaker

Unlocking Privacy on Solana - Slidev
https://pupplecat.github.io/token-2022-confidential-transfer-talk

คลิปย้อนหลัง

https://www.youtube.com/watch?v=4avRhHLAiA8

link post ที่เคยสรุป:

NFT บน Solana เขาเก็บกันยังไงนะ?

แล้วต่างจากฝั่ง EVM ยังไง?

จดความรู้จากคุณลูกหิน จากเพจ Dancing With My Code กับ session “Introduction Metaplex Solana NFT Minting” ในเมื่อเรารู้เรื่อง token บน Solana กันคร่าว ๆ ไป และ NFT บน Solana มันต้องไม่เหมือน EVM ใช่ไหมล่ะ55555555

🟣 ความสัมพันธ์ในการ mint NFT

ก่อนอื่น annotation มันจะมาจาก owner ผู้เป็นเจ้าของ account และไปที่ destination

เริ่มด้วย Wallet Account ที่เราถือ เช่น Phantom และตัว Wallet Account เนี่ยไม่ได้เก็บ NFT ของเราตรง ๆ เขามีกระเป๋าเก็บต่างหาก คือ Associated Token Account หรือเรียกสั้น ๆ ว่า ATA มีหน้าที่บ่งบอกว่าเก็บ NFT ของคนนั้น ๆ เชื่อมกับ Mint Account กับ Wallet Account

โดย Mint Account เป็นตัวบอกข้อมูลของ NFT เบื้องต้น เป็นข้อมูลส่วนของผู้สร้าง NFT collection นี้ แต่ยังไม่มีรายละเอียดข้อมูลข้างในของ NFT นั้น ๆ

ซึ่งเจ้าข้อมูลรายละเอียดของ NFT เนี่ย เก็บที่ Metadata Account แต่ถ้าเป็นแบบ limited เลยเนี่ยจะเก็บที่ Master Edition Account

⭐ สรุปบทบาทหน้าที่และความสัมพันธ์

  • Mint Account: ถือ address ของ NFT บ่งบอกว่าเป็น NFT ตัวไหน
  • Associated Token Account: กระเป๋าของ uset ที่ไว้เก็บ NFT ไม่ได้เก็บที่ wallet โดยตรง
  • Metadata Account: ลักษณะของ NFT นั้น ๆ

🗒️ ถ้าเราสร้างเหรียญมีม ไป pumpดอท เอ้ยยย ใช้ SPL token ปกติได้เลยนะ ไม่ต้องไปยุ่งกับ Metaplex

🟣 ทำความเข้าใจกับ Metaplex เบื้องต้น

เนื่องจากใน session ไม่ได้บอกว่า Metaplex คืออะไรเนอะ? มันคือ platform ช่วยสร้าง token และ NFT บน SVM สร้างของต่าง ๆ on-chain และเขามี query on-chain data ด้วยนะ

โดยการสร้าง NFT บน Solana ตัว Metaplex สนใจ Metadata กับ Master Edition

ถ้าเราเก็บ NFT ตัวนี้ รูปไม่ได้ถูกเก็บบน blockchain โดยตรง เพราะมันอาจจะขนาดใหญ่เกินไป ซึ่งเก็บบน database ที่เป็น decentralize อีกทีนึง บน Solana เก็บที่ arweave หรือเจ้าต่าง ๆ และเก็บรายละเอียดของ NFT อย่างพวก field ต่าง ๆ หน้าตา NFT เก็บลงบน metadata.json ไปเก็บไว้ที่ arweave เช่นกัน ซึ่งเก็บลง Metadata Account

ตัวอย่าง:

JSON Schema | Core
Understand the structure and requirements of the off-chain JSON schema for Metaplex Core assets.
https://developers.metaplex.com/core/json-schema
เล่าจากประสบการณ์ ถ้าเป็นบน EVM เนี่ย เก็บรูป NFT และ metadata ลง IPFS หรือ Interplanetary File System เป็นระบบเก็บภาพ NFT เอาไว้ในหลาย Host เพื่อป้องกันไม่ให้ภาพหายไปจากโลกดิจิทัล concept จะเหมือน bittorrent เลย ซึ่งไม่ได้เก็บเป็นไฟล์รูปบน blockchain เช่นกัน แต่เก็บเป็น url ของรูป ถ้าระบบล่ม รูปที่เราซื้อไว้จะไม่หายไปนั่นเอง และ path ถ้าจำไม่ผิดก็มาจากใน smart contract เป็นคน set นี่แหละ

ในการ generate metadata.json เนี่ย อาจจะเขียนเองก็ได้ ตาม format จาก document หรือใช้ Candy Machine ก็ได้ (แอบไปหาว่าคืออะไร เจ้า Candy Machine เป็น protocol ของ Metaplex ที่เอาไว้ launch NFT collection บน Solana)

Overview | Candy Machine
Provides a high-level overview of Candy Machines.
https://developers.metaplex.com/candy-machine

ในตัว Metaplex ความสัมพันธ์ของ account นั้น Metadata Account และ Master Edition Account เชื่อมกับ Mint Account ซึ่งเป็นคนบ่งบอกว่าเป็น NFT ชิ้นไหน ส่วน Metadata Account บอกว่าข้อมูล NFT นั้นเป็นอย่างไร และ Master Edition Account บอกว่า NFT ชิ้นนั้นเป็น limited edition ไหม มี supply เท่าไหร่ และ copy ได้กี่ครั้ง

หลังจากนั้นมี demo ตัวโค้ด แนะนำดูไลฟ์ย้อนหลังดีกว่าเนอะ แหะ ๆ

project game บน Solana ของ speaker

GitHub - Rayato159/sol-climber: A brutal survival climbing game on the Solana blockchain.
A brutal survival climbing game on the Solana blockchain. - Rayato159/sol-climber
https://github.com/Rayato159/sol-climber

คลิปย้อนหลัง

https://www.youtube.com/watch?v=JfnWKinWCbY

document สร้าง NFT บน Solana ยังไง

How to Create an NFT On Solana | Guides
Learn how to create an NFT on the Solana blockchain with Metaplex packages.
https://developers.metaplex.com/guides/javascript/how-to-create-an-nft-on-solana

link post ที่เคยสรุป:

Scammer ส่ง NFT บน Solana ยังไง? ในเมื่อการ mint NFT ต้องเช่า storage!

ใช้ Compressed NFT (cNFTs) สิ

สรุปจากที่ฟัง session “Account Compression & Compressed NFT (cNFTs)” จากคุณกอล์ฟ

ในเมื่อปกติการ mint NFT จะต้องเสียค่า storage อ่ะเนอะ ซึ่งคูณกันก็แพงอยู่ การที่มี Compressed NFT เนี่ย ทำให้ถูกกว่าการ mint NFT ปกติ และส่งได้เยอะกว่าเดิม แล้วเวลาใช้ เราจะแตะอะไรบ้างนะ

🟣 State account

เรามาทบทวนกันก่อนว่า Core Concepts ของ Solana มองว่าการเก็บช้อมูลนั้นเป็นการเช่า storage แล้วเขียนข้อมูลลงไป ถือ account มีสิทธิ์ในการ transfer token หรืออะไรต่าง ๆ เช่น

  • สร้างเหรียญ อันนี้เข้าไปที่ mint account
  • ถือเหรียญ อันนี้เข้า token account

ถ้าไม่ใช้สามารถขอคืนได้ เช่น เราไม่ถือเหรียญนี้ ขอเงินคืนหน่อย ก็ได้เช่นกัน

เวลาเช่าพื้นที่บน Solana มี cost เท่าไหร่ สามารถใช้ solana rent <num-bytes> จาก Solana CLI โดยกรอก account size ที่เราต้องการเป็น byte ได้เลย

Install the Solana CLI and Anchor
A guide to setting up your local Solana development environment. Learn how to install Rust, the Solana CLI, and Anchor Framework on Windows (WSL), Linux, and Mac.
https://solana.com/docs/intro/installation

🟣 Challenges with traditional NFTs

การเทรดเหรียญมีม เราเทรดกันหลายเหรียญเนอะ และพอเปิด wallet มาดู จะพบว่า scam NFT เต็มเลย

การที่เราถือเหรียญมีม หรือ NFT ใด ๆ ก็เป็นการเช่า storage เช่นกัน โดยเราไม่ได้เป็นคนเช่าเอง scammer ต่างหากเป็นคนเช่าให้เรา

แล้ว scammer เสียค่าเช่าเท่าไหร่? สมมุติส่ง NFT ไปให้คน 1,000 คน การส่ง NFT ให้ 1 คนเป็นการสร้าง 1 token account มีค่าใช้จ่ายประมาณ 0.012 SOL และใช้ cost รวมทั้งหมด 12 SOL ซึ่ง rate 1 SOL ในตอนที่เขียนอยู่ประมาณเลขกลม ๆ 5400 บาท ก็จะได้เป็น 64800 บาท โอ้วแม่เจ้า

แล้วเราขอค่าเช่าคืนได้ไหม? ได้สิผ่าน Sol Incinerator โดยจะ scan network ดูว่าเราถือ token หรือ NFT ที่เราเป็นเจ้าของจริง ๆ อะไรบ้าง แล้วไล่ดูอันไหน scam แล้ว burn ทิ้งขอค่าเช่าคืน จาก scammer ที่เปย์เรามา 🤣 รวมถึง token ที่เราไม่ได้ถือได้ด้วยน้า

Sol Incinerator
Clean up your wallet by burning NFTs and tokens from the blockchain!
https://sol-incinerator.com/

🟣 Definition of Compression

cost นึงที่เราไม่เคยนึกถึงตอน development เลย คือการเช่า account บน Solana เมื่อมีปริมาณเพิ่มมากขึ้น จะเป็น cost ที่โตไปตามจำนวน user แล้วในมุมของ developer ที่ mint ตั๋ว หรือ NFT ให้กับ user เนี่ย cost มันจะเยอะแค่ไหน แล้วถ้า user เราเยอะก็ต้องหา solution มาลดค่าใช้จ่าย เป็นที่มาของ Account Compression ที่ถูกเอามาใช้ใน Compressed NFT

Compression คือการทำบางอย่างให้เล็กที่สุดโดยการบีบอัด ในมุมของ Solana แทนที่จะเก็บ metadata จะสร้าง proof ตัวแทนของ data แล้วเก็บ proof ตัวนี้ไว้ใน stage account แล้ว metadata นี้จะถูกเก็บไว้ข้างนอกที่เป็น storage ที่มี cost น้อย เช่น IPFS หรือ AWS และเอาเจ้า proof ตัวนี้เนี่ยไปตรวจสอบว่าข้อมูลนี้มีอยู่จริง และถูกต้อง

Compressed NFT มี technology ที่จำเป็นต้องรู้ 2 เรื่อง คือ

1️⃣ Merkle tree

2️⃣ Digital Asset Standard API (DAS)

🟣 Merkle Tree / Concurrent Merkle Tree

ในวงการ blockchain น่าจะได้ยินคำนี้บ่อยเนอะ

Merkle Tree หรืออีกชื่อนึงว่า hash tree เป็น data structure ชนิดหนึ่งในรูปแบบ binary tree ซึ่งใน 1 node จะมี 2 child โดยที่เรากำหนดความลึกของ tree ได้ เรียกว่า max depth เช่น max depth = 2 เราก็นับจากไม่ใช่บนสุดลงมา

ใน tree ประกอบด้วย 3 ส่วน คือ

  • Leaf: ใบ อยู่ล่างสุด เป็นส่วนที่ใช้ในการเก็บ data
  • Branch: กิ่ง อยู่ตรงกลาง จะมีกิ่งกี่ชั้นก็ได้
  • Root: ใน Merkle Tree เรียกว่า Merkle Root อยู่ส่วนบนสุด

เมื่อมี data ที่เราต้องการจะเก็บ เราจะเก็บที่ leaf เสมอ และมี index ของตัวเอง เช่น index 0 เก็บ “A” index 1 เก็บ “B” เรา hash data และเก็บไว้ที่ leaf

leaf ทั้งสองที่ถูก hash มาก่อนแล้วมะกี้ มา hash อีกครั้งที่ branch และทำไปเรื่อย ๆ จนได้ hash ของ root ที่เอา hash ของ branch มา hash กัน

เมื่อ data ที่ leaf มีการเปลี่ยนแปลง hash ตรง node ก็จะเปลี่ยน และเปลี่ยนไปจนถึง merkle root ทำให้เรารู้ได้ว่า data เกิดการเปลี่ยนแปลง

Merkle Tree ถูกสร้างมาเพื่อใช้เก็บข้อมูล และพิสูจน์ได้ว่าข้อมูลด้านล่างสุด มันมีอยู่จริงไหม เอามา hash ดูว่าได้ข้อมูลตรงไหน และตรวจสอบความสมบูรณ์ของข้อมูล build data แล้ว hash เพื่อ check ดูว่าตรงกันไหม

ในการใช้งานจริง Merkle Root คือ NFT collection และ leaf node เป็น NFT metadata โดยเอาแต่ละตัวมา hash เพื่อให้ได้ hash ของ NFT ตัวนั้น และ hash ขึ้นไปเรื่อย ๆ จนได้ Merkle Root ซึ่งเป็น proof ที่เอาไว้เก็บ on-chain เท่านั้น เพื่อใช้ในการ proof NFT ส่วน NFT metadata และ proof ทั้งหมดเราไม่เก็บ

NFT แต่ละตัวมี address ของตัวเอง เพื่อเก็บไว้ใน Token Account

การใช้ cNFT เราจะไม่มี address แล้ว เพราะ NFT ไม่ได้มีตัวตนใน Stage Account หรือ Token Account จริง แต่มันจะอยู่ใน root ของ tree เราอ้างอิงการมีอยู่ของ NFT โดยการอ้างอิง index ที่อยู่ใน tree เช่น ถือ NFT index = 0 ก็คือของเราอยู่ leaf แรกของ tree นั่นเอง

แล้วตรวจสอบการมีอยู่ยังไงนะ? เอามา data มาแทนที่ NFT แล้ว hash ดูว่าข้อมูลตรงไหม

และถ้าจะเปลี่ยนเจ้าของจะทำยังไง? craft data NFT ตัวนี้ โดย field นึงใน metadata มีชื่อว่า owner ก็คือเราผู้เป็นเจ้าของ จากนั้นทำ proof โดย hash data เหล่านี้ และรู้ asset id แต่ละอัน แล้ว hash มา แล้วเอา data ของเราไป hash กับอันที่มีอยู่ เพื่อหา branch ที่อยู่ด้านบน และเอา data ที่เรารู้ว่ามันถูกต้องอยู่แล้วมา hash data เป็นอีก branch นึง เอาไป hash ต่อเพื่อให้ได้ Merkle Tree แล้วส่งขึ้น chain

แล้ว proof ยังไง? ใช้ Account Compression Program ในการตรวจสอบ โดยใช้ metadata กับ proof ที่เรา hash ได้ เอาไป check ได้ว่า proof อันนี้คือ hash เหล่านี้ hash แล้วได้ Merkle Root ตรงกันที่มีอยู่ในเชนจริงไหม ถ้าจริงเราสามารถแก้ไขมันได้จริง คนที่แก้ไข metadata ใน tree เป็น Bubblegum เป็นโปรแกรมที่ Metaplex เป็นคนสร้าง

Solana มีความสามารถในการทำ execute transaction แบบ parallel ได้ ถ้าอ่าน document ดูจะพบว่า cNFT ไม่ได้ใช้ Merkle Root ปกติ เขาจะใช้ Concurrent Merkle Tree โดย concurrent เป็นการเพิ่มความสามารถของ Merkle Tree

ถ้ามีการ transfer NFT หลายตัวพร้อมกันใน 1 block การ transfer ทำให้ metadata เปลี่ยน ทำให้ branch ข้างบนเปลี่ยน และ Merkle Root ก็จะเปลี่ยนด้วย แต่อีกคนใน block เดียวกัน เปลี่ยน metadata เหมือนกัน hash เรียบร้อยถึง Merkle Root แต่ Solana บอกว่า branch นี้ถูกเปลี่ยน และ Merkle Root ก็ไม่ตรงด้วย

Solana เลยสร้าง Concurrent Merkle Tree ขึ้นมาเพื่อแก้ปัญหานี้ เมื่อมีการเปลี่ยนแปลงของ branch หรือ Merkle Root ใน block เดียวกัน Solana จะอนุญาติให้จอง storage เพิ่มเพื่อเก็บ change log ของ branch หรือ Merkle Root ที่มีการเปลี่ยนแปลงก่อนหน้านี้ไว้ด้วย โดย proof แรกก่อนเปลี่ยนจะถูกเก็บไว้เป็น temporary ใน account นึง และตัว Merkle Root ก็เช่นกัน พอมีการเปลี่ยน metadata Solana check proof ว่าตรงตาม change log ไหม ถ้าถูกก็สามารถอนุมานได้ว่ามันถูกต้องแล้ว ก็สามารถเปลี่ยนได้

⭐ การ hash เกิดขึ้นที่ off-chain และส่ง proof ขึ้นไปบน Solana มีหน้าที่เก็บ change log เท่านั้น

⭐ พิจารณาเรื่องการเพิ่ม storage เมื่อเราต้องการคนแก้ไขพร้อมกันใน 1 block เยอะ ๆ เพื่อให้ Account Compression Program เอา changelog การใส่ไว้ได้ กำหนดได้โดย parameter ที่ชื่อว่า max-buffer-size เป็น cost ที่ทำเพิ่มขึ้นมาในการทำ cNFT

🟣 Code walkthrough

🔗 ตัว demo

GitHub - solana-developers/compressed-nfts: Example code to use compressed NFTs (using state compression) on Solana
Example code to use compressed NFTs (using state compression) on Solana - solana-developers/compressed-nfts
https://github.com/solana-developers/compressed-nfts

🔗 เว็บจำลอง Merkle Tree

Merkle Trees Visualization
Web site created using create-react-app
https://efficient-merkle-trees.netlify.app/

🔗 ประมาณการค่าใช้จ่าย

compressed.app - estimate costs for compressed NFTs
Estimate costs for compressed NFTs. Discover the wonders of State Compression, and concurrent Merkle trees on Solana
https://compressed.app

🟣  Use Case

  • เกมส์ที่ต้อง mint NFT เยอะ ๆ มองเรื่อง concurrent และ buffer size
  • ถ้าไม่ต้องการ concurrent เยอะ เช่น ticket หรือ digital collection มี buffer size ลดลง และ canopy cost น้อยลงด้วย

🟣 Solana Digital Asset Standard API (DAS)

พอเราสร้าง tree เราจะ fetch data ออกมาดูยังไง? เวลา mint เราจะ interact กับ Bubblegum program และระบุ tree ในการ interact และเรียก State Compression Program ว่าเรามีสิทธิ์ mint จริงไหม แล้ว proof ที่เป็น Merkle Root ก่อนหน้านี้คืออะไร

NFT ปกติเราจะได้ address มา เอาไปวางบน explorer จะ pass data มาให้ พร้อมแสดงรูป NFT พร้อมบอก attribute ทำได้เพราะเขียน metadata บน stage account ตรง ๆ

ส่วน cNFT เป็น data ที่อยู่ใน leaf ซึ่งไม่ได้เก็บ on-chain Metaplex เก็บ metadata โดยการ logging เราจะเห็นข้อมูลแปลก ๆ อันนั้นเป็น metadata ของ NFT และเราต้องรู้ด้วยว่ามัน verified อยู่ block ไหน ซึ่งมันยาก

Solana และ Metaplex เลย introduce Solana Digital Asset Standard API ขึ้นมา โดย indexing ข้อมูล metadata ให้อยู่ในรูปแบบที่เข้าถึงได้ง่ายที่สุด และดึงจากผู้ให้บนริการ indexer

DAS ไม่ได้รองรับทุก RPC จะรองรับแค่เจ้าใหญ่ ๆ เช่น QuickNode, Helius, GetBlock, Triton

และความสามารถไม่ได้มีแค่นั้น ตัวมันเองเป็น Unify Asset API ที่ดึง metadata ของ fungible token หรือ NFT แบบปกติได้ด้วย หรือดึง metadata ที่เป็น Metaplex standard ได้อีก

🟣 Summary

ข้อดี:

  • cost ลดไป 1000 เท่า (ทำให้ scammer ใช้ต้นทุนตํ่าลง เดี๊ยวววว)
  • proof data ได้จริง และปลอดภัยมากพอ, use case ค่อนข้างเป็นไปได้หลายส่วน

ข้อเสีย:

  • ซับซ้อนมาก cNFT มันไม่ได้ตรงไปตรงมา พึ่งพา off-chain ในการสร้าง proof เพื่อ transfer NFT
  • พึ่งพา indexer ในการเข้าถึง metadata ของ NFT นั้น ๆ เป็นอีกหนึ่งปัจจัยที่ทำให้ cost เพิ่มขึ้นด้วย
  • ไม่ยืดหยุ่น และตอนนี้มี token-2022 ที่เรา add-on extension ได้ สร้าง tree แล้วจำกัด supply แล้วทำให้แก้ไขยาก
  • เกิดจาก spam ใน network เพราะพวก scam NFT เป็น cNFT หมดแล้ว ฮืออออออ

สไลด์ของ speaker

Solana: Account Compression and Compressed NFT
Account Compression & Compressed NFT (cNFT) Kiettiphong Manovisut Moose Labs / Byte Cat pawsengineer pawsengineer https://paws.engineer
https://docs.google.com/presentation/d/1MolLEvwnrH0AkTG515Fl923DnUx8wQgt1o3pdO5fx1I/preview?slide=id.g261c6f743f3_0_0

คลิปย้อนหลัง

https://www.youtube.com/watch?v=nLN94afhM0s

link post ที่เคยสรุป:

LLM + Solana = Powerful Blockchain Tools with Rig Framework (Rust base)

แล้วเราจะเอาความสามารถของ Solana ให้ powerful ขึ้นด้วย AI ได้อย่างไร?

มาทำความรู้จัก Solana AI Agent กัน

สรุปจากที่ฟัง session “Solana AI Agent” โดยคุณเต้ ที่มี session ประมาณนี้คราวก่อน แต่ไม่ได้มาฟัง แหะ ซึ่ง session นี้ทำให้เราเห็นภาพของมันมากขึ้น

🧠 LLM + Solana = Super Powerful Blockchain Tools

หลาย ๆ คนคงจะรู้จัก LLM หรือ Large Language Model กันอยู่แล้ว อย่าง ChatGPT, Grok, Gemini เขาเก่งในเรื่อง conversational มาก เพราะเขามีคลังข้อมูลที่ใหญ่ เทรนกับพวกข้อมูลทุกภาษา และมี knowledge base เต็มไปหมด ทำให้เข้าใจภาษามนุษย์ง่าย แต่เนื่องด้วยเป็นระบบปิด เลยมีข้อจำกัดถ้าใช้แบบ pure ๆ

ส่วน Solana เป็น super powerful blockchain ทั้งเร็ว ทั้ง robux และทำ decentralize app ที่มีจุดแข็งพอสมควร แต่ตัว Solana เนี่ยยังไม่มี AI tool แบบ official ให้เราใช้ เพราะอยู่ในการ develop มาตรฐานกันอยู่

แล้วเราจะเอาความสามารถของ Solana ให้ powerful ขึ้นด้วย AI ได้อย่างไร?

🟣 ทำไมให้ LLM รู้จัก Solana?

  • Enhanced Functionality: ในที่นี้เรียกว่า Agent เป็น service ตัวนึง ที่ proxy ให้ LLM เป็นแขนเป็นขา
  • Actionable Responses: หลัก ๆ คือทำให้ access function ต่าง ๆ ตามคำสั่งที่ agent นั้น provide ไว้ให้ และสามารถ response กับคำสั่งต่าง ๆ ด้วยการ take action จริงจาก tool แล้ว provide real-time data ได้ และจุดที่เป็น ultimaate goal ก็คือ bridge user ใช้ความสามารถของ Solana และ LLM ได้เต็มที่
  • Contextual Precision: ปกติเวลาเราทำงานกับ LLM เราก็พิมพ์คำสั่งแล้วมันจะส่ง response ออกมา ซึ่งอยู่ในรูปแบบการ chat เพราะว่ามันเป็น conversational base interaction
  • User Empowerment: ส่วนเจ้า agent อยู่ใน path ที่ extend จาก LLM อีกทีนึง เช่น ขอดู wallet address นี้หน่อย เราเป็นคนส่งคำสั่งมา agent ทำงานให้ แล้วแปลงเป็น human friendly text ซึ่งเรียกคำสั่งเหล่านี้ว่า tool

🟣 Introducing the Rig Framework

ใช้ Rig Framework เป็น Rust base framework ในการ integrate ระหว่าง Solana กับ tool ที่เป็น LLM เข้าด้วยกัน เปิดความสามารถให้ agent มีความสามารถในต่อ function ต่าง ๆ ได้

🔑 Key feature

  • Agent Builder: build context ของ agent ให้ ต่อกับ provider agent เจ้าต่าง ๆ ให้
  • Tool Integration: มี framework ในการ embedded function ต่าง ๆ เข้าไปในตัว framework ได้
  • Multi-Turn Context: เป็น powerful feature ตัวนึงที่ทำให้ LLM สามารถ resolve ปัญหาที่ต้องการ query มากกว่า 1 ครั้ง ได้ใน query เดียว

ตัว Rig framework คือตัว rig-core ครอบการเชื่อมต่อของ LLM และการ implement agent เข้ามา และทำหน้าที่ facilitate ตัว communicate ระหว่าง LLM และ agent

แล้วลูกศรขึ้นลงระหว่าง LLM และ agent คือ ถ้า data ได้กลับคืนมาจากการ call function เป็น JSON และ match กับสิ่งที่ register ไว้ใน Rig framework เขาจะ execute function นั้นให้ แล้วตอบกลับไปที่ agent โดยอัตโนมัติให้ โดยที่เราไม่ต้องคอยบอกว่าจะ execute tool ตัวใด และ ping-pong จนกว่า agent เข้าใจ agent ทั้งหมดแและตอบกลับ

💜 Rig Framework provide domain หลักอะไรบ้าง?

  1. embedded database ที่อยู่นอกเหนือจากการ learning
  2. completion model คือตัวที่เราใช้อยู่ ใช้ใน solve หรือ action ต่าง ๆ ตามที่ request มาจาก LLM

🟣 Rig: multi-turn

ตอนทำ multi-turn เช่น เรา action บอก LLM ว่า wallet ของเรามี balance เท่าไหร่ ถ้าไม่มีให้ขอ airdrop มา 3 SOL การ query ภายในคือ ไป execute get_balance และตอบไปให้เขารู้ว่ากระเป๋ามาเท่าไหร่ และถ้า balance เป็น 0 ให้ execute request_airdrop

อีกตัวอย่าง ต้องการ mint 500 token แล้วส่งไปอีกกระเป๋า 250 token LLM รู้ว่าเราต้องการ create_mint ก่อน แล้วทำการ mint_to และจบด้วย transfer ทำงานครบแล้วตอบกลับไปที่ user ซึ่งเกิดขึ้น auto บน Rig Framework

ถ้าเรารู้สึก ping-pong ไปมาเยอะเกินไป Rig Framework เลย provide limit turn ว่าเรา limit maximum ได้ตามที่ควรจะเป็น รวมถึง token ในการ query LLM ด้วย

🟣 ถ้าเราอยาก implement จะต้องเตรียมอะไร และ implement ยังไง?

  • Tool Setup: Low level solana_tools เตรียม GetWalletAddress, GetTokenAccounts, Transfer
  • Integrate กับ Rig Framework โดยการเรียกที่ agent ต่าง ๆ เช่น Open AI, Gemini
  • ทำ code snippet: เริ่มโดย initial ตัว agent มีการ create instant ของ Gemini ออกมาก่อน จากนั้นบอกว่าเราจะใช้ model ไหน ต่อมาใส่ personality ของตัว bot ลงไป ตรง preamble แล้ว register tool ต่าง ๆ ของ bot ลงไป จบด้วยการ build

🟣 Enabling Tool Sharing with MCP

ถ้าอยากให้ agent หรือ LLM ตัวอื่นเข้ามาใช้งานทำยังไงได้บ้าง?

ให้ implement ตัว enabling to sharing ด้วย MCP

แล้ว MCP คืออะไร? คือ Model Context Protocol เป็น standard ที่ช่วยให้ agent ในการ share tool กันได้ โดยใช้

  • Uses Server-Sent Events (SSE): สำหรับการ Push Message แบบ Streaming
  • ใช้ JSON RPC เป็นมาตรฐานในการสื่อสาร เพื่อให้ง่ายต่อการทำ Tooling และ Implementation

สไลด์ของ speaker

Solana Agent Demo: Empowering LLMs with Tools - Slidev
https://pupplecat.github.io/solana-agent-demo

คลิปย้อนหลัง

https://www.youtube.com/watch?v=U1lOnBioc7s

link post ที่เคยสรุป:


ติดตามข่าวสารตามช่องทางต่าง ๆ และทุกช่องทางโดเนทกันไว้ที่นี่เลย

  • แนะนำให้ใช้ tipme เน้อ ผ่าน promptpay ได้เต็มไม่หักจ้า

  • ติดตามข่าวสารแบบไว ๆ มาที่ Twitter เลย บางอย่างไม่มีในบล็อก และหน้าเพจนะ


Tags

Minseo Chayabanjonglerd

I am a full-time Android Developer and part-time contributor with developer community and web3 world, who believe people have hard skills and soft skills to up-skill to da moon.