Q1 2026 Security & Compliance Report44 incidents, $482M in losses, insights from 11 industry leaders.
Read the report

Audit name:

[SCA] Push Chain | Core Contracts | Mar2026

Date:

Apr 13, 2026

Table of Content

Introduction
Audit Summary
System Overview
Potential Risks
Findings
Appendix 1. Definitions
Appendix 2. Scope
Appendix 3. Additional Valuables
Disclaimer

Want a comprehensive audit report like this?

Introduction

We express our gratitude to the Push Chain team for the collaborative engagement that enabled the execution of this Smart Contract Security Assessment.

Push Chain is a fully EVM-compatible Proof-of-Stake Layer 1 blockchain designed to enable universal application deployment. It allows developers to deploy a Solidity-based smart contract once on Push Chain, while enabling users from multiple blockchain networks to interact with it using their existing wallets.

Document

NameSmart Contract Code Review and Security Analysis Report for Push Chain
Audited ByOlesia Bilenka; Kornel Światłowski
Approved ByIvan Bondar
Websitehttps://push.org
Changelog31/03/2026 - Preliminary Report
14/05/2026 - Remediation Report
27/05/2026 - Post Audit Changes
PlatformPush Chain, Ethereum, Solana
LanguageSolidity
TagsERC20, Signatures, Factory, Bridge
Methodologyhttps://docs.hacken.io/methodologies/smart-contracts
  • Document

    Name
    Smart Contract Code Review and Security Analysis Report for Push Chain
    Audited By
    Olesia Bilenka; Kornel Światłowski
    Approved By
    Ivan Bondar
    Changelog
    31/03/2026 - Preliminary Report
    14/05/2026 - Remediation Report
    27/05/2026 - Post Audit Changes
    Platform
    Push Chain, Ethereum, Solana
    Language
    Solidity
    Tags
    ERC20, Signatures, Factory, Bridge

Review Scope

Repositoryhttps://github.com/pushchain/push-chain-core-contracts/tree/audit-main
Commit15b70544feba1586f488a90e38650bf33ea3c634
Remediation commitdaf74825d22121896964e2d542201e623c4e994c
Post Audit Changesa2b61850d765679aa9e1e39998a47a348404bc08

Audit Summary

47Total Findings
36Resolved
6Accepted
5Mitigated

The system users should acknowledge all the risks summed up in the risks section of the report

Documentation quality

  • Functional requirements are provided via markdown documentation (docs/) covering architecture overview, UEA/CEA flows, migration mechanics, and threat modelling.

  • Technical description is provided at a high level. Low-level implementation details (storage layout, upgrade invariants, exact encoding rules) are not documented.

Code quality

  • The codebase uses OpenZeppelin upgradeable contracts for access control (AccessControlDefaultAdminRulesUpgradeable), pausability (PausableUpgradeable), reentrancy guards (ReentrancyGuardUpgradeable), and proxy patterns (Clones, ERC1967Proxy). Custom implementations are used where protocol-specific logic is required (UEA/CEA proxy storage slots, PRC20 synthetic token, WPC wrapper).

  • Shared constants and types are properly centralized in Types.sol and Errors.sol. Custom errors are used consistently across all contracts, improving gas efficiency and debuggability.

  • Role-based access control follows a granular separation pattern: ROLE_MANAGER_ROLE administers operational roles, contract-specific admin roles (UVCORE_ADMIN_ROLE, UEA_ADMIN_ROLE, CEA_ADMIN_ROLE) control configuration, OPERATOR_ROLE manages address setters and unpause operations, and PAUSER_ROLE is restricted to pause-only actions. This design limits the blast radius of a single compromised key.

  • The development environment is configured with Foundry (forge build/forge test toolchain), Solidity 0.8.26, Shanghai EVM target, and via_ir optimization enabled.

Test coverage

Code coverage of the project is 91.92% (branch coverage).

  • The test suite includes unit tests, fuzz tests (property-based), fork tests.

  • Deployment and basic user interactions are well covered.

  • Proxy initialization edge cases (UEAProxy, CEAProxy) have lower branch coverage (~50–67%).

  • Cross-contract interaction scenarios (e.g., full UEACEA round-trip, migration under concurrent operations) are not tested end-to-end.

System Overview

Push Chain is an EVM-compatible Proof-of-Stake Layer 1 designed for universal app execution across multiple ecosystems. Developers deploy once on Push Chain, while users from different chains interact using their native identities/wallets via protocol-managed execution accounts.

Core Module

  • UniversalCore.sol is the main protocol coordinator on Push Chain. It manages PRC20 deposit/refund flows, chain gas metadata, supported gas tokens, and swap-and-burn logic through Uniswap-style integrations.

  • PRC20.sol implements upgradeable synthetic ERC-20 assets representing external-chain tokens. It supports protocol-authorized minting (deposit), user burning, and stores source-chain token metadata plus UniversalCore linkage.

  • WPC.sol is the wrapped native Push coin contract with standard wrap/unwrap and ERC-20-style transfer/allowance behavior used by core swap paths.

UEA Module Universal Executor Accounts

  • UEAFactory.sol is the upgradeable factory/registry for UEAs. It maps chain identifiers to VM types, stores UEA implementations, deploys deterministic proxy instances (CREATE2), and controls pause/migration configuration.

  • UEAProxy.sol is the minimal per-account proxy that stores implementation in a fixed slot and delegates all runtime calls.

  • UEA_EVM.sol is the EVM UEA implementation. It validates ECDSA universal payloads (with trusted-module bypass path), applies nonce/deadline logic, and executes single-call, multicall, and migration dispatch.

  • UEA_SVM.sol is the SVM UEA implementation. It mirrors EVM execution flow but verifies Ed25519 signatures through the verifier precompile before dispatching calls.

  • UEAMigration.sol is the delegatecall-only migration singleton used to update UEA proxy implementation slots (separate targets for EVM/SVM logic).

CEA Module Chain Executor Accounts

  • CEAFactory.sol is the upgradeable factory for destination-chain CEAs. It deploys deterministic proxy clones, maintains UEA↔CEA mappings, and manages vault/gateway/implementation/pause/migration parameters.

  • CEAProxy.sol is the lightweight per-account proxy for CEAs with fixed-slot implementation storage.

  • CEA.sol is the execution logic for CEAs. It is vault-gated, tracks executed tx IDs for replay protection, supports single-call/multicall/migration execution, and exposes outbound universal transaction initiation toward the gateway.

  • CEAMigration.sol is the delegatecall-only migration singleton that updates CEA proxy implementation slots.

Shared Libraries

  • Errors.sol centralizes common and module-specific custom errors.

  • Types.sol defines shared structs/enums/constants (universal account ID, payload formats, multicall entries, selectors, and signing typehashes).

  • Utils.sol provides utility helpers, including strict decimal-string-to-uint256 conversion (StringUtils).

Privileged roles

  • UniversalCore.sol

    • DEFAULT_ADMIN_ROLE: root governance control with 1-day timelock for admin role transfers; can grant/revoke ROLE_MANAGER_ROLE.

    • ROLE_MANAGER_ROLE: grants operational roles (UVCORE_ADMIN_ROLE, OPERATOR_ROLE, PAUSER_ROLE); acts as the role admin for all operational roles.

    • UVCORE_ADMIN_ROLE: controls protocol configuration — protocol fees, gas tokens, gas limits, staleness thresholds, fee tiers, auto-swap support, deadline defaults, and native PC rescue.

    • OPERATOR_ROLE: address setters (updateWPC, updateUniversalGatewayPC, updateUniswapV3Addresses) and unpause.

    • PAUSER_ROLE: can pause core operational entrypoints, acting as an emergency stop operator.

    • UNIVERSAL_EXECUTOR_MODULE (hardcoded: 0x14191Ea54B4c176fCf86f51b0FAc7CB1E71Df7d7): executes module-only flows (token deposit, auto-swap, gas refund, chain metadata updates), making it a high-trust execution authority.

    • universalGatewayPC (privileged actor): exclusive caller for gateway burn/swap flow (swapAndBurnGas), so gateway integrity is a hard dependency.

  • PRC20.sol

    • UNIVERSAL_EXECUTOR_MODULE: can update key token-level admin settings (updateUniversalCore, setName, setSymbol).

    • UNIVERSAL_CORE + UNIVERSAL_EXECUTOR_MODULE (mint authority): both are allowed to mint via deposit path, so issuance trust is shared between these two actors.

  • UEAFactory.sol

    • DEFAULT_ADMIN_ROLE: root governance with 1-day timelock; can grant/revoke ROLE_MANAGER_ROLE.

    • ROLE_MANAGER_ROLE: grants operational roles (UEA_ADMIN_ROLE, OPERATOR_ROLE, PAUSER_ROLE).

    • UEA_ADMIN_ROLE: controls UEA ecosystem governance — implementation mapping, migration target, chain/VM registration, Push Chain ID; defines what logic UEAs trust over time.

    • OPERATOR_ROLE: can unpause UEA deployment operations.

    • PAUSER_ROLE: can pause UEA deployment operations.

  • UEA_EVM.sol and UEA_SVM.sol

    • UNIVERSAL_EXECUTOR_MODULE: can execute UEA payloads without user-signature verification path, including migration-triggering payload types; this is a strong delegated execution trust assumption.

  • CEAFactory.sol

    • DEFAULT_ADMIN_ROLE: root governance with 1-day timelock; can grant/revoke ROLE_MANAGER_ROLE.

    • ROLE_MANAGER_ROLE: grants operational roles (CEA_ADMIN_ROLE, OPERATOR_ROLE, PAUSER_ROLE).

    • CEA_ADMIN_ROLE: controls CEA factory implementation configuration — proxy implementation, logic implementation, migration target.

    • OPERATOR_ROLE: address setters (updateVault, updateUniversalGateway) and unpause.

    • PAUSER_ROLE: can pause CEA deployment operations.

    • VAULT: exclusive deploy caller for deployCEA, so operational control of vault affects account rollout.

  • CEA.sol

    • VAULT: only inbound executor for universal tx handling; vault controls what gets executed on each CEA.

    • address(this) self-call gate (execution constraint): outbound gateway-send path (sendUniversalTxToUEA) is intentionally restricted to internal/self-call flows, not arbitrary external callers.

Potential Risks

Critical trust in privileged executor module: A single hardcoded address embedded in bytecode across all core contracts can bypass signature checks, trigger migrations, mint synthetic tokens via privileged paths, and execute arbitrary operations on any user account without consent.

Bridge and Vault integrity dependency: Chain Executor Account execution correctness depends on off-scope relay stack; any compromise there can break message authenticity and execution safety.

External DEX dependency for gas conversion: UniversalCore relies on Uniswap V3 router and pools for fee swaps; liquidity manipulation, pool unavailability, or protocol outage can cause failed or expensive execution.

SVM verifier precompile dependency: UEA_SVM security and liveness depends on chain-specific Ed25519 precompile behavior and availability.

Forced migration and execution capability: The privileged executor module path allows account execution (including migration flow) without user signature consent.

Admin role transfer delay: Factory and core contracts enforce a 1-day delay on root admin role transfers. Operational role changes via the role manager remain immediate.

Gas oracle staleness validation (opt-in): UniversalCore supports per-chain staleness checks for gas data. When configured, outbound fee queries revert if gas data exceeds the configured age. However, this check is opt-in and no hard safety bounds exist on gas price values.

Treasury-like rescue authority: Protocol admin can invoke rescue functions to move protocol-held native assets.

Single hardcoded address controls all protocol-critical privileged paths: The privileged executor module address is embedded in bytecode across UniversalCore, PRC20, UEA_EVM, and UEA_SVM. This single address can mint arbitrary synthetic tokens, execute any operation on any user account without signature, call privileged admin functions on token contracts, and bypass pause states on token minting. There is no enforced separation of duties, multi-signature requirement, or governance mechanism visible in the on-chain contracts. Changing this address requires a full contract redeployment or proxy implementation upgrade.

Factory admin controls account deployments and upgrades: The role manager on UEAFactory and CEAFactory can grant operational admin roles, which control implementation addresses, proxy templates, migration contracts, and chain registrations. Role separation mitigates single-key compromise, but the role manager remains a single point of trust for granting operational roles.

Delegatecall migration trust model: Proxy upgrade path depends on migration contracts writing storage correctly; malicious or buggy migration logic can cause systemic damage to all affected accounts.

Limited review window for operational changes: While root admin role transfers have a 1-day delay, operational configuration changes via granular roles are effective immediately, reducing reaction time for users and integrators.

Version fragmentation: Updates at factory level do not automatically patch already deployed account proxies; existing accounts remain on their original implementation until explicitly migrated.

Liveness tied to relayer and infrastructure health: Downtime of privileged executor module, Vault, or bridge relay components can halt cross-chain execution flows.

Stale configuration risk: Delayed operational updates (e.g., gas pricing) may lead to incorrect fee behavior. The opt-in staleness check mitigates this when configured, but chains without staleness limits set remain vulnerable to stale quotes.

Potential state divergence: No strong on-chain reconciliation guarantee that Push-side intent and destination-side execution always stay synchronized.

Address and configuration drift over time: Factory-level configuration changes can create operational mismatch between expected and active deployment parameters across chains.

Report Modification Notice: This report was modified on May 27th, 2026, at the client’s request to incorporate minor code changes introduced up to commit a2b6185. While these updates were intended to align the report with the latest version of the codebase provided by the client, modifications to previously published audit content may affect the continuity and integrity of the original findings. Hacken reviewed the updated changes to confirm that they correspond solely to the requested modifications. However, any future changes involving substantial code updates or additional commits should undergo a separate security assessment to ensure that no new risks are introduced to the project’s security posture.

Findings

Code
Title
Status
Severity
F-2026-1556ERC-20 Return Path Missing Token Approval Despite Documentation Requirement
fixed

High
F-2026-1556Domain Separator Omits Push Chain Network Identifier, Enabling Cross-Deployment Signature Replay
fixed

Medium
F-2026-1556SVM Domain Separator Encodes chainId Incorrectly Relative to EIP-712
fixed

Medium
F-2026-1556CEA Migration Path Does Not Enforce Self-Targeting Semantics
fixed

Medium
F-2026-1551defaultDeadlineMins Default Value Is Not Initialized in Proxy Storage
fixed

Medium
F-2026-1561Absence of Granular Role Separation
fixed

Low
F-2026-1559UEA migration can be triggered by UNIVERSALEXECUTORMODULE without user signature/consent
accepted

Low
F-2026-1558PRC20 Direct Mint Path Bypasses UniversalCore Pause
fixed

Low
F-2026-1558VerificationType field is signed but never enforced on-chain
accepted

Low
F-2026-1556Single-Call Execution Uses Implicit Dual Semantics for Value Handling
mitigated

Low
1-10 of 47 findings

Identify vulnerabilities in your smart contracts.

Appendix 1. Definitions

Severities

When auditing smart contracts, Hacken is using a risk-based approach that considers Likelihood, Impact, Exploitability and Complexity metrics to evaluate findings and score severities.

Reference on how risk scoring is done is available through the repository in our Github organization:

Severity

Description

Critical
Critical vulnerabilities are usually straightforward to exploit and can lead to the loss of user funds or contract state manipulation.

High
High vulnerabilities are usually harder to exploit, requiring specific conditions, or have a more limited scope, but can still lead to the loss of user funds or contract state manipulation.

Medium
Medium vulnerabilities are usually limited to state manipulations and, in most cases, cannot lead to asset loss. Contradictions and requirements violations. Major deviations from best practices are also in this category.

Low
Major deviations from best practices or major Gas inefficiency. These issues will not have a significant impact on code execution.
  • Severity

    Critical

    Description

    Critical vulnerabilities are usually straightforward to exploit and can lead to the loss of user funds or contract state manipulation.

    Severity

    High

    Description

    High vulnerabilities are usually harder to exploit, requiring specific conditions, or have a more limited scope, but can still lead to the loss of user funds or contract state manipulation.

    Severity

    Medium

    Description

    Medium vulnerabilities are usually limited to state manipulations and, in most cases, cannot lead to asset loss. Contradictions and requirements violations. Major deviations from best practices are also in this category.

    Severity

    Low

    Description

    Major deviations from best practices or major Gas inefficiency. These issues will not have a significant impact on code execution.

Potential Risks

The "Potential Risks" section identifies issues that are not direct security vulnerabilities but could still affect the project’s performance, reliability, or user trust. These risks arise from design choices, architectural decisions, or operational practices that, while not immediately exploitable, may lead to problems under certain conditions. Additionally, potential risks can impact the quality of the audit itself, as they may involve external factors or components beyond the scope of the audit, leading to incomplete assessments or oversight of key areas. This section aims to provide a broader perspective on factors that could affect the project's long-term security, functionality, and the comprehensiveness of the audit findings.

Appendix 2. Scope

The scope of the project includes the following smart contracts from the provided repository:

Scope Details

Repositoryhttps://github.com/pushchain/push-chain-core-contracts/tree/audit-main
Commit15b70544feba1586f488a90e38650bf33ea3c634
Remediation commitdaf74825d22121896964e2d542201e623c4e994c
Post Audit Changesa2b61850d765679aa9e1e39998a47a348404bc08
Whitepaper-
Requirementshttps://github.com/pushchain/push-chain-core-contracts/tree/15b70544feba1586f488a90e38650bf33ea3c634/docs
Technical Requirementshttps://github.com/pushchain/push-chain-core-contracts/tree/15b70544feba1586f488a90e38650bf33ea3c634/docs

Assets in Scope

CEA.sol - CEA.sol
CEAFactory.sol - CEAFactory.sol
CEAMigration.sol - CEAMigration.sol
CEAProxy.sol - CEAProxy.sol
Errors.sol - Errors.sol
PRC20.sol - PRC20.sol
Types.sol - Types.sol
UEA_EVM.sol - UEA_EVM.sol
UEA_SVM.sol - UEA_SVM.sol
UEAFactory.sol - UEAFactory.sol
UEAMigration.sol - UEAMigration.sol
UEAProxy.sol - UEAProxy.sol
UniversalCore.sol - UniversalCore.sol
Utils.sol - Utils.sol
WPC.sol - WPC.sol

Appendix 3. Additional Valuables

Additional Recommendations

The smart contracts in the scope of this audit could benefit from the introduction of automatic emergency actions for critical activities, such as unauthorized operations like ownership changes or proxy upgrades, as well as unexpected fund manipulations, including large withdrawals or minting events. Adding such mechanisms would enable the protocol to react automatically to unusual activity, ensuring that the contract remains secure and functions as intended.

To improve functionality, these emergency actions could be designed to trigger under specific conditions, such as:

  • Detecting changes to ownership or critical permissions.

  • Monitoring large or unexpected transactions and minting events.

  • Pausing operations when irregularities are identified.

These enhancements would provide an added layer of security, making the contract more robust and better equipped to handle unexpected situations while maintaining smooth operations.

Frameworks and Methodologies

This security assessment was conducted in alignment with recognised penetration testing standards, methodologies and guidelines, including the NIST SP 800-115 – Technical Guide to Information Security Testing and Assessment , and the Penetration Testing Execution Standard (PTES) , These assets provide a structured foundation for planning, executing, and documenting technical evaluations such as vulnerability assessments, exploitation activities, and security code reviews. Hacken’s internal penetration testing methodology extends these principles to Web2 and Web3 environments to ensure consistency, repeatability, and verifiable outcomes.

Disclaimer