Unit 2 / 11

Sokongan Penulisan Kontrak Pintar: Draf Solidity/Vyper dan Penjanaan Kod Selamat

Keuntungan:

  • Keupayaan untuk menggunakan kecerdasan buatan untuk menghasilkan rangka kerja, ujian dan menyemak draf berdasarkan perpustakaan yang terbukti (cth. OpenZeppelin) dan memahami bahawa manusia menjamin keselamatan pengeluaran
  • Keupayaan untuk mengesahkan versi kod, corak dan kawalan akses yang dihasilkan oleh kecerdasan buatan melalui kompilasi, ujian dan testnet
  • Dapat membezakan penyusunan itu tidak bermakna selamat dan testnet dan pengauditan adalah penting.

Menulis kontrak pintar adalah berbeza daripada perisian biasa: kod yang anda tulis adalah awam, tidak boleh diubah dan program yang memindahkan wang secara langsung. Dalam unit ini, anda akan belajar cara menggunakan AI sebagai pembantu pembangunan kontrak pintar; Kami akan belajar daripada pengeluaran draf kepada penulisan ujian, daripada penarikan semula corak kepada pengoptimuman gas (yuran transaksi). Tetapi mari kita jelaskan dari awal: AI menghasilkan pelan tindakan; Manusia memastikan kod selamat yang masuk ke dalam pengeluaran.

Tanah pertama: bahasa dan persekitaran

Bahasa kontrak pintar yang paling biasa ialah Solidity (bahasa Ethereum dan EVM — Mesin Maya Ethereum, mesin maya di mana kontrak berjalan — rantai yang serasi). Alternatifnya ialah Vyper (bahasa seperti Python yang bertujuan untuk menjadi lebih terkekang dan boleh dibaca). Kod anda menggunakan gas (kos setiap transaksi ke rantaian blok); Kod yang tidak cekap adalah mahal. Memastikan istilah ini jelas dalam konteks yang anda berikan kepada AI adalah kunci untuk mendapatkan output yang tepat.

Di mana AI paling berharga bukanlah dalam "menulis dari awal" tetapi dalam menghasilkan rangka kerja + acuan yang baik: permulaan yang mematuhi piawaian, pelan tindakan untuk menambah kepakaran anda.

Lapisan penggunaan AI dalam pengekodan

1. Menjana rangka. AI dengan cepat melombong rangka token standard (ERC-20) atau NFT (ERC-721 — piawaian aset digital yang unik). Tetapi pastikan untuk menjadikan AI menggunakan perpustakaan yang terbukti: contohnya, OpenZeppelin (perpustakaan kontrak standard yang dipercayai dan diaudit oleh komuniti). Peraturannya ialah menggunakan blok yang diuji dan bukannya menulis keselamatan dari awal.

2. Penerangan dan semakan fungsi. Menjelaskan fungsi sedia ada kepada AI membolehkan anda mengesan ralat logik lebih awal.

3. Penjanaan ujian. AI pandai menjana kes ujian untuk kes tepi: input sifar, nombor yang sangat besar, pemanggil tanpa kebenaran, panggilan berulang. Ini mengingatkan salah satu senario yang dilangkau.

4. Gas dan kebolehbacaan. AI menandai corak mahal seperti penulisan storan yang tidak perlu dan mencadangkan alternatif.

Petunjuk: Arahkan AI ​​untuk "Membina kontrak OpenZeppelin yang telah diaudit, menulis semula keselamatan dari awal." Adalah lebih berisiko untuk AI menulis kod keselamatan asal daripada menggunakan perpustakaan yang diuji.

Gesaan lemah / Gesaan kuat

Gesaan yang lemah:

Tulis saya kontrak token.

Gesaan ini berbahaya: tidak jelas piawaian mana, rantaian mana, perpustakaan mana, keperluan keselamatan mana. AI menjana kod rawak, mungkin ketinggalan zaman atau tidak selamat.

Gesaan kuat:

Peranan anda: pemaju Solidity kanan. Hasilkan draf token ERC-20 untuk rantaian serasi EVM. Peraturan:- Berdasarkan ERC20 dan kontrak Milik OpenZeppelin yang telah diaudit.- Tulis baris versi Solidity dan lesen (SPDX) secara eksplisit.- Hanya pemilik yang mempunyai kebenaran untuk mencetak; tambah penutup terhadap tekanan tak terhingga. - Tambahkan ulasan NatSpec pada setiap fungsi. - Tulis keselamatan dari awal; Gunakan blok standard. - Tambahkan amaran pada penghujung: "Ini ialah draf; pengauditan dan ujian diperlukan". Tandai kawasan yang anda tidak pasti dengan // TODO.

Perbezaan: gesaan yang kuat memberikan peranan yang jelas, standard, perpustakaan, sempadan keselamatan, dokumentasi dan jangkaan pengesahan.

Empat templat yang boleh disalin

1) Rangka berdasarkan piawai:

Peranan anda: Pembangun Solidity. Hasilkan rangka kerja kontrak [ERC-20 / ERC-721 / staking] berdasarkan perpustakaan teraudit OpenZeppelin. Tulis lesen SPDX dan versi pragma. Tambahkan kawalan akses (yang boleh memanggil) pada setiap fungsi luaran. Mencipta semula keselamatan; Gunakan blok standard. Ini adalah draf.

2) Semakan fungsi:

Periksa fungsi berikut seperti pemaju kanan: apa yang ia lakukan, apakah keadaan yang ia berubah, siapa yang boleh memanggilnya? Tandakan kemungkinan ralat logik dan risiko keselamatan sebagai HIPOTESIS, memautkan setiap satu baris dalam kod. Jangan nyatakan "selamat"; hanya senaraikan titik perhatian.

3) Draf senario ujian:

Cadangkan kes ujian untuk kontrak ini (boleh jadi draf untuk Foundry/Hardhat). Secara khusus meliputi kes had: input sifar, nombor yang sangat besar, panggilan tidak dibenarkan, panggilan masuk semula, dana tidak mencukupi. Tulis APA yang disahkan oleh setiap ujian.

4) Gas dan ulasan kebolehbacaan:

Dalam kontrak ini, tandai corak yang boleh mengurangkan kos gas: penulisan penyimpanan yang tidak perlu, panggilan luar dalam gelung, pengiraan berulang. Terangkan perbezaan sebelum/selepas dalam setiap cadangan. Mengesyorkan pengoptimuman yang melanggar keselamatan; Jika tidak jelas, sebut "tanya juruaudit".

Tiga kes mini (dalam bilangan)

Kes 1 — Rangka disimpan 4 jam. Satu pasukan melombong rangka kontrak peletakhakan berasaskan perpustakaan yang diaudit dengan AI dalam masa 30 minit; Ia mengambil masa ~4 jam secara manual. Pasukan menumpukan masa untuk keselamatan dan ujian. Keuntungan datang bukan daripada pemindahan keselamatan, tetapi daripada mempercepatkan rangka kerja yang membosankan.

Kes 2 — Perangkap versi lapuk. AI menghasilkan corak yang menghantar Eter mentah melalui pemindahan, yang tidak lagi disyorkan kerana data latihan sudah lapuk. Pembangun menyedari perkara ini dan menukarnya kepada corak berasaskan panggilan dan dilindungi kemasukan semula semasa. Pelajaran: Perpustakaan/corak AI sentiasa disahkan terkini; AI tidak tahu melebihi tarikh tamat latihan.

Kes 3 — Draf ujian muncul pepijat tersembunyi. Ujian "pemanggil tanpa kebenaran" yang dihasilkan AI mendedahkan bahawa pembangun telah melupakan kawalan akses dalam sesuatu fungsi. hanyaPemilik kehilangan 1 talian, ditangkap dalam 5 minit di testnet; Mungkin ada kehilangan dana di mainnet. Pengajaran: AI meliputi titik buta manusia dalam ujian.

Mengingati corak keselamatan dengan AI

AI pandai mengingatkan anda tentang corak kerentanan yang diketahui seperti senarai semak. Corak yang paling biasa:

  • Kemasukan semula: Membuat panggilan luar tanpa mengemas kini status. Penyelesaian: perintah semak-kesan-interaksi, pengawal kemasukan semula.
  • Kekurangan kawalan akses: Sesiapa sahaja boleh memanggil fungsi kritikal.
  • Integer overflow/underfall: Modern Solidity menangkap kebanyakannya, tetapi masih berisiko dalam kod peringkat rendah.
  • Pengesahan input yang tidak mencukupi: Alamat sifar, kawalan kuantiti sifar.
  • Kebergantungan Oracle: Kepercayaan buta terhadap data luaran (seperti harga).
Perhatian: AI boleh memanggil semula senarai ini, tetapi ia tidak dapat menjamin sama ada item dalam senarai berada dalam kod khusus anda. Senarai semak adalah permulaan; Ia bukan pengganti untuk kawalan kontena.

Mendapatkan konteks yang betul: Rahsia kepada kod yang baik daripada AI

Kualiti kod yang dihasilkan AI bergantung secara langsung pada kualiti konteks yang anda berikan. Dalam Web3 ini amat kritikal kerana satu perincian kecil (rantai mana, versi Solidity mana, piawai token) mengubah keseluruhan output. Konteks yang baik termasuk:

  • Rantaian sasaran dan persekitaran: Mainnet Ethereum atau Layer 2 (chain sampingan yang lebih murah yang terletak di atas rantai utama)? Kos gas dan beberapa ciri berbeza mengikut rantaian.
  • Versi dan perpustakaan: Versi Solidity yang mana, versi OpenZeppelin yang mana? Jika tiada versi dinyatakan, AI mungkin menghasilkan corak yang sudah lapuk dan tidak digunakan lagi.
  • Keperluan keselamatan: Adakah terdapat had, bolehkah ia dijeda, bolehkah ia ditingkatkan? Ini harus dikatakan dari awal lagi.
  • Kekangan: Kosongkan had seperti "jangan gunakan pemasangan", "elakkan panggilan luar", "optimumkan gas tetapi kekalkan kebolehbacaan".

Satu lagi teknik yang berkuasa ialah meminta AI untuk pelan itu dahulu, kemudian kod: "Senaraikan dahulu fungsi kontrak ini dan apa yang akan dilakukan oleh masing-masing; tulis kod itu sebaik sahaja saya meluluskannya." Ini menangkap AI ke arah yang salah lebih awal dan membolehkan anda mengekalkan keputusan seni bina.

Petunjuk: Tanya AI "mengapa anda menulis kod ini seperti ini?" bertanya. Menjelaskan rasional akan mempercepatkan pembelajaran anda dan mendedahkan sebarang ralat logik (mis. andaian keselamatan yang salah). Jangan mempercayai output AI yang tidak dapat mempertahankan kodnya sendiri.

Kesilapan biasa

  • Meletakkan keselamatan dalam AI dari awal. Gunakan perpustakaan yang diuji.
  • Tidak mengesahkan versi/corak yang dihasilkan oleh AI. Data latihan mungkin lama.
  • Melangkau testnet. Setiap draf harus dijalankan pada rangkaian ujian sebelum disiarkan secara langsung.
  • Tidak menambah NatSpec/dokumentasi. Pemeriksaan dan penyelenggaraan menjadi sukar.
  • "Ia disusun, jadi ia selamat" salah tanggapan. Disusun tidak bermakna selamat.
  • Melupakan kawalan akses. Ia adalah salah satu kesilapan yang paling biasa dan mahal.

Secara ringkasnya

  • Dalam penulisan kontrak pintar, AI menghasilkan rangka kerja, ujian dan draf semakan; Manusia menjamin keselamatan pengeluaran.
  • Bina keselamatan bukan dari awal tetapi berdasarkan perpustakaan yang terbukti (mis. OpenZeppelin).
  • Kekemasan versi dan corak yang dihasilkan oleh YZ sentiasa disahkan.
  • Stub ujian adalah berharga dalam menangkap titik buta manusia (kes had, kawalan akses).
  • Disusun tidak bermakna selamat; testnet dan pengauditan adalah satu kemestian.

Tugasan permohonan

Untuk token ERC-20 mudah, hasilkan draf menggunakan gesaan "rangka berasaskan piawai" di atas. Kemudian: (1) semak sama ada ia menggunakan perpustakaan yang disemak, (2) semak kawalan akses, (3) hasilkan ujian dengan gesaan "draf kes ujian" dan benar-benar menjalankan sekurang-kurangnya satu ujian pemanggil penyangak. Cari dan perhatikan sekurang-kurangnya satu titik keselamatan yang AI terlepas.

senarai semak

  • [ ] Saya telah menyatakan dengan jelas standard dan rantaian dalam gesaan.
  • [ ] Saya mahukan pengeluaran berasaskan perpustakaan yang terbukti.
  • [ ] Lesen SPDX dan versi pragma tersedia.
  • [ ] Terdapat kawalan akses dalam setiap fungsi kritikal.
  • [ ] Saya mencipta dan menjalankan ujian untuk kes had.
  • [ ] Saya mengesahkan bahawa perpustakaan/corak adalah terkini.
  • [ ] Saya menandakan kod untuk pengauditan dan ujian; Saya tidak mendapatnya tanpa pengawasan di mainnet.