Seedify.fund (nft-vanguards)

CertiKFiles named in the report

CertiK reviewed Seedify (Seedify.fund (nft-vanguards)) on 15 Sep 2023: 7 findings, 1 critical; 5 marked fixed, 2 open.

1 critical finding, fixed
Open the reportOpen Seedify’s security record

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings7

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

SeverityOpenAcknowledgedFixed
Critical001
High101
Medium000
Low103
CriticalUnrestricted `withdraw()` FunctionFixed

In the `BlackBoxVang` contract, the `withdraw()` function allows a user to withdraw Ethers from the contract to its own address. There are no access control on the `withdraw()` function. That means any user can call the function and receive Ethers. The amount can be withdrawn is the input parameter of the function. There are no limits on the amount as well. Therefore any user can call the `withdraw()` function and drain all Ethers from the contract.

HighCentralized Control of Contract UpgradeFixed

`Vanguard` is an upgradeable contracts, the proxy owner can upgrade the contract without the community's commitment. If a malicious user compromises the account, the user can change the implementation of the contract and potentially drain tokens from the contract.

LowDiscussion on the purpose of `allocation`Fixed

In the `findBox()` function, there is an input parameter called `allocation`, which is used for validating the merkle proof as well as for assigning the `userMints[msg.sender].allocation` value. Our understanding is that a user cannot randomly input an `allocation` value otherwise the user cannot pass the proof validation check. However, the mapping of user addresses and allowed `allocation` is not saved in the contract. We would like to learn how is the initial allocation value determined, and how can users learn about the mapping of their addresses and the legit `allocation` values for them.

LowMissing Zero Address ValidationFixed

Addresses are not validated before assignment or external calls, potentially allowing the use of zero addresses and leading to unexpected behavior or vulnerabilities. For example, transferring tokens to a zero address can result in a permanent loss of those tokens. ```solidity=73 vanguardContract = _vanguardContract; ``` - `_vanguardContract` is not zero-checked before being used. --- ```solidity=78 boxContractAddress = contractAddress; ``` - `contractAddress` is not zero-checked before being used.

LowUnprotected InitializerFixed

One or more logic contracts do not protect their initializers. An attacker can call the initializer and assume ownership of the logic contract, whereby the attacker can perform privileged operations that either indirectly break the proxy by destroying the logic contract or trick unsuspecting users into believing that she is the owner of the upgradeable contract. ```solidity=11 contract Vanguard is ``` - `Vanguard` is an upgradeable contract that does not protect its initializer. ```solidity=23 function initialize() external initializer { ``` - `initialize` is an unprotected initializer function.

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 (2)

  • contracts/Vanguard.sol
  • contracts/BlackBoxVang.sol

Part of Seedify’s security record

Seedify
Audits9 audits by 2 firmsLast audit Oct 2025, by Hacken.
Critical findingsNo open critical findingsAcross the 9 reports, 1 critical finding was reported. It is marked fixed by the firm that reported it.
Open Seedify’s security record

Security firm

CertiK

1,044 projects reviewed · 1,375 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