สุ่มผู้โชคดีในโลก web3 ด้วย Chainlink VRF

Blockchain & Cryptocurrency Jul 14, 2023

การสุ่มอะไรสักอย่างนั้น ไม่ใช่เรื่องที่เราเองคาดเดาอะไรได้เลย นอกจากขอสิ่งศักดิ์สิทธิ์ในใจ ถ้าในโลก developer ปกติ เราจะใช้ function random ต่าง ๆ กัน เช่น Math.random() และในโลก web3 นั้น เขาทำเหมือนกันไหมนะ?

ในวันนี้จะมาเล่าถึงการสุ่มในโลก web3 กันว่าทำยังไง โดยจะเล่าเกี่ยวกับ Chainlink VRF นี่แหละ เพราะการสุ่มรางวัลให้ผู้โชคดีนั้น เราทุกคนก็ต้องการความโปร่งใส ตรวจสอบได้ กันข้อครหาว่าเนี่ยดรอปให้เพราะเป็นกระเป๋าอินฟลูหรือเปล่า

Disclaimer: ทั้งหมดเป็นการ research ไม่ได้ลองในการ implement จริงแต่อย่างไร เพียงแค่อธิบายวิธีการทำงาน

Chainlink เป็น web3 service platform ที่มีการ connect กับผู้คน ธุรกิจ และ data เพื่อก้าวสู่โลก web3 ในอนาคต แล้วก็เป็น data oracle ที่อยู่บนเชน Ethereum และมีเหรียญประจำ platform ว่า LINK

Chainlink: The Industry-Standard Web3 Services Platform
Chainlink connects the world to blockchains—enabling developers, startups, and enterprises to build tangible use cases that unlock real value in Web3.
https://chain.link/
Chainlink (LINK) คืออะไร? | Bitkub Academy
https://www.bitkubacademy.com/th/blog/what-is-chainlink-link

oracle เป็นตัวที่อัพเดตข้อมูลต่าง ๆ ในโลก blockchain เพื่อให้ข้อมูลที่มีการอัพเดตถูกต้อง แม่นยำอยู่เสมอ เช่น เว็บที่ swap เหรียญต่าง ๆ ก็ใช้ข้อมูลจาก oracle ในการบอก rate ในการแลกเปลี่ยนเหรียญคริปโตต่าง ๆ

ตัวอย่าง

Spot Price Aggregator | 1inch Network
Build Status
https://docs.1inch.io/docs/spot-price-aggregator/introduction/
Oracles | Uniswap
A price oracle is any tool used to view price information about a given asset. When you look at stock prices on your phone, you are using your phone as a price oracle. Similarly, the app on your phone relies on devices to retrieve price information - likely several, which are aggregated and then dis…
https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles

อ่านเกี่ยวกับ blockchain และ oracles เพิ่มเติมได้ที่นี่เลย

Blockchains vs Oracles: Similarities, and Differences | Chainlink
Blockchains and oracles are both critical Web3 network infrastructure that differ in their overall purpose but can be combined to create advanced hybrid smart contracts.
https://chain.link/education-hub/blockchain-vs-oracles

สำหรับ Ecosystem ต่าง ๆ สามารถอ่านได้ที่นี่เลย

Chainlink Ecosystem | Every Chainlink integration and partnership
Chainlink Ecosystem delivers the latest news and information about integrations and collaborations with the Chainlink network.
https://www.chainlinkecosystem.com/

การเขียน function สุ่มในโลก web2

แน่นอนว่า developer อาจจะผ่านการใช้ function random มาไม่มากก็น้อยเนอะ

ในภาษา javascript เราจะใช้ Math.random() ในการสุ่มกัน โดยค่าที่ได้จาก function นี้ มีค่าระหว่าง 0 - 1 นะ

ถ้าเราอยากสุ่มจากจำนวนผู้โชคดีทั้งหมดล่ะ?

สมมุติให้ผู้โชคดีทั้งหมด 1687 คน ลองเอาจำนวนผู้โชคดีไปคูณสิ Math.random() * 1687 มันจะได้ผลลัพธ์ระหว่าง 0 - 1686 แต่ไม่น่ามีคนที่ 0 ไหมนะ

และพบว่าเราได้ผลลัพธ์ที่เป็นจำนวนทศนิยมมาด้วย ซึ่งเราไม่ต้องการรรรรรร คนมันแบ่งทศนิยมบ่าได้ก๊ะะะะะ

ดังนั้นเราจึงใส่ Math.floor() ครอบเข้าไป เพื่อคืนค่าออกมาเป็นเลขจำนวนเต็มเนอะ โดยมันจะปัดเศษลงนะ เพราะถ้าปัดขึ้น มันก็ดูเกินจำนวนผู้โชคดีไป

แล้วบวกด้วย 1 เพื่อให้ได้ผลลัพธ์ระหว่าง 1 - 1687 เนอะ

Math.floor(Math.random() * 1687) + 1

Math.random() - JavaScript | MDN
The Math.random() static method returns a floating-point, pseudo-random number that’s greater than or equal to 0 and less than 1, with approximately uniform distribution over that range — which you can then scale to your desired range. The implementation selects the initial seed to the random number…
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
JavaScript Random
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
https://www.w3schools.com/js/js_random.asp
Math.floor() - JavaScript | MDN
The Math.floor() static method always rounds down and returns the largest integer less than or equal to a given number.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor

Chainlink VRF (Verifiable Randomness Function) เป็นเทคโนโลยีที่ใช้ในระบบเครือข่าย Blockchain ซึ่งถูกพัฒนาโดย Chainlink ใช้ในการสุ่มผู้ชนะ ผ่าน smart contract นั่นเอง

กิจกรรมที่ใช้ Chainlink VRF ในการสุ่มแจกของรางวัล จะเป็นประมาณว่า คนร่วมกิจกรรมได้ตั๋วเพื่อมาเพื่อลุ้นของรางวัลกองกลาง

Flow การทำงานคร่าว ๆ

  1. ตัว smart contract ขอ request ไปที่ Chainlink ว่าขอสุ่มนะ
  2. Chainlink จะ generate ตัวที่ random และส่งการ proof ไปยัง contract ของ VRF
  3. ตัว contract ของ VRF จะทำการ verify
  4. ตัว smart contract ของตัวแอพได้รับตัว random ที่ผ่านการ verify

Algorithm เบื้องหลังการสุ่มเป็นยังไงบ้างนะ?

หลักการสุ่มคร่าว ๆ คือมันจะเข้า function ที่ชื่อว่า fulfillRandomWords() โดยมีตัว parameter ตัวนึงคือ randomWords เป็น type uint256 ภาษาชาวบ้านคือตัวเลขชุดนึงนั่นแหละ ได้มาจากการ random จากฝั่ง Chainlink

โดยเลขตั๋วที่ถูกรางวัลนั้น คือ randomWords เอามา mod ด้วยจำนวนตั๋วทั้งหมด + 1 นั่นเอง

การขอสุ่ม

มีอยู่ 2 วิธีด้วยกัน คือ

  • Subscription: สร้าง subscription account และใส่ $LINK ไว้ใน account เราสามารถ connect ได้หลาย ๆ smart contract ใน account นั้น เมื่อเราขอใช้ function ในการสุ่ม ค่าใช้จ่ายจะถูกคำนวณเมื่อเราขอใช้ function ในการสุ่มทำงานเสร็จเรียบร้อย
  • Direct funding จะจ่ายด้วย $LINK โดยตรง เมื่อมีการเรียกใช้ function ในการสุ่ม ซึ่งใน account ของเราจะต้องมี $LINK เพียงพอในการตัดเงินด้วยนะ

ซึ่งทางเราอ่านแล้วงง ๆ นิดหน่อย แต่ก็ต้องอ่าน เพราะ document จะแยกสองส่วนนี้ออกเหมือนกัน เขามี compare แต่ละอันว่าแต่ละอันต่างกันยังไง เพื่อให้เลือกใช้งานได้ถูกต้องเนอะ

แล้วรองรับ chain อะไรบ้างนะ?

ตัว Chainlink VRF เขา support หลาย ๆ เชน ทั้ง mainnet และ testnet เลย ไม่ว่าจะเป็น Ethereum, BNB Chain, Polygon, Avalanche, Fantom และล่าสุดรองรับ Arbitrum ด้วยนะ

เว็บไหนที่ใช้ Chainlink VRF ในการสุ่ม เขาจะมี badge บน website ว่า Randomness SECURED WITH CHAINLINK ด้วยนะ

Chainlink Badge Enrollment | Chainlink
Enroll in the Chainlink Badging Program to get a Chainlink badge to show the reliability of your Web3 project.
https://chain.link/badge

อยากรู้เพิ่มเติมอ่านที่ไหนดี?

สามารถอ่าน developer document เพิ่มเติมได้ที่นี่เลย

Introduction to Chainlink VRF | Chainlink Documentation
Chainlink is the most widely used oracle network for powering universally connected smart contracts, enabling any blockchain to access real-world data & APIs.
https://docs.chain.link/vrf/v2/introduction

อันนี้เว็บหลักของ Chainlink VRF

Generate Provably Fair Random Numbers in Solidity With Chainlink VRF
Chainlink VRF provides smart contract developers with a provably fair source of randomness for building dynamic and cryptographically secure blockchain games.
https://chain.link/vrf

ส่วน cost สามารถ estimate ได้ที่นี่เลย

Estimating VRF Costs | Chainlink Documentation
Chainlink is the most widely used oracle network for powering universally connected smart contracts, enabling any blockchain to access real-world data & APIs.
https://docs.chain.link/vrf/v2/estimating-costs

Use Case

หลาย ๆ โปรเจกต์บนโลก web3 ใช้ Chainlink VRF ในการสุ่มรางวัล เพื่อความโปร่งใส และสามารถตรวจสอบได้

Metasaurs

เป็นโปรเจกต์ NFT ที่เป็นไดโนเสาร์ของ Dr. DMT บนเชน Ethereum โดยมีส่วนผสมระหว่าง BAYC Ape #4588 กับตัว T-Rex มาเป็นไดโนเสาร์จำนวน 9999 ชิ้น

เมื่อทำการ mint จบแล้ว เขามีสุ่มรางวัลแจกรถบรรทุก Ford Raptor ปี 2021 และรถกระบะที่แต่งด้วย Metasaurs เลยใช้ Chainlink VRF เพื่อความโปร่งใส และตรวจสอบได้ในการสุ่มรางวัลมูลค่าสูงนั่นเอง

Blog
https://www.metasaurs.com/using-chainlink-vrf-to-bring-verifiable-randomness-to-metasaurs-nft-giveaway
Metasaurs ใช้ Chainlink VRF เพื่อใช้งานการสุ่มที่พิสูจน์ได้เพื่อสุ่มแจก NFT
Metasaurs เป็นราชาแห่ง metaverse แต่แขนของพวกมันสั้นไปหน่อยที่จะทำการสุ่มบนเครือข่ายเองอย่างปลอดภัย
https://medium.com/chainlink-community/metasaurs-ใช้-chainlink-vrf-เพื่อใช้งานการสุ่มที่พิสูจน์ได้เพื่อสุ่มแจก-nft-31f6284ea91d

LooksRare

NFT Marketplace มีแคมเปญ LooksRare Raffles ตามความเข้าใจของเรา คือ ซื้อตั๋วมาลุ้นของใน pool อันประกอบด้วยรางวัล blue-chip NFT และ LOOKS tokens วิธีการร่วมสนุก คือ login ด้วย metamask และมีเหรียญ ETH ในจำนวนที่กำหนด และ cover ค่า gas ด้วย การจับรางวัลจะจับรางวัลเมื่อมีจำนวนตั๋วทั้งหมดตามเงื่อนไขที่กำหนดในแคมเปญ

LooksRare Integrates Chainlink VRF to Help Power Provably Random LooksRare Raffles | LooksRare Docs
Chainlink VRF: Provably Random LooksRare Raffles
https://docs.looksrare.org/blog/chainlink-vrf-provably-random-looksrare-raffles
What Are LooksRare Raffles? | LooksRare Docs
Everything you need to know about LooksRare’s provably fair raffles.
https://docs.looksrare.org/guides/raffles/what-are-looksrare-raffles

ดูประวัติการ raffle ของ LooksRare ได้ที่นี่จ้า

https://looksrare.org/raffle/history

Tripster

เป็นโปรเจกต์เกี่ยวกับการท่องเที่ยว ที่เป็น travel-to-earn โปรเจกต์แรกบนโลก blockchain ซึ่งหลาย ๆ คนอาจจะเคยเห็น NFT ของโปรเจกต์นี้ ที่เป็นน้องอุ๋งกันมาบ้างแล้วเนอะ มี utility หลัก ๆ คือ referral link ซื้อของตามเว็บ partner ต่าง ๆ แล้วได้รับ cashback คืน แล้วก็มี business model ที่แข็งแรง และใช้งานได้จริงบนโลก web2 ด้วยนะ

และเขากำลังจะมีแคมเปญ Lucky Box ที่ใคร ๆ ก็สามารถร่วมสนุกได้ ไม่จำเป็นต้องเป็น holder ก่อนหน้านี้มีรอบ test บน testnet ไป 2 รอบ และรอบที่สองเขาได้ใช้ Chainlink VRF ในการสุ่มของรางวัลใหญ่ที่สุดด้วยนะ

TRIPSTER Integrates Chainlink VRF to Help Power LUCKY BOX giveaway campaign.
We’re excited to announce that TRIPSTER, cashback 3.0 platform has integrated Chainlink Verifiable Random Function (VRF) on Etheruem…
https://medium.com/@tripster.live/tripster-integrates-chainlink-vrf-to-help-power-lucky-box-giveaway-campaign-2b2fbf34e924

ในส่วนของ Tripster เราได้เขียนเล่าไว้แล้ว สามารถอ่านได้ที่นี่เลย

แนะนำ Tripster ทำยังไงให้ mint out ใน 45 นาที
วันน้ีมีแนะนำโปรเจกต์ NFT Tripster Travel Pass กัน เป็นโปรเจกต์ที่ต่อยอดจาก readme.me platform สำหรับ blogger สายท่องเที่ยว เป็น NFT ที่ให้สิทธิประโยชน์ ที่อิงจาก business ที่มีอยู่ ด้วย blockchain technology นั่นเอง
https://www.mikkipastel.com/introduction-tripster-travel-pass-nft-project/

เราจะตรวจสอบผลได้อย่างไร?

ทางเราได้ลองเข้าไปดูผู้โชคดีกิจกรรม Lucky Box รอบเทสรอบที่ 2 ของ Tripster ซึ่งเขานำ Chainlink VRF มา implement หาผู้โชคดีรางวัลใหญ่ที่สุดในรอบเทสนี้เนอะ ซึ่งตอน community call ทางพี่ ๆ ได้บอกว่าการสุ่มนั้นจะมีค่าใช้จ่ายในการสุ่มด้วย ในรอบจริงจะไม่สุ่มทุกรางวัล จะสุ่มเฉพาะของที่มีมูลค่าสูง เช่น iPhone 14, NFT

บน website ตัว dev จะมีประกาศผู้โชคดีที่ได้รับของรางวัล ซึ่งเราสามารถเข้าไปดูข้อมูลพวกนี้ได้ด้วยนะ จะมี Chainlink SubId, Chainlink TX และ Contact Address

เป็นหน้าของ Chainlink VRF Subscription Detail ของตัว Tripster ว่า Subscription ID นี้มีการทำอะไรมาบ้าง สามารถดูประวัติต่าง ๆ ได้ และมีค่าใช้จ่ายในการ consume เป็น $LINK

https://vrf.chain.link/goerli/12242

เข้าใจว่าอันนี้เป็น transaction ในการสร้าง Chainlink VRF Subscription Detail

https://goerli.etherscan.io/tx/0x03ed8cbc3d3dce5d2f64611596dcc13677876c443780b618de44edcf75d056a5#eventlog

Contact Address

อันนี้เป็นตัว smart contract ของการใช้ Chainlink VRF ในการสุ่มผู้โชคดีที่ได้รับรางวัล

https://goerli.etherscan.io/address/0xAF45163FB260524D6f61eDE4d8fC76aD9d387CD6

อยากทดลองเล่นบ้าง

เราสามารถเข้าไปลองเล่นบน testnet ได้นะ ที่เว็บนี้เลย

VRF | Subscription Management
A provably-fair and verifiable source of randomness for your smart contracts, powered by the Chainlink network
https://vrf.chain.link/sepolia

ทดลองโดยการกด Create Subscription ทำการเชื่อมต่อกระเป๋า จะมีการ sign message และเสียค่า gas ด้วยนิดหน่อย ในการสร้างตัว Subscription เราก็จะมีตัว Subscription ไว้ใช้สุ่มแล้วล่ะ สร้าง consumers ข้างในได้ด้วย ซึ่งเขาต้องการ address ของ smart contract ที่เราต้องการสุ่มเนอะ

บน testnet ต้องใช้ ETH เป็นค่า gas (ในที่นี้เราเล่น Sepolia เนอะ) แล้วก็ LINK สามารถไปขอได้ที่

Get Testnet LINK Tokens | Chainlink Faucets
Use Chainlink Faucets to get testnet LINK tokens for testing integrations of Chainlink Web3 services.
https://faucets.chain.link/

ทั้งหมดที่เรา research มาก็จะเป็นประมาณนี้เนอะ ผิดพลาดประการใดขออภัยด้วยค่า //ไหว้ย่อ


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

ติดตามข่าวสารแบบไว ๆ มาที่ 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.