Sebagai pemasok ether, saya memahami pentingnya memperkirakan secara akurat data penerapan kontrak saat bekerja dengan blockchain Ethereum. Dalam postingan blog ini, saya akan berbagi beberapa wawasan tentang cara mendapatkan perkiraan data penerapan kontrak menggunakan ethers.js, pustaka JavaScript populer untuk berinteraksi dengan blockchain Ethereum.
Memahami Penerapan Kontrak di Ethereum
Sebelum kita menyelami detail teknis dalam memperkirakan data penerapan kontrak, mari kita pahami secara singkat apa saja yang diperlukan dalam penerapan kontrak di Ethereum. Saat Anda menerapkan kontrak pintar di blockchain Ethereum, pada dasarnya Anda membuat kode kontrak baru dan menyimpannya di blockchain. Proses ini memerlukan pengiriman transaksi ke jaringan, yang mencakup bytecode kontrak dan argumen konstruktor yang diperlukan.
Biaya penggelaran kontrak ditentukan oleh jumlah gas yang dibutuhkan untuk melaksanakan transaksi penggelaran. Gas adalah unit pengukuran kerja komputasi yang diperlukan untuk mengeksekusi transaksi di jaringan Ethereum. Semakin kompleks kode kontrak dan semakin besar argumen pembuatnya, semakin banyak gas yang dibutuhkan untuk penerapannya.
Prasyarat
Untuk mengikuti contoh dalam postingan blog ini, Anda harus memiliki yang berikut:
- Node.js diinstal pada mesin Anda
- Pemahaman dasar tentang JavaScript dan blockchain Ethereum
- Keakraban dengan ethers.js
Anda dapat menginstal ethers.js menggunakan npm dengan menjalankan perintah berikut:
npm instal eter
Memperkirakan Data Penerapan Kontrak dengan ethers.js
Untuk memperkirakan data penerapan kontrak, kita perlu melakukan langkah-langkah berikut:
- Kompilasi kontrak pintar untuk mendapatkan bytecode dan ABI.
- Buat instance baru dari ethers.js
Pabrik Kontrakkelas. - Gunakan
Pabrik Kontrakuntuk memperkirakan gas yang dibutuhkan untuk penyebaran.
Mari kita bahas setiap langkah secara detail.
Langkah 1: Kompilasi Kontrak Cerdas
Langkah pertama adalah mengkompilasi smart contract untuk mendapatkan bytecode dan ABI. Anda dapat menggunakan alat sepertisolc(kompiler Soliditas) untuk mengkompilasi kontrak Anda. Berikut ini contoh cara menyusun kontrak Soliditas sederhana menggunakansolcdalam skrip Node.js:
const solc = memerlukan('solc'); const fs = memerlukan('fs'); // Baca kode sumber kontrak const sourceCode = fs.readFileSync('SimpleContract.sol', 'utf8'); // Kompilasi kontrak const input = { bahasa: 'Soliditas', sumber: { 'SimpleContract.sol': { konten: sourceCode } }, pengaturan: { outputSelection: { '*': { '*': ['abi', 'evm.bytecode'] } } } }; keluaran const = JSON.parse(solc.kompilasi(JSON.stringify(input))); kontrak const = keluaran.kontrak['SimpleContract.sol']['SimpleContract']; const bytecode = kontrak.evm.bytecode.object; const abi = kontrak.abi; console.log('Kode Byte:', bytecode); konsol.log('ABI:', abi);
Dalam contoh ini, kita membaca kode sumber kontrak Soliditas sederhana dari file bernamaKontrak Sederhana.sol. Kami kemudian mengkompilasi kontrak menggunakansolcdan ekstrak bytecode dan ABI dari output kompilasi.
Langkah 2: Buat instance baru dariPabrik Kontrakkelas
Setelah kita memiliki bytecode dan ABI, kita dapat membuat instance baru dariPabrik Kontrakkelas dari ethers.js. ItuPabrik Kontrakkelas digunakan untuk menyebarkan instance baru dari kontrak pintar. Berikut ini contohnya:
const { eter } = memerlukan('eter'); // Hubungkan ke penyedia const jaringan Ethereum = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'); const wallet = new ethers.Wallet('YOUR_PRIVATE_KEY', penyedia); // Buat instance ContractFactory baru const contractFactory = new ethers.ContractFactory(abi, bytecode, wallet);
Dalam contoh ini, kami terhubung ke mainnet Ethereum menggunakan penyedia Infura. Anda harus menggantinyaANDA_INFURA_PROJECT_IDdengan ID proyek Infura Anda yang sebenarnya. Kami juga membuat instance dompet baru menggunakan kunci pribadi. MenggantiKUNCI_PRIVATE_ANDAdengan kunci pribadi Anda yang sebenarnya.
Langkah 3: Perkirakan Gas yang Dibutuhkan untuk Penerapan
Setelah kita memilikinyaPabrik KontrakMisalnya, kita dapat menggunakannya untuk memperkirakan gas yang dibutuhkan untuk penyebaran. ItuPabrik Kontrakkelas memiliki metode yang disebutdapatkanDeployTransactionyang mengembalikan objek transaksi yang mewakili transaksi penerapan. Kami kemudian dapat menggunakanperkiraanGasmetode penyedia untuk memperkirakan gas yang dibutuhkan untuk transaksi. Berikut ini contohnya:
// Perkirakan jumlah gas yang dibutuhkan untuk penerapan const deployTransaction = contractFactory.getDeployTransaction(); const estimasiGas = menunggu penyedia.estimateGas(deployTransaction); console.log('Perkiraan bahan bakar untuk penempatan:', estimasiGas.toString());
Dalam contoh ini, kami memanggildapatkanDeployTransactionmetodePabrik Kontrakuntuk mendapatkan objek transaksi penerapan. Kami kemudian menggunakanperkiraanGasmetode penyedia untuk memperkirakan gas yang dibutuhkan untuk transaksi. Estimasi gas dikembalikan sebagai aNomor Besar, jadi kami mengonversinya menjadi string sebelum memasukkannya ke konsol.
Faktor-Faktor yang Mempengaruhi Estimasi Kontrak Penggunaan Gas
Estimasi gas untuk kontrak penyebaran dapat dipengaruhi oleh beberapa faktor, antara lain:


- Kompleksitas Kontrak: Semakin kompleks kode kontraknya, semakin banyak gas yang dibutuhkan untuk penerapannya.
- Argumen Konstruktor: Jika kontrak Anda memiliki argumen konstruktor, ukuran dan kompleksitas argumen ini juga dapat memengaruhi perkiraan bahan bakar.
- Kemacetan Jaringan: Keadaan jaringan Ethereum saat ini juga dapat mempengaruhi perkiraan gas. Selama periode kemacetan jaringan yang tinggi, harga gas mungkin lebih tinggi, sehingga dapat meningkatkan biaya penerapan secara keseluruhan.
Kesimpulan
Memperkirakan data penerapan kontrak merupakan langkah penting dalam proses penerapan kontrak pintar di blockchain Ethereum. Dengan menggunakan ethers.js, kami dapat dengan mudah memperkirakan gas yang dibutuhkan untuk penerapan dan merencanakan transaksi kami dengan tepat.
Jika Anda tertarik membeli eter untuk proyek blockchain Anda, kami adalah pemasok eter yang andal. Kami menawarkan eter berkualitas tinggi sepertiMetil Tert-Butil Eter (MTBE),Etilen Glikol Monobutil Eter (BCS, EB), DanTrietilen Glikol Monobutil Eter (TBG, TB). Hubungi kami untuk mendiskusikan kebutuhan pengadaan Anda dan memulai kemitraan yang sukses.
Referensi
- dokumentasi ethers.js: https://docs.ethers.io/v5/
- Dokumentasi soliditas: https://docs.soliditylang.org/
- Situs web resmi Ethereum: https://ethereum.org/
