คำเตือนความเสี่ยง: ระวังความเสี่ยงจากการระดมทุนที่ผิดกฎหมายในนาม 'สกุลเงินเสมือน' 'บล็อกเชน' — จากห้าหน่วยงานรวมถึงคณะกรรมการกำกับดูแลการธนาคารและการประกันภัย
ข่าวสาร
ค้นพบ
ค้นหา
เข้าสู่ระบบ
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
ดูตลาด
[คอลัมน์เครื่องเสมือน] อดีตและปัจจุบันของเครื่องมือดำเนินการตามสัญญาอัจฉริยะ
趣链科技 QTech
特邀专栏作者
2021-08-24 07:20
บทความนี้มีประมาณ 3279 คำ การอ่านทั้งหมดใช้เวลาประมาณ 5 นาที
ตามที่เสนอภาษาสัญญาอัจฉริยะภาษาแรก Solidity ได้เปิดประตูใหม่สำหรับสถานการณ์แอปพลิเคชันบล็อก

ตามที่เสนอภาษาสัญญาอัจฉริยะภาษาแรก Solidity ได้เปิดประตูใหม่สำหรับสถานการณ์แอปพลิเคชันบล็อกเชน

ตามที่เสนอภาษาสัญญาอัจฉริยะภาษาแรก Solidity ได้เปิดประตูใหม่สำหรับสถานการณ์แอปพลิเคชันบล็อกเชน

-- ต้นทาง--

คำว่า Smart Contract ถูกเสนอครั้งแรกในปี 1994 โดย Nick Szabo นักวิชาการด้านกฎหมายแบบสหวิทยาการ คำจำกัดความของสัญญาอัจฉริยะของเขามีดังนี้:

"สัญญาอัจฉริยะคือชุดของข้อผูกพันที่กำหนดแบบดิจิทัล รวมถึงข้อตกลงที่คู่สัญญาสามารถบังคับใช้ข้อผูกพันเหล่านั้นได้"

โดยสรุป Nick Szabo มองว่าสัญญาที่ชาญฉลาดคือชุดของสัญญา ความมุ่งมั่นที่เรียกว่าหมายถึงสิทธิและหน้าที่ร่วมกันที่ตกลงร่วมกันโดยผู้เข้าร่วม ดังนั้นสาระสำคัญและวัตถุประสงค์ของสัญญาอัจฉริยะก็คือสัญญานั่นเอง ผู้ขายสัญญาว่าจะจัดหาและผู้ซื้อสัญญาว่าจะชำระเงิน สัญญา 2 อย่างนี้สามารถสร้างสัญญาอัจฉริยะได้ สังเกตคำหลักที่กล่าวถึงในคำจำกัดความของสัญญาอัจฉริยะของ Nick Szabo: รูปแบบดิจิทัลและข้อตกลง คำหลักสองคำนี้กำหนดว่าสัญญาอัจฉริยะแตกต่างจากข้อผูกมัดในความหมายดั้งเดิม และมีลักษณะเฉพาะในรูปแบบและหน้าที่

"สัญญาอัจฉริยะ" ถูกนำมาใช้ครั้งแรกใน blockchain โดย Ethereum ตามเอกสารไวท์เปเปอร์ของ Ethereum การแนะนำสัญญาอัจฉริยะนั้นส่วนใหญ่เพื่อแก้ปัญหาต่อไปนี้:

สำหรับภาษาสคริปต์ สคริปต์ยังไม่สมบูรณ์ (จะแนะนำในภายหลัง) และเป็นการยากที่จะนำฟังก์ชันที่ซับซ้อนไปใช้ เช่น อัลกอริทึมลายเซ็นเส้นโค้งวงรี

สคริปต์ไม่สามารถควบคุมจำนวนเงินที่สามารถถอนได้อย่างละเอียด

สคริปต์ขาดการเก็บรักษาสถานะและไม่สามารถใช้สัญญาแบบมีสถานะที่ซับซ้อนกว่านี้ได้

ข้อมูลที่ได้รับระหว่างการดำเนินการมีไม่เพียงพอ เช่น การได้มาของตัวเลขสุ่ม การประทับเวลา และแฮชบล็อกก่อนหน้า

กล่าวโดยย่อ ภาษาสคริปต์ไม่สามารถตอบสนองการทำงานของแอปพลิเคชันที่สมบูรณ์กว่านี้ได้ ดังนั้น Ethereum จึงออกแบบ Solidity ภาษาสัญญาอัจฉริยะที่ไม่เหมือนใคร และในขณะเดียวกัน EVM เอ็นจิ้นการดำเนินการสัญญาอัจฉริยะก็ถือกำเนิดขึ้นเช่นกัน

ตั้งแต่นั้นมา สถานการณ์การประยุกต์ใช้เทคโนโลยีบล็อกเชนได้ขยายจากธุรกรรมสกุลเงินดิจิทัลที่ใช้ UTXO รายการเดียวไปยังฟิลด์การประมวลผลทั่วไปที่สมบูรณ์ของทัวริง ผู้ใช้ไม่ได้จำกัดอยู่เฉพาะตรรกะง่ายๆ ที่สนับสนุนโดย Bitcoin Script อีกต่อไป แต่สามารถออกแบบตรรกะสัญญาที่ซับซ้อนตามอำเภอใจได้ด้วยตัวเอง

--ภาพรวม--

สัญญาสมาร์ทการออกแบบ Ethereum มีคุณสมบัติการออกแบบดังต่อไปนี้:

▲ ความแน่นอนในการดำเนินการ

ความมุ่งมั่นหมายความว่าโปรแกรมมีเอาต์พุตเดียวกันสำหรับอินพุตที่กำหนด ไม่ว่าจะดำเนินการเมื่อใดและที่ไหน ไม่ว่าจะดำเนินการกี่ครั้งก็ตาม เนื่องจากบล็อกเชนมีบัญชีแยกประเภทเดียวกัน จึงเข้าใจความแน่นอนของการดำเนินการตามสัญญาอัจฉริยะได้ เนื่องจากโหนดต่างๆ ที่ดำเนินการตามสัญญาเดียวกันจะต้องมีผลลัพธ์เดียวกัน

ภาษาสัญญาอัจฉริยะของ Ethereum ได้รับการออกแบบให้เรียบง่ายเพียงพอ เพื่อให้มั่นใจถึงการดำเนินการที่แน่นอน มันจะไม่ใช้ฟังก์ชัน เช่น ตัวเลขสุ่มและการเรียก (ระบบ) ที่ไม่แน่นอน ในขณะเดียวกัน การดำเนินการของสัญญาอัจฉริยะก็อยู่ใน เครื่องเสมือนที่มีสภาพแวดล้อมจำกัด ด้วยวิธีนี้ สามารถรับประกันความแน่นอนของผลลัพธ์ได้ที่ชั้นล่างสุด

▲ ความสมบูรณ์ของทัวริง

ภาษาที่สมบูรณ์ของทัวริง คำอธิบายอย่างเป็นทางการคือภาษาที่ "สามารถคำนวณปัญหาทั้งหมดที่สามารถคำนวณได้โดยอัลกอริทึม" รวมทั้งการวนซ้ำไม่สิ้นสุด จุดประสงค์ของการแนะนำสัญญาอัจฉริยะใน Ethereum คือเพื่อให้บรรลุความสมบูรณ์ของทัวริงเพื่อรองรับแบบฟอร์มใบสมัครที่สมบูรณ์ยิ่งขึ้น

ปัญหาหนึ่งที่ต้องแก้ไขหลังจากการแนะนำความสมบูรณ์ของทัวริงคือปัญหาการหยุด: โดยทั่วไปไม่มีทางที่จะบอกได้ว่าโปรแกรมที่กำหนดจะหยุดทำงานหรือไม่

เพื่อหลีกเลี่ยงปัญหาการหยุดทำงานที่เกิดจากความสมบูรณ์ของ Turing Ethereum ได้แนะนำกลไก Gas เพื่อทำการคำนวณต้นทุนในกระบวนการดำเนินการที่เกี่ยวข้อง โดยการคำนวณต้นทุนของการดำเนินการต่างๆ ในหน่วยของก๊าซ (การดำเนินการแต่ละครั้งจะสอดคล้องกับปริมาณการใช้ก๊าซเฉพาะ นั่นคือ มีตารางปริมาณการใช้ก๊าซที่สอดคล้องกัน) และตั้งค่าขีดจำกัดสูงสุดของการใช้ก๊าซสำหรับการดำเนินการแต่ละครั้ง นั่นคือ gasLimit การดำเนินการสะสมของการดำเนินการตามสัญญา หลังจากขีดจำกัดบนของ gasLimit การดำเนินการถูกบังคับให้หยุด เพื่อให้บรรลุผลของการปิดระบบ การเปิดตัวกลไก Gas ทำให้ความซับซ้อนของผู้ใช้ในการใช้แอปพลิเคชันขึ้นอยู่กับราคาที่เขายินดีจ่ายแทนที่จะเป็นข้อจำกัดทางกายภาพของแพลตฟอร์ม

แน่นอน การแนะนำกลไกแก๊สยังมีประโยชน์อื่นๆ ซึ่งจะไม่แนะนำในที่นี้

▲ ความปลอดภัย

ในฐานะที่เป็นหลักฐานการออกแบบของ Ethereum การรักษาความปลอดภัยเป็นสิ่งที่สัญญาอัจฉริยะจำเป็นต้องรับประกัน ความปลอดภัยของสัญญาอัจฉริยะของ Ethereum นั้นสะท้อนให้เห็นในสองด้านเป็นหลักในการออกแบบ:

1) ภาษาสัญญาอัจฉริยะที่ค่อนข้างง่าย

เมื่อเปรียบเทียบกับภาษา Turing-complete กระแสหลัก ภาษา Solidity จะเน้นที่สถานการณ์บล็อกเชน ดังนั้นจึงไม่จำเป็นต้องใช้คุณสมบัติภาษามากมาย เช่น การเรียกแบบหลายเธรดและการเรียกระบบ ซึ่งทำให้การออกแบบเรียบง่ายที่สุดเท่าที่จะเป็นไปได้ อย่างไรก็ตาม นี่ก็เป็นสาเหตุหนึ่งที่ทำให้ใช้งานยากในช่วงแรกๆ แม้ว่าภาษาจะพัฒนาไปทีละน้อย แต่ฟังก์ชันต่างๆ ของภาษาก็เพิ่มพูนและพัฒนาอย่างต่อเนื่อง

2) สภาพแวดล้อมการดำเนินการของสัญญาอัจฉริยะนั้นแยกออกจากกันเพียงพอ

สัญญาอัจฉริยะของ Ethereum ทำงานใน Ethereum Virtual Machine (EVM) การดำเนินการใน EVM นั้นไม่ได้เป็นเพียงแซนด์บ็อกซ์เท่านั้น แต่จริง ๆ แล้วแยกออกจากกันอย่างสมบูรณ์ ซึ่งหมายความว่า โค้ดที่ทำงานใน EVM ไม่สามารถเข้าถึงเครือข่าย ระบบไฟล์ หรือกระบวนการอื่น ๆ ได้ แม้แต่สัญญาอัจฉริยะก็มีข้อจำกัดในการเข้าถึงสัญญาอัจฉริยะอื่นๆ ความปลอดภัยที่ควบคุมได้รับประกันได้ในระดับมากผ่านการแยกส่วนการทำงาน

—— คำอธิบายโดยละเอียด ——

ต่อไป มาดูเครื่องมือดำเนินการของสัญญา Solidity—EVM

ข้อความ

EVM ถูกกำหนดเป็นเครื่องเสมือนสแต็กที่ใช้หนึ่งไบต์เป็นคำสั่ง ลักษณะเฉพาะของเครื่องเสมือนแบบสแต็กคืออาศัยการโต้ตอบกับสแต็กตัวถูกดำเนินการ (สแต็กตัวถูกดำเนินการ) เมื่อดำเนินการ

ซอร์สโค้ดของสัญญา Solidity ถูกคอมไพล์เพื่อใช้ bytecode แบบสแต็กระดับต่ำ ดังนั้นสิ่งที่เราปรับใช้จริงบน Ethereum และดำเนินการใน EVM จริง ๆ แล้วเป็นสตริงของ bytecode รหัสประกอบด้วยชุดของไบต์ โดยที่แต่ละไบต์แสดงถึงการดำเนินการ เมื่อ bytecode ถูกเรียกใช้งาน มันจะถูกดำเนินการตามลำดับจาก bytecode แรกตามความหมายการทำงานของ bytecode จนกว่าจะถึงจุดสิ้นสุดของรหัสหรือเกิดข้อผิดพลาด (เช่น พบ opcodes REVERT, STOP หรือ RETURN) การดำเนินการเหล่านี้สามารถเข้าถึงพื้นที่สามประเภทเพื่อจัดเก็บข้อมูล:

Stack: คอนเทนเนอร์ LIFO ที่สามารถผลักและดึงค่าได้

หน่วยความจำ: อาร์เรย์ไบต์ที่ขยายได้ไม่สิ้นสุด

ที่เก็บข้อมูล: ที่เก็บข้อมูลระยะยาวของสัญญา ซึ่งจัดเก็บเป็นคู่คีย์/ค่า ซึ่งแตกต่างจากสแต็กและหน่วยความจำที่รีเซ็ตหลังการคำนวณ ที่เก็บข้อมูลจะคงอยู่เป็นเวลานาน และส่วนนี้ยังเป็นส่วนหนึ่งของ "สถานะโลก" ที่มักเรียกกันว่า

กระบวนการดำเนินการของสัญญาอัจฉริยะคือกระบวนการดำเนินการของพื้นที่เก็บข้อมูลสามประเภทตามลักษณะการทำงานที่กำหนดโดย opcode เราจะแสดงโดยย่อด้วยตัวอย่างต่อไปนี้:

รูปต่อไปนี้แสดงส่วนของสัญญา: ด้านซ้ายคือรหัสไบต์ของสัญญา และด้านขวาคือความหมายการดำเนินการที่แสดงโดยรหัสไบต์

ความหมายง่ายๆ ของแต่ละ opcode มีดังนี้

PUSH1: เลขฐานสิบหกของไบต์คือ 60 ความหมายของการดำเนินการคือการผลักไบต์ถัดไปไปยังสแต็ก

เพิ่ม: Bytecode เลขฐานสิบหกคือ 01 ความหมายของการดำเนินการคือป๊อปและเพิ่มสององค์ประกอบในสแต็ก แล้วใส่ผลลัพธ์กลับในสแต็ก

MSTORE: เลขฐานสิบหกของรหัสไบต์คือ 52 ความหมายของการดำเนินการคือเก็บค่าที่สองที่โผล่ออกมาจากสแต็กลงในหน่วยความจำ และค่าดัชนีที่เก็บไว้คือองค์ประกอบแรกที่โผล่ขึ้นมาจากสแต็ก

RET: เลขฐานสิบหกของไบต์คือ f3 ความหมายของการดำเนินการคือการสิ้นสุดการดำเนินการ ส่งกลับผลลัพธ์ ผลลัพธ์อยู่ในหน่วยความจำ ดัชนีเริ่มต้นคือค่าแรกที่ดึงมาจากสแต็ก และความยาวคือค่าที่สองที่ดึงมาจาก ซ้อนกัน


ใส่รหัสไบต์นี้ลงใน EVM เพื่อดำเนินการ และกระบวนการดำเนินการจะเป็นดังนี้:

ในหมู่พวกเขา PC แสดงถึงตำแหน่งของรหัสการดำเนินการดำเนินการปัจจุบัน ณ จุดสิ้นสุดของการดำเนินการส่วนย่อยของสัญญา (เช่น: รหัสการดำเนินการ RET) ข้อมูล 5 ไบต์จะถูกนำออกจากจุดเริ่มต้นของ 60 ในหน่วยความจำ ดังนั้น การดำเนินการในส่วนของสัญญาเสร็จสิ้น ผลสุดท้าย จะถูกส่งกลับไปยังผู้โทร!

นักเรียนที่ระมัดระวังจะพบว่าคำแนะนำที่เกี่ยวข้องในรูปไม่มีการดำเนินการที่เกี่ยวข้องกับ Storage อันที่จริง เป็นเพราะคำสั่งที่เกี่ยวข้อง เช่น SStore ไม่ได้ถูกเลือกในโค้ดตัวอย่างเพื่อความง่ายและหลักการดำเนินการคล้ายกับนิพจน์ข้างต้น .

"เหตุใด EVM จึงได้รับการออกแบบเช่นนี้ เหตุใดจึงสามารถแก้ปัญหาการคำนวณและดำเนินการจัดหาและแก้ไขสถานะสัญญาให้เสร็จสมบูรณ์ผ่านการเข้าและออกจากสแต็กเหล่านี้ การคัดลอกหน่วยความจำ และการทำงานของ ที่เก็บ?"

สิ่งนี้เกี่ยวข้องกับการออกแบบภาษาโปรแกรม ในทางทฤษฎี ในระบบทางทฤษฎีของการคำนวณ สถาปัตยกรรมชุดคำสั่งเป็นแบบจำลองเชิงนามธรรมของคอมพิวเตอร์ และความหลากหลายของประเภทคำสั่งที่มีอยู่ในชุดคำสั่งจะส่งผลโดยตรงต่อความสมบูรณ์ของการแสดงออกของโปรแกรม ตัวอย่างเช่น ชุดคำสั่งสามารถรวมคำสั่งการดำเนินการทางคณิตศาสตร์และตรรกะ เช่น การบวก การลบ การคูณและการหาร คำสั่งควบคุม เช่น การกระโดด และคำสั่งการประมวลผลข้อมูล เช่น การอ่านหน่วยความจำ ในฐานะเครื่องเสมือน คุณสามารถเลือกหรือเพิ่มคำสั่งได้ตามต้องการเพื่อสร้างชุดคำสั่งเพื่อแสดงฟังก์ชันที่คุณต้องการ ตัวอย่างเช่น EVM ไม่เพิ่มคำแนะนำเกี่ยวกับพื้นที่เก็บข้อมูลสำหรับการดำเนินการที่เกี่ยวข้องกับเลขทศนิยม ดังนั้นสิ่งนี้จะอธิบายจากระดับคำสั่งว่าภาษา Solidity ไม่สนับสนุนการดำเนินการเกี่ยวกับเลขทศนิยม หลังจากกำหนดคำสั่งแล้ว ด้วยความช่วยเหลือของเครื่องมือบางอย่างของการเขียนโปรแกรมสมัยใหม่ จะสามารถออกแบบภาษาเฉพาะได้ ดังนั้น ในระดับหนึ่ง เราสามารถใช้ภาษาของเราเองและเครื่องมือดำเนินการที่เกี่ยวข้องได้หากจำเป็น

-- พัฒนา--

สาระสำคัญของ EVM คือการดำเนินการ "สถานะโลก" ผ่านภาษาที่ตั้งโปรแกรมได้ซึ่งเราเรียกว่าบัญชีแยกประเภทของบล็อกเชน ดังนั้น วิธีการทำงานที่ดีขึ้นและเร็วขึ้นจึงเป็นการแสวงหาเครื่องเสมือนสัญญาอัจฉริยะที่สำคัญ

ด้วยการพัฒนาอย่างต่อเนื่อง ทำให้มีเครื่องมือดำเนินการตามสัญญาอัจฉริยะมากมายในอุตสาหกรรม และการสำรวจใหม่ๆ ก็ไม่ขาดแคลน

EVM: เข้ากันได้กับ Ethereum EVM และปรับให้เหมาะสมสำหรับประสิทธิภาพและฟังก์ชั่นมากมาย

HVM: FunChain เป็นผู้บุกเบิกเอ็นจิ้นการดำเนินการตามสัญญาอัจฉริยะที่มีประสิทธิภาพ ใช้งานง่าย และสมบูรณ์ ซึ่งรองรับการเขียนสัญญาอัจฉริยะในภาษา Java

FVM: เครื่องมือการดำเนินการตามสัญญาอัจฉริยะที่ปลอดภัย หลากหลายและมีประสิทธิภาพ ซึ่งรองรับการเขียนสัญญาอัจฉริยะใน Rust และภาษาอื่นๆ

บทความนี้เป็นจุดเริ่มต้นของคอลัมน์ [Virtual Machine] ซึ่งแนะนำที่มาของสัญญาอัจฉริยะและสัญญาอัจฉริยะ Ethereum บทความชุดต่อไปจะแนะนำเครื่องมือการดำเนินการอื่นๆ อย่างละเอียด ดังนั้นโปรดติดตาม!

เกี่ยวกับผู้เขียน

เกี่ยวกับผู้เขียน

ข้อความ

อ้างอิง

อ้างอิง

[1] สารานุกรม Baidu สัญญาอัจฉริยะ

[2] กระดาษเหลือง Ethereum


สัญญาที่ชาญฉลาด
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก
https://t.me/Odaily_News
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
บัญชีทางการ
https://twitter.com/OdailyChina
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
สรุปโดย AI
กลับไปด้านบน
ตามที่เสนอภาษาสัญญาอัจฉริยะภาษาแรก Solidity ได้เปิดประตูใหม่สำหรับสถานการณ์แอปพลิเคชันบล็อก
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android