web3j如何获取交易状态

Web3j how to get transaction status

我正在使用 web3j 查询以太坊区块链。现在我想检查交易是否被挖掘或刚刚发送到网络。 我怎样才能做到这一点?

可以考虑使用web3.eth.getTransactionReceipt(hash [, callback]).

它将return null用于未决交易和一个对象,如果交易成功。

如前所述,您可以使用 web3.eth.getTransactionReceipt(hash [, callback]) 它将 return 具有 状态 的对象。对于不成功的交易,它将是 false

/**
 * 通过hash查询交易状态,处理状态。成功success,失败fail,未知unknown
 * @param hash
 * @return
 */
public String txStatus(String hash){
    if(StringUtils.isBlank(hash)) {
        return STATUS_TX_UNKNOWN;
    }
    try {
        EthGetTransactionReceipt resp = web3j.ethGetTransactionReceipt(hash).send();
        if(resp.getTransactionReceipt().isPresent()) {
            TransactionReceipt receipt = resp.getTransactionReceipt().get();
            String status = StringUtils.equals(receipt.getStatus(), "0x1") ?
                    "success" : "fail";
            return status;
        }
    }catch (Exception e){
        log.info("txStatusFail {}", e.getMessage(), e);
    }
    return "hash_unknown";
}