LINE x PancakeSwap: เล่นไลน์ไป ก็ฟาร์มได้ ซิ่งไม่ซิ่งไปดูกัน 🥞🔥
ช่วงนี้กระแส DeFi Yield Farming มาแรงมากๆ และหลายๆท่านก็คงจะได้ทำ yield farming บน Binance Smart Chain บ้าง ไม่มากก็น้อย
ในบทความนี้เราจะมาทำ LINE Chatbot ที่ไปดึงข้อมูล Yield Farming จาก PancakeSwap กัน 🥞 (ดู demo)
โดย user จะส่ง address ให้ แล้ว Chatbot จะทำการ connect กับ smart contract ของ PancakeSwap เพื่อหาข้อมูลการ farm ของ user แล้วส่งกลับไปด้วย Flex Message
บทความนี้จะมีการอธิบายเรื่องพื้นฐานต่างๆใน DeFi เยอะหน่อยหากใครทราบอยู่แล้วสามารถข้ามส่วนนี้ไปได้เลยนะครับ
Yield Farming คืออะไร?
Yield Farming คือการนำเหรียญ cryptocurrency ที่เรามีอยู่ไปสร้างผลตอบแทนเพิ่มเติม โดยเราสามารถนำเหรียญที่เรามีอยู่ไปให้ DeFi platform ยืมใช้งานหรือเอาเหรียญไป lock กับ DeFi plaform ต่างๆ ซึ่งเราจะได้ผลตอบแทนเป็นค่า fee หรือ เหรียญ reward จาก platform นั้นๆ 🧑🌾
กล่าวคือเรากำลัง farm เหรียญ crypto เพิ่มจากเหรียญ crypto ที่เรามีอยู่นั่นเอง
PancakeSwap คืออะไร?
PancakeSwap เป็น Decentralized Exchange (DEX) บน Binance Smart Chain (BSC) โดย user สามารถแลกเปลี่ยน cryptocurrency กันได้โดยไม่ต้องอาศัยตัวกลาง นอกจากนี้ user สามารถ Yield farm บน PancakeSwap ได้โดยการช่วย add liquidity ให้กับ PancakeSwap เพื่อรับผลตอบแทนเป็นทั้ง trading fee และ governance token ของ PancakeSwap หรือคือเหรียญ CAKE นั่นเอง
โดยการ Yield Farming ใน PancakeSwap เราสามารถทำตามขั้นตอนต่อไปนี้ได้
- หากเรามีคู่เหรียญสองเหรียญ (เช่น CAKE-BNB) และต้องการได้ reward จากการให้คนมา swap ระหว่างคู่เหรียญ เราสามารถนำคู่เหรียญไป add liquidity ให้กับ PancakeSwap เสร็จแล้วเราจะได้ LP token ของคู่เหรียญนั้นมา
2. เมื่อได้ LP token มาแล้วเราสามารถนำ LP token มา stake หรือ ฝากไว้กับ PancakeSwap เพื่อที่จะรับเหรียญ CAKE มาเป็น reward เพิ่มเติมได้
DeFi service ต่างๆ ที่เราใช้งานนั้น จริงๆแล้วคือ Smart Contract หรือคือ program ที่ run อยู่บน Blockchain นั่นเอง ซึ่งต่อไปเราจะมาดูวิธีการ connect กับ smart contract ของ PancakeSwap กันต่อครับ
Let’s Start 🐰
ทุกท่านสามารถดู code เต็มของบทความนี้ได้ที่ GitHub ของผมครับ เราจะมาเริ่มกันตั้งแต่การต่อ smart contract เลยครับ
1. เชื่อมต่อ smart contract ด้วย Web3
การเชื่อมต่อเข้ากับ smart contract นั้นเราจะใช้ library ที่ชื่อว่า web3.js โดย web3 นั้นจะสามารถใช้ในการสร้าง transaction เพื่อส่งให้กับ smart contract หรือจะใช้เพื่อ query ข้อมูลจาก smart contract ก็ได้
ก่อนเริ่มใช้งาน web3 เราจะต้อง set provider ให้กับ web3 ก่อน หรือง่ายๆคือ set ว่าจะให้ web3 ไปต่อกับ blockchain ไหน โดยใน line 11–13 เราจะ set provider ของ web3 ให้ต่อกับ BSC ซึ่งเป็น blockchain ที่ PancakeSwap อยู่ โดยการใส่ RPC endpoint ของ BSC ลงไป
การจะ interact กับ smart contract บน blockchain นั้นเราจะต้องรู้ address และ ABI (Application Binary Interface) ของ smart contract บน blockchain ซึ่งเราสามารถหาได้จากการดู blockchain explorer เช่น BSC Scan เป็นต้น โดยเราจะ getContract จาก line 16–18
ลองมาดูตัวอย่างการ getContract
จาก PancakeSwap กันครับ โดยเราจะต่อกับ staking contract ของ PancakeSwap หรืออีกชื่อที่รู้จักกันโดยทั่วไปคือ MasterChef
ซึ่งเป็น smart contract ที่จะแจก reward เหรียญ CAKE ให้กับเรา โดย จะอยู่ที่ address 0x73feaa1eE314F8c655E354234017bE2193C9E24E
เมื่อเข้าไปตาม link เราจะสามารถ export ABI ของ contract ออกมาได้ และเมื่อเราได้ทั้ง contract address และ ABI เราก็สามารถเชื่อมต่อกับ MasterChef
contract ของ PancakeSwap ได้ตาม code ข้างล่าง โดย ABI จะเป็นตัวที่บอก function ของ smart contract ที่เราสามารถเรียกได้
MasterChef คืออะไร?
MasterChef
คือ contract สำหรับ stake ตัว liquidity provider token (LP Token) ซึ่งแสดงความเป็นเจ้าของ liquidity ที่เรา provide ให้กับ PancakeSwap โดยการ stake จะทำให้เราได้ CAKE เป็น reward เพิ่มเติมจาก platform โดย PancakeSwap จะมี pool หรือคู่เหรียญต่างๆให้เราได้ stake เช่น CAKE-BNB, PBTC-BNB เป็นต้น
โดยเราสามารถ check จำนวนเหรียญที่เรา stake ไว้กับ MasterChef
ด้วย function userInfo
โดยจะรับ poolId
ของคู่เหรียญที่เรา stake และ address
ของเรา ทำนองเดียวกันเราสามารถ check จำนวน CAKE reward ที่เราได้รับด้วย function pendingCake
ตาม code ข้างล่าง (หากอยากรู้ว่า MasterChef
มี function อะไรบ้างสามารถอ่านที่ smart contract โดยตรงได้เลย)
แล้วเราจะดู staking pool ทั้งหมดของ MasterChef
ยังไงล่ะ? เราสามารถใช้ function poolInfo
แล้วใส่ poolId
เพื่อไล่ดูข้อมูลของแต่ละ pool ได้ โดยผมได้ทำการดึง pool ทั้งหมดของ MasterChef
ออกมาเรียบร้อยเพื่อให้สามารถ query ได้ไวขึ้น โดยจะอยู่ใน /constants/pools.ts
(แต่ถ้าหากจะ query เองสามารถใช้ function getPoolInfos
ใน /services/masterchef.ts
ได้)
เมื่อมี function ในการหาจำนวน token ที่ user stake และ จำนวน reward เราสามารถหา pool ที่ user stake ไว้ทั้งหมดได้ตาม code ข้างล่าง
โดยเราจะได้ position
ตาม code ข้างล่าง
โดยพวกราคาเหรียญต่างๆ เราจะทำการดึงมาจาก Price Feed API จาก CoinGecko API ซึ่งสามารถดูได้ใน /services/priceService.ts
หลังจากได้ position
เราจะนำมาแสดงด้วย LINE Flex Message กันครับ
2. สร้าง Flex Message Template สำหรับ pool ต่างๆ
เราได้ทำการสร้าง Flex Message ด้วย LINE Bot Designer หรือ Flex Message Simulator
โดยสังเกตว่าจาก flex ที่เราสร้างสามารถแบ่งออกได้เป็น 4 components นั่นคือ addressBar
tableHeader
poolLine
และ summary
โดยเราจะสร้าง template ไว้ที่ /views/flexTemplate.ts
3. สร้าง Webhook สำหรับ Reply ด้วย LINE Messaging API SDK
สำหรับ webhook เราจะมีขั้นตอนคร่าวๆดังนี้
- เราจะทำการ validate input message ที่เข้ามาว่าเป็น valid BSC address รึเปล่า (อยู่ในรูป 0x1234…5678) หากไม่เป็น address เราจะทำการบอก user ให้ใส่ valid address (line 7–15)
- เอา address user มา query ข้อมูล staking จาก
MasterChef
ของ PancakeSwap และ หาtotalValue
(line 20–30) - นำข้อมูล staking มาสร้างเป็น Flex Message ด้วย template ที่สร้างไว้ และใช้ LINE Messaging API SDK ในการ reply message
เมื่อเราส่ง BSC address ให้ bot จะ reply มาดัง demo ข้างล่าง ✨
หากท่านใดสนใจแนะนำให้ลองได้ดู code ฉบับเต็มได้ที่ https://github.com/mikephul/line-pancakeswap
สรุป
ในบทความนี้เราได้เรียนรู้เกี่ยวกับ
- Yield Farming และ DeFi เบื้องต้น หลักๆคือ PancakeSwap
- การ connect กับ smart contract ด้วย web3.js
- การสร้าง Flex message และเก็บเป็น template ใน code
- การ reply ด้วย Flex message ผ่าน LINE Messaging API SDK
เป็นยังไงบ้างครับ อ่าน LINE ไป ก็ดู farm ตัวเองได้ผ่าน LINE Bot ตัวนี้ หากท่านผู้อ่านสนใจที่จะ develop เพิ่มเติมสำหรับ DeFi protocol อื่นก็สามารถเขียน code เพิ่มเติมไปต่อกับ smart contract อื่นๆได้ครับ 🖖