mirror of
https://github.com/serai-dex/serai.git
synced 2024-11-17 01:17:36 +00:00
Have Bitcoin's send_raw_transaction considered succeeded if already sent
This commit is contained in:
parent
2d1443eb8a
commit
3cf46338ee
1 changed files with 14 additions and 1 deletions
|
@ -187,7 +187,20 @@ impl Rpc {
|
||||||
|
|
||||||
/// Publish a transaction.
|
/// Publish a transaction.
|
||||||
pub async fn send_raw_transaction(&self, tx: &Transaction) -> Result<Txid, RpcError> {
|
pub async fn send_raw_transaction(&self, tx: &Transaction) -> Result<Txid, RpcError> {
|
||||||
let txid = self.rpc_call("sendrawtransaction", json!([encode::serialize_hex(tx)])).await?;
|
let txid = match self.rpc_call("sendrawtransaction", json!([encode::serialize_hex(tx)])).await {
|
||||||
|
Ok(txid) => txid,
|
||||||
|
Err(e) => {
|
||||||
|
// A const from Bitcoin's bitcoin/src/rpc/protocol.h
|
||||||
|
const RPC_VERIFY_ALREADY_IN_CHAIN: isize = -27;
|
||||||
|
// If this was already successfully published, consider this having succeeded
|
||||||
|
if let RpcError::RequestError(Error { code, .. }) = e {
|
||||||
|
if code == RPC_VERIFY_ALREADY_IN_CHAIN {
|
||||||
|
return Ok(tx.txid());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(e)?
|
||||||
|
}
|
||||||
|
};
|
||||||
if txid != tx.txid() {
|
if txid != tx.txid() {
|
||||||
Err(RpcError::InvalidResponse("returned TX ID inequals calculated TX ID"))?;
|
Err(RpcError::InvalidResponse("returned TX ID inequals calculated TX ID"))?;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue