Qelt Contracts
Verify, inspect, and retrieve verified Solidity smart contracts, ABIs, and compiler/EVM versions on the QELT blockchain using the Mainnet Indexer API.
Description
name: QELT Contracts description: Verify and inspect smart contracts on the QELT blockchain using the Mainnet Indexer verification API. Use when asked to verify Solidity source code, check if a contract is verified, retrieve ABIs, list compiler versions, poll a verification job, or submit multi-file contracts (with OpenZeppelin imports). Rate limit: 10 submissions/hour. read_when:
- Verifying a Solidity smart contract on QELT
- Checking if a QELT contract address is already verified
- Retrieving ABI or source code for a verified QELT contract
- Listing supported Solidity compiler versions on QELT
- Polling a contract verification job status homepage: https://mnindexer.qelt.ai metadata: {"clawdbot":{"emoji":"📋","requires":{"bins":["curl"]}}} allowed-tools: Bash(qelt-contracts:*)
QELT Smart Contract Verification Skill
The QELT Mainnet Indexer provides production-grade contract verification via REST API. Supports 500+ Solidity versions, constructor arguments, library linking, multi-file contracts (75+ files), viaIR compilation, and automatic EVM version detection.
API Base: https://mnindexer.qelt.ai
Rate Limit: 10 verification submissions per hour per IP
Timeout per job: 600 seconds (10 minutes)
Status polling: Unlimited — poll every 3–5 seconds freely
Safety
- Do not submit source code containing private keys or secrets.
- Verification is permanent — source becomes public once verified.
- Always check if already verified before submitting (saves rate limit quota).
status: "completed"does NOT mean verified — always checkresult.verified === true.- Status polling is unlimited — do not re-submit while a job is still processing.
Procedure
1. Check if Already Verified (Do This First)
curl -fsSL "https://mnindexer.qelt.ai/api/v2/contracts/0xCONTRACT/verification"
If "verified": true → return existing source/ABI to user, no submission needed.
2. Submit Single-File Contract
curl -fsSL -X POST "https://mnindexer.qelt.ai/api/v1/verification/submit" \
-H "Content-Type: application/json" \
-d '{
"address": "0xCONTRACT",
"sourceCode": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n...",
"compilerVersion": "0.8.20",
"contractName": "MyContract",
"optimizationUsed": true,
"runs": 200,
"evmVersion": "shanghai",
"constructorArguments": "0x000...",
"libraries": {}
}'
Response: { "success": true, "jobId": "uuid", "statusUrl": "/api/v1/verification/status/uuid" }
3. Submit Multi-File Contract (with imports)
For contracts using OpenZeppelin or any import statements:
curl -fsSL -X POST "https://mnindexer.qelt.ai/api/v1/verification/submit-multi" \
-H "Content-Type: application/json" \
-d '{
"address": "0xCONTRACT",
"compilerVersion": "v0.8.17+commit.8df45f5f",
"contractName": "MyToken",
"optimizationUsed": true,
"runs": 200,
"viaIR": true,
"evmVersion": "london",
"mainFile": "contracts/MyToken.sol",
"sourceFiles": {
"contracts/MyToken.sol": "pragma solidity ^0.8.17; ...",
"@openzeppelin/contracts/token/ERC20/ERC20.sol": "..."
}
}'
4. Poll Status (Unlimited)
curl -fsSL "https://mnindexer.qelt.ai/api/v1/verification/status/JOB_ID"
States: pending → processing → completed / failed
⚠️ After "completed", always verify result.verified === true:
{
"status": "completed",
"result": { "verified": true, "abi": [...] }
}
verified: false with status: "completed" = bytecode mismatch.
5. Get Compiler Versions
curl -fsSL "https://mnindexer.qelt.ai/api/v2/verification/compiler-versions"
6. Get EVM Versions
curl -fsSL "https://mnindexer.qelt.ai/api/v2/verification/evm-versions"
EVM Version Selection
| Solidity Range | EVM Version |
|---|---|
| 0.5.14 – 0.8.4 | istanbul |
| 0.8.5 | berlin |
| 0.8.6 – 0.8.17 | london |
| 0.8.18 – 0.8.19 | paris |
| 0.8.20 – 0.8.23 | shanghai |
| 0.8.24+ | cancun |
QELT Mainnet runs EVM Cancun — use cancun for Solidity 0.8.24+.
Rate Limits
| Endpoint | Limit |
|---|---|
POST /api/v1/verification/submit |
10 req/hour per IP |
POST /api/v1/verification/submit-multi |
10 req/hour per IP |
GET /api/v1/verification/status/:jobId |
Unlimited |
| All other GET endpoints | Not rate limited |
Rate limit headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, Retry-After.
Common Errors
| Symptom | Likely Cause | Fix |
|---|---|---|
verified: false (completed) |
Wrong compiler/optimization/args | Match exact deployment settings |
| HTTP 429 | Rate limited | Wait Retry-After seconds (usually 3600) |
status: "failed" |
Compilation error | Check message field |
| Timeout at 600s | Large contract + viaIR | Normal; job still finishes |
Best Practices
- Check before submit — use
GET /api/v2/contracts/:address/verificationfirst - Use
/submit-multifor any contract withimportstatements - Include
"viaIR": trueif compiled withviaIR: truein hardhat config - Poll every 3–5 seconds — do not re-submit a pending job
Developer Tools
Hardhat Plugin: npm install --save-dev @qelt/hardhat-verify@latest
npx hardhat qelt:verify --network qelt 0xCONTRACT_ADDRESS
CLI Tool: npm install -g qelt-verify → qelt-verify verify 0x... ./Contract.sol --compiler-version 0.8.20 --optimize
Reviews (0)
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!