Skip to content

Commit

Permalink
Remap some errors
Browse files Browse the repository at this point in the history
  • Loading branch information
0xOmarA committed Jan 18, 2024
1 parent ef5edfb commit b688007
Show file tree
Hide file tree
Showing 3 changed files with 187 additions and 21 deletions.
30 changes: 30 additions & 0 deletions radix-engine-tests/tests/blueprints/pool_one_resource.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use radix_engine::types::*;
use radix_engine_interface::api::node_modules::metadata::MetadataValue;
use radix_engine_interface::api::ModuleId;
use radix_engine_interface::blueprints::pool::*;
use radix_engine_tests::pool_stubs::*;
use scrypto::prelude::Pow;
use scrypto_unit::*;
use transaction::prelude::*;
Expand Down Expand Up @@ -684,6 +685,35 @@ fn get_redemption_value_should_not_panic_on_large_values() {
});
}

#[test]
fn errors_are_remapped_correctly() -> Result<(), RuntimeError> {
use scrypto_test::prelude::*; // TestEnvironment is defined in this module so we import here.

// Arrange
let env = &mut TestEnvironment::new();
let mut pool = OneResourcePool::instantiate(XRD, OwnerRole::None, rule!(allow_all), None, env)?;

// Act
let rtn = pool.protected_withdraw(dec!(1), Default::default(), env);

// Assert
assert_eq!(
rtn,
Err(RuntimeError::ApplicationError(
ApplicationError::OneResourcePoolError(OneResourcePoolError::VaultError(
VaultError::ResourceError(ResourceError::InsufficientBalance {
requested: dec!(1),
actual: dec!(0)
})
))
)),
"{:#?}",
rtn
);

Ok(())
}

fn is_pool_emitter(event_type_identifier: &EventTypeIdentifier) -> bool {
match event_type_identifier.0 {
Emitter::Method(node_id, ModuleId::Main) => match node_id.entity_type() {
Expand Down
115 changes: 115 additions & 0 deletions radix-engine/src/blueprints/pool/v1/errors.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use crate::blueprints::resource::*;
use crate::errors::*;
use radix_engine_interface::prelude::*;

Expand All @@ -22,13 +23,55 @@ pub mod one_resource_pool {
ResourceDoesNotBelongToPool {
resource_address: ResourceAddress,
},
FungibleResourceManagerError(FungibleResourceManagerError),
NonFungibleResourceManagerError(NonFungibleResourceManagerError),
BucketError(BucketError),
VaultError(VaultError),
}

impl From<Error> for RuntimeError {
fn from(error: Error) -> Self {
Self::ApplicationError(ApplicationError::OneResourcePoolError(error))
}
}

impl From<BucketError> for Error {
fn from(error: BucketError) -> Self {
Self::BucketError(error)
}
}

impl From<VaultError> for Error {
fn from(error: VaultError) -> Self {
Self::VaultError(error)
}
}

pub fn remap_application_error(runtime_error: RuntimeError) -> RuntimeError {
match runtime_error {
RuntimeError::ApplicationError(ApplicationError::BucketError(error)) => {
RuntimeError::ApplicationError(ApplicationError::OneResourcePoolError(
Error::BucketError(error),
))
}
RuntimeError::ApplicationError(ApplicationError::VaultError(error)) => {
RuntimeError::ApplicationError(ApplicationError::OneResourcePoolError(
Error::VaultError(error),
))
}
RuntimeError::ApplicationError(ApplicationError::FungibleResourceManagerError(
error,
)) => RuntimeError::ApplicationError(ApplicationError::OneResourcePoolError(
Error::FungibleResourceManagerError(error),
)),
RuntimeError::ApplicationError(ApplicationError::NonFungibleResourceManagerError(
error,
)) => RuntimeError::ApplicationError(ApplicationError::OneResourcePoolError(
Error::NonFungibleResourceManagerError(error),
)),
_ => runtime_error,
}
}
}

pub mod two_resource_pool {
Expand All @@ -53,13 +96,43 @@ pub mod two_resource_pool {
InvalidGetRedemptionAmount,
ZeroPoolUnitsMinted,
LargerContributionRequiredToMeetRatio,
FungibleResourceManagerError(FungibleResourceManagerError),
NonFungibleResourceManagerError(NonFungibleResourceManagerError),
BucketError(BucketError),
VaultError(VaultError),
}

impl From<Error> for RuntimeError {
fn from(error: Error) -> Self {
Self::ApplicationError(ApplicationError::TwoResourcePoolError(error))
}
}

pub fn remap_application_error(runtime_error: RuntimeError) -> RuntimeError {
match runtime_error {
RuntimeError::ApplicationError(ApplicationError::BucketError(error)) => {
RuntimeError::ApplicationError(ApplicationError::TwoResourcePoolError(
Error::BucketError(error),
))
}
RuntimeError::ApplicationError(ApplicationError::VaultError(error)) => {
RuntimeError::ApplicationError(ApplicationError::TwoResourcePoolError(
Error::VaultError(error),
))
}
RuntimeError::ApplicationError(ApplicationError::FungibleResourceManagerError(
error,
)) => RuntimeError::ApplicationError(ApplicationError::TwoResourcePoolError(
Error::FungibleResourceManagerError(error),
)),
RuntimeError::ApplicationError(ApplicationError::NonFungibleResourceManagerError(
error,
)) => RuntimeError::ApplicationError(ApplicationError::TwoResourcePoolError(
Error::NonFungibleResourceManagerError(error),
)),
_ => runtime_error,
}
}
}

pub mod multi_resource_pool {
Expand Down Expand Up @@ -89,11 +162,53 @@ pub mod multi_resource_pool {
NoMinimumRatio,
ZeroPoolUnitsMinted,
LargerContributionRequiredToMeetRatio,
FungibleResourceManagerError(FungibleResourceManagerError),
NonFungibleResourceManagerError(NonFungibleResourceManagerError),
BucketError(BucketError),
VaultError(VaultError),
}

impl From<Error> for RuntimeError {
fn from(error: Error) -> Self {
Self::ApplicationError(ApplicationError::MultiResourcePoolError(error))
}
}

impl From<BucketError> for Error {
fn from(error: BucketError) -> Self {
Self::BucketError(error)
}
}

impl From<VaultError> for Error {
fn from(error: VaultError) -> Self {
Self::VaultError(error)
}
}

pub fn remap_application_error(runtime_error: RuntimeError) -> RuntimeError {
match runtime_error {
RuntimeError::ApplicationError(ApplicationError::BucketError(error)) => {
RuntimeError::ApplicationError(ApplicationError::MultiResourcePoolError(
Error::BucketError(error),
))
}
RuntimeError::ApplicationError(ApplicationError::VaultError(error)) => {
RuntimeError::ApplicationError(ApplicationError::MultiResourcePoolError(
Error::VaultError(error),
))
}
RuntimeError::ApplicationError(ApplicationError::FungibleResourceManagerError(
error,
)) => RuntimeError::ApplicationError(ApplicationError::MultiResourcePoolError(
Error::FungibleResourceManagerError(error),
)),
RuntimeError::ApplicationError(ApplicationError::NonFungibleResourceManagerError(
error,
)) => RuntimeError::ApplicationError(ApplicationError::MultiResourcePoolError(
Error::NonFungibleResourceManagerError(error),
)),
_ => runtime_error,
}
}
}
Loading

0 comments on commit b688007

Please sign in to comment.