Като доставчик на ethers, аз разбирам важността на точната оценка на данните за внедряване на договора, когато работите с блокчейн Ethereum. В тази публикация в блога ще споделя някои прозрения за това как да получите оценка на данните за внедряване на договора с помощта на ethers.js, популярна JavaScript библиотека за взаимодействие с блокчейна на Ethereum.
Разбиране на внедряването на договор в Ethereum
Преди да се потопим в техническите подробности за оценката на данните за внедряване на договор, нека накратко разберем какво включва внедряването на договор в Ethereum. Когато разгърнете интелигентен договор в блокчейна на Ethereum, вие по същество създавате нов екземпляр на кода на договора и го съхранявате в блокчейна. Този процес изисква изпращане на транзакция към мрежата, която включва байт кода на договора и всички необходими аргументи на конструктора.
Разходите за внедряване на договор се определят от количеството газ, необходимо за изпълнение на транзакцията за внедряване. Газът е мерна единица за изчислителната работа, необходима за изпълнение на транзакция в мрежата Ethereum. Колкото по-сложен е кодът на договора и колкото по-големи са аргументите на конструктора, толкова повече газ ще е необходим за внедряване.
Предпоставки
За да следвате примерите в тази публикация в блога, трябва да имате следното:
- Node.js инсталиран на вашата машина
- Основно разбиране на JavaScript и блокчейна Ethereum
- Познаване на ethers.js
Можете да инсталирате ethers.js с помощта на npm, като изпълните следната команда:
npm инсталирайте етери
Оценка на данните за внедряване на договор с ethers.js
За да оценим данните за внедряване на договора, ще трябва да изпълним следните стъпки:
- Компилирайте интелигентния договор, за да получите байт кода и ABI.
- Създайте нов екземпляр на ethers.js
ContractFactoryклас. - Използвайте
ContractFactoryза оценка на газа, необходим за разгръщане.
Нека разгледаме подробно всяка стъпка.
Стъпка 1: Компилирайте интелигентния договор
Първата стъпка е да компилирате интелигентния договор, за да получите байт кода и ABI. Можете да използвате инструмент катосолц(компилатора Solidity), за да съставите вашия договор. Ето пример за това как да съставите прост договор Solidity, използвайкисолцв скрипт Node.js:
const solc = изискване ('solc'); const fs = изискване ('fs'); // Прочетете изходния код на договора const sourceCode = fs.readFileSync('SimpleContract.sol', 'utf8'); // Компилиране на договора const input = { language: 'Solidity', източници: { 'SimpleContract.sol': { content: sourceCode } }, настройки: { 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 = contract.abi; console.log('Байткод:', байткод); console.log('ABI:', abi);
В този пример ние четем изходния код на прост договор Solidity от файл с имеSimpleContract.sol. След това съставяме договора с помощта насолци извлечете байт кода и ABI от изхода на компилацията.
Стъпка 2: Създайте нов екземпляр наContractFactoryклас
След като имаме байт кода и ABI, можем да създадем нов екземпляр наContractFactoryклас от ethers.js. TheContractFactoryклас се използва за внедряване на нови екземпляри на интелигентен договор. Ето един пример:
const { ethers } = require('ethers'); // Свързване към мрежата на Ethereum const provider = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'); const wallet = new ethers.Wallet('YOUR_PRIVATE_KEY', доставчик); // Създаване на нов екземпляр на ContractFactory const contractFactory = new ethers.ContractFactory(abi, bytecode, wallet);
В този пример ние се свързваме към основната мрежа на Ethereum, използвайки доставчик на Infura. Ще трябва да го заменитеYOUR_INFURA_PROJECT_IDс вашия действителен ID на проект Infura. Също така създаваме нов екземпляр на портфейла, използвайки частен ключ. СменетеYOUR_PRIVATE_KEYс вашия действителен частен ключ.
Стъпка 3: Оценка на газа, необходим за внедряване
След като имамеContractFactoryнапример, можем да го използваме, за да оценим газа, необходим за разгръщане. TheContractFactoryкласът има метод, нареченgetDeployTransactionкойто връща транзакционен обект, представляващ транзакцията за внедряване. След това можем да използвамеоценкаГазметод на доставчика за оценка на газа, необходим за сделката. Ето един пример:
// Оценка на газа, необходим за внедряване const deployTransaction = contractFactory.getDeployTransaction(); const EstimateGas = изчакайте provider.estimateGas(deployTransaction); console.log('Очакван газ за разгръщане:', EstimatedGas.toString());
В този пример ние извиквамеgetDeployTransactionметод наContractFactoryза да получите обекта на транзакция за внедряване. След това използвамеоценкаГазметод на доставчика за оценка на газа, необходим за сделката. Изчисленият газ се връща като aBigNumber, така че го преобразуваме в низ, преди да го регистрираме в конзолата.
Фактори, влияещи върху оценката на газа за разгръщане по договор
Оценката на газа за разгръщане на договор може да бъде повлияна от няколко фактора, включително:


- Сложност на договора: Колкото по-сложен е кодът на договора, толкова повече газ ще е необходим за разгръщане.
- Аргументи на конструктора: Ако вашият договор има аргументи на конструктора, размерът и сложността на тези аргументи също могат да повлияят на оценката на газа.
- Претоварване на мрежата: Текущото състояние на мрежата Ethereum също може да повлияе на прогнозата за газа. По време на периоди на голямо претоварване на мрежата цените на газа може да са по-високи, което може да увеличи общите разходи за внедряване.
Заключение
Оценката на данните за внедряване на договора е важна стъпка в процеса на внедряване на интелигентен договор в блокчейна Ethereum. Използвайки ethers.js, можем лесно да оценим газа, необходим за внедряване, и да планираме нашите транзакции съответно.
Ако се интересувате от закупуване на етери за вашите блокчейн проекти, ние сме надежден доставчик на етери. Ние предлагаме висококачествени етери като напрМетил терт-бутил етер (MTBE),Етилен гликол монобутилов етер (BCS, EB), иТриетилен гликол монобутилов етер (TBG, TB). Свържете се с нас, за да обсъдим вашите нужди от доставки и да започнем успешно партньорство.
Референции
- документация за ethers.js: https://docs.ethers.io/v5/
- Документация за Solidity: https://docs.soliditylang.org/
- Официален уебсайт на Ethereum: https://ethereum.org/





