Kontrak Pintar Rantaian Blok dengan Solidity · Pelajaran

Asas Pengesahan Formal

Dapatkan pengenalan kepada kaedah dan alat pengesahan formal untuk membuktikan secara matematik ketepatan kontrak serta ketiadaan kerentanan.

Pelajaran 2 daripada 411 langkah

Asas Pengesahan Formal ialah pelajaran Kontrak Pintar Rantaian Blok dengan Solidity percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kontrak Pintar Rantaian Blok dengan Solidity, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kontrak Pintar Rantaian Blok dengan Solidity merangkumi sejumlah 4 pelajaran.

Apakah Pengesahan Formal?

Pengesahan formal (FV) ibarat memberikan bukti matematik tentang ketepatan kontrak pintar anda!

Daripada sekadar menguji sama ada ia berfungsi dalam senario tertentu, FV menggunakan teknik matematik untuk membuktikan bahawa kod anda berkelakuan tepat seperti yang dimaksudkan dalam ALL senario yang mungkin.

Anggaplah ia sebagai audit yang amat teliti dan menjamin bahawa sifat tertentu kontrak anda akan sentiasa benar.

Mengapa Ia Penting untuk Kontrak

Kontrak pintar mengurus aset bernilai dan tidak boleh diubah selepas digunakan. Satu pepijat sahaja boleh menyebabkan kerugian besar!

Tidak seperti perisian biasa, kontrak pintar tidak boleh ditampal atau dikemas kini dengan mudah, menjadikan ketepatan sebelum penggunaan sangat penting.

FV membantu mengesan pepijat halus yang mungkin terlepas walaupun selepas pengujian menyeluruh, lalu memberikan tahap jaminan yang lebih tinggi untuk logik kritikal.

Pengujian berbanding Pengesahan Formal

Penting untuk memahami perbezaannya:

  • Pengujian Tradisional: Menjalankan kod anda dengan input khusus untuk mencari pepijat. Kaedah ini menunjukkan kewujudan pepijat, tetapi bukan ketiadaannya.
  • Pengesahan Formal: Membuktikan secara matematik bahawa program memenuhi spesifikasinya untuk ALL input yang mungkin. Kaedah ini berusaha membuktikan ketiadaan pepijat bagi sifat yang ditetapkan.

Kedua-duanya saling melengkapi, tetapi FV menawarkan jaminan yang lebih kukuh.

Idea Teras: Sifat Kontrak

Inti pengesahan formal ialah sifat. Sifat ialah pernyataan tentang perkara yang MUST atau MUST NOT dilakukan oleh kontrak anda.

Contoh sifat:

  • "Jumlah bekalan token tidak pernah melebihi nilai awalnya."
  • "Hanya pemilik kontrak boleh menjeda kontrak."
  • "Baki pengguna tidak boleh menjadi negatif."

Anda mentakrifkan sifat ini, kemudian alat FV cuba membuktikannya.

Contoh Sifat: Jumlah Bekalan

Pertimbangkan kontrak token mudah ini. Satu sifat penting yang ingin kita sahkan ialah totalSupply kekal malar selepas pemulaan.

Kita akan menulis spesifikasi formal yang menyatakan: "Selepas penggunaan, totalSupply tidak boleh ditambah atau dikurangkan oleh sebarang panggilan fungsi." Alat FV kemudiannya akan menyemak perkara ini.

/*
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;
    }
}

Proses FV (Dipermudah)

Berikut ialah gambaran umum tentang cara pengesahan formal biasanya berfungsi:

  1. Tentukan Sifat: Anda menulis tingkah laku yang dikehendaki bagi kontrak anda dalam bahasa formal, contohnya variasi Solidity atau bahasa spesifikasi berasingan.
  2. Jalankan Pengesah: Alat pengesahan formal menganalisis kod kontrak dan sifatnya.
  3. Jana Bukti atau Contoh Tandingan: Alat tersebut sama ada menghasilkan bukti matematik bahawa sifat sentiasa benar, atau menemui contoh tandingan – urutan tindakan yang melanggar sesuatu sifat.

Jika contoh tandingan ditemui, anda tahu bahawa terdapat pepijat!

Pendekatan FV yang Berbeza

Terdapat beberapa pendekatan utama untuk pengesahan formal:

  • Penyemakan Model: Meneroka semua keadaan dan peralihan sistem yang mungkin untuk mengesahkan sifat. Kaedah ini berfungsi dengan baik untuk sistem keadaan terhingga, tetapi boleh mengalami "letupan keadaan" bagi kontrak kompleks.
  • Pembuktian Teorem: Menggunakan deduksi logik untuk membuktikan sifat. Kaedah ini lebih berkuasa untuk sistem kompleks, tetapi biasanya memerlukan lebih banyak usaha manual dan kepakaran.
  • Analisis Statik: Walaupun bukan FV secara ketat, penganalisis statik menyemak kod untuk corak pepijat biasa tanpa melaksanakannya, lalu menyediakan barisan pertahanan pertama yang baik.

Alat FV Solidity yang Popular

Beberapa alat membantu menggunakan pengesahan formal pada Solidity:

  • SMTChecker: Terbina dalam penyusun Solidity, alat ini menggunakan penyelesai SMT (Kepuasan Modulo Teori) untuk mengesahkan sifat mudah dan mengesan masalah biasa.
  • Certora Prover: Alat komersial berkuasa yang membolehkan penulisan spesifikasi kompleks dalam bahasa khusus untuk membuktikan sifat yang mendalam.
  • K-framework: Rangka kerja semantik yang digunakan untuk mentakrifkan bahasa pengaturcaraan secara formal dan kemudiannya mengesahkan sifat program yang ditulis dalam bahasa tersebut.

Alat ini memerlukan anda mempelajari sintaks khususnya untuk menulis sifat.

Kelebihan dan Kekurangan Pengesahan Formal

Faedah:

  • Tahap jaminan tertinggi untuk sifat kritikal.
  • Boleh menemui pepijat yang sukar dikesan dan terlepas daripada pengujian.
  • Mengurangkan risiko dalam kontrak pintar bernilai tinggi.

Batasan:

  • Boleh menjadi kompleks dan mahal untuk dilaksanakan.
  • Memerlukan kepakaran khusus untuk menulis spesifikasi.
  • Kualitinya bergantung pada sifat yang ditakrifkan – sifat itu sendiri boleh mengandungi pepijat!
  • Tidak mengesahkan EVM atau penyusun itu sendiri.

Semakan Pengesahan Formal

Anda telah mempelajari kuasa pengesahan formal. Mari uji pemahaman anda!

Imbas Kembali Pengesahan Formal

Dalam pelajaran ini, kita meneroka Pengesahan Formal, teknik berkuasa untuk membuktikan ketepatan kontrak pintar secara matematik.

Kita mempelajari bahawa FV berusaha menjamin ketiadaan pepijat tertentu dengan mengesahkan sifat kontrak terhadap semua input yang mungkin, lalu menawarkan tahap jaminan yang lebih tinggi berbanding pengujian tradisional.

Walaupun kompleks, alat seperti SMTChecker dan Certora menjadikan FV lebih mudah diakses untuk melindungi aplikasi rantaian blok yang kritikal.

Percuma untuk bermula

Pelajari Kontrak Pintar Rantaian Blok dengan Solidity dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
12
Pelajaran
48

Soalan Lazim

Adakah pelajaran “Asas Pengesahan Formal” percuma?

Ya — teks penuh “Asas Pengesahan Formal” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Kontrak Pintar Rantaian Blok dengan Solidity, tingkat taraf kepada CoddyKit PRO. Kursus Kontrak Pintar Rantaian Blok dengan Solidity merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Asas Pengesahan Formal”?

Dapatkan pengenalan kepada kaedah dan alat pengesahan formal untuk membuktikan secara matematik ketepatan kontrak serta ketiadaan kerentanan. Anda berlatih Kontrak Pintar Rantaian Blok dengan Solidity menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Kontrak Pintar Rantaian Blok dengan Solidity?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Kontrak Pintar Rantaian Blok dengan Solidity di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Asas Pengesahan Formal” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Kontrak Pintar Rantaian Blok dengan Solidity ini?

Ya. Setiap pelajaran Kontrak Pintar Rantaian Blok dengan Solidity menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pengujian Lanjutan dengan Foundry/Hardhat
  2. Asas Pengesahan Formal
  3. Pelancaran & Pemantauan Mainnet
  4. Fuzzing dan Pengujian Invarian
← Kembali ke Kontrak Pintar Rantaian Blok dengan Solidity