交易
浏览 333 | 评论 0 | 字数 2422
硝基苯
2023年06月02日
  • 交易是由帐户发出,带密码学签名的指令。 帐户将发起交易以更新以太坊网络的状态。 最简单的交易是将 ETH 从一个账户转到另一个帐户。

    改变了EVM状态的交易需要广播到整个网络。任何节点都可以广播在以太坊虚拟机上执行交易的请求;此后,验证者将执行交易并将由此产生的状态变化传播到网络的其他部分。

    交易需要付费,且所提交的交易需要包括下列信息:

    • recipient – 接收地址(如果为一个外部持有的帐户,交易将传输值。 如果为合约帐户,交易将执行合约代码)
    • signature – 发送者的标识符。 当通过发送者的私钥签名交易来确保发送者已授权此交易时,生成此签名。
    • 随机数 - 一个连续的递增计数器,表示帐户中的交易编号。
    • value – 发送人向接收人转移的以太币金额(以以太币的一种面值 WEI 为单位)
    • data – 可包括任意数据的可选字段
    • gasLimit – 交易可以消耗的最大数量的燃料单位。 燃料单位代表计算步骤
    • maxPriorityFeePerGas - 作为验证者小费包含的最大燃料数量
    • maxFeePerGas - 愿意为交易支付的最大燃料数量(包括 baseFeePerGas 和 maxPriorityFeePerGas)
      燃料是指验证者处理交易所需的计算。 用户必须为此计算支付费用。 gasLimit 和 maxPriorityFeePerGas 决定支付给验证者的最高交易费

    交易对象示例

    {
      from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",
      to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",
      gasLimit: "21000",
      maxFeePerGas: "300"
      maxPriorityFeePerGas: "10"
      nonce: "0",
      value: "10000000000",
    }

    来自 https://ethereum.org/zh/developers/docs/transactions/

    data字段

    绝大多数交易都是从外部所有的帐户访问合约。 大多数合约用 Solidity 语言编写,并根据应用程序二进制接口 (ABI) 解释其data字段。
    前四个字节使用函数名称和参数的哈希指定要调用的函数。 有时可以使用本数据库(opens in a new tab)根据选择器识别函数。
    调用数据的其余部分是参数,按照应用程序二进制接口规范中的规定进行编码(opens in a new tab)

    以该笔交易为例
    0xd0dcbe007569fcfa1902dae0ab8b4e078efe42e231786312289b1eee5590f6a1
    80968-st00igcffsh.png
    该笔交易输入的原始数据为0xa9059cbb为transfer(address,uint256)方法。
    根据应用程序二进制接口规范,整型值(例如地址,它是 20 字节整型)在应用程序二进制接口中显示为 32 字节的字,前面用零填充。 所以我们知道 to 地址是 4f6742badb049791cd9a37ea913f2bac38d01279。 value 是 0x3b0559f4 = 990206452。

    交易类型

    以太坊有几种不同类型的交易:

    • 常规交易:从一个帐户到另一个帐户的交易。
    • 合约部署交易:没有“to”地址的交易,数据字段用于合约代码。
    • 执行合约:与已部署的智能合约进行交互的交易。 在这种情况下,“to”地址是智能合约地址。

    关于燃料

    如上所述,执行交易需要耗费燃料。 简单的转账交易需要 21000 单位燃料。
    因此,如果 Bob 要在 baseFeePerGas 为 190 Gwei 且 maxPriorityFeePerGas 为 10 Gwei 时给 Alice 发送一个以太币,Bob 需要支付以下费用:

    1.(190 + 10) * 21000 = 4,200,000 gwei
    2.Bob 的帐户将会扣除 1.0042 个以太币(1 个以太币给 Alice,0.0042 个以太币作为燃料费用)
    3.Alice 的帐户将会增加 +1.0 ETH
    4.基础费将会燃烧 -0.00399 ETH
    5.验证者获得 0.000210 个以太币的小费
    注:任何智能合约交互也需要燃料

    交易生命周期

    交易提交后,就会发生以下情况:

    1. 一旦您发送交易,加密法生成交易哈希: 0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017
    2. 然后将该交易转播到网络,并且与大量其他交易一起包含在一个集合中。
    3. 验证者必须选择你的交易并将它包含在一个区块中,以便验证交易并认为它“成功”。
    4. 随着时间的流逝,包含你的交易的区块将升级成“合理”状态,然后变成“最后确定”状态。 通过这些升级,可以进一步确定 你的交易已经成功并将无法更改。 区块一旦“最终确定”,只能通过耗费数十亿美元 的攻击来更改。

    来自 https://ethereum.org/zh/developers/docs/transactions/

    本文作者:硝基苯
    本文链接:https://www.c6sec.com/index.php/archives/814/
    最后修改时间:2023-06-02 16:55:54
    本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!
    评论已关闭
    评论列表
    暂无评论