Glacis
  • Overview
  • Glacis Core
    • Why Glacis?
    • Getting Started
    • Concepts
      • Architecture
      • Components
      • Features
        • Abstraction
        • Access Control
        • Redundancy
        • Retry Management
        • Routing
        • xERC20s
      • Governance Model
      • Upgrade Model
      • Security Model
    • Messaging Fees
      • Protocol Fees
      • Gas Overhead
    • Troubleshooting
      • Integration Checklist
      • Error Messages
      • FAQ
    • References
      • Smart Contracts
        • GlacisRouter
        • GlacisClient
        • SimpleTokenMediator
      • Supported Chains
      • Supported GMPS
  • Airlift
    • Why Airlift?
    • Supported Chains & Tokens
  • Architecture Overview
    • On-Chain Interface
    • Off-Chain Interface
  • Operation Overview
  • Send & Execute
Powered by GitBook
On this page
  1. Glacis Core
  2. Concepts

Security Model

Given the context where bridges have been the focus of numerous attacks throughout 2022 and 2023, emphasizing security within the Glacis infrastructure is paramount.

As a response to these security challenges, every Smart Contract function within Glacis has undergone rigorous access control measures. These measures are designed to tightly restrict access to each function, ensuring that only the specifically designated and authorized component can interact with it.

This security-first philosophy reflects an understanding of the critical importance of trust and reliability in the blockchain ecosystem, where any breach can have far-reaching consequences.

To enforce Solidity best practices security policies, the following modifiers have been implemented:

  • onlyAuthorizedAdapter: Verifies that the source address of a request is an authorized component (the address is in the authorizedRemoteAddresses list for the source chain)

    modifier onlyAuthorizedRemoteAddress(uint256 sourceChainId, address sourceAddress) {
        if (
            sourceChainId == 0 ||
            remoteCounterpart[chainId] == address(0) ||
            sourceAddress != remoteCounterpart[chainId]
        ) {
            revert GlacisAbstractAdapter__OnlyAdapterAllowed();
        }
        _;
    }
  • onlyGlacisRouter: Verifies that the sender of the request to an Adapter send function is always GlacisRouter

    modifier onlyGlacisRouter() {
        if (msg.sender != address(GLACIS_ROUTER))
            revert GlacisAbstractAdapter__OnlyGlacisRouterAllowed();
        _;
    }
  • onlyAdapter: Verifies that the sender of the request to a GlacisRouter receive function is one of the registered GMP adapters

    modifier onlyAdapter() {
        if (adapterToGlacisGMPId[msg.sender] == 0)
            revert GlacisAbstractRouter__OnlyAdaptersAllowed();
        _;
    }

This diagram serves as a comprehensive visual guide illustrating the various layers and mechanisms of security restrictions implemented within the Glacis protocol:

PreviousUpgrade ModelNextMessaging Fees

Last updated 1 year ago