Skip to content

Commit

Permalink
Merge branch 'keep-starknet-strange:main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
sparqet authored Jun 27, 2024
2 parents fa2ddf2 + f3a5732 commit 0744871
Show file tree
Hide file tree
Showing 23 changed files with 1,245 additions and 5,926 deletions.
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
6 changes: 4 additions & 2 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 @@ -1474,6 +1474,8 @@ fn validate_pool_amount(
}
}

use debug::PrintTrait;

/// Validates that the amount of tokens required to be reserved is below the configured threshold.
/// # Arguments
/// * `dataStore`: DataStore - The data storage instance.
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
8 changes: 4 additions & 4 deletions src/router/router.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,10 @@ mod Router {
receiver: ContractAddress,
amount: u256
) {
let mut role_module: RoleModule::ContractState =
RoleModule::unsafe_new_contract_state();
// Check that the caller has the `ROUTER_PLUGIN` role.
role_module.only_router_plugin();
// let mut role_module: RoleModule::ContractState =
// RoleModule::unsafe_new_contract_state();
// // Check that the caller has the `ROUTER_PLUGIN` role.
// role_module.only_router_plugin();

// Transfer tokens from account to receiver.
// It requires that account's allowance to this contract is at least `amount`.
Expand Down
Loading

0 comments on commit 0744871

Please sign in to comment.