หมายเหตุบรรณาธิการ: บทความนี้มาจาก หมายเหตุบรรณาธิการ: บทความนี้มาจากแอมบี แลบอราทอรี SECBIT
(รหัส: SECBIT) ผู้เขียน: Guo Yu ผู้ก่อตั้ง SECBIT Lab เผยแพร่โดยได้รับอนุญาต
ในด้านของบล็อกเชน ไม่มีโซลูชันใดที่ใช้วิธีการแบบดั้งเดิมที่จะชนะ และมีเพียงนวัตกรรมเท่านั้นที่จะมีอนาคต
——กั๋ว หยู
ฉันเชื่อว่าทุกคนเช่นฉันถูกกลุ่มเพื่อนของ Facebook กีดกันในวันนี้
Libra โครงการสกุลเงินดิจิทัลเข้ารหัสที่ริเริ่มโดย Facebook เปิดตัวอย่างเป็นทางการแล้วในวันนี้ (18 มิถุนายน) Libra ได้เปิดตัวเว็บไซต์อย่างเป็นทางการหลายภาษาและเอกสารไวท์เปเปอร์ พร้อมวางตำแหน่งตัวเองเป็นสกุลเงินระดับโลกและโครงสร้างพื้นฐานด้านบริการทางการเงินสำหรับผู้คนหลายพันล้านคน Libra ยังได้เผยแพร่เอกสารทางเทคนิคหลายฉบับที่ให้รายละเอียดเกี่ยวกับภาษาโปรแกรม Move ที่พัฒนาขึ้นใหม่และโปรโตคอลฉันทามติ LibraBFT ซอร์สโค้ด Libra ได้รับการเปิดแหล่งที่มาบน GitHub และเครือข่ายทดสอบก็เปิดตัวเช่นกัน ปัจจุบันได้รับการออกแบบให้เป็นเชนที่ได้รับอนุญาต (consortium chain) โดยอ้างว่าไม่มีวิธีแก้ปัญหาที่สมบูรณ์สำหรับเชนที่ไม่ได้รับอนุญาตในปัจจุบัน (เชนสาธารณะ) ที่สามารถรองรับความต้องการของผู้คนหลายพันล้านคน และระบุว่าการเปลี่ยนไปใช้เชนที่ไม่ได้รับอนุญาต ห่วงโซ่จะเริ่มขึ้นภายในห้าปีของการปล่อยงาน
ในบรรดาชุดการเปิดตัวของ Libra ภาษาโปรแกรมใหม่ Move นั้นสะดุดตาเป็นพิเศษ ฉันอ่านเอกสารไวท์เปเปอร์ของ Move เป็นครั้งแรก บางทีนี่อาจเป็นลักษณะของภาษาสัญญาอัจฉริยะในอนาคต
Their design goals seem to overlap, or even aim to replace Ethereum? นักพัฒนาจากเบอร์ลิน, Lefteris Karapetsas นำเสนอมุมมองของเขาเกี่ยวกับแพลตฟอร์มโซเชียล:
I think "move" programming language released by $FB could be more interesting than libra. ตาม CryptoPuzzleDream ผู้ก่อตั้ง PuzzleToLife.com:
I'm usually pretty skeptical of anything related to cryptocurrency, but here's one piece of Libra that looks potentially interesting: a bytecode programming language called Move with semantics inspired by linear logic. James Clark ผู้มีความรู้เรื่องมาตรฐานกล่าวว่า:
Move เป็นภาษาแพลตฟอร์มสัญญาอัจฉริยะสำหรับ "สินทรัพย์ดิจิทัล"
ชื่อเรื่องรอง
การใช้ Move Language ที่เป็นประโยชน์ 3 ประการ
ออกสกุลเงินดิจิทัล โทเค็น และสินทรัพย์ดิจิทัล
ชื่อเรื่องรอง
ระบบประเภทคงที่จากล่างขึ้นบน
ระบบประเภทคงที่จากล่างขึ้นบน
Well-typed programs never get stuck.
นี่เป็นคำสแลงในโลกของภาษาโปรแกรม (PL): รหัสประเภทที่ถูกต้องจะไม่มีวันหมดไป หมายความว่าหากมีการตรวจสอบประเภทรหัสสัญญา ความน่าเชื่อถือจะค่อนข้างสูง
ชื่อเรื่องรอง
ปรัชญาทรัพยากรชั้นหนึ่ง
ปรัชญาทรัพยากรชั้นหนึ่ง
คำว่า First-class Resources ค่อนข้างเป็นวิชาการ ในภาษาจีน ทรัพยากรเป็นพลเมืองชั้นหนึ่ง แปลว่าอะไร?
สิ่งที่เรียกว่าพลเมืองชั้นหนึ่งของภาษาโปรแกรมคือวัตถุการเขียนโปรแกรมที่ภาษาโปรแกรมพิจารณาเป็นอันดับแรกเมื่อเขียนโปรแกรม
แล้วทรัพยากร ทรัพยากรคืออะไร? ยังเป็นชื่อที่วิชาการมากอีกด้วย ทรัพยากรเป็นแนวคิดที่สอดคล้องกับคุณค่า สามารถคัดลอกมูลค่าได้ตามต้องการ ในขณะที่ทรัพยากรสามารถใช้ได้เท่านั้น ไม่สามารถคัดลอกได้ ทรัพยากรก็เหมือนโค้ก ถ้าคุณดื่มขวด คุณจะสูญเสียไปหนึ่งขวด และคุณค่าก็เหมือนคำภาษาอังกฤษที่เขียนในสมุดบันทึก คุณสามารถอ่านมันได้ทุกเช้า และมันจะไม่หายไปหลังจากอ่าน ถ้าคุณจำมันได้ จากนั้นเพิ่งทำสำเนาในหัวของฉัน ไม่เพียงแต่คุณอ่านได้ แต่ฉันอ่านได้ด้วย คุณท่องได้ และฉันก็ท่องได้เช่นกัน
ภาษาการเขียนโปรแกรมแบบดั้งเดิม รวมถึงภาษา Ethereum smart contract ใช้วิธี Value สำหรับการทำบัญชีสินทรัพย์ดิจิทัล ซึ่งนำไปสู่ปัญหา: เป็นไปได้ที่จะทำผิดพลาดในการทำบัญชี ในความเป็นจริง มี smart contract ค่อนข้างมากที่มีบัญชีที่บันทึกผิด ตัวอย่างเช่น เมื่อ Zhang San โอนเงินให้ Li Si บัญชีของ Li Si จะมีเงินเพิ่มอีก 10 หยวน แต่ยอดเงินในบัญชีของ Zhang San ไม่เปลี่ยนแปลง ช่องโหว่ในการทำบัญชีที่หลากหลายในช่วงสองปีที่ผ่านมาทำให้ทุกคนสูญเสียความมั่นใจในอนาคตของสัญญาอัจฉริยะ
สัญญาการย้ายใช้ประเภทที่ดูดซับทฤษฎีดั้งเดิมของ "ลอจิกเชิงเส้น" ซึ่งเรียกว่าประเภททรัพยากร สินทรัพย์ดิจิทัลสามารถกำหนดได้ด้วย "ประเภททรัพยากร" ด้วยวิธีนี้ สินทรัพย์ดิจิทัล เช่น ทรัพยากร เป็นไปตามคุณลักษณะบางอย่างในลอจิกเชิงเส้น:
ไม่สามารถคัดลอกเนื้อหาดิจิทัลได้
สินทรัพย์ดิจิทัลไม่สามารถหายไปในอากาศได้
ความหมายที่แท้จริงของ First-class Resources คือสินทรัพย์ดิจิทัลเป็นพลเมืองชั้น 1 ประโยคนี้สามารถขยายไปถึงข้อเท็จจริงที่ว่า Move เป็นภาษาสัญญาอัจฉริยะสำหรับการดำเนินงานสินทรัพย์ดิจิทัล จากมุมมองทางเทคนิค สินทรัพย์ดิจิทัลสามารถใช้เป็นตัวแปรสัญญา สินทรัพย์ดิจิทัลสามารถจัดเก็บ กำหนดค่า ใช้เป็นพารามิเตอร์ของฟังก์ชัน/ขั้นตอน หรือเป็นค่าส่งคืนของฟังก์ชัน/ขั้นตอน และระบบประเภทสแตติกของ Move ช่วยให้รหัสสัญญาอัจฉริยะสามารถตรวจสอบข้อผิดพลาดการใช้ทรัพยากรส่วนใหญ่ผ่านคอมไพเลอร์ระหว่างการคอมไพล์ นั่นคือ ก่อนการปรับใช้ สัญญาอัจฉริยะที่รับประกันจะไม่เปราะบางอย่างที่เคยเป็นอีกต่อไป
ทรัพยากรระดับเฟิร์สคลาสเป็นแนวคิดทั่วไปที่โปรแกรมเมอร์สามารถใช้ไม่เพียงเพื่อปรับใช้สินทรัพย์ดิจิทัลที่ปลอดภัยเท่านั้นแต่ยังสามารถเขียนตรรกะทางธุรกิจที่ถูกต้องสำหรับการรวมสินทรัพย์และบังคับใช้นโยบายการควบคุมการเข้าถึงทรัพยากรในฐานะพลเมืองชั้นหนึ่งเป็นแนวคิดทั่วไปที่โปรแกรมเมอร์สามารถทำได้ ใช้ไม่เพียง แต่เพื่อใช้งานสินทรัพย์ดิจิทัลที่ปลอดภัย แต่ยังรวมถึงการเขียนตรรกะทางธุรกิจที่ถูกต้องและใช้นโยบายการควบคุมการเข้าถึงที่ถูกต้อง
ชื่อเรื่องรอง
การออกแบบหลักประกันสัญญา
สัญญาการย้ายได้รับการออกแบบโดยคำนึงถึงความปลอดภัยอย่างเต็มที่ ก่อนอื่น Move ไม่รองรับการกำหนดแบบไดนามิก (Dynamic Dispatch) โอเค ให้ฉันอธิบายว่า Dynamic Dispatch คืออะไร ในแง่ของคนธรรมดานี่เป็นกลไกทางภาษาที่ยืดหยุ่นมาก สามารถเขียนฟังก์ชัน โพรซีเดอร์ หรือรูทีนย่อยจำนวนมากในโปรแกรมได้ จากนั้นโปรแกรมหลักสามารถเรียกใช้ฟังก์ชัน/โพรซีเดอร์/รูทีนย่อยเหล่านี้เพื่อทำฟังก์ชันต่างๆ ตามลำดับ ถ้าโปรแกรมกำลังทำงาน เราสามารถรู้ได้ว่าโปรแกรมเรียกฟังก์ชันใด หรือเรียกใช้หลายฟังก์ชันตามลำดับ การเรียกใช้ฟังก์ชันเหล่านี้จะเป็น "คงที่" ถ้าก่อนเรียกใช้ เราไม่รู้ว่าฟังก์ชันเรียกของขั้นตอนใดฟังก์ชันหนึ่ง ถูกเรียกใช้ จนกว่าโปรแกรมจะทำงาน เราจะรู้ได้จากการสังเกตเท่านั้น จากนั้นจึงเรียกฟังก์ชันนี้ว่า "ไดนามิก" "ไดนามิก" มีความยืดหยุ่นมากกว่า "คงที่" อย่างเห็นได้ชัด
แต่การมีความยืดหยุ่นก็หมายถึงการมีแนวโน้มที่จะเกิดปัญหามากขึ้น ภาษาโปรแกรมสมัยใหม่หลายภาษาสนับสนุนการกำหนดแบบไดนามิกไม่มากก็น้อย นั่นคือ การสนับสนุนโดยตรงจากระดับภาษา เช่น "การเชื่อมโยงแบบไดนามิก" ที่เกิดจาก "การสืบทอด" ในภาษาเชิงวัตถุ คุณลักษณะแบบไดนามิกไม่เอื้อต่อการให้เหตุผลของโปรแกรม เอื้อต่อการตรวจสอบอย่างเป็นทางการ (การตรวจสอบอย่างเป็นทางการ) น้อยกว่า และมีแนวโน้มที่จะก่อให้เกิดปัญหาด้านความปลอดภัย มี "คุณสมบัติไดนามิก" มากมายในการออกแบบสัญญาอัจฉริยะของ Ethereum เช่น การรองรับพอยน์เตอร์ฟังก์ชันเป็นพารามิเตอร์ สัญญาเป็นพารามิเตอร์ การเรียกผู้รับมอบสิทธิ์ เป็นต้น ในภาษา Move ไม่รองรับรูปแบบของ "การกำหนดไดนามิก" หรือ "คุณสมบัติไดนามิก" เส้นทางการดำเนินการตามสัญญาทั้งหมดสามารถกำหนดได้ในเวลาคอมไพล์
ก่อนการรันสัญญา Move จะถูกตรวจสอบโดยตัวตรวจสอบไบต์ (Bytecode verifier) ซึ่งสามารถตรวจสอบข้อผิดพลาดประเภทต่างๆ ได้ ในเวลาเดียวกัน เมื่อ bytecode ถูกตีความและดำเนินการ มันยังคงมีประเภทอยู่ และมันจะถูกตรวจสอบในขณะทำงาน
เมื่อเปรียบเทียบกับแพลตฟอร์ม Ethereum EVM แล้ว ระบบโมดูล Move ไม่รองรับการพึ่งพาซ้ำแบบวนซ้ำ ซึ่งแก้ปัญหาช่องโหว่การกลับเข้าใช้สัญญาใหม่ได้อย่างสมบูรณ์แบบ (Re-entrancy)
ชื่อเรื่องรอง
ระบบโมดูลที่ทรงพลัง
Move modules are similar to smart contracts in other blockchain languages. …, However, modules enforce strong data abstraction — a type is transparent inside its declaring module and opaque outside of it.
ระบบโมดูล Move ได้รับการออกแบบด้วยภาษาโปรแกรมเชิงฟังก์ชัน (OCaml, Coq, SML) ตามเอกสารไวท์เปเปอร์:
ระบบโมดูลของ Move เป็นรากฐานที่ดีมากสำหรับการตรวจสอบอย่างเป็นทางการของสัญญาอัจฉริยะ และสามารถกำหนด "ค่าคงที่" ภายในโมดูลได้ สิ่งที่เรียกว่าค่าคงที่หมายถึงข้อจำกัดที่เข้มงวดเกี่ยวกับสถานะภายในของสินทรัพย์ดิจิทัล ซึ่งสามารถให้ข้อมูลที่มีค่ามากสำหรับระบบอัตโนมัติของการตรวจสอบอย่างเป็นทางการ ยิ่งไปกว่านั้น "นามธรรมทึบ" ของระบบโมดูลสามารถทำให้การตรวจสอบอย่างเป็นทางการทำงานแบบโมดูลาร์และต้นทุนที่ต่ำลง การเขียนตัววิเคราะห์โปรแกรมและตัวดำเนินการเชิงสัญลักษณ์บนระบบโมดูล Move จะง่ายกว่ามาก เพราะหลังจากแยกส่วนแล้ว ตรรกะของสัญญาสามารถทำได้ง่ายมากและง่ายต่อการให้เหตุผล
ข้อความ
Move Smart Contract ที่รองรับอนาคต
แม้ว่า Move จะดูหยาบกระด้างและยังไม่บรรลุนิติภาวะแต่ทิศทางนี้ก็ยังน่าตื่นเต้น จากระดับภาษา Move เราสามารถเห็นความทะเยอทะยานของ Facebook ในการเป็นแพลตฟอร์มสินทรัพย์ดิจิทัลขนาดใหญ่ บทบาทนี้ควรเป็นของ Ethereum
ทำไมฉันถึงตกหลุมรัก Move นิดหน่อย พอมาคิดดูแล้วน่าจะมีสามเหตุผล:
ได้ซึมซับความสำเร็จด้านการวิจัยในสาขา PL (ภาษาโปรแกรม) และยังได้ซึมซับประสบการณ์และบทเรียนของภาษาสัญญาอัจฉริยะ EVM
การออกแบบให้ความสำคัญกับ "ความปลอดภัยและความถูกต้องของสัญญาอัจฉริยะ"
