Langsung ke konten utama

Perlu dicatat Built-in Global Variable pada Solidity

Solidity, sebagai bahasa pemrograman untuk membuat smart contract di Ethereum dan blockchain lainnya, menyediakan beberapa variabel global bawaan. Variabel ini memungkinkan akses mudah ke informasi tentang blockchain, transaksi, dan konteks eksekusi. Dengan menggunakan variabel ini, pengembang dapat berinteraksi dengan lingkungan blockchain tanpa perlu menulis banyak kode tambahan. Berikut penjelasan kategori dan variabel global yang umum digunakan:

1. Informasi Blockchain

Variabel-variabel ini menyediakan informasi terkait blockchain, seperti blok saat ini dan propertinya.

  • block.number
    Mengembalikan nomor blok saat ini.
    Contoh:

    uint nomorBlokSaatIni = block.number;
    
  • block.timestamp
    Waktu pembuatan blok saat ini dalam format detik sejak Unix epoch. Biasanya digunakan untuk mendapatkan waktu saat ini.
    Contoh:

    require(block.timestamp >= waktuMulai, "Terlalu awal untuk eksekusi!");
    
  • block.difficulty
    Tingkat kesulitan penambangan pada blok saat ini.
    Contoh:

    uint kesulitan = block.difficulty;
    
  • block.gaslimit
    Jumlah maksimum gas yang dapat digunakan dalam blok saat ini.
    Contoh:

    uint gasLimit = block.gaslimit;
    
  • block.coinbase
    Alamat penambang (miner) yang menerima reward untuk blok saat ini.
    Contoh:

    address penambang = block.coinbase;
    

2. Informasi Transaksi

Variabel-variabel ini memberikan detail tentang transaksi yang sedang berlangsung.

  • tx.gasprice
    Harga gas untuk transaksi saat ini.
    Contoh:

    uint hargaGas = tx.gasprice;
    
  • tx.origin
    Alamat akun pengirim asli dari transaksi. Berbeda dengan msg.sender, karena tx.origin selalu merujuk ke pengirim asli, meskipun ada beberapa panggilan antar kontrak.
    Contoh:

    require(tx.origin == pemilik, "Hanya pemilik kontrak yang dapat melakukan ini!");
    

    Catatan: Hindari menggunakan tx.origin untuk otentikasi karena rentan terhadap serangan phishing.


3. Informasi Pesan (Call)

Variabel-variabel ini memberikan detail tentang pemanggilan fungsi atau pesan yang dikirim ke kontrak.

  • msg.sender
    Alamat akun atau kontrak yang memanggil fungsi.
    Contoh:

    address pemanggil = msg.sender;
    
  • msg.value
    Jumlah Ether (dalam wei) yang dikirim bersama transaksi.
    Contoh:

    require(msg.value == 1 ether, "Kirim tepat 1 Ether!");
    
  • msg.data
    Data panggilan lengkap (calldata) dari fungsi yang dipanggil.
    Contoh:

    bytes data = msg.data;
    
  • msg.sig
    4 byte pertama dari calldata, yang mewakili tanda tangan fungsi.
    Contoh:

    bytes4 tandaTangan = msg.sig;
    

4. Informasi Gas

Variabel-variabel ini memberikan informasi tentang gas yang digunakan atau tersedia selama eksekusi.

  • gasleft()
    Mengembalikan jumlah gas yang tersisa untuk transaksi saat ini.
    Contoh:
    uint gasTersisa = gasleft();
    

5. Informasi Kontrak

Variabel-variabel ini memberikan informasi tentang kontrak yang sedang dieksekusi.

  • address(this)
    Alamat kontrak saat ini.
    Contoh:

    address alamatKontrak = address(this);
    
  • this.balance
    Saldo (dalam wei) kontrak saat ini.
    Contoh:

    uint saldoKontrak = address(this).balance;
    

6. Variabel Kontekstual Lainnya

  • blockhash(uint blockNumber)
    Mengembalikan hash dari nomor blok tertentu. Hanya berfungsi untuk 256 blok terbaru.
    Contoh:
    bytes32 hashBlok = blockhash(block.number - 1);
    

Catatan Penggunaan

  1. Efisiensi Gas: Gunakan variabel global secara bijaksana karena beberapa (seperti blockhash) mungkin memerlukan biaya gas tambahan.
  2. Keamanan: Hindari menggunakan variabel seperti block.timestamp atau tx.origin untuk logika penting, seperti menghasilkan angka acak atau otentikasi, karena dapat dimanipulasi.

Variabel global bawaan ini mempermudah pengembangan kontrak pintar yang responsif dan kontekstual!


Komentar

Postingan populer dari blog ini

Membuat Aplikasi Web ASP.NET Core di Visual Studio 2022

Artikel ini membahas langkah-langkah membuat aplikasi ASP.NET Core menggunakan Visual Studio 2022 dan framework .NET 8. 1. Membuka Visual Studio 2022 Buka Visual Studio 2022 dan klik "Create a new project" di layar awal. 2. Memilih Template Proyek Di jendela "Create a new project" , pilih template ASP.NET Core Empty . Template ini memberikan struktur dasar tanpa konfigurasi awal seperti controller, view, atau API. Setelah itu, klik Next . 3. Konfigurasi Proyek Baru Isi informasi proyek seperti berikut: Project Name : Masukkan nama proyek, misalnya FirstCoreWebApplication . Location : Tentukan lokasi folder untuk menyimpan proyek, misalnya D:\Projects . Solution Name : Biasanya sama dengan nama proyek, tetapi bisa diubah jika diperlukan. Centang "Place solution and project in the same directory" jika solusi dan proyek ingin disimpan dalam satu folder. Klik Create untuk melanjutkan. 4. Pengaturan Tambahan Pada jendela "Additional Information...

Remix IDE: Solusi Praktis untuk Menulis dan Deploy Kontrak Pintar

Remix IDE  adalah lingkungan pengembangan terintegrasi berbasis web yang dirancang untuk menulis, mengompilasi, dan menyebarkan smart contract menggunakan bahasa pemrograman  Solidity  di blockchain Ethereum. Alat ini banyak digunakan oleh pengembang blockchain karena kemudahannya dalam menyediakan fitur lengkap untuk pengembangan, pengujian, dan debugging kontrak pintar. Fitur Utama Remix IDE Berbasis Web dan Gratis Tidak perlu diunduh atau diinstal. Anda dapat mengakses Remix langsung melalui browser di  remix.ethereum.org . Karena berbasis web, Remix dapat digunakan di berbagai perangkat selama ada akses internet. Editor Kode Mendukung penulisan kode Solidity dengan penyorotan sintaks, autocompletion, dan validasi kesalahan. Fitur penyorotan kesalahan (error highlighting) memudahkan pengembang untuk menemukan bug pada kode. Compiler Solidity Remix menyediakan compiler bawaan untuk mengonversi kode Solidity menjadi bytecode yang dapat dijalankan di Ethereum Virtual...