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функция является объектом транзакции.


Чтобы добавить немного больше к этому ответу,

  1. Базовая плата за газ (назовем ее X) — это плата за единицу газа. Это значение не изменится (если оно не изменено в протоколе).
  2. Количество газа (назовем его Y), необходимое для каждой транзакции, будет варьироваться в зависимости от транзакции.
      total fee = amount of gas * fee per unit gas = Y * X

Вот почему я рекомендовал использоватьestimateGas()функция.

Другие вопросы по тегам