diff --git a/.tool-versions b/.tool-versions index fbe9b81..4e4d000 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -scarb 2.6.5 +scarb 2.8.0 starknet-foundry 0.27.0 diff --git a/Scarb.lock b/Scarb.lock index aee7da4..313d920 100644 --- a/Scarb.lock +++ b/Scarb.lock @@ -3,13 +3,99 @@ version = 1 [[package]] name = "openzeppelin" -version = "0.14.0" -source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.14.0#f091c4f51ddeb10297db984acae965328c5a4e5b" +version = "0.16.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.16.0#ba00ce76a93dcf25c081ab2698da20690b5a1cfb" +dependencies = [ + "openzeppelin_access", + "openzeppelin_account", + "openzeppelin_governance", + "openzeppelin_introspection", + "openzeppelin_merkle_tree", + "openzeppelin_presets", + "openzeppelin_security", + "openzeppelin_token", + "openzeppelin_upgrades", + "openzeppelin_utils", +] + +[[package]] +name = "openzeppelin_access" +version = "0.16.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.16.0#ba00ce76a93dcf25c081ab2698da20690b5a1cfb" +dependencies = [ + "openzeppelin_introspection", + "openzeppelin_utils", +] + +[[package]] +name = "openzeppelin_account" +version = "0.16.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.16.0#ba00ce76a93dcf25c081ab2698da20690b5a1cfb" +dependencies = [ + "openzeppelin_introspection", + "openzeppelin_utils", +] + +[[package]] +name = "openzeppelin_governance" +version = "0.16.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.16.0#ba00ce76a93dcf25c081ab2698da20690b5a1cfb" +dependencies = [ + "openzeppelin_access", + "openzeppelin_introspection", +] + +[[package]] +name = "openzeppelin_introspection" +version = "0.16.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.16.0#ba00ce76a93dcf25c081ab2698da20690b5a1cfb" + +[[package]] +name = "openzeppelin_merkle_tree" +version = "0.16.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.16.0#ba00ce76a93dcf25c081ab2698da20690b5a1cfb" + +[[package]] +name = "openzeppelin_presets" +version = "0.16.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.16.0#ba00ce76a93dcf25c081ab2698da20690b5a1cfb" +dependencies = [ + "openzeppelin_access", + "openzeppelin_account", + "openzeppelin_introspection", + "openzeppelin_token", + "openzeppelin_upgrades", +] + +[[package]] +name = "openzeppelin_security" +version = "0.16.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.16.0#ba00ce76a93dcf25c081ab2698da20690b5a1cfb" + +[[package]] +name = "openzeppelin_token" +version = "0.16.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.16.0#ba00ce76a93dcf25c081ab2698da20690b5a1cfb" +dependencies = [ + "openzeppelin_account", + "openzeppelin_governance", + "openzeppelin_introspection", +] + +[[package]] +name = "openzeppelin_upgrades" +version = "0.16.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.16.0#ba00ce76a93dcf25c081ab2698da20690b5a1cfb" + +[[package]] +name = "openzeppelin_utils" +version = "0.16.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.16.0#ba00ce76a93dcf25c081ab2698da20690b5a1cfb" [[package]] name = "piltover" version = "0.1.0" -source = "git+https://github.com/byteZorvin/piltover?branch=bridge-testing#a4021a0bb5e1638e3aebf634f5810ebb17da6a38" +source = "git+https://github.com/keep-starknet-strange/piltover?branch=main#a40db0ba727a8ae5497286341293708edcaca118" dependencies = [ "openzeppelin", ] diff --git a/Scarb.toml b/Scarb.toml index 34967a1..6991385 100644 --- a/Scarb.toml +++ b/Scarb.toml @@ -6,9 +6,9 @@ edition = "2023_11" # See more keys and their definitions at https://docs.swmansion.com/scarb/docs/reference/manifest.html [dependencies] -openzeppelin = { git = "https://github.com/OpenZeppelin/cairo-contracts.git", tag = "v0.14.0" } +openzeppelin = { git = "https://github.com/OpenZeppelin/cairo-contracts.git", tag = "v0.16.0" } starknet = "2.6.4" -piltover = { git = "https://github.com/byteZorvin/piltover", branch="bridge-testing"} +piltover = { git = "https://github.com/keep-starknet-strange/piltover", branch="main"} [dev-dependencies] snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.27.0" } diff --git a/src/bridge/interface.cairo b/src/bridge/interface.cairo index 6be7ac4..c12c3b5 100644 --- a/src/bridge/interface.cairo +++ b/src/bridge/interface.cairo @@ -1,5 +1,5 @@ use starknet::ContractAddress; -use starknet_bridge::bridge::types::{TokenStatus, TokenSettings}; +use starknet_bridge::bridge::types::TokenStatus; #[starknet::interface] pub trait ITokenBridgeAdmin { diff --git a/src/bridge/tests/messaging_test.cairo b/src/bridge/tests/messaging_test.cairo index 19cca39..3f6d6fe 100644 --- a/src/bridge/tests/messaging_test.cairo +++ b/src/bridge/tests/messaging_test.cairo @@ -1,30 +1,17 @@ use piltover::messaging::interface::IMessagingDispatcherTrait; -use starknet_bridge::bridge::token_bridge::TokenBridge::{ - __member_module_appchain_bridge::InternalContractMemberStateTrait, - __member_module_token_settings::InternalContractMemberStateTrait as tokenSettingsStateTrait, - TokenBridgeInternal -}; +use starknet_bridge::bridge::token_bridge::TokenBridge::{TokenBridgeInternal}; use snforge_std as snf; use snforge_std::ContractClassTrait; -use starknet::{ContractAddress, storage::StorageMemberAccessTrait}; use starknet_bridge::mocks::{ - messaging::{IMockMessagingDispatcherTrait, IMockMessagingDispatcher}, erc20::ERC20, hash + messaging::{IMockMessagingDispatcherTrait, IMockMessagingDispatcher}, hash }; +use starknet_bridge::bridge::TokenBridge; use piltover::messaging::interface::IMessagingDispatcher; use starknet_bridge::bridge::{ - ITokenBridge, ITokenBridgeAdmin, ITokenBridgeDispatcher, ITokenBridgeDispatcherTrait, - ITokenBridgeAdminDispatcher, ITokenBridgeAdminDispatcherTrait, IWithdrawalLimitStatusDispatcher, - IWithdrawalLimitStatusDispatcherTrait, TokenBridge, TokenBridge::Event, - types::{TokenStatus, TokenSettings}, - tests::constants::{OWNER, L3_BRIDGE_ADDRESS, USDC_MOCK_ADDRESS, DELAY_TIME} -}; -use openzeppelin::{ - token::erc20::interface::{IERC20MetadataDispatcher, IERC20MetadataDispatcherTrait}, - access::ownable::{ - OwnableComponent, OwnableComponent::Event as OwnableEvent, - interface::{IOwnableTwoStepDispatcher, IOwnableTwoStepDispatcherTrait} - } + tests::constants::{L3_BRIDGE_ADDRESS, OWNER, USDC_MOCK_ADDRESS, DELAY_TIME} }; + +use piltover::messaging::types::MessageToAppchainStatus; use starknet_bridge::bridge::tests::utils::setup::{deploy_erc20, mock_state_testing}; use starknet_bridge::bridge::tests::utils::message_payloads; use starknet::contract_address::{contract_address_const}; @@ -37,7 +24,7 @@ fn deploy_message_payload_ok() { let calldata = TokenBridge::deployment_message_payload(usdc_address); let expected_calldata: Span = array![ - 3346236667719676623895870229889359551507408296949803518172317961543243553075, // usdc_address + 327360033215303420453874031627788877836422131767619347074434581266068999983, // usdc_address 0, 1431520323, // -- USDC 4, @@ -89,7 +76,10 @@ fn send_deploy_message_ok() { constants::HANDLE_TOKEN_DEPLOYMENT_SELECTOR, message_payloads::deployment_message_payload(usdc_address) ); - assert(messaging.sn_to_appchain_messages(hash) == 1, 'Message not recieved'); + assert( + messaging.sn_to_appchain_messages(hash) == MessageToAppchainStatus::Pending(1), + 'Message not recieved' + ); } #[test] @@ -135,7 +125,10 @@ fn send_deposit_message_ok() { ) ); - assert(messaging.sn_to_appchain_messages(hash) == 1, 'Message not recieved'); + assert( + messaging.sn_to_appchain_messages(hash) == MessageToAppchainStatus::Pending(1), + 'Message not recieved' + ); } #[test] diff --git a/src/bridge/tests/token_actions_test.cairo b/src/bridge/tests/token_actions_test.cairo index cc00c3f..d3ad261 100644 --- a/src/bridge/tests/token_actions_test.cairo +++ b/src/bridge/tests/token_actions_test.cairo @@ -1,33 +1,8 @@ -use piltover::messaging::interface::IMessagingDispatcherTrait; -use starknet_bridge::bridge::token_bridge::TokenBridge::__member_module_appchain_bridge::InternalContractMemberStateTrait; -use starknet_bridge::bridge::token_bridge::TokenBridge::TokenBridgeInternal; -use starknet_bridge::bridge::token_bridge::TokenBridge::__member_module_token_settings::InternalContractMemberStateTrait as tokenSettingsStateTrait; use snforge_std as snf; -use snforge_std::ContractClassTrait; -use starknet::{ContractAddress, storage::StorageMemberAccessTrait}; -use starknet_bridge::mocks::{ - messaging::{IMockMessagingDispatcherTrait, IMockMessagingDispatcher}, erc20::ERC20 -}; -use piltover::messaging::interface::IMessagingDispatcher; -use starknet_bridge::bridge::{ - ITokenBridge, ITokenBridgeAdmin, ITokenBridgeDispatcher, ITokenBridgeDispatcherTrait, - ITokenBridgeAdminDispatcher, ITokenBridgeAdminDispatcherTrait, IWithdrawalLimitStatusDispatcher, - IWithdrawalLimitStatusDispatcherTrait, TokenBridge, TokenBridge::Event, - types::{TokenStatus, TokenSettings} -}; -use openzeppelin::access::ownable::{ - OwnableComponent, OwnableComponent::Event as OwnableEvent, - interface::{IOwnableTwoStepDispatcher, IOwnableTwoStepDispatcherTrait} -}; -use starknet_bridge::bridge::tests::utils::message_payloads; -use starknet_bridge::mocks::hash; -use starknet::contract_address::{contract_address_const}; -use starknet_bridge::constants; -use starknet_bridge::bridge::tests::utils::setup::{deploy_erc20, mock_state_testing}; - -use starknet_bridge::bridge::tests::constants::{ - OWNER, L3_BRIDGE_ADDRESS, USDC_MOCK_ADDRESS, DELAY_TIME -}; +use starknet_bridge::bridge::{ITokenBridge, ITokenBridgeAdmin, types::{TokenStatus, TokenSettings}}; +use starknet_bridge::bridge::tests::utils::setup::mock_state_testing; + +use starknet_bridge::bridge::tests::constants::{OWNER, USDC_MOCK_ADDRESS,}; #[test] fn deactivate_token_ok() { diff --git a/src/bridge/tests/utils/setup.cairo b/src/bridge/tests/utils/setup.cairo index 5017086..335a7c9 100644 --- a/src/bridge/tests/utils/setup.cairo +++ b/src/bridge/tests/utils/setup.cairo @@ -1,26 +1,12 @@ use snforge_std as snf; -use snforge_std::{ - ContractClassTrait, EventSpy, EventSpyTrait, EventsFilterTrait, EventSpyAssertionsTrait -}; -use starknet::{ContractAddress, storage::StorageMemberAccessTrait}; -use starknet_bridge::mocks::{ - messaging::{IMockMessagingDispatcherTrait, IMockMessagingDispatcher}, erc20::ERC20 -}; +use snforge_std::{ContractClassTrait, EventSpy}; +use starknet::ContractAddress; +use starknet_bridge::mocks::{messaging::{IMockMessagingDispatcherTrait, IMockMessagingDispatcher},}; use starknet_bridge::bridge::{ - ITokenBridge, ITokenBridgeAdmin, ITokenBridgeDispatcher, ITokenBridgeDispatcherTrait, - ITokenBridgeAdminDispatcher, ITokenBridgeAdminDispatcherTrait, IWithdrawalLimitStatusDispatcher, - IWithdrawalLimitStatusDispatcherTrait, TokenBridge, TokenBridge::Event, - types::{TokenStatus, TokenSettings} -}; -use openzeppelin::access::ownable::{ - OwnableComponent, OwnableComponent::Event as OwnableEvent, - interface::{IOwnableTwoStepDispatcher, IOwnableTwoStepDispatcherTrait} -}; -use openzeppelin::token::erc20::interface::{IERC20, IERC20Dispatcher, IERC20DispatcherTrait}; -use starknet::contract_address::{contract_address_const}; -use starknet_bridge::bridge::tests::constants::{ - OWNER, USDC_MOCK_ADDRESS, L3_BRIDGE_ADDRESS, DELAY_TIME + ITokenBridgeDispatcher, ITokenBridgeDispatcherTrait, TokenBridge, types::TokenStatus }; +use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait}; +use starknet_bridge::bridge::tests::constants::{OWNER, L3_BRIDGE_ADDRESS, DELAY_TIME}; use starknet_bridge::constants; use starknet_bridge::bridge::tests::utils::message_payloads; diff --git a/src/bridge/token_bridge.cairo b/src/bridge/token_bridge.cairo index d25cf02..447d61e 100644 --- a/src/bridge/token_bridge.cairo +++ b/src/bridge/token_bridge.cairo @@ -3,10 +3,12 @@ pub mod TokenBridge { use starknet_bridge::withdrawal_limit::component::WithdrawalLimitComponent::InternalTrait; use core::option::OptionTrait; use core::traits::TryInto; + use core::panic_with_felt252; use core::starknet::event::EventEmitter; - use core::traits::PanicDestruct; + use starknet::storage::Map; use core::array::ArrayTrait; use core::serde::Serde; + use core::num::traits::Bounded; use openzeppelin::token::erc20::interface::{ IERC20Dispatcher, IERC20MetadataDispatcher, IERC20DispatcherTrait, IERC20MetadataDispatcherTrait @@ -20,6 +22,9 @@ pub mod TokenBridge { ReentrancyGuardComponent::InternalTrait as InternalReentrancyGuardImpl }; + use piltover::messaging::types::MessageToAppchainStatus; + + use starknet_bridge::withdrawal_limit::component::WithdrawalLimitComponent; component!(path: OwnableComponent, storage: ownable, event: OwnableEvent); @@ -64,7 +69,7 @@ pub mod TokenBridge { // the core messaging contract deployed on starknet used for l2 - l3 messsaging messaging_contract: IMessagingDispatcher, // All token related settings and its status - token_settings: LegacyMap, + token_settings: Map, #[substorage(v0)] ownable: OwnableComponent::Storage, #[substorage(v0)] @@ -75,8 +80,8 @@ pub mod TokenBridge { reentrancy_guard: ReentrancyGuardComponent::Storage, } - // - // Errors + // + // Errors // pub mod Errors { pub const APPCHAIN_BRIDGE_NOT_SET: felt252 = 'L3 bridge not set'; @@ -472,7 +477,7 @@ pub mod TokenBridge { } - // @dev This can be used to enable daily withdrawal limits on a token, + // @dev This can be used to enable daily withdrawal limits on a token, // @param token The address of the token on which to enable withdrawal limit fn enable_withdrawal_limit(ref self: ContractState, token: ContractAddress) { self.ownable.assert_only_owner(); @@ -524,15 +529,20 @@ pub mod TokenBridge { // Initiates the enrollment of a token into the system. // This function is used to initiate the enrollment process of a token. - // The token is marked as 'Pending' because the success of the deployment is uncertain at this stage. - // The deployment message's existence is checked, indicating that deployment has been attempted. - // The success of the deployment is determined at a later stage during the application's lifecycle. + // The token is marked as 'Pending' because the success of the deployment is uncertain at + // this stage. + // The deployment message's existence is checked, indicating that deployment has been + // attempted. + // The success of the deployment is determined at a later stage during the application's + // lifecycle. // The function is permissionless and can be called by anyone // // @param token The address of the token contract to be enrolled. - // No return value, but it updates the token's status to 'Pending' and records the deployment message and expiration time. + // No return value, but it updates the token's status to 'Pending' and records the + // deployment message and expiration time. // Emits a `TokenEnrollmentInitiated` event when the enrollment is initiated. - // Throws an error if the sender is not the manager or if the deployment message does not exist. + // Throws an error if the sender is not the manager or if the deployment message does not + // exist. fn enroll_token(ref self: ContractState, token: ContractAddress) { assert(self.get_status(token) == TokenStatus::Unknown, Errors::ALREADY_ENROLLED); @@ -540,11 +550,17 @@ pub mod TokenBridge { // Send message to appchain let deployment_message_hash = self.send_deploy_message(token); - let nonce = self + let message_status = self .messaging_contract .read() .sn_to_appchain_messages(deployment_message_hash); - assert(nonce.is_non_zero(), Errors::DEPLOYMENT_MESSAGE_DOES_NOT_EXIST); + + match message_status { + MessageToAppchainStatus::Pending => {}, + MessageToAppchainStatus::SealedOrNotSent => { + panic_with_felt252(Errors::DEPLOYMENT_MESSAGE_DOES_NOT_EXIST) + } + }; // Reading existing settings as withdrawal_limit_applied and max_total_balance // can be set before the token is enrolled. @@ -561,7 +577,7 @@ pub mod TokenBridge { self.emit(TokenEnrollmentInitiated { token, deployment_message_hash }); } - // @dev Used to create a deposit of for the token, + // @dev Used to create a deposit of for the token, // which sends a l2-l3 message to mint the user `amount` tokens // @param token: Address of the token to deposit // @param amount: quantity of tokens @@ -591,9 +607,10 @@ pub mod TokenBridge { self.reentrancy_guard.end(); } - // @dev This is function is used if one intends to make a contract call + // @dev This is function is used if one intends to make a contract call // post the deposit on l3. The calldata can be passed in `message` parameter - // `deposit()` funciton is maintained to diverge as less as possible from Starkgate(L1-L2 bridges) + // `deposit()` funciton is maintained to diverge as less as possible from Starkgate(L1-L2 + // bridges) fn deposit_with_message( ref self: ContractState, token: ContractAddress, @@ -633,12 +650,12 @@ pub mod TokenBridge { return; } - let nonce = self + let message_status = self .messaging_contract .read() .sn_to_appchain_messages(settings.deployment_message_hash); - if (nonce.is_zero()) { + if (message_status == MessageToAppchainStatus::SealedOrNotSent) { let new_settings = TokenSettings { token_status: TokenStatus::Active, ..settings }; self.token_settings.write(token, new_settings); self.emit(TokenActivated { token }); @@ -649,7 +666,7 @@ pub mod TokenBridge { } - // For withdrawing + // For withdrawing // 1. the user burns the tokens on l3, which registers // a message on the messaging contract (piltover). // @@ -677,13 +694,16 @@ pub mod TokenBridge { // /* // A deposit cancellation requires two steps: - // 1. The depositor should send a `deposit_cancel_request()` request with deposit details & nonce. - // 2. After a predetermined time (cancellation delay), the depositor can claim back the funds by + // 1. The depositor should send a `deposit_cancel_request()` request with deposit details + // & nonce. + // 2. After a predetermined time (cancellation delay), the depositor can claim back the + // funds by // calling `deposit_reclaim` (using the same arguments). // - // Note: As long as the `deposit_reclaim` was not performed, the deposit may be processed, even if - // the cancellation delay time has already passed. Only the depositor is allowed to cancel - // a deposit, and only before `deposit_reclaim` was performed. + // Note: As long as the `deposit_reclaim` was not performed, the deposit may be processed, + // even if + // the cancellation delay time has already passed. Only the depositor is allowed to + // cancel a deposit, and only before `deposit_reclaim` was performed. // */ fn deposit_cancel_request( ref self: ContractState, @@ -742,7 +762,8 @@ pub mod TokenBridge { ); } - // Similar to `deposit_reclaim()` with the difference of deposit initiated with `deposit_with_message()` + // Similar to `deposit_reclaim()` with the difference of deposit initiated with + // `deposit_with_message()` fn deposit_with_message_reclaim( ref self: ContractState, token: ContractAddress, @@ -780,8 +801,8 @@ pub mod TokenBridge { ); } - // After the `cancellation delay time` has passed of the generating the cancellation request - // a valid message can be cancelled. + // After the `cancellation delay time` has passed of the generating the cancellation request + // a valid message can be cancelled. fn deposit_reclaim( ref self: ContractState, token: ContractAddress, @@ -826,7 +847,7 @@ pub mod TokenBridge { fn get_max_total_balance(self: @ContractState, token: ContractAddress) -> u256 { let max_total_balance = self.token_settings.read(token).max_total_balance; if (max_total_balance == 0) { - return core::integer::BoundedInt::max(); + return Bounded::MAX; } return max_total_balance; } diff --git a/src/bridge/types.cairo b/src/bridge/types.cairo index 8c9ae2d..ca861b3 100644 --- a/src/bridge/types.cairo +++ b/src/bridge/types.cairo @@ -1,6 +1,6 @@ -use piltover::messaging::messaging_cpt::{MessageHash, Nonce}; +use piltover::messaging::messaging_cpt::{MessageHash,}; -#[derive(Serde, Drop, starknet::Store, PartialEq, Display, Debug)] +#[derive(Serde, Drop, starknet::Store, PartialEq, Debug)] pub enum TokenStatus { #[default] Unknown, diff --git a/src/constants.cairo b/src/constants.cairo index 60f7449..61f20cb 100644 --- a/src/constants.cairo +++ b/src/constants.cairo @@ -1,4 +1,5 @@ -// These constants have been take from this [Starkgate Bridge contract constants](https://github.com/starknet-io/starkgate-contracts/blob/cairo-1/src/solidity/StarkgateConstants.sol#L4) +// These constants have been take from this [Starkgate Bridge contract +// constants](https://github.com/starknet-io/starkgate-contracts/blob/cairo-1/src/solidity/StarkgateConstants.sol#L4) // Starknet L1 handler selectors. pub const HANDLE_TOKEN_DEPOSIT_SELECTOR: felt252 = diff --git a/src/mocks/messaging.cairo b/src/mocks/messaging.cairo index b0c8bfa..4583663 100644 --- a/src/mocks/messaging.cairo +++ b/src/mocks/messaging.cairo @@ -1,4 +1,3 @@ -use piltover::messaging::output_process::MessageToAppchain; use starknet::ContractAddress; #[starknet::interface] pub trait IMockMessaging { @@ -13,13 +12,9 @@ pub trait IMockMessaging { #[starknet::contract] mod messaging_mock { - use piltover::messaging::{ - output_process::MessageToAppchain, messaging_cpt, - messaging_cpt::InternalTrait as MessagingInternal, IMessaging - }; + use piltover::messaging::{messaging_cpt, messaging_cpt::InternalTrait as MessagingInternal,}; use starknet::ContractAddress; use starknet_bridge::mocks::hash; - use starknet_bridge::constants; use super::IMockMessaging; component!(path: messaging_cpt, storage: messaging, event: MessagingEvent); diff --git a/src/mocks/messaging_malicious.cairo b/src/mocks/messaging_malicious.cairo index 40418bf..5259910 100644 --- a/src/mocks/messaging_malicious.cairo +++ b/src/mocks/messaging_malicious.cairo @@ -1,6 +1,7 @@ #[starknet::contract] mod messaging_malicious { use piltover::messaging::interface::IMessaging; + use piltover::messaging::types::{MessageToAppchainStatus, MessageToStarknetStatus}; use starknet::ContractAddress; @@ -25,12 +26,16 @@ mod messaging_malicious { 0 } - fn sn_to_appchain_messages(self: @ContractState, message_hash: felt252) -> felt252 { - 0 + fn sn_to_appchain_messages( + self: @ContractState, message_hash: felt252 + ) -> MessageToAppchainStatus { + MessageToAppchainStatus::SealedOrNotSent } - fn appchain_to_sn_messages(self: @ContractState, message_hash: felt252) -> felt252 { - 0 + fn appchain_to_sn_messages( + self: @ContractState, message_hash: felt252 + ) -> MessageToStarknetStatus { + MessageToStarknetStatus::NothingToConsume } fn start_message_cancellation( diff --git a/src/mocks/withdrawal_limit_mock.cairo b/src/mocks/withdrawal_limit_mock.cairo index ea1f31d..35fb1b5 100644 --- a/src/mocks/withdrawal_limit_mock.cairo +++ b/src/mocks/withdrawal_limit_mock.cairo @@ -13,12 +13,10 @@ pub trait IMockWithdrawalLimit { #[starknet::contract] pub mod withdrawal_limit_mock { use starknet_bridge::withdrawal_limit::component::WithdrawalLimitComponent::InternalTrait; - use starknet_bridge::withdrawal_limit::{ - component::WithdrawalLimitComponent, - interface::{IWithdrawalLimitDispatcher, IWithdrawalLimitDispatcherTrait, IWithdrawalLimit} - }; + use starknet_bridge::withdrawal_limit::{component::WithdrawalLimitComponent}; use starknet_bridge::bridge::interface::IWithdrawalLimitStatus; use starknet::ContractAddress; + use starknet::storage::Map; component!(path: WithdrawalLimitComponent, storage: withdrawal, event: WithdrawalEvent); @@ -32,7 +30,7 @@ pub mod withdrawal_limit_mock { #[storage] struct Storage { - limits: LegacyMap, + limits: Map, #[substorage(v0)] withdrawal: WithdrawalLimitComponent::Storage, } diff --git a/src/withdrawal_limit/component.cairo b/src/withdrawal_limit/component.cairo index 5f7d4ff..dd43de2 100644 --- a/src/withdrawal_limit/component.cairo +++ b/src/withdrawal_limit/component.cairo @@ -2,7 +2,8 @@ pub mod WithdrawalLimitComponent { use starknet::{ContractAddress, get_block_timestamp, get_contract_address}; use starknet_bridge::{constants, bridge::IWithdrawalLimitStatus}; - use core::integer::BoundedInt; + use core::num::traits::Bounded; + use starknet::storage::Map; use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait}; use starknet_bridge::withdrawal_limit::interface::IWithdrawalLimit; @@ -13,7 +14,7 @@ pub mod WithdrawalLimitComponent { // in this day (if the value is x, the amount left to withdraw is x-1). 0 means that // currently there was no withdrawal from this token in this day or there were withdrawals // but the limit flag was turned off. - remaining_intraday_withdraw_quota: LegacyMap<(ContractAddress, u64), u256>, + remaining_intraday_withdraw_quota: Map<(ContractAddress, u64), u256>, // The daily withdrawal limit percentage. daily_withdrawal_limit_pct: u8, } @@ -49,7 +50,7 @@ pub mod WithdrawalLimitComponent { ) -> u256 { // If there is no limt, return max uint256. if self.get_contract().is_withdrawal_limit_applied(:token) == false { - return BoundedInt::max(); + return Bounded::MAX; } let remaining_quota = self.read_withdrawal_quota_slot(:token); diff --git a/src/withdrawal_limit/tests/withdrawal_limit_test.cairo b/src/withdrawal_limit/tests/withdrawal_limit_test.cairo index 2f8ac3d..4c1b220 100644 --- a/src/withdrawal_limit/tests/withdrawal_limit_test.cairo +++ b/src/withdrawal_limit/tests/withdrawal_limit_test.cairo @@ -1,27 +1,21 @@ -use starknet::ContractAddress; -use core::integer::BoundedInt; +use core::num::traits::Bounded; use snforge_std as snf; -use snforge_std::{ - ContractClassTrait, EventSpy, EventSpyTrait, EventsFilterTrait, EventSpyAssertionsTrait -}; -use starknet_bridge::bridge::tests::constants::{ - OWNER, L3_BRIDGE_ADDRESS, USDC_MOCK_ADDRESS, DELAY_TIME -}; +use snforge_std::{ContractClassTrait, EventSpy, EventSpyAssertionsTrait}; +use starknet_bridge::bridge::tests::constants::{OWNER,}; use starknet_bridge::mocks::withdrawal_limit_mock::{ - withdrawal_limit_mock, withdrawal_limit_mock::Event::WithdrawalEvent, IMockWithdrawalLimitDispatcher, IMockWithdrawalLimitDispatcherTrait }; use starknet_bridge::withdrawal_limit::interface::{ - IWithdrawalLimit, IWithdrawalLimitDispatcher, IWithdrawalLimitDispatcherTrait + IWithdrawalLimitDispatcher, IWithdrawalLimitDispatcherTrait, }; use starknet_bridge::withdrawal_limit::component::{ WithdrawalLimitComponent, WithdrawalLimitComponent::{RemainingQuotaUpdated, DailyWithdrawalPercentageUpdated} }; -use openzeppelin::token::erc20::interface::{IERC20, IERC20Dispatcher, IERC20DispatcherTrait}; -use starknet_bridge::bridge::tests::utils::setup::{deploy_erc20, mock_state_testing}; +use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait}; +use starknet_bridge::bridge::tests::utils::setup::deploy_erc20; fn deploy_withdrawal_limit() -> (IWithdrawalLimitDispatcher, EventSpy) { @@ -59,7 +53,7 @@ fn get_remaining_withdrawal_quota_ok() { // Should return BoundedInt::max() when withdrawal limit not applied assert( - withdrawal_limit.get_remaining_withdrawal_quota(usdc_address) == BoundedInt::max(), + withdrawal_limit.get_remaining_withdrawal_quota(usdc_address) == Bounded::MAX, 'Quota is not BoundedInt::max()' ); withdrawal_limit_mock.toggle_withdrawal_limit_for_token(usdc_address, true); diff --git a/tests/deposit_reclaim_test.cairo b/tests/deposit_reclaim_test.cairo index a425b1d..560c593 100644 --- a/tests/deposit_reclaim_test.cairo +++ b/tests/deposit_reclaim_test.cairo @@ -1,35 +1,19 @@ -use core::num::traits::zero::Zero; -use starknet_bridge::bridge::token_bridge::TokenBridge::__member_module_token_settings::InternalContractMemberStateTrait; use core::array::ArrayTrait; -use core::serde::Serde; -use core::result::ResultTrait; use core::option::OptionTrait; use core::traits::TryInto; use snforge_std as snf; -use snforge_std::{ - ContractClassTrait, EventSpy, EventSpyTrait, EventsFilterTrait, EventSpyAssertionsTrait -}; -use starknet::{ContractAddress, storage::StorageMemberAccessTrait}; -use starknet_bridge::mocks::{ - messaging::{IMockMessagingDispatcherTrait, IMockMessagingDispatcher}, erc20::ERC20 -}; -use piltover::messaging::{IMessaging, IMessagingDispatcher, IMessagingDispatcherTrait}; +use snforge_std::{EventSpy, EventSpyAssertionsTrait}; +use starknet::ContractAddress; +use starknet_bridge::mocks::{messaging::{IMockMessagingDispatcher}, erc20::ERC20}; use starknet_bridge::bridge::{ - ITokenBridge, ITokenBridgeAdmin, ITokenBridgeDispatcher, ITokenBridgeDispatcherTrait, - ITokenBridgeAdminDispatcher, ITokenBridgeAdminDispatcherTrait, IWithdrawalLimitStatusDispatcher, - IWithdrawalLimitStatusDispatcherTrait, TokenBridge, TokenBridge::Event, - types::{TokenStatus, TokenSettings} -}; -use openzeppelin::access::ownable::{ - OwnableComponent, OwnableComponent::Event as OwnableEvent, - interface::{IOwnableTwoStepDispatcher, IOwnableTwoStepDispatcherTrait} + ITokenBridgeDispatcher, ITokenBridgeDispatcherTrait, TokenBridge, TokenBridge::Event }; -use openzeppelin::token::erc20::interface::{IERC20, IERC20Dispatcher, IERC20DispatcherTrait}; +use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait}; use starknet::contract_address::{contract_address_const}; -use super::constants::{OWNER, L3_BRIDGE_ADDRESS, DELAY_TIME}; +use super::constants::DELAY_TIME; use starknet_bridge::bridge::tests::utils::setup::{ - deploy_erc20, deploy_token_bridge_with_messaging, deploy_token_bridge, enroll_token_and_settle + deploy_erc20, deploy_token_bridge_with_messaging, enroll_token_and_settle }; fn setup() -> (ITokenBridgeDispatcher, EventSpy, ContractAddress, IMockMessagingDispatcher) { diff --git a/tests/deposit_test.cairo b/tests/deposit_test.cairo index fa7fcfb..5c720bb 100644 --- a/tests/deposit_test.cairo +++ b/tests/deposit_test.cairo @@ -1,5 +1,4 @@ use core::num::traits::zero::Zero; -use starknet_bridge::bridge::token_bridge::TokenBridge::__member_module_token_settings::InternalContractMemberStateTrait; use core::array::ArrayTrait; use core::serde::Serde; use core::result::ResultTrait; @@ -9,7 +8,7 @@ use snforge_std as snf; use snforge_std::{ ContractClassTrait, EventSpy, EventSpyTrait, EventsFilterTrait, EventSpyAssertionsTrait }; -use starknet::{ContractAddress, storage::StorageMemberAccessTrait}; +use starknet::ContractAddress; use starknet_bridge::mocks::{ messaging::{IMockMessagingDispatcherTrait, IMockMessagingDispatcher}, erc20::ERC20 }; diff --git a/tests/enroll_token_test.cairo b/tests/enroll_token_test.cairo index 21fe49c..9eae461 100644 --- a/tests/enroll_token_test.cairo +++ b/tests/enroll_token_test.cairo @@ -1,12 +1,6 @@ -use starknet_bridge::bridge::token_bridge::TokenBridge::__member_module_token_settings::InternalContractMemberStateTrait; -use core::array::ArrayTrait; -use core::serde::Serde; -use core::result::ResultTrait; -use core::option::OptionTrait; -use core::traits::TryInto; use snforge_std as snf; use snforge_std::{ContractClassTrait, EventSpy, EventSpyTrait, EventSpyAssertionsTrait}; -use starknet::{ContractAddress, storage::StorageMemberAccessTrait}; +use starknet::ContractAddress; use starknet_bridge::mocks::{ messaging::{IMockMessagingDispatcherTrait, IMockMessagingDispatcher}, erc20::ERC20, hash }; diff --git a/tests/token_bridge_test.cairo b/tests/token_bridge_test.cairo index 89c21a7..4afdcab 100644 --- a/tests/token_bridge_test.cairo +++ b/tests/token_bridge_test.cairo @@ -1,4 +1,3 @@ -use starknet_bridge::bridge::token_bridge::TokenBridge::__member_module_token_settings::InternalContractMemberStateTrait; use core::array::ArrayTrait; use core::serde::Serde; use core::result::ResultTrait; @@ -6,7 +5,7 @@ use core::option::OptionTrait; use core::traits::TryInto; use snforge_std as snf; use snforge_std::{ContractClassTrait, EventSpy, EventSpyTrait, EventSpyAssertionsTrait}; -use starknet::{ContractAddress, storage::StorageMemberAccessTrait}; +use starknet::ContractAddress; use starknet_bridge::mocks::{ messaging::{IMockMessagingDispatcherTrait, IMockMessagingDispatcher}, erc20::ERC20 }; diff --git a/tests/withdraw_test.cairo b/tests/withdraw_test.cairo index 15dc317..fc9d2a7 100644 --- a/tests/withdraw_test.cairo +++ b/tests/withdraw_test.cairo @@ -1,35 +1,16 @@ -use core::num::traits::zero::Zero; -use starknet_bridge::bridge::token_bridge::TokenBridge::__member_module_token_settings::InternalContractMemberStateTrait; -use core::array::ArrayTrait; -use core::serde::Serde; -use core::result::ResultTrait; -use core::option::OptionTrait; -use core::traits::TryInto; use snforge_std as snf; -use snforge_std::{ - ContractClassTrait, EventSpy, EventSpyTrait, EventsFilterTrait, EventSpyAssertionsTrait -}; -use starknet::{ContractAddress, storage::StorageMemberAccessTrait}; -use starknet_bridge::mocks::{ - messaging::{IMockMessagingDispatcherTrait, IMockMessagingDispatcher}, erc20::ERC20 -}; -use piltover::messaging::{IMessaging, IMessagingDispatcher, IMessagingDispatcherTrait}; +use snforge_std::EventSpy; +use starknet_bridge::mocks::{messaging::{IMockMessagingDispatcherTrait, IMockMessagingDispatcher},}; use starknet_bridge::bridge::{ - ITokenBridge, ITokenBridgeAdmin, ITokenBridgeDispatcher, ITokenBridgeDispatcherTrait, - ITokenBridgeAdminDispatcher, ITokenBridgeAdminDispatcherTrait, IWithdrawalLimitStatusDispatcher, - IWithdrawalLimitStatusDispatcherTrait, TokenBridge, TokenBridge::Event, - types::{TokenStatus, TokenSettings} -}; -use openzeppelin::access::ownable::{ - OwnableComponent, OwnableComponent::Event as OwnableEvent, - interface::{IOwnableTwoStepDispatcher, IOwnableTwoStepDispatcherTrait} + ITokenBridgeDispatcher, ITokenBridgeDispatcherTrait, ITokenBridgeAdminDispatcher, + ITokenBridgeAdminDispatcherTrait, IWithdrawalLimitStatusDispatcher, }; -use openzeppelin::token::erc20::interface::{IERC20, IERC20Dispatcher, IERC20DispatcherTrait}; +use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait}; use starknet::contract_address::{contract_address_const}; -use super::constants::{OWNER, L3_BRIDGE_ADDRESS, DELAY_TIME}; +use super::constants::{OWNER, L3_BRIDGE_ADDRESS}; use starknet_bridge::bridge::tests::utils::setup::{ - deploy_erc20, deploy_token_bridge_with_messaging, deploy_token_bridge, enroll_token_and_settle + deploy_erc20, deploy_token_bridge_with_messaging, enroll_token_and_settle }; use starknet_bridge::constants; use starknet_bridge::bridge::tests::utils::message_payloads; diff --git a/tests/withdrawal_limit_bridge_test.cairo b/tests/withdrawal_limit_bridge_test.cairo index f504068..9e9b144 100644 --- a/tests/withdrawal_limit_bridge_test.cairo +++ b/tests/withdrawal_limit_bridge_test.cairo @@ -1,4 +1,3 @@ -use starknet_bridge::bridge::token_bridge::TokenBridge::__member_module_token_settings::InternalContractMemberStateTrait; use core::array::ArrayTrait; use core::serde::Serde; use core::result::ResultTrait; @@ -6,7 +5,7 @@ use core::option::OptionTrait; use core::traits::TryInto; use snforge_std as snf; use snforge_std::{ContractClassTrait, EventSpy, EventSpyTrait, EventSpyAssertionsTrait}; -use starknet::{ContractAddress, storage::StorageMemberAccessTrait}; +use starknet::ContractAddress; use starknet_bridge::mocks::{ messaging::{IMockMessagingDispatcherTrait, IMockMessagingDispatcher}, erc20::ERC20 };