Skip to content

Commit

Permalink
fixes #577 number out of bounds during optimistic start
Browse files Browse the repository at this point in the history
  • Loading branch information
loothero committed Apr 28, 2024
1 parent f7692da commit d96fa21
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 21 deletions.
19 changes: 2 additions & 17 deletions contracts/game/src/lib.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -800,7 +800,7 @@ mod Game {
let adventurer = _load_adventurer(self, adventurer_id);
_assert_upgrades_available(adventurer);

let adventurer_entropy = _load_adventurer_entropy(self, adventurer_id);
let adventurer_entropy = _get_adventurer_entropy(self, adventurer_id);

_get_items_on_market_by_slot(
self,
Expand Down Expand Up @@ -2458,27 +2458,12 @@ mod Game {
self: @ContractState, adventurer_id: felt252
) -> (Adventurer, felt252, GameEntropy, Bag) {
let adventurer = _load_adventurer(self, adventurer_id);
let adventurer_entropy = _load_adventurer_entropy(self, adventurer_id);
let adventurer_entropy = _get_adventurer_entropy(self, adventurer_id);
let game_entropy = _load_game_entropy(self);
let bag = _load_bag(self, adventurer_id);
(adventurer, adventurer_entropy, game_entropy, bag)
}

fn _load_adventurer_entropy(self: @ContractState, adventurer_id: felt252) -> felt252 {
// get the block the adventurer started the game on
let start_block = _load_adventurer_metadata(self, adventurer_id).start_block;

// use longer block delay on mainnet for stronger entropy
let chain_id = starknet::get_execution_info().unbox().tx_info.unbox().chain_id;
if chain_id == MAINNET_CHAIN_ID {
_get_mainnet_entropy(adventurer_id, start_block)
} else if chain_id == GOERLI_CHAIN_ID {
_get_testnet_entropy(adventurer_id, start_block)
} else {
_get_basic_entropy(adventurer_id, start_block)
}
}

fn _load_adventurer(self: @ContractState, adventurer_id: felt252) -> Adventurer {
let mut adventurer = self._adventurer.read(adventurer_id);
_apply_starting_stats(self, ref adventurer, adventurer_id);
Expand Down
22 changes: 18 additions & 4 deletions contracts/game/src/tests/test_game.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,15 @@ mod tests {
game
}

fn basic_upgrade(ref game: IGameDispatcher, adventurer_id: felt252) -> IGameDispatcher {
let shopping_cart = ArrayTrait::<ItemPurchase>::new();
let stat_upgrades = Stats {
strength: 1, dexterity: 0, vitality: 0, intelligence: 0, wisdom: 0, charisma: 0, luck: 0
};
game.upgrade(adventurer_id, 0, stat_upgrades, shopping_cart);
game
}

fn new_adventurer_lvl3(
starting_block: u64, starting_time: u64, starting_entropy: felt252
) -> IGameDispatcher {
Expand All @@ -320,10 +329,13 @@ mod tests {

// go explore
game.explore(ADVENTURER_ID, true);
game.flee(ADVENTURER_ID, true);

// if we encountered a beast, attack it
let adventurer = game.get_adventurer(ADVENTURER_ID);
assert(adventurer.get_level() == 3, 'adventurer should be lvl 3');
if adventurer.beast_health > 0 {
game.attack(ADVENTURER_ID, true);
}
// assert(adventurer.get_level() == 3, 'adventurer should be lvl 3');
game.upgrade(ADVENTURER_ID, 0, stat_upgrades, shopping_cart);

// return game
Expand Down Expand Up @@ -2988,7 +3000,7 @@ mod tests {
fn test_set_starting_entropy_wrong_hash() {
let wrong_starting_entropy = 12345678910112;
let mut game = new_adventurer_lvl3(1000, 1696201757, wrong_starting_entropy);
testing::set_block_number(1002);
testing::set_block_number(1003);

// go out exploring till beast
game.explore(ADVENTURER_ID, true);
Expand All @@ -2998,7 +3010,9 @@ mod tests {
assert(pre_death_adventurer.xp > 0, 'adventurer should have xp');
assert(pre_death_adventurer.gold > 0, 'adventurer should have gold');

// attack beast till death
game.attack(ADVENTURER_ID, true);
basic_upgrade(ref game, ADVENTURER_ID);
game.explore(ADVENTURER_ID, true);
game.attack(ADVENTURER_ID, true);

// adventurer died attacking beast
Expand Down

0 comments on commit d96fa21

Please sign in to comment.