keep-starknet-strange / satoru

Synthetics platform for Starknet, inspired by GMX v2 design.
https://book.satoru.run/
MIT License
110 stars 74 forks source link

bug: List index out of bounds when remove last index element of deposit, withdrawal, order, position in Datastore #607

Closed 0xandee closed 6 months ago

0xandee commented 6 months ago

Bug Report

Satoru version: 567512a

Current behavior: List index out of bounds error when remove last index element using remove_deposit, remove_withdrawal, remove_order, remove_position in Datastore contract.

Expected behavior: Last index element removed from Datastore contract storage.

data_store.set_deposit(key_1, deposit_1);
data_store.set_deposit(key_2, deposit_2);
data_store.set_deposit(key_3, deposit_3);

data_store.remove_deposit(key_3, account);

let deposit_3_by_key = data_store.get_deposit(key_3);
assert(deposit_3_by_key.account.is_zero(), 'deposit3 should be removed');

Same for set_withdrawal, set_order, set_position and remove_withdrawal, remove_order, remove_postion.

Steps to reproduce:

data_store.set_deposit(key_1, deposit_1);
data_store.set_deposit(key_2, deposit_2);
data_store.set_deposit(key_3, deposit_3);

data_store.remove_deposit(key_3, account);

Related code:

/// Remove a deposit value for the given key.
/// # Arguments
/// * `key` - The key to remove the value for.
/// * `account` - The account to remove key for.
fn remove_deposit(ref self: TContractState, key: felt252, account: ContractAddress);

Other information: Happy to push a fix PR