Chia WalletConnect - Telegram Verification

ReviewAudited by ClawScan on May 10, 2026.

Overview

The wallet-verification purpose is clear, but the included backend trusts caller-supplied Telegram IDs and exposes verification status in ways that could enable spoofing or leak wallet-user links if deployed as-is.

Install only if you are prepared to harden the backend before production use. Verify Telegram initData server-side, restrict CORS, protect status endpoints, add rate limiting, and tell users that wallet address/signature data is sent to MintGarden for verification.

Findings (6)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

A deployed server could be called directly by outsiders, causing unexpected verification attempts, service abuse, or records that were not initiated through the intended Telegram flow.

Why it was flagged

The public verification endpoint accepts caller-controlled data from any origin and invokes the MintGarden verification flow without visible authentication, origin restriction, or rate limiting.

Skill content
app.use(cors()); ... app.post('/api/verify', async (req, res) => { const { address, message, signature, publicKey, userId, timestamp } = req.body; ... const result = await verifySignature(address, message, signature, publicKey);
Recommendation

Restrict CORS to the deployed Telegram Web App domain, verify Telegram initData or bot-originated requests server-side, and add rate limiting before exposing the endpoint.

What this means

If another bot or access-control workflow trusts this status, someone could bind a verified wallet to an arbitrary Telegram user ID and weaken gated access or airdrop checks.

Why it was flagged

The verification record is keyed by a userId supplied in the request body, with no shown proof that this ID belongs to the Telegram user making the request.

Skill content
const { address, message, signature, publicKey, userId, timestamp } = req.body; ... pendingVerifications.set(userId, { address, verified: true, timestamp: Date.now() });
Recommendation

Do not trust userId from client JSON. Bind the wallet signature to server-verified Telegram initData or to the actual Telegram web_app_data sender.

What this means

Anyone who can guess or know a Telegram user ID may be able to query whether it is verified and what wallet address is linked.

Why it was flagged

The status endpoint returns verification data, including the linked wallet address, for a URL-supplied userId while CORS is enabled for all origins.

Skill content
app.use(cors()); ... app.get('/api/status/:userId', (req, res) => { ... res.json({ success: true, ...verification });
Recommendation

Require authentication for status lookups, restrict origins, return only the minimum needed data, and avoid exposing wallet-user mappings publicly.

What this means

Users will be asked to connect a wallet and sign a message that proves wallet ownership.

Why it was flagged

The web app requests wallet address, public key, and message-signing capabilities through WalletConnect; these are expected for wallet ownership verification and do not request private keys or transactions.

Skill content
methods: [ 'chip0002_getPublicKeys', 'chip0002_signMessage', 'chia_getCurrentAddress' ]
Recommendation

Users should review the exact message in Sage before signing and only use a deployment they trust.

What this means

MintGarden can see the wallet verification data, though no private keys are sent.

Why it was flagged

The verification library sends the wallet address, signed challenge, signature, and public key to MintGarden, which is disclosed and central to the stated purpose.

Skill content
fetch(`${MINTGARDEN_API}/address/verify_signature`, { ... body: JSON.stringify({ address, message, signature, pubkey: publicKey }) })
Recommendation

Disclose this third-party verification flow to users and avoid putting unnecessary personal information into the signed challenge.

What this means

The deployed app depends on the CDN serving the expected script.

Why it was flagged

The browser app loads WalletConnect code from an external CDN at runtime; it is versioned and purpose-aligned, but no subresource integrity or self-hosting is shown.

Skill content
<script src="https://unpkg.com/@walletconnect/sign-client@2.11.0/dist/index.umd.js"></script>
Recommendation

For production, pin and verify third-party scripts with SRI or self-host reviewed assets.