Add an explicit state of a reserved signature
An RPC client that fetches the signature status before the bank finishes executing the corresponding Transaction should receive SignatureNotFound instead of Confirmed
This commit is contained in:
parent
38883d1de4
commit
719e14b30a
10
src/bank.rs
10
src/bank.rs
|
@ -77,6 +77,9 @@ pub enum BankError {
|
|||
/// too old and has been discarded.
|
||||
SignatureNotFound,
|
||||
|
||||
/// A transaction with this signature has been received but not yet executed
|
||||
SignatureReserved,
|
||||
|
||||
/// Proof of History verification failed.
|
||||
LedgerVerificationFailed,
|
||||
|
||||
|
@ -431,7 +434,7 @@ impl Bank {
|
|||
if let Some(_result) = signatures.get(signature) {
|
||||
return Err(BankError::DuplicateSignature);
|
||||
}
|
||||
signatures.insert(*signature, Ok(()));
|
||||
signatures.insert(*signature, Err(BankError::SignatureReserved));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -1747,7 +1750,10 @@ mod tests {
|
|||
let signature = Signature::default();
|
||||
bank.reserve_signature_with_last_id_test(&signature, &mint.last_id())
|
||||
.expect("reserve signature");
|
||||
assert_eq!(bank.get_signature_status(&signature), Ok(()));
|
||||
assert_eq!(
|
||||
bank.get_signature_status(&signature),
|
||||
Err(BankError::SignatureReserved)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -192,6 +192,9 @@ impl RpcSol for RpcSolImpl {
|
|||
Ok(_) => RpcSignatureStatus::Confirmed,
|
||||
Err(BankError::AccountInUse) => RpcSignatureStatus::AccountInUse,
|
||||
Err(BankError::ProgramRuntimeError(_)) => RpcSignatureStatus::ProgramRuntimeError,
|
||||
// Report SignatureReserved as SignatureNotFound as SignatureReserved is
|
||||
// transitory while the bank processes the associated transaction.
|
||||
Err(BankError::SignatureReserved) => RpcSignatureStatus::SignatureNotFound,
|
||||
Err(BankError::SignatureNotFound) => RpcSignatureStatus::SignatureNotFound,
|
||||
Err(err) => {
|
||||
trace!("mapping {:?} to GenericFailure", err);
|
||||
|
|
Loading…
Reference in New Issue