Confti security record

Ethereumconfti.club

As of 24 Oct 2026, Confti has 1 audit report on Trustblock, by CertiK, dated 18 Oct 2022. That report lists no open critical findings.

Critical findings
No open critical findings
In 1 report.
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.

Audits1

Newest first

AuditSecurity firmDateScopeCritical findingsReport
ConftiSecurity firm: CertiKDate: Scope: Files named in the reportNo open critical findingsOpen · skynet.certik.com

Findings25

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

SeverityOpenAcknowledgedFixed
Critical000
High021
Medium041
Low1007
HighLogic issue on `Vote.execute()`Confti · CertiK · 18 Oct 2022Fixed

In the below code snippet of `Vote.execute()`, the logic is a little confusing. 1. Both of the require statement and if statement use the condition `_vote.svote.supPopel < _vote.supPopel`, so one of them is redundant. 2. The second require statement uses the opposite condition `_vote.svote.supPopel > _vote.supPopel` and will always roll back the current transaction because the first require statement has already ensures that `_vote.svote.supPopel < _vote.supPopel`. ```solidity=168 require(_vote.svote.supPopel < _vote.supPopel,"The vote passed with fewer votes than the original"); if(_vote.svote.supPopel < _vote.supPopel){ _vote.status = VoteStatus.faild; IVault(getVault()).safeSetState(address(0),0,State.NftState.freedom,"vote"); return; } require(_vote.svote.supPopel > _vote.supPopel,"The vote passed with fewer votes than the original"); _vote.status = VoteStatus.succeed; _execute(voteId_,_vote.codeModel,_vote.value); ``` Based on our understanding, `_vote.svote.supPopel < _vote.supPopel` means that the rejected vote does not pass and the original vote should be executed, while `_vote.svote.supPopel > _vote.supPopel` means that the reject vote passes and the original vote should not be executed. The normal if-else statement can handle this logic well.

Open the report
MediumPotential Reentrancy AttackConfti · CertiK · 18 Oct 2022Fixed

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=824 IDivision(getToken()).mintDivision(_sender, amount); ``` ### State variables written after the call(s) ```solidity=825 totalClaimedReward += amount; ``` --- ### External call(s) ```solidity=162 IVault(getVault()).safeSetState(address(0),0,State.NftState.freedom,"vote"); ``` ### State variables written after the call(s) ```solidity=164 executeQueueMap[voteId_] = true; ```

Open the report
LowFunction Could Be Declared ExternalConfti · CertiK · 18 Oct 2022Fixed

The functions which are never called internally within the contract should have external visibility for gas optimization. ```solidity=259 function getNftState(address nft,uint256 nftId) public override view returns(State.NftState){ ``` --- ```solidity=269 function getNftActivity(address nft,uint256 nftId) public override view returns(string memory){ ``` --- ```solidity=275 function getEntireVaultActivity() public override view returns(string memory){ ``` --- ```solidity=279 function getFreedomNFT() public override view returns(uint256[] memory) { ``` --- ```solidity=287 function getVeToken() public view returns(address) { ``` --- ```solidity=291 function onERC721Received(address, address, uint256, bytes memory) public virtual returns (bytes4) { ``` --- ```solidity=295 function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual returns (bytes4) { ``` --- ```solidity=299 function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual returns (bytes4) { ``` --- ```solidity=81 function getUserPointEpoch(address _userAddress) ``` --- ```solidity=99 function getUserPointHistory(address _userAddress, uint256 _index) ``` --- ```solidity=1008 function totalClaimable() public override view returns(uint256){ ``` --- ```solidity=15 function initialize() override public{ ``` --- ```solidity=350 function hashCompareInternal(string memory a, string memory b) public returns (bool) { ``` --- ```solidity=24 function updateRouterUtils() public{ ``` --- ```solidity=28 function updateAuctionUtils() public{ ``` --- ```solidity=33 function updateVaultUtils() public{ ``` --- ```solidity=37 function updateVoteUtils() public { ``` --- ```solidity=42 function updateVeTokenUtils() public{ ``` --- ```solidity=20 function destruct() public { ``` --- ```solidity=17 function pledge()public { ``` --- ```solidity=22 function balanceOf(address add)public view returns(uint256 result){ ``` --- ```solidity=26 function totalSupply()public view returns(uint256 result){ ``` --- ```solidity=30 function setMaxTime(uint256 value)public { ``` --- ```solidity=42 function initialize() public { ```

Open the report
LowMissing Zero Address ValidationConfti · CertiK · 18 Oct 2022Fixed

Addresses should be checked before assignment or external call to make sure they are not zero addresses. ```solidity=42 settings = settings_; ``` - `settings_` is not zero-checked before being used. --- ```solidity=50 settings = newSettings; ``` - `newSettings` is not zero-checked before being used. --- ```solidity=143 (bool _ok, bytes memory returnData) = _updataTemplate.delegatecall(abi.encodeWithSignature( "updateAuctionUtils()" )); ``` - `_updataTemplate` is not zero-checked before being used. --- ```solidity=43 veTokenTemplate = veTokenTemplate_; ``` - `veTokenTemplate_` is not zero-checked before being used. --- ```solidity=44 vaultTemplate = vaultTemplate_; ``` - `vaultTemplate_` is not zero-checked before being used. --- ```solidity=45 auctionTemplate = auctionTemplate_; ``` - `auctionTemplate_` is not zero-checked before being used. --- ```solidity=46 voteTemplate = voteTemplate_; ``` - `voteTemplate_` is not zero-checked before being used. --- ```solidity=47 divisionTemplate = divisionTemplate_; ``` - `divisionTemplate_` is not zero-checked before being used. --- ```solidity=66 curator = curator_; ``` - `curator_` is not zero-checked before being used. --- ```solidity=212 (bool _ok, bytes memory returnData) = updataTemplate.delegatecall(abi.encodeWithSignature( "updateRouterUtils()" )); ``` - `updataTemplate` is not zero-checked before being used. --- ```solidity=305 (bool _ok, bytes memory returnData) = updataTemplate.delegatecall(abi.encodeWithSignature( "updateVaultUtils()" )); ``` - `updataTemplate` is not zero-checked before being used. --- ```solidity=1129 (bool _ok, bytes memory returnData) = _updataTemplate.delegatecall(abi.encodeWithSignature( "updateVeTokenUtils()" )); ``` - `_updataTemplate` is not zero-checked before being used. --- ```solidity=17 newVoteTemplate = newVoteTemplate_; ``` - `newVoteTemplate_` is not zero-checked before being used. --- ```solidity=18 newRouterTemplate = newRouterTemplate_; ``` - `newRouterTemplate_` is not zero-checked before being used. --- ```solidity=19 newVeTokenTemplate = newVeTokenTemplate_; ``` - `newVeTokenTemplate_` is not zero-checked before being used. --- ```solidity=20 newAuctionTemplate = newAuctionTemplate_; ``` - `newAuctionTemplate_` is not zero-checked before being used. --- ```solidity=21 newVaultTemplate = newVaultTemplate_; ``` - `newVaultTemplate_` is not zero-checked before being used.

Open the report
LowRedundant Contract `EtherToken` in `wETH.sol`Confti · CertiK · 18 Oct 2022Fixed

The contract `EtherToken` in `wETH.sol` implements the WETH. However, there is no usage of it. The `Vault` contract is still using the official WETH on the chain. ```solidity address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; ```

Open the report
LowRedundant require statementConfti · CertiK · 18 Oct 2022Fixed

The second linked require statements is redundant. If the first statement condition is satisfied, the second statement is also satisfied. ```solidity=138 require(IVault(getVault()).getEntireVaultState() == State.NftState.freedom, "The vault and the auction"); require(IVault(getVault()).getEntireVaultState() != State.NftState.leave, "The vault is closed"); ```

Open the report
LowUnchecked ERC-20 `transfer()`/`transferFrom()` CaConfti · CertiK · 18 Oct 2022Fixed

The return value of the transfer()/transferFrom() call is not checked. ```solidity=76 IERC20(token).transfer(to,amount); ``` --- ```solidity=82 IWETH(WETH).transfer(who, IWETH(WETH).balanceOf(address(this))); ``` --- ```solidity=359 IERC20(getToken()).transferFrom( _provider, address(this), _value ); ``` --- ```solidity=552 IERC20(getToken()).transfer(msg.sender, _value); ```

Open the report
LowUnused State VariableConfti · CertiK · 18 Oct 2022Fixed

One or more state variables are never used in the codebase. Variable `DEPOSIT_FOR_TYPE` in `VeToken` is never used in `VeToken`. ```solidity=14 uint256 private constant DEPOSIT_FOR_TYPE = 0; ```

Open the report
LowUsage of `transfer`/`send` for sending EtherConfti · CertiK · 18 Oct 2022Fixed

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=61 payable(getVault()).transfer(_auction.livePrice); ``` - `Auction.start` uses `transfer()`. --- ```solidity=71 who.transfer(amount); ``` - `Vault.sendETH` uses `transfer()`.

Open the report

Contracts

No deployed address is recorded for these audits.

The reports name a repository or files. Open a report to see its scope.

The repositories and 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="confti"
></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