Chainport (Sol part)

CertiKFiles named in the report

CertiK reviewed ChainPort Cross-Chain Bridge (Chainport (Sol part)) on 26 Jan 2023: 18 findings, 0 critical; 3 marked fixed, 5 acknowledged, 10 open.

No open critical findings
Open the reportOpen ChainPort Cross-Chain Bridge’s security record

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings18

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

SeverityOpenAcknowledgedFixed
Critical000
High050
Medium201
Low802
HighCentralization Related Risks In ChainportFeeManagAcknowledged

In the contract `ChainportFeeManager`, the role `Maintainer` has authority over the following functions: - function takePortFee(), to take fees in PORTX. - function withdrawFees(), to withdraw collected fees. Any compromise to the `Maintainer` account may allow a hacker to take advantage of this authority. In the contract `ChainportFeeManager`, the role `ChainportCongress` has authority over the following functions: - function whitelistFeeCollector(), to whitelist fee collectors. - function blacklistFeeCollector(), to blacklist fee collectors. Any compromise to the `ChainportCongress` account may allow a hacker to take advantage of this authority.

HighCentralization Related Risks In ChainportMainBridAcknowledged

In the contract `ChainportMainBridge`, the role `Maintainer` has authority over the following functions: - function freezeBridge(), to freeze the bridge. Users cannot deposit or release tokens in a frozen bridge. - function freezeAssetByMaintainer(), to freeze the asset. The frozen asset cannot be deposited or released. - function activateNetwork(), to establish the network support. Users cannot deposit tokens to an inactive network. - function setPathPauseState(), to disable/enable bridge functionality for an asset. - function releaseFeesByMaintainer(), to release fees to fee collector. - function releaseTokensByMaintainer(), to release funds to whitelisted address. Any compromise to the `Maintainer` account may allow a hacker to take advantage of this authority. In the contract `ChainportMainBridge`, the role `ChainportCongress` has authority over the following functions: - function setBridgeFreezeState(), to freeze/unfreeze a bridge. Users cannot deposit or release tokens in a frozen bridge. - function setAssetFreezeState(), to freeze/unfreeze an asset. The frozen asset cannot be deposited or released. - function setNetworkActivityState(), to activate/deactivate a network. Users cannot deposit tokens to an inactive network. - function setFundManager(), to set the fund manager address, which will be added to the whitelist. The whitelisted address receives funds released by `Maintainer` or `ChainportCongress`. - function setAddressesWhitelistState(), to add/remove an address to the whitelist. - function setOfficialNetworkId(), to set official network ID. - function setFeeCollector(), to set the `Chainport` fee collector address. - function releaseFeesByMaintainer(), to release fees to fee collector. - function releaseTokensByMaintainer(), to release funds to whitelisted addresses. Any compromise to the `ChainportCongress` account may allow a hacker to take advantage of this authority.

HighCentralization Related Risks In ChainportSideBridAcknowledged

In the contract `ChainportSideBridge`, the role `Maintainer` has authority over the following functions: - function freezeBridge(), to freeze the bridge. - function mintNewToken(), to deploy a new bridge token for an original asset on deployment network. - function mintTokens(), to mint any amount of bridge tokens. - function mintFees(), to mint fees of tokens created by the bridge to fee collector. - function activateNetwork(), to activate support for network with selected `Chainport` ID and enable cross chain transfer. - function freezeAssetsByMaintainer(), to freeze the asset functionalities. - function setPathPauseState(), to disable/enable bridge functionality for an asset. - function pauseBridgeMintableToken(), to pause the bridge token. - function blockAddressOnBridgeMintableToken(), to block an address for the bridge token. - function initializeTokenProxyAdminAndLogic(), to set the bridge token implementation contract and its proxy admin, which will be used to deploy the new bridge token. Any compromise to the `Maintainer` account may allow a hacker to take advantage of this authority. In the contract `ChainportSideBridge`, the role `ChainportCongress` has authority over the following functions: - function setBridgeFreezeState(), to freeze/unfreeze the bridge. - function setNetworkActivityState(), to enable/disable cross-network interactions with selected `Chainport` ID. - function setAssetFreezeState(), to freeze/unfreeze assets. - function setSignatureValidator(), to set signature validator. - function setOfficialNetworkId(), to set official network ID. - function setLiquidityPools(), to liquidity pool addresses for bridge tokens. - function setMaxLpDrainagePercent(), to set maximum percent to drain when minting. - function setMintingProtectionTime(), to set time limit for minting large token amounts. - function setMintingFreezeState(), to freeze/unfreeze minting action. - function setThresholdPerToken(), to set thresholds for bridge tokens. The side bridge will free minting tokens if the signature is not in the whitelist and the total minted token amount during protection time exceeds the threshold. - function whitelistSignature(), to whitelist a signature. Minting bridge tokens with a whitelisted signature will not check the minting threshold restriction. - function mintingAndAssetUnfreeze(), to unfreeze minting action and single token. - function setTokenProxyAdmin(), to set the proxy admin of new bridge token. - function setTokenLogic(), to set new bridge token implementation contract address. - function setFeeCollector(), to set `Chainport` fee collector address. Any compromise to the `Maintainer` account may allow a hacker to take advantage of this authority.

HighCentralization Risks in BridgeMintableTokenV2TaxaAcknowledged

In the contract `BridgeMintableTokenV2Taxable` the role `chainportBridge` has authority over the functions shown in the diagram below. Any compromise to the `chainportBridge` account may allow the hacker to take advantage of this authority. - `mint()`, to mint unlimited tokens. - `pause()`, to pause token transfer. - `blockAddress()`, to block address. ![](https://accelerator-tasks-prod.acc.corp.certik.com/3146883632ca43ca94482789a0ef33d3/diagrams/centralization_BridgeMintableTokenV2Taxable-BridgeMintableTokenV2Taxable-chainportBridge.svg) In the contract `BridgeMintableTokenV2Taxable` the role `chainportCongress` has authority over the functions shown in the diagram below. Any compromise to the `chainportCongress` account may allow the hacker to take advantage of this authority and set properties and roles. - `mint()`, to mint unlimited tokens. - `pause()`/`unpause`, to pause/unpause token transfer. - `blockAddress()`/`unblockAddress()`, to block/unblock address. - `destroyBlackFunds()`, to burn tokens of an address. ![](https://accelerator-tasks-prod.acc.corp.certik.com/3146883632ca43ca94482789a0ef33d3/diagrams/centralization_BridgeMintableTokenV2Taxable-BridgeMintableTokenV2Taxable-chainportCongress.svg) In the contract `BridgeMintableTokenV2Taxable` the role `taxationGoverningBody` has authority over the functions shown in the diagram below. Any compromise to the `taxationGoverningBody` account may allow the hacker to take advantage of this authority and set tax properties. ![](https://accelerator-tasks-prod.acc.corp.certik.com/3146883632ca43ca94482789a0ef33d3/diagrams/centralization_BridgeMintableTokenV2Taxable-BridgeMintableTokenV2Taxable-taxationGoverningBody.svg)

HighCentralized Control of Contract UpgradeAcknowledged

`ChainportMainBridge`, `ChainportFeeManager`, `ChainportSideBridge` and `BridgeMintableTokenV2Taxable` are upgradeable contracts, the owner can upgrade the contract without the community's commitment. If an attacker compromises the account, he can change the implementation of the contract and drain tokens from the contract.

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

  • contracts/token/BridgeMintableTokenV2Taxable.sol
  • contracts/ChainportFeeManager.sol
  • contracts/ChainportSideBridge.sol
  • contracts/ChainportMainBridge.sol

Part of ChainPort Cross-Chain Bridge’s security record

ChainPort Cross-Chain Bridge
Audits5 audits by 2 firmsLast audit Jan 2024, by Zokyo.
Critical findingsNo open critical findingsAcross the 5 reports, 1 critical finding was reported. It is marked fixed by the firm that reported it.
Open ChainPort Cross-Chain Bridge’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