返回 Skill 列表
extension
分类: 数据与分析无需 API Key

RWA分析

从预言机获取真实资产(RWA)数据与储量证明状态

person作者: u_a1096549hubenterprise

QXMP Oracle Skill (RWA Proof-of-Reserve)

The QXMP Oracle is a custom oracle infrastructure (not Chainlink or RedStone) providing cryptographically verified real-world asset data on the QELT blockchain. It manages 13 tokenized mining projects worth $1.17 trillion USD in certified in-ground mining assets — all on-chain.

API Base URL: https://api.qxmp.ai/api/v1/rwa Auth: None required — fully public API CORS: Enabled — works from any browser Update frequency: Oracle proofs nominally update ~once per 24 hours, but refreshes can lag — always verify latestProof.timestamp / isFresh

Safety

  • Read-only API — no write operations available.
  • Never fabricate asset valuations, proof timestamps, or freshness status.
  • Always report isFresh honestly — a stale proof (isFresh: false) means data has not refreshed since latestProof.timestamp; use ageHours for exact staleness (can be weeks).
  • Parse valueUSD fields with parseFloat() — they are strings to preserve precision.
  • Respect rate limits: exponential backoff on HTTP 429 using Retry-After header.
  • Cache responses for 2–5 minutes; proofs are stable between daily updates.
  • The health and /assets/{assetCode} endpoints may return HTTP 504 (gateway timeout, current as of 2026-08) — if so, use /assets (list) or /stats instead.
  • Never guess asset codes: the format is not strict (e.g. IRON-001 has no QXMP: prefix); list assets via /assets first.

Endpoints

Health Check

curl -fsSL "https://api.qxmp.ai/api/v1/rwa/health"

May intermittently return HTTP 504 — retry once, then fall back to /assets?page=1&limit=100 or /stats.

Get All Assets (primary endpoint)

curl -fsSL "https://api.qxmp.ai/api/v1/rwa/assets?page=1&limit=100"

Key fields per asset:

| Field | Type | Notes | |-------|------|-------| | assetCode | string | e.g. "QXMP:RHENO-JORC-ZA" | | name | string | Human-readable project name | | type | string | Gold, Diamond, Rare Earth Elements, etc. | | jurisdiction | string | ZA, NA, MZ, LR, AU | | reportingStandard | string | e.g. JORC 2012, NI 43-101, SAMREC Code | | valueUSD | string | Parse with parseFloat() | | latestProof.isFresh | boolean | true if proof < 24h old | | latestProof.ageHours | string | Hours since last proof | | latestProof.timestamp | string | ISO 8601 | | latestProof.submitter | string | Signer address; may be empty "" |

Get Single Asset

curl -fsSL "https://api.qxmp.ai/api/v1/rwa/assets/QXMP:RHENO-JORC-ZA"

Returns full asset details including onChain data and proofHistory[].

Currently this endpoint is prone to HTTP 504 (as of 2026-08) — if it fails, fetch the full list and filter by assetCode instead:

curl -fsSL "https://api.qxmp.ai/api/v1/rwa/assets?page=1&limit=100" | jq '.data.assets[] | select(.assetCode == "QXMP:RHENO-JORC-ZA")'

Get Portfolio Statistics

curl -fsSL "https://api.qxmp.ai/api/v1/rwa/stats"

Returns totalAssets, totalValue, averageValue, currency, byType[], byJurisdiction[], timestamp.

Response Shape

{
  "success": true,
  "data": {
    "assets": [
      {
        "assetCode": "QXMP:RHENO-JORC-ZA",
        "assetCodeHash": "0x3b2b0ea0...",
        "name": "Rhenosterspruit / Syferfontein Mining Project",
        "type": "Rare Earth Elements",
        "jurisdiction": "ZA",
        "reportingStandard": "JORC 2012",
        "valueUSD": "113989838841.85",
        "status": "registered",
        "latestProof": {
          "valueUSD": "113989838841.85",
          "timestamp": "2026-07-17T00:00:41.000Z",
          "ageHours": "826.28",
          "isFresh": false,
          "submitter": ""
        }
      }
    ],
    "summary": { "count": 13, "totalValue": "1166806475273.94", "currency": "USD" }
  }
}

assetCodeHash and txHash are full 0x-prefixed hashes (truncated above for brevity). latestProof.submitter may be an empty string.

Procedure

Report Asset Portfolio

  1. Fetch: GET /assets?page=1&limit=100
  2. Check success: true
  3. Parse each valueUSD with parseFloat()
  4. Flag ✅ Fresh or ⚠️ Stale per latestProof.isFresh
  5. Report totals from data.summary.totalValue

Verify a Specific Asset

  1. Fetch: GET /assets/{assetCode} — if this returns HTTP 504, fall back to GET /assets?page=1&limit=100 and filter by assetCode
  2. Report: name, type, jurisdiction, reporting standard, value, proof age, freshness
  3. If isFresh: false, warn user the proof has not refreshed since latestProof.timestamp (use ageHours for exact staleness)

Rate Limit Handling

# Check for 429 and respect Retry-After
response=$(curl -sI "https://api.qxmp.ai/api/v1/rwa/assets")
if echo "$response" | grep -q "HTTP/.*429"; then
  retry=$(echo "$response" | grep -i "retry-after" | awk '{print $2}' | tr -d '\r')
  echo "Rate limited. Waiting ${retry}s..."
  sleep "$retry"
fi

Smart Contracts (On-Chain — Advanced)

For trustless verification without the REST API:

| Contract | Address | Role | |----------|---------|------| | OracleController | 0xB2a332dE80923134393306808Fc2CFF330de03bA | Signature verification | | ProofOfReserveV3 | 0x6123287acBf0518E0bD7F79eAcAaFa953e10a768 | Proof storage + audit trail | | DynamicRegistryV2 | 0xd00cD3a986746cf134756464Cb9Eaf024DF110fB | Asset metadata storage |

Asset codes: keccak256("QXMP:RHENO-JORC-ZA") — most follow QXMP:{PROJECT}-{STANDARD}-{COUNTRY} but exceptions exist (e.g. IRON-001); resolve codes via the REST API, never guess. Values stored at 8 decimal precision: valueUSD * 10^8.

References

  • references/asset-types.md — asset types, jurisdictions, reporting standards, code format, and value precision.
  • references/contracts.md — on-chain contracts, methods, and security model.

Asset types and jurisdictions are dynamic: always confirm against /stats (byType, byJurisdiction).

Common Errors

| Error | Cause | Fix | |-------|-------|-----| | success: false | API error | Check error field | | HTTP 429 | Rate limited | Wait Retry-After seconds | | Asset not found | Wrong code | List all via /assets first | | isFresh: false | Proof not refreshed recently | Data valid; check ageHours — staleness can be weeks | | HTTP 504 | Gateway timeout — /health and /assets/{assetCode} affected (2026-08) | Use /assets (list) or /stats; filter list by assetCode |