【区块链-前端交互】第六篇:以太测试网转账和Gas计算

文章目录

    • Gas 费用
        • 部分变量说明
        • 转账Gas计算公式
    • 以太测试网
        • Goerli 测试网
        • Sepolia 测试网
    • 测试网单笔转账(弄清Gas费用)
        • 不设置Gas进行转账
        • 设置Gas进行转账:web3-eth
    • 报错
        • Error: eip-1559 transaction do not support gasPrice

Gas 费用

参考文章:

  • 以太坊转账手续费与到账速度 如何巧妙设置Gas能省钱?
  • 以太坊ETH中的 gas、gasprice 和 gaslimit(核心理解,终于知道怎么计算了)
  • 官方Gas解释
部分变量说明

根据测试网-不设置Gas进行转账的交易数据,来分析一下交易Gas。在交易数据中,Gas相关的变量主要有如下四个:

变量名 变量含义 一般设置
maxPriorityFeePerGas 每份燃料支付给矿工的最大小费 可以设置为1gwei / $0.03
maxFeePerGas 每份燃料支付给矿工小费的最大费用,包含baseFeePerGas和maxPriorityFeePerGas 可以不设置
gasPrice 每份燃料的价格 8gwei / $0.26
gasLimit 一次交易中gas的可用上限 可以不设置
转账Gas计算公式

感觉这些不是关键,根据文章计算一下:一次转账固定消耗21000gas,gas使用ETH来支付。

根据以太坊浏览器里的实时Gas价格,1eth=10亿Gwei,一次转账需要21000Gas,当前Gas单价为 14Gwei,也就是一次转账需要美刀:(0.000000001**21000*14)*1579$/eth=$0.464226,刚好能够对应图里的 $0.46。
【区块链-前端交互】第六篇:以太测试网转账和Gas计算_第1张图片

以太测试网

Goerli 测试网

参考文章:如何在 Goerli 网络中获取测试 ETH

https://goerli-faucet.mudit.blog/,该水龙头已经没有 GöETH 测试币余额了。

通过 goerli-faucet.pk910.de/ 地址在线挖测试币,竞争很大,要挖 1 个小时左右才能获得最低提现额度 0.02 GöETH。

北京时间上午十点,这也太慢了,先取消吧。
【区块链-前端交互】第六篇:以太测试网转账和Gas计算_第2张图片

不挖还不行,挂着吧,运气好15分钟就能挖到0.02提取了。

【区块链-前端交互】第六篇:以太测试网转账和Gas计算_第3张图片

Sepolia 测试网

没有找到水龙头。

测试网单笔转账(弄清Gas费用)

不设置Gas进行转账

参考文章:Ethers极简入门: 4. 发送ETH

事先定义好钱包私钥、钱包地址:

// 根据钱包私钥创建对象
const wallet_11 = new ethers.Wallet(privateKey_11, provider)

const oneGwei = ethers.BigNumber.from("1000000000");
console.log(ethers.utils.formatUnits(oneGwei, "ether"));



//发送交易,获得收据
const sendETH = async() => {
    const tx = {
        to: wallet_address_12,
        value: ethers.utils.parseEther("0.001")
    }
    const receipt = await wallet_11.sendTransaction(tx)
    await receipt.wait() // 等待链上确认交易
    console.log(receipt) // 打印交易详情
}

sendETH()

打印的交易详情:

{
  type: 2,
  chainId: 5,
  nonce: 0,
  maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true },
  maxFeePerGas: BigNumber { _hex: '0x246fd2c674', _isBigNumber: true },
  gasPrice: null,
  gasLimit: BigNumber { _hex: '0x5208', _isBigNumber: true },
  to: '0x79B47AAfC5Bf1AAcC07F022A04fcFc8cDC66d3e8',
  value: BigNumber { _hex: '0x038d7ea4c68000', _isBigNumber: true },
  data: '0x',
  accessList: [],
  hash: '0x76033a70f23933c80c91bce282452a6d6bb48b5df2a5327679152dabc58a0d75',
  v: 0,
  r: '0x49e803e3b44dd0fd49597233d8c8620930f3dc7888785ea78408030d3865335c',
  s: '0x4fbdbed45de9364964626a2a4c2582d66de269feec5ccff5725e2b727675bc43',
  from: '0x281aF131Fc854Cb6756A7e2F57D895bcCf6DaFd5',
  confirmations: 0,
  wait: [Function (anonymous)]
}

ETH变化如下,转账gas费用=0.032-0.0293+0.001=0.0017。

钱包 发送前余额 发送后余额
钱包11 0.032 0.0293
钱包12 0 0.001
设置Gas进行转账:web3-eth

见文章:

【区块链交互】第七篇:以太坊测试网转账(改用web3-eth库)

报错

Error: eip-1559 transaction do not support gasPrice

参考文章:智能合约 空投 nodejs调用web3js进行批量转账

Goerli 测试网转账,对于交易中的 Gas 参数设置会报错,提示"无效键名":
【区块链-前端交互】第六篇:以太测试网转账和Gas计算_第4张图片
连接以太坊主网,也是同样的报错。

排查:问题出在对象及其方法上, ethers.Wallet(privateKey, provider).sendTransaction(tx) 这个方法的参数里不包含 gas 等相关参数。

解决:使用 web3 或者 web3-eth 库。

你可能感兴趣的:(区块链前端,区块链)