Builders Guide
Sequencer Operations
Sequencer Node Setup

Running a Sequencer Node on GOAT Testnet3 and Alpha Mainnet

This guide provides detailed instructions on how to join GOAT Testnet3 and Alpha Mainnet and run a Sequencer Node.

Chain Information

Alpha Mainnet

ParameterValue
Network NameGOAT Network
RPC URLhttps://rpc.goat.network (opens in a new tab)
Chain ID2345
Currency SymbolBTC
Currency Decimal18
Block Explorerhttps://explorer.goat.network (opens in a new tab)
GistReleases (opens in a new tab)

Testnet3

ParameterValue
Network NameGOAT Testnet3
RPC URLhttps://rpc.testnet3.goat.network (opens in a new tab)
Chain ID48816
Currency SymbolBTC
Currency Decimal18
Block Explorerhttps://explorer.testnet3.goat.network (opens in a new tab)
GistReleases (opens in a new tab)

System Requirements

Hardware Configuration

  • CPU: Equivalent to c5.2xlarge or similar
  • Storage:
    • Root directory with at least 40 GiB of space
    • EBS gp3, 100 GiB, 3000 IOPS, mounted to /data

Network Configuration

  • IPv4 Elastic IP (EIP) required

Security Group Rules

PortDescriptionProtocolSource
30303goat-geth P2PUDP0.0.0.0/0
30303goat-geth P2PTCP0.0.0.0/0
26656goat P2P PortTCP0.0.0.0/0

Ensure your server's firewall and network security settings allow inbound traffic on these ports.

Software Environment

  • Operating System: Ubuntu 20.04 or higher
  • Docker and Docker Compose
  • Golang: Latest stable version (currently 1.23)

Deployment Steps

1. Generate Sequencer Key

Log into your machine and generate the sequencer key:

docker run --rm -v /data/goat:/root/.goat ghcr.io/goatnetwork/goat:v0.2.0 modgen locking sign --owner 0x...abc --eth-chain-id 2345

Replace 0x...abc with the owner EVM address. The owner is the node administrator's EVM address responsible for locking, redemption, and other operations.

Expected output format:

{
  "owner": "0x...abc",
  "pubkey": "0xf93bd3bad63419f0bc201043b433a03e53867b7b01c7f7a08fb5c2a4e14ce89bd6303df7e5bca824c5c6526aa748f4eef20d9879de26bfda0b00414cb6b76ff8",
  "signature": "0x41b65d5255a7e0006df9c80dc0537c5945e0c7a6f5af2f258ca5969f665f16654449d79355ec2f00d847c4949024216d979057808ccd3dfaf3d8b5d6aa51b1d100"
}
⚠️

Back up the generated key at /data/goat/config/priv_validator_key.json

2. Start the Sequencer Node

Fetch the docker-compose.yml from Gist according to your network type(Testnet3 or Mainnet);

Start the services:

docker-compose up -d

3. Sync Status Check

Monitor blockchain sync:

docker exec -i goat-alpha-1 goatd status | jq .

Wait for "catching_up": false to confirm full sync

4. Become a Sequencer Node

Prerequisites

  • Sequencer Node Owner Address (from step 1)
  • Signature (split into 32-32-1 bytes)
  • Sufficient funds for locking (2 BTC) and gas

Locking Contract Details

  • Alpha Mainnet Address: 0xbC10000000000000000000000000000000000004
  • Testnet3 Address: 0xbC10000000000000000000000000000000000004
  • Asset Manager Address: 0x218ab55484482409aAfD035066eb1e0315BE0084

Locking Process

  1. Get whitelisted by contacting the GOAT Network team.

  2. Check minimum lock amount:

    // Reference: https://github.com/GOATNetwork/goat-contracts/blob/main/contracts/locking/Locking.sol#L334
    function minimumLockAmount() external view returns (uint256)
  3. Create a Sequencer Node:

    // Reference: https://github.com/GOATNetwork/goat-contracts/blob/main/contracts/locking/Locking.sol#L118
    function createValidator(
        address owner,
        bytes memory pubkey,
        bytes32 r,
        bytes32 s,
        uint8 v
    ) external

Locking Asset Manager Operations

The Locking Asset Manager is designed to optimize the validation mechanism for locked amounts and prevent accidental node exits due to erroneous withdrawals.

Safe Lock

// Reference: https://github.com/liqingnz/goat-contracts-extension/blob/main/src/SafeLocking.sol#L32
function safeLock(uint256 amount) external

Safe Unlock

// Reference: https://github.com/liqingnz/goat-contracts-extension/blob/main/src/SafeLocking.sol#L47
function safeUnlock(uint256 amount) external

Exit Sequencer Node

// Reference: https://github.com/liqingnz/goat-contracts-extension/blob/main/src/SafeLocking.sol#L69
function exit() external

Example Contract

Example Implementation: 0xb1119639cB7bB92B8a3C6d666f159944e89472C1

Support Resources

⚠️

The Locking Asset Manager features are under testing. Exercise caution and monitor announcements.