Bir Ether tedarikçisi olarak, Ethereum blockchain ile çalışırken sözleşme dağıtım verilerini doğru bir şekilde tahmin etmenin önemini anlıyorum. Bu blog yazısında, Ethereum blockchain ile etkileşime geçmek için popüler bir JavaScript kitaplığı olan eters.js'yi kullanarak sözleşme dağıtım veri tahmininin nasıl elde edileceğine dair bazı bilgiler paylaşacağım.
Ethereum'da Sözleşme Dağıtımını Anlamak
Sözleşme dağıtım verilerini tahmin etmenin teknik ayrıntılarına dalmadan önce, Ethereum'da sözleşme dağıtımının neleri gerektirdiğini kısaca anlayalım. Ethereum blok zincirinde akıllı bir sözleşme dağıttığınızda, esasen sözleşme kodunun yeni bir örneğini oluşturur ve onu blok zincirinde saklarsınız. Bu süreç, sözleşme bayt kodunu ve gerekli yapıcı argümanlarını içeren bir işlemin ağa gönderilmesini gerektirir.
Bir sözleşmeyi dağıtmanın maliyeti, dağıtım işlemini gerçekleştirmek için gereken gas miktarına göre belirlenir. Gaz, Ethereum ağında bir işlemi yürütmek için gereken hesaplama çalışmasına yönelik bir ölçüm birimidir. Sözleşme kodu ne kadar karmaşıksa ve yapıcı argümanları ne kadar büyükse, dağıtım için o kadar fazla gaza ihtiyaç duyulacaktır.
Önkoşullar
Bu blog yazısındaki örnekleri takip etmek için aşağıdakilere sahip olmanız gerekir:
- Node.js makinenizde yüklü
- JavaScript ve Ethereum blok zincirinin temel anlayışı
- Ethers.js hakkında bilgi
Aşağıdaki komutu çalıştırarak npm'yi kullanarak eters.js'yi yükleyebilirsiniz:
npm eterleri yükle
Ethers.js ile Sözleşme Dağıtım Verilerini Tahmin Etme
Sözleşme dağıtım verilerini tahmin etmek için aşağıdaki adımları uygulamamız gerekir:
- Bayt kodunu ve ABI'yi almak için akıllı sözleşmeyi derleyin.
- Ethers.js'nin yeni bir örneğini oluşturun
Sözleşme Fabrikasısınıf. - Şunu kullanın:
Sözleşme Fabrikasıdağıtım için gereken gazı tahmin etmek.
Her adımı ayrıntılı olarak inceleyelim.
Adım 1: Akıllı Sözleşmeyi Derleyin
İlk adım, bayt kodunu ve ABI'yi almak için akıllı sözleşmeyi derlemektir. Gibi bir araç kullanabilirsinizsolc(Solidity derleyicisi) sözleşmenizi derlemek için. İşte basit bir Solidity sözleşmesinin nasıl derleneceğine dair bir örnek:solcbir Node.js betiğinde:
const solc = require('solc'); const fs = require('fs'); // Sözleşme kaynak kodunu okuyun const sourceCode = fs.readFileSync('SimpleContract.sol', 'utf8'); // Sözleşmeyi derleyin const input = { language: 'Solidity', Resources: { 'SimpleContract.sol': { content: sourceCode } }, settings: { OutputSelection: { '*': { '*': ['abi', 'evm.bytecode'] } } } }; const çıktı = JSON.parse(solc.compile(JSON.stringify(input))); const sözleşme = çıktı.contracts['SimpleContract.sol']['SimpleContract']; const bayt kodu = sözleşme.evm.bytecode.object; const abi = sözleşme.abi; console.log('Bayt kodu:', bayt kodu); console.log('ABI:', abi);
Bu örnekte, basit bir Solidity sözleşmesinin kaynak kodunu adlı bir dosyadan okuyoruz.SimpleContract.sol. Daha sonra sözleşmeyi kullanarak derliyoruzsolcve bayt kodunu ve ABI'yi derleme çıktısından çıkarın.
Adım 2: Yeni bir örneğini oluşturunSözleşme Fabrikasısınıf
Bayt kodunu ve ABI'yi aldıktan sonra, yeni bir örnek oluşturabiliriz.Sözleşme FabrikasıEthers.js'den sınıf.Sözleşme Fabrikasısınıf, akıllı sözleşmenin yeni örneklerini dağıtmak için kullanılır. İşte bir örnek:
const { eterler } = require('eterler'); // Ethereum ağı const sağlayıcısına bağlanın = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'); const cüzdan = new ethers.Wallet('YOUR_PRIVATE_KEY', sağlayıcı); // Yeni bir ContractFactory örneği oluşturun const ContractFactory = new ethers.ContractFactory(abi, bytecode, cüzdan);
Bu örnekte, bir Infura sağlayıcısı kullanarak Ethereum ana ağına bağlanıyoruz. Değiştirmeniz gerekecekYOUR_INFURA_PROJECT_IDgerçek Infura proje kimliğiniz ile. Ayrıca özel anahtar kullanarak yeni bir cüzdan örneği oluşturuyoruz. Yer değiştirmekYOUR_PRIVATE_KEYgerçek özel anahtarınızla.
Adım 3: Dağıtım için Gerekli Gazı Tahmin Edin
Bir kez sahip olduğumuzdaSözleşme Fabrikasıörneğin bunu dağıtım için gereken gazı tahmin etmek için kullanabiliriz.Sözleşme Fabrikasısınıfın adında bir yöntemi vargetDeployTransactiondağıtım işlemini temsil eden bir işlem nesnesini döndüren. Daha sonra şunu kullanabiliriz:tahminGazsağlayıcının işlem için gerekli gazı tahmin etme yöntemi. İşte bir örnek:
// Dağıtım için gereken gazı tahmin edin const konuşlandırmaTransaction = ContractFactory.getDeployTransaction(); const tahmin edilenGas = sağlayıcıyı bekliyor.estimateGas(deployTransaction); console.log('Dağıtım için tahmini gaz:', tahminiGas.toString());
Bu örnekte, biz şunu çağırıyoruz:getDeployTransactionyöntemiSözleşme Fabrikasıdağıtım işlem nesnesini almak için. Daha sonra şunu kullanırız:tahminGazsağlayıcının işlem için gerekli gazı tahmin etme yöntemi. Tahmini gaz şu şekilde iade edilir:Büyük Sayı, bu yüzden onu konsola kaydetmeden önce bir dizeye dönüştürüyoruz.
Sözleşme Dağıtımı Gaz Tahminini Etkileyen Faktörler
Sözleşme dağıtımına ilişkin gaz tahmini, aşağıdakiler de dahil olmak üzere çeşitli faktörlerden etkilenebilir:


- Sözleşme Karmaşıklığı: Sözleşme kodu ne kadar karmaşıksa dağıtım için o kadar fazla gaz gerekecektir.
- Yapıcı Argümanları: Sözleşmenizde yapıcı argümanlar varsa, bu argümanların boyutu ve karmaşıklığı da gaz tahminini etkileyebilir.
- Ağ Tıkanıklığı: Ethereum ağının mevcut durumu da gas tahminini etkileyebilir. Ağ tıkanıklığının yüksek olduğu dönemlerde gaz fiyatları daha yüksek olabilir ve bu da genel dağıtım maliyetini artırabilir.
Çözüm
Sözleşme dağıtım verilerinin tahmin edilmesi, Ethereum blok zincirinde akıllı bir sözleşmenin dağıtılması sürecinde önemli bir adımdır. Ethers.js kullanarak dağıtım için gereken gas miktarını kolaylıkla tahmin edebiliyor ve işlemlerimizi buna göre planlayabiliyoruz.
Blockchain projeleriniz için eter satın almakla ilgileniyorsanız, güvenilir bir eter tedarikçisiyiz. Aşağıdakiler gibi yüksek kaliteli eterler sunuyoruz:Metil Tert-Bütil Eter (MTBE),Etilen Glikol Monobütil Eter (BCS, EB), VeTrietilen Glikol Monobütil Eter (TBG, TB). Tedarik ihtiyaçlarınızı görüşmek ve başarılı bir ortaklığa başlamak için bizimle iletişime geçin.
Referanslar
- eters.js belgeleri: https://docs.ethers.io/v5/
- Sağlamlık belgeleri: https://docs.soliditylang.org/
- Ethereum resmi web sitesi: https://ethereum.org/





