ข้อมูลเบื้องต้นเกี่ยวกับสัญญาอัจฉริยะ

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

สัญญาปกติเทียบกับ สัญญาอัจฉริยะ

ก่อนที่เราจะเจาะลึกรายละเอียด เรามาดูตัวอย่างความแตกต่างระหว่างสัญญาปกติที่ระบุไว้บนกระดาษ และสัญญาอัจฉริยะซึ่งแสดงในรูปแบบดิจิทัล

ข้อมูลเบื้องต้นเกี่ยวกับสัญญาอัจฉริยะ

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

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

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

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

คำจำกัดความของสัญญาอัจฉริยะ

โดยทั่วไปคำศัพท์นี้ได้รับการประกาศเกียรติคุณจากนักวิจัย Nick Szabo และใช้ครั้งแรกในปี 1994 และได้รับการบันทึกไว้ในปี 1997 ในบทความที่อธิบายแนวคิดของสัญญาอัจฉริยะ

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

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

ตัวอย่างง่ายๆ - บริการ Escrow

ลองดูตัวอย่างง่ายๆ จะช่วยให้คุณเข้าใจฟังก์ชันการทำงานของสัญญาอัจฉริยะมากขึ้น รวมถึงเข้าใจได้ดีขึ้นว่าควรใช้ในกรณีใด

ข้อมูลเบื้องต้นเกี่ยวกับสัญญาอัจฉริยะ

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

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

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

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

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

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

ตัวอย่างหอพักและตู้เย็น

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

ข้อมูลเบื้องต้นเกี่ยวกับสัญญาอัจฉริยะ

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

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

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

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

การจำแนกประเภทของสัญญาอัจฉริยะ

สำหรับการจำแนกประเภท คุณสามารถกำหนดกลุ่มเกณฑ์ต่างๆ ได้ อย่างไรก็ตาม ในช่วงเวลาของการพัฒนาเทคโนโลยี มีสี่ประการที่เกี่ยวข้องกัน

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

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

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

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

ด้านล่างนี้เราจะมาดูเกณฑ์สามข้อแรกอย่างละเอียดเพื่อให้เข้าใจหัวข้อปัจจุบันได้ชัดเจนยิ่งขึ้น

สัญญาอัจฉริยะตามรันไทม์

ข้อมูลเบื้องต้นเกี่ยวกับสัญญาอัจฉริยะ

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

ตัวอย่างเช่น เราสามารถนำผู้ให้บริการการสื่อสารเคลื่อนที่ (ผู้ให้บริการโทรศัพท์มือถือที่แตกต่างกัน) สมมติว่าผู้ให้บริการบางรายเก็บบันทึกการรับส่งข้อมูลแบบรวมศูนย์ไว้บนเซิร์ฟเวอร์ ซึ่งสามารถส่งในรูปแบบที่แตกต่างกัน เช่น ในรูปแบบของการโทรด้วยเสียง การส่ง SMS การรับส่งข้อมูลอินเทอร์เน็ตบนมือถือ และตามมาตรฐานที่แตกต่างกัน และยังเก็บบันทึกด้วย ของเงินทุนในยอดคงเหลือของผู้ใช้ ดังนั้นผู้ให้บริการสื่อสารเคลื่อนที่สามารถจัดทำสัญญาสำหรับการบัญชีสำหรับการให้บริการและการชำระเงินโดยมีเงื่อนไขที่แตกต่างกัน ในกรณีนี้ มันง่ายที่จะกำหนดเงื่อนไข เช่น “ส่ง SMS พร้อมรหัสดังกล่าวไปยังหมายเลขดังกล่าว และคุณจะได้รับเงื่อนไขดังกล่าวสำหรับการกระจายการรับส่งข้อมูล”

อีกตัวอย่างหนึ่งที่สามารถยกให้: ธนาคารแบบดั้งเดิมที่มีฟังก์ชันการทำงานที่หลากหลายของระบบธนาคารทางอินเทอร์เน็ต และสัญญาที่ง่ายมาก เช่น การชำระเงินปกติ การแปลงการชำระเงินที่เข้ามาโดยอัตโนมัติ การหักดอกเบี้ยอัตโนมัติไปยังบัญชีที่ระบุ เป็นต้น

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

สัญญาอัจฉริยะโดยวิธีการตั้งค่าและปฏิบัติตามเงื่อนไข

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

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

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

สัญญาทัวริงที่สมบูรณ์โดยพลการ ได้แก่ แพลตฟอร์ม Ethereum และ RootStock ซึ่งยังอยู่ระหว่างการพัฒนา ดังนั้น ด้านล่างนี้เราจะกล่าวถึงรายละเอียดเพิ่มเติมเล็กน้อยเกี่ยวกับแพลตฟอร์มสัญญาอัจฉริยะของ Ethereum

สัญญาอัจฉริยะโดยวิธีการเริ่มต้น

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

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

บัญชีอีเธอเรียม

ประเภทบัญชี Ethereum

มาดูกันว่ามีบัญชีประเภทใดบ้างบนแพลตฟอร์ม Ethereum ที่นี่มีบัญชีเพียงสองประเภทเท่านั้นและไม่มีตัวเลือกอื่น ประเภทแรกเรียกว่าบัญชีผู้ใช้ ประเภทที่สองคือบัญชีสัญญา เรามาดูกันว่าแตกต่างกันอย่างไร

บัญชีผู้ใช้ถูกควบคุมโดยรหัสส่วนตัวของลายเซ็นอิเล็กทรอนิกส์เท่านั้น เจ้าของบัญชีสร้างคู่คีย์ของตนเองสำหรับลายเซ็นอิเล็กทรอนิกส์โดยใช้อัลกอริธึม ECDSA (Elliptic Curve Digital Signature Algorithm) เฉพาะธุรกรรมที่ลงนามด้วยคีย์นี้เท่านั้นที่สามารถเปลี่ยนสถานะของบัญชีนี้ได้

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

วิธีสร้างบัญชีบน Ethereum

ในกรณีของบัญชีผู้ใช้ เจ้าของจะสร้างคู่คีย์อย่างอิสระโดยใช้ ECDSA สิ่งสำคัญที่ควรทราบก็คือ Ethereum ใช้อัลกอริธึมเดียวกันทุกประการและมีเส้นโค้งรูปไข่เหมือนกันทุกประการสำหรับลายเซ็นอิเล็กทรอนิกส์กับ Bitcoin แต่ที่อยู่จะถูกคำนวณด้วยวิธีที่แตกต่างกันเล็กน้อย ที่นี่ ผลลัพธ์ของการแฮชสองครั้งจะไม่ถูกใช้อีกต่อไป เช่นเดียวกับใน Bitcoin แต่การแฮชเดี่ยวมาพร้อมกับฟังก์ชัน Keccak ที่ความยาว 256 บิต บิตที่มีนัยสำคัญน้อยที่สุดจะถูกตัดออกจากค่าผลลัพธ์ ซึ่งก็คือค่าแฮชเอาท์พุตที่มีนัยสำคัญน้อยที่สุด 160 บิต เป็นผลให้เราได้รับที่อยู่ใน Ethereum ในความเป็นจริงมันกินพื้นที่ถึง 20 ไบต์

โปรดทราบว่าตัวระบุบัญชีใน Ethereum นั้นถูกเข้ารหัสในรูปแบบเลขฐานสิบหกโดยไม่ต้องใช้เช็คซัม ซึ่งแตกต่างจาก Bitcoin และระบบอื่นๆ มากมาย โดยที่ที่อยู่ถูกเข้ารหัสในระบบตัวเลขฐาน 58 พร้อมด้วยเช็คซัมเพิ่มเติม ซึ่งหมายความว่าคุณต้องระมัดระวังเมื่อทำงานกับตัวระบุบัญชีใน Ethereum: แม้แต่ข้อผิดพลาดในตัวระบุก็รับประกันว่าจะนำไปสู่การสูญเสียเหรียญ

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

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

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

โครงสร้างธุรกรรม Ethereum

เพื่อให้ชัดเจนยิ่งขึ้น เราจะเริ่มดูโครงสร้างของธุรกรรม Ethereum และตัวอย่างโค้ดสัญญาอัจฉริยะ

ข้อมูลเบื้องต้นเกี่ยวกับสัญญาอัจฉริยะ

ธุรกรรม Ethereum ประกอบด้วยหลายช่อง อย่างแรกคือ nonce คือหมายเลขซีเรียลของธุรกรรมที่เกี่ยวข้องกับบัญชีที่เผยแพร่และเป็นผู้เขียน นี่เป็นสิ่งจำเป็นเพื่อแยกแยะธุรกรรมซ้ำซ้อน กล่าวคือ ยกเว้นกรณีที่ยอมรับธุรกรรมเดียวกันสองครั้ง เมื่อใช้ตัวระบุ แต่ละธุรกรรมจะมีค่าแฮชที่ไม่ซ้ำกัน

ถัดมาเป็นสนามแบบ ราคาก๊าซ. สิ่งนี้ระบุราคาที่สกุลเงินฐาน Ethereum ถูกแปลงเป็นแก๊ส ซึ่งใช้ในการชำระค่าดำเนินการตามสัญญาอัจฉริยะและการจัดสรรทรัพยากรเครื่องเสมือน มันหมายความว่าอะไร?

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

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

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

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

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

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

ตัวอย่างโค้ดสัญญาอัจฉริยะสำหรับ Solidity

ตอนนี้เรามาดูสัญญาอัจฉริยะที่ง่ายที่สุดโดยใช้ตัวอย่างกันดีกว่า

contract Bank {
    address owner;
    mapping(address => uint) balances;
    
    function Bank() {
        owner = msg.sender;
    }

    function deposit() public payable {
        balances[msg.sender] += msg.value;
    }

    function withdraw(uint amount) public {
        if (balances[msg.sender] >= amount) {
            balances[msg.sender] -= amount;
            msg.sender.transfer(amount);
        }
    }

    function getMyBalance() public view returns(uint) {
        return balances[msg.sender];
    }

    function kill() public {
        if (msg.sender == owner)
            selfdestruct(owner);
    }
}

ด้านบนเป็นซอร์สโค้ดแบบง่ายที่สามารถเก็บเหรียญของผู้ใช้และส่งคืนได้ตามความต้องการ

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

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

ตามด้วยวิธีการของธนาคาร - มีชื่อเดียวกับสัญญา ดังนั้นนี่คือตัวสร้างของมัน ที่นี่ตัวแปรเจ้าของจะได้รับการกำหนดที่อยู่ของบุคคลที่วางสัญญาอัจฉริยะนี้บนเครือข่าย นี่เป็นสิ่งเดียวที่เกิดขึ้นใน Constructor นี้ นั่นคือข้อความในกรณีนี้คือข้อมูลที่ถ่ายโอนไปยังเครื่องเสมือนพร้อมกับธุรกรรมที่มีรหัสทั้งหมดของสัญญานี้ ดังนั้น msg.sender จึงเป็นผู้เขียนธุรกรรมที่โฮสต์โค้ดนี้ เขาจะเป็นเจ้าของสัญญาอัจฉริยะ

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

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

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

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

โหนดเต็มบนเครือข่าย Ethereum ทำงานอย่างไร

มาดูกันในเชิงแผนผังว่าสัญญาอัจฉริยะดังกล่าวดำเนินการบนแพลตฟอร์ม Ethereum อย่างไร และโหนดเครือข่ายเต็มรูปแบบทำงานอย่างไร

ข้อมูลเบื้องต้นเกี่ยวกับสัญญาอัจฉริยะ

โหนดเต็มบนเครือข่าย Ethereum ต้องมีอย่างน้อยสี่โมดูล
ประการแรกสำหรับโปรโตคอลการกระจายอำนาจใด ๆ คือโมดูลเครือข่าย P2P ซึ่งเป็นโมดูลสำหรับการเชื่อมต่อเครือข่ายและทำงานร่วมกับโหนดอื่น ๆ ซึ่งมีการแลกเปลี่ยนบล็อก ธุรกรรม และข้อมูลเกี่ยวกับโหนดอื่น ๆ นี่เป็นองค์ประกอบดั้งเดิมสำหรับสกุลเงินดิจิทัลที่มีการกระจายอำนาจทั้งหมด

ต่อไป เรามีโมดูลสำหรับการจัดเก็บข้อมูลบล็อคเชน การประมวลผล การเลือกสาขาที่มีลำดับความสำคัญ การต่อท้ายบล็อค การยกเลิกการเชื่อมโยงบล็อค การตรวจสอบความถูกต้องของบล็อคเหล่านี้ ฯลฯ

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

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

ตำนานและข้อจำกัดของสัญญาอัจฉริยะ

สำหรับข้อจำกัดที่มีอยู่สำหรับแพลตฟอร์มสัญญาอัจฉริยะที่คล้ายกับ Ethereum สามารถอ้างอิงได้ดังต่อไปนี้:

  • การรันโค้ด
  • จัดสรรหน่วยความจำ
  • ข้อมูลบล็อคเชน
  • ส่งการชำระเงิน
  • สร้างสัญญาใหม่
  • เรียกสัญญาอื่น ๆ

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

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

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

ข้อเสียของอีเธอเรียม

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

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

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

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

สำหรับ Ethereum นั้น มีการวิจัยจำนวนมาก ได้รับประสบการณ์เชิงปฏิบัติมากมายทั้งเชิงบวกและเชิงลบ แต่ถึงกระนั้นก็ยังมีความยากลำบากและช่องโหว่ที่ยังคงต้องจัดการด้วยวิธีใดวิธีหนึ่ง

ดังนั้น ในส่วนใจความของบทความก็เสร็จสมบูรณ์แล้ว มาดูคำถามที่เกิดขึ้นค่อนข้างบ่อยกันดีกว่า

คำถามที่ถามบ่อย

— หากทุกฝ่ายในสัญญาอัจฉริยะที่มีอยู่ต้องการเปลี่ยนเงื่อนไข พวกเขาสามารถยกเลิกสัญญาอัจฉริยะนี้โดยใช้ multisig แล้วสร้างสัญญาอัจฉริยะใหม่พร้อมเงื่อนไขการดำเนินการที่อัปเดตได้หรือไม่

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

— จะเกิดอะไรขึ้นหากผู้ไกล่เกลี่ยทำข้อตกลงกับฝ่ายใดฝ่ายหนึ่งที่เข้าร่วม: เอสโครว์หรือสัญญาอัจฉริยะ? จำเป็นต้องมีคนกลางในสัญญาอัจฉริยะหรือไม่?

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

— เป็นไปได้ไหมที่ธุรกรรม Ethereum ครั้งเดียวจะโอนโทเค็นที่แตกต่างกันจำนวนมากจากที่อยู่ของคุณไปยังที่อยู่เป้าหมายที่แตกต่างกัน เช่น ที่อยู่แลกเปลี่ยนที่มีการซื้อขายโทเค็นเหล่านี้

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

— หนึ่งในตำนานเกี่ยวกับแพลตฟอร์ม Ethereum คือมันเป็นไปไม่ได้ที่จะอธิบายเงื่อนไขที่จะขึ้นอยู่กับข้อมูลของทรัพยากรอินเทอร์เน็ตภายนอก แล้วจะทำยังไงล่ะ?

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

หนึ่งในการบรรยายของหลักสูตรออนไลน์เกี่ยวกับ Blockchain เกี่ยวข้องกับหัวข้อนี้ - “ข้อมูลเบื้องต้นเกี่ยวกับสัญญาอัจฉริยะ"

ที่มา: will.com

เพิ่มความคิดเห็น