Kao dobavljač etera, razumijem važnost precizne procjene podataka o implementaciji ugovora kada radite s Ethereum blockchainom. U ovom postu na blogu podijelit ću neke uvide o tome kako dobiti procjenu podataka o implementaciji ugovora koristeći ethers.js, popularnu JavaScript biblioteku za interakciju sa Ethereum blockchainom.
Razumijevanje implementacije ugovora na Ethereum
Prije nego što zaronimo u tehničke detalje procjene podataka o implementaciji ugovora, hajde da ukratko shvatimo šta podrazumijeva implementacija ugovora na Ethereum. Kada implementirate pametni ugovor na Ethereum blockchain, u suštini kreirate novu instancu koda ugovora i pohranjujete ga na blockchain. Ovaj proces zahtijeva slanje transakcije u mrežu, koja uključuje bajt kod ugovora i sve potrebne argumente konstruktora.
Trošak implementacije ugovora određen je količinom plina koja je potrebna za izvršenje transakcije implementacije. Gas je mjerna jedinica za računski rad potreban za izvršenje transakcije na Ethereum mreži. Što je kod ugovora složeniji i što su veći argumenti konstruktora, to će više plina biti potrebno za implementaciju.
Preduvjeti
Da biste pratili primjere u ovom blog postu, morat ćete imati sljedeće:
- Node.js instaliran na vašoj mašini
- Osnovno razumijevanje JavaScripta i Ethereum blockchaina
- Poznavanje ethers.js
Možete instalirati ethers.js koristeći npm tako što ćete pokrenuti sljedeću naredbu:
npm install ethers
Procjena podataka o implementaciji ugovora pomoću ethers.js
Da bismo procijenili podatke o implementaciji ugovora, morat ćemo izvršiti sljedeće korake:
- Sastavite pametni ugovor da dobijete bajt kod i ABI.
- Kreirajte novu instancu ethers.js
ContractFactoryklasa. - Koristite
ContractFactoryza procjenu plina potrebnog za raspoređivanje.
Idemo kroz svaki korak detaljno.
Korak 1: Sastavite pametni ugovor
Prvi korak je kompajliranje pametnog ugovora da biste dobili bajt kod i ABI. Možete koristiti alat kao što jesolc(kompajler Solidity) za sastavljanje vašeg ugovora. Evo primjera kako sastaviti jednostavan Solidity ugovor koristećisolcu Node.js skripti:
const solc = require('solc'); const fs = require('fs'); // Čitanje izvornog koda ugovora const sourceCode = fs.readFileSync('SimpleContract.sol', 'utf8'); // Sastavite ugovor const input = { language: 'Solidity', sources: { 'SimpleContract.sol': { content: sourceCode } }, postavke: { outputSelection: { '*': { '*': ['abi', 'evm.bytecode'] } } }; const output = JSON.parse(solc.compile(JSON.stringify(input))); const contract = output.contracts['SimpleContract.sol']['SimpleContract']; const bytecode = contract.evm.bytecode.object; const abi = ugovor.abi; console.log('Bytecode:', bytecode); console.log('ABI:', abi);
U ovom primjeru čitamo izvorni kod jednostavnog ugovora Solidity iz datoteke pod nazivomSimpleContract.sol. Zatim sastavljamo ugovor koristećisolci izvuci bajtkod i ABI iz izlaza kompilacije.
Korak 2: Kreirajte novu instancuContractFactoryklasa
Kada dobijemo bajtkod i ABI, možemo kreirati novu instancuContractFactoryklasa iz ethers.js. TheContractFactoryclass se koristi za implementaciju novih instanci pametnog ugovora. Evo primjera:
const { eteri } = require('eteri'); // Povezivanje na Ethereum mrežu const provider = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'); const wallet = new ethers.Wallet('YOUR_PRIVATE_KEY', provajder); // Kreirajte novu instancu ContractFactory const contractFactory = new ethers.ContractFactory(abi, bytecode, wallet);
U ovom primjeru, povezujemo se na Ethereum mainnet pomoću Infura provajdera. Morat ćete zamijenitiYOUR_INFURA_PROJECT_IDsa vašim stvarnim ID-om projekta Infura. Također kreiramo novu instancu novčanika koristeći privatni ključ. ZamijeniteYOUR_PRIVATE_KEYsa vašim stvarnim privatnim ključem.
Korak 3: Procijenite plin potreban za implementaciju
Jednom kada imamoContractFactoryna primjer, možemo ga koristiti za procjenu plina potrebnog za implementaciju. TheContractFactoryklasa ima metod pod nazivomgetDeployTransactionkoji vraća objekt transakcije koji predstavlja transakciju implementacije. Tada možemo koristitiprocjenaGasmetod provajdera da proceni gas potreban za transakciju. Evo primjera:
// Procjena plina potrebnog za implementaciju const deployTransaction = contractFactory.getDeployTransaction(); const procijenjeniGas = čekati provider.estimateGas(deployTransaction); console.log('Procijenjeni plin za implementaciju:', procjeneGas.toString());
U ovom primjeru, mi zovemogetDeployTransactionmetodomContractFactoryda dobijete objekt transakcije implementacije. Zatim koristimoprocjenaGasmetod provajdera da proceni gas potreban za transakciju. Procijenjeni plin se vraća kao aBigNumber, pa ga konvertujemo u string pre nego što ga evidentiramo na konzoli.
Faktori koji utječu na procjenu gasa za implementaciju ugovora
Na procjenu plina za ugovorno raspoređivanje može utjecati nekoliko faktora, uključujući:


- Složenost ugovora: Što je složeniji kod ugovora, to će više plina biti potrebno za raspoređivanje.
- Argumenti konstruktora: Ako vaš ugovor ima argumente konstruktora, veličina i složenost ovih argumenata također mogu utjecati na procjenu plina.
- Zagušenje mreže: Trenutno stanje Ethereum mreže također može utjecati na procjenu plina. Tokom perioda velikih zagušenja mreže, cijene gasa mogu biti veće, što može povećati ukupne troškove implementacije.
Zaključak
Procjena podataka o implementaciji ugovora važan je korak u procesu implementacije pametnog ugovora na Ethereum blockchain. Koristeći ethers.js, lako možemo procijeniti plin potreban za implementaciju i u skladu s tim planirati naše transakcije.
Ako ste zainteresirani za kupovinu etera za svoje blockchain projekte, mi smo pouzdan dobavljač etera. Nudimo visokokvalitetne etere kao nprMetil terc-butil eter (MTBE),Etilen glikol monobutil eter (BCS, EB), iTrietilen glikol monobutil eter (TBG, TB). Kontaktirajte nas kako bismo razgovarali o vašim potrebama nabavke i započeli uspješno partnerstvo.
Reference
- ethers.js dokumentacija: https://docs.ethers.io/v5/
- Solidity dokumentacija: https://docs.soliditylang.org/
- Zvanična web stranica Ethereuma: https://ethereum.org/





