COLDGATEPUBLIC SIGNALS
UTC
LAST OBSAWAITING
READING PUBLIC FEEDSINCIDENT LOG24 SEP
F6DOCSDOCUMENTATION / START HERE

Understand the check.
Then go deeper.

Plain language first. Switch to Technical for endpoint mappings, caching, persistence, and the token handoff.

UTCLAST OBSAWAITING
PARTNER STACK / SOURCES AND LIMITS

What powers COLDGATE

Built with Chainlink for contract readings. Powered by Push for opt-in wallet notifications. Each has a specific job. Neither decides whether a deposit is safe.

Chainlink

The job: read WBTC and cbBTC reserve quantities on Ethereum, USDC / USD on Ethereum and Robinhood Chain, and ETH / USD on Robinhood Chain. Show the answer, source contract and round time. Mark a round stale when its age exceeds the documented heartbeat.

The limit: token backing is not an exchange-wide reserve ratio. Price feeds do not measure reserves. These readings do not verify complete liabilities, exchange signer security or withdrawal access.

Reserve feed registry ↗
Price feed registry ↗

Push Protocol

The job: send an observed enabled-to-paused withdrawal change or a current-to-stale Chainlink reserve round to subscribers of the COLDGATE channel.

Your choice: open Push, find the COLDGATE channel and subscribe there with your wallet. Push handles consent and delivery. Unsubscribe in Push at any time. This site does not collect subscriber addresses. Connecting a wallet here does not subscribe you.

The limit: Push does not monitor an exchange. Notifications require an active channel, a running collector and stored previous readings. Missed checks can miss changes. A first reading does not trigger an alert.

Push notification docs ↗

Coverage in this build
JobEthereum · 1Robinhood Chain · 4663
Token reservesWBTC, cbBTCNot covered on Robinhood Chain
Price contextUSDC / USDUSDC / USD, ETH / USD
Push channelEthereum channel for opted-in EVM walletsNo native channel support verified. Observations can be delivered through the Ethereum channel.

Missing data stays missing. An unavailable RPC, missing signer, inactive channel, funding error or rate limit shows Chainlink offline or Push Protocol offline. Other exchange checks remain available. No partner reading clears a published route pause.

GET /api/chainlink calls latestRoundData() and decimals() on an allow-listed set of official feed proxies. It verifies the chain ID and a recent block. Round age limits: 86,400 seconds for both reserve feeds and Robinhood prices; 82,800 seconds for Ethereum USDC. Browser fetch freshness: 90 seconds. Zero, negative, future or incomplete rounds are unavailable.

GET /api/push-status checks the signer-derived COLDGATE channel and recent collector state. GET /api/collect requires CRON_SECRET. The collector detects transitions between observations no more than five minutes apart. A Redis lease prevents overlapping alert collection. Pending messages are saved before sending and retried with the same ID. A crash after acceptance can cause a duplicate. Messages expire after 24 hours with an explicit expired count.

Setup: PUSH_CHANNEL_KEY, COLDGATE_REDIS_REST_URL, COLDGATE_REDIS_REST_TOKEN and CRON_SECRET are server environment values. No Chainlink key is needed for public reads. Create the channel at Push; its docs specify 50 PUSH plus Ethereum gas, with offchain sends gasless. Hosting and storage have separate costs. The collector must run every minute on a compatible hosting plan. Channel delivery has not been verified without the COLDGATE signer.

01 / GET ORIENTED

Your asset. Your network.

Open Exchange Watch and search for the asset you plan to send. Expand the exchange to see the routes it publishes. An asset can have different deposit and withdrawal conditions on different networks.

EXCHANGE→NETWORK→STATUS→SOURCE

Confirm the network and any required memo or tag inside your exchange account. The checker does not validate memos, account limits, or whether an exchange has assigned an address to you.

GET /api/watch returns exchange metadata, normalized networks[], original flag values, summaries, timestamps, alerts, and source digests. Responses are read-only. The browser never sends exchange API credentials.

02 / INTERPRET THE SIGNAL

Open is a published flag.

TRUE → ENABLED·FALSE → DISABLED·MISSING → UNKNOWN

Enabled means the source explicitly enabled that direction. Disabled means it explicitly disabled it. Unknown means the source did not supply a supported direction flag.

Coinbase publishes network service states. Kraken publishes funding component states. These are shown as service conditions, with both direction fields left unknown. They do not confirm that a specific account can deposit or withdraw.

Binance, OKX, and Bybit have no public directional status feed verified in this build. Their authenticated or blocked endpoints are documented in the source register. No all-clear is substituted.

Field mapping

Bitget: chains[].rechargeable / withdrawable
KuCoin: chains[].isDepositEnabled / isWithdrawEnabled
Gate: chains[].deposit_disabled / withdraw_disabled
Coinbase: supported_networks[].status (service only)
Kraken: Digital Currency Funding children (service only)

Missing flags → unknown
Fetch or schema failure → unavailable
HTTP access restriction → no verified public feed

Gate entries with delisted: true are excluded. Other publishers may retain inactive or legacy routes. Alerts report disabled route counts and do not declare an exchange-wide suspension unless the publisher explicitly provides that scope.

03 / READ THE DATE

A reserve ratio has a scope.

REPORTED RESERVES÷REPORTED BALANCES=PUBLISHED RATIO

A published ratio compares reported reserve assets with reported customer balances for a specified asset or group of assets. A BTC ratio and a total reserve ratio are different measurements.

The board shows the latest dated publication the fetcher can verify, with its original source. Some publishers do not expose a dated ratio to the fetcher. Those fields remain unverified.

A reserve snapshot cannot establish current solvency, withdrawal access, or the security of a wallet approval system. The Bitget publication shown here predates the 24 September incident.

GET /api/reserves parses OKX’s embedded report state, Kraken’s snapshot and ratios, KuCoin’s displayed ratio date, and the reviewed Bitget September publication. Successful results cache for six hours. The Bitget article selection was reviewed on 29 September 2026 and needs editorial review for later publications. Parser failures do not produce replacement figures.

04 / INSPECT THE ADDRESS

A public label is not an assignment.

EXACT ADDRESS→PUBLIC LIST→MATCH / UNKNOWN

Paste an EVM address and choose the exchange you expect. COLDGATE checks the exact address against Dune Spellbook’s public exchange-wallet table.

  • A label match means the public list associates that address with the selected exchange.
  • A different exchange result means the list names another exchange. Check the source and the address in your account.
  • No match means the list cannot answer. Most personal deposit addresses are not publicly labelled.

Never send directly to a hot or reserve wallet just because it appears in a public list. Obtain your deposit destination inside your exchange account.

POST /api/check
Content-Type: application/json

{
  "exchange": "binance",
  "network": "evm",
  "address": "YOUR_COMPLETE_ADDRESS"
}

Supported format: 0x followed by 40 hexadecimal characters. Matching is case-insensitive. No chain-specific ownership claim is made. The label list caches for 24 hours and carries a source digest. Conflicting exchange labels are returned as a conflict. Addresses are processed in memory and are not saved by the checker.

05 / KNOW WHEN IT WAS READ

Time is part of the answer.

PUBLISHED→FETCHED→CACHED→STALE

The board refreshes while the page is open. A response older than 90 seconds is marked stale. A failed refresh leaves the last observation visible with a warning, or shows unavailable if nothing was fetched.

History stores actual observations and changes between them. There is no backfilled status, invented uptime, or claimed coverage before the first observation.

Caching and persistence

Network fetch timeout: 14 seconds
Server status cache: 60 seconds
CDN status cache: 15 seconds
Browser refresh: 60 seconds while visible
Stale threshold: 90 seconds
Reserve cache: 6 hours
Label cache: 24 hours
History: GET /api/history (last 60 observations)

Local development writes atomic snapshots and an append-only observation log inside ops/state/. Serverless persistence uses a Redis REST store through COLDGATE_REDIS_REST_URL and COLDGATE_REDIS_REST_TOKEN. Redis observations retain 30 days.

A one-minute collector is configured in vercel.json. It requires a hosting plan that supports that schedule and a CRON_SECRET. The collector and cloud store are not provisioned in this local build. Without the store, serverless history explicitly reports unavailable. Current public reads can still work.

06 / TOKEN STATUS

$COLDGATE has no contract address yet.

CHAIN→CONTRACT→FACTORY→SYMBOL

No official contract address has been supplied. No supply, price, launch date, or token benefit is claimed. Exchange Watch and the address checker are available without owning a token.

When an official address is published, this site will display it with a link to the verified Pons launch page. Until then, there is no purchase link.

Verified address handoff

The launch script reuses the base cook’s Pons verification pattern: Robinhood Chain ID 4663, deployed token code, exact name and symbol, factory registration, a fresh block, and a stable block hash.

node scripts/coldgate-live.mjs --ca <address> --dry-run
node scripts/coldgate-live.mjs --ca <address>

# Review the deployment handoff only:
node scripts/coldgate-live.mjs --ca <address> --deploy --dry-run

--deploy without --dry-run is disabled under the standing no-deployment rule. A validated address can update the local token configuration. Publishing remains a separate authorized handoff.

07 / THE BUILD

Built with open tools.

BLENDER→ALPHA LAYERS→PUBLIC STATUS LIGHTS

The scene explains the product: an ice gate, abstract exchange vaults, warm online wallets, and still cold storage. Vault lights follow the public status board. Wallet heat is an illustration, not measured exchange balances.

Built with Blender, GSAP, lottie-web, SVG, and public exchange endpoints. These are tools and sources, not endorsements.

Blender uses Cycles CPU, adaptive sampling, and OpenImageDenoise. Static desktop and phone renders are layered with alpha. Browser motion respects the operating system’s reduced-motion preference. EIP-6963 discovers wallet providers; the optional connection requests accounts only.

Your wallet. Your choice.

The tools work without a wallet. Connecting only shares your account address. No signature or transaction is requested.