As of 3 Nov 2026, ChainPort Cross-Chain Bridge has 5 audit reports by 2 security firms on Trustblock; the latest is by Zokyo, dated 3 Jan 2024. Those reports list no open critical findings.
Record last updated . It holds audits, findings and contracts up to Nov 2026, and incidents up to Oct 2026. Trustblock does not review code.
Newest first
| Audit | Security firm | Date | Scope | Critical findings | Report |
|---|---|---|---|---|---|
| Chainport | Security firm: Zokyo | Date: | Scope: Not recorded (see the report) | No open critical findings | Open · IPFS |
| Chainport2023 | Security firm: CertiK | Date: | Scope: Not recorded (see the report) | No open critical findings | Open · skynet.certik.com |
| Chainport (PORT) | Security firm: CertiK | Date: | Scope: Not recorded (see the report) | No open critical findings | Open · skynet.certik.com |
| Chainport (Sol part) | Security firm: CertiK | Date: | Scope: Files named in the report | No open critical findings | Open · skynet.certik.com |
| ChainPort-Cardano Bridge | Security firm: CertiK | Date: | Scope: Not recorded (see the report) | 1 critical finding, fixed | Open · skynet.certik.com |
Statuses are the security firm’s own, from each report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 0 |
| High | 0 | 6 | 1 |
| Medium | 8 | 0 | 4 |
| Low | 20 | 0 | 24 |
A distinguishing characteristic of a distributed system running a Byzantine Fault Tolerant consensus algorithm is the possibility to tolerate malicious or, more generally, incorrect behaviors by a node or a subset of nodes which contribute in running the system. The amount of Byzantine nodes that can be tolerated varies system by system and is mostly influenced by the the adopted consensus algorithm. When interacting with such a system, users need to keep into account the Byzantine Fault Tolerant nature of the system. In particular, when reading from the state of the system, a user should ensure that the information it is gathering is effectively part of the state of the system, i.e.: 1. is not part of a transient or uncommitted state; 2. it was not forged or tampered by a malicious node. Such guarantees can be generally verified by contacting several nodes of the distributed system and by comparing the gathered information to check that they are consistent. The number of nodes to contact varies according to the consensus algorithm and it is greater than the number of tolerated Byzantine failures. If there are many general use cases where this practice is relaxed due to the relatively small impact of the performed operations, a sensitive and impactful case like a cross-chain bridge can not avoid to carefully ensure the truthfulness of the information it is relying on. In particular, the Chainport bridge, according to its architecture, triggers cross-chain transfers by listening events on both side of the bridge. When a new deposit is detected on one side, then a mint/withdraw is performed on the other side. So, the whole bridge correctness depends on the truthfulness of these events. The provided codebase detects new events and obtains Cardano information by contacting the `Blockfrost` service through its API. In this way the whole bridge correctness and reliability is directly tied to the correctness and the reliability of the `Blockfrost` service, making it a single point of trust and a single point of failure. The single point of trust problem brings the risk of the bridge misbehaving because of incorrect information gathered from the `Blockfrost` service. The service corruption or deliberate misbehavior, like reporting an uncommitted deposit transaction, could bring to an unwanted token mint/release. The single point of failure, meant from the availability point of view, directly affects the bridge since the `Blockfrost` unavailability directly means a bridge unavailability.
Open the reportIn 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.
Open the reportIn 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.
Open the reportIn 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.
Open the reportIn 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.  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.  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. 
Open the report`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.
Open the reportThe reports name a repository or files. Open a report to see its scope.
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.
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.
<head><script src="https://widget.trustblock.run/project-widget.min.js" defer></script></head><body><divdata-tb-project-widgetdata-tb-project-slug="chainport-cross"></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