FreezeWire
Prove the event. Enforce the outcome.
FreezeWire is a cross-chain compliance and credit enforcement system that turns verifiable Ethereum compliance events into enforceable credit restrictions on Creditcoin.
The core principle is simple:
Don't trust a service to tell Creditcoin what happened on Ethereum. Prove what happened, validate its meaning, and enforce the result on-chain.
The Problem
Blockchain-based credit systems can enforce rules on-chain, but they cannot natively read and trust application-level events that occur on another blockchain.
Consider a simple example: an address becomes blacklisted by Circle's USDC contract on Ethereum.
A Creditcoin-based lending system may need to prevent that counterparty from drawing additional credit. A traditional approach would use a centralized backend or oracle that tells the credit contract that the address is restricted.
That creates a new trust assumption.
The system is no longer enforcing a proven Ethereum fact. It is enforcing whatever the oracle reports.
FreezeWire was designed to remove that assumption.
The Idea
FreezeWire uses Attestcoin to prove an Ethereum transaction on Creditcoin and then performs its own application-level validation before changing the on-chain eligibility state.
The complete flow is:
Ethereum compliance event → Attestcoin proof → FreezeWire verification → EligibilityLedger → Credit restriction
The backend and frontend are only transport layers. They cannot directly decide that an address is restricted.
How It Works
1. An external compliance event occurs
FreezeWire uses a real Circle USDC Blacklisted event on Ethereum as its external compliance fact.
The demonstrated transaction is:
0xc9edfdbb67b48f26822d8769f63cb890599d98dec539f7f76b92edcc8a2ff787
It occurred at Ethereum block 25,705,174 with transaction index 18.
The affected address is:
0xe05F529f5284D75624eBa386CB716928c3b54A2A
The canonical Circle USDC contract is:
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
2. Attestcoin proves the Ethereum transaction
Creditcoin cannot natively read Ethereum transaction logs.
Attestcoin provides the cryptographic bridge that allows FreezeWire to verify Ethereum transaction history from within the Creditcoin environment.
On Creditcoin CC3, FreezeWire verifies the proof through the Attestcoin BlockProver precompile at:
0x0FD2
The demonstrated proof uses Attestcoin chainKey = 3.
3. FreezeWire validates the application-level event
A proof of inclusion is not automatically proof of meaning.
A transaction can be proven to exist in Ethereum history without proving that it represents the specific compliance fact the application cares about.
FreezeWire therefore validates:
- Ethereum receipt status
- Canonical Circle USDC contract address
- Expected
BlacklistedorUnBlacklistedevent selector - Affected address from the event topics
- Original transaction and event ordering
- Recovered transaction index
- Replay protection
- Configured proof window
Only after these checks pass can the eligibility state change.
4. The eligibility state changes on-chain
The validated result is recorded in the EligibilityLedger.
The relevant state transition is:
ELIGIBLE → RESTRICTED
For a valid UnBlacklisted event, the state can transition back:
RESTRICTED → ELIGIBLE
The backend does not have a privileged setStatus operation that can arbitrarily change the state.
5. Creditcoin enforces the restriction
The GatedCreditLine reads the eligibility state and enforces the consequence.
When a restricted address attempts a protected credit operation, the contract reverts with:
Restricted()
This means the compliance result is not merely displayed in the frontend. It becomes an actual on-chain enforcement rule.
Architecture
FreezeWire separates verification, state, and enforcement into three contracts.
BlacklistVerifier
Responsible for:
- Attestcoin proof verification
- Ethereum transaction validation
- Receipt status validation
- Canonical USDC emitter validation
- Event decoding
- Event ordering
- Replay protection
It does not own eligibility state.
EligibilityLedger
The on-chain source of truth for counterparty eligibility.
It owns the eligibility state and records the result of a successfully validated compliance event.
GatedCreditLine
Responsible for enforcement.
It does not verify Ethereum proofs. It reads the eligibility state and blocks protected credit operations when the counterparty is restricted.
This separation keeps verification, state, and enforcement independent.
Trust Model
FreezeWire deliberately treats the frontend and backend as untrusted.
The trust flow is:
Ethereum fact → Attestcoin proof → FreezeWire validation → On-chain state → Credit enforcement
The frontend can display information.
The backend can retrieve evidence and prepare transactions.
Neither is the source of truth for eligibility.
The on-chain verification and ledger state are what determine whether a counterparty is restricted.
Why Attestcoin Matters
Attestcoin is the critical bridge between the external Ethereum fact and Creditcoin enforcement.
Without a mechanism to prove Ethereum history inside Creditcoin, the application would need to rely on an external party to report what happened.
With Attestcoin, FreezeWire can verify the underlying blockchain evidence and then apply its own application-specific rules.
This creates a two-layer verification model:
Layer 1: Cryptographic verification
Did this transaction actually exist in the proven Ethereum history?
Layer 2: Application validation
Did that successful transaction contain the expected Circle USDC compliance event for the affected address?
Both layers are necessary.
Security Design
FreezeWire treats external blockchain data and user-provided inputs as potentially hostile.
Immutable emitter
The verifier relies on the canonical Circle USDC contract rather than accepting an arbitrary token contract from a client.
Receipt validation
The Ethereum transaction must have a successful receipt.
Event validation
The verifier checks the actual event selector and topics.
Address recovery
The affected address is recovered from the proven event data rather than blindly trusting frontend or backend input.
Ordering
The original Ethereum log ordering is preserved during event decoding.
Replay protection
A proven transaction cannot be processed repeatedly.
The replay identity is derived from the proven chain key, block height, and recovered transaction index.
No centralized status oracle
There is no privileged backend operation whose sole purpose is to declare an address restricted.
What Happens If the Proof Is Invalid?
FreezeWire does not treat every submitted proof as a valid compliance signal.
The validation pipeline is:
Proof received → Proof verified → Receipt checked → Emitter checked → Event checked → Address checked → Ordering checked → Replay checked → Eligibility updated
If any required verification step fails, the compliance state is not changed.
A transaction that is valid blockchain evidence but does not contain the expected compliance event also does not automatically make the address restricted.
This distinction is important because a generic blockchain proof should not automatically become an application authorization signal.
What We Learned
The most important lesson was:
Proof of inclusion is not the same as proof of meaning.
A cryptographic proof can establish that a transaction exists in blockchain history. The consuming application still needs to establish that the transaction succeeded, came from the expected contract, contained the expected event, targeted the expected address, and has not already been processed.
This made the consumer-side validation layer a fundamental part of the architecture.
We also learned that replay protection, immutable emitters, receipt status, event ordering, and proof-window handling should be treated as protocol-level security requirements rather than backend conveniences.
Challenges
The biggest technical challenge was crossing the trust boundary between Ethereum and Creditcoin without introducing a privileged status oracle.
Another challenge was correctly interpreting Ethereum event data from the proof instead of trusting metadata supplied by a client.
FreezeWire therefore recovers transaction information from the proof itself and validates the original Ethereum event structure and ordering.
The architecture also required a clean separation between proof verification, eligibility state, and credit enforcement so that the frontend and backend remain untrusted transport layers.
What FreezeWire Demonstrates
FreezeWire demonstrates a reusable pattern for cross-chain compliance:
External blockchain fact → Cryptographic proof → Application-level validation → On-chain state → Enforced financial action
The same architecture can extend beyond USDC blacklist events to other externally verifiable blockchain facts and compliance signals.
The underlying principle is:
If a system can verify what happened, it should not need to trust a party merely telling it what happened.
Current Status
FreezeWire is deployed on the Creditcoin CC3 testnet with a public frontend, backend, and live smart contracts.
The current implementation includes:
- Attestcoin proof verification
- Ethereum transaction validation
- Circle USDC event validation
- Receipt status validation
- Event decoding
- Replay protection
- On-chain eligibility tracking
- Credit action enforcement
- Public transaction evidence
- Public proof evidence
- Automated smart contract tests
- Automated backend tests
- Automated frontend tests
Test Results
Smart Contracts: 95 passed
Backend: 46 passed
Frontend: 17 passed
Frontend Build: PASS
Live Evidence
Ethereum Transaction
0xc9edfdbb67b48f26822d8769f63cb890599d98dec539f7f76b92edcc8a2ff787
Ethereum Block
25,705,174
Transaction Index
18
Affected Address
0xe05F529f5284D75624eBa386CB716928c3b54A2A
Circle USDC
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Attestcoin Chain Key
3
Attestcoin BlockProver
0x0FD2
Result
RESTRICTED
A protected credit draw for the restricted address reverts with:
Restricted()
Contract Architecture
| Contract | Address |
|---|---|
| MockUSD | 0x6943EB32EAb562791f095E91ee288627ADDdC5B3 |
| BlacklistVerifier | 0x6bf238291Bb8262918A1989831856DC6BC47D869 |
| EligibilityLedger | 0xde64d5037cA820D4aDFa703C4FaF5451be840C9d |
| GatedCreditLine | 0xB04fFca20e0a992474E6AD501A061973dC9Ed340 |
| Attestcoin BlockProver | 0x0FD2 |
Links
Live Application:
https://frontend-bice-pi-49.vercel.app
GitHub:
https://github.com/CodewithJha/freeze-wire
Ethereum Evidence:
https://etherscan.io/tx/0xc9edfdbb67b48f26822d8769f63cb890599d98dec539f7f76b92edcc8a2ff787
Attestcoin Proof Builder:
https://proof-gen-api.cc3-testnet.creditcoin.network
Creditcoin Explorer:
https://creditcoin-testnet.blockscout.com/
Final Principle
Don't trust the messenger. Verify the evidence. Enforce the result.
Built With
- attestcoin
- creditcoin
- cross-chain-verification
- defi
- ethereum
- foundry
- node.js
- on-chain-compliance
- react
- rest-api
- smart-contracts
- solidity
- typescript
- vite


Log in or sign up for Devpost to join the conversation.