Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 0 additions & 42 deletions src/exchange.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ pub mod Exchange {
use avnu_lib::components::upgradable::UpgradableComponent;
use avnu_lib::interfaces::erc20::{IERC20Dispatcher, IERC20DispatcherTrait};
use avnu_lib::math::muldiv::muldiv;
use core::dict::Felt252Dict;
use core::num::traits::Zero;
use starknet::storage::{Map, StorageMapReadAccess, StorageMapWriteAccess};
use starknet::{ClassHash, ContractAddress, get_caller_address, get_contract_address};
Expand Down Expand Up @@ -247,12 +246,6 @@ pub mod Exchange {
assert(buy_token_min_amount <= buy_token_final_amount, 'Insufficient tokens received');
buy_token.transfer(beneficiary, buy_token_final_amount);

// Dict of bools are supported yet
let mut checked_tokens: Felt252Dict<u64> = Default::default();
// Token to has already been checked
checked_tokens.insert(buy_token_address.into(), 1);
self.assert_no_remaining_tokens(contract_address, routes_span, checked_tokens);

// Emit event
self
.emit(
Expand Down Expand Up @@ -355,11 +348,6 @@ pub mod Exchange {
},
);

// Dict of bools are supported yet
let mut checked_tokens: Felt252Dict<u64> = Default::default();
// Token to has already been checked
checked_tokens.insert(buy_token_address.into(), 1);
self.assert_no_remaining_tokens(contract_address, routes_span, checked_tokens);
true
}

Expand Down Expand Up @@ -489,36 +477,6 @@ pub mod Exchange {
(sell_token_amount_used, buy_token_amount_received)
}

fn assert_no_remaining_tokens(
ref self: ContractState, contract_address: ContractAddress, mut routes: Span<Route>, mut checked_tokens: Felt252Dict<u64>,
) {
if routes.len() == 0 {
return;
}

// Retrieve current route
let route: @Route = routes.pop_front().unwrap();

// Transfer residual tokens
self.assert_no_remaining_token(contract_address, *route.sell_token, ref checked_tokens);
self.assert_no_remaining_token(contract_address, *route.buy_token, ref checked_tokens);

self.assert_no_remaining_tokens(contract_address, routes, checked_tokens);
}

fn assert_no_remaining_token(
ref self: ContractState, contract_address: ContractAddress, token_address: ContractAddress, ref checked_tokens: Felt252Dict<u64>,
) {
// Only do the check when token balance has not already been checked
if checked_tokens.get(token_address.into()) == 0 {
// Check balance and transfer tokens if necessary
let token = IERC20Dispatcher { contract_address: token_address };
let token_balance = token.balanceOf(contract_address);
assert(token_balance == 0, 'Residual tokens');
checked_tokens.insert(token_address.into(), 1);
}
}

fn apply_routes(ref self: ContractState, mut routes: Array<Route>, contract_address: ContractAddress) {
if (routes.len() == 0) {
return;
Expand Down
91 changes: 0 additions & 91 deletions tests/exchange_test.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -205,49 +205,6 @@ mod MultiRouteSwap {
assert(pop_log_raw(sell_token_address).is_none(), 'no more sell_token events');
}

#[test]
#[available_gas(20000000)]
#[should_panic(expected: ('Residual tokens', 'ENTRYPOINT_FAILED'))]
fn should_throw_error_when_residual_tokens() {
// Given
let (exchange, _, _) = deploy_exchange();
let beneficiary = contract_address_const::<0x12345>();
let sell_token = deploy_mock_token(beneficiary, 10, 1);
let sell_token_address = sell_token.contract_address;
let buy_token = deploy_mock_token(beneficiary, 0, 2);
let buy_token_address = buy_token.contract_address;
let sell_token_amount = u256 { low: 10, high: 0 };
let buy_token_min_amount = u256 { low: 1, high: 0 };
let buy_token_amount = u256 { low: 1, high: 0 };
let mut routes = ArrayTrait::new();
routes
.append(
Route {
sell_token: sell_token_address,
buy_token: buy_token_address,
exchange_address: contract_address_const::<0x12>(),
percent: 40 * ROUTE_PERCENT_FACTOR,
additional_swap_params: ArrayTrait::new(),
},
);
set_contract_address(beneficiary);
sell_token.approve(exchange.contract_address, sell_token_amount);

// When
exchange
.multi_route_swap(
sell_token_address,
sell_token_amount,
buy_token_address,
buy_token_amount,
buy_token_min_amount,
beneficiary,
0,
contract_address_const::<0x0>(),
routes,
);
}

#[test]
#[available_gas(20000000)]
#[should_panic(expected: ('Token from amount is 0', 'ENTRYPOINT_FAILED'))]
Expand Down Expand Up @@ -1836,54 +1793,6 @@ mod SwapExactTokenTo {
assert(balance == 0_u256, 'Invalid integrator sell balance');
}

#[test]
#[available_gas(20000000)]
#[should_panic(expected: ('Residual tokens', 'ENTRYPOINT_FAILED'))]
fn should_throw_error_when_residual_tokens() {
// Given
let (exchange, ownable, fee) = deploy_exchange();
let beneficiary = contract_address_const::<0x12345>();
let sell_token = deploy_mock_token(beneficiary, 10, 1);
let sell_token_address = sell_token.contract_address;
let buy_token = deploy_mock_token(beneficiary, 0, 2);
let buy_token_address = buy_token.contract_address;
let sell_token_max_amount = u256 { low: 10, high: 0 };
let sell_token_amount = u256 { low: 9, high: 0 };
set_contract_address(ownable.get_owner());
let fees_recipient = contract_address_const::<0x1111>();
fee.set_fees_recipient(fees_recipient);
let buy_token_amount = u256 { low: 1, high: 0 };
let mut routes = ArrayTrait::new();
routes
.append(
Route {
sell_token: sell_token_address,
buy_token: buy_token_address,
exchange_address: contract_address_const::<0x12>(),
percent: 40 * ROUTE_PERCENT_FACTOR,
additional_swap_params: ArrayTrait::new(),
},
);
set_contract_address(beneficiary);
sell_token.approve(exchange.contract_address, sell_token_max_amount);
let integrator_fee_recipient = contract_address_const::<0x0>();
let integrator_fee = 0_u128;

// When
exchange
.swap_exact_token_to(
sell_token_address,
sell_token_amount,
sell_token_max_amount,
buy_token_address,
buy_token_amount,
beneficiary,
integrator_fee,
integrator_fee_recipient,
routes,
);
}

#[test]
#[available_gas(20000000)]
#[should_panic(expected: ('Token from amount is 0', 'ENTRYPOINT_FAILED'))]
Expand Down