ข้ามไปยังเนื้อหาหลัก

Ethereum Whitepaper Explained: Smart Contract Platform

ในช่วงปลายปี 2013 โปรแกรมเมอร์อายุ 19 ปีคนหนึ่งชื่อ Vitalik Buterin ได้เผยแพร่เอกสารที่จะเปลี่ยนแปลงภูมิทัศน์บล็อกเชน เอกสารนี้มีชื่อว่า "Ethereum: A Next-Generation Smart Contract and Decentralized Application Platform" ซึ่งนำเสนอบล็อกเชนที่สามารถทำได้มากกว่าเพียงการโอนเงิน มันมีวิสัยทัศน์สำหรับ บล็อกเชนสำเร็จรูปและเชื่อมโยงได้ — คอมพิวเตอร์โลกแบบกระจายอำนาจที่สามารถรันแอปพลิเคชันใดๆ ก็ได้ที่เป็นไปได้

คู่มือนี้จะอธิบายแนวคิดหลัก การตัดสินใจด้านการออกแบบ และผลกระทบระยะยาวของ Ethereum whitepaper โดยอธิบายว่าวิสัยทัศน์ของ Vitalik พัฒนาจากข้อเสนอที่ก้าวล้ำไปเป็นพื้นฐานของระบบนิเวศมูลค่าหลายร้อยพันล้านดอลลาร์ได้อย่างไร

บริบททางประวัติศาสตร์​

ข้อจำกัดของ Bitcoin​

ในปี 2013 Bitcoin ได้พิสูจน์แล้วว่าระบบการโอนมูลค่าแบบกระจายอำนาจและไม่ต้องไว้วางใจได้นั้นเป็นไปได้ อย่างไรก็ตาม ภาษาสคริปต์ของ Bitcoin ถูกจำกัดโดยจงใจ แม้ว่ามันจะสามารถจัดการเงื่อนไขง่ายๆ (multisig, time-locks) แต่มันไม่สามารถสนับสนุนแอปพลิเคชันที่ซับซ้อนได้ อย่างที่ Buterin เขียนไว้:

"ภาษาสคริปต์ตามที่ใช้งานใน Bitcoin มีข้อจำกัดที่สำคัญหลายประการ — มันเป็นระบบสแต็ก โดยพื้นฐาน มี opcode set ที่จำกัดมาก และแม้ว่ามันจะเป็น 'Turing-incomplete' ทางเทคนิค แต่สิ่งนี้ถูกมองว่าเป็นคุณสมบัติมากกว่าข้อบกพร่อง"

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

ความต้องการสำหรับแพลตฟอร์มสำเร็จรูป​

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

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

ความพยายามครั้งก่อน​

หลายโครงการได้พยายามขยายความสามารถของบล็อกเชนก่อน Ethereum:

  • Colored Coins: ข้อมูลเมตาที่แนบกับธุรกรรม Bitcoin เพื่อแสดงสินทรัพย์อื่นๆ
  • Metacoins: โปรโตคอลที่ทำงานบนสุด Bitcoin (Counterparty, Mastercoin/Omni)
  • Namecoin: ฟอร์ก Bitcoin สำหรับการลงทะเบียนโดเมนแบบกระจายอำนาจ
  • Ripple: เครือข่ายการชำระเงินดิจิทัล (ฉันทามติแบบรวมศูนย์)

แต่ละตัวมีข้อจำกัดที่การออกแบบของ Ethereum พยายามจะเอาชนะ

แนวคิดหลักจาก Whitepaper​

บัญชี ไม่ใช่ UTXOs​

Buterin ทำการเลือกการออกแบบพื้นฐานที่แตกต่างจาก Bitcoin: โมเดลบัญชี แทนโมเดล UTXO ของ Bitcoin

ใน Ethereum สถานะประกอบด้วยบัญชี แต่ละบัญชีมี:

  • Nonce: ตัวนับที่ตรวจสอบให้แน่ใจว่าแต่ละธุรกรรมถูกประมวลผลเพียงครั้งเดียว
  • ยอดคงเหลือ Ether: จำนวน ETH ที่ถูกจัดเก็บ
  • รหัสสัญญา: รหัสไบต์ smart contract (หากเกี่ยวข้อง)
  • พื้นที่เก็บข้อมูล: ข้อมูลถาวร (ที่เก็บคู่คีย์-ค่าสำหรับบัญชีสัญญา)

มีสองประเภทของบัญชี:

  1. บัญชีที่เป็นเจ้าของภายนอก (EOAs): ควบคุมโดยคีย์ส่วนตัว ไม่มีรหัส
  2. บัญชีสัญญา: ควบคุมโดยรหัสของพวกเขา เปิดใช้งานเมื่อพวกเขาได้รับข้อความ

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

ข้อความและธุรกรรม​

Whitepaper แยกความแตกต่างระหว่าง ธุรกรรม (ลงนามโดย EOA) และ ข้อความ (การเรียกภายในระหว่างสัญญา):

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

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

Ethereum Virtual Machine (EVM)​

EVM คือหัวใจของ Ethereum — สภาพแวดล้อมรันไทม์ที่ดำเนินการรหัส smart contract Buterin ออกแบบ EVM ด้วยคุณสมบัติหลักหลายประการ:

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

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

การวัดแก๊ส: ทุกการดำเนินการ EVM มีค่าใช้แก๊สจำนวนเฉพาะ แก๊สทั้งหมดที่ใช้โดยธุรกรรมจะต้องชำระเป็น ETH โดยผู้ส่ง กลไกนี้:

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

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

ชุด Opcode​

Whitepaper อธิบายชุดการดำเนินการของ EVM ซึ่งรวมถึง:

  • เลขคณิต: ADD, MUL, SUB, DIV, MOD, EXP
  • เปรียบเทียบ: LT, GT, EQ, ISZERO
  • Bitwise: AND, OR, XOR, NOT, BYTE
  • SHA3: การแฮช Keccak-256 (Ethereum ใช้ Keccak-256 มักเรียกว่า SHA-3)
  • สแต็ก/หน่วยความจำ/พื้นที่เก็บข้อมูล: PUSH, POP, MLOAD, MSTORE, SLOAD, SSTORE
  • ควบคุมการไหล: JUMP, JUMPI, STOP, RETURN
  • สภาพแวดล้อม: ADDRESS, BALANCE, CALLER, CALLVALUE, CALLDATALOAD
  • ข้อมูลบล็อก: BLOCKHASH, COINBASE, TIMESTAMP, NUMBER, DIFFICULTY
  • บันทึก: LOG0-LOG4 (สำหรับการปล่อยเหตุการณ์)
  • การเรียกภายนอก: CALL, DELEGATECALL, CREATE

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

ฟังก์ชั่นการเปลี่ยนแปลงสถานะ​

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

STATE' = APPLY(STATE, TX)

ฟังก์ชันการเปลี่ยนแปลง:

  1. ตรวจสอบว่าธุรกรรมนั้นสร้างขึ้นอย่างถูกต้อง (ลายเซ็นที่ถูกต้อง nonce ที่ถูกต้อง)
  2. คำนวณค่าธรรมเนียมแก๊สและหักออกจากยอดคงเหลือของผู้ส่ง
  3. เริ่มต้นตัวนับแก๊สและหักแก๊สสำหรับแต่ละไบต์ของข้อมูลธุรกรรม
  4. โอนค่า ETH ที่ระบุจากผู้ส่งไปยังผู้รับ
  5. หากผู้รับเป็นสัญญา ให้ดำเนินการรหัสสัญญาจนกว่าจะเสร็จสิ้นหรือแก๊สหมด
  6. หากการดำเนินการล้มเหลว (หมดแก๊ส ข้อผิดพลาด) จะคืนค่าการเปลี่ยนแปลงสถานะทั้งหมด ยกเว้นการชำระเงินแก๊ส
  7. คืนเงินแก๊สที่เหลือให้ผู้ส่งและส่งค่าธรรมเนียมแก๊สที่ใช้ไปให้แร่ /ผู้ตรวจสอบ

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

แอปพลิเคชันที่ Vitalik มองเห็นใน Whitepaper​

Buterin ได้ร่างหมวดหมู่ของแอปพลิเคชันหลายประเภทที่ Ethereum จะเปิดใช้งาน น่าสังเกตว่า เกือบทั้งหมดนั้นเกิดขึ้นแล้ว:

ระบบโทเค็น​

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

Whitepaper คาดการณ์ว่าสิ่งที่กลายมาเป็นมาตรฐาน ERC-20 — พื้นฐานสำหรับโทเค็นหลายพัน ICOs DeFi protocols และ stablecoins สัญญาโทเค็นง่ายๆ อธิบายไว้เป็นการแมปสถานะของยอดคงเหลือ พร้อมฟังก์ชันการโอน — ตรงกับวิธีการทำงานของ ERC-20

อนุพันธ์ทางการเงิน​

Buterin บรรยายสัญญาที่อ้างอิงข้อมูลภายนอก (เช่น ฟีดราคา) เพื่อชำระตราสารทางการเงิน วิสัยทัศน์นี้เกิดขึ้นจริงในระบบนิเวศของอนุพันธ์ DeFi — Synthetix, dYdX, GMX และคนอื่นๆ เสนอการค้าอนุพันธ์ ตัวเลือก และฟิวเจอร์สแบบกระจายอำนาจบน Ethereum

ระบบตัวตนและ声誉​

Whitepaper กล่าวถึงการใช้ Ethereum สำหรับตัวตน self-sovereign — เอกสารประจำตัวที่ผู้ใช้ควบคุมโดยไม่มีผู้ออกแบบอำนาจกลาง โครงการเช่น ENS (Ethereum Name Service) Soulbound Tokens และมาตรฐานตัวตนแบบกระจายอำนาจ (DID) ได้นำความเป็นจริงมาซึ่งวิสัยทัศน์นี้บางส่วน

พื้นที่เก็บข้อมูลไฟล์ที่กระจายอำนาจ​

Buterin เสนอให้ใช้ smart contracts ของ Ethereum เพื่อประสานงานพื้นที่เก็บข้อมูลไฟล์แบบกระจายอำนาจ แม้ว่า Ethereum เองนั้นไม่เหมาะสำหรับการจัดเก็บไฟล์ขนาดใหญ่ (มีราคาแพงเกินไป) แต่มันสามารถประสานงานเครือข่ายพื้นที่เก็บข้อมูลได้ โครงการเช่น IPFS Filecoin และ Arweave ได้รับแรงบันดาลใจจากแนวคิดนี้

องค์กรอิสระแบบกระจายอำนาจ (DAOs)​

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

DAOs ได้กลายมาเป็นแบบจำลองการปกครองที่สำคัญในระบบนิเวศ Ethereum จาก MakerDAO ไปจนถึงการปกครอง Uniswap ไปจนถึง treasury management protocols วิสัยทัศน์ของ Buterin เกี่ยวกับการปกครององค์กรแบบบนโซ่ของ Buterin ได้ถูกนำมาใช้على ขนาดกว้าง

บัญชีออมทรัพย์และ Multisig​

Whitepaper บรรยายสัญญาอัจฉริยะเพื่อความปลอดภัยของออมทรัพย์ ด้วยข้อจำกัดการถอน การอนุมัติแบบหลายฝ่าย และการกู้คืนสังคม แนวคิดเหล่านี้โดยตรงได้ให้แรงบันดาลใจต่อการพัฒนาของ smart contract wallets multisig wallets (เช่น Safe/Gnosis Safe) และการเคลื่อนไหว account abstraction

การตัดสินใจออกแบบและการ Trade-offs​

เหตุใด Turing-Completeness?​

Buterin ทำการเลือกโดยจงใจให้ภาษาของ Ethereum เป็น Turing-complete (สามารถคำนวณฟังก์ชันใดๆ ที่คำนวณได้) ซึ่งต่างจาก Script ของ Bitcoin ที่มีการจำกัดโดยจงใจ สิ่งนี้เป็นที่ถกเถียงกัน — Turing-completeness นำเสนอความเสี่ยงของลูปไม่สิ้นสุดและพื้นผิวการโจมตีที่ซับซ้อน

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

เหตุใด Account Model?​

Buterin เลือกบัญชีแทน UTXOs ด้วยเหตุผลหลายประการ:

  1. การประหยัดพื้นที่: บัญชีจัดเก็บสถานะเพียงครั้งเดียว ในขณะที่ UTXOsจำลองข้อมูลทั่วทำให้ UTXOs ไม่ได้ใช้หลายครั้ง
  2. ความเรียบง่าย: ยอดคงเหลือบัญชีนั้นง่ายกว่าในการให้เหตุผลสำหรับตรรมชาติของ smart contract logic
  3. fungibility: ทั้ง ETH ในบัญชีนั้นเหมือนกัน ในขณะที่ UTXOs มีประวัติแต่ละรายการ

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

เหตุใด ไม่สร้างบน Bitcoin?​

Buterin อธิบายว่าทำไมการขยาย Bitcoin นั้นไม่เพียงพอ:

  1. สคริปต์ที่จำกัด: Bitcoin Script ขาดลูป สถานะที่ซับซ้อน และประเภทข้อมูลที่หลากหลาย
  2. ค่า-blindness: สคริปต์ Bitcoin ไม่สามารถควบคุมปริมาณที่อัตราละเอียด
  3. Blockchain-blindness: สคริปต์ไม่สามารถเข้าถึงข้อมูล metadata ของบล็อกเชน (timestamps, block numbers)
  4. ไม่มีสถานะ: