Web3.eth.getGasPrice не работает на zkSync?
Я пытаюсь оценить текущую цену на газ с помощью библиотеки Web3.js в сети zkSync Layer2, однако постоянно получаю один и тот же результат: 250000000 в течение нескольких дней, поэтому я предполагаю, что она работает неправильно. Web3.js не работает с zkSync?https://web3js.readthedocs.io/en/v1.10.0/web3-eth.html?highlight=getGasPrice#getgasprice
const Web3 = require("web3"); // Web3 library
const web3 = new Web3("https://mainnet.era.zksync.io");
let gasPrice = await web3.eth.getGasPrice();
1 ответ
getGasPrice()
возвращает медианную цену на газ (рассчитанную на основе нескольких предыдущих блоков). https://web3js.readthedocs.io/en/v1.2.11/web3-eth.html#getgasprice
Вы можете получить это:
const result = await web3.eth.getGasPrice()
console.log(web3.utils.fromWei(result, 'ether'))
Что касается того, почему это250000000
, это потому что этоbaseFeePerGas
установить: https://github.com/matter-labs/foundry-zksync#get-latest-block
Если вы хотите оценить цену газа для транзакции, которую хотите совершить, вы можете использовать эту функцию. https://web3js.readthedocs.io/en/v1.2.11/web3-eth.html#estimategas
Вы можете сделать что-то вроде:
const gasAmount = await web3.eth.estimateGas({
to: toAddress,
from: fromAddress,
value: web3.utils.toWei(`${amount}`, 'ether'),
})
Вход вestimateGas
функция является объектом транзакции.
Чтобы добавить немного больше к этому ответу,
- Базовая плата за газ (назовем ее X) — это плата за единицу газа. Это значение не изменится (если оно не изменено в протоколе).
- Количество газа (назовем его Y), необходимое для каждой транзакции, будет варьироваться в зависимости от транзакции.
total fee = amount of gas * fee per unit gas = Y * X
Вот почему я рекомендовал использоватьestimateGas()
функция.