Qelt Contracts
by @prqelt
Verify, inspect, and retrieve verified Solidity smart contracts, ABIs, and compiler/EVM versions on the QELT blockchain using the Mainnet Indexer API.
clawhub install qelt-contractsπ About This Skill
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
status: "completed" does NOT mean verified β always check result.verified === true.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
1. Check before submit β use GET /api/v2/contracts/:address/verification first
2. Use /submit-multi for any contract with import statements
3. Include "viaIR": true if compiled with viaIR: true in hardhat config
4. 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
π Tips & Best Practices
1. Check before submit β use GET /api/v2/contracts/:address/verification first
2. Use /submit-multi for any contract with import statements
3. Include "viaIR": true if compiled with viaIR: true in hardhat config
4. Poll every 3β5 seconds β do not re-submit a pending job