Token Liquidity Foundation (Audit Addendum)

CertiKFiles named in the report

CertiK reviewed Token Liquidity Foundation (Token Liquidity Foundation (Audit Addendum)) on 19 Jul 2023: 10 findings, 0 critical; 7 marked fixed, 1 acknowledged, 2 open.

No open critical findings
Open the reportOpen Token Liquidity Foundation’s security record

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings10

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

SeverityOpenAcknowledgedFixed
Critical000
High200
Medium002
Low015
HighCentralization Related RisksOpen

In the contract `ERC3643Liquid`, the role `_owner` has authority over the following functions: - `initialize()` to initialize the `ERC3643Liquid` token contract. - `finalize()` to prevent changes to initialization parameters and active token. - `enableBridging()` to update the state of `bridgingEnabled`. - `active()` to set the state of `isActive` as true. - `allowPreactive()` to set the `allowedPreactive` state for the input `account`. - `approveBridgeMintBurn()` to approve mint/burn limits for bridging. - `transferExternalTokens()` to transfer tokens sent to the contract address. - `resetCounters()` to reset the counter variables. - `setNetLiqueficationLimit()` to set the value of `netLiquifiedByWalletLimit`. - `setSolidTokenAddress()` to change the solid token address. In addition, approved bridges have authority over the following functions: - `mint()` to mint liquid tokens to an address. - `burn()` to burn liquid tokens from an address. --- In the contract `ERC3643LiquidDeployer`, the role `_owner` has authority over the following functions: - `updateVaultAddress()` to update the vault address for the solid tokens. - `updateDeployers()` to update the allowed token deployers. - `transferExternalTokens()` to transfer tokens from the current contract to the address associated with the input `to`. In addition, approved deployers have authority over the following functions: - `deployLiquidTokenWithVault()` to deploy, initialize, and finalize a liquid token. - `deployLiquidToken()` to deploy and initialize a liquid token. --- In the contract `LiquidVault` the role `_owner` has authority over the following functions: - `updateDeployerAddress()` to change the liquid token deployer. - `deployAndRegisterToken()` to register new solid token and deploy corresponding liquid token. - `registerToken()` to register new token pair. - `updateFees()` to update fees. - `updateFeeReceiver()` to update the recipient of fees. - `transferTokenOwnership()` to transfer the ownership to a new address associated with `newOwner`. - `transferEth()` to transfer fees to the fee recipient. - `transferExtraTokens()` to transfer extra tokens from the vault to a recipient. In addition, the `liquidToken` role has authority over the following functions: - `solidifyTo()` to transfer solid tokens to a recipient. - `liquifyTo()` to check for fees and the contract's balance when a user liquifies. Any compromise a privileged account may allow the hacker to take advantage of this authority, modify the sensitive state variables and transfer tokens to a malicious account.

HighWithdrawal Centralization RiskOpen

The `_owner` role has the authority to update the underlying `solidToken` in an `ERC3643Liquid` contract. Moreover, it possesses the capability to transfer any token aside from the solid token from the vault to its own account, without any restrictions. In particular, the `_owner` can acquire the balance of the old `solidToken`. This implies that if the `_owner` account is compromised, an attacker could exploit this privilege, change the `solidToken`, and transfer all the balances from the old `solidToken` to their own account. Another observation regarding this finding is that if a user witnesses a transaction involving the `updateSolidToken()` function in the mempool, they may take advantage of this situation by issuing a transaction to call `liquify()`, transferring all of their old `solidToken` to the `ERC3643Liquid` contract, and front-running the `_owner`'s transaction to ensure their own transaction is confirmed earlier. Furthermore, there is a concern that once the `_owner` updates the `solidToken`, users will no longer be able to call `liquify()` using their old `solidToken`. If a user has already converted some of their liquid tokens into solid tokens by calling `solidify()`, the tokens they receive will correspond to the old solid tokens, rendering them unusable in this contract. This situation poses a potential financial loss for the affected users.

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

  • Contracts/src/ERC3643-Liquid.sol
  • Contracts/src/ERC3643-LiquidDeployer.sol
  • Contracts/src/LiquidVault.sol

Part of Token Liquidity Foundation’s security record

Token Liquidity Foundation
Audits2 audits by 1 firmLast audit Jul 2023, by CertiK.
Critical findingsNo open critical findingsAcross the 2 reports, 1 critical finding was reported. It is marked fixed by the firm that reported it.
Open Token Liquidity Foundation’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