เข้าใจสัญญาอัจฉริยะของ Ethereum จริงๆ
หมายเหตุบรรณาธิการ: บทความนี้มาจากหมายเหตุจิ้งจอกสีน้ำเงินหมายเหตุบรรณาธิการ: บทความนี้มาจาก
หมายเหตุจิ้งจอกสีน้ำเงิน
หมายเหตุจิ้งจอกสีน้ำเงิน
(ID: lanhubiji), ผู้แต่ง: GjermundBjaanes, ผู้รวบรวม: Dyna, เผยแพร่โดยได้รับอนุญาต
คุณคงเคยได้ยินเกี่ยวกับ "สัญญาอัจฉริยะ" และคุณอาจรู้ด้วยซ้ำว่ามันคือรหัสที่ทำงานบนบล็อกเชน
แต่คุณจะรันโค้ดบนบล็อกเชนได้อย่างไร? นี่ไม่ใช่แนวคิดธรรมดาที่สามารถเข้าใจได้ง่าย
บทความนี้จะอธิบายวิธีการทำงานของสัญญาอัจฉริยะบน Ethereum blockchain ความเข้าใจพื้นฐานเกี่ยวกับการเขียนโปรแกรมจะช่วยได้ เนื่องจากบทความนี้มีโค้ดง่ายๆ สำหรับวัตถุประสงค์ในการยกตัวอย่าง รายละเอียดทางเทคนิคบางอย่างทำให้ง่ายขึ้นเล็กน้อยเพื่อความชัดเจน แต่แนวคิดนั้นถูกต้อง
ชื่อเรื่องรอง
Blockchain - เริ่มต้นอย่างรวดเร็ว
โดยไม่ต้องลงรายละเอียดมากเกินไปที่นี่ แนวคิดหลักของเทคโนโลยีบล็อกเชนคือบัญชีแยกประเภทแบบกระจาย เป็นฐานข้อมูลชนิดพิเศษที่ใช้ร่วมกันระหว่างผู้เข้าร่วมหลายคน

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

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

เรื่องน่ารู้เกี่ยวกับสัญญาอัจฉริยะ: พวกเขาสามารถเรียกสัญญาอัจฉริยะอื่นๆ ได้ นี่เป็นการเปิดความสามารถในการสร้างตัวแทนอิสระที่สามารถใช้จ่ายเงินและทำธุรกรรมได้ด้วยตนเอง
สมมติว่าฉันสร้างสัญญาอัจฉริยะด้วยโค้ดด้านบน รหัสมีฟิลด์ที่เรียกว่าตัวนับซึ่งเป็นประเภท uint (จำนวนเต็ม) เนื้อหาของตัวแปรตัวนับคือสถานะของสัญญา เมื่อใดก็ตามที่ฉันเรียกใช้ฟังก์ชัน count() ทุกคนจะเห็นว่าสถานะของสัญญาอัจฉริยะนี้บนบล็อกเชนจะเพิ่มขึ้น 1
เราจะอธิบายวิธีการทำงานในภายหลังด้วยตัวอย่างเพิ่มเติม แต่ก่อนอื่น ฉันต้องการกลับไปที่ธุรกรรม Ethereum และ Bitcoin และใช้สิ่งนั้นเพื่ออธิบายบางสิ่ง
ชื่อเรื่องรอง
ในระดับธุรกรรม Ethereum VS Bitcoin
ธุรกรรม Bitcoin นั้นง่ายมาก คุณสามารถทำสิ่งเดียวเท่านั้น ประเภทของธุรกรรม ทิ้งรายละเอียดบางอย่างไว้ทั้งหมดแล้วสรุปเป็น TO (ถึง, ใครเป็นคนรับเงิน), FROM (จาก, ใครเป็นคนจ่ายเงิน) และ AMOUNT (จำนวนเงิน, เท่าไหร่) สิ่งนี้ทำให้ Bitcoin เป็นที่เก็บมูลค่าที่สามารถถ่ายโอนมูลค่าระหว่างผู้เข้าร่วมเครือข่ายได้
ข้อแตกต่างใน Ethereum คือการทำธุรกรรมยังมีฟิลด์ "DATA" (ข้อมูล) ฟิลด์ "DATA" รองรับธุรกรรมสามประเภท:
การโอนมูลค่า (เหมือนกับ Bitcoin)
ที่อยู่ผู้รับ
ช่อง DATA ว่างเปล่าหรือมีข้อความที่ต้องการต่อท้าย
จากคุณ
AMOUNT คือจำนวน Ethereum ที่คุณต้องการส่ง
สร้างสัญญาอัจฉริยะ
ฟิลด์ TO ว่างเปล่า (จะทำให้เกิดการสร้างสัญญาอัจฉริยะ)
ฟิลด์ DATA มีรหัสสัญญาอัจฉริยะที่รวบรวมเป็นรหัสไบต์
จากคุณ
AMOUNT สามารถเป็น 0 หรือจำนวน Ethereum ใดก็ได้ที่คุณต้องการใส่ในสัญญา
โทรสัญญาสมาร์ท
ช่อง TO คือที่อยู่บัญชีสัญญาอัจฉริยะ
ฟิลด์ DATA มีชื่อฟังก์ชันและพารามิเตอร์ - วิธีเรียกสัญญาอัจฉริยะ
จากคุณ
AMOUNT สามารถเป็น 0 หรือจำนวนเท่าใดก็ได้ของ Ethereum เช่น จำนวนเงินที่คุณต้องจ่ายสำหรับสัญญาบริการ
มีฟิลด์และความซับซ้อนอีกมากมายในธุรกรรมเหล่านี้ แต่ข้อมูลข้างต้นอธิบายแนวคิดหลักได้ดี มาดูตัวอย่างที่เป็นรูปธรรมของข้อตกลงเหล่านี้กันดีกว่า
การทำธุรกรรม Ethereum

การถ่ายโอนมูลค่า
ง่ายมาก. TO ส่งโทเค็น Ethereum จำนวนหนึ่งไปยังที่อยู่ คุณยังสามารถเพิ่มข้อความในธุรกรรมได้อีกด้วย

ตามที่กล่าวไว้ข้างต้น ช่อง TO ที่ว่างเปล่าบ่งชี้ถึงการสร้างสัญญาอัจฉริยะ ฟิลด์ DATA ประกอบด้วยสัญญาอัจฉริยะที่รวบรวมเป็นรหัสไบต์
สัญญาการโทร
จะกลับมาที่นี้ในภายหลัง แต่แนวคิดหลักคือคุณส่งธุรกรรมไปยังที่อยู่สัญญาอัจฉริยะที่คุณต้องการโทร จากนั้นใส่การเรียกฟังก์ชันในช่องข้อมูล
ชื่อเรื่องรอง
ให้ความสำคัญกับต้นทุนและการดำเนินการ
การดำเนินการของรหัสจะจ่ายโดยผู้โทรในสิ่งที่เรียกว่าก๊าซ แก๊สเป็นเชื้อเพลิงในการรัน Ethereum Virtual Machine คุณสามารถคิดเสียว่าเป็นค่าธรรมเนียมต่อการดำเนินการตามคำสั่ง (เช่น บรรทัดของโค้ด)
คุณต้องตั้งค่าก๊าซสูงสุดที่สามารถใช้สำหรับการโทรสัญญาเฉพาะ ตัวอย่างเช่น หากโค้ดที่คุณเรียกเข้าสู่วงจรถาวร จะช่วยให้แน่ใจว่าแก๊สที่ใช้ระหว่างการดำเนินการจะไม่เกินแก๊สสูงสุดที่ตั้งไว้
ต้นทุนของก๊าซ (การดำเนินการ) ถูกกำหนดโดยผู้ขุด (โหนดที่ใช้รหัส) ของเครือข่าย ยังมีอีกมากที่ต้องเรียนรู้เกี่ยวกับแก๊สและการดำเนินการ แต่สิ่งที่กล่าวมาข้างต้นนั้นควรค่าแก่การจดจำไว้
ชื่อเรื่องรอง
สัญญาอัจฉริยะทำงานอย่างไร
myObjectReference.myFunction(parameters);
เมื่อมีการปรับใช้สัญญาอัจฉริยะกับเครือข่าย Ethereum ทุกคนสามารถเรียกใช้ฟังก์ชันของสัญญาอัจฉริยะได้ แม้ว่าฟังก์ชันนี้อาจป้องกันไม่ให้ผู้อื่นเรียกใช้ด้วยเหตุผลด้านความปลอดภัย แต่คุณก็สามารถทดลองใช้งานได้ฟรี
myVariable = myObject.myFunction(parameters);
สมมติว่ามีวัตถุประเภท MyObject วัตถุนี้มีฟังก์ชันที่เรียกว่า myFunction หากต้องการเรียกใช้ ให้อ้างอิงถึงอินสแตนซ์ของออบเจกต์ ฟังก์ชันใดที่จะเรียกใช้และพารามิเตอร์ใดที่จะเรียกใช้
แบบนี้:
การเรียกสัญญาอัจฉริยะนั้นมีแนวคิดเหมือนกัน ข้อแตกต่างเพียงอย่างเดียวคือคุณต้องใส่ข้อมูลทั้งหมดเกี่ยวกับการโทรในธุรกรรม ลงชื่อและส่งไปยังเครือข่ายเพื่อดำเนินการ
สมมติว่าคุณต้องการเรียกใช้ฟังก์ชัน myFunction ซึ่งมีพารามิเตอร์บางตัวในสัญญาอัจฉริยะ "0x0123456" มีสี่ขั้นตอนในการเรียกสัญญาอัจฉริยะ:
ตอนนี้ เมื่อธุรกรรมถูกใส่ลงในบล็อกในบล็อกเชน การเปลี่ยนแปลงสถานะนั้นจะถูกบันทึกทั่วทั้งเครือข่าย
ชื่อเรื่องรอง
คอมพิวเตอร์โลก
แต่โปรดจำไว้ว่า: แม้ว่าสัญญาอัจฉริยะของทัวริงจะสมบูรณ์และสามารถทำอะไรก็ได้ตามทฤษฎี แต่ก็ไม่เหมาะสำหรับงานคำนวณหนักๆ

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

3. ยอดเงินคงเหลือในบัญชี
4. กระแสเงินทุน

ด้วยการจับคู่อย่างง่ายระหว่างผู้ใช้และเครื่องชั่ง คุณจะได้คำตอบถึง 123:

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

การเคลื่อนย้ายเงินทุนทำได้ผ่านฟังก์ชันง่ายๆ ที่ลบออกจากบัญชีหนึ่งและเพิ่มไปยังอีกบัญชีหนึ่ง


