Skip to content

Latest commit

 

History

History
461 lines (384 loc) · 15.2 KB

configuration.md

File metadata and controls

461 lines (384 loc) · 15.2 KB
description
Bonder configuration examples

Configuration

The bonder configuration will prepare the networks and assets supported by your bonder. The config is very custom to your bonder, so please read through each item carefully.

Below is an example of a USDC bonder running on Ethereum, Gnosis, Polygon, Optimism, and Arbitrum.

Configuration example

{
  "network": "mainnet",
  "chains": {
    "ethereum": {
      "rpcUrl": "https://mainnet.infura.io/v3/84842078b09946638c03157f83405213",
      "maxGasPrice": 500
    },
    "gnosis": {
      "rpcUrl": "https://rpc.gnosischain.com",
      "customSyncType": "threshold",
      "maxGasPrice": 90
    },
    "polygon": {
      "rpcUrl": "https://polygon-rpc.com",
      "customSyncType": "threshold",
      "maxGasPrice": 5000
    },
    "optimism": {
      "rpcUrl": "https://mainnet.optimism.io",
      "customSyncType": "threshold",
      "maxGasPrice": 500
    },
    "arbitrum": {
      "rpcUrl": "https://arb1.arbitrum.io/rpc",
      "customSyncType": "threshold",
      "maxGasPrice": 500
    }
  },
  "tokens": {
    "USDC": true
  },
  "routes": {
    "ethereum": {
      "polygon": true,
      "gnosis": true,
      "arbitrum": true,
      "optimism": true
    },
    "polygon": {
      "ethereum": true,
      "gnosis": true,
      "arbitrum": true,
      "optimism": true
    },
    "gnosis": {
      "ethereum": true,
      "polygon": true,
      "arbitrum": true,
      "optimism": true
    },
    "arbitrum": {
      "ethereum": true,
      "polygon": true,
      "gnosis": true,
      "optimism": true
    },
    "optimism": {
      "ethereum": true,
      "polygon": true,
      "gnosis": true,
      "arbitrum": true
    }
  },
  "db": {
    "location": "/root/.hop/db"
  },
  "logging": {
    "level": "debug"
  },
  "keystore": {
    "location": "/root/.hop/keystore.json",
    "parameterStore": "/Hop/Bonder/Keystore/Pass",
    "awsRegion": "us-east-1"
  },
  "watchers": {
    "bondTransferRoot": true,
    "bondWithdrawal": true,
    "commitTransfers": true,
    "settleBondedWithdrawals": true,
    "confirmRoots": true,
    "L1ToL2Relay": true
  },
  "commitTransfers": {
    "minThresholdAmount": {
      "USDC": {
        "polygon": {
          "ethereum": 170000,
          "gnosis": 50000,
          "optimism": 130000,
          "arbitrum": 130000
        },
        "gnosis": {
          "ethereum": 170000,
          "polygon": 130000,
          "optimism": 130000,
          "arbitrum": 130000
        },
        "optimism": {
          "ethereum": 170000,
          "polygon": 130000,
          "gnosis": 50000,
          "arbitrum": 130000
        },
        "arbitrum": {
          "ethereum": 170000,
          "polygon": 130000,
          "gnosis": 50000,
          "optimism": 130000
        }
      }
    }
  },
  "fees": {
    "USDC": {
      "ethereum": 14,
      "polygon": 14,
      "gnosis": 25,
      "optimism": 14,
      "arbitrum": 14
    }
  }
}

Properties

Key Value
network The Ethereum network to use. (e.g. "mainnet', "goerli")
chains Chain configuration such as RPC URLs and max gas prices to use. See chains section below for details.
tokens List of tokens and their bridges that bonder will interact with. See tokens section below for details.
routes Desired routes to bond withdrawals.
db Cache db options. See db section below for details.
logging Logging options. See logging section below for details.
keystore Keystore options. See keystores section below for details.
watchers List of watchers.
commitTransfers Configuration for committing transfers.
fees Set bonder fees for each asset in terms of basis points (BPS).
bonders List of other bonders, used for calculating total available liquidity. See bonders section below for details.
signer Signer options. See signer section below for details.

chains

Specify configuration options for each chain.

The RPC URL is optional and a default will be used if not specified. The redundant RPC URLs are optional. If supplied, these URLs will be utilized to confirm data on the source chain before proceeding with a transaction on the destination chain."

Note: If the selected network doesn't support a chain, it will be ignored.

"chains": {
  "<chain-slug>": {
    "rpcUrl": "<chain-rpc-url>",
    "customSyncType": "<custom-sync-type", // Not applicable if `chain-slug` is `ethereum`
    "maxGasPrice": "<max-gas-price>",
    "redundantRpcUrls": ["<chain-rpc-url>, ..."]
  },
  ...
}

Chain slug options:

Chain slug Description
ethereum Ethereum
gnosis Gnosis Chain (formerly xDai)
arbitrum Arbitrum One
optimism Optimism
polygon Polygon (formerly Matic)
nova Arbitrum Nova
base Base
linea Linea
polygonzk Polygon zkEVM

tokens

Specify which tokens and their token bridges to interactive with:

"tokens": {
  "USDC": true,
  ...
}

routes

Specify which routes to bond:

"routes": {
  "ethereum": {
    "polygon": true,
    "gnosis": true,
    "arbitrum": true,
    "optimism": true
  },
  "polygon": {
    "ethereum": true,
    "gnosis": true,
    "arbitrum": true,
    "optimism": true
  },
  ...
}

The structure is source -> destination, for example:

"routes": {
  "polygon": {
    "gnosis": true
  },
  ...
}

The above example means that the bonder will bond transfers at the destination sent from polygon->gnosis.

db

Configure options for leveldb database used for caching:

Key Default value Description
location ~/.hop/db Location for cache db.

logging

Configure logging levels:

Key Default value Description
level debug Logging level. Options are "debug", "info", "warn", "error"

keystore

Configure options for keystore:

Key Default value Example Description
location ~/.hop/keystore.json ~/.hop/keystore.json Location of keystore to use.
pass mysecret Passphrase for encrypted keystore.
parameterStore /Hop/Bonder/Keystore/Pass Use AWS SSM Parameter Store for keystore password.
awsRegion us-east-1 us-east-1 AWS region to use when using SSM Parameter Store.

{% content-ref url="keystore.md" %} keystore.md {% endcontent-ref %}

watchers

Watchers are like services in the Hop Node.

Watcher Description
bondTransferRoot Bond transfer roots leaving ORUs
bondWithdrawal Bond withdrawals sent across chains
commitTransfers Commit transfers to create a transfer root
settleBondedWithdrawals Settle individual transfers
confirmRoots Confirm transfer roots on L1
L1ToL2Relay Relay messages sent from L1 to L2

They should all be enabled unless there's a specific reason not to enable certain watchers.

commitTransfers

The minThresholdAmount is used to determine when to commit the bundle of transfers.

The format is token: { source: { destination: amount } }

This example will commit transfers when a total of at least 20,000 MATIC are pending commit in the bundle, going either from gnosis->ethereum or polygon->ethereum, and a 10,000 threshold for the direction gnosis->polygon or polygon->gnosis.

"commitTransfers": {
  "minThresholdAmount": {
    "USDC": {
      "gnosis": {
        "ethereum": 20000,
        "polygon": 10000
      },
      "polygon": {
        "ethereum": 20000,
        "gnosis": 10000
      }
    }
  }
}

fees

Configure fee options. The fees are in basis points:

"fees": {
  "USDC": {
    "ethereum": 14,
    "polygon": 14,
    "gnosis": 25,
    "optimism": 14,
    "arbitrum": 14
  },
    ...
}

bonders

List of bonders, used for calculating total available liquidity.

The format is

"[TOKEN]": {
  "[SOURCE_CHAIN]": {
    "[DESTINATION_CHAIN]": "[BONDER_ADDRESS]"
  }
}

Full example:

  "bonders": {
    "ETH": {
      "ethereum": {
        "optimism": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "arbitrum": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "gnosis": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "polygon": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564"
      },
      "optimism": {
        "ethereum": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "arbitrum": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "gnosis": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "polygon": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564"
      },
      "arbitrum": {
        "ethereum": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "optimism": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "gnosis": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "polygon": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564"
      },
      "gnosis": {
        "ethereum": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "arbitrum": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "optimism": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "polygon": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564"
      },
      "polygon": {
        "ethereum": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "arbitrum": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "gnosis": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564",
        "optimism": "0x710bDa329b2a6224E4B44833DE30F38E7f81d564"
      }
    },
    ...
  }

blocklist

Configure a blocklist of addresses for bonder to not bond transfers.

Using local blocklist file of addresses:

"blocklist": {
  "path": "/root/.hop/blocklist.txt"
}

Using remote blocklist file of addresses:

"blocklist": {
  "path": "https://example.com/blocklist.txt"
}

Using inline list of blocklisted addresses:

"blocklist": {
  "addresses": {
    "0x123...": true,
    "0xabc...": true
  }
}

Note: The Hop Node will need to be restarted whenever updating local, remote, or inline blocklist of addresses.

OFAC list: https://www.treasury.gov/ofac/downloads/sdnlist.txt

signer

Configure options for signer:

Key Default value Example Description
type lambda Type of signer to use. Either kms or lambda.
keyId 11223344 AWS KMS keyId.
awsRegion us-east-1 AWS region to use when using KMS or Lambda.
lambdaFunctionName myFunction Name fo the Lambda function to call.

{% content-ref url="signer.md" %} signer.md {% endcontent-ref %}

Environment variables

Key Value
BONDER_PRIVATE_KEY Private key to use for signing transactions if not using an encrypted keystore.
KEYSTORE_PASS Keystore passphrase if using encrypted keystore and not using password file or AWS Parameter Store option.

Notifications

Slack

The Hop Node can post to Slack when an error occurs or when it sends transactions.

To set it up, configure the following environment variables:

Key Example Value Description
SLACK_AUTH_TOKEN xoxb-123...890 Slack Bot Auth Token
SLACK_CHANNEL mychannel Channel ID or name to post to
SLACK_USERNAME "Hop Node" Username to give to bot

More granular options for Slack channels:

Key Example Value Description
SLACK_WARN_CHANNEL warning-logs (optional) Channel for posting warning logs
SLACK_ERROR_CHANNEL error-logs (optional) Channel for posting error logs
SLACK_INFO_CHANNEL info-logs (optional) Channel for posting info logs
SLACK_LOG_CHANNEL debug-logs (optional) Channel for posting debug logs
SLACK_SUCCESS_CHANNEL success-logs (optional) Channel for posting success logs
GAS_BOOST_WARN_SLACK_CHANNEL gasboost-warning-logs (optional) Channel for wallet signer warning logs
GAS_BOOST_ERROR_SLACK_CHANNEL gasboost-error-logs (optional) Channel for wallet signer error logs