Skip to main content

Cross-chain bridges

PathTrust modelLatency
Fenryx ↔ EthereumOmnia relay + ZK Groth16 proof~2 min
Fenryx ↔ BitcoinSPV relay (gov-controlled)~30 min
Fenryx ↔ CosmosIBC (Tendermint light client)~30 s

1. Fenryx ↔ Ethereum

Lock on Ethereum

bridge.lock{ value: 0 }(amount, fenryxRecipient);
bridge.lockToken(token, amount, fenryxRecipient);

Wait for Omnia relay

curl https://v2.rpc.fenryx.io/clusters/relay/<receipt_id>
# { "status": "Dispatched", "dst_tx_hash": "0x..." }

Withdraw Fenryx → Ethereum

import { FenryxClient } from '@fenryxlabs/fenryx-sdk';
const c = new FenryxClient('https://v2.rpc.fenryx.io');
await c.postRaw('bridge/submit_lock', {
recipient_eth: '0x...',
amount_afrx: '1000000000000000000',
});

2. Fenryx ↔ Bitcoin

curl https://v2.rpc.fenryx.io/btc_relay/state
# { "height": 845000, "hash": "000000...", "difficulty": 8.77e13 }

BTC ↔ Fenryx atomic swaps use HTLCs verified against the on-chain SPV tip. Mainnet requires the Esplora mainnet API or a private Bitcoin full node.


3. Fenryx ↔ Cosmos (IBC)

Start the relay daemon (operator)

export IBC_PEER_URL=https://rpc.cosmoshub-4.example.com
export FENRYX_RPC_URL=https://v2.rpc.fenryx.io
./relayers/ibc-relay-daemon/target/release/ibc-relay-daemon

Transfer tokens

curl -X POST https://v2.rpc.fenryx.io/broadcast_tx \
-d '{"msg_type":"MsgIBCTransfer","from":"frx1...","channel":"channel-0","denom":"afrx","amount":"1000000","receiver":"cosmos1..."}'
curl https://v2.rpc.fenryx.io/ibc/packets/channel-0

X1-Contracts: native modules from Solidity

Precompile at 0x0000000000000000000000000000000000007373:

interface IFenryx {
function stake(address validator, uint256 amount) external;
function dexSwap(string memory pool, uint256 amountIn, uint256 minOut) external;
function didLevel(address who) external view returns (uint8);
function ibcTransfer(string memory channel, string memory receiver, uint256 amount) external;
}
PathReturns
/x1/contract/:addrbound modules + permissions