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

สมาร์ตคอนแทรกต์อธิบาย: มันทำงานอย่างไรและเหตุใดจึงมีความสำคัญ

สมาร์ตคอนแทรกต์คือโปรแกรมที่ทำการปฏิบัติงานด้วยตนเองและเก็บไว้บนบล็อกเชนที่บังคับใช้เงื่อนไขของข้อตกลงโดยอัตโนมัติเมื่อตรงตามเงื่อนไขที่กำหนดไว้ก่อน ซึ่งแตกต่างจากสัญญาแบบดั้งเดิมที่ต้องมีทนายความ ศาลและตัวกลางในการบังคับใช้ สมาร์ตคอนแทรกต์จะทำการปฏิบัติงานเป็นอิสระโดยอิงจากโค้ด — "โค้ดคือกฎหมาย" ในความหมายที่แท้จริงที่สุด

สมาร์ตคอนแทรกต์เป็นรากฐานของนวัตกรรมบล็อกเชนที่สำคัญเกือบทั้งหมดนอกเหนือจากการโอนมูลค่าอย่างง่ายๆ: การเงินแบบกระจายศูนย์ (DeFi) โทเค็นที่ไม่สามารถแทนที่ได้ (NFTs) องค์กรอิสระแบบกระจายศูนย์ (DAOs) มาตรฐานโทเค็น เกมมิ่ง และอีกมากมาย การทำความเข้าใจวิธีการทำงานของสมาร์ตคอนแทรกต์เป็นสิ่งจำเป็นสำหรับทุกคนที่นำทางระบบสกุลเงินดิจิทัลสมัยใหม่

แนวคิดเบื้องหลังสมาร์ตคอนแทรกต์

วิสัยทัศน์ของ Nick Szabo (1994)

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

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

จากทฤษฎีสู่ความเป็นจริง

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

ความก้าวหน้าครั้งใหญ่มาจาก Ethereum ซึ่งเปิดตัวในปี 2015 โดย Vitalik Buterin และคนอื่นๆ Ethereum ถูกออกแบบตั้งแต่ต้นเพื่อเป็น "คอมพิวเตอร์โลก" — แพลตฟอร์มระดับโลกแบบกระจายศูนย์สำหรับการทำงานของสมาร์ตคอนแทรกต์ตามอำเภอใจ

วิธีการทำงานของสมาร์ตคอนแทรกต์

การปรับใช้

สมาร์ตคอนแทรกต์เริ่มต้นจากซอร์สโค้ดที่เขียนในภาษาการเขียนโปรแกรมที่ออกแบบสำหรับบล็อกเชน บน Ethereum ภาษาที่เด่นที่สุดคือ Solidity แม้ว่ามีทางเลือกอื่นๆ เช่น Vyper (ไวยากรณ์ที่เหมือน Python) Yul (ระดับต่ำ) และ Fe ก็มีอยู่

กระบวนการปรับใช้:

  1. เขียนโค้ด: นักพัฒนาเขียนตรรกะสมาร์ตคอนแทรกต์ใน Solidity หรือภาษาอื่น
  2. คอมไพล์: ซอร์สโค้ดจะถูกคอมไพล์เป็น bytecode — คำสั่งระดับต่ำที่ Ethereum Virtual Machine (EVM) สามารถทำการปฏิบัติงาน
  3. ปรับใช้: bytecode ถูกส่งไปยังบล็อกเชนเป็นธุรกรรมปรับใช้พิเศษ ธุรกรรมนี้สร้างบัญชีสัญญาใหม่ที่ที่อยู่ที่ไม่ซ้ำกัน
  4. การจัดเก็บแบบไม่เปลี่ยนแปลง: เมื่อปรับใช้แล้ว รหัสสัญญาจะถูกเก็บไว้ถาวรบนบล็อกเชน ไม่สามารถแก้ไขได้ (แม้ว่ารูปแบบที่ปรับปรุงได้จะมีอยู่โดยใช้สัญญาพร็อกซี)

การปฏิบัติงาน

เมื่อผู้ใช้หรือสัญญาอื่นโต้ตอบกับสมาร์ตคอนแทรกต์:

  1. ธุรกรรมจะถูกส่งไปยังที่อยู่ของสัญญาพร้อมกับข้อมูลการเรียกใช้ฟังก์ชันที่เข้ารหัส
  2. ธุรกรรมจะถูกรวมไว้ในบล็อกโดยตัวตรวจสอบ
  3. Ethereum Virtual Machine (EVM) ทำการปฏิบัติงาน bytecode ของสัญญา
  4. สัญญาจะอ่านสถานะที่เก็บไว้ ทำการคำนวณ และปรับปรุงสถานะตามความจำเป็น
  5. ผลลัพธ์ (การเปลี่ยนแปลงสถานะ เหตุการณ์ ค่าที่ส่งคืน) จะถูกบันทึกบนบล็อกเชน
  6. ผู้ใช้จ่าย ค่า gas ตามสัดส่วนของทรัพยากรการคำนวณที่ใช้ไป

Ethereum Virtual Machine (EVM)

EVM คือสภาพแวดล้อมรันไทม์สำหรับสมาร์ตคอนแทรกต์บน Ethereum และเชนที่เข้ากันได้กับ EVM (BNB Smart Chain, Polygon, Avalanche C-Chain, Arbitrum, Optimism และอื่นๆ อีกมากมาย) คุณสมบัติหลัก:

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

ค่า Gas และค่าใช้จ่ายในการปฏิบัติงาน

Gas คือหน่วยวัดความพยายามในการคำนวณบน Ethereum ทุกการดำเนินการ EVM (opcode) มีค่า gas คงที่:

การดำเนินการค่า Gas
การบวก (ADD)3
การคูณ (MUL)5
การเขียนที่เก็บข้อมูล (SSTORE)20,000 (ใหม่) / 5,000 (อัปเดต)
การเรียกใช้ภายนอก (CALL)2,600+
การสร้างสัญญา (CREATE)32,000+

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

โครงสร้างของสมาร์ตคอนแทรกต์

นี่คือสมาร์ตคอนแทรกต์ Solidity ที่ทำให้ง่ายขึ้นเพื่อแสดงให้เห็นส่วนประกอบหลัก:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract SimpleEscrow {
address public buyer;
address public seller;
uint256 public amount;
bool public isComplete;

event FundsDeposited(address indexed buyer, uint256 amount);
event FundsReleased(address indexed seller, uint256 amount);

constructor(address _seller) {
buyer = msg.sender;
seller = _seller;
}

function deposit() external payable {
require(msg.sender == buyer, "Only buyer can deposit");
require(amount == 0, "Already deposited");
amount = msg.value;
emit FundsDeposited(buyer, msg.value);
}

function confirmReceipt() external {
require(msg.sender == buyer, "Only buyer can confirm");
require(amount > 0, "No funds deposited");
require(!isComplete, "Already completed");

isComplete = true;
payable(seller).transfer(amount);
emit FundsReleased(seller, amount);
}
}

สัญญานี้แสดงให้เห็นแนวคิดหลักหลายประการ:

  • ตัวแปรสถานะ (buyer, seller, amount, isComplete) ยังคงอยู่บนบล็อกเชน
  • เหตุการณ์ (FundsDeposited, FundsReleased) ส่งบันทึกที่แอปพลิเคชันภายนอกสามารถติดตามได้
  • การควบคุมการเข้าถึง (ข้อความ require) รับประกันว่าเฉพาะฝ่ายที่ได้รับอนุญาตเท่านั้นที่สามารถเรียกใช้ฟังก์ชันบางอย่างได้
  • การโอนมูลค่า (transfer) ย้าย ETH ระหว่างที่อยู่
  • ตรรกะที่ไม่เปลี่ยนแปลง: เมื่อปรับใช้แล้ว กฎเหล่านี้ไม่สามารถเปลี่ยนแปลงได้โดยใครๆ — แม้แต่ผู้สร้างสัญญา

แพลตฟอร์มสมาร์ตคอนแทรกต์

แม้ว่า Ethereum จะเป็นผู้บุกเบิกสมาร์ตคอนแทรกต์ แต่แพลตฟอร์มมากมายรองรับพวกมันแล้ว:

เชนที่เข้ากันได้กับ EVM

เชนเหล่านี้ใช้สถาปัตยกรรม EVM เดียวกันและรองรับ Solidity:

  • BNB Smart Chain (BSC): ค่าธรรมเนียมต่ำกว่า บล็อกที่เร็วขึ้น กระจายศูนย์น้อยลง
  • Polygon PoS: Ethereum sidechain ที่มีค่าธรรมเนียมต่ำ
  • Avalanche C-Chain: เชน EVM ที่มีปริมาณงานสูงพร้อมการสิ้นสุดที่เร็วกว่าวินาที
  • Arbitrum / Optimism: Ethereum Layer 2 rollups ที่มีความปลอดภัยของ Ethereum แบบสืบทอด
  • Base: Layer 2 ของ Coinbase ที่สร้างบน OP Stack ของ Optimism

แพลตฟอร์มที่ไม่ใช่ EVM

  • Solana: ใช้ Rust และ C สำหรับสมาร์ตคอนแทรกต์ (เรียกว่า "โปรแกรม") พร้อมกับรูปแบบการปฏิบัติงานแบบขนานที่ไม่ซ้ำใคร
  • Cardano: ใช้ Plutus ที่ใช้ Haskell สำหรับสมาร์ตคอนแทรกต์ โดยเน้นการตรวจสอบอย่างเป็นทางการ
  • Polkadot: ใช้ ink! (ที่ใช้ Rust) สำหรับสมาร์ตคอนแทรกต์บน parachain ecosystem
  • Cosmos: สมาร์ตคอนแทรกต์ผ่าน CosmWasm (ที่ใช้ Rust) บนเชน Cosmos SDK
  • Near Protocol: ใช้ Rust และ AssemblyScript พร้อมสถาปัตยกรรมที่แบ่งส่วน
  • Tezos: ใช้ Michelson ซึ่งเป็นภาษาที่ใช้สแต็กระดับต่ำพร้อมความสามารถในการตรวจสอบอย่างเป็นทางการ

การประยุกต์ใช้ในโลกจริง

การเงินแบบกระจายศูนย์ (DeFi)

สมาร์ตคอนแทรกต์ขับเคลื่อน DeFi ecosystem ทั้งหมด:

  • Automated Market Makers (AMMs): Uniswap, Curve และ SushiSwap ใช้สมาร์ตคอนแทรกต์เพื่อสร้างการแลกเปลี่ยนโทเค็นแบบกระจายศูนย์โดยไม่มีหนังสือคำสั่ง ผู้ให้สภาพคล่องฝากคู่โทเค็นลงในสระ และสูตรทางคณิตศาสตร์กำหนดราคาโดยอัตโนมัติ
  • โปรโตคอลการให้ยืม: Aave, Compound และ MakerDAO ใช้สมาร์ตคอนแทรกต์เพื่อให้สามารถให้ยืมและยืมเงินโดยไม่ต้องขอความอนุญาต ผู้ใช้ฝากหลักประกัน และยืมเงินจากหลักประกัน โดยอัตราดอกเบี้ยถูกกำหนดโดยอัตโนมัติ
  • Stablecoin: DAI คือ stablecoin ที่กระจายศูนย์ที่สร้างขึ้นโดยการฝากหลักประกันลงในสมาร์ตคอนแทรกต์ MakerDAO ระบบจัดการการชำระหนี้อย่างอัตโนมัติเมื่อมูลค่าหลักประกันลดลง
  • ตัวรวมผลประโยชน์: Yearn Finance และโปรโตคอลที่คล้ายกันใช้สมาร์ตคอนแทรกต์เพื่อย้ายกองทุนระหว่างโปรโตคอล DeFi โดยอัตโนมัติ เพื่อเพิ่มประสิทธิภาพผลตอบแทน

โทเค็นที่ไม่สามารถแทนที่ได้ (NFTs)

NFTs คือสมาร์ตคอนแทรกต์ (โดยปกติจะปฏิบัติตามมาตรฐาน ERC-721 หรือ ERC-1155) ที่แสดงความเป็นเจ้าของสินค้าดิจิทัลที่ไม่ซ้ำใคร สมาร์ตคอนแทรกต์จัดการการสร้าง การโอน และการติดตามต้นกำเนิดของแต่ละโทเค็น

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

DAOs คือองค์กรที่ปกครองไปโดยสมาร์ตคอนแทรกต์ทั้งหมด ผู้ถือโทเค็นลงคะแนนเสียงเพื่อเสนอ (การจัดสรรเงินทุน การเปลี่ยนแปลงพารามิเตอร์ การตัดสินใจด้านกลยุทธ์) และสมาร์ตคอนแทรกต์จะดำเนินการตัดสินใจที่ชนะโดยอัตโนมัติ สิ่งนี้ช่วยให้การปกครองที่กระจายศูนย์โดยไม่มีโครงสร้างองค์กรดั้งเดิม

มาตรฐานโทเค็น

สมาร์ตคอนแทรกต์กำหนดอินเทอร์เฟซโทเค็นมาตรฐาน:

  • ERC-20: โทเค็นที่ใช้แทนกันได้ (ใช้โดยสกุลเงินดิจิทัลหลายพันรายการ)
  • ERC-721: โทเค็นที่ไม่สามารถแทนที่ได้ (สินค้าดิจิทัลเฉพาะ)
  • ERC-1155: มาตรฐานโทเค็นหลายตัว (ทั้งสินค้าที่ใช้แทนกันได้และไม่สามารถแทนที่ได้)
  • ERC-4626: โทเค็นชุดผลตอบแทนสำหรับสินค้าที่ให้ผลตอบแทน

ประกันภัย

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

เกมและ Metaverse

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

ความปลอดภัยของสมาร์ตคอนแทรกต์

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

ช่องโหว่ทั่วไป

Reentrancy: สัญญาที่ปลายทางร้าย เรียกกลับเข้าไปในสัญญาที่มีช่องโหว่ก่อนการปฏิบัติงานครั้งแรกสำเร็จ ซึ่งจะทำให้สถานะเสื่อมสลาย การโจมตี DAO ปี 2016 ใช้ประโยชน์จากช่องโหว่นี้ ดึง ETH มูลค่า $60 ล้าน และนำไปสู่ Ethereum/Ethereum Classic hard fork

Integer overflow/underflow: ก่อน Solidity 0.8.0 การดำเนินการทางคณิตศาสตร์สามารถ overflow หรือ underflow โดยเงียบ ส่งผลให้เกิดพฤติกรรมที่ไม่คาดคิด Solidity สมัยใหม่รวมการตรวจสอบ overflow ที่สร้างไว้

ข้อบกพร่องในการควบคุมการเข้าถึง: การควบคุมการเข้าถึงที่หายไปหรือไม่ถูกต้องอนุญาตให้ผู้ใช้ที่ไม่ได้รับอนุญาตเรียกใช้ฟังก์ชันพิเศษ (เช่นการถอนเงินหรือการเปลี่ยนความเป็นเจ้าของ)

การจัดการข้อมูลหลัก: สมาร์ตคอนแทรกต์ที่ขึ้นอยู่กับข้อมูลภายนอก (ฟีดราคา) สามารถถูกใช้ประโยชน์ได้หากจัดการข้อมูลหลัก การโจมตี Flash loan มักใช้ประโยชน์จากช่องโหว่จัดการข้อมูลหลักเพื่อสร้างความแตกต่างในราคาโดยอุตรัตถ์

Front-running: เนื่องจากธุรกรรมที่