How the Bridge Works
Architecture, trust model, security properties, and the roadmap from trusted to trustless.
What is wJKC?
Wrapped Junkcoin (wJKC) is a 1:1 backed ERC-20 token on supported EVM chains. It lets Junkcoin (JKC) participate in EVM DeFi, DEXs, and wallets without changing the native Junkcoin chain.
π‘ Mint / Burn Model
wJKC is minted on-demand when JKC is deposited, and burned when wJKC is withdrawn back to JKC. The bridge contract is the sole minter. Supply is elastic: totalSupply() equals the amount of JKC currently held in the bridge custody wallet. A hard cap of 54,000,000 wJKCprevents minting beyond the native chain's capacity.
Max Supply Cap
54,000,000
wJKC β hard cap, elastic supply
Bridge Fee
0.50%
Max 1%, set by owner
Minimum
2 JKC
Per deposit or withdrawal
Committee
2-of-3
FROST threshold Schnorr
Deployed contract
Live values are read from the event indexer, not from the RPC β only deployment metadata and the contract's immutable constants come from configuration.
Addresses
Deployerβ
Ownerβ
Deploy block511734880
Deployedβ
Network
EVM chainArbitrum One (42161)
UTXO chainJunkcoin β JKC
Confirmations70 JKC
Indexerloadingβ¦
Statusβ
Parameters
Bridge feeβ (max 1%)
Max supply54,000,000 wJKC
Daily mint capβ wJKC
Circulatingβ wJKC
FROST custody
Custody addressβ
Group key (x-only)β
Custody typeP2TR (Taproot, key-path spend)
Signature schemeBIP-340 Schnorr (FROST)
Current Trust Model
β οΈ Trusted Setup β Read This First
The wJKC Bridge is currently operated by a single 2-of-3 committee run by theJunkcoin development team. The committee holds shares of one FROST threshold key; no member ever holds the full key. This is a deliberate choice for the initial launch to enable fast iteration and incident response.
What this means for you: You are trusting the committee operators not to collude and steal funds. The contract verifies a single threshold signature against the group key, so a compromised member cannot act alone β but all three members are currently controlled by the same organisation.
Three validator nodes each hold a share of one FROST threshold key. The same group key secures the Junkcoin Taproot custody and signs every EVM attestation as a BIP-340 Schnorr signature β there is no separate EVM key. A threshold of shares is required to mint wJKCor release JKC. On-chain safeguards (rate limits, daily mint cap, pause) are active. Users trust the team's operational security.
- Daily wJKC mint is capped β limits the blast radius of a breach
- Pause mechanism β team can halt the bridge instantly
- 7-day withdrawal cancellation window for user protection
- Each attestation is an EIP-712 typed digest (chain + contract + data specific), signed with the committee's BIP-340 Schnorr key
- Validators run independently with no shared database β each node verifies every claim against on-chain data (both the EVM contract and the Junkcoin chain) before signing. On-chain data is the source of truth; peer messages are never trusted unverified.
- The payout leader commits to the exact transaction fingerprint inside the signing session, and every co-signer rebuilds it deterministically and refuses to sign unless it matches. Two committees can therefore never sign two different payouts of the same withdrawal.
Add independent operators to the committee without changing the custody key or address. FROST proactive refresh and committee expansion are already implemented and preserve the group key, so membership can grow (and a lost node can be repaired) without moving funds.
Replace validator attestations with a cryptographic proof of the JKC chain state β either a Junkcoin SPV light client or a ZK proof of UTXO inclusion. No validator trust required; the contract verifies the JKC transaction itself.
JKC β wJKC (Deposit)
Deposit JKC on the Junkcoin network and receive wJKC on the EVM chain. After 70 JKC confirmations, the committee verifies and mints wJKC to your wallet.
- 1
Create a deposit intent.Connect your EVM wallet and enter the amount. The frontend generates OP_RETURN metadata containing your EVM address β this routes wJKC to your wallet automatically.
- 2
Send JKC to the custody address.Transfer native JKC to the bridge custody address shown in the UI, and attach the OP_RETURN metadata. You can send from any self-custody wallet.
- 3
Auto-detect on-chain.After sending, click "I've Sent" in the bridge UI. The frontend scans the Junkcoin chain directly for your transaction by matching the OP_RETURN metadata to your EVM address β no manual TXID entry needed.
- 4
Wait for 70 JKC confirmations.The node waits for 70 block confirmations to prevent double-spend and reorg attacks.
- 5
Validators verify and sign.Each validator watches the custody address on the Junkcoin chain directly β detection does not depend on this frontend. Each independently checks: OP_RETURN contains a valid EVM address, amount β₯ 2 JKC, TXID not previously processed on the bridge contract. They each sign the EIP-712 deposit digest (chainId + bridge address + recipient + amount + TXID) with their FROST shares, producing one threshold signature.
- 6
wJKC minted on EVM.Once the MPC validator committee reaches threshold consensus, a validator calls registerDepositClaim()with the committee's joint MPC signature to register the deposit on-chain. You then call claimDeposit() to mintwJKC to your wallet minus the fee (user pays EVM gas). The daily mint limit is checked at registration time.
wJKC β JKC (Withdrawal)
Burn your wJKC on the EVM chain and receive native JKC to your Junkcoin wallet. An elected leader builds the JKC UTXO transaction and commits to its exact fingerprint; the other validators rebuild it deterministically, verify it, and only then co-sign.
- 1
Approve and initiate.Approve the bridge contract to spend your wJKC, then call initiateWithdrawal(amount, jkcAddress, maxFeeBps). The maxFeeBps parameter is a slippage guard β the call reverts if the current fee is higher than your specified maximum. Your wJKC is burned (net amount) and the fee is retained by the bridge.
- 2
On-chain event emitted.The contract emits WithdrawalInitiated with your JKC destination address and net amount after fee. The fee is fixed at the moment of initiation β it cannot change later even if the owner updates feeBps.
- 3
A leader validator is deterministically elected.One validator is deterministically elected leader for your withdrawal (rotating every timeout, anchored to the EVM block timestamp so all validators agree on the schedule). The leader builds the deterministic JKC payout transaction from the custody UTXO set, and records its fingerprint in a persistent sign-once registry to prevent double-signing.
- 4
Validators verify and threshold-sign via FROST MPC.Each validator in the round's committee re-verifies the proposal against on-chain data: the WithdrawalInitiated event (destination + amounts), every input UTXO (owned by custody and still unspent), and every output (your address, exact net amount, change back to custody). Once verified and sign-once is asserted, the committee participates in the off-chain FROST MPC signing round.
- 5
JKC arrives in your wallet.Once FROST MPC threshold signing completes, the transaction is broadcast to the Junkcoinnetwork. You receive native JKC minus a small JKCnetwork fee. The payout embeds your withdrawal's EVM transaction hash as an OP_RETURN output β a public, verifiable link between the burn on the EVM chain and the payout on the Junkcoin chain.
- 6
The withdrawal is closed on-chain.The committee signs the EIP-712 WithdrawalConfirmed digest carrying the JKCtransaction ID and submits confirmWithdrawal(). The contract marks your withdrawal completed and permanently records the JKC TXID β the same TXID can never close two withdrawals.
π‘οΈ Double-Payout Protection
Three independent layers prevent a withdrawal from ever being paid twice: the on-chain fingerprint gate serializes which single transaction may be signed; every validator keeps a durable sign-once record and scans the Junkcoin chain and mempool for an existing payout (via the OP_RETURN link) before signing or broadcasting; and deterministic coin selection means two conflicting attempts would spend the same UTXOs β the Junkcoin chain itself rejects the second. A reconciliation watchdog additionally checks that custody funds always cover the outstanding wJKC supply.
π Withdrawal Cancellation
If a validator has not processed your withdrawal after 7 days, you can cancel it yourself on-chain. Your wJKC (including the fee) will be returned to your wallet. Use the Activity tab to find the cancellation option.
Smart Contract Safeguards
The following protections are enforced by the smart contract β they cannot be overridden by the validators or the owner.
- Replay protection.
processedTxids permanently records every completed JKC deposit, and processedJkcTxids records every JKC payout TXID β the same transaction can never mint twice or close two withdrawals. Resubmitting reverts with AlreadyProcessed. - Payout fingerprint gate. Before any signature exists, the leader commits to the exact JKC transaction fingerprint and every co-signer rebuilds it deterministically from on-chain state. A co-signer refuses to sign anything that does not match β a node that lost all local state still cannot be tricked into signing a competing payout. The gate holds no funds and reads its committee from the bridge, so rotating validators on the bridge applies everywhere at once.
- EIP-712 structured signatures. Each validator signature commits to the exact chain ID, bridge address, recipient, amount, and JKC TXID using typed data signing. A signature from one chain or contract is useless on another.
- Duplicate signer prevention. A single validator cannot submit two copies of their own signature to meet the threshold β the contract checks for duplicate signers in each call.
- Daily mint rate limit. A configurable
maxDailyMint cap (5M wJKC/day by default) limits how much can be minted per 24-hour window. Even if all 3 validator keys were compromised, an attacker could only mint up to this limit per day, giving the team time to pause the bridge and respond. - Reentrancy guard.
registerDepositClaim(), claimDeposit(), and refundFailedWithdrawal() use ReentrancyGuard. State is always updated before external token transfers (CEI pattern). - Pause / emergency stop. The owner can pause all deposits and withdrawals instantly. If paused for more than 7 days with no owner action, anyone can trigger an emergency unpause to prevent the contract being frozen forever.
- Fee cap. The bridge fee cannot exceed 1% (100 bps) β hardcoded in the contract. The owner cannot change this cap.
- Minimum deposit. Transactions below 2 JKC / 2 wJKC are rejected to prevent dust spam.
- Ownership protection. Ownership transfer requires two steps (propose + accept).
renounceOwnership() is permanently disabled β the contract cannot be made ownerless accidentally. - Fee stored at initiation. The withdrawal fee is set at the moment you call
initiateWithdrawal(). A later fee change by the owner does not affect pending withdrawals.
Risks & Honest Limitations
- Validator collusion (Phase 1 risk). All 3 validator nodes are controlled by the same team. If the team colluded or was coerced, 2 of the 3 keys could mint wJKCbeyond users' deposits. The daily rate limit reduces this to a maximum of
maxDailyMint wJKC per day. This risk is addressed in Phase 2 with independent validator operators. - JKC custody key compromise. The Junkcoin UTXO custody address is a Taproot P2TR address protected by FROST threshold MPC. Multiple independent key shares are required to produce any valid signature. Mitigation: key shares are encrypted at rest with Argon2id + AES-256-GCM and stored on isolated validator hosts.
- Validator liveness. If all 3 nodes go offline, new deposits and withdrawals stall. Your funds are never at risk β wJKC in the contract is safe, and you can cancel a pending withdrawal after 7 days. Service resumes when nodes come back online.
- Junkcoin reorg. The 70-confirmation requirement makes a successful reorg attack on a processed deposit extremely unlikely (~70Γ harder than a 1-confirmation attack).
- Frontend trust. The frontend is a convenience layer, not a security layer. A compromised or replaced frontend could show a wrong custody address. Always verify the custody address against the official source before sending large amounts.
- Wrong JKC address. Junkcoin UTXO transactions are irreversible. If you enter an incorrect destination address during withdrawal, the funds cannot be recovered. Triple-check before confirming.
- Supply cap. The bridge cannot mint more than 54,000,000 wJKC total. Daily mint rate limits provide additional protection. Withdrawals (wJKC β JKC) burn tokens, reducing circulating supply.
Fees
A 0.50% bridge fee is charged on both deposits and withdrawals. The fee is deducted from the transferred amount β you always receive slightly less than you send. Fees accumulate as wJKC inside the bridge contract and are periodically withdrawn by the owner to fund operations.
The fee is capped at 1% maximum by the contract β the owner cannot set it higher. The current fee is always visible in the bridge UI before you confirm a transaction.
Minimum transaction size: 2 JKC / wJKC. Amounts below this threshold are rejected to prevent spam.
Gas Costs (EVM)
Validators call registerDepositClaim() to register deposits on-chain (they pay a small amount of EVM gas). Users then call claimDeposit() to mint theirwJKC to their own wallet β users pay their own EVM gas for claiming. A registered claim must be claimed within 30 days, after which it can be re-registered. The 0.50% bridge fee funds bridge operations; no separate gas tank is used.
β οΈ User Security Checklist
- Deposit: Include the OP_RETURN metadata in your JKC transaction. This routes wJKC to your connected EVM wallet automatically.
- Withdrawal: Triple-check your JKC destination address before confirming.Junkcoin transactions are irreversible.
- Custody address: Verify the JKC custody address against the officialJunkcoin Bridge announcement before sending. A fake frontend cannot be ruled out.
- No exchanges: Do not send JKC from or to exchange addresses. Use a self-custodied wallet only.
- Time: A deposit needs 70 JKC confirmations plus one attestation transaction. A withdrawal needs the committee signing round plus the JKC payout.
- Cancellation: If your withdrawal is not processed within 7 days, you can cancel it on-chain and recover your wJKC.