From ec764188509332b8115d5102838cf547e7db1dfd Mon Sep 17 00:00:00 2001 From: 0xChqrles Date: Wed, 18 Sep 2024 00:13:42 +0200 Subject: [PATCH] fix tests --- .../src/components/escrow/escrow_test.cairo | 49 +------------------ .../contracts/ramps/revolut/interface.cairo | 26 +++++++++- .../src/contracts/ramps/revolut/revolut.cairo | 7 ++- .../ramps/revolut/revolut_test.cairo | 36 ++++++-------- contracts/src/tests/constants.cairo | 2 +- 5 files changed, 48 insertions(+), 72 deletions(-) diff --git a/contracts/src/components/escrow/escrow_test.cairo b/contracts/src/components/escrow/escrow_test.cairo index 677a946..7ac421c 100644 --- a/contracts/src/components/escrow/escrow_test.cairo +++ b/contracts/src/components/escrow/escrow_test.cairo @@ -1,8 +1,8 @@ use core::starknet::get_contract_address; use openzeppelin::presets::interfaces::ERC20UpgradeableABIDispatcherTrait; -use snforge_std::{start_cheat_caller_address, EventSpyAssertionsTrait, spy_events}; -use zkramp::components::escrow::escrow::EscrowComponent::{Event, Locked, UnLocked, EscrowImpl}; +use snforge_std::start_cheat_caller_address; +use zkramp::components::escrow::escrow::EscrowComponent::EscrowImpl; use zkramp::components::escrow::escrow_mock::{TestingStateDefault, ComponentState}; use zkramp::tests::constants; use zkramp::tests::utils; @@ -14,7 +14,6 @@ use zkramp::tests::utils; #[test] fn test_lock() { - let mut spy = spy_events(); let token_dispatcher = utils::setup_erc20(recipient: constants::OWNER()); start_cheat_caller_address(token_dispatcher.contract_address, constants::OWNER()); @@ -31,25 +30,11 @@ fn test_lock() { assert_eq!(token_dispatcher.balance_of(constants::SPENDER()), 58); assert_eq!(token_dispatcher.allowance(constants::SPENDER(), constants::RECIPIENT()), 0); - - // test event emission - spy - .assert_emitted( - @array![ - ( - get_contract_address(), - Event::Locked( - Locked { token: token_dispatcher.contract_address, from: constants::SPENDER(), amount: 42 } - ) - ) - ] - ) } #[test] fn test_lock_unlock() { - let mut spy = spy_events(); let token_dispatcher = utils::setup_erc20(recipient: constants::OWNER()); start_cheat_caller_address(token_dispatcher.contract_address, constants::OWNER()); @@ -75,36 +60,6 @@ fn test_lock_unlock() { assert_eq!(token_dispatcher.balance_of(constants::RECIPIENT()), 42); assert_eq!(token_dispatcher.allowance(constants::SPENDER(), constants::RECIPIENT()), 0); assert_eq!(escrow.deposits.read((constants::SPENDER(), token_dispatcher.contract_address)), 0); - - // test event emission - spy - .assert_emitted( - @array![ - ( - get_contract_address(), - Event::Locked( - Locked { token: token_dispatcher.contract_address, from: constants::SPENDER(), amount: 42 } - ) - ) - ] - ); - - spy - .assert_emitted( - @array![ - ( - get_contract_address(), - Event::UnLocked( - UnLocked { - token: token_dispatcher.contract_address, - from: constants::SPENDER(), - to: constants::RECIPIENT(), - amount: 42 - } - ) - ) - ] - ) } diff --git a/contracts/src/contracts/ramps/revolut/interface.cairo b/contracts/src/contracts/ramps/revolut/interface.cairo index 120335b..3c71e05 100644 --- a/contracts/src/contracts/ramps/revolut/interface.cairo +++ b/contracts/src/contracts/ramps/revolut/interface.cairo @@ -1,4 +1,4 @@ -use starknet::ContractAddress; +use starknet::{ContractAddress, ClassHash}; use zkramp::components::registry::interface::OffchainId; #[derive(Drop, Serde)] @@ -18,3 +18,27 @@ pub trait IZKRampLiquidity { fn retrieve_liquidity(ref self: TState, liquidity_key: LiquidityKey); fn initiate_liquidity_retrieval(ref self: TState, liquidity_key: LiquidityKey); } + +#[starknet::interface] +pub trait ZKRampABI { + // IZKRampLiquidity + fn add_liquidity(ref self: TState, amount: u256, offchain_id: OffchainId); + fn retrieve_liquidity(ref self: TState, liquidity_key: LiquidityKey); + fn initiate_liquidity_retrieval(ref self: TState, liquidity_key: LiquidityKey); + + // IRegistry + fn is_registered(self: @TState, contract_address: ContractAddress, offchain_id: OffchainId) -> bool; + fn register(ref self: TState, offchain_id: OffchainId); + + // IOwnable + fn owner(self: @TState) -> ContractAddress; + fn transfer_ownership(ref self: TState, new_owner: ContractAddress); + fn renounce_ownership(ref self: TState); + + // IOwnableCamelOnly + fn transferOwnership(ref self: TState, newOwner: ContractAddress); + fn renounceOwnership(ref self: TState); + + // IUpgradeable + fn upgrade(ref self: TState, new_class_hash: ClassHash); +} diff --git a/contracts/src/contracts/ramps/revolut/revolut.cairo b/contracts/src/contracts/ramps/revolut/revolut.cairo index 3b42cc2..ac06579 100644 --- a/contracts/src/contracts/ramps/revolut/revolut.cairo +++ b/contracts/src/contracts/ramps/revolut/revolut.cairo @@ -54,7 +54,7 @@ pub mod RevolutRamp { pub const INVALID_AMOUNT: felt252 = 'Invalid amount'; pub const WRONG_CALLER_ADDRESS: felt252 = 'Wrong caller address'; pub const EMPTY_LIQUIDITY_RETRIEVAL: felt252 = 'Empty liquidity retrieval'; - pub const LOCKED_LIQUIDITY_RETRIEVAL: felt252 = 'Locked liquidity retrieval'; + pub const UNLOCKED_LIQUIDITY_RETRIEVAL: felt252 = 'Unlocked liquidity retrieval'; } // @@ -160,6 +160,11 @@ pub mod RevolutRamp { fn retrieve_liquidity(ref self: ContractState, liquidity_key: LiquidityKey) { let caller = get_caller_address(); + // asserts caller is the liquidity owner + assert(self.locked_liquidity.read(liquidity_key), Errors::UNLOCKED_LIQUIDITY_RETRIEVAL); + // asserts caller is the liquidity owner + assert(liquidity_key.owner == caller, Errors::WRONG_CALLER_ADDRESS); + let token = self.token.read(); let amount = self.liquidity.read(liquidity_key); diff --git a/contracts/src/contracts/ramps/revolut/revolut_test.cairo b/contracts/src/contracts/ramps/revolut/revolut_test.cairo index 50461ae..717c926 100644 --- a/contracts/src/contracts/ramps/revolut/revolut_test.cairo +++ b/contracts/src/contracts/ramps/revolut/revolut_test.cairo @@ -1,41 +1,33 @@ -use core::hash::{HashStateTrait, HashStateExTrait}; -use core::poseidon::PoseidonTrait; - -use core::starknet::{ContractAddress, contract_address_const, get_caller_address}; - +use core::starknet::{ContractAddress, get_caller_address}; +use openzeppelin::utils::serde::SerializedAppend; use snforge_std::{declare, ContractClassTrait, start_cheat_caller_address, test_address}; -use zkramp::contracts::ramps::revolut::interface::{IzkRampABIDispatcher, IzkRampABIDispatcherTrait}; -use zkramp::contracts::ramps::revolut::revolut::RevolutRamp::RevolutImpl; - +use zkramp::contracts::ramps::revolut::interface::{ZKRampABIDispatcher, ZKRampABIDispatcherTrait, LiquidityKey}; use zkramp::tests::constants; -fn deploy_revolut_ramp() -> (IzkRampABIDispatcher, ContractAddress) { +fn deploy_revolut_ramp() -> ZKRampABIDispatcher { let contract = declare("RevolutRamp").unwrap(); - let owner: ContractAddress = contract_address_const::<'owner'>(); - let escrow: ContractAddress = contract_address_const::<'escrow'>(); - let mut constructor_calldata = array![owner.into(), escrow.into()]; + let mut calldata = array![]; - let (contract_address, _) = contract.deploy(@constructor_calldata).unwrap(); + calldata.append_serde(constants::OWNER()); + // TODO: give a relevant token address for better tests + calldata.append_serde(constants::OWNER()); - let dispatcher = IzkRampABIDispatcher { contract_address }; + let (contract_address, _) = contract.deploy(@calldata).unwrap(); - (dispatcher, contract_address) + ZKRampABIDispatcher { contract_address } } #[test] -#[should_panic(expected: 'Empty liquidity retrieval')] +#[should_panic(expected: 'Unlocked liquidity retrieval')] fn test_retrieve_uninitialized_liquidity_should_panic() { let test_address: ContractAddress = test_address(); start_cheat_caller_address(test_address, constants::CALLER()); - let (revolut_ramp, _) = deploy_revolut_ramp(); + let revolut_ramp = deploy_revolut_ramp(); - let liquidity_id = PoseidonTrait::new() - .update_with(get_caller_address()) - .update_with(constants::REVOLUT_ID()) - .finalize(); + let liquidity_key = LiquidityKey { owner: get_caller_address(), offchain_id: constants::REVOLUT_ID() }; - revolut_ramp.retrieve_liquidity(liquidity_id); + revolut_ramp.retrieve_liquidity(:liquidity_key); } diff --git a/contracts/src/tests/constants.cairo b/contracts/src/tests/constants.cairo index e39a1b3..b967bb0 100644 --- a/contracts/src/tests/constants.cairo +++ b/contracts/src/tests/constants.cairo @@ -12,7 +12,7 @@ pub fn CALLER() -> ContractAddress { } pub fn SPENDER() -> ContractAddress { - contract_address_const::<'soender'>() + contract_address_const::<'spender'>() } pub fn RECIPIENT() -> ContractAddress {