AI Arena - Avci's results

In AI Arena you train an AI character to battle in a platform fighting game. Imagine a cross between Pokémon and Super Smash Bros, but the characters are AIs, and you can train them to learn almost any skill in preparation for battle.

General Information

Platform: Code4rena

Start Date: 09/02/2024

Pot Size: $60,500 USDC

Total HM: 17

Participants: 283

Period: 12 days

Judge:

Id: 328

League: ETH

AI Arena

Findings Distribution

Researcher Performance

Rank: 255/283

Findings: 1

Award: $0.23

🌟 Selected for report: 0

🚀 Solo Findings: 0

Lines of code

https://github.com/code-423n4/2024-02-ai-arena/blob/cd1a0e6d1b40168657d1aaee8223dc050e15f8cc/src/MergingPool.sol#L139-L167

Vulnerability details

Vulnerability Details

in the MergingPool.sol contract, the claimRewards() function Allows the user to batch claim rewards for multiple rounds. the issue is if some users don't claim their rewards for some time like a couple of months and roundId increased, users cant claim their rewards because if the user calls the claimRewards() function after a couple of months, will get out of gas error because roundId is increased and function cant handle loop operation.

Impact

Users are unable to claim their rewards after some time gap.

Proof of Concept

function claimRewards(
        string[] calldata modelURIs, 
        string[] calldata modelTypes,
        uint256[2][] calldata customAttributes
    ) 
        external 
    {
        uint256 winnersLength;
        uint32 claimIndex = 0;
        uint32 lowerBound = numRoundsClaimed[msg.sender];
        for (uint32 currentRound = lowerBound; currentRound < roundId; currentRound++) {
            numRoundsClaimed[msg.sender] += 1;
            winnersLength = winnerAddresses[currentRound].length;
            for (uint32 j = 0; j < winnersLength; j++) {
                if (msg.sender == winnerAddresses[currentRound][j]) {
                    _fighterFarmInstance.mintFromMergingPool(
                        msg.sender,
                        modelURIs[claimIndex],
                        modelTypes[claimIndex],
                        customAttributes[claimIndex]
                    );
                    claimIndex += 1;
                }
            }
        }
        if (claimIndex > 0) {
            emit Claimed(msg.sender, claimIndex);
        }
    }

Tools Used

VSCODE

implement claim for everyone function or implement bot for claim user rewards after some time gap.

Assessed type

Other

#0 - c4-pre-sort

2024-02-24T00:06:03Z

raymondfam marked the issue as sufficient quality report

#1 - c4-pre-sort

2024-02-24T00:06:12Z

raymondfam marked the issue as duplicate of #1541

#2 - c4-judge

2024-03-11T13:01:36Z

HickupHH3 marked the issue as duplicate of #216

#3 - c4-judge

2024-03-12T02:36:33Z

HickupHH3 marked the issue as partial-50

#4 - c4-judge

2024-03-21T03:00:03Z

HickupHH3 marked the issue as satisfactory

AuditHub

A portfolio for auditors, a security profile for protocols, a hub for web3 security.

Built bymalatrax © 2024

Auditors

Browse

Contests

Browse

Get in touch

ContactTwitter