Web3j 获取 nonce 的参考代码
public static BigInteger getNonce(Web3j web3j, String address) {
try {
EthGetTransactionCount nonceObject = web3j.ethGetTransactionCount(address, DefaultBlockParameterName.PENDING).send();
if (nonceObject == null){
throw new RuntimeException("net error");
}
return nonceObject.getTransactionCount();
} catch (IOException e) {
throw new RuntimeException("net error");
}
}
获取一个 address nonce 值的时候,其中有一个参数为 DefaultBlockParameter,上面代码中采用的是 DefaultBlockParameterName 类,它有 3 个值,分别为
EARLIEST("earliest")
LATEST("latest")
PENDING("pending")
earliest:创世区块
latest:最新区块 (区块链的头号区块)
pending:正要挖到的区块 (包括待处理交易)
举例:假设 address 最后一个已经打包的 Transaction 的 nonce 为 100
earliest 返回的始终是: 0
latest 返回的始终是: 最后一个已经打包的 Transaction 的 nonce,+ 1,即 101
pending: 如果 address 没有 pending 状态的 Transaction,则返回 101;如果有 1 条 pending 状态的 Transaction,则返回 102;如果有 2 条 pending 状态的 Transaction,则返回 103
值得注意的是,如果获取 nonce 采取的是 pending 方式,则如果 address 前面的 Transaction 由于较低的 Gas Price 被卡住,则该钱包之后所有的交易都会被卡住,即使后面交易的 Gas Price 足够高。直到前面较低 nonce 代表的交易被打包,之后的交易才会被打包 文章来源:https://www.toymoban.com/news/detail-620768.html
如果采用 latest 的方式获取 nonce,则有可能多个 Transaction 获取到相同的 nonce,一旦其中一条成功,则其它所有采用相同 nonce 的 Transaction 全部都会失败。 文章来源地址https://www.toymoban.com/news/detail-620768.html
到了这里,关于Java Web3j nonce 获取的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!