contracts/— wBLOZ, BlozBridge, BlozWrapClaim on BSCrelayer/— deposit watcher, claim signer, unwrap payouts, auto-refundsweb/— bridge.bloz.org UI
Users trust the bridge operator to:
- Hold enough native BLOZ to back all wBLOZ (
reserve ≥ totalSupply) - Sign valid wrap claims only after confirmed deposits
- Pay unwrap and refund payouts promptly
- Not abuse admin
pause()without cause
Users do not need to trust the operator for manual wBLOZ minting — minting goes through BlozWrapClaim on-chain.
- Custodial — not a trustless light-client bridge
- No audit — review source and verified contracts yourself
- Single admin — deployer can pause contracts; no multisig/timelock yet
- Sender resolution — auto-refunds walk the first input of the deposit tx; coinjoin / multi-input sends may resolve wrong (optional
returnBz1on wrap creation is safer) - Solvency — operator must keep
bridge BLOZ ≥ wBLOZ supply; there is no on-chain enforcement
| Risk | Mitigation |
|---|---|
| Claim signature valid after claim window → mint + refund | Signature deadline capped at claim_expires_at; refunds delayed CLAIM_SIG_TTL_SEC after expiry; on-chain claimed() checked before refund |
| Double mint same wrap | claimed mapping on BlozWrapClaim |
| Wrong EVM claims wrap | API checks evm_address matches wrap row |
| Duplicate deposit | Second tx queued as orphan refund |
| Refund while claim pending on-chain | isWrapClaimedOnChain() before refund; DB synced to minted |
| Bridge node can't resolve sender | Bridge bitcoind uses txindex=1 (no prune); sender stored at deposit time; optional returnBz1 |
- Admin key compromise — attacker can
pause(), grantMINTER_ROLE, or stop payouts - Relayer downtime — unwrap/refund delays; funds remain in bridge wallet
- Fake wBLOZ token on BSC — users must use official contract from
bridge.bloz.org - No rate limits on wrap API — griefing via many deposit addresses (low impact)
Open a GitHub security advisory or contact the Block Zero maintainers via the project Discord / GitHub org.
Do not post exploit details publicly before a fix is available.
- Keep bridge wallet BLOZ reserve ≥ wBLOZ supply
- Verify contracts on BscScan after each deploy (
npm run verify:bsc) - Monitor
/api/status—backedmust staytrue - Fund operator wallet with BNB for claim signatures (off-chain only)
- Rotate keys if relayer host is compromised; pause contracts if needed
pause()on wBLOZ and BlozBridge via admin key- Stop relayer service
- Post status in community channels
- Investigate DB + wallet txs; resume only when reserves and logic are confirmed