Satuan 2 / 11

Dukungan Penulisan Kontrak Cerdas: Draf Soliditas/Vyper dan Pembuatan Kode Aman

Keuntungan:

  • Kemampuan untuk menggunakan kecerdasan buatan untuk menghasilkan kerangka kerja, menguji dan meninjau draf berdasarkan perpustakaan yang telah terbukti (misalnya OpenZeppelin) dan memahami bahwa manusia menjamin keamanan produksi
  • Kemampuan untuk memverifikasi versi kode, pola dan kontrol akses yang dihasilkan oleh kecerdasan buatan melalui kompilasi, pengujian, dan testnet
  • Mampu membedakan bahwa kompilasi tidak berarti aman dan bahwa testnet serta audit sangat penting.

Menulis kontrak pintar berbeda dari perangkat lunak biasa: kode yang Anda tulis bersifat publik, tidak dapat diubah, dan merupakan program yang secara langsung memindahkan uang. Di unit ini, Anda akan mempelajari cara menggunakan AI sebagai asisten pengembangan kontrak pintar; Kita akan belajar dari draft produksi hingga penulisan tes, dari penarikan kembali pola hingga optimalisasi gas (biaya transaksi). Namun mari kita perjelas dari awal: AI menghasilkan cetak biru; Manusia memastikan kode aman yang masuk ke produksi.

Hal pertama: bahasa dan lingkungan

Bahasa kontrak pintar yang paling umum adalah Solidity (bahasa Ethereum dan EVM — Mesin Virtual Ethereum, mesin virtual tempat kontrak dijalankan — rantai yang kompatibel). Alternatifnya adalah Vyper (bahasa mirip Python yang bertujuan agar lebih dibatasi dan mudah dibaca). Kode Anda menggunakan bahan bakar (biaya setiap transaksi ke blockchain); Kode yang tidak efisien itu mahal. Menjaga istilah-istilah ini tetap jelas dalam konteks yang Anda berikan kepada AI adalah kunci untuk mendapatkan hasil yang akurat.

Keunggulan AI bukanlah pada "menulis dari awal" namun pada pembuatan kerangka kerja + cetakan yang baik: awal yang memenuhi standar, cetak biru untuk menambah keahlian Anda.

Lapisan penggunaan AI dalam pengkodean

1. Menghasilkan kerangka. AI dengan cepat menambang kerangka token standar (ERC-20) atau NFT (ERC-721 — standar aset digital unik). Namun pastikan untuk membuat AI menggunakan perpustakaan yang telah terbukti: misalnya, OpenZeppelin (perpustakaan kontrak standar yang tepercaya dan teraudit oleh komunitas). Aturannya adalah menggunakan blok yang diuji daripada menulis keamanan dari awal.

2. Deskripsi dan tinjauan fungsi. Menjelaskan fungsi yang ada ke AI memungkinkan Anda menemukan kesalahan logika sejak dini.

3. Uji generasi. AI pandai menghasilkan kasus uji untuk kasus edge: input nol, jumlah sangat besar, penelepon tidak sah, panggilan berulang. Ini mengingatkan salah satu skenario yang dilewati seseorang.

4. Gas dan keterbacaan. AI menandai pola-pola mahal seperti penulisan penyimpanan yang tidak perlu dan menyarankan alternatif.

Petunjuk: Instruksikan AI untuk "Membangun kontrak OpenZeppelin yang telah diaudit, menulis ulang keamanan dari awal." Jauh lebih berisiko bagi AI untuk menulis kode keamanan asli dibandingkan menggunakan perpustakaan yang telah diuji.

Perintah lemah / Perintah kuat

Perintah yang lemah:

Tuliskan saya kontrak token.

Prompt ini berbahaya: tidak jelas standar mana, rantai mana, perpustakaan mana, persyaratan keamanan apa. AI menghasilkan kode acak, mungkin ketinggalan jaman atau tidak aman.

Perintah yang kuat:

Peran Anda: pengembang senior Soliditas. Hasilkan draf token ERC-20 untuk rantai yang kompatibel dengan EVM. Aturan:- Berdasarkan ERC20 OpenZeppelin yang telah diaudit dan kontrak yang Dapat Dimiliki.- Tulis baris versi Soliditas dan lisensi (SPDX) secara eksplisit.- Hanya pemilik yang memiliki izin untuk mencetak; tambahkan batasan terhadap penekanan yang tak terbatas. - Tambahkan komentar NatSpec ke setiap fungsi. - Tulis keamanan dari awal; Gunakan blok standar. - Tambahkan peringatan di akhir: "Ini adalah draf; diperlukan audit dan pengujian". Tandai area yang Anda tidak yakin dengan // TODO.

Perbedaan: perintah kuat memberikan peran, standar, perpustakaan, batasan keamanan, dokumentasi, dan ekspektasi validasi yang jelas.

Empat templat yang dapat disalin

1) Kerangka berbasis standar:

Peran Anda: Pengembang soliditas. Hasilkan kerangka kerja kontrak [ERC-20 / ERC-721 / staking] berdasarkan perpustakaan OpenZeppelin yang diaudit. Tulis lisensi SPDX dan versi pragma. Tambahkan kontrol akses (siapa yang dapat menelepon) ke setiap fungsi eksternal. Menemukan kembali keamanan; Gunakan blok standar. Ini adalah draf.

2) Tinjauan fungsi:

Periksa fungsi berikut seperti pengembang senior: apa fungsinya, status apa yang diubahnya, siapa yang dapat memanggilnya? Tandai kemungkinan kesalahan logika dan risiko keamanan sebagai HIPOTESIS, yang menghubungkan masing-masing ke satu baris dalam kode. Jangan langsung mengatakan "aman"; cukup tuliskan poin-poin perhatiannya.

3) Draf skenario pengujian:

Usulkan kasus uji untuk kontrak ini (bisa berupa draft untuk Foundry/Hardhat). Secara khusus mencakup kasus-kasus limit: input nol, jumlah sangat besar, panggilan tidak sah, panggilan masuk kembali, dana tidak mencukupi. Tulis APA yang dikonfirmasi oleh setiap tes.

4) Tinjauan gas dan keterbacaan:

Dalam kontrak ini, tandai pola yang dapat mengurangi biaya bahan bakar: penulisan penyimpanan yang tidak perlu, panggilan eksternal dalam loop, penghitungan berulang. Jelaskan perbedaan sebelum/sesudah pada setiap sugesti. Merekomendasikan optimasi yang melanggar keamanan; Jika kurang jelas, ucapkan “tanyakan pada auditor”.

Tiga kotak mini (dalam jumlah)

Kasus 1 — Kerangka disimpan 4 jam. Satu tim menyusun kerangka kontrak vesting berbasis perpustakaan yang telah diaudit dengan AI dalam waktu 30 menit; Butuh ~4 jam secara manual. Tim mencurahkan waktunya untuk keamanan dan pengujian. Keuntungannya bukan diperoleh dari pengalihan keamanan, namun dari percepatan kerangka kerja yang membosankan.

Kasus 2 - Versi jebakan yang ketinggalan jaman. AI menghasilkan pola yang mengirimkan Ether mentah melalui transfer, yang tidak lagi direkomendasikan karena data pelatihan sudah usang. Pengembang memperhatikan hal ini dan mengubahnya ke pola berbasis panggilan saat ini dan dilindungi masuk kembali. Pelajaran: Pustaka/pola AI selalu dipastikan mutakhir; AI tidak mengetahui batas waktu pelatihan.

Kasus 3 — Draf pengujian memunculkan bug tersembunyi. Tes "penelepon tidak sah" yang dihasilkan AI mengungkapkan bahwa pengembang telah melupakan kontrol akses dalam suatu fungsi. onlyOwner kehilangan 1 baris, tertangkap dalam 5 menit di testnet; Mungkin ada kehilangan dana di mainnet. Pelajaran: AI menutupi titik buta manusia dalam pengujian.

Mengingat pola keamanan dengan AI

AI pandai mengingatkan Anda tentang pola kerentanan yang diketahui seperti daftar periksa. Pola yang paling umum:

  • Reentrancy: Melakukan panggilan eksternal tanpa memperbarui status. Solusi: perintah cek-efek-interaksi, penjaga masuk kembali.
  • Kurangnya kontrol akses: Siapa pun dapat memanggil fungsi penting.
  • Overflow/underfall bilangan bulat: Soliditas Modern menangkap sebagian besar dari mereka, tetapi masih merupakan risiko dalam kode tingkat rendah.
  • Validasi input tidak memadai: Alamat nol, kontrol kuantitas nol.
  • Ketergantungan Oracle: Kepercayaan buta terhadap data eksternal (seperti harga).
Perhatian: AI dapat mengingat daftar ini, namun tidak dapat menjamin apakah suatu item dalam daftar ada dalam kode spesifik Anda. Daftar periksa ini adalah permulaan; Ini bukan pengganti kendali kontainer.

Memperbaiki konteks dengan benar: Rahasia kode yang baik dari AI

Kualitas kode yang dihasilkan AI bergantung langsung pada kualitas konteks yang Anda berikan. Di Web3, hal ini sangat penting karena satu detail kecil (rantai mana, versi Soliditas mana, standar token mana) mengubah keseluruhan output. Konteks yang baik meliputi:

  • Rantai target dan lingkungan: Mainnet Ethereum atau Layer 2 (sidechain lebih murah yang berjalan di atas mainchain)? Biaya bahan bakar dan beberapa fitur bervariasi menurut rantai.
  • Versi dan pustaka: Versi Soliditas yang mana, versi OpenZeppelin yang mana? Jika tidak ada versi yang ditentukan, AI mungkin menghasilkan pola yang ketinggalan jaman dan tidak digunakan lagi.
  • Persyaratan keamanan: Apakah ada batasannya, apakah bisa dijeda, apakah bisa ditingkatkan? Ini harus dikatakan sejak awal.
  • Batasan: Batasan yang jelas seperti "jangan gunakan perakitan", "hindari panggilan eksternal", "optimalkan bahan bakar tetapi pertahankan keterbacaan".

Teknik ampuh lainnya adalah dengan menanyakan rencana kepada AI terlebih dahulu, lalu kode: "Pertama, buat daftar fungsi kontrak ini dan apa yang akan dilakukan masing-masing; tulis kodenya setelah saya menyetujuinya." Ini menangkap AI yang bergerak ke arah yang salah lebih awal dan memungkinkan Anda mempertahankan keputusan arsitektural.

Petunjuk: Tanyakan pada AI “mengapa Anda menulis kode ini seperti ini?” bertanya. Menjelaskan alasannya akan mempercepat pembelajaran Anda dan memunculkan kesalahan logis apa pun (misalnya asumsi keamanan yang salah). Jangan percaya hasil AI yang tidak bisa mempertahankan kodenya sendiri.

Kesalahan umum

  • Menempatkan keamanan di AI dari awal. Gunakan perpustakaan yang teruji.
  • Tidak mengkonfirmasi versi/pola yang dihasilkan oleh AI. Data pelatihan mungkin sudah lama.
  • Melewati testnet. Setiap draf harus dijalankan di jaringan pengujian sebelum ditayangkan.
  • Tidak menambahkan NatSpec/dokumentasi. Inspeksi dan pemeliharaan menjadi sulit.
  • Kesalahpahaman "Sudah dikompilasi, jadi aman". Dikompilasi tidak berarti aman.
  • Lupa kontrol akses. Ini adalah salah satu kesalahan paling umum dan mahal.

Singkatnya

  • Dalam penulisan kontrak pintar, AI menghasilkan kerangka kerja, pengujian, dan draf tinjauan; Manusia menjamin keamanan produksi.
  • Bangun keamanan bukan dari awal tetapi berdasarkan pustaka yang telah terbukti (misalnya OpenZeppelin).
  • Kekinian versi dan pola yang dihasilkan oleh YZ selalu terkonfirmasi.
  • Rintisan uji sangat berharga dalam menangkap titik buta manusia (batas kasus, kontrol akses).
  • Dikompilasi tidak berarti aman; testnet dan audit adalah suatu keharusan.

Tugas aplikasi

Untuk token ERC-20 sederhana, buat draf menggunakan perintah "kerangka berbasis standar" di atas. Kemudian: (1) periksa apakah ia menggunakan pustaka yang dicentang, (2) periksa kontrol akses, (3) buat pengujian dengan prompt "draf kasus uji" dan jalankan setidaknya satu pengujian pemanggil jahat. Temukan dan catat setidaknya satu titik keamanan yang terlewatkan oleh AI.

daftar periksa

  • [ ] Saya telah dengan jelas menyatakan standar dan rantai di prompt.
  • [ ] Saya ingin produksi berbasis perpustakaan yang terbukti.
  • [ ] Lisensi SPDX dan versi pragma tersedia.
  • [ ] Ada kontrol akses di setiap fungsi penting.
  • [] Saya membuat dan menjalankan tes untuk kasus batas.
  • [ ] Saya mengonfirmasi bahwa perpustakaan/pola sudah diperbarui.
  • [ ] Saya menandai kode untuk audit dan pengujian; Saya tidak mendapatkannya tanpa pengawasan di mainnet.