Aida Circle - Audit 1

CertiKFiles named in the report

CertiK reviewed Circle (Aida Circle - Audit 1) on 28 Sep 2022: 4 findings, 0 critical; all marked fixed.

No open critical findings
Open the reportOpen Circle’s security record

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings4

Statuses are the security firm’s own, from its report.

SeverityOpenAcknowledgedFixed
Critical000
High001
Medium001
Low002
HighCentralization Related RisksFixed

In the contract AidaNFT.sol the role `GOV_ROLE` has authority over the following functions: - withdraw() - pause() - unpause() The role `WITHDRAWN_VALUE_ROLE` has authority over the following function: - withdraw() Any compromise to the `GOV_ROLE` and `WITHDRAWN_VALUE_ROLE` accounts may allow a hacker to take advantage of this authority and withdraw ETH from this contract and pause/unpause mint() and withdraw() functions.

MediumReentrancy AttackFixed

A reentrancy attack can occur when the contract creates a function that makes an external call to another untrusted contract before resolving any effects. If the attacker can control the untrusted contract, they can make a recursive call back to the original function, repeating interactions that would have otherwise not run after the external call resolved the effects. ### External call(s) ```solidity=69 _safeMint(msg.sender, id); ``` * This function call executes the following external call(s). * In `ERC721._checkOnERC721Received`, * `IERC721Receiver(to).onERC721Received(_msgSender(),from,tokenId,data)` ### State variables written and Event emitted after the call(s) ```solidity=70 _setTokenURI(id, metadataURI); totalWithdrawals += msg.value; emit tokenMint(id, metadataURI, msg.sender, msg.value); metadataURIExists[metadataURI] = true; ``` An attacker can perform a reentrancy attackto mint multiple NFT using the same "metadataURI".

LowImproper Usage of `public` and `external` TypeFixed

`public` functions that are never called by the contract could be declared as `external`. `external` functions are more efficient than `public` functions.

LowUsage of `transfer`/`send` for sending EtherFixed

It is not recommended to use Solidity's `transfer()` and `send()` functions for transferring Ether, since some contracts may not be able to receive the funds. Those functions forward only a fixed amount of gas (2300 specifically) and the receiving contracts may run out of gas before finishing the transfer. Also, EVM instructions' gas costs may increase in the future. Thus, some contracts that can receive now may stop working in the future due to the gas limitation. ```solidity=84 holderAddress.transfer(amount); ``` - `AidaNFT.withdraw` uses `transfer()`.

Contracts in scope

No deployed address is recorded for this audit.

The report names a repository or files. Open the report to see its scope.

Repository and files the report names (1)

  • contracts/AidaNFT.sol

Part of Circle’s security record

Circle
Audits7 audits by 2 firmsLast audit Feb 2026, by ChainSecurity.
Critical findingsNo open critical findingsAcross the 7 reports, 1 critical finding was reported. It is marked fixed by the firm that reported it.
Open Circle’s security record

Security firm

CertiK

1,045 projects reviewed · 1,376 reports · latest May 2025

See CertiK’s audits

Something wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.

Tell us