{
  "schema": "bridge/public-intake-lanes/v1",
  "updated": "2026-06-14",
  "surface": "bridge_intake_lane",
  "product_rule": "Bridge intake is a quote-first passage lane. It is not an OBOL-only sale surface. The page may show a lane before it is payable, but value only moves after a quote binds source asset, expected sender, Bridge pool receiver, Bridge receiver, amount, expiry, source-side route fee, finality, and refusal state.",
  "public_payment_state": "opening_pending_public_source_receivers",
  "wallet_tagline": "Add Bridge to Keplr, bind the Bridge receiver address, enter any source sending address required by the lane, then request a quote that names the source receiver, amount, expiry, finality rule, and memo when the source chain supports one. Do not send funds to copied, cached, or guessed addresses.",
  "quote_rule": "A public quote must name source asset, source binding, target asset, route id, Bridge source receiver, Bridge receiver, source-side fee components, expiry, payment state, and final-credit rule. Bridge decides route funding from policy; the visitor does not choose that lane.",
  "obol_price_usd": "0.10",
  "obol_price_rule": "OBOL opening price is hardcoded at 0.10 USD for this first public lane draft until Bridge publishes a live price receipt.",
  "lanes": [
    {
      "route_id": "ethereum-paxg-obol-opening",
      "label": "Ethereum PAXG -> OBOL opening lane",
      "quote_model": "two_sided_source_value_to_obol_output/v1",
      "source_family": "ethereum_erc20",
      "source_chain": "Ethereum mainnet",
      "source_host_chain_id": "1",
      "source_asset": "PAXG",
      "source_asset_denom": "upaxg",
      "source_token_contract": "0x45804880de22913dafe09f4980848ece6ecbaf78",
      "source_token_decimals": 18,
      "bridge_pool_address": "0xa4b10c9a78fa97a78b439b9c9244fc8f008a5f64",
      "send_to_address": "0xa4b10c9a78fa97a78b439b9c9244fc8f008a5f64",
      "source_price_usd_mode": "live_public_provider_fetch_required",
      "target_asset": "OBOL",
      "target_asset_denom": "uobol",
      "target_price_usd": "0.10",
      "target_price_status": "hardcoded_opening_price",
      "target_surface": "Bridge route-output staging before receiver-owned admission",
      "route_funding_rule": "Bridge chooses route funding from policy and liquidity. The public user supplies the Bridge receiver only.",
      "output_side": "Bridge OBOL inventory",
      "output_side_rule": "OBOL output is pulled from Bridge-side inventory or issuance policy only after quote, fee, receiver, and admission checks pass.",
      "state_label": "opening pending PAXG pool receiver",
      "relay_required": true,
      "relay_label": "Ethereum mainnet PAXG -> Bridge required",
      "relay_rule": "Ethereum mainnet PAXG receipt/finality relay required before this lane can accept payment or settle a quote.",
      "relay_proof_rule": "Bridge must see Ethereum mainnet PAXG delivery proof, finality, expected sender, Bridge pool receiver, receiver binding, and source-backed receipt checks before OBOL output can be credited.",
      "payment_target": "Send-to address: 0xa4b10c9a78fa97a78b439b9c9244fc8f008a5f64. Use only with a live quote that binds amount, receiver, expiry, finalized source transfer matching, and source-backed receipt checks.",
      "output_rule": "Estimated OBOL uses net source-side USD value after the 10 bps source fee divided by the hardcoded 0.10 USD OBOL opening price. Output-side route fee is zero. This static page does not bind price or delivery.",
      "bridge_route_fee_bps": 10,
      "bridge_route_fee_denom": "upaxg",
      "source_fee_rule": "Bridge route fee is 10 bps charged on incoming/source PAXG actually filled. It is not deducted from OBOL output.",
      "output_route_fee_rule": "Output-side route fee is 0; OBOL output is priced from net source value after the source-side fee.",
      "fee_rule": "Bridge route fee is 10 bps source-side in this draft. Source asset cost, host execution, proof and memory, service margin, and risk buffer stay separated.",
      "memo_required": false,
      "memo_shape": "not_supported_on_ethereum",
      "intake_method_required": "Send PAXG from the quoted Ethereum sending address to the Bridge pool receiver address returned by the quote. Ethereum has no memo; Bridge binds by token, expected sender, pool receiver, amount, quote expiry, and Bridge receiver.",
      "final_credit_rule": "Final output follows received PAXG, live source price, route fees, destination constraints, and receiver admission.",
      "payment_fill_requires": [
        "source_asset",
        "source_token_contract",
        "expected_sender",
        "bridge_pool_receiver",
        "source_amount_base_units",
        "bridge_receiver",
        "quote_id",
        "quote_ref",
        "route_ref",
        "receiver_ref",
        "quote_expiry",
        "finalized_ethereum_transfer"
      ],
      "quote_match_rule": "Match ERC20 Transfer by token, expected sender, Bridge pool receiver, exact amount, quote expiry, route ref, and Bridge receiver ref.",
      "quote_ttl_seconds": 600,
      "finality_requirement": "Ethereum finalized block required before Bridge can credit output.",
      "bridge_pool_address_state": "configured_visible_packet_matching_enabled_after_matcher_install",
      "must_not_infer": [
        "OBOL-only purchase",
        "live public value movement",
        "relay already configured",
        "public receiver already published",
        "destination admission",
        "wrapper mint",
        "redemption",
        "sell desk",
        "private route procedure",
        "user supplied market price",
        "manual price quote",
        "unquoted ERC20 transfer acceptance"
      ],
      "relayer_intake_address": "0xa4b10c9a78fa97a78b439b9c9244fc8f008a5f64",
      "payment_reference_state": "quote_first_pool_receiver_required",
      "payment_lookup_state": "quote_endpoint_persists_quote_id",
      "route_status": "openable_not_payable",
      "next_step": "fetch live PAXG/USD, bind Bridge receiver, show the Bridge pool receiver, and enable finalized transfer matching before accepting payment",
      "keplr_wallet_rule": "Add Bridge to Keplr and use that public Bridge address as the quote receiver. PAXG payment stays host-side until Bridge pool receiver matching is live.",
      "source_price_rule": "PAXG/USD must be fetched from a configured public provider at quote time; user-entered price is not a valid payment quote.",
      "price_provider_required": true
    },
    {
      "route_id": "ethereum-usdc-obol-opening",
      "label": "Ethereum USDC -> OBOL opening lane",
      "quote_model": "two_sided_source_value_to_obol_output/v1",
      "source_family": "ethereum_erc20",
      "source_chain": "Ethereum mainnet",
      "source_host_chain_id": "1",
      "source_asset": "USDC",
      "source_asset_denom": "uusdc",
      "source_token_contract": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
      "source_token_decimals": 6,
      "bridge_pool_address": "0xa4b10c9a78fa97a78b439b9c9244fc8f008a5f64",
      "send_to_address": "0xa4b10c9a78fa97a78b439b9c9244fc8f008a5f64",
      "source_price_usd_mode": "live_public_provider_fetch_required",
      "target_asset": "OBOL",
      "target_asset_denom": "uobol",
      "target_price_usd": "0.10",
      "target_price_status": "hardcoded_opening_price",
      "target_surface": "Bridge route-output staging before receiver-owned admission",
      "route_funding_rule": "Bridge chooses route funding from policy and liquidity. The public user supplies the Bridge receiver only.",
      "output_side": "Bridge OBOL inventory",
      "output_side_rule": "OBOL output is pulled from Bridge-side inventory or issuance policy only after quote, fee, receiver, and admission checks pass.",
      "state_label": "opening pending USDC pool receiver",
      "relay_required": true,
      "relay_label": "Ethereum mainnet USDC -> Bridge required",
      "relay_rule": "Ethereum mainnet USDC receipt/finality relay required before this lane can settle a quote.",
      "relay_proof_rule": "Bridge must see Ethereum mainnet USDC delivery proof, finality, expected sender, Bridge pool receiver, receiver binding, and source-backed receipt checks before OBOL output can be credited.",
      "payment_target": "Send-to address: 0xa4b10c9a78fa97a78b439b9c9244fc8f008a5f64. Use only with a live quote that binds amount, receiver, expiry, finalized source transfer matching, and source-backed receipt checks.",
      "output_rule": "Estimated OBOL uses net source-side USD value after the 10 bps source fee divided by the hardcoded 0.10 USD OBOL opening price. Output-side route fee is zero. This static page does not bind price or delivery.",
      "bridge_route_fee_bps": 10,
      "bridge_route_fee_denom": "uusdc",
      "source_fee_rule": "Bridge route fee is 10 bps charged on incoming/source USDC actually filled. It is not deducted from OBOL output.",
      "output_route_fee_rule": "Output-side route fee is 0; OBOL output is priced from net source value after the source-side fee.",
      "fee_rule": "Bridge route fee is 10 bps source-side in this draft. Source asset cost, host execution, proof and memory, service margin, and risk buffer stay separated.",
      "memo_required": false,
      "memo_shape": "not_supported_on_ethereum",
      "intake_method_required": "Send USDC from the quoted Ethereum sending address to the Bridge pool receiver address returned by the quote. Ethereum has no memo; Bridge binds by token, expected sender, pool receiver, amount, quote expiry, and Bridge receiver.",
      "final_credit_rule": "Final output follows received USDC, live source price, route fees, destination constraints, and receiver admission.",
      "payment_fill_requires": [
        "source_asset",
        "source_token_contract",
        "expected_sender",
        "bridge_pool_receiver",
        "source_amount_base_units",
        "bridge_receiver",
        "quote_id",
        "quote_ref",
        "route_ref",
        "receiver_ref",
        "quote_expiry",
        "finalized_ethereum_transfer"
      ],
      "quote_match_rule": "Match ERC20 Transfer by token, expected sender, Bridge pool receiver, exact amount, quote expiry, route ref, and Bridge receiver ref.",
      "quote_ttl_seconds": 600,
      "finality_requirement": "Ethereum finalized block required before Bridge can credit output.",
      "bridge_pool_address_state": "configured_visible_payment_disabled_until_finalized_matching_enabled",
      "must_not_infer": [
        "OBOL-only purchase",
        "live public value movement",
        "relay already configured",
        "destination admission",
        "wrapper mint",
        "redemption",
        "sell desk",
        "private route procedure",
        "user supplied market price",
        "manual price quote",
        "unquoted ERC20 transfer acceptance"
      ],
      "relayer_intake_address": "0xa4b10c9a78fa97a78b439b9c9244fc8f008a5f64",
      "payment_reference_state": "quote_first_pool_receiver_required",
      "payment_lookup_state": "quote_endpoint_persists_quote_id",
      "route_status": "openable_not_payable",
      "next_step": "fetch live USDC/USD, bind Bridge receiver, show the Bridge pool receiver, and enable finalized transfer matching before accepting payment",
      "keplr_wallet_rule": "Add Bridge to Keplr and use that public Bridge address as the quote receiver. USDC payment stays host-side until Bridge pool receiver matching is live.",
      "source_price_rule": "USDC/USD must be fetched from a configured public provider at quote time; user-entered price is not a valid payment quote.",
      "price_provider_required": true
    },
    {
      "route_id": "cosmoshub-atom-obol-opening",
      "label": "Cosmos Hub ATOM -> OBOL opening lane",
      "quote_model": "two_sided_source_value_to_obol_output/v1",
      "source_family": "cosmos_ibc",
      "source_chain": "Cosmos Hub",
      "source_host_chain_id": "cosmoshub-4",
      "source_asset": "ATOM",
      "source_asset_denom": "uatom",
      "source_token_contract": "",
      "source_token_decimals": 6,
      "bridge_pool_address": "cosmos1ahfuy2gpd9jk9hlrl0v0wlw7gqwc3h58pujjap",
      "send_to_address": "cosmos1ahfuy2gpd9jk9hlrl0v0wlw7gqwc3h58pujjap",
      "source_relay_address": "cosmos1ahfuy2gpd9jk9hlrl0v0wlw7gqwc3h58pujjap",
      "bridge_intake_address": "bridge1zlefkpe3g0vvm9a4h0jf9000lmqutlh9wxn9tj",
      "source_channel": "",
      "bridge_channel": "",
      "relayer_service": "bridge-cosmoshub-relayer.service",
      "source_price_usd_mode": "live_public_provider_fetch_required",
      "target_asset": "OBOL",
      "target_asset_denom": "uobol",
      "target_price_usd": "0.10",
      "target_price_status": "hardcoded_opening_price",
      "target_surface": "Bridge route-output staging before receiver-owned admission",
      "route_funding_rule": "Bridge chooses route funding from policy and liquidity. The public user supplies the Bridge receiver only.",
      "output_side": "Bridge OBOL inventory",
      "output_side_rule": "OBOL output is pulled from Bridge-side inventory or issuance policy only after quote, fee, receiver, and admission checks pass.",
      "state_label": "opening pending ATOM IBC intake receiver",
      "relay_required": true,
      "relay_label": "Cosmos Hub relay -> Bridge IBC required",
      "relay_rule": "The Bridge-owned Cosmos Hub relay source address is generated. A user may only send ATOM after the live quote is deposit-ready, because the source and Bridge channel IDs are still required before the relayer can forward matched payments.",
      "relay_proof_rule": "Bridge must see the forwarded IBC packet from the relay account to the Bridge intake address, source denom, amount, quote memo, Bridge receiver binding, and source-backed receipt checks before OBOL output can be credited.",
      "payment_target": "Source relay address: cosmos1ahfuy2gpd9jk9hlrl0v0wlw7gqwc3h58pujjap. Do not send ATOM while the live quote says deposit_instruction_ready=false. Do not send ATOM directly to a Bridge bech32 address on Cosmos Hub. Include the exact memo returned by the quote service once the route is deposit-ready.",
      "output_rule": "Estimated OBOL uses net source-side USD value after the 10 bps source fee divided by the hardcoded 0.10 USD OBOL opening price. Output-side route fee is zero. This static page does not bind price or delivery.",
      "bridge_route_fee_bps": 10,
      "bridge_route_fee_denom": "uatom",
      "source_fee_rule": "Bridge route fee is 10 bps charged on incoming/source ATOM actually filled. It is not deducted from OBOL output.",
      "output_route_fee_rule": "Output-side route fee is 0; OBOL output is priced from net source value after the source-side fee.",
      "fee_rule": "Bridge route fee is 10 bps source-side in this draft. Source asset cost, host execution, proof and memory, service margin, and risk buffer stay separated.",
      "memo_required": true,
      "memo_shape": "bridge_intake_json_quote_binding",
      "intake_method_required": "Send ATOM on Cosmos Hub to the relay source address returned by the quote and include the exact quote memo. The relay forwards to Bridge; Bridge binds the forwarded packet by relay sender, Bridge intake receiver, denom, amount, memo, quote expiry, and Bridge receiver.",
      "final_credit_rule": "Final output follows received ATOM, live source price, route fees, destination constraints, and receiver admission.",
      "payment_fill_requires": [
        "source_asset",
        "source_denom",
        "source_relay_receiver",
        "bridge_ibc_intake_receiver",
        "source_amount_base_units",
        "bridge_receiver",
        "quote_id",
        "quote_ref",
        "route_ref",
        "receiver_ref",
        "quote_expiry",
        "quote_memo",
        "finalized_ibc_packet"
      ],
      "quote_match_rule": "Match forwarded IBC packet by relay sender, Bridge intake receiver, denom, exact amount, quote memo, quote expiry, route ref, and Bridge receiver ref.",
      "quote_ttl_seconds": 600,
      "finality_requirement": "IBC packet received by Bridge and source-chain finality required before Bridge can credit output.",
  "bridge_pool_address_state": "source_relay_address_configured_gated_until_cosmoshub_bridge_ibc_channel",
      "must_not_infer": [
        "OBOL-only purchase",
        "live public value movement",
    "channel already configured",
        "destination admission",
        "wrapper mint",
        "redemption",
        "sell desk",
        "private route procedure",
        "user supplied market price",
        "manual price quote",
        "unquoted IBC transfer acceptance"
      ],
  "relayer_intake_address": "cosmos1ahfuy2gpd9jk9hlrl0v0wlw7gqwc3h58pujjap",
      "bridge_forward_receiver": "bridge1zlefkpe3g0vvm9a4h0jf9000lmqutlh9wxn9tj",
      "payment_reference_state": "quote_first_ibc_receiver_and_memo_required",
      "payment_lookup_state": "quote_endpoint_persists_quote_id",
  "route_status": "quoteable_gated_until_cosmoshub_bridge_ibc_channel",
  "next_step": "create the Cosmos Hub <-> Bridge channel IDs, keep live ATOM/USD pricing, bind Bridge receiver, then only expose deposit-ready quotes after the relayer can forward matched source payments to Bridge",
      "keplr_wallet_rule": "Add Bridge to Keplr and use that public Bridge address as the quote receiver. ATOM payment uses IBC to Bridge with the quote memo.",
      "source_price_rule": "ATOM/USD must be fetched from a configured public provider at quote time; user-entered price is not a valid payment quote.",
      "price_provider_required": true
    },
    {
      "route_id": "stride-strd-inj-opening",
      "label": "Stride STRD -> INJ opening lane",
      "quote_model": "two_sided_source_value_to_ledger_inventory_output/v1",
      "source_family": "cosmos_ibc",
      "source_chain": "Stride",
      "source_host_chain_id": "stride-1",
      "source_asset": "STRD",
      "source_asset_denom": "ustrd",
      "source_token_contract": "",
      "source_token_decimals": 6,
      "bridge_pool_address": "stride1ey6929smx9xcz5sf039zyduc928xa3qlq99tmz",
      "send_to_address": "stride1ey6929smx9xcz5sf039zyduc928xa3qlq99tmz",
      "source_relay_address": "stride1ey6929smx9xcz5sf039zyduc928xa3qlq99tmz",
      "bridge_intake_address": "bridge1zlefkpe3g0vvm9a4h0jf9000lmqutlh9wxn9tj",
      "source_channel": "channel-598",
      "bridge_channel": "channel-3",
      "source_connection": "connection-182",
      "bridge_connection": "connection-3",
      "relayer_service": "bridge-stride-relayer.service",
      "source_price_usd_mode": "live_public_provider_fetch_required",
      "target_asset": "INJ",
      "target_asset_denom": "uinj",
      "target_token_decimals": 18,
      "target_price_status": "live_public_provider_fetch_required",
      "target_surface": "Bridge INJ ledger inventory output before receiver-owned admission",
      "route_funding_rule": "Bridge chooses route funding from policy and visible INJ inventory. The public user supplies the Bridge receiver only.",
      "output_side": "Bridge INJ inventory",
      "output_side_rule": "INJ output is pulled from Bridge-side ledger inventory only after quote, source-side fee, receiver, route, finality, and admission checks pass.",
      "state_label": "opening pending STRD IBC intake receiver",
      "relay_required": true,
      "relay_label": "Stride relay -> Bridge IBC required",
      "relay_rule": "The Bridge-owned Stride relay source address is generated and the Stride <-> Bridge IBC channel is open. A live quote may publish a deposit-ready instruction only when it binds amount, memo, source relay address, Bridge receiver, expiry, and route checks.",
      "relay_proof_rule": "Bridge must see the forwarded IBC packet from the Stride relay account to the Bridge intake address, source denom, amount, quote memo, Bridge receiver binding, and source-backed receipt checks before INJ output can be credited.",
      "payment_target": "Source relay address: stride1ey6929smx9xcz5sf039zyduc928xa3qlq99tmz. Send STRD only when a live quote returns deposit_instruction_ready=true, and include the exact memo returned by that quote.",
      "output_rule": "Estimated INJ uses net source-side USD value after Bridge's source-side route fee divided by a live INJ/USD price. Output-side route fee is zero. This static page does not bind price or delivery.",
      "bridge_route_fee_bps": 10,
      "bridge_route_fee_denom": "ustrd",
      "source_fee_rule": "Bridge route fee is charged on incoming/source STRD actually filled. It is not deducted from INJ output.",
      "output_route_fee_rule": "Output-side route fee is 0; INJ output is priced from net source value after the source-side fee.",
      "fee_rule": "Bridge route fee is retained source-side. Stride host gas is reconciled from actual source-chain spend instead of precharged as a fixed USD reserve. Source asset cost, host execution, proof and memory, service margin, and risk buffer stay separated.",
      "memo_required": true,
      "memo_shape": "bridge_intake_json_quote_binding",
      "intake_method_required": "Send STRD on Stride to the relay source address returned by the quote and include the exact quote memo. The relay forwards to Bridge; Bridge binds the forwarded packet by relay sender, Bridge intake receiver, denom, amount, memo, quote expiry, and Bridge receiver.",
      "final_credit_rule": "Final output follows received STRD, live STRD/USD and INJ/USD prices, route fees, destination constraints, and receiver admission.",
      "payment_fill_requires": [
        "source_asset",
        "source_denom",
        "source_relay_receiver",
        "bridge_ibc_intake_receiver",
        "source_amount_base_units",
        "bridge_receiver",
        "quote_id",
        "quote_ref",
        "route_ref",
        "receiver_ref",
        "quote_expiry",
        "quote_memo",
        "finalized_ibc_packet"
      ],
      "quote_match_rule": "Match forwarded IBC packet by relay sender, Bridge intake receiver, denom, received amount, quote memo, quote expiry, route ref, and Bridge receiver ref.",
      "quote_ttl_seconds": 600,
      "finality_requirement": "IBC packet received by Bridge and Stride source-chain finality required before Bridge can credit INJ output.",
      "bridge_pool_address_state": "source_relay_address_configured_channel_open_quote_first",
      "must_not_infer": [
        "live public value movement",
        "destination admission",
        "wrapper mint",
        "redemption",
        "sell desk",
        "private route procedure",
        "user supplied market price",
        "manual price quote",
        "unquoted IBC transfer acceptance"
      ],
      "relayer_intake_address": "stride1ey6929smx9xcz5sf039zyduc928xa3qlq99tmz",
      "bridge_forward_receiver": "bridge1zlefkpe3g0vvm9a4h0jf9000lmqutlh9wxn9tj",
      "payment_reference_state": "quote_first_ibc_receiver_and_memo_required",
      "payment_lookup_state": "quote_endpoint_persists_quote_id",
      "route_status": "quoteable_channel_open_quote_first",
      "next_step": "request a live STRD -> INJ quote, send only the quoted amount with the exact memo, observe the source payment, forward over Stride channel-598 / Bridge channel-3, then settle INJ output from Bridge inventory",
      "keplr_wallet_rule": "Add Bridge to Keplr and use that public Bridge address as the quote receiver. STRD payment uses IBC to Bridge with the quote memo.",
      "source_price_rule": "STRD/USD must be fetched from configured public providers at quote time; user-entered price is not a valid payment quote.",
      "price_provider_required": true
    },
    {
      "route_id": "stride-strd-atom-opening",
      "label": "Stride STRD -> ATOM opening lane",
      "quote_model": "two_sided_source_value_to_ledger_inventory_output/v1",
      "source_family": "cosmos_ibc",
      "source_chain": "Stride",
      "source_host_chain_id": "stride-1",
      "source_asset": "STRD",
      "source_asset_denom": "ustrd",
      "source_token_contract": "",
      "source_token_decimals": 6,
      "bridge_pool_address": "stride1ey6929smx9xcz5sf039zyduc928xa3qlq99tmz",
      "send_to_address": "stride1ey6929smx9xcz5sf039zyduc928xa3qlq99tmz",
      "source_relay_address": "stride1ey6929smx9xcz5sf039zyduc928xa3qlq99tmz",
      "bridge_intake_address": "bridge1zlefkpe3g0vvm9a4h0jf9000lmqutlh9wxn9tj",
      "source_channel": "channel-598",
      "bridge_channel": "channel-3",
      "source_connection": "connection-182",
      "bridge_connection": "connection-3",
      "relayer_service": "bridge-stride-relayer.service",
      "source_price_usd_mode": "live_public_provider_fetch_required",
      "target_asset": "ATOM",
      "target_asset_denom": "uatom",
      "target_token_decimals": 6,
      "target_price_status": "live_public_provider_fetch_required",
      "target_surface": "Bridge ATOM ledger inventory output before receiver-owned admission",
      "route_funding_rule": "Bridge chooses route funding from policy and visible ATOM inventory. The public user supplies the Bridge receiver only.",
      "output_side": "Bridge ATOM inventory",
      "output_side_rule": "ATOM output is pulled from Bridge-side ledger inventory only after quote, source-side fee, receiver, route, finality, and admission checks pass.",
      "state_label": "opening pending STRD IBC intake receiver",
      "relay_required": true,
      "relay_label": "Stride relay -> Bridge IBC required",
      "relay_rule": "The Bridge-owned Stride relay source address is generated and the Stride <-> Bridge IBC channel is open. A live quote may publish a deposit-ready instruction only when it binds amount, memo, source relay address, Bridge receiver, expiry, and route checks.",
      "relay_proof_rule": "Bridge must see the forwarded IBC packet from the Stride relay account to the Bridge intake address, source denom, amount, quote memo, Bridge receiver binding, and source-backed receipt checks before ATOM output can be credited.",
      "payment_target": "Source relay address: stride1ey6929smx9xcz5sf039zyduc928xa3qlq99tmz. Send STRD only when a live quote returns deposit_instruction_ready=true, and include the exact memo returned by that quote.",
      "output_rule": "Estimated ATOM uses net source-side USD value after Bridge's source-side route fee divided by a live ATOM/USD price. Output-side route fee is zero. This static page does not bind price or delivery.",
      "bridge_route_fee_bps": 10,
      "bridge_route_fee_denom": "ustrd",
      "source_fee_rule": "Bridge route fee is charged on incoming/source STRD actually filled. It is not deducted from ATOM output.",
      "output_route_fee_rule": "Output-side route fee is 0; ATOM output is priced from net source value after the source-side fee.",
      "fee_rule": "Bridge route fee is retained source-side. Stride host gas is reconciled from actual source-chain spend instead of precharged as a fixed USD reserve. Source asset cost, host execution, proof and memory, service margin, and risk buffer stay separated.",
      "memo_required": true,
      "memo_shape": "bridge_intake_json_quote_binding",
      "intake_method_required": "Send STRD on Stride to the relay source address returned by the quote and include the exact quote memo. The relay forwards to Bridge; Bridge binds the forwarded packet by relay sender, Bridge intake receiver, denom, amount, memo, quote expiry, and Bridge receiver.",
      "final_credit_rule": "Final output follows received STRD, live STRD/USD and ATOM/USD prices, route fees, destination constraints, and receiver admission.",
      "payment_fill_requires": [
        "source_asset",
        "source_denom",
        "source_relay_receiver",
        "bridge_ibc_intake_receiver",
        "source_amount_base_units",
        "bridge_receiver",
        "quote_id",
        "quote_ref",
        "route_ref",
        "receiver_ref",
        "quote_expiry",
        "quote_memo",
        "finalized_ibc_packet"
      ],
      "quote_match_rule": "Match forwarded IBC packet by relay sender, Bridge intake receiver, denom, received amount, quote memo, quote expiry, route ref, and Bridge receiver ref.",
      "quote_ttl_seconds": 600,
      "finality_requirement": "IBC packet received by Bridge and Stride source-chain finality required before Bridge can credit ATOM output.",
      "bridge_pool_address_state": "source_relay_address_configured_channel_open_quote_first",
      "must_not_infer": [
        "live public value movement",
        "destination admission",
        "wrapper mint",
        "redemption",
        "sell desk",
        "private route procedure",
        "user supplied market price",
        "manual price quote",
        "unquoted IBC transfer acceptance"
      ],
      "relayer_intake_address": "stride1ey6929smx9xcz5sf039zyduc928xa3qlq99tmz",
      "bridge_forward_receiver": "bridge1zlefkpe3g0vvm9a4h0jf9000lmqutlh9wxn9tj",
      "payment_reference_state": "quote_first_ibc_receiver_and_memo_required",
      "payment_lookup_state": "quote_endpoint_persists_quote_id",
      "route_status": "quoteable_channel_open_quote_first",
      "next_step": "request a live STRD -> ATOM quote, send only the quoted amount with the exact memo, observe the source payment, forward over Stride channel-598 / Bridge channel-3, then settle ATOM output from Bridge inventory",
      "keplr_wallet_rule": "Add Bridge to Keplr and use that public Bridge address as the quote receiver. STRD payment uses IBC to Bridge with the quote memo.",
      "source_price_rule": "STRD/USD must be fetched from configured public providers at quote time; user-entered price is not a valid payment quote.",
      "price_provider_required": true
    },
    {
      "route_id": "neutron-ntrn-atom-opening",
      "label": "Neutron NTRN -> ATOM opening lane",
      "quote_model": "two_sided_source_value_to_ledger_inventory_output/v1",
      "source_family": "cosmos_ibc",
      "source_chain": "Neutron",
      "source_host_chain_id": "neutron-1",
      "source_asset": "NTRN",
      "source_asset_denom": "untrn",
      "source_token_contract": "",
      "source_token_decimals": 6,
      "bridge_pool_address": "neutron1sx8syx35ft7l8drjkk4v55ymr43mrtk4eezyy3",
      "send_to_address": "neutron1sx8syx35ft7l8drjkk4v55ymr43mrtk4eezyy3",
      "source_relay_address": "neutron1sx8syx35ft7l8drjkk4v55ymr43mrtk4eezyy3",
      "bridge_intake_address": "bridge1zlefkpe3g0vvm9a4h0jf9000lmqutlh9wxn9tj",
      "source_channel": "channel-7523",
      "bridge_channel": "channel-4",
      "source_connection": "connection-155",
      "bridge_connection": "connection-5",
      "relayer_service": "bridge-neutron-relayer.service",
      "source_price_usd_mode": "live_public_provider_fetch_required",
      "target_asset": "ATOM",
      "target_asset_denom": "uatom",
      "target_token_decimals": 6,
      "target_price_status": "live_public_provider_fetch_required",
      "target_surface": "Bridge ATOM ledger inventory output before receiver-owned admission",
      "route_funding_rule": "Bridge chooses route funding from policy and visible ATOM inventory. The public user supplies the Bridge receiver only.",
      "output_side": "Bridge ATOM inventory",
      "output_side_rule": "ATOM output is pulled from Bridge-side ledger inventory only after quote, source-side fee, receiver, route, finality, and admission checks pass.",
      "state_label": "opening pending NTRN IBC intake receiver",
      "relay_required": true,
      "relay_label": "Neutron relay -> Bridge IBC required",
      "relay_rule": "The Bridge-owned Neutron relay source address is generated and the Neutron <-> Bridge IBC channel is open. A live quote may publish a deposit-ready instruction only when it binds amount, memo, source relay address, Bridge receiver, expiry, and route checks.",
      "relay_proof_rule": "Bridge must see the forwarded IBC packet from the Neutron relay account to the Bridge intake address, source denom, amount, quote memo, Bridge receiver binding, and source-backed receipt checks before ATOM output can be credited.",
      "payment_target": "Source relay address: neutron1sx8syx35ft7l8drjkk4v55ymr43mrtk4eezyy3. Send NTRN only when a live quote returns deposit_instruction_ready=true, and include the exact memo returned by that quote.",
      "output_rule": "Estimated ATOM uses net source-side USD value after Bridge's source-side route fee divided by a live ATOM/USD price. Output-side route fee is zero. This static page does not bind price or delivery.",
      "bridge_route_fee_bps": 10,
      "bridge_route_fee_denom": "untrn",
      "source_fee_rule": "Bridge route fee is charged on incoming/source NTRN actually filled. It is not deducted from ATOM output.",
      "output_route_fee_rule": "Output-side route fee is 0; ATOM output is priced from net source value after the source-side fee.",
      "fee_rule": "Bridge route fee is retained source-side. Neutron host gas is reconciled from actual source-chain spend instead of precharged as a fixed USD reserve. Source asset cost, host execution, proof and memory, service margin, and risk buffer stay separated.",
      "memo_required": true,
      "memo_shape": "bridge_intake_json_quote_binding",
      "intake_method_required": "Send NTRN on Neutron to the relay source address returned by the quote and include the exact quote memo. The relay forwards to Bridge; Bridge binds the forwarded packet by relay sender, Bridge intake receiver, denom, amount, memo, quote expiry, and Bridge receiver.",
      "final_credit_rule": "Final output follows received NTRN, live NTRN/USD and ATOM/USD prices, route fees, destination constraints, and receiver admission.",
      "payment_fill_requires": [
        "source_asset",
        "source_denom",
        "source_relay_receiver",
        "bridge_ibc_intake_receiver",
        "source_amount_base_units",
        "bridge_receiver",
        "quote_id",
        "quote_ref",
        "route_ref",
        "receiver_ref",
        "quote_expiry",
        "quote_memo",
        "finalized_ibc_packet"
      ],
      "quote_match_rule": "Match forwarded IBC packet by relay sender, Bridge intake receiver, denom, received amount, quote memo, quote expiry, route ref, and Bridge receiver ref.",
      "quote_ttl_seconds": 600,
      "finality_requirement": "IBC packet received by Bridge and Neutron source-chain finality required before Bridge can credit ATOM output.",
      "bridge_pool_address_state": "source_relay_address_configured_channel_open_quote_first",
      "must_not_infer": [
        "live public value movement",
        "destination admission",
        "wrapper mint",
        "redemption",
        "sell desk",
        "private route procedure",
        "user supplied market price",
        "manual price quote",
        "unquoted IBC transfer acceptance"
      ],
      "relayer_intake_address": "neutron1sx8syx35ft7l8drjkk4v55ymr43mrtk4eezyy3",
      "bridge_forward_receiver": "bridge1zlefkpe3g0vvm9a4h0jf9000lmqutlh9wxn9tj",
      "payment_reference_state": "quote_first_ibc_receiver_and_memo_required",
      "payment_lookup_state": "quote_endpoint_persists_quote_id",
      "route_status": "quoteable_channel_open_quote_first",
      "next_step": "request a live NTRN -> ATOM quote, send only the quoted amount with the exact memo, observe the source payment, forward over Neutron channel-7523 / Bridge channel-4, then settle ATOM output from Bridge inventory",
      "keplr_wallet_rule": "Add Bridge to Keplr and use that public Bridge address as the quote receiver. NTRN payment uses IBC to Bridge with the quote memo after the Neutron route is open.",
      "source_price_rule": "NTRN/USD must be fetched from configured public providers at quote time; user-entered price is not a valid payment quote.",
      "price_provider_required": true
    }
  ],
  "planned_shape": [
    {
      "route_id": "eth-any-accepted-output",
      "source_asset": "ETH",
      "target_rule": "Accepted target asset selected per open lane",
      "state_label": "planned same-shape host lane",
      "note": "The ETH path should use the same quote and receipt shape after native ETH transfer matching, host verification, signer, finality, fee, DA, quarantine, and authority gates are satisfied."
    }
  ],
  "public_status": "openable_not_payable",
  "product": "bridge_asset_passage",
  "policy": "quote_first_receipt_required",
  "quote_endpoint_state": "live_price_quote_persisted_until_receiver_method",
  "payment_lookup_state": "quote_endpoint_persists_quote_id",
  "price_source_rule": "Bridge quotes source value from live public provider fetches; the visitor does not supply source price.",
  "source_fee_rule": "Bridge route fee is retained from incoming source consideration. Output-side route fee is zero.",
  "price_stale_rule": "If no configured provider returns a positive source/USD price, the page must refuse to estimate output and must not publish a payment instruction.",
  "price_providers": [
    {
      "id": "coingecko",
      "label": "CoinGecko PAXG/USD",
      "url": "https://api.coingecko.com/api/v3/simple/price?ids=pax-gold&vs_currencies=usd&include_last_updated_at=true"
    },
    {
      "id": "coinbase",
      "label": "Coinbase PAXG/USD spot",
      "url": "https://api.coinbase.com/v2/prices/PAXG-USD/spot"
    },
    {
      "id": "kraken",
      "label": "Kraken PAXG/USD ticker",
      "url": "https://api.kraken.com/0/public/Ticker?pair=PAXGUSD"
    },
    {
      "id": "binance",
      "label": "Binance PAXG/USDT ticker",
      "url": "https://api.binance.com/api/v3/ticker/price?symbol=PAXGUSDT"
    },
    {
      "id": "coingecko-usdc",
      "label": "CoinGecko USDC/USD",
      "url": "https://api.coingecko.com/api/v3/simple/price?ids=usd-coin&vs_currencies=usd&include_last_updated_at=true"
    },
    {
      "id": "coinbase-usdc",
      "label": "Coinbase USDC/USD spot",
      "url": "https://api.coinbase.com/v2/prices/USDC-USD/spot"
    },
    {
      "id": "kraken-usdc",
      "label": "Kraken USDC/USD ticker",
      "url": "https://api.kraken.com/0/public/Ticker?pair=USDCUSD"
    },
    {
      "id": "binance-usdc",
      "label": "Binance USDC/USDT ticker",
      "url": "https://api.binance.com/api/v3/ticker/price?symbol=USDCUSDT"
    },
    {
      "id": "coingecko-atom",
      "label": "CoinGecko ATOM/USD",
      "url": "https://api.coingecko.com/api/v3/simple/price?ids=cosmos&vs_currencies=usd&include_last_updated_at=true"
    },
    {
      "id": "coinbase-atom",
      "label": "Coinbase ATOM/USD spot",
      "url": "https://api.coinbase.com/v2/prices/ATOM-USD/spot"
    },
    {
      "id": "kraken-atom",
      "label": "Kraken ATOM/USD ticker",
      "url": "https://api.kraken.com/0/public/Ticker?pair=ATOMUSD"
    },
    {
      "id": "binance-atom",
      "label": "Binance ATOM/USDT ticker",
      "url": "https://api.binance.com/api/v3/ticker/price?symbol=ATOMUSDT"
    },
    {
      "id": "coingecko-strd",
      "label": "CoinGecko STRD/USD",
      "url": "https://api.coingecko.com/api/v3/simple/price?ids=stride&vs_currencies=usd&include_last_updated_at=true"
    },
    {
      "id": "coinpaprika-strd",
      "label": "CoinPaprika STRD/USD",
      "url": "https://api.coinpaprika.com/v1/tickers/strd-stride"
    },
    {
      "id": "coingecko-ntrn",
      "label": "CoinGecko NTRN/USD",
      "url": "https://api.coingecko.com/api/v3/simple/price?ids=neutron-3&vs_currencies=usd&include_last_updated_at=true"
    },
    {
      "id": "kraken-ntrn",
      "label": "Kraken NTRN/USD ticker",
      "url": "https://api.kraken.com/0/public/Ticker?pair=NTRNUSD"
    },
    {
      "id": "binance-ntrn",
      "label": "Binance NTRN/USDT ticker",
      "url": "https://api.binance.com/api/v3/ticker/price?symbol=NTRNUSDT"
    }
  ]
}
