Across is now live on Lens Chain!
Bridge Now
Across Documentation
V3 Developer Docs
V3 Developer Docs
  • 👋Introduction
    • Welcome to Across
    • What is Across?
    • Technical FAQ
    • Migration Guides
      • Migration from V2 to V3
      • Migration to CCTP
        • Migration Guide for Relayers
        • Migration Guide for API Users
      • Migration Guide for Non-EVM and Prefills
        • Breaking Changes for Indexers
        • Breaking Changes for API Users
        • Breaking Changes for Relayers
        • Testnet Environment for Migration
      • Solana Migration Guide
      • BNB Smart Chain Migration Guide
  • 🔗Use Cases
    • Instant Bridging in your Application
      • Bridge Integration Guide
      • Multichain Bridge UI Guide
      • Single Chain Bridge UI Guide
    • Embedded Crosschain Actions
      • Crosschain Actions Integration Guide
        • Using the Generic Multicaller Handler Contract
        • Using a Custom Handler Contract
      • Crosschain Actions UI Guide
    • Settle Crosschain Intents
  • 🧠Concepts
    • What are Crosschain Intents?
    • Intents Architecture in Across
    • Intent Lifecycle in Across
    • Canonical Asset Maximalism
  • 🛠️Reference
    • API Reference
    • App SDK Reference
    • Contracts
      • Aleph Zero
      • Arbitrum
      • Base
      • Blast
      • Ethereum
      • Linea
      • Ink
      • Lens
      • Lisk
      • Mode
      • Optimism
      • Polygon
      • Redstone
      • Scroll
      • Soneium
      • Unichain
      • World Chain
      • zkSync
      • Zora
    • Selected Contract Functions
    • Supported Chains
    • Fees in the System
    • Actors in the System
    • Security Model and Verification
      • Disputing Root Bundles
      • Validating Root Bundles
    • Tracking Events
  • 🔁Relayers
    • Running a Relayer
    • Relayer Nomination
  • 📚Resources
    • Release Notes
    • Developer Support
    • Bug Bounty
    • Audits
Powered by GitBook
LogoLogo

Products

  • Across Bridge
  • Across+
  • Across Settlement

Socials

  • Discord
  • Twitter
  • Medium
  • Forum

Resources

  • Blog
  • Across Brand Assets
  • Github

Routes

  • Bridge to Unichain
  • Bridge to Arbitrum
  • Bridge to Optimism
  • Bridge to Linea
  • Bridge to Polygon
  • Bridge to Base
  • Bridge to World Chain
  • Bridge to zkSync
On this page
  • About
  • Manual Dispute Procedure
  • Automated Dispute Procedure
  • Installation
  • Execution
  1. Reference
  2. Security Model and Verification

Disputing Root Bundles

PreviousSecurity Model and VerificationNextValidating Root Bundles

Last updated 1 month ago

About

Across requires proposals and disputes to be accompanied by a bond. This bond is returned if the proposal or dispute is correct, and is sacrificed if it is found to be incorrect. This protects against attempts to incorrectly move funds, as well as spam and other denial of service attempts.The () is the bond collateral required by the contract. This is a WETH-like contract that is minted in return for depositing Ether, and can be redeemed for the underlying Ether at any time. implements custom ERC20 logic in order to limit the addresses that are able to make root bundle proposals.

Manual Dispute Procedure

  1. 1.Check the required bond token and amount (nominally 0.45 ABT) by calling and on the .

  2. 2.Mint the bond token as necessary by caling on the BondToken contract.

  3. 3.Ensure that the has permission to pull the bond during the dispute. Increase the allowance as necessary by calling on the BondToken contract. The address to approve is .

  4. 4.Call on the .

Automated Dispute Procedure

The Across repository contains a utility script that automates each of the above steps. Prerequisites are:

  1. 1.The relayer-v2 package must be installed.

  2. 2.The mnemonic for an EOA must be set in the relayer-v2 .env file.

    1. 1.The configured EOA must be funded with at least 0.45 ABT or ETH (1 ABT == 1 ETH), plus additional ETH for gas to handle the necessary deposit, approval and/or dispute transactions.

    2. 2.It is sufficient for the entire amount to be held in ETH, since the dispute script automates the steps of minting ABT and approving the HubPool to spend it.

    3. 3.The actual amounts are subject to change based on the prevailing gas price at the time of the dispute, and the configured bond amount.

Installation

$ git clone https://github.com/across-protocol/relayer-v2.git
$ cd relayer-v2
$ yarn install && yarn build

# Copy the predefined sample config and update the MNEMONIC variable in
# .env to match the relevant mnemonic.
$ cp .env.example .env

Execution

$ yarn dispute

# The dispute script will dump information about the Bond Token and 
# latest HubPool proposal. If necessary, it will automatically mint the 
# requisite amount of the bond token and will approve the HubPool to use 
# it. At the conclusion, the script will provide the transaction hash of
# the most recent proposal and will request to re-run with the flag
#
#     --txnHash <proposal-transaction-hash>
# 
# Re-running the script with this additional argument will automatically 
# submit a dispute.

$ yarn dispute --txnHash <proposal-transaction-hash>
🛠️
Across Bond Token
ABT
HubPool
ABT
transferFrom()
HubPool
bondToken()
bondAmount()
HubPool
deposit()
HubPool
appprove()
0xc186fa914353c44b2e33ebe05f21846f1048beda
disputeRootBundle()
HubPool
relayer-v2