一、以太坊单笔交易字段含义

消费者可以通过Metamask、mist浏览器实现与以太坊的交互,而开发者可以通过web3js工具库实现以太坊的交互。

单笔交易需要的字段: 

nonce :

  定义

  1. 官方文档对于nonce的说明:
nonce: QUANTITY - (optional) Integer of a nonce. This allows to overwrite your own pending transactions that use the same nonce.

     2.个人定义:每发起一笔交易,nonce就会加一(nonce 计数从 0 开始,如果你的账户有5笔转出交易,那么最后一次的nonce值会是4)。

        对于发起的解释:
        1.外部账户(EOA)每发送一笔交易;
        2.合约账户 (Contract Wallet)  每创建一个合约

        而转入交易、合约调用其他合约等属于内部调用,因此 nonce 值不变。

  作用

  1. 确定交易顺序,如果你前后发送了两笔交易,想要它们被顺序打包,那么矿工就可以按照 nonce 的顺序进行打包。
  2. 防止重放攻击,如果没有 nonce ,交易信息被生成序列别人可以看到并重复提交,从而掏空你的钱包。有了 nonce ,生成序列后同一 nonce 的交易只能被打包一次。
  3. 加速交易,基于 nonce 的特性,自增和唯一性,使用相同的 nonce 重新发起交易即可实现加速。例:如果一笔交易A gas price = 5,nonce = 1,广播后交易处于pending状态,创建交易B设置 gas price 更高,如10、20 , nonce=1,再次发布交易,此时在矿工的交易池端,B 交易先被打包了,矿工会检查 A 交易,发现 nonce 已经存在了,认为 A 是不合理的交易,则会自动丢弃该交易。(如果交易被打包,即非 pending 状态,则是不可逆的,就无法取消或加速了。)
  4. 取消交易。基于加速交易的案例。创建交易 B,设置 value =0 nonce = 1(也就是 A 交易的nonce值),收款方=发送方,设置更高的 gas price ,广播交易,原来的交易被丢弃了,新交易会被矿工打包,不会丢失任何资金。但是你还是需要为 B 交易付出矿工费。

  使用规则

  1. 当nonce太小(小于当前的nonce值),交易会被直接拒绝,Transactions with too low a nonce get immediately rejected;
  2. 当 nonce 太大,大于当前 nonce,交易会一直处于队列之中,Transactions with too high a nonce get placed in the transaction pool queue;
  3. 当发送一个比较大的nonce值,然后补齐开始 nonce 到那个值之间的nonce,那么交易依旧可以被执行,If transactions with nonces that fill the gap between the last valid nonce and the too high nonce are sent and the nonce sequence is complete, all the transactions in the sequence will get processed and mined.
  4. 交易队列只保存最多64个从同一个账户发出的交易,也就是说,如果要批量转账,同一节点不要发出超过64笔交易。 The transaction pool queue will only hold a maximum of 64 transactions with the same From:address with nonces out of sequence.
  5. 当某节点 queue 中还有交易,但此时停止 geth 客户端,queue 中的交易会被清除掉,When the geth instances are shut down and restarted, transactions in the transaction pool queue disappear.
  6. 当前 nonce 合适,但是账户余额不足时,会被以太坊拒绝;

to :

        这笔钱要转到的账户地址。

value :

        要发送给目标地址的代币数量。

        在创建合约的交易中,该值作为新创建合约账户中的起始余额。

gas price :

        一枚 ETH 分为:Finney,Szabo,Gwei,Mwei,Kwei 和 Wei,其中Wei是最小的 ETH 单位,一个ETH 等于一千 Finney,一百万 Szabo,十亿Gwei和百万万亿 Wei 。

        Gas Price 以 Gwei 为单位的数量,用户愿意花费于每个 Gas 单位的金额。

gas limit :

        Gas Limit 是用户愿意为执行某个操作或确认交易支付的最大 Gas 量( 最少21,000 )。 

        当进行每笔交易时,发送人设定Gas Limit 和Gas Price,将 Gas Limit*Gas Price ,就得到了ETH交易佣金的成本。

gas price 与 gas limit 结合来看:

        如果 1Gwei≈0.00000002 ETH,所以佣金最少为0.00000002*21000=0.00042ETH,通常情况下,交易设置的Gas limt 为50000-100000个,总费用为 0.001 ETH - 0.002 ETH。

设置 Gas limit 需要考虑的问题:

  • 不同的操作会产生不同的 Gas 成本。
  • Gas 用完时,矿工将停止执行。
  • 如果有剩余 Gas,将立即退还给发起交易的人员或智能合约创建者。
  • 如果用户设置的限制值太低,那么此交易被认为是无效的,并且会因为“Gas不足”错误而被取消,并且其中用于计算的 Gas 不会退到账户。
  • 无论交易是否通过,发送者总需要向矿工支付计算费用。

V、R、S :

        由发送方私钥生成的、可用于生成发件人账户地址的加密数据块。是交易签名的值, 它们可以用于获取发件人账户地址( 公钥 )。详细点说,R、S 是一个ECDSA签名的输出, V 是恢复的ID,这个机制很大作用在于防止重放攻击。

init(仅存在于创建合约的交易中):

       用于初始化新合约账户的 EVM 代码片段。init只运行一次,然后被丢弃。首次运行init时,它会返回账户代码的主体,这是与合约账户永久关联的一段代码。

data(可选字段,只存在于消息调用中):

消息调用的输入数据(即参数)。例如,如果智能合约用作域注册服务,则对该合约的调用可能需要输入字段,例如域和 IP 地址。

猜你喜欢

转载自blog.csdn.net/qq_35784487/article/details/121313505