BTC
ETH
HTX
SOL
BNB
ดูตลาด
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

เข้าใจสัญญาอัจฉริยะของ Ethereum จริงๆ

蓝狐笔记
特邀专栏作者
บทความนี้มีประมาณ 3437 คำ การอ่านทั้งหมดใช้เวลาประมาณ 5 นาที
คุณแน่ใจหรือว่าคุณเข้าใจสัญญาอัจฉริยะจริงๆ?
สรุปโดย AI
คุณแน่ใจหรือว่าคุณเข้าใจสัญญาอัจฉริยะจริงๆ?

หมายเหตุบรรณาธิการ: บทความนี้มาจากหมายเหตุจิ้งจอกสีน้ำเงินหมายเหตุบรรณาธิการ: บทความนี้มาจาก

หมายเหตุจิ้งจอกสีน้ำเงิน

หมายเหตุจิ้งจอกสีน้ำเงิน

(ID: lanhubiji), ผู้แต่ง: GjermundBjaanes, ผู้รวบรวม: Dyna, เผยแพร่โดยได้รับอนุญาต

คุณคงเคยได้ยินเกี่ยวกับ "สัญญาอัจฉริยะ" และคุณอาจรู้ด้วยซ้ำว่ามันคือรหัสที่ทำงานบนบล็อกเชน

แต่คุณจะรันโค้ดบนบล็อกเชนได้อย่างไร? นี่ไม่ใช่แนวคิดธรรมดาที่สามารถเข้าใจได้ง่าย

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

ชื่อเรื่องรอง

Blockchain - เริ่มต้นอย่างรวดเร็ว

โดยไม่ต้องลงรายละเอียดมากเกินไปที่นี่ แนวคิดหลักของเทคโนโลยีบล็อกเชนคือบัญชีแยกประเภทแบบกระจาย เป็นฐานข้อมูลชนิดพิเศษที่ใช้ร่วมกันระหว่างผู้เข้าร่วมหลายคน

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

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

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

สัญญาอัจฉริยะคืออะไร?

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

ชื่อเรื่องรอง

สัญญาอัจฉริยะคืออะไร?

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

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

  • ก่อนอื่น ฉันจะอธิบายเกี่ยวกับสัญญาอัจฉริยะที่เป็นบัญชีประเภทพิเศษบนเครือข่าย Ethereum คุณมีบัญชีผู้ใช้ และคุณยังมีบัญชีสัญญาอัจฉริยะ

บัญชีผู้ใช้ประกอบด้วย:

  • ที่อยู่ (คล้ายกับหมายเลขบัญชีธนาคารของคุณ - มีอยู่ใน Bitcoin ด้วย)

  • ยอดคงเหลือ (ฉันมีเงินเท่าไหร่)

  • บัญชีสัญญาอัจฉริยะประกอบด้วย:

  • ที่อยู่

ยอดคงเหลือ (Ethereum)

รัฐ

รหัส

ที่อยู่จะเหมือนกับที่อยู่ของบัญชีปกติ และเป็นตัวระบุเฉพาะของบัญชี

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

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

 

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

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

เราจะอธิบายวิธีการทำงานในภายหลังด้วยตัวอย่างเพิ่มเติม แต่ก่อนอื่น ฉันต้องการกลับไปที่ธุรกรรม Ethereum และ Bitcoin และใช้สิ่งนั้นเพื่ออธิบายบางสิ่ง

ชื่อเรื่องรอง

  • ในระดับธุรกรรม Ethereum VS Bitcoin

  1. ธุรกรรม Bitcoin นั้นง่ายมาก คุณสามารถทำสิ่งเดียวเท่านั้น ประเภทของธุรกรรม ทิ้งรายละเอียดบางอย่างไว้ทั้งหมดแล้วสรุปเป็น TO (ถึง, ใครเป็นคนรับเงิน), FROM (จาก, ใครเป็นคนจ่ายเงิน) และ AMOUNT (จำนวนเงิน, เท่าไหร่) สิ่งนี้ทำให้ Bitcoin เป็นที่เก็บมูลค่าที่สามารถถ่ายโอนมูลค่าระหว่างผู้เข้าร่วมเครือข่ายได้

  2. ข้อแตกต่างใน Ethereum คือการทำธุรกรรมยังมีฟิลด์ "DATA" (ข้อมูล) ฟิลด์ "DATA" รองรับธุรกรรมสามประเภท:

  3. การโอนมูลค่า (เหมือนกับ Bitcoin)

  4. ที่อยู่ผู้รับ

  • ช่อง DATA ว่างเปล่าหรือมีข้อความที่ต้องการต่อท้าย

  1. จากคุณ

  2. AMOUNT คือจำนวน Ethereum ที่คุณต้องการส่ง

  3. สร้างสัญญาอัจฉริยะ

  4. ฟิลด์ TO ว่างเปล่า (จะทำให้เกิดการสร้างสัญญาอัจฉริยะ)

  • ฟิลด์ DATA มีรหัสสัญญาอัจฉริยะที่รวบรวมเป็นรหัสไบต์

  1. จากคุณ

  2. AMOUNT สามารถเป็น 0 หรือจำนวน Ethereum ใดก็ได้ที่คุณต้องการใส่ในสัญญา

  3. โทรสัญญาสมาร์ท

  4. ช่อง 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:


แผนที่เพียงจับคู่บัญชีกับจำนวนเงิน

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

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

ETH
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก:
https://t.me/Odaily_News
กลุ่มสนทนา:
https://t.me/Odaily_GoldenApe
บัญชีทางการ:
https://twitter.com/OdailyChina
สารบัญบทความ
คลังบทความของผู้เขียน
蓝狐笔记
อันดับบทความร้อน
Daily
Weekly
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android