file-contractContracts & Events

Deployed bridge contract addresses, user-facing ABIs, and event signatures for Goliath Mainnet/Ethereum Mainnet and Goliath Testnet/Sepolia.

All addresses and ABIs on this page are public and safe to hardcode into client builds. Token contract addresses may change as new assets are added — always prefer reading them from GET /bridge/limits and the token registry in Smart Contract Addresses when possible.

Mainnet Addresses

Bridge Contracts

Contract
Chain
Address

Relayer wallet

Both

0x90F26908Ee30C8fA6812f6BA66c050a86C8aF6cB

Ethereum Mainnet Tokens

Goliath Mainnet Bridged Tokens

Token
Address
Decimals

Testnet Addresses

Bridge Contracts

Contract
Chain
Address

BridgeLock (BridgeSepolia)

Ethereum Sepolia (11155111)

0xA9FD64B5095d626F5A3A67e6DB7FB766345F8092

BridgeMint (BridgeGoliath)

Goliath Testnet (8901)

0x2c1d218B5a97a26D144ffd12d5C813590f93FFEB

Goliath Testnet Bridged Tokens

Token
Address
Decimals

ETH (bridged)

0xEd02AA7dd3f105EDab8702D859781CAfF111324b

18

USDC (bridged)

0x4BE65Dce1D79B8728485B759eE06cC8053E824F4

6

Sepolia XCN (ERC-20)

0x7a8adc542A35c93da263A188367F4bF4c445B8E9

18


BridgeLock ABI (User Functions)

BridgeLock is deployed on Ethereum. External developers call deposit(...) or depositNative(...) to initiate an Ethereum → Goliath transfer, and observe the Deposit event. The Release event fires when the relayer delivers a Goliath → Ethereum withdrawal.

Event Topic Hashes

Event
Topic 0

Deposit(bytes32,address,address,address,uint256,uint64,uint64)

keccak256("Deposit(bytes32,address,address,address,uint256,uint64,uint64)")

Release(bytes32,address,address,uint256)

keccak256("Release(bytes32,address,address,uint256)")

circle-info

For Deposit.token, address(0) indicates native ETH. Any other value is an ERC-20 address.


BridgeMint ABI (User Functions)

BridgeMint is deployed on Goliath. External developers call burn(...) to initiate a Goliath → Ethereum transfer for bridged ERC-20s (ETH, USDC). For native XCN withdrawals use the intent API instead. The Mint event fires when the relayer delivers an Ethereum → Goliath deposit.

Event Topic Hashes

Event
Topic 0

Withdraw(bytes32,address,address,address,uint256,uint64,uint64,uint64)

keccak256("Withdraw(bytes32,address,address,address,uint256,uint64,uint64,uint64)")

Mint(bytes32,address,address,uint256)

keccak256("Mint(bytes32,address,address,uint256)")


Correlation Between Source and Destination

Use these indexed fields to correlate the two legs of a bridge transfer:

Direction
Source event
Destination event
Shared field

E → G

Deposit.depositId

Mint.depositId

bytes32 depositId

G → E

Withdraw.withdrawId

Release.withdrawId

bytes32 withdrawId

The bridge REST API does the same correlation for you — pass either identifier to GET /bridge/status and you'll get a single response covering both sides.

Verifying Source

Both contracts are verified on their respective block explorers:

The source for both is published at github.com/Onyx-Protocolarrow-up-right (wXCN repository).

Last updated