เรื่องนี้ถือเป็นเรื่องพื้นฐานที่คนทำฟาร์มหรือว่าอยู่ในโลกของ DeFi จำเป็นที่จะต้องเข้าใจ เพราะมันคือการทำงานพื้นฐานที่สุดที่ทำให้เกิดผลกระทบกับเราและการทำฟาร์มของเราได้ มันเป็นสิ่งที่ทำให้เราได้เงินเพิ่มหรือมันเป็นสิ่งที่ทำให้เงินของเราหายไปทั้งหมดได้ด้วยเช่นกัน
ก่อนที่จะเข้าเรื่อง มีความจำเป็นอย่างยิ่งที่จะต้องเข้าใจเรื่องของ Blockchain ก่อนเป็นสิ่งแรก ซึ่งผมได้เคยทำเนื้อหาเป็นวีดีโออธิบายเอาไว้แล้วที่นี่ Blockchain คืออะไร พื้นฐานความรู้ที่ควรเข้าใจ ทุกคน เพราะถ้าเราไม่เข้าใจการทำงานของ Blockchain แล้วล่ะก็สิ่งต่อไปหลังจากนี้คุณก็จะไม่เข้าใจด้วยเช่นกัน
Smart Contract คือโค้ด ที่เก็บใน Blockchain
มันคือโค้ดที่ถูกเขียนและบรรจุเข้าไปใน Blockchain และด้วยคุณสมบัติของ Blockchain ทำให้โค้ดนั้นจะอยู่อย่างนั้นตลอดไป
แต่ถึงจะเป็นอย่างนั้นก็ตาม ในโค้ดเหล่านั้นก็สามารถบรรจุค่าตัวแปรที่สามารถเปลี่ยนค่าได้เอาไว้ด้วย ซึ่งค่าที่เปลี่ยนไปนั้นก็ถูกบรรจุเก็บในบล็อกเชนซ้ำอีกชั้นหนึ่งอีกทีด้วยเช่นกัน
พูดให้เข้าใจง่ายๆก็คือ ฟังก์ชันการทำงาน กระบวนการคิด ตัดสินใจ จะเป็นเหมือนเดิมตลอดไป ตามโค้ดที่เขียน แต่ค่าที่เก็บอยู่ข้างในสามารถให้เปลี่ยนแปลงไปมาได้ และค่าเหล่านั้น ก็บันทึกลงบน blockchain ด้วยเช่นกัน
ผมยกตัวอย่างเช่น ผมเขียน Smart contract ขึ้นมาเพื่อให้บริการระบบรับฝากเงิน โดยที่จะจ่ายดอกเบี้ยออก ตามระยะเวลาที่ได้เข้ามาฝากเอาไว้
Smart contract จะทำหน้าที่หลักก็คือรับฝาก + จ่ายดอก + ให้บริการถอน แบบนั้นตลอดไป พื้นฐานที่แบบคิดง่ายๆก็จะมีเพียงเท่านี้ ส่วนเงินของใคร เอามาฝากไว้จำนวนเท่าไหร่ ได้ดอกเบี้ยจำนวนเท่าไหร่ จุดนี้คือตัวแปรที่เก็บค่าสามารถอัพเดตและเปลี่ยนแปลงได้ ซึ่งก็เก็บอยู่ในบล็อกเชนด้วยเช่นกัน
เพราะว่าระบบธนาคารนี้จะต้องรองรับคนที่จะเข้ามาฝาก โดยไม่ระบุว่าเป็นใคร (ใช้การอ้างอิงจาก wallet address) และสามารถรองรับการเปลี่ยนอัตราดอกเบี้ยได้ รวมทั้งต้องยอมให้ถอนเงินกลับออกไปได้ด้วย เราจะเห็นได้ว่าจำนวนเงินที่เข้ามาฝาก คนที่เข้ามาในระบบ อัตราดอกเบี้ยที่จ่าย สิ่งเหล่านี้เป็นสิ่งที่แปรผันตลอด โดยข้อมูลเหล่านี้จะถูกทำงานโดยความควบคุมของ Smart contract ทั้งหมด และข้อมูลทุกสิ่งอย่างก็จะบันทึกลงในบล็อกเชนไปเรื่อยๆด้วยเช่นกันไม่ว่าจะเป็นการฝากหรือการถอน
แต่ในส่วนของการคิดดอกเบี้ยนั้น เพื่อให้ระบบทำงานน้อยลง เขาก็จะคิดคำนวณเพียงแค่จุดที่เข้า และจุดที่ออกห่างกันเท่าไหร่ นำมาคำนวณด้วยอัตราดอกเบี้ย แล้วก็คิดดอกให้เพื่อลดภาระการทำงานของ Smart contract ทั้งหมดลง
การทำงาน จะเป็นแบบเดิมตลอดไป
ด้วยคุณสมบัติของ Blockchain ดังนั้นสิ่งที่บันทึกลงไปในบล็อกเชนแล้วจะไม่สามารถเปลี่ยนแปลงได้ตลอดไปโค้ด Smart contract ที่เขียนลงไปใน Blockchain นั่นก็ด้วยเช่นกันไม่มีใครสามารถเข้าไปเปลี่ยนแปลงโค้ดได้อีก ดังนั้นหากมีการเขียนอะไรที่ผิดพลาดความผิดพลาดนั้นจะถูกบันทึกอยู่ในนั้นตลอดไป
ล่าสุด ก็คือเคส Uranium.finance ที่มีการขึ้น Version 2 แต่ว่ามาพบภายหลังจากที่มีคนเข้าใช้งานแล้วว่ามีจุดหนึ่งที่เป็น Bug ทำให้เขาพยายามจะขึ้น Version 2.1 (โดยใช้ smart contract ตัวใหม่) อันเนื่องมาจากคุณสมบัติที่ไม่สามารถไปแก้ไขสิ่งที่ผิดพลาดได้แล้วนั่นเอง แต่สุดท้ายก็ขึ้น version ใหม่ไม่ทัน ถูกแฮกเกอร์ใช้ช่องว่างนี้ในการขโมยเงินออกไปทั้งหมดก่อนที่จะได้ขึ้น Version 2.1 ดังที่เค้าได้อธิบายเอาไว้ที่นี่ https://uraniumfinance.medium.com/exploit-d3a88921531c
และด้วยคุณสมบัตินี้หากโค้ดถูกเขียนขึ้นมาเป็นอย่างดี และมีการตรวจสอบการทำงานในทุกส่วนอย่างถูกต้อง นั่นก็จะเป็นระบบการทำงานที่ดีและเยี่ยมยอดตลอดไป ตราบเท่าบล็อกเชนเน็ตเวิร์คนั้นยังคงทำงานอยู่ (แต่ว่าจะทันสมัยหรือเปล่า ก็เป็นอีกเรื่องนะ เช่น iPhone 4 เคยเป็นสุดยอดมือถือที่ดีที่สุด แต่เราก็มาพบว่า รุ่นใหม่ดีกว่า อะไรแบบนี้ครับ) ซึ่งมีจะแตกต่างกับการทำงานในโลกการเงินปัจจุบัน เพราะระบบใดที่รันมานานแล้วอย่างถูกต้อง แต่อยู่มาวันหนึ่ง Code อาจจะมีการเปลี่ยนแปลง จนทำให้เกิดความผิดพลาดกระทบกับผู้ใช้งานได้ ในภายหลัง
Smart contract ทำงานอยู่ใน Blockchain network
Smart contract ที่ได้บรรจุลงใน Blockchain network แล้วนั้นจะทำงานอยู่ใน Blockchain network นั้นตลอดไปตามคุณสมบัติข้างบนที่เราพูดไปแล้ว แต่อีกคุณสมบัติหนึ่งก็คือมันจะทำงานตลอดโดยไม่ได้อาศัย Server เพียงแค่เครื่องใดเครื่องหนึ่ง แต่มันอาศัยการทำงานของทั้งเน็ตเวิร์คทำงานด้วยกัน เพราะอีกคุณสมบัติหนึ่งของ Blockchain network ก็คือ Distributed data นั่นเอง ดังนั้น smart contract จึงทำงานอยู่ใน server เครื่องใดๆ ของ network นั้นก็เป็นได้ ซึ่งจริงๆ ก็คือ สามารถทำงานได้ทุกเครื่องเหมือนๆกันนั่นเอง เพราะ blockchain data ต้องหน้าตาเหมือนกัน 100% ในทุก node
เราจึงไม่ต้องเป็นกังวลว่าวันนี้ Server ล่มและเราจะทำงานไม่ได้ เพราะว่ามันกระจายตัวอยู่ทั่วโลกนั้นเอง
แต่ถ้าพูดถึงเรื่องนี้ก็อาจจะสงสัยว่าแล้วทำไม BSC network ถึงได้ล่ม หรือ ช้า หรือ อืด บ่อยจัง ต้องบอกว่า BSC network นี้มีการกระจายตัวอยู่น้อยมากๆ ณ วันที่เขียนบทความนี้ มีเพียง 21 node เท่านั้นที่ทำงานอยู่ ดัง list นี้ https://bscscan.com/validators (ซึ่งมีคนบอกว่า ส่วนใหญ่ ก็เป็นเจ้าของโดย Binance.com เองนั่นแหล่ะ) เมื่อเราเอาไปเทียบกับ Ethereum ที่เป็นพี่ใหญ่นั้นมีถึง 5827 nodes ในตอนนี้ https://etherscan.io/nodetracker จะเห็นได้ว่ามีความแตกต่างกันอย่างมาก
อย่างน้อยที่สุดก็มีข้อถกเถียงในเรื่องของการกระจายตัว เพราะเงินของคนจำนวนมากกำลังกระจายตัวอยู่เพียงแค่ 21 nodes เท่านั้นดูจะมีความเสี่ยงสูงมากอยู่หน่อยเช่นกัน (และยิ่งจำนวนมากใน 21 node นั้นเป็นของเจ้าของเดียว ยิ่งทำให้เกิดข้อกังขามากขึ้นไปอีก)
Smart contract ที่เราไปฟาร์ม ก็เป็นสิ่งหนึ่งที่เราเรียกกว่า dapp
จากที่เราอธิบายมาข้างบนแล้วนั้นเขามีชื่อเรียกง่ายๆว่า dapp ย่อมาจาก Decentralized Application ก็คือ Application ที่ทำงานแบบ Decentralized นั่นเอง ดังนั้นเราไม่ได้ทำงานกับ Server เพียงแค่เครื่องเดียว แต่เรากำลังทำงานกับแอปพลิเคชันที่กระจายตัวและรันอยู่ใน Blockchain Network
การจะใช้งาน dapp ต้องมี interface เพื่อเข้าไปติดต่อสื่อสาร
ในการทำงานของ Blockchain Network ถ้าเราต้องการสื่อสารและพูดคุยกับ dapp โดยตรง เราจะต้องใช้ RPC ซึ่งย่อมาจาก Remote Procedure Call ซึ่งเขาได้กำหนดมาตรฐานวิธีการพูดคุยเอาไว้แล้วเป็นที่เรียบร้อย เรามีหน้าที่ต้องเรียกใช้งานฟังก์ชันต่างๆให้ถูกต้อง ตามที่เราต้องการเท่านั้น ซึ่งถ้าวาดเป็นรูปภาพให้เข้าใจก็จะเป็นแบบนี้
จะเห็นได้ว่าเราต้องเรียนรู้ RPC protocol เพื่อจะได้คุยกับ Blockchain network แต่ละ network ได้อย่างเข้าใจ แต่ถามจริงๆว่าคนทั่วไปจะเข้าใจมันได้จริงๆเหรอ นั่นจึงเป็นที่มาว่าจะทำอย่างไรที่จะทำให้มันใช้งานได้ง่ายมากขึ้น
เราจึงต้องสร้าง User interface ขึ้นมา
อย่าง Wallet metamask นี่ ก็ถือได้ว่าเป็น User interface program หนึ่ง ที่ทำให้เราสามารถเข้าไปพูดคุยกับ blockchain network ได้ ในฐานะ wallet (ที่ represent ตัวตนของเรา ด้วย private key + public key ที่เราถืออยู่ ลองอ่านเพิ่มเติมได้ที่ เรียนรู้ Seed word และ wallet อย่างถูกต้องเข้าใจจริง)
โดย Metamask มุ่งเน้นที่ทำให้ตัวเองมีความสามารถหลักๆเพียงแค่การ โอน, sign transaction , control multiple wallet และล่าสุดเขาก็เพิ่มฟีเจอร์ให้รองรับการ Swap เหรียญได้ด้วยขึ้นมา แต่ก็เพียงเท่านั้นที่ Metamask ตั้งใจจะทำ
แต่ละ Platform จึงสร้าง User interface ขึ้นมา เพื่อให้ใช้งานได้สะดวก
ผมยกตัวอย่าง website pancakeswap.finance ที่เราคุ้นเคยกันดี จริงๆแล้ว Application หรือการทำงานต่างๆทั้งหมด ถูกบรรจุอยู่ใน Smart contract ซึ่งเก็บเอาไว้บนบล็อกเชนแล้วเป็นที่เรียบร้อย แต่ถ้าเราจะต้องใช้ Metamask ไปคุยตรงๆด้วยแล้ว เราก็คงทำไม่ได้ เพราะ Metamask ไม่รองรับการให้เราป้อนค่าต่างๆ เพื่อไปแปลงเป็น RPC แล้วไปคุยกับ dapp ของ pancake
Website pancakeswap จึงเป็นสะพานที่ทำหน้าที่เชื่อมส่วนที่ขาดหายไปนั้น โดยบางส่วนเราก็จะเห็นข้อมูลที่มาจาก Web farm เอง บางส่วน Web farm ก็ดึงมาจาก blockchain network แสดงให้เรา แต่ถ้าเป็นส่วนการทำธุรกรรมนั้น จะเป็นการคุยกันระหว่าง Metamask wallet ตรงกับ blockchain network อีกที
ถ้าอธิบายเป็นภาพก็จะเป็นประมาณนี้ สิ่งที่เราเห็นจากเว็บตามนั้น เป็นเพียงแค่ สิ่งที่ทำให้เราใช้งานได้ง่ายขึ้นมีความสวยงามเพียงเท่านั้น แต่ว่าการส่งคำสั่งใดๆไม่ว่าจะเป็นการ Deposit / Stake หรืออื่นๆทั้งหมด ตัว Metamask wallet จะเป็นคนที่ส่งเข้าไปใน Block chain Network เองเท่านั้น Web farm ไม่ได้เป็นคนทำ ถ้าจะให้ web farm ทำได้ เราต้องให้ private key กับ web farm เหล่านั้นด้วย ซึ่งไม่มีใครเค้าทำกัน
เนื้อหาที่ซ่อนอยู่ เป็นรูปอธิบายการทำงานร่วมกันระหว่าง web <> metamask <> blockchain network ,ภาษาที่ใช้บน smart contract , วิธีการดูโค้ดของ smart contract , เปรียบเทียบโค้ดของ 2 platform ให้ดู ใน function withdraw เพื่อให้พอเข้าใจเบื้องต้น
เนื้อหาพิเศษ ต้องแลกด้วย Reach เท่านั้น
เนื้อหาส่วนนี้เป็นเนื้อหาพิเศษ จะต้องใช้ reach ในการเข้าอ่านเนื้อหาจุดนี้ เมื่อแลกด้วย reach แล้วจะสามารถอ่านเนื้อหาที่ซ่อนอยู่เพิ่มเติมได้ หากมี reach แล้วกรุณา login ก่อน อ่านรายละเอียดเพิ่มเติมเรื่อง Reachอย่าเชื่อใจใคร
แม้กระทั่งในเอกสารของ Audit report ที่ review smart contract เองก็ตาม เราต้องตามไปดูอ่านให้รู้แจ้งเห็นจริง ว่าเขามีการทำงานอย่างไร เอกสาร audit สามารถสร้างปลอมขึ้นมาได้ document ที่แจ้ง smart contract ก็เขียนปลอมได้เหมือนกัน แต่ถ้าเราตามหา smart contract ตัวจริงเจอ แล้วเห็นเองในโค้ดแล้ว มันปลอมไม่ได้แน่นอน หรือว่าบางครั้ง เค้าเอาโค้ดใน github ส่ง audit เราก็ต้องเอาโค้ดใน github มาเทียบกับใน smart contract อีกทีนึงด้วยเช่นกัน ว่าตรงกันมั้ย ถ้าตรงกัน ก็น่าเชื่อได้ว่า เป็นโค้ดชุดเดียวกันกับที่ audit ผ่านมาแล้ว นั่นเอง เราต้องตั้งความคิดว่าเค้าหลอกเราเอาไว้ก่อนเสมอ จนกว่าเราจะ prove ได้ว่า เราคิดผิด
เชื่อตัวเองดีที่สุด