Edge Matrix Computing security record

Arbitrum, BNB Chain, Ethereumemc.networkXGitHub

As of 3 Nov 2026, Edge Matrix Computing has 2 audit reports by 1 security firm on Trustblock; the latest is by CertiK, dated 15 Oct 2024. Those reports list no open critical findings.

Critical findings
No open critical findings
Across the 2 reports, 2 critical findings were reported. Each is marked fixed by the firm that reported it. See the findings
Open the latest report
Your label, live
Get the label for your site

Record last updated . It holds audits, findings and contracts up to Nov 2026, and incidents up to Oct 2026. Trustblock does not review code.

Audits2

Newest first

AuditSecurity firmDateScopeCritical findingsReport
EMC Finance & BridgeSecurity firm: CertiKDate: Scope: Files named in the report1 critical finding, fixedOpen · skynet.certik.com
EdgeMatrix Computing Protocol 2(EMC 2)Security firm: CertiKDate: Scope: Files named in the report1 critical finding, fixedOpen · skynet.certik.com

Findings61

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

SeverityOpenAcknowledgedFixed
Critical002
High144
Medium034
Low13030
HighBridge Centralization Related RisksEMC Finance & Bridge · CertiK · 15 Oct 2024Acknowledged

### Bridge In the contract `Bridge`, the role `_admin` has authority over the functions shown in the diagram below. Any compromise to the `_admin` account may allow the hacker to take advantage of this authority and add or remove a relayer, set the handler address, renounce, transfer, grant or revoke `_admin` role, pause or unpause the contract, set a generic resource, withdraw tokens via admin handler, set a token as burnable, set resource for admin, change the relayer threshold, transfer funds to multiple addresses, and change the fee. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-553e7a20-892b-d147d1dc803f/diagrams/centralization_Bridge-Bridge-_admin.svg) ---- In the contract `Bridge`, the role `_adminorrelayer` has authority over the functions shown in the diagram below. Any compromise to an `_admin` or `relayer` account may allow the hacker to take advantage of this authority and cancel a proposal. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-553e7a20-892b-d147d1dc803f/diagrams/centralization_Bridge-Bridge-_adminorrelayer.svg) ---- In the contract `Bridge`, the role `_relayers` has authority over the functions shown in the diagram below. Any compromise to the `_relayers` account may allow the hacker to take advantage of this authority and create a new proposal, vote on a proposal, and execute a passed proposal. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-553e7a20-892b-d147d1dc803f/diagrams/centralization_Bridge-Bridge-_relayers.svg) ### Bridge_emc In the contract `Bridge`, the role `_admin` has authority over the functions shown in the diagram below. Any compromise to the `_admin` account may allow the hacker to take advantage of this authority and add or remove a relayer, set the handler address, renounce, transfer, grant or revoke `_admin` role, pause or unpause the contract, set a generic resource, withdraw tokens via admin handler, set a token as burnable, set resource for admin, change the relayer threshold, transfer funds to multiple addresses, and change the fee. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-553e7a20-892b-d147d1dc803f/diagrams/centralization_Bridge_emc-Bridge-_admin.svg) ---- In the contract `Bridge`, the role `_adminorrelayer` has authority over the functions shown in the diagram below. Any compromise to an `_admin` or `relayer` account may allow the hacker to take advantage of this authority and cancel a proposal. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-553e7a20-892b-d147d1dc803f/diagrams/centralization_Bridge_emc-Bridge-_adminorrelayer.svg) ---- In the contract `Bridge`, the role `_relayers` has authority over the functions shown in the diagram below. Any compromise to the `_relayers` account may allow the hacker to take advantage of this authority and create a new proposal, vote on a proposal, and execute a passed proposal. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-553e7a20-892b-d147d1dc803f/diagrams/centralization_Bridge_emc-Bridge-_relayers.svg) ### ERC721MinterBurnerPauser In the contract `ERC721MinterBurnerPauser`, the role `MINTER_ROLE` has authority over the functions shown in the diagram below. Any compromise to the `MINTER_ROLE` account may allow the hacker to take advantage of this authority and mint a new token with metadata. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-553e7a20-892b-d147d1dc803f/diagrams/centralization_ERC721MinterBurnerPauser-ERC721MinterBurnerPauser-MINTER_ROLE.svg) --- In the contract `ERC721MinterBurnerPauser`, the role `PAUSER_ROLE` has authority over the functions shown in the diagram below. Any compromise to the `PAUSER_ROLE` account may allow the hacker to take advantage of this authority and unpause or pause the contract. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-553e7a20-892b-d147d1dc803f/diagrams/centralization_ERC721MinterBurnerPauser-ERC721MinterBurnerPauser-PAUSER_ROLE.svg) ### ERC20Handler In the contract `ERC20Handler`, the role `_bridge` has authority over the functions shown in the diagram below. Any compromise to the `_bridge` account may allow the hacker to take advantage of this authority and execute a proposal based on resource ID and data, perform token deposit with recipient details, and withdraw a specified token amount to the recipient. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-553e7a20-892b-d147d1dc803f/diagrams/centralization_ERC20Handler-ERC20Handler-_bridge.svg) ### ERC721Handler In the contract `ERC721Handler`, the role `_bridge` has authority over the functions shown in the diagram below. Any compromise to the `_bridge` account may allow the hacker to take advantage of this authority and process a deposit transaction, execute the proposal, and withdraw a specified token to a recipient. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-553e7a20-892b-d147d1dc803f/diagrams/centralizat

Open the report
HighFinance Centralization Related RisksEMC Finance & Bridge · CertiK · 15 Oct 2024Acknowledged

### FinancePriceOracle In the contract `FinancePriceOracle`, the role `admin` has authority over the functions shown in the diagram below. Any compromise to the `admin` account may allow the hacker to take advantage of this authority and add addresses to the whitelist, and remove whitelist assets. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-54e2c590-892b-d147d1dc803f/diagrams/centralization_FinancePriceOracle-FinancePriceOracle-admin.svg) --- In the contract `FinancePriceOracle`, the role `whitelisted` has authority over the functions shown in the diagram below. Any compromise to the `whitelisted` account may allow the hacker to take advantage of this authority and set the direct price and set underlying prices for cTokens. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-54e2c590-892b-d147d1dc803f/diagrams/centralization_FinancePriceOracle-FinancePriceOracle-whitelisted.svg) ### Financetroller In the contract `Financetroller`, the role `admin` has authority over the functions shown in the diagram below. Any compromise to the `admin` account may allow the hacker to take advantage of this authority and pause or unpause the borrowing of a specific token, the minting of a specific token, fix bad finance accruals if proposal 65 has not been executed yet, change the borrow cap guardian address, change the borrowing cap for a specific token, pause or unpause transfers, pause or unpause seizes, and change the close factor. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-54e2c590-892b-d147d1dc803f/diagrams/centralization_Financetroller-Financetroller-admin.svg) --- In the contract `Financetroller`, the role `borrowCapGuardian` has authority over the functions shown in the diagram below. Any compromise to the `borrowCapGuardian` account may allow the hacker to take advantage of this authority and set market borrow caps. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-54e2c590-892b-d147d1dc803f/diagrams/centralization_Financetroller-Financetroller-borrowCapGuardian.svg) ---- In the contract `Financetroller`, the role `pauseGuardian` has authority over the functions shown in the diagram below. Any compromise to the `pauseGuardian` account may allow the hacker to take advantage of this authority and pause or unpause borrowing, pause or unpause seizes, pause or unpause transfer, and pause or unpause minting. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-73fe-54e2c590-892b-d147d1dc803f/diagrams/centralization_Financetroller-Financetroller-pauseGuardian.svg)

Open the report
HighInitial Token DistributionEMC Finance & Bridge · CertiK · 15 Oct 2024Acknowledged

All of the ERC20 tokens are sent to the contract deployer. This is a centralization risk because the deployer or the owner(s) of the EOAs can distribute tokens without obtaining the consensus of the community. Any compromise to these addresses may allow a hacker to steal and sell tokens on the market, resulting in severe damage to the project.

Open the report
HighRelayer can steal the locked fundsEMC Finance & Bridge · CertiK · 15 Oct 2024Acknowledged

```sol=489 function executeProposal(uint8 chainID, uint64 depositNonce, bytes calldata data, bytes32 resourceID) external onlyRelayers whenNotPaused { address handler = _resourceIDToHandlerAddress[resourceID]; uint72 nonceAndID = (uint72(depositNonce) << 8) | uint72(chainID); bytes32 dataHash = keccak256(abi.encodePacked(handler, data)); Proposal storage proposal = _proposals[nonceAndID][dataHash]; require(proposal._status != ProposalStatus.Inactive, "proposal is not active"); require(proposal._status == ProposalStatus.Passed, "proposal already transferred"); require(dataHash == proposal._dataHash, "data doesn't match datahash"); proposal._status = ProposalStatus.Executed; IDepositExecute depositHandler = IDepositExecute(_resourceIDToHandlerAddress[proposal._resourceID]); depositHandler.executeProposal(proposal._resourceID, data); emit ProposalEvent(chainID, depositNonce, proposal._status, proposal._resourceID, proposal._dataHash); } ``` `Bridge.executeProposal()` and `voteProposal()` don't carefully check the provided `resourceID`. The relayer can create the proposal with expensive fake `resourceID`, other relayers will vote for the same proposal with correct cheap `resourceID`, then the relayer will `executeProposal()` with expensive `resourceID`, practically stealing the locked tokens from the Bridge.

Open the report
Medium`FinanceLens.pendingRewards()` doesn't return theEMC Finance & Bridge · CertiK · 15 Oct 2024Acknowledged

```sol=788 rewardSummary.pendingRewards = new PendingReward[](cTokens.length); return rewardSummary; ``` `FinanceLens.pendingRewards()` returns the empty `PendingReward` array.

Open the report
MediumHardcoded `resourceID` and `chainId`EMC Finance & Bridge · CertiK · 15 Oct 2024Acknowledged

The current code contains hardcoded `resourceID` and `chainId` values, which reduces flexibility and maintainability. Utilizing constants or configuration variables instead of hardcoded values will enhance supportability and adaptability to change. The code uses testnet chain IDs. Bridge_emc.sol uses 6678 (Edge Matrix Chain) in both `fallback()` and `_deposit2()`. But Bridge.sol uses 6678 (Edge Matrix Chain) in `_deposit2()` only. 99876 (Edge Matrix Chain Testnet) and 84532 (Base Sepolia Testnet) are used in `fallback()`. 99876 (Edge Matrix Chain Testnet) is used `deposit()`. ```solidity if (resourceID == 0x0000000000000000000000000000000000000000000000000000000000000000 || resourceID == 0x0000000000000000000000000000000000000000000000000000000000000002) { uint256 chainId; assembly { chainId := chainid() } if(chainId != 16688 && resourceID == 0x0000000000000000000000000000000000000000000000000000000000000002){ ``` The code should replace the specific `resourceID` and `chainId` with predefined, configurable constants. For example: ```solidity uint256 constant NATIVE_RESOURCE_ID = 0x0000000000000000000000000000000000000000000000000000000000000000; uint256 constant NATIVE_TESTNET_RESOURCE_ID = 0x0000000000000000000000000000000000000000000000000000000000000002; uint256 constant IRIShubTestnet = 16688; if (resourceID == NATIVE_RESOURCE_ID || resourceID == NATIVE_TESTNET_RESOURCE_ID) { uint256 chainId; assembly { chainId := chainid() } if (chainId != IRIShubTestnet && resourceID == NATIVE_TESTNET_RESOURCE_ID) { // Additional logics and conditions } } ``` This approach fosters better readability, maintainability, and adaptability for future updates or different deployment environments.

Open the report
MediumNo Cap on FeesEMC Finance & Bridge · CertiK · 15 Oct 2024Acknowledged

The `_fee` variables in the contract have no set limits, allowing fees to be set to extreme values.

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="edge-matrix-chain"
></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