# อธิบาย OP Stack แบบไม่กาว แต่รับรองความว้าว **Published by:** [thesleeper (✨🔴_🔴✨)](https://paragraph.com/@thesleeper/) **Published on:** 2023-01-05 **URL:** https://paragraph.com/@thesleeper/op-stack ## Content ของดีแบบไม่กาวจาก @optimismFND กับ OP Stack Blockchain แบบ Modular ในฝันที่เราสามารถ Mix & Match เลเยอร์ต่างๆ ได้ตามใจ ฟังไอเดียจาก @karl_dot_tech ไปแล้ว วันนี้ @kelvinfichter จะมาอธิบายหลักการทำงานแบบไม่กาว แปลจาก Devcon Bogota เธรดนี้อาจจะเทคนิดนึง แต่รับรองว่าเจ๋ง ก่อนจะไปเข้าเนื้อหา อาจต้องปูที่มา เพื่อให้เข้าใจว่าทำไมแนวคิดของทีมมากขึ้น ย้อนกลับไปตอนปี 2020 ตอนนั้นใครๆ ก็แข่งกันสร้างเชน Monolith Rollups เช่น Solana ทำได้ครบ แต่มี Codebase ใหญ่ยักษ์ ยุคนั้นความรู้ความเข้าใจวิธีการทำงานมันยังไม่ชัดเจนเท่านี้ Data availability คืออะไร? ทำให้ทุกอย่างถูกนิยามและจำกัดโดยมี Proof system เป็นกรอบ พอคิดได้แบบนั้นไอเดียการสร้าง Optimistic Rollups เลยต้องเริ่มจากการสร้าง Fault Proof เป็นอย่างแรก แล้วค่อยๆงมเพื่อให้สามารถใช้ EVM ได้ หลังจากงมอยู่ 4-5 เดือนก็เพิ่งมาเก๊ทวิธีการทำงานต่างๆ ประหนึ่งตรัสรู้ว่าที่ผ่านมาเข้าใจอะไรหลายๆ อย่างผิดมาตลอด แม้แต่เรื่องที่ฟังดูง่ายๆ อย่าง Withdrawal ก็ไม่ได้ทำงานในแบบที่พวกเขาเคยคิด สิ่งที่พวกเขาตกตะกอนในช่วง 2021-2022เข้าใจว่า Proof ควรแยกออกจาก Execute โดยสมบูรณ์ และ Proof ไม่ควรเข้าไปควบคุมและจำกัดการทำงานเข้าใจว่าควรแตก Data availability layerMetis forked OP เพิ่ม DA committeeArb ปล่อย NOVA ที่มี DA committeeถึงจุดนี้ Rollups เลยเปลี่ยนตัวเองเป็น Modular เริ่มจากแตก Layer เป็น 3 ระดับของการทำงานConsensus (ตย. Rollups, Plasma)Execution (ตย. EVM, Move)Settlement (ตย. Fraud, ZKp, Multisig)เริ่มจาก Consensus ในนี้มีอะไรเกิดขึ้นบ้าง?Data Availability Layer (DA)Derivation1. DA Layer คืออะไร?เป็นที่ๆโพสต์ Data และดึงข้อมูลต่างๆ ไปใช้มี ordered list of blobsโดยมี 2 เงื่อนไข Data=available พร้อมใช้งาน Data=immutable เปลี่ยนแปลงไม่ได้ Code type DA = byte[]ตัวอย่าง DA LayersEthereum (ผ่าน Calldata)Ethereum (ผ่าน 4844)CelestiaArrays of blobs = blobs blocks2. Derivation สิ่งนี้น่าสนใจกว่า อธิบายแบบกว้างคือ การใช้ DA Layer และทำความเข้าใจสิ่งที่อยู่ข้างในก่อนส่งต่อโดยเพิ่ม current state ของ L2 system เพื่อสร้าง Input ให้เชน เพิ่มเติม Derive แปลว่าสืบ เหมือนสืบค้นข้อมูล Derivation แบบเป็นทางการ เพื่อให้เข้าใจการทำงานมากขึ้น สิ่งนี้มี function signature ที่เรียบง่าย Derive (Sprev,Da) => {payload or null} แปลแบบบ้านๆ ระบบจะทำการสืบข้อมูลจาก (จาก state ก่อนหน้า+จาก DA) => เพื่อสร้าง {payload หรือไม่สร้างอะไรเลย} Bedrock Optimism derives ข้อมูลจาก 3 ทางDerive จากข้อมูล Sequencer ที่โพสต์บน Address แบบเจาะจงบน L1 (ส่วนใหญ่จะมาจากที่นี่) เช่น sequencer จับ txn มามัดรวมกันแล้วโพสต์บน L1 การโพสต์บน address ไม่ใช่บน contract เป็นวิธีที่ดีและน่าสนใจDerive จาก Deposit ที่ส่งไปยัง Portal contract (Deposit contract) ทุกครั้งที่มีการ Deposit เกิดในบล็อกปุ๊บ เราจะดึงข้อมูลมาสร้าง L2 deposit txสร้างจาก L1 block data ทุกครั้งที่มีบล็อกจาก L1 ที่พกข้อมูลของ L1 มาไว้บน L2 ทั้งสามทางนี้คือวิธีในการดึงข้อมูล payload เพื่อ Execute บน L2ทั้งหมดนี้เป็นเรื่องที่ทรงพลังมากเพราะ จากเมื่อก่อนที่ Rollups อ่านข้อมูลจากไม่กี่ที่อ่าน sequenced txn โดยตรงจาก Tx dataอ่าน deposit data จาก Eventsแต่ Bedrock สามารถสืบข้อมูลได้มากกว่า และทำได้หลายช่องทางกว่านั้นมากๆ กลายเป็นว่าเราแทบจะสามารถดึงข้อมูลจากไหนก็ได้ ตัวอย่าง สมมุติเรามี L2 ที่ยังไม่มี user tx ทุกครั้งที่มีการ swap ใน uniswap บน L1 เราสามารถสร้าง L2 tx ที่มีทั้งข้อมูล Assets และจำนวน ที่ swap อยู่ในนั้นไปพร้อมกัน หลังจากนั้นทุกๆ Tx จะอัปเดต Value บน smart contract และนับจำนวน Value ทั้งหมดตลอดเวลา การฟีดข้อมูลตลอดเวลาจากหลายๆ ช่องทางนี้ มีหลักการทำงานเหมือน Indexer เปี๊ยบ ที่จิงแล้ว Indexer ก็คือ Rollups นั่นแหละ แค่คนส่วนใหญ่ยังไม่เก๊ท จุดนี้คือสิ่งที่ทำให้ Bedrock มีค่าทำธุรกรรมที่ถูกลงและเร็วขึ้น จบ ConsensusExecution Layerเมื่อ Derivation+Execution ทำงานร่วมกันจะสร้างฟังก์ชั่น loop ขึ้นมารอ element ใหม่จาก DA layer listRun derivation Function ผลลัพธ์ = null ให้กลับไป Run Step 1 ใหม่ ถ้าผลลัพธ์ = payload ให้ส่งต่อไปที่ Execution Layer อัปเดตสถานะใหม่แล้วกลับไป Run Step2Execution ของ Bedrock เป็นไง คือ EVM นั่นแหละแค่ปรับเล็กน้อยมี diff เล็กๆ deposit tx type ที่ allow contract บน L2 ติดต่อกับ L1โค้ดน้อยกว่า 1k Line ใน Single Commit ทำให้รองรับ multiple Client ช่วยปิดช่องโหว่ของ Proof ที่ไม่ว่าจะดีแค่ไหนแต่ถ้าใช้แค่ Client เดียวก็เสี่ยงทำไมการใช้ Client เดียว = เสี่ยง? เพราะว่า Proof คือระบบคอนเฟิร์ม execution บน Client ถ้าอยู่ๆ มีบัคเกิดขึ้นใน Client ขึ้น ตัว Proof มันก็จะ Proof บัคให้ผ่านอยู่ดี การทำ Client Diversity คือคำตอบ และเป็นเหตุผลที่ OP Stack จะรองรับหลาย Proof พร้อมกัน ถึงแม้ทีม OP จะทำ Execution Layer ให้เป็น EVM แต่สิ่งนี้ก็ไม่จำกัดอยู่แค่นี้ เพราะมีความยืดหยุ่นสูงมาก จะเอาไปใส่เกมส์มายคร๊าฟอย่าง OPCraft ของ @latticexyz จะใส่ Gameboy ก้ได้ ใส่ Python ก็ได้ ทำอะไรก็ได้แค่ compile MIPSสุดท้าย Settlementส่วนใหญ่เค้าจะเคลมว่ามันคือ state root ของระบบ L2 เช่น Fault Proof / Validity Proof ซึ่งแต่ละเชนก็จะใช้เคลมเป็นจุดขาย ถ้าเอา OP Stack ไปใช้ ก็สามารถเลือกแบบที่ชอบ หรือจะใช้ Proof หลายๆ แบบก็ได้ แค่ทำให้มันเข้าถึง DA layer ได้ก็เวิร์ก จะทำให้เข้าถึง DA Layer โดยใช้ type DA = byte[] เพื่อให้เข้าถึง Array of blobs แล้ว getBlobByIndexer Idea นี้มี property ที่สำคัญสองอย่างต้องสามารถ return the blobs ซึ่งต้องพึ่ง Data availability Layerต้องมีระบบที่ Proof ความถูกต้องของ BlobsValidation function ใน Bedrock ข้อดีของ ETH คือเราสามารถย้อนดูบล็อกก่อนหน้าได้เรื่อยๆ Bedrock ก็จะตรวจสอบความถูกต้องของ Blobs ด้วยการทำแบบนั้นสรุปหลังจากที่รวมทุกอย่างที่เล่าเข้าด้วยกัน Bedrock Codebase สามารถเอาไปทำอะไรก็ได้ตามใจ ไม่ว่าจะเป็นเรื่องเล็กๆหรือเรื่องใหญ่ๆทำ bitcoin plasmaทำ Bridge rollup ที่ใช้ multiple DA และ Settlement Layerสร้าง VM คู่ขนาด ไว้ Raise fund ขำๆ (แซะ) ทำอะไรก็ได้ที่ลงตัวกับ APIs ## Publication Information - [thesleeper (✨🔴_🔴✨)](https://paragraph.com/@thesleeper/): Publication homepage - [All Posts](https://paragraph.com/@thesleeper/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@thesleeper): Subscribe to updates - [Twitter](https://twitter.com/aka_steppenwolf): Follow on Twitter