Incident,
Source: De.Fi incident database.
- Audits before it
- 2.
- Audits since
- 2, the latest dated 22 Nov 2024.
As of 3 Nov 2026, Gala has 4 audit reports by 1 security firm on Trustblock; the latest is by CertiK, dated 22 Nov 2024. Those reports list no open critical findings. It also holds 1 deployed contract on 1 chain and 1 incident (latest 19 May 2024).
Record last updated . It holds audits, findings and contracts up to Nov 2026, and incidents up to Oct 2026. Trustblock does not review code.
Newest first
| Audit | Security firm | Date | Scope | Critical findings | Report |
|---|---|---|---|---|---|
| Gala Games - TON Bridge | Security firm: CertiK | Date: | Scope: Not recorded (see the report) | 1 critical finding, fixed | Open · skynet.certik.com |
| Gala - Film | Security firm: CertiK | Date: | Scope: 1 address on Ethereum | No open critical findings | Open · skynet.certik.com |
| Gala - governance voting API | Security firm: CertiK | Date: | Scope: Not recorded (see the report) | 1 critical finding, fixed | Open · skynet.certik.com |
| Gala Games - GalaV2 | Security firm: CertiK | Date: | Scope: Files named in the report | No open critical findings | Open · skynet.certik.com |
Statuses are the security firm’s own, from each report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 2 |
| High | 2 | 1 | 2 |
| Medium | 0 | 0 | 3 |
| Low | 5 | 0 | 22 |
In the contract `GalaFilm`, the role `MINTER_ROLE` has authority over the following functions: - `mint()` - `mintBulk()` Any compromise to a `MINTER_ROLE` account may allow a hacker to take advantage of this authority and mint any amount of tokens to any address, particularly one they control. In the contract `GalaFilm`, the role `BLOCKLISTER_ROLE` has authority over the following functions: - `blocklist()` - `unBlocklist()` Any compromise to a `BLOCKLISTER_ROLE` account may allow a hacker to take advantage of this authority and block an address that should not be blocked, or unblock a malicious address during a critical period of time. In the contract `GalaFilm`, the role `DEFAULT_ADMIN_ROLE` has authority over the following functions: - `pause()` - `unpause()` - `transferAdmin()` - `grantRole()` - `revokeRole()` Any compromise to a `DEFAULT_ADMIN_ROLE` account may allow a hacker to take advantage of this authority and pause or unpause sensitive functions within the contract during a critical period of time. By default, the `DEFAULT_ADMIN_ROLE` is the admin role of all other roles and thus can also grant and revoke any role from any account, including their own, and `UPGRADER_ROLE`. All roles have the ability to renounce their own role through `renounceRole()`, potentially leaving the contract without a privileged account.
Open the reportThe `GalaFilm` contract inherits upgradeable contracts, indicating that it is part of an upgradeable system. The privileged role `UPGRADER_ROLE` has the authority to update the implementation contract to possess any logic. Any compromise of the privileged account could allow a hacker to exploit this authority, potentially altering the implementation contract pointed to by the proxy and thus executing malicious functionality within the implementation contract.
Open the reportThe following operations can be made in the cited `for` loop of the codebase: 1. The increment operation saves a small amount of gas if performed from the left (`++i`) instead of from the righthand side (`i++`). 2. The increment operation can be placed in an `unchecked` block at the end of the loop logic, since it is bounded above by the loop limit which must be a `uint256` value, avoiding overflow.
Open the reportFrom Solidity `v0.8.4`, there are more gas-efficient ways to explain to users why an operation failed than through the use of strings. Using custom errors can significantly reduce the size of the deployed bytecode and reduce the gas cost when calls revert.
Open the reportModifier `whenNotPaused` is used both for user-facing and privileged actions. The privileged actions affected by the modifier are: - `mint()` - `mintBulk()` - `blocklist()` - `unBlocklist()` - `addMinter()` - `removeMinter()` - `addUpgrader()` - `removeUpgrader()` - `addBlocklister()` - `removeBlocklister()` - `transferAdmin()` - `grantRole()` - `revokeRole()` Please confirm that it is the intention of the team to prevent the use of each of these functions when the contract is paused.
Open the reportFunction `blocklist()` ensures that the address to be blocked does not possess the `MINTER_ROLE`, `UPGRADER_ROLE`, or `BLOCKLISTER_ROLE`, but the function does not prevent the `DEFAULT_ADMIN_ROLE` from being blocklisted.
Open the reportContracts `Initializable` and `ERC20Upgradeable` are already inherited implicitly through other explicit inheritances and it is not necessary to explicitly include them.
Open the reportAttached through a shared contract address. Our incident data ends in Oct 2026.
Source: De.Fi incident database.
| Address | Chain | Source code |
|---|---|---|
| 0xacc3…15cd0xacc36ebdc4b394f0b03ee2bbd1a6b701c0ab15cd | Chain: Ethereum | Source code: Verified source |
Is this your project? Show this record on your own website. The label states what the record holds, links to this page and updates by itself. It is free and needs no sign-in.
Automatic: the three strongest facts of this project’s own record (its last audit and two more), highlighted. They update with the record. Picking a fact turns Automatic off.
<head><script src="https://widget.trustblock.run/project-widget.min.js" defer></script></head><body><divdata-tb-project-widgetdata-tb-project-slug="gala-games"></div></body>
Paste the code where the label should appear. It uses no API credit and updates by itself.
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