Platform

Overview

How It Works

Beneficiary Identity

Policy Corridors

Deterministic Finality

Architecture

Security Model

Governance

Integration

Solutions

Corridors Overview

Institutional Overview

Pricing

All Scenarios

Humanitarian Impact Fund

Assurance

Technical Assurance

Verify Receipt

Receipt Example

Developers

Documentation

APIs & Bridges

Architecture Docs

Glossary

BID API

Company

About

Team

Partners

Roadmap

Investors

Contact

Blog

All Documentation

Schedule Consultation
Bridge-In Flow

Deposit to Mint (Wrap)

How external assets (BTC, ETH, USDC) are bridged onto JIL L1 as wrapper tokens (jBTC, jETH, jUSDC). Standard on-chain deposit, validator-gated mint via 14-of-20 multi-validator attestation (70% BFT), balance visible in Web Wallet. Asset wrapping is optional - users may hold native assets directly.

3 Assets jBTC / jETH / jUSDC
14-of-20 Validator-Gated Mint
Ed25519 Bridge Authority Signing
6 Steps Deposit to Balance
Wrapper Tokens

Supported Wrapper Tokens

JIL Asset Original Chain Contract Decimals
jBTC WBTC Ethereum 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 8
jETH ETH Ethereum native (0x0000...0000) 18
jUSDC USDC Ethereum 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 6
Deposit to Mint

Deposit to JIL L1 balance with 14-of-20 validator attestation

User deposits on the external chain, the bridge chain watcher detects the event, confirmations are tracked, validators independently attest the deposit, and only after reaching the 14-of-20 attestation threshold (70% BFT) are wrapper tokens minted on JIL L1. No single key can mint unilaterally. Asset wrapping is optional - users who prefer to hold native assets are not required to bridge.

Step 1

User Deposits on External Chain

User sends BTC, ETH, or USDC to the JIL bridge contract address on Ethereum (or supported L2). The deposit is a standard on-chain transfer - no special tooling required.

Step 2

Bridge Chain Watcher Detects Deposit

The chain watcher monitors event logs on the source chain. When a deposit to the bridge contract is detected, it records the deposit via the bridge-relayer API. POST /v1/deposit

Step 3

Confirmation Tracking

Watcher sends per-block confirmation updates until the chain-specific threshold is met. ETH: 12 confirmations (~2.4 min). BTC: 6 confirmations (~60 min). Arbitrum: 1 confirmation (~250ms). POST /v1/deposit/:id/confirmations

Step 4

Multi-Validator Attestation

Each validator independently verifies the deposit on the source chain, computes a deterministic deposit hash, signs it with their Ed25519 key, and submits an attestation. POST /v1/deposit/:id/attest. Minting is validator-gated and blocked until the 14-of-20 BFT threshold (70%) is reached. No single key can mint unilaterally. When ZK bridge proofs are enabled, a Groth16 zero-knowledge proof is generated alongside validator attestations, providing cryptographic verification that the deposit commitment is valid without revealing the depositor's identity or amount.

Step 5

Attestation Threshold Met - Auto-Mint

Once 14-of-20 validators attest the deposit, the bridge-relayer signs a PaymentTx from bridge_authority to the user. Proof-of-reserves is verified before minting proceeds. The ledger records the wrapper token in the user's balance. No single key can mint unilaterally.

Step 6

User Sees Wrapper Balance

The user's jBTC/jETH/jUSDC balance is now visible in the Web Wallet. Balance is queried from the ledger via wallet API. GET /state/accounts/{account_id}/balances

// Mint PaymentTx on JIL L1 PaymentTx( from: bridge_authority, to: acct_user, asset: jBTC, amount: 100000000 // 1.0 jBTC (8 decimals) )
Architecture

Bridge Authority Account Pattern

Architecture Note
  • The JIL L1 ledger (jil5600-core) only supports PaymentTx - no native mint or burn opcodes.
  • "Minting" = Payment from bridge_authority to user account (Ed25519-signed by bridge key), validator-gated by 14-of-20 multi-validator attestation. No single key can mint unilaterally.
  • "Burning" = Payment from user to bridge_authority (passkey-signed by user).
  • The bridge_authority account is pre-funded with the max supply of each wrapper asset at bootstrap.
  • Multi-validator attestation gate: Validators independently verify deposits on-chain, sign a deterministic deposit hash, and submit attestations. Minting only proceeds after the 14-of-20 threshold (70% BFT) is reached.
  • Circuit breakers: Bridge can be paused (admin or auto-triggered), daily outflow caps per asset, proof-of-reserves enforced on both minting and withdrawals.
  • Optional wrapping: Asset wrapping is optional. Users may hold and transact with native assets on JIL L1 without bridging. Wrapping is available for users who want to bring external assets on-chain.
  • No Rust L1 engine changes were required to support wrapper tokens.
Confirmation Thresholds

Time to finality varies significantly by source chain

ETH
12 blk
~2.4 min
BTC
6 blk
~60 min
Arbitrum
1 blk
~250ms
Polygon
128 blk
~4.3 min
Base
1 blk
~2s
Database Schema

Database Tables

bridge_deposits

id              UUID PRIMARY KEY
nonce           BIGINT NOT NULL
source_chain    TEXT NOT NULL          -- e.g. "eth", "btc"
depositor       TEXT NOT NULL          -- external address
token           TEXT NOT NULL          -- original token address
amount          NUMERIC NOT NULL
recipient       TEXT NOT NULL          -- JIL L1 account ID
tx_hash         TEXT NOT NULL          -- source chain tx hash
block_number    BIGINT NOT NULL
status          TEXT NOT NULL          -- pending | confirmed | minted | failed
confirmations   INT DEFAULT 0
jil_mint_tx_hash TEXT                 -- L1 PaymentTx hash after mint
wrapper_asset   TEXT NOT NULL          -- jBTC | jETH | jUSDC

bridge_wrapper_tokens

id              TEXT PRIMARY KEY       -- e.g. "jbtc-eth-wbtc"
jil_asset       TEXT NOT NULL          -- jBTC | jETH | jUSDC
original_chain  TEXT NOT NULL          -- eth
original_token  TEXT NOT NULL          -- contract address
decimals        INT NOT NULL
total_minted    NUMERIC DEFAULT 0
total_burned    NUMERIC DEFAULT 0

bridge_checkpoints

chain           TEXT PRIMARY KEY       -- e.g. "eth", "btc"
last_block      BIGINT NOT NULL        -- last processed block number
API Reference

Key Endpoints

Service Endpoint Method Purpose
bridge-relayer /v1/deposit POST Record new deposit from chain watcher
bridge-relayer /v1/deposit/:id/confirmations POST Update confirmation count; triggers auto-mint at threshold
bridge-relayer /v1/deposit/:id/mint POST Manually trigger mint for a confirmed deposit (operator)
bridge-relayer /v1/wrapper-tokens GET List registered wrapper tokens with mint/burn totals
bridge-relayer /v1/reserves GET Proof-of-reserves: minted vs deposited per asset
wallet-api /wallet/wrapped-assets GET User-facing: list available wrapper tokens
wallet-api /wallet/wrap/quote POST User-facing: get deposit address + confirmation estimates
Configuration

Environment Variables

Variable Service Purpose
BRIDGE_AUTHORITY_ACCOUNT bridge-relayer, wallet-api L1 account ID for mint/burn payments (default: bridge_authority)
BRIDGE_AUTHORITY_KEY_B64U bridge-relayer Ed25519 private key (base64url, PKCS8 DER) for signing mint PaymentTx
LEDGER_SERVICE_URL bridge-relayer Ledger API base URL (default: http://ledger-service:8081)
JIL_NETWORK_ID bridge-relayer Network ID for tx challenge string (mainnet: jil-mainnet-1)
JIL_ENABLE_DEV_ENDPOINTS bridge-relayer Set 1 to enable auto-fund via faucet (dev only)
BRIDGE_RELAYER_URL wallet-api Bridge-relayer API base URL (default: http://bridge-relayer:8150)
Source Files

Key Source Files

Wrapper Token Migration

services/bridge-relayer/migrations/002_wrapper_tokens.sql - Migration: wrapper token table + seed data (jBTC, jETH, jUSDC)

Bridge Relayer

services/bridge-relayer/src/index.ts - Wrapper registry, auto-mint logic, bridge authority, API endpoints

Wallet Wrap/Unwrap

services/wallet-api/src/routes/wallet.ts - User-facing wrap/unwrap endpoints

Kafka Events

services/wallet-api/src/services/kafka.ts - UNWRAP_SUBMITTED event type for Kafka

Bridge Infrastructure

Deposit on Ethereum. Validator-Gated Mint on JIL L1.

Optionally bridge BTC, ETH, or USDC onto JIL L1 as wrapper tokens with 14-of-20 validator attestation, proof-of-reserves enforcement, and Ed25519-signed minting. No single key can mint unilaterally.