Gas

如何檢查與 eth-brownie 部署合約需要多少 gas?

  • March 25, 2022

我不小心在主網上部署了一個 ERC20 代幣合約,而 brownie 甚至沒有要求我確認,所以我最終花了 700 美元以上的 ETH 來練習。我不認為它會花那麼多錢,出於某種原因,布朗尼沒有像 metamask 通常那樣向我徵求許可,以確認我對交易費用沒意見。我怎樣才能避免這種情況,或者至少確認我可以接受 eth-brownie 的交易費用?我是否應該以程式方式檢查我是否可以接受與給定交易相關的交易費用,如果是最好的方法?我應該專注於氣體限制嗎?我應該為每筆交易設置氣體限制嗎?另外,我如何查看與 eth-brownie 交易的估計氣體?

通過這篇博文走上正軌 :

from brownie import accounts, web3, MyContract

account = accounts.load("my_account")

contract = MyContract.deploy({"from": account})
# contract = MyContract[len(MyContract)-1] # if contract is already deployed

mocked = web3.eth.contract(
          address = contract.address,
          abi = contract.abi
        )

estimated_gas = mocked.functions \
                     .functionToBeTested(function_payload) \
                     .estimateGas({"from": account.address})

print(estimated_gas)

順便說一句,您可以使用

print(web3.eth.gasPrice)

和最新的區塊平均氣體限制

last_block = web3.eth.getBlock("latest")
gas_limit = last_block.gasLimit / (len(last_block.transactions) if last_block.transactions else 1)
print(gas_limit)

Skippys 的答案是正確的,如果有人想知道,我將在此處放置另一個實現: PS:這是完整的演練連結

from web3 import Web3, HTTPProvider
import statistics
web3 = Web3(HTTPProvider("ADD_YOUR_ETHEREUM_NODE_URL"))
pending_transactions = web3.provider.make_request("parity_pendingTransactions", [])
gas_prices = []
gases = []
for tx in pending_transactions["result"[:10]]:
   gas_prices.append(int((tx["gasPrice"]),16))
   gases.append(int((tx["gas"]),16))

print("Average:")
print("gasPrice: ", statistics.mean(gas_prices))
print(" ")
print("Median:")
print("gasPrice: ", statistics.median(gas_prices))

引用自:https://ethereum.stackexchange.com/questions/118274