Kontrak pintar adalah potongan kode yang dapat diprogram yang dieksekusi hanya ketika serangkaian kondisi terpenuhi. Mereka sinonim dengan kontrak dunia nyata yang mengikat secara hukum; hanya dalam hal ini, kode tersebut adalah hukumnya. Karena kontrak pintar berada di blockchain, mereka tidak dapat diubah - mereka tidak dapat dimanipulasi. Itulah faktor ketidakberubahannya yang menjadikan kontrak pintar istimewa, antara lain.
Smart Contract dimaksudkan untuk mengotomatiskan transaksi khusus blockchain. Karena mereka adalah kontrak khusus kondisi, mereka tidak memerlukan perantara. Apa yang membuat kontrak pintar berguna adalah kompatibilitasnya di berbagai kasus penggunaan, termasuk layanan keuangan, manajemen rantai pasokan, dan banyak lagi. Dan tidak seperti potongan kode tradisional yang diprogram pada klip, kontrak pintar memerlukan strategi yang sangat aman dan intensif waktu.
Bagaimana kontrak pintar sejajar dengan teknologi blockchain: BeInCrypto
Kata kunci “web3” menunjukkan kebiasaan pemrograman web yang longgar dan kurang aman. Saat kripto atau smart contract diprogram seperti halaman web, mereka akan terancam. Blockchain yang sukses secara berkelanjutan dan aplikasinya didasarkan pada metode pemrograman yang jauh lebih aman, hati-hati, dan lambat.
Nick Szabo, kriptografer dan ilmuwan komputer: Twitter
Kontrak pintar dapat bekerja dengan token khusus blockchain, seperti ERC-20 untuk blockchain Ethereum, mendorong upaya dan memindahkan transaksi. Karena melibatkan kode, kondisi, dan biaya, Anda harus berhati-hati dalam membaca, menulis, dan mengauditnya.
Signifikansi sejati dari kontrak pintar berkaitan dengan sifat dan posisinya. Untuk skenario tertentu — katakanlah seseorang A mentransfer dana ke orang B saat B menyelesaikan layanan — salinan kontrak pintar disimpan dan dieksekusi oleh node blockchain. Kontrak pintar disimpan sebagai kode kontrak dalam rantai. Validasi multi-path ini adalah ciri yang berpusat pada blockchain dan menjaga keamanan hal-hal.
Selain itu, ada kontrak pintar berurutan atau sinkronkontrak pintar asinkrondi mana tugas-tugas dieksekusi secara paralel. Oleh karena itu, tipe dan tujuan dari sebuah smart contract menentukan bagaimana cara menulisnya, membacanya, atau bahkan diaudit.
Kontrak tradisional, sertifikat properti, wasiat, dll. adalah hukum privat, "disusun oleh pihak swasta daripada politisi atau birokrat pemerintah." Smart contract adalah bentuk baru pembuatan aturan terdesentralisasi tersebut.https://t.co/EU2Y28FznK
— Nick Szabo ( @NickSzabo4) 15 Maret 2018
Mari kita pertimbangkan kolam likuiditas yang diatur oleh kontrak pintar standar.
Bayangkan bahwa kolam token dapat digunakan untuk perdagangan, dan setiap kali ada perdagangan yang berhasil terjadi, 0,3% dari total nilai perdagangan dikirim ke penyedia likuiditas yang membuat perdagangan tersebut memungkinkan atau menambah likuiditas untuk aset yang dapat diperdagangkan tersebut. Semua kondisi yang menyoroti skenario perdagangan, biaya perdagangan, dan kondisi ketidakpatuhan dan kegagalan perdagangan dikodekan sebagai sebuahSmart Contractyang disimpan dalam rantai sebagai kode kontrak.
Kita tidak dapat terjun dalam membaca, menulis, dan mengaudit kontrak jika kita tidak sadar akan karakteristiknya. Berikut adalah ciri khas standar kontrak pintar yang perlu diketahui:
Beberapa ciri khas dari kontrak pintar standar: BeInCrypto
Kontrak pintar hanyalah potongan kode. Anda dapat menulis kontrak pintar untuk menjalankan perintah dan skenario berdasarkan kondisi-kondisi tertentu. Itulah mengapa pengembang kontrak pintar dan programmer saat ini banyak diminati, karena sebagian besar dariDeFi Ruang sudah bergantung pada kontrak pintar untuk memproses contoh kompleks seperti menangani biaya perdagangan di seluruh kumpulan likuiditas, memelihara APYrasio, dan lainnya.
Kontrak pintar yang berada di blockchain menghilangkan intervensi manusia. Ini membuat mereka sepenuhnya tidak dapat dipercaya. Misalnya, jika sebuahDeFi Protokol, diatur oleh kontrak pintar, setuju untuk melikuidasi aset Anda setelah nilainya berada di bawah ambang batas, tidak ada intervensi manusia yang dapat atau harus menghentikannya. Kode ini menangani pembayaran, kinerja, manajemen, dan penegakan aturan, membuat seluruh ruang benar-benar tidak dapat dipercaya.
Seperti yang disebutkan sebelumnya, kontrak pintar dilengkapi dengan set instruksi yang dapat dieksekusi sendiri. Dalam hal pemrograman, hal ini berarti memiliki iterasi dan loop yang dibangun dalam boilerplate. Hal ini memastikan bahwa tugas-tugas seperti pembayaran, penarikan, deposit, menghukum validator melalui pemangkasan, dan beberapa tugas lainnya ditangani secara otomatis.
Dan akhirnya, karena kontrak pintar diamankan menggunakan kriptografi, meretasnya sangat sulit. Tanpa kerentanan bawaan, melewati kontrak pintar akan berarti mencoba meretasnya di depan umum, di hadapan seluruh blockchain.
Transaksi yang diproses melalui kontrak pintar dapat diverifikasi sendiri. Ini berarti bahwa eksekusi sudah cukup sebagai bukti bahwa transaksi terjadi pada awalnya, karena tidak ada elemen manusia yang terlibat. Mekanisme yang dapat diverifikasi sendiri memberikan keunggulan bagi kontrak pintar dibandingkan dengan kontrak tradisional yang mengatur setup perbankan warisan.
Jadi, saat Anda berencana membaca smart contract selanjutnya, pastikan bahwa template atau dokumentasinya memiliki semua karakteristik yang disebutkan.
Sebuah versi yang disederhanakan dari kontrak pintar: Reddit
Berikut adalah kontrak pintar sederhana yang mewakili rekening Escrow. Pengguna menyetorkan dana mereka di escrow, yang kemudian memindahkan dana yang sama ke penerima setelah jangka waktu tertentu.
/ SPDX-License-Identifier: MITpragma solidity ^0.8.0;// Basic Smart Contract Boilerplatecontract SimpleTrustlessEscrow {// State variablesaddress public depositor; // Account depositing etheraddress payable public beneficiary; // Account receiving etheruint256 public releaseTime; // Timestamp to release ether// Events for verifying contract activityevent Deposited(address indexed _from, uint256 _value); event Released(alamat diindeks _to, uint256 _value);// Konstruktor kontrak menginisialisasi smart contractconstructor(alamat hutang _beneficiary, uint256 _releaseTime) { require(_releaseTime > block.timestamp, "Waktu rilis harus di masa depan"); Aman dan Tidak Dapat Dipercaya: Kontrak mengikat deposan dan deposan penerima = msg.sender; penerima = _beneficiary; releaseTime = _releaseTime;}Fungsi deposit – eksekusi otonom (fungsi fallback)receive() external payable { emit Deposited(msg.sender, msg.value);}Lepaskan eter ke beneficiaryfunction release() public { // Programmable: Hanya dapat dieksekusi setelah releaseTime require(block.timestamp >= releaseTime, "Too early to release"); Otonom: Secara otomatis mengeksekusi berdasarkan kondisi uint256 amount = address(this).balance; penerima.transfer(jumlah); memancarkan Released(penerima, jumlah);}}
Sementara kita akan mulai mendekripsi dan membaca smart contract ini secara detail, mari kita pertama-tama memeriksa apakah hal yang sama sesuai dengan karakteristik kontrak yang disebutkan.
Perhatikan kontrak dengan cermat untuk bagian kode ini:
require(block.timestamp >= releaseTime, "Terlalu dini untuk dirilis");
uint256 jumlah = alamat(this).keseimbangan;
penerima.transfer(jumlah);
Dana akan dilepaskan hanya ketika kondisi releaseTime tertentu terpenuhi, membuat kontrak yang dapat diprogram ini.
Berikut adalah cuplikan kode cepat dari atas:
depositor = msg.sender;
penerima = _penerima;
releaseTime = _releaseTime;
Dalam kontrak, semua orang terikat oleh kode mulai dari deposito hingga orang yang menerima dana. Tidak ada yang perlu berinteraksi dengan atau mempercayai yang lain karena fungsi transfer dana terikat oleh releaseTime — parameter berbasis kode.
Berikut adalah bagian “pelepasan dana” dari kode:
function rilis() publik {membutuhkan(waktu blok >= releaseTime, “Terlalu dini untuk rilis”);uint256 jumlah = alamat ini.balance;penerima.transfer(jumlah);menerbitkan Dirilis(penerima, jumlah);}
Seluruh proses ini bersifat otonom, karena dana hanya dilepaskan saat releaseTime memenuhi kriteria tertentu. Perhatikan bahwa kode ini tidak sebagian dapat diprogram, tetapi sepenuhnya otonom.
Elemen lain dari kode kontrak pintar, termasuk fungsi deposit, juga dapat dibuat sepenuhnya otonom tergantung pada fitur yang ingin Anda sertakan. Misalnya, Anda dapat memulai rencana setoran berulang setiap kali pengguna dompetmelintasi $100, dengan jumlah kelebihan yang pindah ke penerima.
Prihatin dengan elemen mana yang meminjamkan keamananke kontrak? Periksa bagian kode ini:
konstruktor(address yang dapat ditarik _penerima, uint256 _waktuPembebasan) {memerlukan(_waktuPembebasan > waktu blok, “Waktu pelepasan harus di masa depan”);penyetor = msg.sender;penerima = _penerima;waktuPembebasan = _waktuPembebasan;}
Perhatikan bagaimana ada prioritas yang ditetapkan dari fungsi releaseTime dalam kaitannya dengan stempel waktu. Tidak ada yang acak, dan kondisi harus dipenuhi.
Setiap transaksi yang terkait dengan kontrak pintar dicatat dalam rantai, berkat elemen aktivitas log terpisah.
event Deposited(alamat diindeks _from, uint256 _value);
event Released(address indexed _to, uint256 _value);
memancarkan Deposit(msg.sender, msg.value);
emit Released(beneficiary, amount);
Sekarang setelah kami mengidentifikasi elemen-elemen yang menentukan karakteristik kontrak pintar, berikut adalah elemen kontrak lainnya untuk membantu Anda memahami latihan dengan lebih baik.
Pragma kekokohan ^0.8.0; – Versi bahasa pemrograman Solidity yang diperlukan untuk menulis kontrak pintar ini.
// SPDX-License-Identifier: MIT – Termed Software Package Data Exchange, pengenal ini menyatakan lisensi dari rilis kode. Disarankan untuk menyertakannya agar orang tahu apakah itu sumber terbuka dan dapat diubah atau tidak.
Contract TimeLock { – Menetapkan nama ke smart contract, seperti label.
Alamat penerima publik; - Karena kontrak melibatkan pihak penyetor dan pihak penerima manfaat, ini adalah titik di mana alamat publik penyetor disebutkan. Variabel ini adalah Dompet Ethereumalamat dan dapat dilihat secara publik.
Alamat penerima publik yang dapat dibayar; - Ini adalah alamat publik penerima di mana escrow mentransfer dana. Ini juga dapat dibaca dan memberikan rasa transparansi terhadap smart contract berbasis blockchain.
Uint256 rilis publikWaktu; – Karena ini adalah kontrak terikat waktu, uint256 menetapkan variabel berbasis waktu ke kontrak. Ini akan menjadi jangka waktu yang dengannya pelepasan dana akan terjadi.
Dalam Solidity, uint (unsigned integer) adalah cara untuk menetapkan nilai berbasis integer. Akhiran 256 mewakili penyimpanan besar angka.
setelah 5 tahun menulis kontrak pintar saya baru menyadari hari ini bahwa logo solidity adalah logo ethereum yang terlipat 🤯pic.twitter.com/wlM369Eff9
— kaden.eth ( @0xKaden) 8 Juli 2023
Anda dapat mempertimbangkan untuk membaca Dokumentasi Solidity untuk berkenalan dengan sintaks, ekspresi, dan elemen kode lainnya.
konstruktor (alamat hutang _beneficiary, uint256 _releaseTime) { – "Konstruktor" adalah fungsi khusus satu kali yang dipanggil ketika kontrak pintar digunakan. Ini membuat kontrak bergerak. Perhatikan bagaimana pada titik ini, semua variabel alamat yang sebelumnya kita deklarasikan dipanggil dan diinisialisasi.
Receive() external payable { – Ini adalah fungsi khusus yang disebut ketika dana pindah ke alamat kontrak dari luar. Eksternal menyarankan dari luar, dan "Payable" mendefinisikan sifat bergerak, yaitu, untuk menerima token ERC-20.
Fungsi rilis() publik { - Ini adalah fungsi publik yang menyatakan perpindahan token ERC-20 dari alamat kontrak ke penerima. Fungsi ini bergantung pada releaseTime.
Semua elemen ini adalah bagian dari kontrak Escrow hipotetis yang kita bahas. Pastikan Anda membaca seluruh dokumentasi Solidity untuk memahami bahasa tersebut dengan lebih baik.
Ketahui elemen sebelum Anda berencana menulis kontrak pintar: BeInCrypto
Saat ini, Anda seharusnya sudah memiliki keunggulan dalam membaca dan memahami smart contract yang sudah ditulis. Dan banyak smart contract seperti yang kita diskusikan menjadi backend dari aplikasi terdesentralisasi — sebuah rantai blokversi dari aplikasi seluler standar.
Setiap karakteristik dari smart contract, termasuk keamanan kontrak, eksekusi otonom dan dapat diprogram, ketidakpercayaan transaksi, dan lainnya, dengan mudah diimplementasikan saat mengembangkan aplikasi terdesentralisasi. Jadi, ketika Anda menemui DApp, catatlah bahwa itu adalah backend yang didukung oleh smart contract yang dihosting di blockchain — membantu Anda memulai berbagai tugas tanpa intervensi manusia. Smart contract membentuk logika DApps.
Kami tahu bahwa Ethereum memungkinkan Anda mengembangkan kontrak pintar, seperti solusi perangkat lunak besar. Namun, itu bukan satu-satunya protokol blockchain di sekitar kita. Jika Anda ingin menyelami dunia pengembangan kontrak pintar, Anda mungkin ingin melihat blockchain lainnya. Blockchain yang berbeda memiliki istilah yang berbeda ketika harus menyusun kontrak.
Tapi pertama-tama, mari kita bahas Ethereum— platform yang paling banyak digunakan oleh para pengembang smart contract.
Kontrak pintar di Ethereum ditulis dalam bahasa pemrograman Solidity. Dan antarmuka token untuk platform pengembangan kontrak pintar ini adalah ERC-20.
Anda dapat kembali ke kontrak pintar berbasis Escrow yang kita bahas sebelumnya untuk melihat bagaimana kontrak pintar berbasis Etheruem standar ditulis.
Bahkan meluncurkan token ERC-20 di blockchain Ethereum adalah fitur yang membutuhkan kontrak pintar yang intensif, sesuatu yang akan kita bahas secara mendalam saat menulis kontrak pintar.
Inilah yang terlihat seperti struktur kode dasar, asalkan kami berencana untuk meluncurkan BIC cryptocurrency baru.
Anggaplah ini sebagai skenario hipotetis. Tidak benar-benar meluncurkan sebuah cryptocurrency BIC.
pragma soliditas ^0.8.0;impor "@openzeppelin/contracts/token/ERC20/ERC20.sol";kontrak BICToken adalah ERC20 { konstruktor(uint256 pasokanAwal) ERC20("Token BIC", "BIC") { _mint(msg.sender, pasokanAwal); }}
Kita akan membahas setiap elemen dari kode ini nanti saat menulis kontrak pintar kita.
Seperti Ethereum, Anda bahkan dapat membuat kontrak pintar di platform seperti Solana, menggunakan Rust dan Cardano, menggunakan Plutus, subset dari Haskell — bahasa pemrograman fungsional.
"Apakah Cordona bahkan memiliki kontrak pintar?"
Candaan untukmu, kawan.#CardanoADA pic.twitter.com/j8SXCu72Sd
— Willybot 🇦🇺 ( @wilbot28) 9 Juli 2023
Berikut adalah struktur kode dalam Rust (iniSolana) terlihat seperti:
Catatan: Ini adalah kontrak sederhana di mana sebuah penghitung akan diinkrementalkan.
gunakan anchor_lang::prelude::*;declare_id!(“Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS”);#[program] pub mod hello_world {use super::*;pub fn initialize(ctx: Context<Initialize>) -> ProgramResult { let greeting_account = &mut ctx.accounts.greeting_account; greeting_account.counter = 0; Ok(())}pub fn increment(ctx: Context<Increment>) -> ProgramResult { let greeting_account = &mut ctx.accounts.greeting_account; greeting_account.counter += 1; Ok(())}}
Tahukah Anda? Sementara Rust adalah bahasa pemrograman untuk membuat kontrak pintar berbasis Solana, Jangkar adalah kerangka kerja pengembangan kontrak pintar yang digunakan. Untuk membuat kontrak pintar menggunakan Rust, pengembang perlu menarik modul dari kerangka kerja Anchor — sesuatu yang baris pertama dari kode sampel kami (gunakan anchor_lang::*;) stands for.
Dokumentasi Solanaakan membantu Anda memahami bahasa smart contract khusus Rust.
Demikian pula, Cardano mengikuti Plutus sebagai pilihan bahasa, diikuti oleh bahasa Ink!Polkadot, TEAL untuk Algorand, C# untuk NEO, dan lainnya. Disarankan untuk mempelajari dokumentasi secara detail sebelum melanjutkan dengan penulisan smart contract yang kompatibel dengan rantai.
Kemampuan menulis smart contract sangat diakui, namun bahkan kemampuan untuk membaca juga memiliki manfaatnya sendiri:
Sekarang bahwa membaca smart contracts sudah selesai, mari fokus pada menulis smart contracts. Sebelum Anda menyelami lebih dalam, penting untuk mengulangi bahwa berbagai blockchains mungkin memiliki standar dan bahasa yang berbeda terkait pengembangan smart contract. Penting untuk fokus pada standar yang ditentukan oleh setiap blockchain, Untuk memulai menulis dan implementasi contract.
Untuk sebagian besar diskusi kita, kita akan fokus pada Ethereum sebagai rantai dan Solidity sebagai bahasa.
Memprogram kontrak pintar adalah bagian paling penting dari siklus pengembangan. Dan untuk terlibat dalam pengembangan kontrak pintar di Ethereum atau blockchain lainnya, Anda harus memiliki beberapa pengalaman dengan bahasa pemrograman non-blockchain seperti Javascript.
Berbagai blockchain dan bahasa untuk menulis smart contracts: BeInCrypto
Kemampuan untuk memprogram sebuah smart contract memungkinkan Anda untuk mengimplementasikan logika, menangani elemen keamanan yang sama, mengoptimalkan kode untuk biaya gas, menyesuaikan yang sama, dan bahkan membuatnya interoperabel jika diperlukan.
Siapa pun yang berencana menulis kontrak pintar di Ethereum perlu memahami apa itu Mesin Virtual Ethereum (EVM) dan bagaimana cara kerjanya dengan kontrak pintar. Untuk pemula, EVM adalah komponen Ethereum yang memberikan program lingkungan terisolasi dan terkendali untuk bekerja. Anggap saja ini komputer global yang menyimpan setiap potongan kode kontrak di Ethereum. Setiap nodepada jaringan Ethereum berjalan EVM.
Jika Anda bercita-cita menjadi pengembang Smart Contract, berikut yang perlu Anda ketahui tentang kontrak pintar dan EVM.
Setelah Anda menulis program dalam Solidity, yang merupakan bahasa tingkat tinggi, Anda perlu mengompilasinya menjadi bytecode — format rendah yang dapat dimengerti mesin. Bytecode ini masuk ke blockchain Ethereum dan tinggal di sana. Setiap orang yang berinteraksi dengan smart contract perlu mengirim transaksi ke alamat kontrak.
Setiap node dengan EVM yang diinstal dapat melihat transaksi ini, dan begitu validator menyetujuinya, kode kontrak pintar dieksekusi. Karena setiap node memiliki keterlihatan transaksi, tidak ada yang dapat dimanipulasi, dan kode dieksekusi sesuai dengan yang ditulis. Dan begitu kode dieksekusi, status blockchain berubah, membuat proses menjadi end-to-end dan benar-benar transparan.
Menulis kontrak pintar memerlukan pengetahuan teknis. Tapi itu belum cukup. Anda juga perlu memahami secara menyeluruh bagaimana teknologi blockchain bekerja, apa kebutuhan spesifik bahasa yang relevan dengan blockchain yang Anda targetkan, interoperabilitas, dan lain-lain. Selain itu, Anda juga harus tahu banyak tentang kerentanan kontrak pintar — hal-hal yang harus dihindari saat menulis kode. Dan akhirnya, pengetahuan pengujian kontrak dan penyebaran kontrak juga merupakan hal yang wajib.
Semua itu bisa menjadi luar biasa. Jadi berikut ini adalah lembar contekan cepat untuk memulai:
Berikut adalah rangkuman cepat dengan beberapa tips untuk menulis kontrak pintar yang lebih baik:
🥧 FREI-PI
‼️ Mengapa pengembang smart contract PERLU mengetahui ini!
Fungsi:
- Persyaratan
Efek
Interaksi
Protokol
- Invariant
Ini adalah pola yang seharusnya Anda semua pikirkan saat membangun kontrak pintar.
Ini alasannya 👇
— Patrick Collins ( @PatrickAlphaC) 6 Juli 2023
Saatnya memahami aspek teknis pengembangan kontrak pintar. Meskipun jaringan seperti Solana dan Cardano memungkinkan Anda untuk mengembangkan kontrak pintar, Ethereum tetap menjadi platform pengembangan kontrak pintar paling populer.
Tahukah Anda? Hanya di tahun 2022, lebih dari 100.000 aplikasi terdesentralisasi berhasil masuk ke jaringan Ethereum.
Ethereum memiliki komunitas pengembang yang besar. Apapun yang Anda kembangkan akan segera mendapatkan perhatian. Selain itu, bahasa aslinya, Solidity, relatif mudah bagi individu yang menguasai Python atau JavaScript. Terakhir, perangkat lunak global Ethereum, EVM, membantu dalam eksekusi kontrak yang mulus.
Jika Anda berada di kelompok mayoritas dan lebih memilih untuk menggunakan Ethereum dan Solidity, berikut adalah daftar cepat hal-hal yang perlu Anda lacak sebelum memulai pengembangan kontrak pintar:
Sekarang kita sudah tahu bagaimana hal-hal terjadi di rantai, mari kita mulai menulis dan mendeploy smart contract pertama. Meskipun “Hello World” tetap menjadi langkah pertama, kita akan mulai dengan membuat smart contract untuk meluncurkan token BIC hipotetis dengan pasokan 100% terbuka sebanyak 1 juta.
Langkah pertama adalah menginstal versi terbaru Node.js dan NPM atau Node Package Manager. Ini menangani alat pengembangan dan lingkungan lokal untuk pengembangan. Selain itu, Node.js dan NPM memungkinkan Anda untuk mengatur front-end web untuk kontrak cerdas Anda.
Sekarang, Anda perlu mengatur IDE untuk menulis kode kontrak. Untuk itu, Anda dapat dengan cepat menginstal Visual Studio Code. Atau Anda bisa memotong kerumitan dan lompatke Alkimia — platform pengembangan blockchain. Dengan Alkimia, Anda dapat mendapatkan sejumlah ETH testnet. Ini akan menutupi biaya gas saat Anda mendeploy smart contract ke testnet Goerli atau bahkan testnet Sepolia.
Perhatikan bahwa Sepolia adalah testnet yang lebih muda dan oleh karena itu membutuhkan ruang disk yang lebih sedikit dalam implementasi node.
Untuk saat ini, kami akan tetap menggunakan testnet Goerli karena memiliki lebih banyak aplikasi yang sudah diimplementasikan.
Dengan testnet dan ETH palsu siap, mari kita beralih ke menulis kontrak pintar secara khusus. Berikut potongan kode untuk membuat token BIC dengan pasokan tetap 1 juta.
Catatan: Kami akan mendeploy smart contract kami secara lokal pada MacOS dan bukan pada testnet. Untuk penempatan smart contract di testnet dan mainnet, kami akan memiliki bagian terpisah, yang berada di luar cakupan diskusi ini.
Berikut potongan kode sederhana untuk token hipotetis:
pragma kekokohan ^0.8.0; impor "@openzeppelin/contracts/token/ERC20/ERC20.sol"; kontrak BICToken adalah ERC20 { konstruktor() ERC20("BIC Token", "BIC") { _mint(msg.sender, 1000000 * 10 ** desimal()); }}
Jika Anda mengetahui sintaks, Anda akan tahu apa arti setiap komponen kode. Adapun Openzepplinbagian itu adalah perpustakaan yang paling sering digunakan untuk mengimpor kontrak pintar ERC-20. Perpustakaan ini menawarkan standar operasi dasar untuk token ERC-20.
Fungsi mint membicarakan pasokan awal, yang dideploy ke alamat kontrak pintar atau msg.sender.
Untuk menyiapkan kode ini secara lokal dan mengujinya, kita akan memerlukan tiga komponen:
Jika Anda telah melalui proses rinci menulis kontrak pintar, sangat penting untuk mengetahui sedikit tentang eksekusi kontrak. Ini adalah proses di mana kode kontrak pintar dieksekusi pada rantai oleh node-node.
Keseragaman yang terkait dengan eksekusi kontraklah yang membuat smart contract transparan dan tidak dapat diubah. Mari kita sekarang memahami proses langkah-demi-langkah yang terkait dengan eksekusi kontrak:
Potongan kode yang telah kita tulis perlu dieksekusi di suatu tempat. Dalam kasus smart contracts, tempat eksekusi tersebut adalah blockchain. Node atau anggota yang berpartisipasi dalam rantai membantu mengeksekusi kontrak.
Node menerima tanggung jawab untuk menjalankan blok kode kontrak sebagai imbalan insentif terkait rantai. Setiap perintah atau tindakan yang terjadi dalam rantai dipimpin oleh smart contract.
Setiap kontrak pintar memiliki alamat tertentu. Untuk melaksanakan kontrak, transaksi dikirim ke alamat kontrak tersebut. Perhatikan bahwa setiap node menjalankan EVM, yang kemudian memiliki salinan kode kontrak pintar, sehingga lebih mudah untuk memeriksa keaslian transaksi.
Transaksi yang ditujukan kepada kontrak pintar dipilih oleh validator, yang kemudian menyertakannya ke dalam blok-blok tertentu.
Setelah transaksi disahkan dan diverifikasi dengan sukses, transaksi tersebut menjadi bagian dari blockchain. Fungsi kontrak pintar yang terkait dengan transaksi kemudian dipanggil dan dieksekusi di semua node blockchain.
Setiap node yang menjalankan kontrak cerdas harus mencapai kesimpulan deterministik — output yang sama untuk setiap set input — menjadikan sifat kontrak sepenuhnya tidak dapat dipercaya dan transparan.
Catatan: Setiap kesalahan yang terkait dengan eksekusi kode atau masalah terkait biaya gas akan membatalkan transaksi. Ini berarti bahwa transaksi yang didasarkan pada kode kontrak pintar tertentu akan berhenti ada. Inilah yang terjadi dengan pinjaman kilatketika ketidakmampuan untuk mematuhi norma-norma tertentu membalikkan seluruh transaksi, tampaknya memberikan kesan bahwa dana bahkan tidak bergerak sama sekali.
Setiap perubahan status yang terkait dengan kontrak pintar dicatat dalam blockchain dan menjadi bagian yang tidak dapat diubah dari yang sama.
Sekarang bahwa Anda tahu cukup banyak tentang kontrak pintar, berikut beberapa poin untuk memulai pengembangan kontrak:
Setiap praktik yang disebutkan di atas membantu dalam optimisasi kode dan implementasi keamanan khusus. Namun, ada beberapa praktik khusus kontrak yang harus Anda ikuti dan implementasikan untuk merawat keberlanjutan kode. Hal ini bertujuan untuk menjaga kode kontrak ringan dan dapat digunakan sehingga setiap node yang menjalankan dan mengeksekusi hal yang sama tidak perlu mengalokasikan banyak daya komputasi untuk hal yang sama.
Meskipun mengikuti praktik terbaik saat menulis dan mengembangkan smart contracts, penting untuk fokus pada kerentanan keamanan kontrak saat mendorongnya ke mainnet.
Setiap smart contract yang memiliki keberadaan di mainnet perlu dievaluasi untuk kinerja kode, keamanan, dan karakteristik lainnya. Inilah tempat audit — proses pengujian kontrak yang ketat — muncul, memungkinkan Anda untuk mengungkap kerentanan dan kelemahan kontrak potensial.
Berikut adalah daftar periksa audit cepat untuk memulai:
Daftar Periksa Audit Kontrak Pintar yang Menakjubkan😈
Pastikan untuk memeriksanya dalam audit Anda berikutnya✅
Saya akan menghargai retweet, sebarkan pengetahuan🫡https://t.co/ILx0C67kf8
— cholakov (@cholakovv) 7 Juli 2023
Saat membaca dan menulis smart contracts saling terkait ketika mengembangkan potongan kode cerdas, audit memiliki tempat khusus dan melibatkan pemeriksaan logika pada awalnya. Ketika berbicara tentang eksekusi kode berbasis blockchain, segalanya bersifat abadi, dan hal apapun yang bersifat kritikal dapat memiliki konsekuensi yang tidak dapat diubah saat eksekusi kontrak. Inilah mengapa pemeriksaan menyeluruh terhadap kode kontrak dan aspek lainnya melalui audit diperlukan.
Mungkin ada sejumlah Kerentanan kontrakaudit smart contract yang detail dapat mengidentifikasi. Ini termasuk memeriksa serangan reentrancy, overflow atau underflow, masalah terkait kontrol akses, dan lainnya. Begitu sifat persis masalah ditentukan, pemeriksa bahkan dapat menyarankan praktik terbaik untuk memperbaikinya.
Masih ragu bagaimana pemeriksaan kontrak pintar dapat membantu? Nah, mari kita kembali ke yang terkenal ituDAO hack pada tahun 2016, yang mengeksploitasi masalah reentrancy dan menyebabkan kerugian hampir 3,6 juta ETH. Demikian pula, ada peretasan kontrak dompet Parity pada tahun 2017, yang menyebabkan hilangnya hampir 500.000 ETH. Masalah-masalah ini dapat dihindari dengan serangkaian audit yang tepat.
Bagan alur peretasan DAO: BeInCrypto
Ada banyak strategi untuk mengaudit smart contracts. Beberapa yang lebih populer termasuk:
Alat-alat ini bertindak sebagai set pertahanan pertama dan paling baik digunakan untuk menemukan kerentanan umum. Beberapa alat yang lebih populer termasuk Securify, Mythril, dan lainnya — mampu melakukan analisis statis dari kode, mendeteksi pola pelanggaran, dan membantu mendapatkan keunggulan keamanan yang spesifik.
Alat untuk mengaudit kontrak pintar: BeInCrypto
Di sinilah pemeriksa kode manual masuk ke dalam gambaran, memeriksa kode sumber dan mengidentifikasi kerentanan kompleks, jika ada. Tinjauan manual dapat membantu merawat logika bisnis, konteks, dan pola penggunaan.
Berikut adalah cara peninjauan kode manual membantu Anda menemukan ancaman:
Sebuah trivia kecil untuk auditor junior kami!
Ayo pergi dan retweet jika Anda menemukan bug!pic.twitter.com/i14YtweXcz
— CharlesPaladin (@PaladinCharles) 8 Juli 2023
Alat-alat seperti Snyk dan GuardRails membantu pemindaian kontrak otomatis - implementasi keamanan yang dipanggil setiap kali kode diperbarui. Bentuk audit ini memastikan bahwa perubahan baru yang dibuat pada kode aman dan non-invasif secara alami.
Ini adalah proses yang kompleks yang semata-mata bergantung pada pemeriksaan logika bisnis dari kode. Perlu diingat bahwa verifikasi formal sebenarnya tidak dimaksudkan untuk memverifikasi sintaksis tetapi hanya logika untuk melihat apakah kode dieksekusi sesuai keinginan.
Selain strategi yang disebutkan, pemeriksaan kontrak pintar juga dapat dimulai menggunakan tinjauan rekan, program hadiah bug bounty, dan cakupan uji melalui alat seperti Cakupan Soliditas untuk memaksimalkan efektivitas.
Cara sederhana untuk mengaudit kontrak pintar: BeInCrypto
Jika Anda baru dalam pemeriksaan smart contract, penting untuk dicatat bahwa ada dua cara menganalisis kode secara umum dan mengidentifikasi isu. Ini termasuk:
Jenis analisis kode ini membantu mengidentifikasi kerentanan keamanan dasar, kesalahan pemrograman, dan isu lain sesuai standar pemrograman yang diberikan dan konvensi. Ancaman seperti panggilan yang tidak dicek ke sumber eksternal, overflow integer, dan lainnya dapat ditekankan menggunakan analisis statis. Hal terbaik tentang analisis statis adalah kode tidak perlu dieksekusi untuk diperiksa.
Pendekatan ini terhadap pengujian audit menguji kesesuaian kode dengan EVM. Alih-alih hanya memeriksa kode, analisis dinamis melakukan pengecekan silang terhadap respons kontrak pintar terhadap berbagai masukan. Analisis dinamis dapat mengidentifikasi isu seperti konsumsi gas yang tidak konsisten dan bahkan logika kontrak yang salah. Lingkungan blockchain pribadi seperti Ganache dapat berfungsi sebagai platform analisis dinamis, memungkinkan pengembang untuk melakukan transaksi, menjalankan perintah, dan melakukan banyak hal lainnya dengan kontrak mereka.
Berikut ini adalah potongan smart contract yang berfungsi sebagai penyimpanan dana, dengan fungsi penarikan:
pragma kekokohan ^0.6.1;kontrak VulnerableContract { pemetaan(alamat => uint256) public saldo; fungsi deposit() public payable { saldo[msg.sender] += msg.value; } fungsi withdraw(uint256 _jumlah) public { memerlukan(saldo[msg.sender] >= _jumlah, "Saldo tidak mencukupi."); (bool sukses, ) = msg.sender.call{value: _jumlah}(""); memerlukan(sukses, "Transfer gagal."); saldo[msg.sender] -= _jumlah; }}
Jika Anda melihat kode dengan cermat, ada kerentanan kunci:
Pada kasus sebelumnya, fungsi “withdraw” dapat dipanggil lagi jika pengguna yang menerima dana juga merupakan smart contract, meskipun bersifat jahat. Oleh karena itu, sebelum fungsi terakhir atau pembaruan saldo terjadi, serangan reentrancy dapat dimulai untuk mentransfer dana tambahan. Auditor berpengalaman mengidentifikasi jenis kerentanan ini.
Berikut adalah kode yang diperbaiki untuk hal yang sama:
fungsi mengambil(uint256 _jumlah) publik { memerlukan(saldo[msg.sender] >= _jumlah, "Saldo tidak mencukupi."); saldo[msg.sender] -= _jumlah; (bool sukses, ) = msg.sender.call{nilai: _jumlah}("");
membutuhkan(berhasil, “Transfer gagal.”);}
Periksa bagaimana fungsi pembaruan saldo dipanggil terlebih dahulu dan kemudian langkah pertama ke pengguna. Perubahan urutan operasi inilah yang memperbaiki kontrak.
Dunia aplikasi terdesentralisasi dan kontrak pintar telah bergerak melampaui Ethereum. Meskipun sebagian besar aktivitas masih terjadi dalam ekosistem Ethereum, ada rantai lain seperti Cardano, Solana, dan lainnya yang mendukung kontrak pintar dan memerlukan standar audit yang berbeda.
Berbagai blockchain menggunakan bahasa pemrograman yang berbeda. Semantik, sintaksis, dan properti kode yang berbeda membuat smart contract responsif terhadap praktik penulisan dan audit yang berbeda. Misalnya, Ethereum menggunakan Solidity, sedangkan Polkadotmenggunakan Ink dan Rust — membuatnya responsif terhadap standar audit tertentu.
Sekarang jika Anda ingin bergerak melampaui Ethereum, ada beberapa alat audit khusus untuk Anda mulai. Misalnya, dengan Cardano, ada suite Marlowe untuk verifikasi dan audit formal. Ketika datang ke Solana, libfuzzer dan cargo-fuzz khusus karat dimaksudkan untuk audit dan pengujian kontrak. Auditor multi-rantai harus terbiasa dengan konsep-konsep ini untuk mencegah kerentanan kontrak.
Hanya untuk mengulangi, Anda dapat memisahkan pemeriksaan kontrak cerdas ke dalam tiga jenis: manual, otomatis, dan hibrida. Perhatikan bahwa orang lebih memilih strategi pemeriksaan hibrida untuk kontrak kompleks dengan logika bisnis yang dalam karena mereka yang paling komprehensif.
Organisasi dan individu dengan pengetahuan pengkodean minimal sering mengalihdayakan persyaratan penulisan dan audit mereka ke perusahaan terkenal. Ketika datang ke audit, memilih perusahaan yang tepat menjadi semakin penting meskipun alat kecerdasan buatansepertiChatGPTdapat membantu menulis kode kontrak pintar, memeriksa hal yang sama memerlukan wawasan manual.
Juga, berikut adalah faktor-faktor yang perlu diperhatikan saat mengalihkan tugas pemeriksaan:
Sebelum Anda memilih perusahaan outsourcing yang tepat, penting untuk memeriksa audit sebelumnya, mengevaluasi pengalaman, dan bahkan fokus pada anggota tim kunci.
Sebelum merekrut, perhatikan biaya dan layanan yang terkait dengan audit. Sangat penting untuk memahami terlebih dahulu sifat layanan yang ditawarkan — seperti identifikasi isu, penyelesaian isu, dan lain-lain. Anda juga harus memeriksa apakah re-audit juga disediakan setelah menerapkan baris pertama perbaikan. Biaya audit kontrak pintar dapat bervariasi tergantung pada layanan, dan oleh karena itu, penting untuk melacak setiap persyaratan dan penawaran sebelum melanjutkan.
Jika Anda ingin meninggalkan sebuah perusahaan dan memeriksa kontrak pintar sendiri, berikut adalah strategi dan praktik terbaik yang perlu diingat:
Kecerdasan buatan memang membuat lebih mudah menulis kontrak pintar. Namun, terlepas dari inovasi AI, kemampuan untuk mengaudit kontrak pintar dengan cara terbaik tetap memerlukan intervensi manusia. Oleh karena itu, jika Anda berencana membangun produk web3 berikutnya dengan menekankan kontrak pintar dan aplikasi terdesentralisasi, sangat penting untuk fokus secara religius pada sumber daya audit terbaik untuk kontrak pintar Anda. Dengan hack dan pelanggaran kriptocurrency muncul setiap hari dan peretas merencanakan strategi baru untuk menembus, mengaudit kontrak dengan sempurna tentu merupakan salah satu keterampilan modern yang lebih penting saat ini.
Mời người khác bỏ phiếu
Nội dung
Kontrak pintar adalah potongan kode yang dapat diprogram yang dieksekusi hanya ketika serangkaian kondisi terpenuhi. Mereka sinonim dengan kontrak dunia nyata yang mengikat secara hukum; hanya dalam hal ini, kode tersebut adalah hukumnya. Karena kontrak pintar berada di blockchain, mereka tidak dapat diubah - mereka tidak dapat dimanipulasi. Itulah faktor ketidakberubahannya yang menjadikan kontrak pintar istimewa, antara lain.
Smart Contract dimaksudkan untuk mengotomatiskan transaksi khusus blockchain. Karena mereka adalah kontrak khusus kondisi, mereka tidak memerlukan perantara. Apa yang membuat kontrak pintar berguna adalah kompatibilitasnya di berbagai kasus penggunaan, termasuk layanan keuangan, manajemen rantai pasokan, dan banyak lagi. Dan tidak seperti potongan kode tradisional yang diprogram pada klip, kontrak pintar memerlukan strategi yang sangat aman dan intensif waktu.
Bagaimana kontrak pintar sejajar dengan teknologi blockchain: BeInCrypto
Kata kunci “web3” menunjukkan kebiasaan pemrograman web yang longgar dan kurang aman. Saat kripto atau smart contract diprogram seperti halaman web, mereka akan terancam. Blockchain yang sukses secara berkelanjutan dan aplikasinya didasarkan pada metode pemrograman yang jauh lebih aman, hati-hati, dan lambat.
Nick Szabo, kriptografer dan ilmuwan komputer: Twitter
Kontrak pintar dapat bekerja dengan token khusus blockchain, seperti ERC-20 untuk blockchain Ethereum, mendorong upaya dan memindahkan transaksi. Karena melibatkan kode, kondisi, dan biaya, Anda harus berhati-hati dalam membaca, menulis, dan mengauditnya.
Signifikansi sejati dari kontrak pintar berkaitan dengan sifat dan posisinya. Untuk skenario tertentu — katakanlah seseorang A mentransfer dana ke orang B saat B menyelesaikan layanan — salinan kontrak pintar disimpan dan dieksekusi oleh node blockchain. Kontrak pintar disimpan sebagai kode kontrak dalam rantai. Validasi multi-path ini adalah ciri yang berpusat pada blockchain dan menjaga keamanan hal-hal.
Selain itu, ada kontrak pintar berurutan atau sinkronkontrak pintar asinkrondi mana tugas-tugas dieksekusi secara paralel. Oleh karena itu, tipe dan tujuan dari sebuah smart contract menentukan bagaimana cara menulisnya, membacanya, atau bahkan diaudit.
Kontrak tradisional, sertifikat properti, wasiat, dll. adalah hukum privat, "disusun oleh pihak swasta daripada politisi atau birokrat pemerintah." Smart contract adalah bentuk baru pembuatan aturan terdesentralisasi tersebut.https://t.co/EU2Y28FznK
— Nick Szabo ( @NickSzabo4) 15 Maret 2018
Mari kita pertimbangkan kolam likuiditas yang diatur oleh kontrak pintar standar.
Bayangkan bahwa kolam token dapat digunakan untuk perdagangan, dan setiap kali ada perdagangan yang berhasil terjadi, 0,3% dari total nilai perdagangan dikirim ke penyedia likuiditas yang membuat perdagangan tersebut memungkinkan atau menambah likuiditas untuk aset yang dapat diperdagangkan tersebut. Semua kondisi yang menyoroti skenario perdagangan, biaya perdagangan, dan kondisi ketidakpatuhan dan kegagalan perdagangan dikodekan sebagai sebuahSmart Contractyang disimpan dalam rantai sebagai kode kontrak.
Kita tidak dapat terjun dalam membaca, menulis, dan mengaudit kontrak jika kita tidak sadar akan karakteristiknya. Berikut adalah ciri khas standar kontrak pintar yang perlu diketahui:
Beberapa ciri khas dari kontrak pintar standar: BeInCrypto
Kontrak pintar hanyalah potongan kode. Anda dapat menulis kontrak pintar untuk menjalankan perintah dan skenario berdasarkan kondisi-kondisi tertentu. Itulah mengapa pengembang kontrak pintar dan programmer saat ini banyak diminati, karena sebagian besar dariDeFi Ruang sudah bergantung pada kontrak pintar untuk memproses contoh kompleks seperti menangani biaya perdagangan di seluruh kumpulan likuiditas, memelihara APYrasio, dan lainnya.
Kontrak pintar yang berada di blockchain menghilangkan intervensi manusia. Ini membuat mereka sepenuhnya tidak dapat dipercaya. Misalnya, jika sebuahDeFi Protokol, diatur oleh kontrak pintar, setuju untuk melikuidasi aset Anda setelah nilainya berada di bawah ambang batas, tidak ada intervensi manusia yang dapat atau harus menghentikannya. Kode ini menangani pembayaran, kinerja, manajemen, dan penegakan aturan, membuat seluruh ruang benar-benar tidak dapat dipercaya.
Seperti yang disebutkan sebelumnya, kontrak pintar dilengkapi dengan set instruksi yang dapat dieksekusi sendiri. Dalam hal pemrograman, hal ini berarti memiliki iterasi dan loop yang dibangun dalam boilerplate. Hal ini memastikan bahwa tugas-tugas seperti pembayaran, penarikan, deposit, menghukum validator melalui pemangkasan, dan beberapa tugas lainnya ditangani secara otomatis.
Dan akhirnya, karena kontrak pintar diamankan menggunakan kriptografi, meretasnya sangat sulit. Tanpa kerentanan bawaan, melewati kontrak pintar akan berarti mencoba meretasnya di depan umum, di hadapan seluruh blockchain.
Transaksi yang diproses melalui kontrak pintar dapat diverifikasi sendiri. Ini berarti bahwa eksekusi sudah cukup sebagai bukti bahwa transaksi terjadi pada awalnya, karena tidak ada elemen manusia yang terlibat. Mekanisme yang dapat diverifikasi sendiri memberikan keunggulan bagi kontrak pintar dibandingkan dengan kontrak tradisional yang mengatur setup perbankan warisan.
Jadi, saat Anda berencana membaca smart contract selanjutnya, pastikan bahwa template atau dokumentasinya memiliki semua karakteristik yang disebutkan.
Sebuah versi yang disederhanakan dari kontrak pintar: Reddit
Berikut adalah kontrak pintar sederhana yang mewakili rekening Escrow. Pengguna menyetorkan dana mereka di escrow, yang kemudian memindahkan dana yang sama ke penerima setelah jangka waktu tertentu.
/ SPDX-License-Identifier: MITpragma solidity ^0.8.0;// Basic Smart Contract Boilerplatecontract SimpleTrustlessEscrow {// State variablesaddress public depositor; // Account depositing etheraddress payable public beneficiary; // Account receiving etheruint256 public releaseTime; // Timestamp to release ether// Events for verifying contract activityevent Deposited(address indexed _from, uint256 _value); event Released(alamat diindeks _to, uint256 _value);// Konstruktor kontrak menginisialisasi smart contractconstructor(alamat hutang _beneficiary, uint256 _releaseTime) { require(_releaseTime > block.timestamp, "Waktu rilis harus di masa depan"); Aman dan Tidak Dapat Dipercaya: Kontrak mengikat deposan dan deposan penerima = msg.sender; penerima = _beneficiary; releaseTime = _releaseTime;}Fungsi deposit – eksekusi otonom (fungsi fallback)receive() external payable { emit Deposited(msg.sender, msg.value);}Lepaskan eter ke beneficiaryfunction release() public { // Programmable: Hanya dapat dieksekusi setelah releaseTime require(block.timestamp >= releaseTime, "Too early to release"); Otonom: Secara otomatis mengeksekusi berdasarkan kondisi uint256 amount = address(this).balance; penerima.transfer(jumlah); memancarkan Released(penerima, jumlah);}}
Sementara kita akan mulai mendekripsi dan membaca smart contract ini secara detail, mari kita pertama-tama memeriksa apakah hal yang sama sesuai dengan karakteristik kontrak yang disebutkan.
Perhatikan kontrak dengan cermat untuk bagian kode ini:
require(block.timestamp >= releaseTime, "Terlalu dini untuk dirilis");
uint256 jumlah = alamat(this).keseimbangan;
penerima.transfer(jumlah);
Dana akan dilepaskan hanya ketika kondisi releaseTime tertentu terpenuhi, membuat kontrak yang dapat diprogram ini.
Berikut adalah cuplikan kode cepat dari atas:
depositor = msg.sender;
penerima = _penerima;
releaseTime = _releaseTime;
Dalam kontrak, semua orang terikat oleh kode mulai dari deposito hingga orang yang menerima dana. Tidak ada yang perlu berinteraksi dengan atau mempercayai yang lain karena fungsi transfer dana terikat oleh releaseTime — parameter berbasis kode.
Berikut adalah bagian “pelepasan dana” dari kode:
function rilis() publik {membutuhkan(waktu blok >= releaseTime, “Terlalu dini untuk rilis”);uint256 jumlah = alamat ini.balance;penerima.transfer(jumlah);menerbitkan Dirilis(penerima, jumlah);}
Seluruh proses ini bersifat otonom, karena dana hanya dilepaskan saat releaseTime memenuhi kriteria tertentu. Perhatikan bahwa kode ini tidak sebagian dapat diprogram, tetapi sepenuhnya otonom.
Elemen lain dari kode kontrak pintar, termasuk fungsi deposit, juga dapat dibuat sepenuhnya otonom tergantung pada fitur yang ingin Anda sertakan. Misalnya, Anda dapat memulai rencana setoran berulang setiap kali pengguna dompetmelintasi $100, dengan jumlah kelebihan yang pindah ke penerima.
Prihatin dengan elemen mana yang meminjamkan keamananke kontrak? Periksa bagian kode ini:
konstruktor(address yang dapat ditarik _penerima, uint256 _waktuPembebasan) {memerlukan(_waktuPembebasan > waktu blok, “Waktu pelepasan harus di masa depan”);penyetor = msg.sender;penerima = _penerima;waktuPembebasan = _waktuPembebasan;}
Perhatikan bagaimana ada prioritas yang ditetapkan dari fungsi releaseTime dalam kaitannya dengan stempel waktu. Tidak ada yang acak, dan kondisi harus dipenuhi.
Setiap transaksi yang terkait dengan kontrak pintar dicatat dalam rantai, berkat elemen aktivitas log terpisah.
event Deposited(alamat diindeks _from, uint256 _value);
event Released(address indexed _to, uint256 _value);
memancarkan Deposit(msg.sender, msg.value);
emit Released(beneficiary, amount);
Sekarang setelah kami mengidentifikasi elemen-elemen yang menentukan karakteristik kontrak pintar, berikut adalah elemen kontrak lainnya untuk membantu Anda memahami latihan dengan lebih baik.
Pragma kekokohan ^0.8.0; – Versi bahasa pemrograman Solidity yang diperlukan untuk menulis kontrak pintar ini.
// SPDX-License-Identifier: MIT – Termed Software Package Data Exchange, pengenal ini menyatakan lisensi dari rilis kode. Disarankan untuk menyertakannya agar orang tahu apakah itu sumber terbuka dan dapat diubah atau tidak.
Contract TimeLock { – Menetapkan nama ke smart contract, seperti label.
Alamat penerima publik; - Karena kontrak melibatkan pihak penyetor dan pihak penerima manfaat, ini adalah titik di mana alamat publik penyetor disebutkan. Variabel ini adalah Dompet Ethereumalamat dan dapat dilihat secara publik.
Alamat penerima publik yang dapat dibayar; - Ini adalah alamat publik penerima di mana escrow mentransfer dana. Ini juga dapat dibaca dan memberikan rasa transparansi terhadap smart contract berbasis blockchain.
Uint256 rilis publikWaktu; – Karena ini adalah kontrak terikat waktu, uint256 menetapkan variabel berbasis waktu ke kontrak. Ini akan menjadi jangka waktu yang dengannya pelepasan dana akan terjadi.
Dalam Solidity, uint (unsigned integer) adalah cara untuk menetapkan nilai berbasis integer. Akhiran 256 mewakili penyimpanan besar angka.
setelah 5 tahun menulis kontrak pintar saya baru menyadari hari ini bahwa logo solidity adalah logo ethereum yang terlipat 🤯pic.twitter.com/wlM369Eff9
— kaden.eth ( @0xKaden) 8 Juli 2023
Anda dapat mempertimbangkan untuk membaca Dokumentasi Solidity untuk berkenalan dengan sintaks, ekspresi, dan elemen kode lainnya.
konstruktor (alamat hutang _beneficiary, uint256 _releaseTime) { – "Konstruktor" adalah fungsi khusus satu kali yang dipanggil ketika kontrak pintar digunakan. Ini membuat kontrak bergerak. Perhatikan bagaimana pada titik ini, semua variabel alamat yang sebelumnya kita deklarasikan dipanggil dan diinisialisasi.
Receive() external payable { – Ini adalah fungsi khusus yang disebut ketika dana pindah ke alamat kontrak dari luar. Eksternal menyarankan dari luar, dan "Payable" mendefinisikan sifat bergerak, yaitu, untuk menerima token ERC-20.
Fungsi rilis() publik { - Ini adalah fungsi publik yang menyatakan perpindahan token ERC-20 dari alamat kontrak ke penerima. Fungsi ini bergantung pada releaseTime.
Semua elemen ini adalah bagian dari kontrak Escrow hipotetis yang kita bahas. Pastikan Anda membaca seluruh dokumentasi Solidity untuk memahami bahasa tersebut dengan lebih baik.
Ketahui elemen sebelum Anda berencana menulis kontrak pintar: BeInCrypto
Saat ini, Anda seharusnya sudah memiliki keunggulan dalam membaca dan memahami smart contract yang sudah ditulis. Dan banyak smart contract seperti yang kita diskusikan menjadi backend dari aplikasi terdesentralisasi — sebuah rantai blokversi dari aplikasi seluler standar.
Setiap karakteristik dari smart contract, termasuk keamanan kontrak, eksekusi otonom dan dapat diprogram, ketidakpercayaan transaksi, dan lainnya, dengan mudah diimplementasikan saat mengembangkan aplikasi terdesentralisasi. Jadi, ketika Anda menemui DApp, catatlah bahwa itu adalah backend yang didukung oleh smart contract yang dihosting di blockchain — membantu Anda memulai berbagai tugas tanpa intervensi manusia. Smart contract membentuk logika DApps.
Kami tahu bahwa Ethereum memungkinkan Anda mengembangkan kontrak pintar, seperti solusi perangkat lunak besar. Namun, itu bukan satu-satunya protokol blockchain di sekitar kita. Jika Anda ingin menyelami dunia pengembangan kontrak pintar, Anda mungkin ingin melihat blockchain lainnya. Blockchain yang berbeda memiliki istilah yang berbeda ketika harus menyusun kontrak.
Tapi pertama-tama, mari kita bahas Ethereum— platform yang paling banyak digunakan oleh para pengembang smart contract.
Kontrak pintar di Ethereum ditulis dalam bahasa pemrograman Solidity. Dan antarmuka token untuk platform pengembangan kontrak pintar ini adalah ERC-20.
Anda dapat kembali ke kontrak pintar berbasis Escrow yang kita bahas sebelumnya untuk melihat bagaimana kontrak pintar berbasis Etheruem standar ditulis.
Bahkan meluncurkan token ERC-20 di blockchain Ethereum adalah fitur yang membutuhkan kontrak pintar yang intensif, sesuatu yang akan kita bahas secara mendalam saat menulis kontrak pintar.
Inilah yang terlihat seperti struktur kode dasar, asalkan kami berencana untuk meluncurkan BIC cryptocurrency baru.
Anggaplah ini sebagai skenario hipotetis. Tidak benar-benar meluncurkan sebuah cryptocurrency BIC.
pragma soliditas ^0.8.0;impor "@openzeppelin/contracts/token/ERC20/ERC20.sol";kontrak BICToken adalah ERC20 { konstruktor(uint256 pasokanAwal) ERC20("Token BIC", "BIC") { _mint(msg.sender, pasokanAwal); }}
Kita akan membahas setiap elemen dari kode ini nanti saat menulis kontrak pintar kita.
Seperti Ethereum, Anda bahkan dapat membuat kontrak pintar di platform seperti Solana, menggunakan Rust dan Cardano, menggunakan Plutus, subset dari Haskell — bahasa pemrograman fungsional.
"Apakah Cordona bahkan memiliki kontrak pintar?"
Candaan untukmu, kawan.#CardanoADA pic.twitter.com/j8SXCu72Sd
— Willybot 🇦🇺 ( @wilbot28) 9 Juli 2023
Berikut adalah struktur kode dalam Rust (iniSolana) terlihat seperti:
Catatan: Ini adalah kontrak sederhana di mana sebuah penghitung akan diinkrementalkan.
gunakan anchor_lang::prelude::*;declare_id!(“Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS”);#[program] pub mod hello_world {use super::*;pub fn initialize(ctx: Context<Initialize>) -> ProgramResult { let greeting_account = &mut ctx.accounts.greeting_account; greeting_account.counter = 0; Ok(())}pub fn increment(ctx: Context<Increment>) -> ProgramResult { let greeting_account = &mut ctx.accounts.greeting_account; greeting_account.counter += 1; Ok(())}}
Tahukah Anda? Sementara Rust adalah bahasa pemrograman untuk membuat kontrak pintar berbasis Solana, Jangkar adalah kerangka kerja pengembangan kontrak pintar yang digunakan. Untuk membuat kontrak pintar menggunakan Rust, pengembang perlu menarik modul dari kerangka kerja Anchor — sesuatu yang baris pertama dari kode sampel kami (gunakan anchor_lang::*;) stands for.
Dokumentasi Solanaakan membantu Anda memahami bahasa smart contract khusus Rust.
Demikian pula, Cardano mengikuti Plutus sebagai pilihan bahasa, diikuti oleh bahasa Ink!Polkadot, TEAL untuk Algorand, C# untuk NEO, dan lainnya. Disarankan untuk mempelajari dokumentasi secara detail sebelum melanjutkan dengan penulisan smart contract yang kompatibel dengan rantai.
Kemampuan menulis smart contract sangat diakui, namun bahkan kemampuan untuk membaca juga memiliki manfaatnya sendiri:
Sekarang bahwa membaca smart contracts sudah selesai, mari fokus pada menulis smart contracts. Sebelum Anda menyelami lebih dalam, penting untuk mengulangi bahwa berbagai blockchains mungkin memiliki standar dan bahasa yang berbeda terkait pengembangan smart contract. Penting untuk fokus pada standar yang ditentukan oleh setiap blockchain, Untuk memulai menulis dan implementasi contract.
Untuk sebagian besar diskusi kita, kita akan fokus pada Ethereum sebagai rantai dan Solidity sebagai bahasa.
Memprogram kontrak pintar adalah bagian paling penting dari siklus pengembangan. Dan untuk terlibat dalam pengembangan kontrak pintar di Ethereum atau blockchain lainnya, Anda harus memiliki beberapa pengalaman dengan bahasa pemrograman non-blockchain seperti Javascript.
Berbagai blockchain dan bahasa untuk menulis smart contracts: BeInCrypto
Kemampuan untuk memprogram sebuah smart contract memungkinkan Anda untuk mengimplementasikan logika, menangani elemen keamanan yang sama, mengoptimalkan kode untuk biaya gas, menyesuaikan yang sama, dan bahkan membuatnya interoperabel jika diperlukan.
Siapa pun yang berencana menulis kontrak pintar di Ethereum perlu memahami apa itu Mesin Virtual Ethereum (EVM) dan bagaimana cara kerjanya dengan kontrak pintar. Untuk pemula, EVM adalah komponen Ethereum yang memberikan program lingkungan terisolasi dan terkendali untuk bekerja. Anggap saja ini komputer global yang menyimpan setiap potongan kode kontrak di Ethereum. Setiap nodepada jaringan Ethereum berjalan EVM.
Jika Anda bercita-cita menjadi pengembang Smart Contract, berikut yang perlu Anda ketahui tentang kontrak pintar dan EVM.
Setelah Anda menulis program dalam Solidity, yang merupakan bahasa tingkat tinggi, Anda perlu mengompilasinya menjadi bytecode — format rendah yang dapat dimengerti mesin. Bytecode ini masuk ke blockchain Ethereum dan tinggal di sana. Setiap orang yang berinteraksi dengan smart contract perlu mengirim transaksi ke alamat kontrak.
Setiap node dengan EVM yang diinstal dapat melihat transaksi ini, dan begitu validator menyetujuinya, kode kontrak pintar dieksekusi. Karena setiap node memiliki keterlihatan transaksi, tidak ada yang dapat dimanipulasi, dan kode dieksekusi sesuai dengan yang ditulis. Dan begitu kode dieksekusi, status blockchain berubah, membuat proses menjadi end-to-end dan benar-benar transparan.
Menulis kontrak pintar memerlukan pengetahuan teknis. Tapi itu belum cukup. Anda juga perlu memahami secara menyeluruh bagaimana teknologi blockchain bekerja, apa kebutuhan spesifik bahasa yang relevan dengan blockchain yang Anda targetkan, interoperabilitas, dan lain-lain. Selain itu, Anda juga harus tahu banyak tentang kerentanan kontrak pintar — hal-hal yang harus dihindari saat menulis kode. Dan akhirnya, pengetahuan pengujian kontrak dan penyebaran kontrak juga merupakan hal yang wajib.
Semua itu bisa menjadi luar biasa. Jadi berikut ini adalah lembar contekan cepat untuk memulai:
Berikut adalah rangkuman cepat dengan beberapa tips untuk menulis kontrak pintar yang lebih baik:
🥧 FREI-PI
‼️ Mengapa pengembang smart contract PERLU mengetahui ini!
Fungsi:
- Persyaratan
Efek
Interaksi
Protokol
- Invariant
Ini adalah pola yang seharusnya Anda semua pikirkan saat membangun kontrak pintar.
Ini alasannya 👇
— Patrick Collins ( @PatrickAlphaC) 6 Juli 2023
Saatnya memahami aspek teknis pengembangan kontrak pintar. Meskipun jaringan seperti Solana dan Cardano memungkinkan Anda untuk mengembangkan kontrak pintar, Ethereum tetap menjadi platform pengembangan kontrak pintar paling populer.
Tahukah Anda? Hanya di tahun 2022, lebih dari 100.000 aplikasi terdesentralisasi berhasil masuk ke jaringan Ethereum.
Ethereum memiliki komunitas pengembang yang besar. Apapun yang Anda kembangkan akan segera mendapatkan perhatian. Selain itu, bahasa aslinya, Solidity, relatif mudah bagi individu yang menguasai Python atau JavaScript. Terakhir, perangkat lunak global Ethereum, EVM, membantu dalam eksekusi kontrak yang mulus.
Jika Anda berada di kelompok mayoritas dan lebih memilih untuk menggunakan Ethereum dan Solidity, berikut adalah daftar cepat hal-hal yang perlu Anda lacak sebelum memulai pengembangan kontrak pintar:
Sekarang kita sudah tahu bagaimana hal-hal terjadi di rantai, mari kita mulai menulis dan mendeploy smart contract pertama. Meskipun “Hello World” tetap menjadi langkah pertama, kita akan mulai dengan membuat smart contract untuk meluncurkan token BIC hipotetis dengan pasokan 100% terbuka sebanyak 1 juta.
Langkah pertama adalah menginstal versi terbaru Node.js dan NPM atau Node Package Manager. Ini menangani alat pengembangan dan lingkungan lokal untuk pengembangan. Selain itu, Node.js dan NPM memungkinkan Anda untuk mengatur front-end web untuk kontrak cerdas Anda.
Sekarang, Anda perlu mengatur IDE untuk menulis kode kontrak. Untuk itu, Anda dapat dengan cepat menginstal Visual Studio Code. Atau Anda bisa memotong kerumitan dan lompatke Alkimia — platform pengembangan blockchain. Dengan Alkimia, Anda dapat mendapatkan sejumlah ETH testnet. Ini akan menutupi biaya gas saat Anda mendeploy smart contract ke testnet Goerli atau bahkan testnet Sepolia.
Perhatikan bahwa Sepolia adalah testnet yang lebih muda dan oleh karena itu membutuhkan ruang disk yang lebih sedikit dalam implementasi node.
Untuk saat ini, kami akan tetap menggunakan testnet Goerli karena memiliki lebih banyak aplikasi yang sudah diimplementasikan.
Dengan testnet dan ETH palsu siap, mari kita beralih ke menulis kontrak pintar secara khusus. Berikut potongan kode untuk membuat token BIC dengan pasokan tetap 1 juta.
Catatan: Kami akan mendeploy smart contract kami secara lokal pada MacOS dan bukan pada testnet. Untuk penempatan smart contract di testnet dan mainnet, kami akan memiliki bagian terpisah, yang berada di luar cakupan diskusi ini.
Berikut potongan kode sederhana untuk token hipotetis:
pragma kekokohan ^0.8.0; impor "@openzeppelin/contracts/token/ERC20/ERC20.sol"; kontrak BICToken adalah ERC20 { konstruktor() ERC20("BIC Token", "BIC") { _mint(msg.sender, 1000000 * 10 ** desimal()); }}
Jika Anda mengetahui sintaks, Anda akan tahu apa arti setiap komponen kode. Adapun Openzepplinbagian itu adalah perpustakaan yang paling sering digunakan untuk mengimpor kontrak pintar ERC-20. Perpustakaan ini menawarkan standar operasi dasar untuk token ERC-20.
Fungsi mint membicarakan pasokan awal, yang dideploy ke alamat kontrak pintar atau msg.sender.
Untuk menyiapkan kode ini secara lokal dan mengujinya, kita akan memerlukan tiga komponen:
Jika Anda telah melalui proses rinci menulis kontrak pintar, sangat penting untuk mengetahui sedikit tentang eksekusi kontrak. Ini adalah proses di mana kode kontrak pintar dieksekusi pada rantai oleh node-node.
Keseragaman yang terkait dengan eksekusi kontraklah yang membuat smart contract transparan dan tidak dapat diubah. Mari kita sekarang memahami proses langkah-demi-langkah yang terkait dengan eksekusi kontrak:
Potongan kode yang telah kita tulis perlu dieksekusi di suatu tempat. Dalam kasus smart contracts, tempat eksekusi tersebut adalah blockchain. Node atau anggota yang berpartisipasi dalam rantai membantu mengeksekusi kontrak.
Node menerima tanggung jawab untuk menjalankan blok kode kontrak sebagai imbalan insentif terkait rantai. Setiap perintah atau tindakan yang terjadi dalam rantai dipimpin oleh smart contract.
Setiap kontrak pintar memiliki alamat tertentu. Untuk melaksanakan kontrak, transaksi dikirim ke alamat kontrak tersebut. Perhatikan bahwa setiap node menjalankan EVM, yang kemudian memiliki salinan kode kontrak pintar, sehingga lebih mudah untuk memeriksa keaslian transaksi.
Transaksi yang ditujukan kepada kontrak pintar dipilih oleh validator, yang kemudian menyertakannya ke dalam blok-blok tertentu.
Setelah transaksi disahkan dan diverifikasi dengan sukses, transaksi tersebut menjadi bagian dari blockchain. Fungsi kontrak pintar yang terkait dengan transaksi kemudian dipanggil dan dieksekusi di semua node blockchain.
Setiap node yang menjalankan kontrak cerdas harus mencapai kesimpulan deterministik — output yang sama untuk setiap set input — menjadikan sifat kontrak sepenuhnya tidak dapat dipercaya dan transparan.
Catatan: Setiap kesalahan yang terkait dengan eksekusi kode atau masalah terkait biaya gas akan membatalkan transaksi. Ini berarti bahwa transaksi yang didasarkan pada kode kontrak pintar tertentu akan berhenti ada. Inilah yang terjadi dengan pinjaman kilatketika ketidakmampuan untuk mematuhi norma-norma tertentu membalikkan seluruh transaksi, tampaknya memberikan kesan bahwa dana bahkan tidak bergerak sama sekali.
Setiap perubahan status yang terkait dengan kontrak pintar dicatat dalam blockchain dan menjadi bagian yang tidak dapat diubah dari yang sama.
Sekarang bahwa Anda tahu cukup banyak tentang kontrak pintar, berikut beberapa poin untuk memulai pengembangan kontrak:
Setiap praktik yang disebutkan di atas membantu dalam optimisasi kode dan implementasi keamanan khusus. Namun, ada beberapa praktik khusus kontrak yang harus Anda ikuti dan implementasikan untuk merawat keberlanjutan kode. Hal ini bertujuan untuk menjaga kode kontrak ringan dan dapat digunakan sehingga setiap node yang menjalankan dan mengeksekusi hal yang sama tidak perlu mengalokasikan banyak daya komputasi untuk hal yang sama.
Meskipun mengikuti praktik terbaik saat menulis dan mengembangkan smart contracts, penting untuk fokus pada kerentanan keamanan kontrak saat mendorongnya ke mainnet.
Setiap smart contract yang memiliki keberadaan di mainnet perlu dievaluasi untuk kinerja kode, keamanan, dan karakteristik lainnya. Inilah tempat audit — proses pengujian kontrak yang ketat — muncul, memungkinkan Anda untuk mengungkap kerentanan dan kelemahan kontrak potensial.
Berikut adalah daftar periksa audit cepat untuk memulai:
Daftar Periksa Audit Kontrak Pintar yang Menakjubkan😈
Pastikan untuk memeriksanya dalam audit Anda berikutnya✅
Saya akan menghargai retweet, sebarkan pengetahuan🫡https://t.co/ILx0C67kf8
— cholakov (@cholakovv) 7 Juli 2023
Saat membaca dan menulis smart contracts saling terkait ketika mengembangkan potongan kode cerdas, audit memiliki tempat khusus dan melibatkan pemeriksaan logika pada awalnya. Ketika berbicara tentang eksekusi kode berbasis blockchain, segalanya bersifat abadi, dan hal apapun yang bersifat kritikal dapat memiliki konsekuensi yang tidak dapat diubah saat eksekusi kontrak. Inilah mengapa pemeriksaan menyeluruh terhadap kode kontrak dan aspek lainnya melalui audit diperlukan.
Mungkin ada sejumlah Kerentanan kontrakaudit smart contract yang detail dapat mengidentifikasi. Ini termasuk memeriksa serangan reentrancy, overflow atau underflow, masalah terkait kontrol akses, dan lainnya. Begitu sifat persis masalah ditentukan, pemeriksa bahkan dapat menyarankan praktik terbaik untuk memperbaikinya.
Masih ragu bagaimana pemeriksaan kontrak pintar dapat membantu? Nah, mari kita kembali ke yang terkenal ituDAO hack pada tahun 2016, yang mengeksploitasi masalah reentrancy dan menyebabkan kerugian hampir 3,6 juta ETH. Demikian pula, ada peretasan kontrak dompet Parity pada tahun 2017, yang menyebabkan hilangnya hampir 500.000 ETH. Masalah-masalah ini dapat dihindari dengan serangkaian audit yang tepat.
Bagan alur peretasan DAO: BeInCrypto
Ada banyak strategi untuk mengaudit smart contracts. Beberapa yang lebih populer termasuk:
Alat-alat ini bertindak sebagai set pertahanan pertama dan paling baik digunakan untuk menemukan kerentanan umum. Beberapa alat yang lebih populer termasuk Securify, Mythril, dan lainnya — mampu melakukan analisis statis dari kode, mendeteksi pola pelanggaran, dan membantu mendapatkan keunggulan keamanan yang spesifik.
Alat untuk mengaudit kontrak pintar: BeInCrypto
Di sinilah pemeriksa kode manual masuk ke dalam gambaran, memeriksa kode sumber dan mengidentifikasi kerentanan kompleks, jika ada. Tinjauan manual dapat membantu merawat logika bisnis, konteks, dan pola penggunaan.
Berikut adalah cara peninjauan kode manual membantu Anda menemukan ancaman:
Sebuah trivia kecil untuk auditor junior kami!
Ayo pergi dan retweet jika Anda menemukan bug!pic.twitter.com/i14YtweXcz
— CharlesPaladin (@PaladinCharles) 8 Juli 2023
Alat-alat seperti Snyk dan GuardRails membantu pemindaian kontrak otomatis - implementasi keamanan yang dipanggil setiap kali kode diperbarui. Bentuk audit ini memastikan bahwa perubahan baru yang dibuat pada kode aman dan non-invasif secara alami.
Ini adalah proses yang kompleks yang semata-mata bergantung pada pemeriksaan logika bisnis dari kode. Perlu diingat bahwa verifikasi formal sebenarnya tidak dimaksudkan untuk memverifikasi sintaksis tetapi hanya logika untuk melihat apakah kode dieksekusi sesuai keinginan.
Selain strategi yang disebutkan, pemeriksaan kontrak pintar juga dapat dimulai menggunakan tinjauan rekan, program hadiah bug bounty, dan cakupan uji melalui alat seperti Cakupan Soliditas untuk memaksimalkan efektivitas.
Cara sederhana untuk mengaudit kontrak pintar: BeInCrypto
Jika Anda baru dalam pemeriksaan smart contract, penting untuk dicatat bahwa ada dua cara menganalisis kode secara umum dan mengidentifikasi isu. Ini termasuk:
Jenis analisis kode ini membantu mengidentifikasi kerentanan keamanan dasar, kesalahan pemrograman, dan isu lain sesuai standar pemrograman yang diberikan dan konvensi. Ancaman seperti panggilan yang tidak dicek ke sumber eksternal, overflow integer, dan lainnya dapat ditekankan menggunakan analisis statis. Hal terbaik tentang analisis statis adalah kode tidak perlu dieksekusi untuk diperiksa.
Pendekatan ini terhadap pengujian audit menguji kesesuaian kode dengan EVM. Alih-alih hanya memeriksa kode, analisis dinamis melakukan pengecekan silang terhadap respons kontrak pintar terhadap berbagai masukan. Analisis dinamis dapat mengidentifikasi isu seperti konsumsi gas yang tidak konsisten dan bahkan logika kontrak yang salah. Lingkungan blockchain pribadi seperti Ganache dapat berfungsi sebagai platform analisis dinamis, memungkinkan pengembang untuk melakukan transaksi, menjalankan perintah, dan melakukan banyak hal lainnya dengan kontrak mereka.
Berikut ini adalah potongan smart contract yang berfungsi sebagai penyimpanan dana, dengan fungsi penarikan:
pragma kekokohan ^0.6.1;kontrak VulnerableContract { pemetaan(alamat => uint256) public saldo; fungsi deposit() public payable { saldo[msg.sender] += msg.value; } fungsi withdraw(uint256 _jumlah) public { memerlukan(saldo[msg.sender] >= _jumlah, "Saldo tidak mencukupi."); (bool sukses, ) = msg.sender.call{value: _jumlah}(""); memerlukan(sukses, "Transfer gagal."); saldo[msg.sender] -= _jumlah; }}
Jika Anda melihat kode dengan cermat, ada kerentanan kunci:
Pada kasus sebelumnya, fungsi “withdraw” dapat dipanggil lagi jika pengguna yang menerima dana juga merupakan smart contract, meskipun bersifat jahat. Oleh karena itu, sebelum fungsi terakhir atau pembaruan saldo terjadi, serangan reentrancy dapat dimulai untuk mentransfer dana tambahan. Auditor berpengalaman mengidentifikasi jenis kerentanan ini.
Berikut adalah kode yang diperbaiki untuk hal yang sama:
fungsi mengambil(uint256 _jumlah) publik { memerlukan(saldo[msg.sender] >= _jumlah, "Saldo tidak mencukupi."); saldo[msg.sender] -= _jumlah; (bool sukses, ) = msg.sender.call{nilai: _jumlah}("");
membutuhkan(berhasil, “Transfer gagal.”);}
Periksa bagaimana fungsi pembaruan saldo dipanggil terlebih dahulu dan kemudian langkah pertama ke pengguna. Perubahan urutan operasi inilah yang memperbaiki kontrak.
Dunia aplikasi terdesentralisasi dan kontrak pintar telah bergerak melampaui Ethereum. Meskipun sebagian besar aktivitas masih terjadi dalam ekosistem Ethereum, ada rantai lain seperti Cardano, Solana, dan lainnya yang mendukung kontrak pintar dan memerlukan standar audit yang berbeda.
Berbagai blockchain menggunakan bahasa pemrograman yang berbeda. Semantik, sintaksis, dan properti kode yang berbeda membuat smart contract responsif terhadap praktik penulisan dan audit yang berbeda. Misalnya, Ethereum menggunakan Solidity, sedangkan Polkadotmenggunakan Ink dan Rust — membuatnya responsif terhadap standar audit tertentu.
Sekarang jika Anda ingin bergerak melampaui Ethereum, ada beberapa alat audit khusus untuk Anda mulai. Misalnya, dengan Cardano, ada suite Marlowe untuk verifikasi dan audit formal. Ketika datang ke Solana, libfuzzer dan cargo-fuzz khusus karat dimaksudkan untuk audit dan pengujian kontrak. Auditor multi-rantai harus terbiasa dengan konsep-konsep ini untuk mencegah kerentanan kontrak.
Hanya untuk mengulangi, Anda dapat memisahkan pemeriksaan kontrak cerdas ke dalam tiga jenis: manual, otomatis, dan hibrida. Perhatikan bahwa orang lebih memilih strategi pemeriksaan hibrida untuk kontrak kompleks dengan logika bisnis yang dalam karena mereka yang paling komprehensif.
Organisasi dan individu dengan pengetahuan pengkodean minimal sering mengalihdayakan persyaratan penulisan dan audit mereka ke perusahaan terkenal. Ketika datang ke audit, memilih perusahaan yang tepat menjadi semakin penting meskipun alat kecerdasan buatansepertiChatGPTdapat membantu menulis kode kontrak pintar, memeriksa hal yang sama memerlukan wawasan manual.
Juga, berikut adalah faktor-faktor yang perlu diperhatikan saat mengalihkan tugas pemeriksaan:
Sebelum Anda memilih perusahaan outsourcing yang tepat, penting untuk memeriksa audit sebelumnya, mengevaluasi pengalaman, dan bahkan fokus pada anggota tim kunci.
Sebelum merekrut, perhatikan biaya dan layanan yang terkait dengan audit. Sangat penting untuk memahami terlebih dahulu sifat layanan yang ditawarkan — seperti identifikasi isu, penyelesaian isu, dan lain-lain. Anda juga harus memeriksa apakah re-audit juga disediakan setelah menerapkan baris pertama perbaikan. Biaya audit kontrak pintar dapat bervariasi tergantung pada layanan, dan oleh karena itu, penting untuk melacak setiap persyaratan dan penawaran sebelum melanjutkan.
Jika Anda ingin meninggalkan sebuah perusahaan dan memeriksa kontrak pintar sendiri, berikut adalah strategi dan praktik terbaik yang perlu diingat:
Kecerdasan buatan memang membuat lebih mudah menulis kontrak pintar. Namun, terlepas dari inovasi AI, kemampuan untuk mengaudit kontrak pintar dengan cara terbaik tetap memerlukan intervensi manusia. Oleh karena itu, jika Anda berencana membangun produk web3 berikutnya dengan menekankan kontrak pintar dan aplikasi terdesentralisasi, sangat penting untuk fokus secara religius pada sumber daya audit terbaik untuk kontrak pintar Anda. Dengan hack dan pelanggaran kriptocurrency muncul setiap hari dan peretas merencanakan strategi baru untuk menembus, mengaudit kontrak dengan sempurna tentu merupakan salah satu keterampilan modern yang lebih penting saat ini.