Cross-chain bridges
| Path | Trust model | Latency |
|---|---|---|
| Fenryx ↔ Ethereum | Omnia relay + ZK Groth16 proof | ~2 min |
| Fenryx ↔ Bitcoin | SPV relay (gov-controlled) | ~30 min |
| Fenryx ↔ Cosmos | IBC (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;
}
| Path | Returns |
|---|---|
/x1/contract/:addr | bound modules + permissions |