Quantum Audit Logo
Arbitrum · Smart Contract Security · Updated Jul 24, 2026

Is Espresso Safe? ESP

On-chain security analysis — is it a scam or legit?

Contract 0x3b8d…94f1 DexScreener ↗
Volume 24h
$197.1K
Liquidity
$522.1K
Price
$0.07189
Token Age
5mo
Top 10 Holders
99.7%

Security Checklist

Contract VerifiedPass
Ownership RenouncedUnknown
No Mint FunctionPass
Liquidity LockedFail
Not a ProxyFail

Audit History

Jul 2341Jul 2363

Every audit run adds a dated snapshot — history is append-only and cannot be edited.

Audit Summary

The `StandardArbERC20` contract serves as an L2 token implementation for the Arbitrum bridge, designed to be deployed via a Beacon Proxy pattern and also acting as a master copy for its own cloning mechanism. The contract correctly handles token metadata parsing from L1, with provisions for missing getters. While the code is generally well-structured, it uses an outdated Solidity compiler version and relies on external data encoding for initialization, which could lead to deployment issues.

Final Recommendation: It is recommended to upgrade the Solidity compiler version to a more recent stable release (e.g., `^0.8.x`) to benefit from improved security features and gas optimizations. Developers should ensure robust validation and error handling for the `_data` parameter passed to `bridgeInit` by the L1 gateway to prevent initialization failures. Integrators should be aware that `decimals()`, `name()`, and `symbol()` functions may revert if the corresponding L1 token metadata is unavailable.

Category Ratings

TechnicalLow
8/10

The technical architecture of `StandardArbERC20` is robust, serving as an L2 ERC20 token implementation for the Arbitrum bridge. It correctly parses and stores L1 token metadata, allowing for flexible handling of tokens with non-standard ERC20 getters (7.1 Architecture). The `BytesLib` utilizes inli

GovernanceHigh
1/10

The `StandardArbERC20` contract itself does not implement direct governance or complex economic models, functioning primarily as a standard L2 token (7.4 Economic). Its economic security is inherently tied to the underlying L1 token and the Arbitrum bridge's overall security. Access control for

UpgradesHigh
1/10

The contract is designed for upgradeability, serving as an implementation for a Beacon Proxy (7.7 Upgrades). It also incorporates a `Cloneable` base, allowing it to act as a master copy for further clones, which adds a layer of architectural complexity to its deployment and upgrade strategy (7.1 Arc

Proxy Upgrade Controls

Proxy TypeBeacon
ImplementationVerified source
Upgrades (30d)0 · stable

LP Distribution

Top-1 Unlocked Holder100.0%
Top-3 Unlocked100.0%

What Raised This Score

Each factor is an on-chain fact recorded at the time of this analysis. The score is computed from them by a deterministic function, so the same contract returns the same score for anyone who runs the audit. How scores are computed

Security Findings

1 Medium 2 Low 2 Info
M-01MediumUnresolved

Outdated Solidity Compiler Version

The contract is compiled with `pragma solidity ^0.6.11`. This version is outdated and may lack security patches, bug fixes, and optimizations present in newer Solidity releases (e.g., `0.8.x`). Using older compiler versions can expose contracts to known or undiscovered vulnerabilities that have been addressed in later versions.

Recommendation: Upgrade the Solidity compiler version to a recent stable release (e.g., `^0.8.x`). Thoroughly test the contract after the upgrade to ensure compatibility and correct behavior, especially regarding changes in ABI encoding, error handling, and gas costs.
L-01LowUnresolved

Reliance on External Data Encoding for Initialization

The `bridgeInit` function relies on the `_data` parameter being perfectly encoded by the L1 contract using `abi.decode`. The contract comments acknowledge that `abi.decode` would revert if the data type is encoded differently. If the L1 contract provides malformed or unexpected `_data`, the `bridgeInit` function will revert, preventing the L2 token from being initialized. This introduces a single point of failure during deployment/initialization.

Recommendation: Implement more robust error handling or validation within `bridgeInit` for the `_data` parameter, possibly using `abi.decode` in a `try/catch` block if a newer Solidity version is adopted (Solidity 0.8.0+). Alternatively, ensure strict validation and testing of the L1 contract's `_data` encoding mechanism to guarantee correctness.
L-02LowUnresolved

Conditional Reversion of ERC20 Metadata Getters

The `decimals()`, `name()`, and `symbol()` functions explicitly revert if the corresponding metadata was not successfully parsed from the L1 token during initialization (i.e., `availableGetters.ignoreDecimals`, `ignoreName`, or `ignoreSymbol` is true). While this is an intended design choice to reflect the L1 token's capabilities, it deviates from standard ERC20 behavior where these functions are expected to always return a value. This could lead to unexpected behavior or integration issues for dApps and services that assume full ERC20 compliance.

Recommendation: Ensure that all external integrations and users are aware of this conditional behavior. Consider providing a default value (e.g., empty string for name/symbol, 0 for decimals) instead of reverting, or implement a `try-catch` mechanism in consuming applications to gracefully handle these reverts. The current approach is functional but requires careful handling by consumers.
I-01InformationalUnresolved

Complex Upgrade and Deployment Architecture

The `StandardArbERC20` contract serves a dual role: it is an implementation contract for a `ClonableBeaconProxy` (allowing for upgradeability via a beacon) and also inherits from `Cloneable`, making it a master copy for its own cloning mechanism. This architectural choice, while functional, adds complexity to understanding the deployment, upgrade, and lifecycle management of these tokens. Careful consideration is required to manage both the Beacon's upgrade path and the `Cloneable` master copy's role.

Recommendation: Document the full deployment and upgrade strategy clearly, detailing how both the Beacon Proxy pattern and the `Cloneable` master copy mechanism interact. Ensure that upgrade procedures account for potential storage layout changes in both contexts and that the `isMasterCopy` flag is correctly managed across all deployed instances.
I-02InformationalUnresolved

Inline Assembly Usage in BytesLib

The `BytesLib` library, used for parsing bytes, contains inline assembly (`assembly { ... }`). While assembly can be more gas-efficient and necessary for low-level operations, it significantly increases the complexity of the code and the potential for subtle bugs if not handled with extreme care. Errors in assembly can lead to critical vulnerabilities such as memory corruption or incorrect data manipulation.

Recommendation: Ensure that the `BytesLib` has undergone rigorous testing and formal verification, given its critical role in parsing data and its use of inline assembly. Limit the use of assembly to only where absolutely necessary and provide comprehensive documentation for each assembly block explaining its purpose and invariants.

Would You Like a More Detailed Audit of Espresso?

Our AI-powered scanner gives you a deeper, real-time smart contract analysis — free, no signup required.

Get Detailed Audit
Run Free Audit →