时间:2023-06-13|浏览:226
在以太坊黄皮书中,nonce是一个标量值,等于从该地址发送的交易数量或在具有关联代码的账户情况下创建的合约数量。
以太坊所有交易都是基于账户,不同于比特币的基于utxo,因此需要记录每个交易的顺序。nonce值就是这个顺序,它是交易原始地址的属性。尽管nonce不存储在以太坊区块链上,但是通过计算从地址发送的交易数量来计算它。
每次发起一笔交易,nonce值会加一。对于发起交易的两种情况:1.外部账户(EOA)每发送一笔交易;2.合约账户(ContractWallet)每创建一个合约。转入交易和合约调用其他合约等则属于内部调用,因此nonce值不变。
它有哪些作用?
作用1:交易顺序。假设你要发送两个值为1和4ETH的交易,并希望按顺序打包。发送一笔交易后,你直接继续发送第二笔交易,矿工将无法知道你维护交易顺序的意图。如果你的第一笔交易(1ETH)的nonce值为0(假设是新账户),那么4ETH交易的nonce值为1。矿工可根据nonce值的顺序打包交易。
作用2:防止重放攻击。如果没有nonce,则交易很容易被重复提交给以太坊网络,消耗你的余额。而包含nonce的交易,同一nonce的交易只能被打包一次。
如何使用nonce?
以太坊内部有一个交易池(txpool),它存放交易。发起转账或创建合约时,可使用web3从以太坊网络查询当前的nonce值,并将其需要传递参数nonce,官方文档对于nonce的说明如下: "nonce: QUANTITY - (可选) 一个nonce的整数。这允许覆盖使用相同nonce的待处理事务。"
使用eth_getTransactionCount获取nonce值时,需要传递以下参数:[地址,QUANTITY(最新)、pending]。如果有处于pending状态的交易,请将参数更换为pending,否则将无法获取正确计数。
加速和取消以太坊的交易。
由于nonce的特性,可使用相同的noncehttps://segmentfault.com/a/18999
用戶喜愛的交易所
已有账号登陆后会弹出下载