คำนวน TVL แบบ KillSwitch, Fully Decentralized App โดยไม่ใช้ data จากภายนอก
Total Value Locked คือ มูลค่าของทรัพย์สินที่ถูก Lock อยู่ใน Platform ของเรา
ในมุมมองของ KillSwitch นั้น ต้องบอกก่อนว่าจริงๆแล้วจะไม่ได้มี Token lock อยู่ใน Smart Contract ของตัวเอง เพราะ KillSwitch นั้นทำหน้าที่เหมือนตัวแทน(proxy) ในการฝากและถอน LP ของนั่งซิ่ง 🚀 แต่ละคน โดยการขอ approve ให้ KillSwitch Smart Contract สามารถดึง Token ใน wallet ของนักซิ่ง (High risk yield farmers) ไปฝากต่อที่ LP Contract Smart Contract แทน
ซึ่งการคำนวน TVL ทำได้โดยดึงข้อมูลว่า KillSwitch Smart Contract ของเราฝาก LP Token เข้าไปทั้งหมดเท่าไร โดยการ get ค่า userInfo ผ่าน MasterChef Contract โดยมี parameter คือ เลข pool Id และ address ที่ทำการฝาก LP เข้าไป ซึ่งก็คือ KillSwitch Smart Contract ของเรานั่นเอง
จากตรงนี้เราจะได้ค่า amount มาทั้งหมด 64.537 LP แล้วมันมีมูลค่ากี่ 💲 หละ ซึ่งเราก็ต้องรู้ก่อนว่าถ้า LP คู่นี้ถูกเผาออกมาแล้วเนี่ยจะได้ Cake <> wBNB ฝั่งละเท่าไร
คู่ LP ที่เราสนใจคือ pool Id 1 ซึ่งเป็นคู่ของ cake และ wbnb วาร์ปไป LP Smart Contract ซึ่งเราสามารถดู Smart Contract ของ cake, wbnb และ totalSupply ได้ที่นี่เลย ซึ่ง totalSupply คือจำนวน LP Token ทั้งหมดในระบบ (ทด totalSupply ไว้ก่อนจะนำไปใช้ใน step หน้า)
โดยวิธีการคือ เราจะต้องไปหา Balance ของทั้งสอง Token ก่อนว่ามี Token locked ใน Smart Contract ของ LP อยู่เท่าไร วิธีการคือเรียกใช้คำสั่ง balanceOf ของ ERC20 interface ของแต่ละ token
🍰 token0–0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82
💲 token1–0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c
โดย address input ก็คือ Smart Contract ของ LP เพื่อดู Balance ของ token0 และ token1
ถึงตอนนี้เราก็จะรู้จำนวนเหรียญ LP ทั้งหมด (totalSupply) และ มูลค่าเหรียญที่อยู่ใน Smart Contract (balance0, balance1)
เพราะฉะนั้น ลองเทียบบรรญัตไตรยาง
LP ทั้งหมดมีมูลค่า balance0
1 LP จะมีมูลค่า balance0 / LP นั่นเองง
แต่เราต้องทำสองข้าง
1 LP ของ token0 จะมีมูลค่าเท่ากับ balance0 / totalSupply ( Total LP Token)
1 LP ของ token1 จะมีมูลค่าเท่ากับ balance1 / totalSupply ( Total LP Token)
เอามาคูณด้วยจำนวน LP ที่เรามี ก็จะได้เป็นสูตรเผาคู่เหรียญด้านล่างเลย
token0 = (balance0 * LP) / totalSupply
token1 = (balance1 * LP) / totalSupply
จากสูตรด้านบน ใครอยากจะเอาไปทำเป็น Smart Contract ก็ได้นะ หรือจะ get มาที่ละค่าแล้วก็คำนวนกันที่ front end ก็ตามสะดวกเลย
แล้วเราก็สามารถเผาคู่ LP Token ให้กลับมาเป็น cake และ wbnb ได้แล้ว ทีนี้ถ้าเรารู้ว่า cake ราคาเท่าไร wbnb ราคาเท่าไร ก็ End game
ถึงจุดนี้จะบอกว่าถ้าเรารู้ราคาก็รู้ TVL ทั้งหมด
ถ้าเราสามารถดึงราคาจาก Price Oracle ได้อยู่แล้วก็คงจะไม่มีปัญหาอะไร สามารถข้ามไปตอนจบบทความได้เลย
แต่ถ้าไม่มีหละ~~~
ℹ️ Concept คือในเมื่อใน 🍰 pancake swap จะมี pool ของเหรียญที่คู่กับ stable coin อย่าง busd อยู่เสมอ เช่น wbnb <> busd ซึ่งเราก็ไม่ต้อง swap เหรียญจริงๆ ก็สามารถรู้อัตราส่วนว่า 1 wbnb จะได้เป็นกี่ busd
จาก Pancake Router Smart Contract ด้วย read function getAmountsOut
ก็จะรู้ราคา wbnb ในหน่วย busd
โดย จะรับเป็นค่า path คือ Smart Contract Address ของคู่ LP (wbnb, busd) ลำดับต้องเรียงแบบนี้เลย และ amountIn เช่นเราต้องการทดสอบว่าแลก 1 bnb (1 ตามด้วย ศูนย์ 18 ตัว) จะได้ออกมากี่ busd จากราคา bnb ณ ตอนที่เทสก็ประมาณ
จะได้ amount มาเป็น ~292.22 busd ซึ่งถือเป็น estimate ที่ใกล้เคียงเลยทีเดียว
ทีนี้เริ่มเห็นภาพแล้วใช่มั้ยทุกคนนน 🐥🐥🐥 ถ้าเรารู้ว่า cake ราคากี่ wbnb แล้ว wbnb ราคากี่ busd ก็จะได้ราคา cake ต่อ busd
ขอ assume/estimate ว่า 1 busd = 1 💲 เพราะมันเป็น stable coin 👀 ถ้าใครไม่เชื่อก็อาจจะต้องไปต่อ Price Oracle นะฮะ
เราก็ทำเหมือนเดิม แต่เปลี่ยนเป็นคู่ cake <> wbnb แทน
ก็จะได้ว่า 1 cake มีค่าประมาณ 0.0587 wbnb เท่านี้เราก็จะสามารถคำนวน TVL ของ KillSwitch จาก LP token ได้แล้ว
TVL = cake_in_busd * cake + wbnb_in_busd * wbnb
References