Chiliz security record

Ethereumchiliz.com

As of 29 Oct 2026, Chiliz has 8 audit reports by 3 security firms on Trustblock; the latest is by Halborn, dated 29 Jan 2026. Those reports list no open critical findings. It also holds 1 deployed contract on 1 chain.

Critical findings
No open critical findings
Across the 8 reports, 1 critical finding was reported. It is marked fixed by the firm that reported it. See the findings
Open the latest report
Your label, live
Get the label for your site

Record last updated . It holds audits and findings, contracts and incidents up to Oct 2026. Trustblock does not review code.

Audits8

Newest first

AuditSecurity firmDateScopeCritical findingsReport
Oracle ContractsSecurity firm: HalbornDate: Scope: Not recorded (see the report)No open critical findingsOpen · halborn.com
Chiliz ChainSecurity firm: Resonance SecurityDate: Scope: Not recorded (see the report)No open critical findingsOpen · IPFS
Fan Token SwapSecurity firm: HalbornDate: Scope: Not recorded (see the report)No open critical findingsOpen · halborn.com
Fan Token Contract V2Security firm: HalbornDate: Scope: Not recorded (see the report)No open critical findingsOpen · halborn.com
Chiliz - Pepper - Smart Contract AuditSecurity firm: HalbornDate: Scope: Not recorded (see the report)No open critical findingsOpen · halborn.com
Chiliz - V2 Genesis ContractsSecurity firm: CertiKDate: Scope: Files named in the reportNo open critical findingsOpen · skynet.certik.com
Chiliz TokenSecurity firm: CertiKDate: Scope: 1 address on EthereumNo open critical findingsOpen · skynet.certik.com
ChilizSecurity firm: CertiKDate: Scope: Files named in the report1 critical finding, fixedOpen · skynet.certik.com

Findings45

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

SeverityOpenAcknowledgedFixed
Critical000
High301
Medium303
Low10124
HighCooldown For Stakes Can Be Bypassed Or IncreasedChiliz Chain · Resonance Security · 20 Aug 2025Open

The protocol adds a feature where tokens can have different cooldown periods. This may mean that in some cases, users can bypass this period by swapping tokens.It is possible that the new token will have a lower cooldown than the old token, thus allowing previously unstaked tokens to have a shorter cooldown period.These are the steps to replicate this issue:Stake old tokens (asuming 1000 seconds of locking period).Wait less time than unstakePeriodPerToken of the old token and unstake them.Swap tokens.The lock time for your position has decreased depending on the unstakePeriodPerToken of the new token. For example, if this value is 1 second, then the remaining time is bypassed.

Open the report
HighCentralization Related RisksChiliz - V2 Genesis Contracts · CertiK · 21 Aug 2023Open

In the contract `ChainConfig` the role `_fromgovernance` has authority over the functions shown in the diagram below. Any compromise to the `_fromgovernance` account may allow the hacker to take advantage of this authority and set `activeValidatorsLength`, `epochBlockInterval`, `misdemeanorThreshold`, `felonyThreshold`, `validatorJailEpochLength`, `undelegatePeriod`, `minValidatorStakeAmount`, `minStakingAmount` ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ee-3a69-c9ac6680-bfa9-d1659bbf5705/diagrams/centralization_ChainConfig-ChainConfig-_fromgovernance.svg) In the contract `DeployerProxy` the role `_fromcoinbase` has authority over the functions shown in the diagram below. Any compromise to the `_fromcoinbase` account may allow the hacker to take advantage of this authority and register deployed contracts. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ee-3a69-c9ac6680-bfa9-d1659bbf5705/diagrams/centralization_DeployerProxy-DeployerProxy-_fromcoinbase.svg) In the contract `DeployerProxy` the role `_fromgovernance` has authority over the functions shown in the diagram below. Any compromise to the `_fromgovernance` account may allow the hacker to take advantage of this authority and add/remove/ban/unban the deployer and disable/enable the contract ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ee-3a69-c9ac6680-bfa9-d1659bbf5705/diagrams/centralization_DeployerProxy-DeployerProxy-_fromgovernance.svg) In the contract `Governance` the role `_fromgovernance` has authority over the functions shown in the diagram below. Any compromise to the `_fromgovernance` account may allow the hacker to take advantage of this authority and add/remove the proposer and activate the proposer registry. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ee-3a69-c9ac6680-bfa9-d1659bbf5705/diagrams/centralization_Governance-Governance-_fromgovernance.svg) In the contract `Governance` the role `_proposer` has authority over the functions shown in the diagram below. Any compromise to the `_proposer` account may allow the hacker to take advantage of this authority and propose a new proposal and execute the proposal. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ee-3a69-c9ac6680-bfa9-d1659bbf5705/diagrams/centralization_Governance-Governance-_proposer.svg) In the contract `RuntimeUpgrade` the role `_fromgovernance` has authority over the functions shown in the diagram below. Any compromise to the `_fromgovernance` account may allow the hacker to take advantage of this authority and upgrade/deploy the system smart contract. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ee-3a69-c9ac6680-bfa9-d1659bbf5705/diagrams/centralization_RuntimeUpgrade-RuntimeUpgrade-_fromgovernance.svg) In the contract `SlashingIndicator` the role `_fromcoinbase` has authority over the functions shown in the diagram below. Any compromise to the `_fromcoinbase` account may allow the hacker to take advantage of this authority and slash the validator. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ee-3a69-c9ac6680-bfa9-d1659bbf5705/diagrams/centralization_SlashingIndicator-SlashingIndicator-_fromcoinbase.svg) In the contract `Staking` the role `_fromcoinbase` has authority over the functions shown in the diagram below. Any compromise to the `_fromcoinbase` account may allow the hacker to take advantage of this authority and deposit fee. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ee-3a69-c9ac6680-bfa9-d1659bbf5705/diagrams/centralization_Staking-Staking-_fromcoinbase.svg) In the contract `Staking` the role `_fromgovernance` has authority over the functions shown in the diagram below. Any compromise to the `_fromgovernance` account may allow the hacker to take advantage of this authority and add/remove/activate/disable the validator,pause/unpause the contract and fix the validator epoch. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ee-3a69-c9ac6680-bfa9-d1659bbf5705/diagrams/centralization_Staking-Staking-_fromgovernance.svg) In the contract `Staking` the role `_fromslashingindicator` has authority over the functions shown in the diagram below. Any compromise to the `_fromslashingindicator` account may allow the hacker to take advantage of this authority and slash the validator. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ee-3a69-c9ac6680-bfa9-d1659bbf5705/diagrams/centralization_Staking-Staking-_fromslashingindicator.svg) In the contract `SystemReward` the role `_fromgovernance` has authority over the functions shown in the diagram below. Any compromise to the `_fromgovernance` account may allow the hacker to take advantage of this authority and update distribution share. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ee-3a69-c9ac6680-bfa9-d1659bbf5705/diagrams/centralization_SystemReward-SystemReward-_fromgovernance.svg)

Open the report
HighCentralized Control of Contract UpgradeChiliz - V2 Genesis Contracts · CertiK · 21 Aug 2023Open

The “Governance” contract inherits multiple upgradeable contracts, indicating that it’s part of an upgradeable system. Upgradeable contracts often pair with a proxy contract responsible for managing contract upgrades. The `admin` of the proxy has the authority to update the implementation contract (i.e., the Governance contract). Any compromise of the admin 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 report
Medium`_processDelegateQueue()`, `_processUndelegateQueChiliz - V2 Genesis Contracts · CertiK · 21 Aug 2023Open

The identified loop logic in `_processDelegateQueue()`, `_processUndelegateQueue()`, and `_calcDelegatorRewardsAndPendingUndelegates()` may exceed the block gas limit when the parameter `beforeEpochExclude`/`beforeEpoch` is far bigger than the epoch of last processed delegation. It can happen if functions `redelegateDelegatorFee()`/`claimDelegatorFee()`/`claimDelegatorFeeAtEpoch()` have not been called by a delegator for a long time. This is especially critical for `StakingPool` because it does not use `claimDelegatorFeeAtEpoch()` to process delegation little by little. Thus the modifier `advanceStakingRewards()` in `StakingPool` may always fail due to the use of `_processDelegateQueue()`/`_calcDelegatorRewardsAndPendingUndelegates()`. Then the functions `stake()`/`unstake()`/`claim()` in `StakingPool` will always fail and users' funds are locked in the contract and lost.

Open the report
MediumPotentially incompatible bytecode for deploying nChiliz - V2 Genesis Contracts · CertiK · 21 Aug 2023Open

Deploying new contracts and upgrading existing contracts use different bytecodes. Deploying new contracts run `contract creation bytecode` which runs constructor code and returns the actual runtime bytecode. Upgrading existing contracts involves using new runtime bytecode to replace existing runtime bytecode. The function `_upgradeSystemSmartContract()` does not run constructor code at all which is required by deploying new contracts. Thus any new contract with non-empty constructor will not initialize properly and malfunction afterwards. See https://docs.soliditylang.org/en/latest/contracts.html#immutable

Open the report
MediumValidators with non-zero amount of delegation orChiliz - V2 Genesis Contracts · CertiK · 21 Aug 2023Open

If a validator with non-zero delegation or pending validator rewards is removed, the functions `undelegate()`/`claimValidatorFee()`/`claimValidatorFeeAtEpoch()` will malfunction and users' funds can not be withdrawn.

Open the report
LowUnsafe token decimals handlingFan Token Swap · Halborn · 27 Feb 2025Open

The report gives no description here.

Open the report
LowMissing Error MessagesChiliz - V2 Genesis Contracts · CertiK · 21 Aug 2023Open

The **require** can be used to check for conditions and throw an exception if the condition is not met. It is better to provide a string message containing details about the error that will be passed back to the caller.

Open the report
LowPotential Divide by ZeroChiliz - V2 Genesis Contracts · CertiK · 21 Aug 2023Open

Performing division by zero would raise an error and revert the transaction. ```solidity=136 uint64 epoch = uint64(blockNumber / _chainConfigContract.getEpochBlockInterval()); ``` The expression `blockNumber / _chainConfigContract.getEpochBlockInterval()` may divide by zero. Its divisor has has estimated interval [0, 4294967295]. --- ```solidity=241 return uint64(block.number / _chainConfigContract.getEpochBlockInterval() + 0); ``` The expression `block.number / _chainConfigContract.getEpochBlockInterval()` may divide by zero. Its divisor has has estimated interval [0, 4294967295]. --- ```solidity=48 return _stakerShares[validator][staker] * 1e18 / _calcRatio(validatorPool); ``` The expression `_stakerShares[validator][staker] * 1e18 / _calcRatio(validatorPool)` may divide by zero. Its divisor has has estimated interval [-1, pinf]. --- ```solidity=103 return uint64(block.number / _chainConfigContract.getEpochBlockInterval()); ``` The expression `block.number / _chainConfigContract.getEpochBlockInterval()` may divide by zero. Its divisor has has estimated interval [0, 4294967295].

Open the report
LowPotential Out-of-Gas ExceptionChiliz - V2 Genesis Contracts · CertiK · 21 Aug 2023Open

When a loop allows an arbitrary number of iterations or accesses state variables in its body, the function may run out of gas and revert the transaction. ```solidity=42 for (uint256 i = 0; i < deployers.length; i++) { ``` Function `DeployerProxy.ctor` contains a loop and its loop condition depends on parameters: `deployers`. --- ```solidity=86 for (uint256 i = 0; i < currentValidatorSet.length; i++) { ``` Function `Governance.activateProposerRegistry` contains a loop and its loop condition depends on external calls: `_stakingContract.getValidators`. --- ```solidity=148 for (uint256 i = 0; i < validators.length; i++) { ``` Function `Governance._votingSupply` contains a loop and its loop condition depends on external calls: `_stakingContract.getValidators`. --- ```solidity=64 for (uint256 i = 0; i < _deployedSystemContracts.length; i++) { ``` Function `RuntimeUpgrade.getSystemContracts` contains a loop and its loop condition depends on state variables: `_deployedSystemContracts`. --- ```solidity=129 for (uint256 i = 0; i < validators.length; i++) { ``` Function `Staking.ctor` contains a loop and its loop condition depends on parameters: `validators`. --- ```solidity=664 for (uint256 i = 0; i < k; i++) { ``` Function `Staking.getValidators` contains a loop and its loop condition depends on external calls: `_chainConfigContract.getActiveValidatorsLength`. --- ```solidity=178 for (uint256 i = 0; i < validators.length; i++) { ``` Function `StakingPool.manuallyClaimPendingUndelegates` contains a loop and its loop condition depends on parameters: `validators`.

Open the report
Show 6 more
LowUninitialized State VariableChiliz - V2 Genesis Contracts · CertiK · 21 Aug 2023Open

One or more state variables are used without being initialized in the constructor. ```solidity=29 address internal _systemTreasury; ``` - `_systemTreasury` is never initialized, but used in `SystemReward._claimSystemFee`.

Open the report
LowUnsafe Integer CastChiliz - V2 Genesis Contracts · CertiK · 21 Aug 2023Open

Type casting refers to changing an variable of one data type into another. The code contains an unsafe cast between integer types, which may result in unexpected truncation or sign flipping of the value. ```solidity=136 uint64 epoch = uint64(blockNumber / _chainConfigContract.getEpochBlockInterval()); ``` Casted expression `blockNumber / _chainConfigContract.getEpochBlockInterval()` has estimated range [0, 115792089237316195423570985008687907853269984665640564039457584007913129639935] but target type `uint64` has range [0, 18446744073709551615]. --- ```solidity=342 require(recentDelegateOp.amount >= uint64(amount / BALANCE_COMPACT_PRECISION), "insufficient balance"); ``` Casted expression `amount / BALANCE_COMPACT_PRECISION` has estimated range [0, 11579208923731619542357098500868790785326998466564056403945758400791] but target type `uint64` has range [0, 18446744073709551615]. --- ```solidity=696 currentSnapshot.totalRewards += uint96(msg.value); ``` Casted expression `msg.value` has estimated range [1, 115792089237316195423570985008687907853269984665640564039457584007913129639935] but target type `uint96` has range [0, 79228162514264337593543950335]. --- ```solidity=859 return uint112(amount / BALANCE_COMPACT_PRECISION); ``` Casted expression `amount / BALANCE_COMPACT_PRECISION` has estimated range [0, 11579208923731619542357098500868790785326998466564056403945758400791] but target type `uint112` has range [0, 5192296858534827628530496329220095].

Open the report
LowUnused Return ValueChiliz - V2 Genesis Contracts · CertiK · 21 Aug 2023Open

The smart contract does not check or store the return value of an external call in a local or state variable, which may introduce vulnerabilities due to the unhandled outcome. ```solidity=89 return _stakingContract.calcAvailableForRedelegateAmount(validatorPool.validatorAddress, address(this)); ```

Open the report
LowUnused State VariableChiliz - V2 Genesis Contracts · CertiK · 21 Aug 2023Open

One or more state variables are never used in the codebase. Variable `__reserved` in `InjectorContextHolder` is never used in `ChainConfig`. ```solidity=36 uint256[100 - 8] private __reserved; ```

Open the report
LowMissing Error MessagesChiliz Token · CertiK · 28 Apr 2023Open

The **require** can be used to check for conditions and throw an exception if the condition is not met. It is better to provide a string message containing details about the error that will be passed back to the caller.

Open the report
LowToo Many DigitsChiliz Token · CertiK · 28 Apr 2023Open

Literals with many digits are difficult to read and review.

Open the report

Contracts1

AddressChainSource code
0x3506424f91fd33084466f402d5d97f05f8e3b4afChain: EthereumSource code: Verified source

All 1 address and the files the reports name

Show this on your site

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.

Content

Facts

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.

Fixed as
Language

Style

Layout
Theme
Accent
Corners

Format

Size
Date
Embed as
HTML
<head>
<script src="https://widget.trustblock.run/project-widget.min.js" defer></script>
</head>
<body>
<div
data-tb-project-widget
data-tb-project-slug="chiliz"
></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