keep-starknet-strange / satoru

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

bug: Missing increasement in oracle module leading to infinity loop #602

Closed 0xandee closed 8 months ago

0xandee commented 9 months ago

Bug Report

Satoru version: https://github.com/keep-starknet-strange/satoru/commit/e665cfeca0b29879417dded83127ea583dd2af5c

Current behavior: Error: Could not reach the end of the program. RunResources has no remaining steps. when running with_simulated_oracle_prices_before function in oracle_modules.cairo

Expected behavior: Loop through all params.primary_tokens.len()

Steps to reproduce: Calling simulate_execute_order inside order handler contract.

Related code:

fn with_simulated_oracle_prices_before(oracle: IOracleDispatcher, params: SimulatePricesParams) {
    if (params.primary_tokens.len() != params.primary_prices.len()) {
        OracleError::INVALID_PRIMARY_PRICES_FOR_SIMULATION(
            params.primary_tokens.len(), params.primary_prices.len()
        );
    }
    let cur_idx = 0;
    loop {
        if (cur_idx == params.primary_tokens.len()) {
            break ();
        }
        let token: ContractAddress = *params.primary_tokens.at(cur_idx);
        let price: Price = *params.primary_prices.at(cur_idx);
        oracle.set_primary_price(token, price);
    };
}

Expected code:

fn with_simulated_oracle_prices_before(oracle: IOracleDispatcher, params: SimulatePricesParams) {
    if (params.primary_tokens.len() != params.primary_prices.len()) {
        OracleError::INVALID_PRIMARY_PRICES_FOR_SIMULATION(
            params.primary_tokens.len(), params.primary_prices.len()
        );
    }
    let mut cur_idx = 0;
    loop {
        if (cur_idx == params.primary_tokens.len()) {
            break ();
        }
        let token: ContractAddress = *params.primary_tokens.at(cur_idx);
        let price: Price = *params.primary_prices.at(cur_idx);
        oracle.set_primary_price(token, price);
        cur_idx = cur_idx + 1;
    };
}

Other information: Happy to make PR of the fix!