Bridge security record

Arbitrum, BNB Chain, Ethereumbridge.linkGitHub

As of 13 Nov 2026, Bridge has 4 audit reports by 1 security firm on Trustblock; the latest is by CertiK, dated 18 Apr 2023. Those reports list no open critical findings.

Critical findings
No open critical findings
Across 4 reports.
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 Nov 2026. Trustblock does not review code.

Audits4

Newest first

ReportSecurity firmDateScopeCritical findingsSource
Bridge Oracle (Hybrid Liquidity Mining) - AuditSecurity firm: CertiKDate: Scope: Files listedNone openskynet.certik.com ↗
Token Bridge - AuditSecurity firm: CertiKDate: Scope: Files listedNone openskynet.certik.com ↗
Bridge Staking Platform V2- AuditSecurity firm: CertiKDate: Scope: Files listedNone openskynet.certik.com ↗
Bridge OracleSecurity firm: CertiKDate: Scope: Files listedNone openskynet.certik.com ↗

Findings24

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

SeverityOpenAcknowledgedFixed
Critical000
High105
Medium003
Low4011
HighCentralization Risks in StakePoolV2.solBridge Staking Platform V2- Audit · CertiK · 9 Mar 2023Fixed

In the contract `StakePoolV2` the role `_owner` has authority over the function shown in the diagram below. Any compromise to the `_owner` account may allow the hacker to take advantage of this authority and modify the maximum deposit amount. If the maximum deposit amount is set to 0, then any deposit request will be blocked. ![](https://accelerator-tasks-prod.acc.corp.certik.com/fd8de15f5e4c490ca0f50d87aaecd72e/diagrams/centralization_StakePoolV2-StakePoolV2-_owner.svg)

Open the report
HighCentralization Related RisksBridge Oracle · CertiK · 13 Sep 2022Fixed

In the contract `[Ownable]`, the role `[owner]` has authority over the following functions: - transferOwnership() - renounceOwnership() Any compromise to the `[owner]` account may allow a hacker to take advantage of this authority and become a malicious owner to potentially steal funds. In the contract `[Pauseable]`, the role `[owner]` has authority over the following functions: - halt() - start() Any compromise to the `[owner]` account may allow a hacker to take advantage of this authority and make the contract malfunction.

Open the report
HighInitial Token DistributionBridge Oracle · CertiK · 13 Sep 2022Fixed

All of the [BridgeToken] tokens are sent to the contract deployer when deploying the contract. This could be a centralization risk as the deployer can distribute [BridgeToken] tokens without obtaining the consensus of the community.

Open the report
HighPrivileged functions allow owner to mint unlimiteBridge Oracle · CertiK · 13 Sep 2022Fixed

In the contract `[StandardToken]`, the role `[owner]` has authority over the following functions: - mint() - burn() Any compromise to the `[owner]` account may allow a hacker to take advantage of this authority and mint unlimited tokens to arbitrary accounts and burn owner's tokens.

Open the report
HighPrivileged functions allow owner to withdraw tokeBridge Oracle · CertiK · 13 Sep 2022Fixed

In the contract `[BridgeToken]`, the role `[owner]` has authority over the following functions: - freeze() - melt() - transferAnyBEP20() - withdrawBNB() Any compromise to the `[owner]` account may allow a hacker to take advantage of this authority and steal ERC20 tokens and BNB from the contract.

Open the report
MediumPotential transfer failures not revertedToken Bridge - Audit · CertiK · 6 Apr 2023Fixed

The `callOptionalReturn()` function is being used to transfer tokens, and if the token address is found in the mapping `bugERC20s`, the result of the function call is not checked to determine if the transfer was successful. ```solidity=110 function callOptionalReturn(IERC20 token, bytes memory data, mapping(address => uint8) storage bugERC20s) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (bugERC20s[address(token)] != 0) { return; } if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } ``` This function is called internally in the `createOrSignWithdraw()` function, which means that if the token transfer fails, then the user will not receive the assets. This function is called internally in the `crossOut()` or `crossOutII()` functions, which means that if the tokens transfer fails, then the user may get the assets without having to transfer out the assets.

Open the report
MediumIncompatibility with Deflationary TokensBridge Staking Platform V2- Audit · CertiK · 9 Mar 2023Fixed

When transferring deflationary ERC20 tokens, the input amount may not be equal to the received amount due to the charged transaction fee. For example, if a user sends 100 deflationary tokens (with a 10% transaction fee), only 90 tokens actually arrived to the contract. However, a failure to discount such fees may allow the same user to withdraw 100 tokens from the contract, which causes the contract to lose 10 tokens in such a transaction. Reference: https://thoreum-finance.medium.com/what-exploit-happened-today-for-gocerberus-and-garuda-also-for-lokum-ybear-piggy-caramelswap-3943ee23a39f ```solidity=645 token.safeTransferFrom(address(msg.sender), address(this), _amount); ``` - Transferring tokens by `_amount`. But the actual token amount received by the recipient might not equal to `_amount`. ```solidity=646 addressTotalAmount[msg.sender] = myTotal.add(_amount); totalAmount = totalAmount.add(_amount); ``` - The `addressTotalAmount` and `totalAmount` used for bookkeeping purposes without compensating the potential transfer fees.

Open the report
MediumFrozen amount not handled properly in `burn()`Bridge Oracle · CertiK · 13 Sep 2022Fixed

It is possible that after `burn()` is called, the message sender's frozen amount > balance, which will result in the token transfer from the message sender always fails.

Open the report
LowIncompatibility With Deflationary TokensBridge Oracle (Hybrid Liquidity Mining) - Audit · CertiK · 18 Apr 2023Fixed

When transferring standard ERC20 deflationary tokens, the input amount may not be equal to the received amount due to the charged transaction fee. As a result, an inconsistency in the amount will occur and the transaction may fail due to the validation checks. For example, if a user sends 100 deflationary tokens (with a 10% transaction fee) to the target contract, only 90 tokens actually arrive to the contract.

Open the report
LowMissing Check For `bonusEndBlock`Bridge Oracle (Hybrid Liquidity Mining) - Audit · CertiK · 18 Apr 2023Fixed

The function `stopReward()` can be called by the owner to stop the accumulation of rewards. However, if `bonusEndBlock` is already less than `block.number`, then the user may still receive some additional rewards even after `stopReward()` is called. Therefore, it's important to check the current value of `bonusEndBlock` before calling `stopReward()`.

Open the report
Show 9 more
LowTautology or ContradictionBridge Oracle (Hybrid Liquidity Mining) - Audit · CertiK · 18 Apr 2023Fixed

Comparisons that are always true or always false may be incorrect or unnecessary. ```solidity=1181 require(_stakedToken.totalSupply() >= 0); ``` --- ```solidity=1182 require(_rewardToken.totalSupply() >= 0); ```

Open the report
LowIncompatibility With Deflationary TokensToken Bridge - Audit · CertiK · 6 Apr 2023Fixed

When transferring standard ERC20 deflationary tokens, the input amount may not be equal to the received amount due to the charged transaction fee. As a result, an inconsistency in the amount will occur and the transaction may fail due to the validation checks. For example, if a user sends 100 deflationary tokens (with a 10% transaction fee) to the target contract, only 90 tokens actually arrive to the contract.

Open the report
LowMissing check for duplicate addressToken Bridge - Audit · CertiK · 6 Apr 2023Fixed

The variables `_chainid` and `_managers` are initialized in the constructor, but the `_managers` array is not checked to ensure that it does not contain duplicate addresses, it could be better to ensure that duplicate addresses are not added to the _managers array, to prevent any potential issues with managing the array later on. ```solitidy=965 constructor(uint256 _chainid, address[] memory _managers) public{ require(_managers.length <= max_managers, "Exceeded the maximum number of managers"); require(_managers.length >= min_managers, "Not reaching the min number of managers"); owner = msg.sender; managerArray = _managers; for (uint8 i = 0; i < managerArray.length; i++) { managers[managerArray[i]] = 1; seedManagers[managerArray[i]] = 1; seedManagerArray.push(managerArray[i]); } require(managers[owner] == 0, "Contract creator cannot act as manager"); // 设置当前交易的最小签名数量 current_min_signatures = calMinSignatures(managerArray.length); hashSalt = _chainid * 2 + VERSION; } ```

Open the report
LowMissing Zero Address ValidationToken Bridge - Audit · CertiK · 6 Apr 2023Fixed

Addresses should be checked before assignment or external call to make sure they are not zero addresses. ```solidity=971 managers[managerArray[i]] = 1; ``` - `managerArray[i]` is not zero-checked before being used.

Open the report
LowState Variable Should Be Declared ConstantToken Bridge - Audit · CertiK · 6 Apr 2023Fixed

State variables that never change should be declared as `constant` to save gas. ```solidity=939 uint public max_managers = 15; ``` - `max_managers` should be declared `constant`. --- ```solidity=941 uint public min_managers = 3; ``` - `min_managers` should be declared `constant`. --- ```solidity=943 uint public rate = 66; ``` - `rate` should be declared `constant`. --- ```solidity=945 uint public signatureLength = 65; ``` - `signatureLength` should be declared `constant`.

Open the report
LowTautology or ContradictionToken Bridge - Audit · CertiK · 6 Apr 2023Fixed

Comparisons that are always true or always false may be incorrect or unnecessary. ```solidity=1261 require(balance >= 0, "No enough balance of token"); ```

Open the report
LowUsage of `transfer`/`send` for sending EtherToken Bridge - Audit · CertiK · 6 Apr 2023Fixed

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=1007 to.transfer(amount); ``` - `createOrSignWithdraw` uses `transfer()`.

Open the report
LowThird Party DependencyBridge Staking Platform V2- Audit · CertiK · 9 Mar 2023Fixed

The contract is serving as the underlying entity to interact with one or more third party protocols. The scope of the audit treats third party entities as black boxes and assume their functional correctness. However, in the real world, third parties can be compromised and this may lead to lost or stolen assets. In addition, upgrades of third parties can possibly create severe impacts, such as increasing fees of third parties, migrating to new LP pools, etc. ```solidity=617 IERC20 public token; ``` - The contract `StakePool` interacts with third party contract with `IERC20` interface via `token`.

Open the report
LowInaccurate function name `freeze()` and `_freeze(Bridge Oracle · CertiK · 13 Sep 2022Fixed

The functions `freeze()/_freeze()` transfer and freeze funds. The function names do not reflect the `transfer` action.

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="bridge-oracle"
></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