Beli Kripto
Pasar
Spot
Futures OILBTC
Tabungan
Pusat Acara
Hub Hadiah
Lainnya
Fest. 0-Biaya
Solidity: Apa Itu Solidity?Solidity adalah bahasa pemrograman tingkat tinggi yang digunakan untuk menulis smart contract yang berjalan di Ethereum dan jaringan blockchain lain yang mendukung Ethereum Virtual MaSolidity: Apa Itu Solidity?Solidity adalah bahasa pemrograman tingkat tinggi yang digunakan untuk menulis smart contract yang berjalan di Ethereum dan jaringan blockchain lain yang mendukung Ethereum Virtual Ma

Solidity

2026/10/13 17:01
#Advanced
Humanity
H$0.05394-10.29%
PX
PX$0.0125-4.58%
Smart Blockchain
SMART$0.004337-3.55%
Virtuals Protocol
VIRTUAL$0.6888-5.78%
TokenFi
TOKEN$0.001992-6.17%

Apa Itu Solidity?

Solidity adalah bahasa pemrograman tingkat tinggi yang digunakan untuk menulis smart contract yang berjalan di Ethereum dan jaringan blockchain lain yang mendukung Ethereum Virtual Machine.

Situs web resmi Solidity menjelaskan Solidity sebagai bahasa pemrograman bertipe statis dengan kurung kurawal yang dirancang untuk mengembangkan smart contract yang berjalan di Ethereum.

Smart contract adalah program yang disimpan di blockchain dan dapat menyimpan aset, menerapkan aturan, menjalankan logika, serta merespons transaksi tanpa memerlukan server tradisional.

Dokumentasi resmi smart contract Ethereum menjelaskan bahwa smart contract adalah program yang berjalan di blockchain Ethereum.

Dalam kripto, Solidity digunakan untuk membangun token, protokol DeFi, koleksi NFT, DAO, sistem staking, pasar pinjaman, bridge, sistem escrow, kontrak tata kelola, dan banyak aplikasi on-chain lainnya.

Kode Solidity tidak dijalankan secara langsung oleh pengguna.

Developer menulis kode sumber Solidity, lalu mengompilasinya menjadi bytecode yang dapat dieksekusi oleh Ethereum Virtual Machine.

Dokumentasi resmi Solidity menjelaskan bahwa Solidity adalah bahasa tingkat tinggi berorientasi objek untuk mengimplementasikan smart contract.

Sederhananya, Solidity adalah bahasa pemrograman utama yang digunakan banyak developer untuk membuat aplikasi kripto terprogram di blockchain berbasis EVM.

Mengapa Solidity Penting dalam Kripto

Solidity penting karena mendukung banyak smart contract yang digunakan pengguna di seluruh ekosistem kripto.

Saat pengguna menukar token, mint NFT, mengikuti voting DAO, menyetor jaminan, mengklaim reward, atau berinteraksi dengan aplikasi DeFi, smart contract Solidity dapat menangani sebagian dari tindakan tersebut.

Solidity membantu mewujudkan aset digital yang dapat diprogram karena developer dapat menulis aturan yang dapat digunakan kembali untuk kepemilikan, transfer, izin, biaya, likuiditas, dan tata kelola.

Token, seperti aset fungibel dan NFT, sering bergantung pada standar smart contract yang umumnya diimplementasikan dengan Solidity.

Standar token ERC-20 resmi mendefinisikan antarmuka umum untuk token fungibel dalam smart contract.

Standar token ERC-721 resmi mendefinisikan antarmuka umum untuk non-fungible token.

Standar token ERC-1155 resmi mendefinisikan standar multi-token yang dapat mendukung aset fungibel dan nonfungibel dalam satu sistem kontrak.

Standar ini penting karena wallet, explorer, aplikasi, dan protokol dapat mendukung perilaku token umum dengan lebih mudah.

Solidity juga penting karena kesalahan smart contract dapat memengaruhi dana pengguna yang nyata.

Kesalahan kecil dalam kode Solidity dapat menyebabkan kehilangan token, izin yang rusak, pencatatan yang keliru, upgrade yang gagal, atau logika DeFi yang dapat dieksploitasi.

Cara Kerja Solidity

Solidity bekerja dengan memungkinkan developer menjelaskan aturan smart contract dalam kode sumber yang dapat dibaca manusia.

Kode tersebut kemudian dikompilasi menjadi bytecode EVM melalui compiler Solidity, yang umumnya disebut solc.

Dokumentasi compiler Solidity menjelaskan bahwa compiler dapat menghasilkan output seperti biner, data ABI, assembly, estimasi gas, dan abstract syntax tree.

Setelah dikompilasi, bytecode deployment dikirim melalui transaksi blockchain untuk membuat akun kontrak.

Setelah di-deploy, kontrak memiliki alamat yang dapat dipanggil oleh pengguna dan kontrak lain.

Pengguna biasanya tidak memanggil smart contract dengan menulis bytecode mentah.

Mereka umumnya berinteraksi melalui wallet, aplikasi, skrip, atau antarmuka yang mengenkode pemanggilan fungsi menggunakan ABI kontrak.

Kontrak menerima data transaksi, mengeksekusinya sesuai aturan EVM, memperbarui storage jika diizinkan, mengeluarkan event jika kode memerintahkannya, serta mengembalikan data atau error.

Setiap tindakan yang mengubah state memerlukan transaksi blockchain dan biaya yang dibayar oleh pengirim transaksi.

Karena itu, pengembangan Solidity harus mempertimbangkan ketepatan dan biaya gas.

Solidity dan Ethereum Virtual Machine

Ethereum Virtual Machine, atau EVM, adalah lingkungan runtime yang mengeksekusi bytecode smart contract hasil kompilasi.

Pengantar Solidity tentang smart contract menjelaskan bahwa EVM adalah lingkungan runtime untuk smart contract Ethereum dan terisolasi dari sistem di sekitarnya.

Solidity dirancang untuk menargetkan EVM, artinya kode Solidity dikompilasi menjadi instruksi yang dipahami EVM.

Desain ini memungkinkan smart contract dieksekusi secara deterministik di banyak node.

Eksekusi deterministik berarti setiap node yang jujur seharusnya mencapai hasil yang sama saat memproses transaksi yang sama dalam state chain yang sama.

Hal ini penting karena blockchain memerlukan kesepakatan mengenai saldo, kepemilikan, storage kontrak, dan hasil transaksi.

EVM juga menciptakan lingkungan sandbox yang membatasi tindakan kontrak.

Kontrak Solidity tidak dapat langsung memanggil situs web acak, membaca data server privat, atau mengakses informasi off-chain kecuali informasi tersebut dibawa on-chain melalui transaksi atau sistem oracle.

Keterbatasan ini meningkatkan determinisme, tetapi mengharuskan developer merancang kebutuhan data eksternal dengan cermat.

Oleh karena itu, Solidity bukan sekadar bahasa pemrograman web biasa karena berjalan dalam model eksekusi blockchain dengan aturan ketat.

Solidity dan Smart Contract

Smart contract Solidity adalah kumpulan kode dan storage yang berada di alamat blockchain setelah deployment.

Kode menentukan fungsi apa yang dapat dipanggil dan tindakan yang dilakukan fungsi tersebut.

Storage menyimpan state jangka panjang seperti saldo, alamat pemilik, nilai konfigurasi, mapping, suara, utang, cadangan, dan metadata token.

Kontrak dapat menerima transaksi dari externally owned account yang dikendalikan pengguna.

Kontrak juga dapat memanggil kontrak lain sehingga menciptakan sistem on-chain yang composable.

Composability merupakan salah satu fitur kripto Solidity yang paling penting karena satu protokol dapat dibangun di atas antarmuka kontrak protokol lain.

Kontrak token dapat digunakan oleh protokol pinjaman, protokol swap, kontrak staking, dan sistem tata kelola.

Hal ini membuat Solidity sangat kuat, tetapi juga menciptakan risiko karena bug pada satu kontrak dapat memengaruhi banyak aplikasi yang terhubung.

Smart contract biasanya transparan setelah diverifikasi, tetapi transparansi tidak otomatis berarti aman.

Pengguna harus memperlakukan setiap interaksi kontrak sebagai transaksi dengan risiko teknis dan finansial.

Sintaks Solidity

Solidity menggunakan kurung kurawal, deklarasi fungsi, variabel, tipe, struct, mapping, event, modifier, dan pola inheritance yang mungkin terasa familier bagi developer yang mengenal JavaScript, C++, Java, atau bahasa serupa.

Dokumentasi resmi Solidity menyatakan bahwa bahasa ini dipengaruhi oleh C++, Python, dan JavaScript.

File Solidity biasanya dimulai dengan pengenal lisensi dan pernyataan pragma.

Pernyataan pragma memberi tahu tool mengenai versi compiler yang ditujukan untuk file sumber tersebut.

Definisi kontrak kemudian memuat variabel state, event, error, constructor, fungsi, modifier, dan terkadang tipe bertingkat.

Solidity bertipe statis, yang berarti variabel dan parameter fungsi memiliki tipe yang dideklarasikan.

Tipe umum meliputi bool, uint256, int256, address, bytes, string, array, struct, enum, dan mapping.

Developer harus memikirkan storage, memory, calldata, visibilitas, mutabilitas, dan kontrol akses secara cermat.

Detail ini penting karena kode Solidity mengendalikan aset dan dapat sulit diubah setelah deployment.

Sintaks yang tampak sederhana tetap dapat menghasilkan perilaku on-chain yang kompleks.

Kontrak

Kontrak adalah komponen utama dalam Solidity.

Kontrak dapat menyimpan data, mendefinisikan fungsi, mengeluarkan event, mewarisi kontrak lain, dan berinteraksi dengan kontrak lain.

Kontrak token dapat menyimpan saldo dan allowance.

Kontrak pinjaman dapat menyimpan jaminan, utang, indeks bunga, dan pengaturan likuidasi.

Kontrak tata kelola dapat menyimpan proposal, suara, aturan kuorum, dan penundaan eksekusi.

Kontrak staking dapat menyimpan deposit, tingkat reward, aturan penarikan, dan data klaim.

Setiap kontrak yang di-deploy menerima alamatnya sendiri di blockchain.

Pengguna memanggil alamat tersebut untuk berinteraksi dengan fungsi kontrak.

Kode kontrak hanya berjalan ketika dipicu oleh transaksi atau pemanggilan.

Kontrak tidak berjalan terus-menerus seperti aplikasi server biasa.

Variabel State

Variabel state adalah variabel yang disimpan secara permanen dalam storage kontrak.

Variabel ini digunakan untuk data yang harus tetap tersedia di seluruh transaksi.

Contohnya mencakup saldo token, alamat pemilik, total suplai, pengaturan biaya, cadangan protokol, jumlah suara, dan posisi pengguna.

Storage mahal karena node blockchain harus menyimpan dan memverifikasi data tersebut.

Developer sebaiknya menghindari penyimpanan data yang tidak diperlukan secara on-chain.

Mereka juga harus merancang tata letak storage dengan cermat, terutama pada kontrak yang dapat di-upgrade.

Kesalahan tata letak storage dapat merusak state kontrak penting saat upgrade.

Solidity dapat menghasilkan informasi tata letak storage melalui compiler, yang membantu developer dan auditor meninjau risiko upgrade.

Pengguna jarang melihat variabel state secara langsung kecuali kontrak telah diverifikasi atau blockchain explorer menampilkan pemanggilan yang dapat dibaca.

Namun, variabel ini sering menentukan cara dana dan izin pengguna ditangani.

Fungsi

Fungsi menentukan tindakan yang dapat dilakukan kontrak Solidity.

Fungsi dapat membaca data, memperbarui storage, mentransfer token, memanggil kontrak lain, mengeluarkan event, atau revert ketika syarat tidak terpenuhi.

Visibilitas fungsi mengontrol siapa yang dapat memanggil fungsi dan cara fungsi diakses.

Kata kunci visibilitas umum mencakup public, external, internal, dan private.

Mutabilitas fungsi menunjukkan apakah fungsi membaca atau memodifikasi state.

Kata kunci mutabilitas umum mencakup view, pure, dan payable.

Fungsi view dapat membaca state tanpa mengubahnya.

Fungsi pure seharusnya tidak membaca atau mengubah state kontrak.

Fungsi payable dapat menerima aset native chain saat dipanggil dengan value.

Desain fungsi penting karena banyak kerentanan smart contract berasal dari pemeriksaan yang tidak ada, izin yang salah, pemanggilan eksternal yang tidak aman, atau pencatatan yang keliru.

Event

Event adalah log yang dikeluarkan oleh kontrak Solidity selama eksekusi.

Event membantu wallet, explorer, indexer, dan aplikasi melacak peristiwa dalam transaksi.

Transfer token biasanya mengeluarkan event Transfer ketika diimplementasikan sesuai standar token umum.

Protokol DeFi dapat mengeluarkan event untuk deposit, penarikan, pinjaman, pelunasan, likuidasi, swap, voting, atau perubahan konfigurasi.

Event bermanfaat karena lebih murah disimpan daripada storage kontrak penuh dan mudah diindeks oleh sistem off-chain.

Namun, event tidak sama dengan state kontrak.

Kontrak hanya dapat mengeluarkan event ketika kodenya memerintahkannya.

Aplikasi tidak boleh begitu saja mempercayai log event tanpa memahami logika kontrak.

Event sangat baik untuk transparansi dan analitik, tetapi harus diinterpretasikan bersama kode yang mendasarinya.

Bagi pengguna, event sering mendukung riwayat transaksi yang dapat dibaca di wallet dan explorer.

Modifier

Modifier adalah bagian logika Solidity yang dapat digunakan kembali untuk mengubah atau membatasi perilaku fungsi.

Modifier umum memeriksa apakah pemanggil adalah pemilik, admin, governor, atau peran yang berwenang sebelum mengizinkan fungsi berjalan.

Modifier dapat mengurangi kode berulang dan membuat kontrol akses lebih mudah dibaca.

Namun, modifier juga dapat menyembunyikan logika penting jika digunakan secara berlebihan atau ditulis tidak jelas.

Fungsi dapat terlihat sederhana, sementara modifier melakukan pemeriksaan utama atau perubahan state di latar belakang.

Developer sebaiknya menjaga modifier tetap jelas dan terfokus.

Auditor harus meninjau modifier dengan cermat karena modifier sering melindungi fungsi sensitif.

Pengguna yang meninjau kode terverifikasi tidak boleh menilai fungsi hanya berdasarkan isi yang terlihat.

Mereka juga perlu memeriksa modifier yang diwariskan dan syarat kontrol akses.

Modifier yang hilang atau rusak dapat menimbulkan risiko keamanan serius.

Mapping

Mapping adalah struktur data key-value yang umum digunakan dalam kontrak Solidity.

Saldo token sering disimpan dalam mapping dari address ke jumlah.

Allowance dapat disimpan dalam mapping bertingkat dari pemilik ke spender ke jumlah.

Sistem tata kelola dapat menggunakan mapping untuk melacak apakah suatu address telah memberikan suara.

Sistem pinjaman dapat menggunakan mapping untuk melacak jaminan dan utang setiap pengguna.

Mapping efisien untuk mencari nilai berdasarkan key.

Namun, mapping tidak mudah diiterasi secara langsung di on-chain.

Developer sering menggunakan event atau struktur data tambahan saat memerlukan sistem off-chain untuk mencantumkan entri mapping.

Mapping sangat kuat tetapi memerlukan pencatatan yang cermat.

Pembaruan mapping yang salah dapat menyebabkan saldo yang keliru, izin rusak, atau dana hilang.

Antarmuka

Antarmuka mendefinisikan signature fungsi yang dapat dipanggil kontrak lain.

Antarmuka penting karena smart contract sering perlu berinteraksi dengan smart contract lain.

Antarmuka token dapat memberi tahu kontrak DeFi cara memanggil transfer, transferFrom, approve, balanceOf, atau allowance.

Antarmuka oracle dapat memberi tahu protokol pinjaman cara membaca data harga.

Antarmuka tata kelola dapat memungkinkan kontrak lain memeriksa state proposal atau kekuatan voting.

Antarmuka meningkatkan composability karena kontrak dapat mengandalkan bentuk fungsi yang umum.

Namun, antarmuka hanya menjelaskan pemanggilan dan nilai pengembalian yang diharapkan.

Antarmuka tidak membuktikan bahwa kontrak di balik suatu address berperilaku jujur atau aman.

Developer harus memvalidasi asumsi mengenai kontrak eksternal sebelum mengintegrasikannya.

Pengguna harus mengingat bahwa composability kontrak dapat menyebarkan risiko ke seluruh sistem yang terhubung.

Library

Library adalah unit kode Solidity yang dapat digunakan kembali dan membantu developer menghindari penulisan ulang logika umum.

Library dapat menyediakan fungsi matematika, utilitas address, helper transfer aman, tool array, tool string, atau operasi struktur data.

Beberapa library disematkan ke bytecode kontrak saat kompilasi.

Library lain dapat di-deploy secara terpisah dan dihubungkan berdasarkan address.

Penggunaan library dapat meningkatkan kualitas kode jika library telah diuji dengan baik dan ditinjau secara luas.

Penggunaan library juga dapat menambah risiko jika library sudah usang, berbahaya, ditautkan secara salah, atau digunakan dengan cara yang keliru.

Developer harus mengunci versi dependensi dan meninjau kode yang diimpor.

Auditor harus memeriksa library sebagai bagian dari keseluruhan codebase.

Pengguna harus memahami bahwa kontrak terverifikasi dapat bergantung pada library yang diimpor dan kode yang diwariskan.

Kontrak hanya seaman seluruh kumpulan kode yang memengaruhi perilakunya.

Inheritance

Inheritance memungkinkan kontrak Solidity menggunakan kembali dan memperluas kode dari kontrak lain.

Hal ini berguna untuk logika kepemilikan bersama, perilaku token, kontrol akses, kontrol jeda, pola upgrade, dan modul yang dapat digunakan kembali.

Inheritance dapat membuat kode lebih mudah diatur jika digunakan dengan cermat.

Inheritance juga dapat membuat kode lebih sulit ditinjau ketika banyak kontrak warisan berinteraksi secara kompleks.

Kontrak child dapat menimpa fungsi parent.

Multiple inheritance dapat menciptakan masalah urutan dan override yang rumit.

Developer sebaiknya menjaga struktur inheritance tetap sederhana jika memungkinkan.

Auditor harus meninjau seluruh pohon inheritance, bukan hanya kontrak akhir.

Pengguna yang membaca kode terverifikasi harus memeriksa kontrak parent yang diimpor, bukan hanya nama kontrak yang ditampilkan di halaman.

Inheritance sangat kuat, tetapi logika warisan tersembunyi dapat berbahaya jika diabaikan.

ABI

ABI adalah singkatan dari Application Binary Interface.

Spesifikasi ABI Solidity resmi menjelaskan bahwa ABI adalah cara standar untuk berinteraksi dengan kontrak dalam ekosistem Ethereum.

ABI memberi tahu perangkat lunak cara mengenkode pemanggilan fungsi dan mendekode nilai pengembalian.

Wallet, skrip, aplikasi, dan blockchain explorer menggunakan ABI untuk menampilkan nama fungsi dan kolom parameter yang dapat dibaca.

Tanpa ABI, pengguna harus bekerja dengan calldata mentah, yang jauh lebih sulit dipahami.

ABI dapat mencakup fungsi, event, error, input, output, dan informasi tipe.

ABI tidak membuktikan bahwa kontrak aman.

ABI hanya menjelaskan cara memanggil antarmuka kontrak yang terbuka.

Kontrak berbahaya tetap dapat memiliki ABI yang tampak rapi.

Pengguna harus memperlakukan data ABI sebagai lapisan kemudahan penggunaan, bukan jaminan kepercayaan.

Compiler Solidity

Compiler Solidity, atau solc, mengubah kode sumber Solidity menjadi bytecode EVM dan artefak pendukung.

Solc juga dapat menghasilkan data ABI, metadata, estimasi gas, tata letak storage, peringatan, error, dan output perantara.

Versi dan pengaturan compiler yang tepat penting karena memengaruhi bytecode akhir.

Pengumuman rilis Solidity 0.8.35 menyatakan bahwa versi 0.8.35 memperkenalkan builtin erc7201, flag eksperimental tingkat atas, dan code generator SSA CFG eksperimental.

Versi compiler penting karena Solidity terus berkembang dengan fitur baru, perbaikan bug, peringatan, dan perubahan target EVM.

Kontrak yang dikompilasi dengan satu versi mungkin tidak cocok dengan kode sumber yang sama jika dikompilasi menggunakan versi lain.

Pengaturan compiler seperti status optimizer, optimizer runs, versi EVM, via-IR, dan address library juga memengaruhi output.

Inilah sebabnya kontrak terverifikasi biasanya menunjukkan versi dan pengaturan compiler yang digunakan untuk mencocokkan bytecode yang di-deploy.

Developer harus mengunci versi compiler untuk deployment produksi.

Pengguna harus memahami bahwa kode sumber terverifikasi bergantung pada kecocokan pengaturan kompilasi, bukan hanya kecocokan teks.

Bytecode

Bytecode adalah kode tingkat rendah yang dieksekusi EVM setelah kontrak Solidity dikompilasi dan di-deploy.

Bytecode deployment digunakan untuk membuat kontrak.

Bytecode runtime adalah kode yang tetap berada di address kontrak setelah deployment.

Blockchain mengeksekusi bytecode, bukan teks sumber Solidity asli.

Inilah sebabnya verifikasi kode sumber penting.

Verifikasi menunjukkan bahwa kode sumber yang terlihat dan pengaturan compiler dapat mereproduksi bytecode yang di-deploy.

Dokumentasi verifikasi smart contract Ethereum menjelaskan bahwa verifikasi membandingkan kode sumber dengan bytecode hasil kompilasi.

Bytecode sulit dibaca langsung oleh sebagian besar pengguna.

Kode sumber terverifikasi membuat bytecode lebih mudah dipahami.

Namun, bytecode terverifikasi tetap memerlukan tinjauan keamanan sebelum pengguna mempercayakan dana pada kontrak.

Gas

Gas adalah unit yang digunakan untuk mengukur pekerjaan komputasi yang diperlukan guna mengeksekusi transaksi dan operasi smart contract.

Developer Solidity harus memperhatikan gas karena kode yang mahal dapat membuat kontrak mahal atau tidak praktis digunakan.

Menulis ke storage biasanya lebih mahal daripada membaca memory atau calldata.

Loop pada set data besar dapat menjadi berbahaya jika membutuhkan terlalu banyak gas.

Pemanggilan eksternal dapat menambah biaya dan risiko keamanan.

Deployment kontrak juga memerlukan gas karena bytecode harus disimpan secara on-chain.

Optimizer Solidity terkadang dapat mengurangi biaya gas atau ukuran bytecode, tetapi harus dikonfigurasi dan diuji dengan cermat.

Optimasi gas tidak boleh mengorbankan logika yang jelas atau aman.

Dalam kripto, kontrak yang terlalu mahal digunakan dapat mengecewakan pengguna saat jaringan padat.

Pengembangan Solidity yang baik menyeimbangkan keamanan, kejelasan, dan efisiensi.

Solidity dan Token

Solidity banyak digunakan untuk membuat dan mengelola kontrak token.

Kontrak token fungibel dapat melacak saldo, allowance, total suplai, transfer, persetujuan, minting, burning, dan kontrol akses.

Kontrak NFT dapat melacak ID token unik, pemilik, persetujuan, tautan metadata, dan aturan transfer.

Kontrak multi-token dapat mengelola banyak jenis token dalam satu sistem kontrak.

Standar token penting karena memudahkan wallet, explorer, dan aplikasi mendukung token.

Standar ERC-20, ERC-721, dan ERC-1155 termasuk standar token tingkat aplikasi paling penting dalam ekosistem Ethereum.

Namun, token yang ditulis dengan Solidity atau mengikuti suatu standar tidak otomatis aman atau bernilai.

Kontrak token dapat mencakup otoritas mint, logika blacklist, biaya, kontrol jeda, kemampuan upgrade, atau izin admin yang berbahaya.

Pengguna harus meninjau izin token, distribusi holder, likuiditas, aturan suplai, dan kode sumber terverifikasi sebelum mempercayai token.

Solidity memungkinkan pembuatan token, tetapi kualitas token bergantung pada desain dan tata kelola.

Solidity dan DeFi

Solidity menjadi inti dari banyak aplikasi keuangan terdesentralisasi (DeFi).

Kontrak DeFi dapat mengelola swap, liquidity pool, pasar pinjaman, vault, derivatif, staking, strategi imbal hasil, dan sistem tata kelola.

Sistem ini sering menyimpan aset pengguna dalam jumlah besar, sehingga keamanan Solidity sangat penting.

Protokol DeFi dapat gagal akibat bug kode, masalah oracle, model pencatatan yang buruk, aturan likuidasi yang salah, upgrade tidak aman, atau serangan tata kelola.

Solidity memungkinkan kontrak saling memanggil, yang membuat DeFi sangat composable.

Composability dapat menciptakan komponen keuangan yang berguna.

Composability juga dapat menciptakan risiko dependensi ketika satu protokol bergantung pada perilaku protokol lain.

Developer harus menguji integrasi dalam berbagai kondisi pasar dan skenario kegagalan.

Pengguna harus memahami bahwa smart contract DeFi dapat transparan sekaligus berisiko.

Imbal hasil tinggi atau volume tinggi tidak membuktikan bahwa kode Solidity aman.

Solidity dan NFT

Solidity umum digunakan untuk membuat kontrak NFT yang menentukan kepemilikan dan aturan transfer aset digital unik.

Smart contract NFT dapat menetapkan ID token, menyimpan catatan kepemilikan, mengelola persetujuan, dan menautkan metadata.

Metadata NFT sering mengarah ke gambar, atribut, deskripsi, atau file eksternal.

Smart contract mungkin tidak menyimpan seluruh media secara langsung di on-chain karena penyimpanan data besar di on-chain dapat mahal.

Pengguna harus memeriksa apakah metadata NFT berada di on-chain, terdesentralisasi, dapat diubah, atau dikendalikan otoritas proyek.

Kontrak NFT Solidity terverifikasi dapat menunjukkan aturan mint, batas suplai, perilaku royalti, pembatasan transfer, dan izin admin.

Namun, banyak risiko NFT bukan hanya risiko kode.

Risiko NFT juga mencakup koleksi palsu, karya seni salinan, likuiditas lemah, metadata rusak, janji menyesatkan, dan manipulasi marketplace.

Solidity menyediakan logika kepemilikan, tetapi tidak menjamin nilai budaya atau permintaan di masa depan.

Pembeli NFT harus menggabungkan tinjauan kontrak dengan verifikasi koleksi dan analisis likuiditas.

Solidity dan DAO

Solidity sering digunakan untuk membangun kontrak tata kelola DAO.

Kontrak DAO dapat mengelola proposal, kekuatan voting, delegasi, timelock, eksekusi treasury, dan izin peran.

Kontrak tata kelola dapat memungkinkan pemegang token atau anggota memberikan suara atas perubahan protokol.

Kontrak ini juga dapat mengendalikan tindakan sensitif seperti upgrade, transfer treasury, perubahan parameter, dan jeda darurat.

Kontrak DAO membutuhkan desain cermat karena serangan tata kelola dapat memengaruhi aset nyata.

Sistem voting yang dirancang buruk dapat rentan terhadap partisipasi rendah, pembelian suara, voting flash loan, kontrol whale, atau eksekusi terburu-buru.

Timelock dapat memberi pengguna waktu untuk bereaksi sebelum perubahan yang disetujui berlaku.

Kontrol darurat dapat mengurangi kerusakan, tetapi juga menimbulkan kekuasaan terpusat.

Solidity memberi DAO tool tata kelola terprogram, tetapi keamanan tata kelola bergantung pada kode dan koordinasi manusia.

Pengguna harus meninjau siapa yang dapat mengubah protokol dan seberapa cepat perubahan dapat terjadi.

Risiko Keamanan Solidity

Keamanan Solidity adalah salah satu topik terpenting dalam pengembangan kripto.

Dokumentasi pertimbangan keamanan Solidity mencakup risiko seperti reentrancy, batas gas, pengiriman dan penerimaan ether, tx.origin, detail kecil, dan masalah terkait compiler.

Reentrancy dapat terjadi ketika kontrak memanggil kontrak eksternal sebelum memperbarui state-nya sendiri secara aman.

Bug kontrol akses dapat memungkinkan pengguna tidak berwenang memanggil fungsi sensitif.

Kesalahan integer dan pencatatan dapat menciptakan saldo keliru atau logika biaya yang rusak.

Kesalahan oracle dapat menyebabkan harga keliru dan likuidasi yang tidak adil.

Kesalahan upgrade dapat mengganti logika aman dengan logika tidak aman.

Pemanggilan eksternal tanpa pemeriksaan dapat menciptakan jalur eksekusi yang tidak terduga.

Kesalahan verifikasi signature dapat memungkinkan serangan replay atau persetujuan palsu.

Keamanan smart contract memerlukan threat modeling, pengujian, peninjauan, audit, pemantauan, dan desain konservatif.

Reentrancy

Reentrancy adalah kerentanan smart contract yang dikenal luas, ketika pemanggilan eksternal memungkinkan kontrak lain memanggil kembali sebelum kontrak pertama selesai memperbarui state-nya.

Hal ini dapat memungkinkan penarikan berulang, pencatatan rusak, atau alur kontrol yang tidak terduga.

Dokumentasi keamanan Solidity merekomendasikan pola Checks-Effects-Interactions sebagai salah satu cara untuk mengurangi risiko reentrancy.

Pola tersebut berarti kontrak harus terlebih dahulu memeriksa syarat, kemudian memperbarui state internal, dan terakhir berinteraksi dengan kontrak eksternal.

Perlindungan reentrancy juga dapat mencakup lock, desain pull-payment, dan peninjauan pemanggilan eksternal secara cermat.

Developer tidak boleh menganggap pengiriman aset tidak berbahaya.

Pemanggilan eksternal dapat mengeksekusi kode dan mengubah alur kontrol.

Pengguna harus berhati-hati terhadap protokol yang memiliki logika penarikan tanpa audit atau jalur callback kompleks.

Reentrancy bukan satu-satunya risiko Solidity, tetapi merupakan salah satu contoh terpenting mengapa logika smart contract berbeda dari perangkat lunak biasa.

Transfer yang tampak aman dapat menjadi berbahaya jika pembaruan state terjadi dalam urutan yang salah.

Kontrol Akses

Kontrol akses menentukan siapa yang dapat memanggil fungsi Solidity sensitif.

Fungsi penting dapat mencakup minting token, menjeda transfer, meng-upgrade kontrak, mengubah biaya, menetapkan oracle, menarik dana treasury, atau memberikan peran.

Kontrol akses dapat didasarkan pada address pemilik, peran, wallet multisignature, kontrak tata kelola, timelock, atau sistem izin kustom.

Kontrol akses yang lemah dapat memungkinkan penyerang atau orang dalam mengubah perilaku kontrak.

Kontrol akses yang terlalu terpusat juga dapat menciptakan risiko kepercayaan bagi pengguna.

Kontrak mungkin berfungsi secara teknis, tetapi tetap tidak aman jika satu private key dapat menguras dana atau mengubah aturan secara instan.

Developer harus merancang izin dengan prinsip least privilege, pemisahan peran yang jelas, dan rencana pemulihan.

Pengguna harus meninjau kekuasaan admin sebelum menyetor dana ke protokol.

Kode Solidity terverifikasi dapat mengungkap logika izin ketika kode sumber tersedia.

Risiko admin adalah risiko smart contract bahkan ketika tidak ada bug kode.

Keamanan Integer

Operasi integer penting dalam Solidity karena kontrak sering menangani saldo, saham, harga, biaya, bunga, dan reward.

Versi Solidity lama memerlukan perhatian manual lebih besar terhadap integer overflow dan underflow.

Solidity 0.8.x memperkenalkan aritmetika yang diperiksa secara default, yang melakukan revert pada sebagian besar kondisi overflow dan underflow kecuali blok unchecked digunakan.

Peningkatan keamanan ini tidak menghilangkan semua risiko matematika.

Developer masih dapat membuat kesalahan dalam pembulatan, presisi, faktor skala, perbedaan desimal, urutan biaya, dan pencatatan saham.

Blok unchecked dapat meningkatkan efisiensi gas pada kasus tertentu, tetapi harus digunakan secara cermat.

Kontrak DeFi sering menggunakan matematika fixed-point dan desimal token, yang dapat menimbulkan kesalahan rumit.

Auditor harus meninjau asumsi matematika dan edge case.

Pengguna harus memahami bahwa aritmetika aman tidak otomatis berarti ekonomi yang aman.

Rumus yang benar sama pentingnya dengan perlindungan overflow.

Oracle dan Data Eksternal

Kontrak Solidity tidak dapat mengakses data off-chain secara langsung dengan sendirinya.

Dokumentasi oracle Ethereum menjelaskan bahwa oracle menyediakan data dari dunia eksternal kepada smart contract.

Oracle dapat menyediakan harga, randomness, data bukti, data cuaca, data olahraga, informasi identitas, atau input off-chain lainnya.

Dalam DeFi, oracle harga sangat penting karena dapat menentukan nilai jaminan, likuidasi, minting, redemption, dan penyelesaian.

Desain oracle yang buruk dapat menyebabkan kerugian besar bahkan ketika kode Solidity ditulis dengan benar.

Developer sebaiknya menghindari ketergantungan pada harga spot yang mudah dimanipulasi dari pasar dengan likuiditas tipis.

Mereka juga perlu mempertimbangkan frekuensi pembaruan, perilaku fallback, keterlambatan data, dan circuit breaker.

Pengguna harus memeriksa sumber oracle yang digunakan protokol sebelum menyetor jaminan atau meminjam aset.

Solidity dapat menerapkan aturan berbasis oracle, tetapi tidak dapat membuat data buruk menjadi baik.

Data eksternal adalah salah satu asumsi kepercayaan terbesar dalam banyak sistem smart contract.

Kemampuan Upgrade

Kontrak Solidity sering disebut immutable, tetapi banyak proyek menggunakan pola upgrade untuk mengubah logika setelah deployment.

Kontrak yang dapat di-upgrade biasanya memisahkan kontrak proxy dari kontrak implementasi.

Proxy mempertahankan address dan storage, sedangkan implementasi memuat logika yang dapat diganti melalui fungsi upgrade.

Kemampuan upgrade dapat memperbaiki bug dan menambahkan fitur.

Kemampuan ini juga dapat menciptakan risiko kepercayaan karena admin atau tata kelola dapat mengubah aturan setelah pengguna menyetor dana.

Tata letak storage harus ditangani dengan cermat karena upgrade yang salah dapat merusak state.

Pengguna harus memeriksa apakah kontrak dapat di-upgrade, siapa yang mengendalikan upgrade, apakah terdapat timelock, dan apakah upgrade diumumkan secara publik.

Developer sebaiknya mendokumentasikan kewenangan upgrade dengan jelas.

Auditor sebaiknya meninjau implementasi saat ini dan kontrol upgrade.

Kemampuan untuk di-upgrade memang berguna, tetapi mengubah model kepercayaan pada kontrak Solidity.

Verifikasi Kode Sumber

Verifikasi kode sumber membantu pengguna memastikan bahwa kode sumber Solidity yang dipublikasikan sesuai dengan bytecode yang telah di-deploy.

Dokumentasi verifikasi Ethereum menjelaskan bahwa verifikasi membandingkan kode sumber kontrak dengan bytecode hasil kompilasi yang digunakan saat kontrak dibuat.

Verifikasi biasanya memerlukan file sumber yang tepat, versi compiler, pengaturan compiler, argumen constructor, alamat library, dan konfigurasi metadata.

Kode sumber yang terverifikasi meningkatkan transparansi karena pengguna dapat membaca logika di balik kontrak.

Verifikasi juga membantu wallet dan explorer menguraikan function call dan event.

Namun, verifikasi kode sumber tidak sama dengan audit.

Kontrak yang terverifikasi tetap dapat memiliki bug, kontrol admin yang tidak aman, risiko upgrade, atau desain ekonomi yang buruk.

Kontrak yang belum terverifikasi lebih sulit dipercaya karena pengguna tidak dapat dengan mudah membandingkan kode yang dapat dibaca manusia dengan bytecode yang di-deploy.

Pengguna sebaiknya berhati-hati jika sebuah situs meminta persetujuan atau deposit ke kontrak yang belum terverifikasi.

Verifikasi adalah langkah awal uji tuntas, bukan tahap akhirnya.

Versi Solidity

Versi Solidity penting karena bahasa ini terus berubah seiring waktu.

Versi baru dapat menghadirkan fitur, meningkatkan peringatan, mengubah pengaturan default, memperbaiki bug compiler, dan mendukung perilaku EVM yang baru.

Pengumuman rilis Solidity resmi memuat detail tentang rilis compiler dan perubahan bahasa.

Berdasarkan informasi rilis resmi yang tersedia pada 2026, Solidity 0.8.35 merupakan rilis compiler terbaru yang menghadirkan fungsionalitas baru dan fitur compiler eksperimental.

Proyek produksi sebaiknya tidak sembarangan memperbarui versi compiler.

Setiap upgrade compiler harus diuji karena bytecode, perilaku gas, peringatan, dan hasil build dapat berubah.

Developer sebaiknya membaca catatan rilis sebelum mengubah versi compiler.

Auditor sebaiknya meninjau versi compiler yang digunakan dalam build yang diaudit.

Pengguna yang meninjau kontrak terverifikasi sebaiknya memeriksa versi compiler yang ditampilkan di explorer.

Pemilihan versi Solidity merupakan bagian dari keamanan dan reproduktibilitas smart contract.

Bug Compiler Solidity

Bug compiler jarang terjadi, tetapi penting diperhatikan karena compiler mengubah kode sumber menjadi bytecode yang benar-benar berjalan secara on-chain.

Dokumentasi bug Solidity yang diketahui resmi mencatat bug compiler yang diketahui beserta versi yang terdampak.

Kontrak dapat terdampak masalah compiler meskipun kode sumbernya terlihat benar.

Developer sebaiknya memeriksa bug compiler yang diketahui sebelum men-deploy kontrak produksi.

Auditor sebaiknya memasukkan peninjauan versi compiler ke dalam proses audit.

Pengguna sebaiknya berhati-hati jika kontrak menggunakan versi compiler yang sangat lama tanpa alasan yang jelas.

Tidak semua versi compiler lama otomatis tidak aman, tetapi versi lama mungkin belum memiliki pemeriksaan dan perbaikan yang lebih baru.

Tim smart contract sebaiknya memperlakukan compiler sebagai bagian dari rantai pasokan software tepercaya mereka.

Build yang dapat direproduksi dan pengaturan compiler yang tercatat membantu mengidentifikasi kemungkinan dampak bug yang diketahui.

Risiko compiler menjadi alasan lain mengapa artefak deployment perlu disimpan.

Perangkat Pengembangan Solidity

Developer Solidity biasanya menggunakan perangkat untuk menulis, mengompilasi, menguji, men-deploy, memverifikasi, dan memantau kontrak.

Remix IDE resmi adalah lingkungan berbasis browser yang umum digunakan untuk mempelajari, menulis, mengompilasi, dan menguji kontrak Solidity.

Framework command-line dan lingkungan pengembangan lokal dapat mengotomatisasi kompilasi, pengujian, deployment, fork testing, dan verifikasi.

Perangkat analisis statis dapat memindai kode Solidity untuk mencari kerentanan umum dan pola berisiko.

Perangkat fuzz testing dapat menghasilkan banyak input untuk menemukan perilaku yang tidak terduga.

Perangkat formal verification dapat membuktikan properti tertentu berdasarkan asumsi yang ditetapkan.

Tidak ada satu perangkat pun yang dapat menjamin keamanan.

Pengembangan Solidity profesional biasanya menggabungkan unit test, integration test, fuzz test, code review, audit, skrip deployment, pemantauan, dan perencanaan respons insiden.

Pemula sebaiknya memulai dengan kontrak kecil dan jaringan uji sebelum menggunakan dana sungguhan.

Tim berpengalaman sebaiknya menggunakan pipeline build yang dapat direproduksi dan kontrol rilis yang ketat.

Menguji Kontrak Solidity

Pengujian sangat penting karena smart contract yang telah di-deploy dapat mengelola aset bernilai tinggi.

Unit test memeriksa function individual dan perilaku yang diharapkan.

Integration test memeriksa cara beberapa kontrak bekerja bersama.

Fork test menyimulasikan perilaku kontrak menggunakan state chain nyata yang disalin ke lingkungan lokal.

Fuzz test mencoba banyak input acak atau terstruktur untuk menemukan kasus ekstrem.

Invariant test memeriksa apakah aturan penting tetap berlaku dalam berbagai tindakan.

Pengujian sebaiknya mencakup alur normal, alur kegagalan, pemeriksaan izin, kasus ekstrem, dan skenario pengguna berbahaya.

Developer sebaiknya menguji dengan desimal token yang realistis, perilaku token yang tidak biasa, nilai tinggi, nilai nol, dan kondisi batas.

Pengujian tidak dapat membuktikan bahwa semua kemungkinan perilaku aman, tetapi dapat mengurangi kesalahan yang sebenarnya bisa dicegah.

Kode Solidity yang belum diuji sebaiknya tidak dipercaya untuk mengelola dana dalam jumlah berarti.

Audit

Audit smart contract adalah peninjauan keamanan oleh spesialis yang memeriksa kode Solidity, arsitektur, izin, pengujian, dan asumsi risiko.

Audit dapat menemukan bug, kelemahan desain, masalah kontrol akses, risiko ekonomi, masalah upgrade, dan kekurangan dokumentasi.

Audit tidak menjamin bahwa sebuah kontrak aman.

Audit merupakan proses pengurangan risiko, bukan perlindungan sempurna.

Kualitas audit bergantung pada cakupan, waktu, keahlian auditor, cakupan pengujian, dokumentasi, dan cara tim memperbaiki temuan.

Pengguna sebaiknya membaca apakah temuan audit telah diperbaiki atau diterima tanpa perbaikan.

Pengguna juga sebaiknya memeriksa apakah kontrak yang di-deploy sesuai dengan commit dan pengaturan compiler yang diaudit.

Sebuah proyek dapat diaudit, tetapi kemudian men-deploy upgrade yang belum diaudit.

Audit paling bermanfaat jika digabungkan dengan verifikasi publik, bug bounty, pemantauan, dan batas peluncuran yang konservatif.

Kontrak Solidity yang mengelola nilai besar sebaiknya ditinjau secara serius sebelum deployment ke mainnet.

Solidity dan Interaksi Wallet

Wallet membantu pengguna menandatangani transaksi yang memanggil kontrak Solidity.

Wallet dapat menampilkan alamat kontrak, nama function, parameter, persetujuan aset, gas fee, dan pesan peringatan.

Wallet tidak selalu mengetahui apakah sebuah kontrak aman.

Situs berbahaya dapat meminta pengguna menandatangani transaksi berbahaya yang memanggil function Solidity yang sebenarnya dengan cara yang merugikan.

Persetujuan token sangat penting karena persetujuan dapat mengizinkan kontrak menggunakan token dari wallet hingga jumlah tertentu.

Pengguna sebaiknya memeriksa jumlah persetujuan dan alamat kontrak sebelum menandatangani.

Pengguna sebaiknya tidak menandatangani transaksi yang tidak mereka pahami.

Pengguna sebaiknya berhati-hati jika antarmuka menyembunyikan calldata atau meminta persetujuan tanpa batas.

Solidity memungkinkan interaksi yang dapat diprogram, tetapi pengguna tetap memegang kendali atas tanda tangan dari wallet mereka.

Tanda tangan transaksi dapat memindahkan dana secara permanen atau memberikan izin.

Solidity dan Persetujuan Token

Persetujuan token adalah pola Solidity umum yang memungkinkan satu alamat menggunakan token atas nama alamat lain.

Pada token bergaya ERC-20, approve menetapkan allowance, sedangkan transferFrom menggunakan allowance tersebut.

Desain ini memungkinkan swap DeFi, deposit, pembayaran, dan tindakan otomatis.

Desain ini juga menimbulkan risiko karena spender yang berbahaya atau telah diretas dapat menggunakan persetujuan untuk memindahkan token hingga batas yang disetujui.

Persetujuan tanpa batas memang praktis, tetapi meningkatkan eksposur risiko.

Jika memungkinkan, pengguna sebaiknya hanya menyetujui jumlah yang diperlukan.

Pengguna sebaiknya mencabut persetujuan yang tidak lagi digunakan melalui wallet atau perangkat keamanan tepercaya.

Developer sebaiknya merancang antarmuka yang menjelaskan persetujuan dengan jelas.

Auditor sebaiknya memeriksa penanganan allowance untuk mencari kondisi race, pemeriksaan yang tidak ada, dan asumsi yang tidak aman.

Persetujuan adalah salah satu cara paling umum bagi pengguna biasa untuk berinteraksi dengan risiko Solidity.

Solidity dan Formal Verification

Formal verification menggunakan metode matematika untuk membuktikan bahwa properti kontrak tertentu berlaku berdasarkan asumsi yang ditetapkan.

Metode ini dapat berguna untuk sistem bernilai tinggi, protokol keuangan, bridge, modul tata kelola, dan logika akuntansi inti.

Sebuah properti dapat menyatakan bahwa total suplai tidak pernah melebihi batas atau pengguna tidak dapat menarik lebih dari saldo mereka.

Formal verification tidak menghilangkan kebutuhan akan pengujian dan audit.

Metode ini hanya membuktikan properti yang benar-benar ditentukan.

Jika spesifikasinya tidak lengkap atau keliru, pembuktian tersebut dapat melewatkan risiko di dunia nyata.

Metode formal dapat memerlukan biaya besar dan pengetahuan khusus.

Metode ini paling efektif jika diterapkan pada logika penting dengan aturan yang jelas.

Dalam Solidity, formal verification merupakan bagian dari proses keamanan yang matang.

Metode ini sangat berguna ketika kegagalan kontrak dapat menimbulkan kerugian besar.

Kelebihan Solidity

Kelebihan pertama Solidity adalah adopsi ekosistemnya.

Banyak perangkat smart contract, tutorial, audit, standar, library, dan komunitas developer mendukung Solidity.

Kelebihan kedua adalah kompatibilitas EVM.

Kontrak Solidity dapat digunakan di Ethereum dan lingkungan lain yang mendukung EVM jika aturan jaringan dan pengaturan deployment kompatibel.

Kelebihan ketiga adalah composability.

Kontrak Solidity dapat memanggil kontrak lain serta memanfaatkan standar token dan antarmuka protokol yang sudah ada.

Kelebihan keempat adalah ekspresivitas.

Developer dapat membangun token, sistem DeFi, DAO, game, NFT, dan logika keuangan otomatis.

Kelebihan kelima adalah transparansi karena kode sumber Solidity yang terverifikasi dapat dibaca dan ditinjau oleh pengguna serta auditor.

Kelebihan-kelebihan ini menjelaskan mengapa Solidity tetap menjadi salah satu bahasa smart contract terpenting di dunia kripto.

Risiko dan Keterbatasan Solidity

Risiko pertama adalah bug yang dapat menimbulkan kerugian besar dan sulit diperbaiki setelah deployment.

Risiko kedua adalah siapa pun yang menemukan kelemahan dapat mengeksploitasi logika smart contract.

Risiko ketiga adalah kontrak Solidity sering berinteraksi dengan kontrak lain sehingga menimbulkan risiko dependensi.

Risiko keempat adalah biaya gas yang dapat membuat beberapa desain tidak praktis.

Risiko kelima adalah kemampuan upgrade yang dapat menimbulkan risiko kepercayaan pada admin atau tata kelola.

Risiko keenam adalah kode sumber yang terverifikasi tetap dapat berbahaya atau dirancang dengan buruk.

Risiko ketujuh adalah developer dapat salah memahami perilaku EVM, tata letak storage, reentrancy, atau external call.

Risiko kedelapan adalah pengguna dapat menandatangani transaksi berbahaya tanpa memahami tindakan yang akan dilakukan kontrak Solidity.

Risiko kesembilan adalah masalah oracle dan desain ekonomi dapat merusak protokol meskipun sintaksnya benar.

Risiko kesepuluh adalah pengaturan compiler dan versi dependensi dapat mengubah bytecode akhir yang di-deploy.

Kesalahan Umum dalam Solidity

Salah satu kesalahan umum adalah menulis kontrol akses yang tidak melindungi function sensitif.

Kesalahan lainnya adalah melakukan external call sebelum memperbarui state internal dengan aman.

Kesalahan ketiga adalah memercayai tx.origin untuk otorisasi, yang tidak disarankan dalam dokumentasi keamanan Solidity.

Kesalahan keempat adalah mengabaikan desimal token dan masalah presisi dalam perhitungan.

Kesalahan kelima adalah menganggap semua token bergaya ERC-20 memiliki perilaku yang sama persis.

Kesalahan keenam adalah menggunakan kontrak yang dapat di-upgrade tanpa mempertahankan tata letak storage.

Kesalahan ketujuh adalah men-deploy dengan pengaturan compiler yang berbeda dari build yang diaudit.

Kesalahan kedelapan adalah mengabaikan peringatan compiler.

Kesalahan kesembilan adalah memberikan terlalu banyak kewenangan kepada satu kunci admin.

Kesalahan kesepuluh adalah meluncurkan kontrak sebelum menguji kasus ekstrem dan skenario kegagalan.

Cara Mengevaluasi Kontrak Solidity

Mulailah dengan memeriksa apakah kode sumber kontrak telah terverifikasi.

Kemudian periksa versi compiler, pengaturan optimizer, argumen constructor, dan library yang ditautkan.

Tinjau apakah kontrak dapat di-upgrade dan siapa yang mengendalikan upgrade.

Periksa peran admin, izin owner, kontrol multisignature, timelock, dan function darurat.

Saat mengevaluasi kontrak token, tinjau pembatasan minting, burning, pausing, blacklisting, biaya, dan transfer.

Saat mengevaluasi kontrak DeFi, tinjau sumber oracle, aturan agunan, logika likuidasi, dan akuntansi.

Periksa apakah audit tersedia dan apakah temuan audit telah diperbaiki.

Bandingkan alamat kontrak yang di-deploy dengan sumber resmi proyek.

Tinjau transaksi dan event terbaru untuk mengetahui cara kontrak digunakan.

Kontrak Solidity sebaiknya dievaluasi secara menyeluruh dari sisi kode, infrastruktur, tata kelola, dan desain ekonomi.

Praktik Terbaik untuk Developer

Gunakan versi compiler Solidity stabil yang terbaru setelah membaca catatan rilis dan menguji perilakunya.

Tetapkan versi compiler dan dependensi untuk build produksi.

Perlakukan peringatan compiler sebagai hal yang perlu ditinjau, bukan gangguan yang bisa diabaikan.

Gunakan kontrol akses yang jelas dan izin dengan hak seminimal mungkin.

Jika relevan, ikuti pola external call yang aman seperti Checks-Effects-Interactions.

Buat pengujian untuk alur normal, alur kegagalan, kasus ekstrem, dan perilaku pengguna berbahaya.

Gunakan analisis statis, fuzz testing, dan audit untuk kontrak yang mengelola nilai berarti.

Dokumentasikan kewenangan admin, kewenangan upgrade, asumsi oracle, dan kontrol darurat.

Verifikasi kode sumber setelah deployment dengan pengaturan compiler yang sama persis.

Pantau kontrak yang telah di-deploy dan siapkan rencana respons insiden sebelum peluncuran.

Praktik Terbaik untuk Pengguna

Periksa apakah kontrak telah terverifikasi sebelum berinteraksi dengannya.

Bandingkan alamat kontrak dengan sumber resmi proyek alih-alih memercayai tautan dari pesan acak.

Tinjau persetujuan token sebelum menandatangani transaksi.

Berhati-hatilah dengan persetujuan tanpa batas dan cabut izin yang tidak digunakan jika memungkinkan.

Periksa apakah kontrak dapat di-upgrade dan siapa yang mengendalikan upgrade.

Jangan menganggap kontrak terverifikasi telah diaudit atau aman.

Jangan melakukan deposit ke kontrak yang tidak Anda pahami atau tidak dapat Anda percayai secara mandiri.

Gunakan hardware wallet atau keamanan wallet yang kuat untuk interaksi bernilai tinggi.

Berhati-hatilah dengan kontrak Solidity baru, belum diaudit, menawarkan imbal hasil tinggi, atau tanpa identitas yang jelas.

Ingat bahwa transaksi blockchain biasanya tidak dapat dibatalkan setelah dikonfirmasi.

FAQ

Untuk apa Solidity digunakan?

Solidity digunakan untuk menulis smart contract bagi Ethereum dan lingkungan blockchain lain yang kompatibel dengan EVM.

Apakah Solidity adalah mata uang kripto?

Bukan. Solidity adalah bahasa pemrograman, bukan mata uang kripto atau token.

Apakah Solidity hanya digunakan untuk Ethereum?

Solidity dirancang untuk Ethereum, tetapi juga digunakan di jaringan blockchain lain yang mendukung Ethereum Virtual Machine atau lingkungan eksekusi yang kompatibel.

Apa itu smart contract Solidity?

Smart contract Solidity adalah kode blockchain yang menetapkan aturan untuk menyimpan data, menangani transaksi, mengelola aset, serta berinteraksi dengan pengguna atau kontrak lain.

Apa itu compiler Solidity?

Compiler Solidity, yang disebut solc, mengubah kode sumber Solidity menjadi bytecode EVM, data ABI, metadata, dan hasil build lainnya.

Apa itu ABI dalam Solidity?

ABI adalah Application Binary Interface yang memberi tahu wallet, aplikasi, dan skrip cara memanggil function kontrak serta menguraikan responsnya.

Apakah Solidity aman?

Solidity dapat digunakan dengan aman, tetapi keamanan smart contract bergantung pada desain yang aman, pengujian, audit, pengaturan compiler, kontrol akses, dan deployment yang cermat.

Apakah kontrak Solidity dapat diubah setelah deployment?

Kontrak dasar yang telah di-deploy biasanya tidak dapat diubah, tetapi pola proxy yang dapat di-upgrade memungkinkan logika kontrak diubah jika terdapat izin upgrade.

Mengapa kontrak Solidity perlu diaudit?

Kontrak Solidity sering mengelola aset bernilai tinggi. Karena itu, audit membantu menemukan bug, masalah izin, kelemahan ekonomi, dan asumsi yang tidak aman sebelum atau sesudah deployment.

Bagaimana cara pengguna memeriksa kontrak Solidity?

Pengguna dapat memeriksa verifikasi kode sumber, pengaturan compiler, alamat kontrak, audit, izin admin, kemampuan upgrade, persetujuan token, riwayat transaksi, dan dokumentasi resmi proyek.

Kesimpulan

Solidity merupakan salah satu bahasa pemrograman terpenting dalam ekosistem kripto karena memungkinkan pembuatan smart contract untuk token, DeFi, NFT, DAO, sistem staking, dan banyak aplikasi on-chain lainnya.

Solidity memungkinkan developer menulis aturan yang dapat dibaca manusia, lalu mengompilasinya menjadi bytecode EVM untuk dijalankan oleh node blockchain.

Keunggulan Solidity berasal dari ekosistemnya yang besar, standar smart contract, composability, perangkat pengembangan, dan dukungan EVM yang luas.

Risikonya berasal dari fakta bahwa kode yang telah di-deploy dapat mengendalikan aset sungguhan dan mungkin sulit diperbaiki setelah deployment.

Pengembangan Solidity yang baik memerlukan pengaturan compiler yang cermat, pengujian, audit, kontrol akses, perencanaan upgrade, pemahaman biaya gas, dan peninjauan keamanan.

Penggunaan Solidity yang baik mengharuskan pengguna memverifikasi alamat kontrak, membaca izin, mengelola persetujuan, memeriksa audit, dan menghindari kontrak yang tidak dikenal atau belum terverifikasi.

Bagi pemula, Solidity paling mudah dipahami sebagai bahasa yang digunakan developer untuk menulis program blockchain.

Bagi pengguna berpengalaman, Solidity adalah bahasa smart contract yang keamanannya bergantung pada kualitas kode, perilaku EVM, konfigurasi compiler, dependensi eksternal, tata kelola, dan desain ekonomi.

Dalam konteks glosarium kripto, Solidity berarti bahasa tingkat tinggi utama yang digunakan untuk membangun dan men-deploy smart contract yang berjalan di lingkungan blockchain bergaya Ethereum.

Intinya, Solidity memungkinkan kripto yang dapat diprogram, tetapi setiap kontrak Solidity perlu diperlakukan sebagai software berisiko tinggi yang memerlukan verifikasi, peninjauan keamanan, dan pertimbangan pengguna yang cermat.
Menarik Kembali / Peluang?
Menarik Kembali / Peluang?Menarik Kembali / Peluang?
Simak arus masuk ETF BTC $2,4 miliar pada likuidasi