Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix/fix double pay order #684

Merged
merged 37 commits into from
Jun 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
b8d4b7d
refactor integration tests
sparqet Mar 28, 2024
e73f640
Merge branch 'keep-starknet-strange:main' into main
sparqet Mar 28, 2024
b13389c
Merge branch 'keep-starknet-strange:main' into main
sparqet Apr 2, 2024
78ec91d
Merge branch 'keep-starknet-strange:main' into main
sparqet Apr 2, 2024
4c78e9f
Merge branch 'keep-starknet-strange:main' into main
sparqet Apr 4, 2024
d48b3ac
Merge branch 'keep-starknet-strange:main' into main
sparqet Apr 7, 2024
d6576f2
Merge branch 'keep-starknet-strange:main' into main
sparqet Apr 27, 2024
03275ad
Merge branch 'keep-starknet-strange:main' into main
sparqet Apr 29, 2024
081ad0d
Merge branch 'keep-starknet-strange:main' into main
sparqet May 3, 2024
805051d
Merge branch 'keep-starknet-strange:main' into main
sparqet May 4, 2024
37ab80c
Merge branch 'keep-starknet-strange:main' into main
sparqet May 6, 2024
737e875
Merge branch 'keep-starknet-strange:main' into main
sparqet May 14, 2024
be40dd9
Merge branch 'keep-starknet-strange:main' into main
sparqet May 14, 2024
c622495
Merge branch 'keep-starknet-strange:main' into main
sparqet May 15, 2024
a7cfaf4
Merge branch 'keep-starknet-strange:main' into main
sparqet May 17, 2024
41fbcaa
Merge branch 'keep-starknet-strange:main' into main
sparqet Jun 17, 2024
8507776
Merge branch 'keep-starknet-strange:main' into main
sparqet Jun 18, 2024
9ad32b1
Merge branch 'keep-starknet-strange:main' into main
sparqet Jun 18, 2024
5ef52f9
Merge branch 'keep-starknet-strange:main' into main
sparqet Jun 18, 2024
170b9ae
Merge branch 'keep-starknet-strange:main' into main
sparqet Jun 19, 2024
a6309e9
Merge branch 'keep-starknet-strange:main' into main
sparqet Jun 19, 2024
ee77c9d
Merge branch 'keep-starknet-strange:main' into main
sparqet Jun 20, 2024
15c4d23
Merge branch 'keep-starknet-strange:main' into main
sparqet Jun 21, 2024
22c97f7
Merge branch 'keep-starknet-strange:main' into main
sparqet Jun 21, 2024
9893810
Merge branch 'keep-starknet-strange:main' into main
sparqet Jun 24, 2024
3c76bd6
Merge branch 'keep-starknet-strange:main' into main
sparqet Jun 24, 2024
c366740
Merge branch 'keep-starknet-strange:main' into main
sparqet Jun 24, 2024
e6c6635
Merge branch 'keep-starknet-strange:main' into main
sparqet Jun 25, 2024
fa2ddf2
Merge branch 'keep-starknet-strange:main' into main
sparqet Jun 25, 2024
f4debbe
use send_tokens instead of transfer
sparqet Jun 25, 2024
f82633c
short opened closed
sparqet Jun 26, 2024
cd2bbf4
short position open close
sparqet Jun 27, 2024
7aa7182
Merge branch 'main' into test/short_open_close
sparqet Jun 27, 2024
6680262
refacto short test
sparqet Jun 27, 2024
5f01657
change transfer out call
sparqet Jun 27, 2024
eeea447
Merge branch 'main' into fix/fix_double_pay_order
sparqet Jun 27, 2024
4a4ad4a
fix coding style
sparqet Jun 27, 2024
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
18 changes: 14 additions & 4 deletions src/bank/bank.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
// Core lib imports.
use core::traits::Into;
use starknet::ContractAddress;
use satoru::token::erc20::interface::{IERC20, IERC20Dispatcher, IERC20DispatcherTrait};

// *************************************************************************
// Interface of the `Bank` contract.
Expand All @@ -29,7 +30,11 @@ trait IBank<TContractState> {
/// * `receiver` - The address of the receiver.
/// * `amount` - The amount of tokens to transfer.
fn transfer_out(
ref self: TContractState, token: ContractAddress, receiver: ContractAddress, amount: u256,
ref self: TContractState,
sender: ContractAddress,
token: ContractAddress,
receiver: ContractAddress,
amount: u256,
);
}

Expand All @@ -50,7 +55,9 @@ mod Bank {
use super::IBank;
use satoru::bank::error::BankError;
use satoru::role::role_module::{RoleModule, IRoleModule};
use satoru::token::token_utils::transfer;
// use satoru::token::token_utils::transfer;
use satoru::token::erc20::interface::{IERC20, IERC20Dispatcher, IERC20DispatcherTrait};


// *************************************************************************
// STORAGE
Expand Down Expand Up @@ -101,6 +108,7 @@ mod Bank {

fn transfer_out(
ref self: ContractState,
sender: ContractAddress,
token: ContractAddress,
receiver: ContractAddress,
amount: u256,
Expand All @@ -109,7 +117,7 @@ mod Bank {
// let mut role_module: RoleModule::ContractState =
// RoleModule::unsafe_new_contract_state();
// role_module.only_controller();
self.transfer_out_internal(token, receiver, amount);
self.transfer_out_internal(sender, token, receiver, amount);
}
}

Expand All @@ -122,13 +130,15 @@ mod Bank {
/// * `receiver` - receiver the address to transfer to
fn transfer_out_internal(
ref self: ContractState,
sender: ContractAddress,
token: ContractAddress,
receiver: ContractAddress,
amount: u256,
) {
// check that receiver is not this contract
assert(receiver != get_contract_address(), BankError::SELF_TRANSFER_NOT_SUPPORTED);
transfer(self.data_store.read(), token, receiver, amount);
// transfer(self.data_store.read(), token, receiver, amount); // TODO check double send
IERC20Dispatcher { contract_address: token }.transfer_from(sender, receiver, amount);
}
}
}
11 changes: 9 additions & 2 deletions src/bank/strict_bank.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
// Core lib imports.
use traits::{Into, TryInto};
use starknet::{ContractAddress, get_contract_address};
use satoru::token::erc20::interface::{IERC20, IERC20Dispatcher, IERC20DispatcherTrait};

// *************************************************************************
// Interface of the `StrictBank` contract.
Expand All @@ -29,7 +30,11 @@ trait IStrictBank<TContractState> {
/// * `receiver` - The address of the receiver.
/// * `amount` - The amount of tokens to transfer.
fn transfer_out(
ref self: TContractState, token: ContractAddress, receiver: ContractAddress, amount: u256,
ref self: TContractState,
sender: ContractAddress,
token: ContractAddress,
receiver: ContractAddress,
amount: u256,
);

/// Records a token transfer into the contract
Expand Down Expand Up @@ -67,6 +72,7 @@ mod StrictBank {
use super::IStrictBank;
use satoru::token::erc20::interface::{IERC20, IERC20Dispatcher, IERC20DispatcherTrait};
use satoru::role::role_module::{RoleModule, IRoleModule};
use debug::PrintTrait;

// *************************************************************************
// STORAGE
Expand Down Expand Up @@ -108,12 +114,13 @@ mod StrictBank {

fn transfer_out(
ref self: ContractState,
sender: ContractAddress,
token: ContractAddress,
receiver: ContractAddress,
amount: u256,
) {
let mut state: Bank::ContractState = Bank::unsafe_new_contract_state();
IBank::transfer_out(ref state, token, receiver, amount);
IBank::transfer_out(ref state, sender, token, receiver, amount);
self.after_transfer_out_infernal(token);
}

Expand Down
10 changes: 8 additions & 2 deletions src/deposit/deposit_utils.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -171,14 +171,20 @@ fn cancel_deposit(
if deposit.initial_long_token_amount > 0 {
deposit_vault
.transfer_out(
deposit.initial_long_token, deposit.account, deposit.initial_long_token_amount
deposit_vault.contract_address,
deposit.initial_long_token,
deposit.account,
deposit.initial_long_token_amount
);
}

if deposit.initial_short_token_amount > 0 {
deposit_vault
.transfer_out(
deposit.initial_short_token, deposit.account, deposit.initial_short_token_amount
deposit_vault.contract_address,
deposit.initial_short_token,
deposit.account,
deposit.initial_short_token_amount
);
}

Expand Down
9 changes: 7 additions & 2 deletions src/deposit/deposit_vault.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,11 @@ trait IDepositVault<TContractState> {
/// * `receiver` - The address of the receiver.
/// * `amount` - The amount of tokens to transfer.
fn transfer_out(
ref self: TContractState, token: ContractAddress, receiver: ContractAddress, amount: u256,
ref self: TContractState,
sender: ContractAddress,
token: ContractAddress,
receiver: ContractAddress,
amount: u256,
);

/// Records a token transfer into the contract.
Expand Down Expand Up @@ -114,12 +118,13 @@ mod DepositVault {

fn transfer_out(
ref self: ContractState,
sender: ContractAddress,
token: ContractAddress,
receiver: ContractAddress,
amount: u256,
) {
let mut state: StrictBank::ContractState = StrictBank::unsafe_new_contract_state();
IStrictBank::transfer_out(ref state, token, receiver, amount);
IStrictBank::transfer_out(ref state, sender, token, receiver, amount);
}

fn record_transfer_in(ref self: ContractState, token: ContractAddress) -> u256 {
Expand Down
4 changes: 2 additions & 2 deletions src/fee/fee_utils.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ fn claim_fees(
let fee_amount = data_store.get_u256(key);
data_store.set_u256(key, 0);

IBankDispatcher { contract_address: market }.transfer_out(token, receiver, fee_amount);
IBankDispatcher { contract_address: market }.transfer_out(market, token, receiver, fee_amount);

validate_market_token_balance_with_address(data_store, market);

Expand Down Expand Up @@ -127,7 +127,7 @@ fn claim_ui_fees(
let next_pool_value = data_store
.decrement_u256(keys::claimable_ui_fee_amount_key(market, token), fee_amount);

IBankDispatcher { contract_address: market }.transfer_out(token, receiver, fee_amount);
IBankDispatcher { contract_address: market }.transfer_out(market, token, receiver, fee_amount);

validate_market_token_balance_with_address(data_store, market);

Expand Down
16 changes: 8 additions & 8 deletions src/gas/gas_utils.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ fn pay_execution_fee(
execution_fee_for_keeper = execution_fee;
}

bank.transfer_out(fee_token, keeper, execution_fee_for_keeper);
bank.transfer_out(bank.contract_address, fee_token, keeper, execution_fee_for_keeper);

event_emitter.emit_keeper_execution_fee(keeper, execution_fee_for_keeper);

Expand All @@ -90,7 +90,7 @@ fn pay_execution_fee(
return;
}

bank.transfer_out(fee_token, refund_receiver, refund_fee_amount);
bank.transfer_out(bank.contract_address, fee_token, refund_receiver, refund_fee_amount);

event_emitter.emit_execution_fee_refund(refund_receiver, refund_fee_amount);
}
Expand Down Expand Up @@ -119,7 +119,7 @@ fn pay_execution_fee_deposit(
execution_fee_for_keeper = execution_fee;
}

bank.transfer_out(fee_token, keeper, execution_fee_for_keeper);
bank.transfer_out(bank.contract_address, fee_token, keeper, execution_fee_for_keeper);

event_emitter.emit_keeper_execution_fee(keeper, execution_fee_for_keeper);

Expand All @@ -130,7 +130,7 @@ fn pay_execution_fee_deposit(
return;
}

bank.transfer_out(fee_token, refund_receiver, refund_fee_amount);
bank.transfer_out(bank.contract_address, fee_token, refund_receiver, refund_fee_amount);

event_emitter.emit_execution_fee_refund(refund_receiver, refund_fee_amount);
}
Expand Down Expand Up @@ -158,7 +158,7 @@ fn pay_execution_fee_order(
execution_fee_for_keeper = execution_fee;
}

bank.transfer_out(fee_token, keeper, execution_fee_for_keeper);
bank.transfer_out(bank.contract_address, fee_token, keeper, execution_fee_for_keeper);

event_emitter.emit_keeper_execution_fee(keeper, execution_fee_for_keeper);

Expand All @@ -169,7 +169,7 @@ fn pay_execution_fee_order(
return;
}

bank.transfer_out(fee_token, refund_receiver, refund_fee_amount);
bank.transfer_out(bank.contract_address, fee_token, refund_receiver, refund_fee_amount);

event_emitter.emit_execution_fee_refund(refund_receiver, refund_fee_amount);
}
Expand Down Expand Up @@ -197,7 +197,7 @@ fn pay_execution_fee_withdrawal(
execution_fee_for_keeper = execution_fee;
}

bank.transfer_out(fee_token, keeper, execution_fee_for_keeper);
bank.transfer_out(bank.contract_address, fee_token, keeper, execution_fee_for_keeper);

event_emitter.emit_keeper_execution_fee(keeper, execution_fee_for_keeper);

Expand All @@ -208,7 +208,7 @@ fn pay_execution_fee_withdrawal(
return;
}

bank.transfer_out(fee_token, refund_receiver, refund_fee_amount);
bank.transfer_out(bank.contract_address, fee_token, refund_receiver, refund_fee_amount);

event_emitter.emit_execution_fee_refund(refund_receiver, refund_fee_amount);
}
Expand Down
9 changes: 7 additions & 2 deletions src/market/market_token.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,11 @@ trait IMarketToken<TState> {
fn mint(ref self: TState, recipient: ContractAddress, amount: u256);
fn burn(ref self: TState, recipient: ContractAddress, amount: u256);
fn transfer_out(
ref self: TState, token: ContractAddress, receiver: ContractAddress, amount: u256,
ref self: TState,
sender: ContractAddress,
token: ContractAddress,
receiver: ContractAddress,
amount: u256,
);
}

Expand Down Expand Up @@ -153,12 +157,13 @@ mod MarketToken {
}
fn transfer_out(
ref self: ContractState,
sender: ContractAddress,
token: ContractAddress,
receiver: ContractAddress,
amount: u256,
) {
let mut bank: Bank::ContractState = Bank::unsafe_new_contract_state();
IBank::transfer_out(ref bank, token, receiver, amount);
IBank::transfer_out(ref bank, sender, token, receiver, amount);
}
}

Expand Down
8 changes: 3 additions & 5 deletions src/market/market_utils.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -586,7 +586,7 @@ fn claim_funding_fees(

// Transfer the amount to the receiver.
IBankDispatcher { contract_address: market_address }
.transfer_out(token, receiver, claimable_amount);
.transfer_out(market_address, token, receiver, claimable_amount);

// Validate the market token balance.
validate_market_token_balance_with_address(data_store, market_address);
Expand Down Expand Up @@ -662,7 +662,7 @@ fn claim_collateral(
let next_pool_value = data_store.decrement_u256(key, amount_to_be_claimed);

IBankDispatcher { contract_address: market_address }
.transfer_out(token, receiver, amount_to_be_claimed);
.transfer_out(market_address, token, receiver, amount_to_be_claimed);

validate_market_token_balance_with_address(data_store, market_address);

Expand Down Expand Up @@ -1492,9 +1492,7 @@ fn validate_reserve(
let max_reserved_usd = apply_factor_u256(pool_usd, reserve_factor);

let reserved_usd = get_reserved_usd(data_store, market, prices, is_long);
'max reserve'.print();
max_reserved_usd.print();
'end'.print();

if (reserved_usd > max_reserved_usd) {
MarketError::INSUFFICIENT_RESERVE(reserved_usd, max_reserved_usd);
}
Expand Down
9 changes: 7 additions & 2 deletions src/order/decrease_order_utils.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -186,10 +186,13 @@ mod DecreaseOrderUtils {
order.min_output_amount
);
IMarketTokenDispatcher { contract_address: order.market }
.transfer_out(result.output_token, order.receiver, result.output_amount);
.transfer_out(
order.market, result.output_token, order.receiver, result.output_amount
);

IMarketTokenDispatcher { contract_address: order.market }
.transfer_out(
order.market,
result.secondary_output_token,
order.receiver,
result.secondary_output_amount
Expand Down Expand Up @@ -337,7 +340,9 @@ mod DecreaseOrderUtils {
);

IMarketTokenDispatcher { contract_address: order.market }
.transfer_out(result.output_token, order.receiver, result.output_amount);
.transfer_out(
order.market, result.output_token, order.receiver, result.output_amount
);
}
// This function should return an EventLogData cause the callback_utils
// needs it. We need to find a solution for that case.
Expand Down
1 change: 1 addition & 0 deletions src/order/order_utils.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,7 @@ mod OrderUtils {
if (order.initial_collateral_delta_amount > 0) {
order_vault
.transfer_out(
order_vault.contract_address,
order.initial_collateral_token,
order.account,
order.initial_collateral_delta_amount,
Expand Down
10 changes: 8 additions & 2 deletions src/order/order_vault.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@ trait IOrderVault<TContractState> {
/// * `receiver` - The address of the receiver.
/// * `amount` - The amount of tokens to transfer.
fn transfer_out(
ref self: TContractState, token: ContractAddress, receiver: ContractAddress, amount: u256,
ref self: TContractState,
sender: ContractAddress,
token: ContractAddress,
receiver: ContractAddress,
amount: u256,
);
/// Records a token transfer into the contract.
/// # Arguments
Expand Down Expand Up @@ -48,6 +52,7 @@ mod OrderVault {

// Local imports.
use satoru::bank::strict_bank::{StrictBank, IStrictBank};
use debug::PrintTrait;

// *************************************************************************
// STORAGE
Expand Down Expand Up @@ -79,12 +84,13 @@ mod OrderVault {
impl OrderVaultImpl of super::IOrderVault<ContractState> {
fn transfer_out(
ref self: ContractState,
sender: ContractAddress,
token: ContractAddress,
receiver: ContractAddress,
amount: u256,
) {
let mut state: StrictBank::ContractState = StrictBank::unsafe_new_contract_state();
IStrictBank::transfer_out(ref state, token, receiver, amount);
IStrictBank::transfer_out(ref state, sender, token, receiver, amount);
}

fn sync_token_balance(ref self: ContractState, token: ContractAddress) -> u256 {
Expand Down
2 changes: 1 addition & 1 deletion src/referral/referral_utils.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ fn claim_affiliate_reward(
.decrement_u256(keys::affiliate_reward_key(market, token), reward_amount);

IMarketTokenDispatcher { contract_address: market }
.transfer_out(token, receiver, reward_amount);
.transfer_out(market, token, receiver, reward_amount);

market_utils::validate_market_token_balance_with_address(data_store, market);

Expand Down
Loading
Loading