Across is now live on Lens Chain!
Bridge Now
Across Documentation
V2 Developer Docs
V2 Developer Docs
  • How Across Works
    • Overview
      • Roles within Across
      • Fee Model
      • Validating Root Bundles
      • Disputing Root Bundles
  • Developers
    • Across API
    • Across SDK
    • Contract Addresses
      • Mainnet (Chain ID: 1)
      • Arbitrum (Chain ID: 42161)
      • Optimism (Chain ID: 10)
      • Base (Chain ID: 8453)
      • zkSync (Chain ID: 324)
      • Polygon (Chain ID: 137)
    • Selected Contract Functions
    • Running a Relayer
    • Integrating Across into your application
    • Composable Bridging
    • Developer notes
    • Migration from V2 to V3
  • ADDITIONAL INFO
    • Support Links
    • Bug Bounty
    • Audits
Powered by GitBook
LogoLogo
On this page
  • About
  • Manual Dispute Procedure
  • Automated Dispute Procedure
  1. How Across Works
  2. Overview

Disputing Root Bundles

PreviousValidating Root BundlesNextAcross API

Last updated 1 year 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. Check the required bond token and amount (nominally 0.45 ABT) by calling and on the .

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

  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. Call on the .

Automated Dispute Procedure

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

  1. The relayer-v2 package must be installed.

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

    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. 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. 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