LINE x PancakeSwap: เล่นไลน์ไป ก็ฟาร์มได้ ซิ่งไม่ซิ่งไปดูกัน 🥞🔥

Mike Phulsuksombati
LINE Developers Thailand

--

ช่วงนี้กระแส 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

PancakeSwap Chatbot

บทความนี้จะมีการอธิบายเรื่องพื้นฐานต่างๆใน 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 นั่นเอง

PancakeSwap Farm: https://pancakeswap.finance/farms

โดยการ Yield Farming ใน PancakeSwap เราสามารถทำตามขั้นตอนต่อไปนี้ได้

  1. หากเรามีคู่เหรียญสองเหรียญ (เช่น 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

กดที่ contract จะเห็น source code แล้ว ABI

เมื่อเข้าไปตาม 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 ได้)

ตัวอย่างข้อมูล pool

เมื่อมี 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 เราจะมีขั้นตอนคร่าวๆดังนี้

  1. เราจะทำการ validate input message ที่เข้ามาว่าเป็น valid BSC address รึเปล่า (อยู่ในรูป 0x1234…5678) หากไม่เป็น address เราจะทำการบอก user ให้ใส่ valid address (line 7–15)
  2. เอา address user มา query ข้อมูล staking จาก MasterChef ของ PancakeSwap และ หา totalValue(line 20–30)
  3. นำข้อมูล staking มาสร้างเป็น Flex Message ด้วย template ที่สร้างไว้ และใช้ LINE Messaging API SDK ในการ reply message

เมื่อเราส่ง BSC address ให้ bot จะ reply มาดัง demo ข้างล่าง ✨

PancakeSwap Bot

หากท่านใดสนใจแนะนำให้ลองได้ดู code ฉบับเต็มได้ที่ https://github.com/mikephul/line-pancakeswap

สรุป

ในบทความนี้เราได้เรียนรู้เกี่ยวกับ

  1. Yield Farming และ DeFi เบื้องต้น หลักๆคือ PancakeSwap
  2. การ connect กับ smart contract ด้วย web3.js
  3. การสร้าง Flex message และเก็บเป็น template ใน code
  4. การ reply ด้วย Flex message ผ่าน LINE Messaging API SDK

เป็นยังไงบ้างครับ อ่าน LINE ไป ก็ดู farm ตัวเองได้ผ่าน LINE Bot ตัวนี้ หากท่านผู้อ่านสนใจที่จะ develop เพิ่มเติมสำหรับ DeFi protocol อื่นก็สามารถเขียน code เพิ่มเติมไปต่อกับ smart contract อื่นๆได้ครับ 🖖

--

--