【แนะนำ】
ในประเด็นก่อนหน้าของ "อดีตและปัจจุบันของ Smart Contract Execution Engines" และ "A Familiar New Friend - On-Chain JVM" เราได้แนะนำที่มาของ Smart Contract และ HVM ของเครื่องมือดำเนินการที่พัฒนาขึ้นเองซึ่งสามารถดำเนินการ Java Smart Contract ได้ แม้ว่าประสิทธิภาพของ HVM จะได้รับการปรับปรุงอย่างมากเมื่อเทียบกับ EVM แต่เนื่องจากจำนวนไบต์จำนวนมาก ประสิทธิภาพการดำเนินการในสถานการณ์จำลองการดำเนินการตีความจึงถูกจำกัดอย่างมาก ในทางกลับกัน ปัญหาด้านความปลอดภัยที่เกิดจากช่องโหว่ของสัญญา (โดยไม่คำนึงถึงช่องโหว่ของตรรกะทางธุรกิจ) เกิดขึ้นทุกปี ทำให้เกิดการสูญเสียทางเศรษฐกิจอย่างร้ายแรง มีวิธีแก้ปัญหาที่ช่วยให้ผู้ใช้สามารถทิ้งปัจจัยส่วนตัวและเขียนสัญญาที่ปลอดภัยได้มากที่สุดหรือไม่?
เพื่อแก้ปัญหาเร่งด่วนทั้งสองนี้ เราได้แนะนำ Wasm Virtual Machine FVM และเฟรมเวิร์กการเขียนสัญญาของ Rust บทความต่อไปนี้จะแนะนำการประยุกต์ใช้สองส่วนนี้ในด้านของสัญญาอัจฉริยะโดยละเอียด
【ความปลอดภัย】
ประชากร"ประชากร"มักจะนำสีสันของวิทยาศาสตร์ควอนตัม จะดีกว่าหากมีกลไกอีกชุดหนึ่งเพื่อให้แน่ใจว่าสัญญาถูกต้อง
สนิมในฐานะภาษาสำหรับใช้งานทั่วไปที่มีประสิทธิภาพและเชื่อถือได้คือทางออกที่ดีที่สุดอย่างไม่ต้องสงสัย
ความน่าเชื่อถือของภาษา Rust นั้นขึ้นอยู่กับระบบประเภทที่หลากหลายและโมเดลความเป็นเจ้าของ รวมถึงคอมไพเลอร์ที่ทรงพลังที่สามารถตรวจจับข้อผิดพลาดแบบคลาสสิกได้ในขณะคอมไพล์ สิ่งนี้บังคับให้นักพัฒนาคิดเกี่ยวกับความถูกต้องของโค้ดแต่ละบรรทัดที่พวกเขาเขียนในกระบวนการเขียนสัญญา และยืนยันผ่านคอมไพเลอร์เพื่อให้แน่ใจว่าโค้ดสัญญาที่ตรวจสอบโดยคอมไพเลอร์จะต้องปลอดภัย ซึ่งช่วยเพิ่มความปลอดภัยของ สัญญาและความน่าเชื่อถือ
นอกจากนี้ กรอบงานสัญญาที่พัฒนาขึ้นเองของเรายังมีกรอบการทดสอบรันไทม์ ช่วยให้นักพัฒนาสามารถจำลองการดำเนินการตามสัญญาและค้นหาปัญหาในสัญญานอกเครือข่ายโดยไม่ต้องปรับใช้ สิ่งนี้จะเพิ่มชั้นของการประกันให้กับสัญญาในห่วงโซ่อย่างไม่ต้องสงสัย
นอกจากนี้ โครงร่างสัญญาของเราใช้เทคโนโลยีการขยายมาโครของสนิมเพื่อวางการดำเนินการในคำอธิบายประกอบมาโคร ซึ่งช่วยให้นักพัฒนาสามารถให้ความสำคัญกับตรรกะทางธุรกิจของสัญญาระหว่างการใช้งานซึ่งรับประกันความปลอดภัยของตรรกะสัญญาได้ในระดับหนึ่ง ท้ายที่สุด จำเป็นต้องเน้นเพียงส่วนเดียวเท่านั้นโดยปราศจากการแทรกแซงจากปัจจัยอื่นๆ เพื่ออุทิศตนให้มากขึ้น เพื่อขัดเกลารายละเอียดของตรรกะ
【ประสิทธิผล】
EVM โดยพื้นฐานแล้วเป็นโปรแกรมสคริปต์และเครื่องเสมือนแบบสแต็ก ซึ่งจำเป็นต้องแปลเป็นคำสั่งโดยคอมไพเลอร์ จากนั้นดำเนินการ นั่นคือ ตีความและดำเนินการ ซึ่งทำให้ประสิทธิภาพการดำเนินการของ EVM ต่ำมาก ในทางตรงกันข้าม Wasm ใช้วิธีการคอมไพล์และดำเนินการ ใช้เทคโนโลยีเครื่องเสมือน/ไบต์โค้ด และกำหนดรูปแบบไบนารีขนาดกะทัดรัด ซึ่งมีความเร็วในการดำเนินการที่สูงขึ้นและเร็วกว่าของสัญญาอัจฉริยะ ดังนั้นเราจึงแนะนำ Wasm เพื่อปรับปรุงประสิทธิภาพการดำเนินงานของสัญญาทั้งหมดอย่างมาก
WASM (WebAssembly) หมายถึงเว็บแอสเซมบลีอย่างแท้จริง ซึ่งเป็นภาษาแอสเซมบลีที่ปรับแต่งสำหรับเว็บเบราว์เซอร์ แม้ว่าจะมีการกล่าวถึงการปรับแต่งที่นี่ แต่ด้วยการพัฒนาของจิตวิญญาณ มันไม่ได้ใช้ได้กับเว็บเท่านั้น และ "ข้อมูลจำเพาะหลัก" ของมันไม่มีส่วนเกี่ยวข้องกับแพลตฟอร์ม เนื่องจากเรียกว่าแอสเซมบลีจึงมีลักษณะเฉพาะของภาษาแอสเซมบลี:
1) ระดับต่ำ ใกล้กับภาษาเครื่อง ปรับปรุงประสิทธิภาพการทำงาน
2) เหมาะเป็นรหัสออบเจ็กต์ที่สร้างโดยคอมไพเลอร์ภาษาระดับสูงอื่น ๆ (C/C++/Rust/Go ฯลฯ) เพื่อขยายการบังคับใช้
นอกจากนี้ โมดูลยังเป็นหน่วยของการรวบรวม การส่ง และการโหลดโปรแกรม wasm wasm กำหนดรูปแบบโมดูลสองรูปแบบ:
รูปแบบไบนารี: เป็นรูปแบบการเข้ารหัสหลักของโมดูล wasm และไฟล์ต่อท้ายด้วย .wasm เนื่องจากการออกแบบรูปแบบที่กะทัดรัดมาก จึงสามารถลดขนาดไบนารีได้ และมีประสิทธิภาพการส่งและดำเนินการที่เร็วขึ้น
รูปแบบข้อความ: ไฟล์นี้ต่อท้ายด้วย .wat และจะไม่ขยายรายละเอียดที่นี่
การแบ่งโมดูลทำให้โครงสร้างองค์กรของ Wasm ชัดเจนขึ้น การวิเคราะห์สะดวกยิ่งขึ้น และประสิทธิภาพของการวิเคราะห์ดีขึ้นมาก
[คำอธิบายโดยละเอียดของ FVM]
ดังนั้น นอกเหนือจากการใช้ Rust เพื่อเขียนสัญญาและคอมไพล์สัญญาเป็น wasm bytecode เพื่อเรียกใช้สัญญาจริงแล้ว ยังจำเป็นต้องจัดเตรียมสภาพแวดล้อมการทำงานสำหรับ wasm ซึ่งเป็นสิ่งที่ FVM ทำ
พูดในเชิงความหมาย โมดูล wasm สามารถแบ่งออกเป็นสามขั้นตอนตั้งแต่รูปแบบไบนารีจนถึงการดำเนินการขั้นสุดท้าย: การถอดรหัส การตรวจสอบ และการดำเนินการ ขั้นตอนการถอดรหัสจะถอดรหัสโมดูลไบนารีเป็นรูปแบบหน่วยความจำ ขั้นตอนการยืนยันจะวิเคราะห์โมดูลแบบคงที่เพื่อให้แน่ใจว่าโครงสร้างของโมดูลตรงตามข้อกำหนดข้อมูลจำเพาะ และรหัสไบต์ของฟังก์ชันจะไม่มีลักษณะการทำงานที่ไม่ถูกต้อง ระยะการดำเนินการสามารถแบ่งออกเป็นสองส่วน ส่วน: การสร้างอินสแตนซ์และการเรียกใช้ฟังก์ชัน
(1) องค์ประกอบของ FVM
เห็นได้ชัดว่า ฟังก์ชันที่สมบูรณ์ของ FVM ควรรวมถึงการถอดรหัส การยืนยัน การสร้างอินสแตนซ์ และการเรียกใช้ฟังก์ชันที่กล่าวถึงข้างต้น เราใช้ FVM ตามกระบวนการทั้งหมด แต่ในการใช้งานจริง เราพบว่ากระบวนการดำเนินการใช้ประสิทธิภาพอย่างมากในการอ่าน การเขียน และการจัดสรรหน่วยความจำ เพื่อปรับปรุงประสิทธิภาพการดำเนินการของ FVM ให้ดียิ่งขึ้น เราได้เพิ่มเลเยอร์ของโมดูลการคอมไพล์ ซึ่งจะแปลงหน่วยความจำสแต็ก wasm เป็นหน่วยความจำแบบรีจิสเตอร์ ทำเครื่องหมายและนำหน่วยความจำกลับมาใช้ใหม่ หลีกเลี่ยงการจัดสรรหน่วยความจำบ่อย และปรับปรุงประสิทธิภาพการดำเนินการโดยรวมอย่างมาก .
ข้อความ
ข้อความ
(3) กระบวนการโดยรวม
หลังจากแนะนำทั้งหมด ฉันเชื่อว่าทุกคนมีความประทับใจทั่วไปเกี่ยวกับการใช้สัญญาอัจฉริยะของ Rust นี่คือบทสรุปของกระบวนการทั้งหมด:
ขั้นตอนที่ 1: ผู้ใช้เขียนสัญญาอัจฉริยะผ่านกรอบสัญญาสนิม (ต้องทดสอบ)
ขั้นตอนที่ 2: รวบรวมสัญญาเป็นไฟล์ wasm
ขั้นตอนที่ 3: ปรับใช้ไฟล์สัญญา wasm กับ FVM
หลังจากทำตามขั้นตอนข้างต้นเสร็จสิ้น คุณก็ทำสัญญาได้สำเร็จ❤
ข้อความ
สัญญาปัจจุบันมีไว้สำหรับธุรกิจที่ค่อนข้างเรียบง่ายเท่านั้น ในแผนของเรา FVM สามารถนำไปใช้ได้ไม่เฉพาะกับสถานการณ์สัญญาที่มีอยู่เท่านั้นแต่ยังรวมถึงสถานการณ์ที่มีธุรกิจที่ซับซ้อนและความต้องการสูงสำหรับความเร็วในการดำเนินการตามสัญญา ในขณะเดียวกัน ช่างเทคนิคในอุตสาหกรรมที่ไม่ใช่บล็อกเชนจะได้รับวิธีการ "ไม่มีต้นทุนการเรียนรู้" ในการไปที่เชน โดยใช้ภาษาโปรแกรมที่คุ้นเคยในการเขียนสัญญา สถานการณ์การใช้งานและขอบเขตของอิทธิพลของเทคโนโลยีบล็อกเชนได้รับการขยายเพื่อสำรวจโซลูชันการเชื่อมโยงไปถึงเทคโนโลยีบล็อกเชนเพิ่มเติม
ในปัจจุบัน ประสิทธิภาพของ FVM เป็นไปตามความคาดหวังเป็นอย่างดี แต่เราจะไม่พอใจกับสถานะที่เป็นอยู่ในปัจจุบันและความซบเซา ในการวางแผนติดตามผล เราจะสำรวจโซลูชันการเพิ่มประสิทธิภาพต่อไป เช่น:
1) การเพิ่มประสิทธิภาพของแคชเครื่องเสมือน
2) แนะนำ AOT (Ahead-of-Time) นั่นคือวิธีการคอมไพล์ล่วงหน้า แทนที่การตีความและการดำเนินการ bytecode ที่มีอยู่ คอมไพล์โมดูล wasm ลงในโค้ด go โดยตรง ใช้กลไกปลั๊กอินของ go เพื่อโหลดโดยตรง และเรียกใช้และรับประสบการณ์ประสิทธิภาพขั้นสูงสุด
เทคโนโลยีนำเสนอสิ่งใหม่ ๆ อย่างต่อเนื่องและงานเพิ่มประสิทธิภาพจะดำเนินต่อไป "ก้าวไปข้างหน้า" คือเป้าหมายของเรา
【สรุป】
เกี่ยวกับผู้เขียน
เกี่ยวกับผู้เขียน
ลี่ไค
อ้างอิง
อ้างอิง
[1] ภาษาโปรแกรมสนิม
[2] "หลักการ WebAssembly และเทคโนโลยีหลัก"
