พื้นฐานการตรวจสอบอย่างเป็นทางการ
ทำความรู้จักวิธีการและเครื่องมือสำหรับการตรวจสอบอย่างเป็นทางการ เพื่อพิสูจน์ทางคณิตศาสตร์ว่าสัญญาถูกต้องและไม่มีช่องโหว่
พื้นฐานการตรวจสอบอย่างเป็นทางการ เป็นบทเรียน Blockchain Smart Contracts with Solidity ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Blockchain Smart Contracts with Solidity และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Blockchain Smart Contracts with Solidity มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
What is Formal Verification?
Formal verification (FV) is like giving your smart contract a mathematical proof of correctness!
Instead of just testing if it works in certain scenarios, FV uses mathematical techniques to prove that your code behaves exactly as intended under ALL possible scenarios.
Think of it as a super rigorous audit that guarantees certain properties of your contract will always hold true.
Why It's Crucial for Contracts
Smart contracts manage valuable assets and are immutable once deployed. A single bug can lead to catastrophic losses!
Unlike regular software, smart contracts can't be easily patched or updated, making pre-deployment correctness paramount.
FV helps catch subtle bugs that even extensive testing might miss, providing a higher level of assurance for critical logic.
Testing vs. Formal Verification
It's important to understand the difference:
- Traditional Testing: Runs your code with specific inputs to find bugs. It shows the presence of bugs but not their absence.
- Formal Verification: Proves mathematically that a program satisfies its specification for ALL possible inputs. It aims to prove the absence of bugs for specified properties.
They complement each other, but FV offers stronger guarantees.
Core Idea: Contract Properties
At the heart of formal verification are properties. These are statements about what your contract MUST or MUST NOT do.
Examples of properties:
- "The total supply of tokens never exceeds its initial value."
- "Only the contract owner can pause the contract."
- "A user's balance can never become negative."
You define these properties, and the FV tool tries to prove them.
Property Example: Total Supply
Consider this simple token contract. A key property we'd want to verify is that its totalSupply remains constant after initialization.
We'd write a formal specification stating: "After deployment, totalSupply cannot be increased or decreased by any function call." The FV tool would then check this.
/*
This is a simplified example for illustration.
A real token contract would have transfer functions
and other logic that formal verification could target.
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract SimpleToken {
string public name;
string public symbol;
uint256 public totalSupply;
address public owner;
constructor(string memory _name, string memory _symbol, uint256 _initialSupply) {
name = _name;
symbol = _symbol;
totalSupply = _initialSupply;
owner = msg.sender;
}
function getOwner() public view returns (address) {
return owner;
}
}The FV Process (Simplified)
Here's a high-level look at how formal verification typically works:
- Specify Properties: You write down the desired behaviors (properties) of your contract in a formal language (e.g., a variant of Solidity, or a separate specification language).
- Run the Verifier: A formal verification tool analyzes your contract's code and its properties.
- Generate Proof or Counterexample: The tool either produces a mathematical proof that the properties always hold, or it finds a counterexample – a sequence of actions that violates a property.
If a counterexample is found, you know there's a bug!
Different FV Approaches
There are a few main approaches to formal verification:
- Model Checking: Explores all possible states and transitions of a system to verify properties. Works well for finite-state systems, but can hit "state explosion" for complex contracts.
- Theorem Proving: Uses logical deduction to prove properties. More powerful for complex systems but often requires more manual effort and expertise.
- Static Analysis: While not strictly FV, static analyzers check code for common patterns of bugs without executing it, providing a good first line of defense.
Popular Solidity FV Tools
Several tools help apply formal verification to Solidity:
- SMTChecker: Built into the Solidity compiler, it uses SMT (Satisfiability Modulo Theories) solvers to verify simple properties and detect common issues.
- Certora Prover: A powerful commercial tool that allows writing complex specifications in a specialized language to prove deep properties.
- K-framework: A semantic framework used to formally define programming languages and then verify properties of programs written in those languages.
These tools require learning their specific syntax for writing properties.
Pros & Cons of Formal Verification
Benefits:
- Highest level of assurance for critical properties.
- Can find obscure bugs missed by testing.
- Reduces risk in high-value smart contracts.
Limitations:
- Can be complex and costly to implement.
- Requires specialized expertise to write specifications.
- Only as good as the properties defined – properties themselves can have bugs!
- Does not verify the underlying EVM or compiler itself.
Formal Verification Check
You've learned about the power of formal verification. Let's test your understanding!
Formal Verification Recap
In this lesson, we explored Formal Verification, a powerful technique for mathematically proving the correctness of smart contracts.
We learned that FV aims to guarantee the absence of specific bugs by verifying contract properties against all possible inputs, offering a higher level of assurance than traditional testing.
While complex, tools like SMTChecker and Certora are making FV more accessible for securing critical blockchain applications.
คำถามที่พบบ่อย
บทเรียน “พื้นฐานการตรวจสอบอย่างเป็นทางการ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พื้นฐานการตรวจสอบอย่างเป็นทางการ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Blockchain Smart Contracts with Solidity ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Blockchain Smart Contracts with Solidity มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐานการตรวจสอบอย่างเป็นทางการ”
ทำความรู้จักวิธีการและเครื่องมือสำหรับการตรวจสอบอย่างเป็นทางการ เพื่อพิสูจน์ทางคณิตศาสตร์ว่าสัญญาถูกต้องและไม่มีช่องโหว่ คุณปฏิบัติ Blockchain Smart Contracts with Solidity ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Blockchain Smart Contracts with Solidity หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Blockchain Smart Contracts with Solidity บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “พื้นฐานการตรวจสอบอย่างเป็นทางการ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Blockchain Smart Contracts with Solidity นี้ได้ไหม
ได้ บทเรียน Blockchain Smart Contracts with Solidity ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การทดสอบขั้นสูงด้วย Foundry/Hardhat
- พื้นฐานการตรวจสอบอย่างเป็นทางการ
- การนำไปใช้งานบนเมนเน็ตและการติดตาม
- การทดสอบแบบสุ่มและการทดสอบค่าคงตัว