สมาร์ตคอนแทรกต์อธิบาย: มันทำงานอย่างไรและเหตุใดจึงมีความสำคัญ
สมาร์ตคอนแทรกต์คือโปรแกรมที่ทำการปฏิบัติงานด้วยตนเองและเก็บไว้บนบล็อกเชนที่บังคับใช้เงื่อนไขของข้อตกลงโดยอัตโนมัติเมื่อตรงตามเงื่อนไขที่กำหนดไว้ก่อน ซึ่งแตกต่างจากสัญญาแบบดั้งเดิมที่ต้องมีทนายความ ศาลและตัวกลางในการบังคับใช้ สมาร์ตคอนแทรกต์จะทำการปฏิบัติงานเป็นอิสระโดยอิงจากโค้ด — "โค้ดคือกฎหมาย" ในความหมายที่แท้จริงที่สุด
สมาร์ตคอนแทรกต์เป็นรากฐานของนวัตกรรมบล็อกเชนที่สำคัญเกือบทั้งหมดนอกเหนือจากการโอนมูลค่าอย่างง่ายๆ: การเงินแบบกระจายศูนย์ (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 ก็มีอยู่
กระบวนการปรับใช้:
- เขียนโค้ด: นักพัฒนาเขียนตรรกะสมาร์ตคอนแทรกต์ใน Solidity หรือภาษาอื่น
- คอมไพล์: ซอร์สโค้ดจะถูกคอมไพล์เป็น bytecode — คำสั่งระดับต่ำที่ Ethereum Virtual Machine (EVM) สามารถทำการปฏิบัติงาน
- ปรับใช้: bytecode ถูกส่งไปยังบล็อกเชนเป็นธุรกรรมปรับใช้พิเศษ ธุรกรรมนี้สร้างบัญชีสัญญาใหม่ที่ที่อยู่ที่ไม่ซ้ำกัน
- การจัดเก็บแบบไม่เปลี่ยนแปลง: เมื่อปรับใช้แล้ว รหัสสัญญาจะถูกเก็บไว้ถาวรบนบล็อกเชน ไม่สามารถแก้ไขได้ (แม้ว่ารูปแบบที่ปรับปรุงได้จะมีอยู่โดยใช้สัญญาพร็อกซี)
การปฏิบัติงาน
เมื่อผู้ใช้หรือสัญญาอื่นโต้ตอบกับสมาร์ตคอนแทรกต์:
- ธุรกรรมจะถูกส่งไปยังที่อยู่ของสัญญาพร้อมกับข้อมูลการเรียกใช้ฟังก์ชันที่เข้ารหัส
- ธุรกรรมจะถูกรวมไว้ในบล็อกโดยตัวตรวจสอบ
- Ethereum Virtual Machine (EVM) ทำการปฏิบัติงาน bytecode ของสัญญา
- สัญญาจะอ่านสถานะที่เก็บไว้ ทำการคำนวณ และปรับปรุงสถานะตามความจำเป็น
- ผลลัพธ์ (การเปลี่ยนแปลงสถานะ เหตุการณ์ ค่าที่ส่งคืน) จะถูกบันทึกบนบล็อกเชน
- ผู้ใช้จ่าย ค่า 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: เนื่องจากธุรกรรมที่