pub enum Error {
UnknownFunction(String),
UnknownSelector(Selector),
NotADeploymentTransaction,
ContractNotDeployed,
ZeroData(String, Error),
AbiError(Error),
TransportError(TransportError),
PendingTransactionError(PendingTransactionError),
}
Expand description
Error when interacting with contracts.
Variants§
UnknownFunction(String)
Unknown function referenced.
UnknownSelector(Selector)
Unknown function selector referenced.
NotADeploymentTransaction
Called deploy
with a transaction that is not a deployment transaction.
ContractNotDeployed
contractAddress
was not found in the deployment transaction’s receipt.
ZeroData(String, Error)
The contract returned no data.
AbiError(Error)
An error occurred ABI encoding or decoding.
TransportError(TransportError)
An error occurred interacting with a contract over RPC.
PendingTransactionError(PendingTransactionError)
An error occurred while waiting for a pending transaction.
Implementations§
Source§impl Error
impl Error
Sourcepub fn as_revert_data(&self) -> Option<Bytes>
pub fn as_revert_data(&self) -> Option<Bytes>
Return the revert data in case the call reverted.
Sourcepub fn as_decoded_interface_error<E: SolInterface>(&self) -> Option<E>
pub fn as_decoded_interface_error<E: SolInterface>(&self) -> Option<E>
Attempts to decode the revert data into one of the custom errors in SolInterface
.
Returns an enum container type consisting of the custom errors defined in the interface.
None is returned if the revert data is empty or if the data could not be decoded into one of the custom errors defined in the interface.
§Example
use alloy_provider::ProviderBuilder;
use alloy_sol_types::sol;
sol! {
#[derive(Debug, PartialEq, Eq)]
#[sol(rpc, bytecode = "694207")]
contract ThrowsError {
error SomeCustomError(uint64 a);
error AnotherError(uint64 b);
function error(uint64 a) external {
revert SomeCustomError(a);
}
}
}
#[tokio::main]
async fn main() {
let provider = ProviderBuilder::new().connect_anvil_with_wallet();
let throws_err = ThrowsError::deploy(provider).await.unwrap();
let err = throws_err.error(42).call().await.unwrap_err();
let custom_err =
err.as_decoded_interface_error::<ThrowsError::ThrowsErrorErrors>().unwrap();
// Handle the custom error enum
match custom_err {
ThrowsError::ThrowsErrorErrors::SomeCustomError(a) => { /* handle error */ }
ThrowsError::ThrowsErrorErrors::AnotherError(b) => { /* handle error */ }
}
}
Sourcepub fn as_decoded_error<E: SolError>(&self) -> Option<E>
pub fn as_decoded_error<E: SolError>(&self) -> Option<E>
Decode the revert data into a custom SolError
type.
Returns an instance of the custom error type if decoding was successful, otherwise None.
§Example
use alloy_provider::ProviderBuilder;
use alloy_sol_types::sol;
use ThrowsError::SomeCustomError;
sol! {
#[derive(Debug, PartialEq, Eq)]
#[sol(rpc, bytecode = "694207")]
contract ThrowsError {
error SomeCustomError(uint64 a);
error AnotherError(uint64 b);
function error(uint64 a) external {
revert SomeCustomError(a);
}
}
}
#[tokio::main]
async fn main() {
let provider = ProviderBuilder::new().connect_anvil_with_wallet();
let throws_err = ThrowsError::deploy(provider).await.unwrap();
let err = throws_err.error(42).call().await.unwrap_err();
let custom_err = err.as_decoded_error::<SomeCustomError>().unwrap();
assert_eq!(custom_err, SomeCustomError { a: 42 });
}
Trait Implementations§
Source§impl Error for Error
impl Error for Error
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
Source§impl From<PendingTransactionError> for Error
impl From<PendingTransactionError> for Error
Source§fn from(source: PendingTransactionError) -> Self
fn from(source: PendingTransactionError) -> Self
Source§impl From<RpcError<TransportErrorKind>> for Error
impl From<RpcError<TransportErrorKind>> for Error
Source§fn from(source: TransportError) -> Self
fn from(source: TransportError) -> Self
Auto Trait Implementations§
impl Freeze for Error
impl !RefUnwindSafe for Error
impl Send for Error
impl Sync for Error
impl Unpin for Error
impl !UnwindSafe for Error
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more