为什么交易发送失败了
在 Conflux 网络,通过 cfx_sendRawTransaction 方法发送交易时,如果交易构造不对,发送将会失败。其中一些错误比较常见比如:
使用了已被执行过的 nonce
使用了已经被发送到交易池中的 nonce
另外还有几种发送失败的情况:
chainId 使用不匹配
epochHeight 太大
gas 超过 1500w (half of block gas limit)
gas 小余 21000
data 过大 (超过 200K)
gasPrice 设置为 0
签名错误
交易池满
如下是交易发送失败时 cfx_sendRawTransaction 方法返回的 RPC 错误
nonce 使用错误
使用了已经被执行的 nonce
{
"jsonrpc": "2.0",
"id": "15922956697249514502",
"error": {
"code": -32602,
"message": "Invalid parameters: tx",
"data": "\"Transaction 0x4a2cfa73267139d965ab86d41f2af16db09e62ff92a5abffd7f8e743f36f327c is discarded due to a too stale nonce\""
}
}此种情况需改为当前可以用的(未用的) nonce
使用了已经被发送到交易池中的 nonce
或
对于这两种情况代表交易已经被发到交易池中了,如果想更新或替换交易的话,可以使用同样的 nonce, 修改对应的字段,并提高 gasPrice 重新发送
使用了过大的 nonce
发送交易的 nonce 不能币用户当前 nonce 过大,如果超过 2000 将遇到如下错误:
gas
如果交易的 gas 太小(<21000)或太大(>1500w)会返回如下错误:
gasPrice
交易的 gasPrice 不能设置为 0:
data
交易有大小限制,最大不能超过 200k
epochHeight
如果交易的 epochHeight 跟当前网络的 epochNumber 相比小余超过 10w 会遇到如下错误:
chainId 使用错误
编码或签名错误
交易池满
或
对于此种情况,可等待一会重新发送交易,提高交易的 gasPrice 有助于提高发送的几率
其他
节点处于 catch-up mode
等节点数据同步到最新之后再发送
内部错误
Last updated