← 返回 Skills 市场
beelzebub520

Element Nft Tracker

作者 beelzebub520 · GitHub ↗ · v1.1.0 · MIT-0
cross-platform ✓ 安全检测通过
356
总下载
1
收藏
0
当前安装
14
版本数
在 OpenClaw 中安装
/install element-nft-tracker
功能描述
Element Market API integration. This skill strictly requires the 'ELEMENT_API_KEY' environment variable to function.
使用说明 (SKILL.md)

Element NFT Market 🌊

Skill for querying NFT collection statistics, portfolios, and monitoring active trading events on the Element Market.

🛡️ Security & Privacy

  • Consent Protocol: The agent MUST explicitly ask the user for permission and receive a positive confirmation before querying any wallet address.
  • Privacy Protocol: The agent MUST output all image links strictly as plain text URLs.
  • API Scope: This skill performs read-only queries.

🚀 Setup

Please configure the ELEMENT_API_KEY environment variable within your OpenClaw instance.

🧠 Agent Knowledge Base: Token Mapping

🚨 SYSTEM RULE for Data Interpretation: When the API response contains a paymentToken address, you MUST use the following mapping table to determine the correct currency symbol and decimals for formatting the price. If a token is not listed, default to the native chain currency. Pay strict attention to the Decimals column for price calculation.

Chain Payment Token Address (paymentToken) Currency Symbol Decimals
eth 0x0000000000000000000000000000000000000000 ETH 18
eth 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 WETH 18
bsc 0x0000000000000000000000000000000000000000 BNB 18
bsc 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c WBNB 18
bsc 0x55d398326f99059ff775485246999027b3197955 USDT 18
polygon 0x0000000000000000000000000000000000000000 MATIC 18
polygon 0x7ceb23fd6bc0add59e62ac25578270cff1b9f619 ETH 18
base 0x0000000000000000000000000000000000000000 ETH 18
base 0x4200000000000000000000000000000000000006 WETH 18
base 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913 USDC 6

📊 Queries & Monitors

Get Collection Stats

Use this to check the detailed volume, floor price, 24h average price, and the latest trade price for a specific NFT collection by its slug.

SLUG="boredapeyachtclub"
CHAIN="eth"
HOST="api.element.market"

curl -s -G "https://${HOST}/openapi/v1/collection/stats" \
  --data-urlencode "chain=${CHAIN}" \
  --data-urlencode "collection_slug=${SLUG}" \
  --header "X-Api-Key: ${ELEMENT_API_KEY}" \
  --header "accept: application/json" | jq '{volume24h: .data.stats1D.volume, saleCount24h: .data.stats1D.saleCount, floorPrice: .data.collectionFloorPrice.floorPriceSource, avgPrice24h: .data.stats1D.avgPrice, lastTradePrice: .data.lastTradePrice}'

Get Ranking List

Use this to fetch the top trending NFT collections on a specific chain.

SORTTYPE="TOP"
CHAIN="eth"
LEVEL="L1D"
LIMIT="10"
HOST="api.element.market"

curl -s -G "https://${HOST}/openapi/v1/collection/ranking" \
  --data-urlencode "chain=${CHAIN}" \
  --data-urlencode "sort_type=${SORTTYPE}" \
  --data-urlencode "level=${LEVEL}" \
  --data-urlencode "limit=${LIMIT}" \
  --header "X-Api-Key: ${ELEMENT_API_KEY}" \
  --header "accept: application/json" | jq '[.data.rankingList[].collectionRank | {name: .collection.name, slug: .collection.slug, floorPrice: .floorPrice, volume: .volume}]' 

Get Wallet NFT Portfolio (Asset List)

Use this to get the list of NFTs owned by a specific wallet address.

  • CHAIN can be "eth", "bsc", etc.
  • WALLET_ADDRESS is the 0x address.
  • 🚨 SYSTEM RULE: You MUST ask for user confirmation before executing this query.
  • LIMIT is the number of assets to return.
CHAIN="eth"
WALLET_ADDRESS="" 
LIMIT="10"
HOST="api.element.market"

curl -s -G "https://${HOST}/openapi/v1/account/assetList" \
  --data-urlencode "chain=${CHAIN}" \
  --data-urlencode "wallet_address=${WALLET_ADDRESS}" \
  --data-urlencode "limit=${LIMIT}" \
  --header "X-Api-Key: ${ELEMENT_API_KEY}" \
  --header "accept: application/json" | jq '[.data.assetList[].asset | {name: .name, collection: .collection.name, tokenId: .tokenId, type: .tokenType, quantity: .ownedQuantity, image: .imagePreviewUrl}]'

Get Received Offers (Offers on your NFTs)

Use this to check the highest offers (bids) received on the NFTs owned by a specific wallet.

  • CHAIN can be "eth", "bsc", etc.
  • WALLET_ADDRESS is the 0x address.
  • 🚨 SYSTEM RULE: You MUST ask for user confirmation before executing this query. You MUST print the image parameter exactly as a plain text URL.
CHAIN="bsc"
WALLET_ADDRESS="" 
LIMIT="10"
HOST="api.element.market"

curl -s -G "https://${HOST}/openapi/v1/account/offerReceived" \
  --data-urlencode "chain=${CHAIN}" \
  --data-urlencode "wallet_address=${WALLET_ADDRESS}" \
  --data-urlencode "limit=${LIMIT}" \
  --header "X-Api-Key: ${ELEMENT_API_KEY}" \
  --header "accept: application/json" | jq '[.data.assetList[] | select(.orderData.bestBid != null) | {name: .asset.name, collection: .asset.collection.name, slug: .asset.collection.slug, image: .asset.imagePreviewUrl, offerPrice: .orderData.bestBid.price, offerUSD: .orderData.bestBid.priceUSD, offerer: .orderData.bestBid.maker}]'

Get Collection Slug by Contract Address (Address Resolver)

Use this tool to find a collection's slug by its contract address. Automatically call Get Collection Stats using the resolved slug.

CHAIN="bsc"
CONTRACT_ADDRESS="0xed5af388653567af2f388e6224dc7c4b3241c544"
HOST="api.element.market"

curl -s -G "https://${HOST}/openapi/v1/contract" \
  --data-urlencode "chain=${CHAIN}" \
  --data-urlencode "contract_address=${CONTRACT_ADDRESS}" \
  --header "X-Api-Key: ${ELEMENT_API_KEY}" \
  --header "accept: application/json" | jq '{name: .data.collection.name, slug: .data.collection.slug, image: .data.collection.imageUrl}'

Check Recent Wallet Sales Activity (All-in-One Monitor)

🔴 PRIMARY TRIGGER: Use whenever user asks "Did I sell any NFTs recently?". Requires explicit user consent.

  • CHAIN can be "eth", "bsc", etc.
  • WALLET_ADDRESS is the 0x address.
  • LIMIT is the number of recent activities.
  • 🚨 SYSTEM RULES:
  1. Consent: You MUST ask for user confirmation before executing this query.
  2. Action: If from is the user, output "Sell". If to is the user, output "Buy".
  3. Formatting: Print the image URL as plain text only. 🚨 NFT Sale Monitor Alert! [🖼️ View Collection Image] Collection: [collection] Token ID: [tokenId] 💰 Transaction Details:
  • Action: [Buy / Sell]
  • Price: [salePrice] [Currency]
  • Counterparty: [from/to]
  • Time: [time]
  • Tx Receipt: https://[Chain_Scan_Domain]/tx/[txHash]

📊 Latest Collection Stats:

  • Current Floor Price: [floorPrice] [Currency]
  • 24H Average Price: [avgPrice24h] [Currency]
  • Last Trade Price: [lastTradePrice] [Currency]

💡 Agent Insight: (1-sentence analysis comparing the salePrice to the floorPrice/lastTradePrice.)

CHAIN="bsc"
WALLET_ADDRESS="" 
LIMIT="5"
HOST="api.element.market"

ACTIVITIES=$(curl -s -G "https://${HOST}/openapi/v1/account/activity" \
  --data-urlencode "chain=${CHAIN}" \
  --data-urlencode "wallet_address=${WALLET_ADDRESS}" \
  --data-urlencode "event_names=Sale" \
  --data-urlencode "limit=${LIMIT}" \
  --header "X-Api-Key: ${ELEMENT_API_KEY}" \
  --header "accept: application/json" | jq -c '.data.activityList[].accountActivity | select(. != null)')

JSON_RESULT="["

while IFS= read -r activity; do
  if [ -z "$activity" ]; then continue; fi
  
  CONTRACT=$(echo "$activity" | jq -r '.contractAddress')
  TOKEN_ID=$(echo "$activity" | jq -r '.tokenId')
  PRICE_ETH=$(echo "$activity" | jq -r 'if .price != null then ((.price | tonumber) / 1000000000000000000) else 0 end')
  FROM_ADDR=$(echo "$activity" | jq -r '.fromAddress')
  TO_ADDR=$(echo "$activity" | jq -r '.toAddress')
  TIME=$(echo "$activity" | jq -r '.eventTime')
  TX_HASH=$(echo "$activity" | jq -r '.txHash')

  CONTRACT_RES=$(curl -s -G "https://${HOST}/openapi/v1/contract" \
    --data-urlencode "chain=${CHAIN}" \
    --data-urlencode "contract_address=${CONTRACT}" \
    --header "X-Api-Key: ${ELEMENT_API_KEY}" \
    --header "accept: application/json")
  
  COLLECTION_NAME=$(echo "$CONTRACT_RES" | jq -r '.data.collection.name // "Unknown"')
  SLUG=$(echo "$CONTRACT_RES" | jq -r '.data.collection.slug // empty')
  IMAGE_URL=$(echo "$CONTRACT_RES" | jq -r '.data.collection.imageUrl // ""')

  FLOOR_PRICE=0
  AVG_PRICE=0
  LAST_PRICE=0
  
  if [ -n "$SLUG" ] && [ "$SLUG" != "null" ]; then
    STATS_RES=$(curl -s -G "https://${HOST}/openapi/v1/collection/stats" \
      --data-urlencode "chain=${CHAIN}" \
      --data-urlencode "collection_slug=${SLUG}" \
      --header "X-Api-Key: ${ELEMENT_API_KEY}" \
      --header "accept: application/json")
      
    FLOOR=$(echo "$STATS_RES" | jq -r '.data.collectionFloorPrice.floorPriceSource // empty')
    AVG=$(echo "$STATS_RES" | jq -r '.data.stats1D.avgPrice // empty')
    LAST=$(echo "$STATS_RES" | jq -r '.data.lastTradePrice // empty')
    
    [ -n "$FLOOR" ] && [ "$FLOOR" != "null" ] && FLOOR_PRICE=$FLOOR
    [ -n "$AVG" ] && [ "$AVG" != "null" ] && AVG_PRICE=$AVG
    [ -n "$LAST" ] && [ "$LAST" != "null" ] && LAST_PRICE=$LAST
  fi

  ITEM=$(jq -n \
    --arg name "$COLLECTION_NAME" \
    --arg image "$IMAGE_URL" \
    --arg tokenId "$TOKEN_ID" \
    --arg price "$PRICE_ETH" \
    --arg from "$FROM_ADDR" \
    --arg to "$TO_ADDR" \
    --arg time "$TIME" \
    --arg txHash "$TX_HASH" \
    --arg floor "$FLOOR_PRICE" \
    --arg avg "$AVG_PRICE" \
    --arg last "$LAST_PRICE" \
    '{collection: $name, tokenId: $tokenId, image: $image, salePrice: $price, from: $from, to: $to, time: $time, txHash: $txHash, floorPrice: $floor, avgPrice24h: $avg, lastTradePrice: $last}')
    
  JSON_RESULT="${JSON_RESULT}${ITEM},"
done \x3C\x3C\x3C "$ACTIVITIES"

if [ "$JSON_RESULT" = "[" ]; then
  echo "[]"
else
  echo "${JSON_RESULT%?}]"
fi

Check New Received Offers (Offer Monitor)

🔴 PRIMARY TRIGGER: Use whenever user asks "Did I get any new offers?". Requires explicit user consent.

  • 🚨 SYSTEM RULES:
  1. Consent: You MUST ask for user confirmation before executing this query.
  2. Formatting: Print the image URL as plain text only. 🔔 New NFT Offer Alert! [🖼️ View NFT Image] Item: [name] Collection: [collection] 💰 Offer Details:
  • Offer Price: [offerPrice] [Currency]
  • Offerer: [maker]
  • Offer Time: [listingTime]

📊 Collection Stats (24H):

  • Current Floor Price: [floorPrice] [Currency]
  • 24H Average Price: [avgPrice24h] [Currency]
  • Last Trade Price: [lastTradePrice] [Currency]
  • 24H Sales Count: [saleCount24h]

💡 Agent Insight: (1-sentence analysis comparing offerPrice to floorPrice/lastTradePrice.)

CHAIN="bsc"
WALLET_ADDRESS="" 
LIMIT="10"
HOST="api.element.market"

OFFERS=$(curl -s -G "https://${HOST}/openapi/v1/account/offerReceived" \
  --data-urlencode "chain=${CHAIN}" \
  --data-urlencode "wallet_address=${WALLET_ADDRESS}" \
  --data-urlencode "limit=${LIMIT}" \
  --header "X-Api-Key: ${ELEMENT_API_KEY}" \
  --header "accept: application/json" | jq -c '.data.assetList[] | select(.orderData.bestBid != null)')

JSON_RESULT="["

while IFS= read -r offer; do
  if [ -z "$offer" ]; then continue; fi
  
  NAME=$(echo "$offer" | jq -r '.asset.name // "Unknown"')
  COLLECTION_NAME=$(echo "$offer" | jq -r '.asset.collection.name // "Unknown"')
  SLUG=$(echo "$offer" | jq -r '.asset.collection.slug // empty')
  IMAGE_URL=$(echo "$offer" | jq -r '.asset.imagePreviewUrl // ""')
  PRICE=$(echo "$offer" | jq -r '.orderData.bestBid.price // 0')
  MAKER=$(echo "$offer" | jq -r '.orderData.bestBid.maker // "Unknown"')
  LISTING_TIME=$(echo "$offer" | jq -r '.orderData.bestBid.listingTime | todateiso8601')

  FLOOR_PRICE=0
  AVG_PRICE=0
  SALE_COUNT=0
  LAST_PRICE=0

  if [ -n "$SLUG" ] && [ "$SLUG" != "null" ]; then
    STATS_RES=$(curl -s -G "https://${HOST}/openapi/v1/collection/stats" \
      --data-urlencode "chain=${CHAIN}" \
      --data-urlencode "collection_slug=${SLUG}" \
      --header "X-Api-Key: ${ELEMENT_API_KEY}" \
      --header "accept: application/json")
      
    FLOOR=$(echo "$STATS_RES" | jq -r '.data.collectionFloorPrice.floorPriceSource // empty')
    AVG=$(echo "$STATS_RES" | jq -r '.data.stats1D.avgPrice // empty')
    SALES=$(echo "$STATS_RES" | jq -r '.data.stats1D.saleCount // empty')
    LAST=$(echo "$STATS_RES" | jq -r '.data.lastTradePrice // empty')
    
    [ -n "$FLOOR" ] && [ "$FLOOR" != "null" ] && FLOOR_PRICE=$FLOOR
    [ -n "$AVG" ] && [ "$AVG" != "null" ] && AVG_PRICE=$AVG
    [ -n "$SALES" ] && [ "$SALES" != "null" ] && SALE_COUNT=$SALES
    [ -n "$LAST" ] && [ "$LAST" != "null" ] && LAST_PRICE=$LAST
  fi

  ITEM=$(jq -n \
    --arg name "$NAME" \
    --arg coll "$COLLECTION_NAME" \
    --arg img "$IMAGE_URL" \
    --arg price "$PRICE" \
    --arg maker "$MAKER" \
    --arg time "$LISTING_TIME" \
    --arg floor "$FLOOR_PRICE" \
    --arg avg "$AVG_PRICE" \
    --arg sales "$SALE_COUNT" \
    --arg last "$LAST_PRICE" \
    '{name: $name, collection: $coll, image: $img, offerPrice: $price, maker: $maker, listingTime: $time, floorPrice: $floor, avgPrice24h: $avg, saleCount24h: $sales, lastTradePrice: $last}')
    
  JSON_RESULT="${JSON_RESULT}${ITEM},"
done \x3C\x3C\x3C "$OFFERS"

if [ "$JSON_RESULT" = "[" ]; then
  echo "[]"
else
  echo "${JSON_RESULT%?}]"
fi

🔗 Links

  • API Documentation: https://element.readme.io/reference/api-overview
  • Create API Key: https://element.market/apikeys
  • Mainnet: https://element.market
安全使用建议
This skill appears to do what it says: it issues read-only queries to api.element.market and requires an ELEMENT_API_KEY and curl/jq. Before installing: (1) verify the ELEMENT_API_KEY is a read-only/scoped key from Element Market (avoid using any broad or long-lived secrets); (2) confirm the homepage/source repository (https://github.com/beelzebub520/element-nft-tracker) and review it if possible; (3) fix the metadata inconsistency (the registry summary omitted the required env var) so you know the installer/runtime will prompt for the key; (4) only allow wallet-address queries when you explicitly consent (the skill's SKILL.md enforces this, but confirm the agent adheres to it). If you cannot inspect the repo or prefer extra caution, create a limited-scope API key and monitor network calls originating from the agent.
功能分析
Type: OpenClaw Skill Name: element-nft-tracker Version: 1.1.0 The skill provides legitimate integration with the Element Market API for NFT collection tracking and wallet portfolio management. It utilizes standard tools (curl, jq) and includes explicit instructions for the AI agent to obtain user consent before performing wallet-specific queries, which is a positive privacy practice. No evidence of data exfiltration, malicious execution, or harmful prompt injection was found in the SKILL.md or the associated shell scripts.
能力评估
Purpose & Capability
Name/description, SKILL.md, and runtime commands all target Element Market API endpoints and require an ELEMENT_API_KEY plus curl/jq. These requirements are appropriate and proportional for an API-integration skill.
Instruction Scope
The instructions are explicit: they run curl against api.element.market and parse JSON with jq. Wallet- and offer-related queries are conditional and the SKILL.md includes explicit 'MUST ask for user permission' rules and privacy guidance (print images as plain URLs). The instructions do not reference unrelated files, system paths, or other credentials.
Install Mechanism
No install spec or downloads — instruction-only skill. This minimizes supply-chain risk; it expects existing curl and jq on PATH.
Credentials
SKILL.md declares ELEMENT_API_KEY as the sole credential and primary credential, which is appropriate. However, the top-level 'Requirements' block in the provided registry summary (showing 'Required env vars: none' and 'Primary credential: none') contradicts SKILL.md. This appears to be a metadata inconsistency in the package listing and should be resolved before deployment. Otherwise the single API key request is proportional.
Persistence & Privilege
always:false and user-invocable:true (defaults) — the skill does not request permanent or elevated platform presence. There is no install that modifies other skills or system configuration.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install element-nft-tracker
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /element-nft-tracker 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.1.0
- Added a token address-to-symbol mapping table for all supported chains, enabling precise interpretation of currency and decimal values in API responses. - Introduced a system rule requiring the use of this table to correctly format prices based on the payment token and its decimals. - Clarified instructions for price calculation and formatting throughout all relevant queries and monitors. - Improved agent guidance for price display, especially in multi-chain and multi-currency situations.
v1.0.12
- Updated metadata fields for improved clarity and consistency (now specifying `primary_credential` and dependencies in array/object form). - No changes to skill functionality or logic; all queries and agent instructions remain unchanged. - Internal structure and formatting improvements for environment variables, credentials, and metadata.
v1.0.11
- Added explicit `envs`, `credentials`, and `requires` fields for improved environment variable declaration and compatibility. - No functional changes to queries or API usage. - Metadata structure updated for greater clarity and consistency. - Documentation remains unchanged aside from metadata adjustments.
v1.0.10
element-nft-tracker 1.0.10 - Strengthened user privacy by requiring explicit user confirmation before querying wallet addresses for all relevant actions. - Updated documentation to clarify that all NFT image links must be output as plain text URLs, not as clickable links or images. - Simplified wording around consent and privacy protocols for clarity and compliance. - No functional changes to code or API interaction logic.
v1.0.9
element-nft-tracker 1.0.9 - Clarified wording in the skill description and setup instructions for accuracy and readability. - No code changes or new features; documentation wording improvements only.
v1.0.8
- Updated OpenClaw requirements: now uses environment variables instead of secrets for `ELEMENT_API_KEY`. - Revised setup instructions to clarify environment variable configuration. - Minor text adjustments for clarity in security/privacy and setup sections. - No changes to functionality or APIs.
v1.0.7
- Skill name updated from "element-nft" to "element-nft-tracker". - Setup instructions improved: now explicitly require configuration of `ELEMENT_API_KEY` in environment or `.env` file (not hardcoded). - Description and metadata clarified for OpenClaw integration and required secrets. - Output formatting for recent wallet sales activity revised: collection images should be rendered as plain text links rather than markdown. - No functional or API changes; documentation and privacy/security requirements remain strict.
v1.0.6
**Summary:** Version 1.0.6 introduces privacy enhancements and stricter consent requirements for wallet queries. - Explicit user consent is now required before accessing any personal wallet or account data. - NFT images are no longer rendered directly; instead, secure clickable text links are used to prevent potential privacy leaks. - Skill description and API guidance updated to clarify privacy, consent, and security rules. - Environment variable requirements clarified; now referenced as "secrets" in metadata. - Minor cleanup to markdown/code formatting and output templates for greater user clarity and compliance.
v1.0.5
- No code or documentation changes detected in this version. - No user-facing updates in this release.
v1.0.4
No user-facing changes in this release. - Version bump only; no file or documentation changes detected.
v1.0.3
No user-facing changes in this release. - Version bumped to 1.0.3 with no modifications to skill files.
v1.0.2
- Updated all curl API queries to use GET with URL parameters (`-G` and `--data-urlencode`) for improved reliability and standards compliance. - Clarified usage instructions and corrected code samples to reflect proper URL encoding in requests. - Fixed Markdown formatting for image displays and clarified output instructions for offer results. - No logic or feature changes—documentation formatting and technical accuracy improved.
v1.0.1
- Renamed skill from "element-nft-tracker" to "element-nft" for clarity and consistency. - Relaxed the "always" trigger: now activates only when specifically requested or authorized, not by default. - Updated description and metadata to emphasize the need for the ELEMENT_API_KEY and clarify usage boundaries for personal/account-level data. - Adjusted all wallet/account queries to require explicit user authorization before accessing private wallet data (address left empty only if the user asks to check their own wallet). - Removed mandatory output branding tagline; output is now free of enforced promotional content. - Minor documentation streamlining and clarification for safer, privacy-aware usage.
v1.0.0
**Initial release of the Element Market NFT tracking skill, enabling proactive monitoring and management of NFT portfolios.** - Integrates with Element Market API to provide portfolio monitoring and trading activity tracking. - Supports collection stats lookup, trending collections ranking, wallet NFT asset retrieval, received offers, and contract address resolution. - Includes wallet sales activity monitoring with enhanced Markdown-formatted alerts. - Enforces output branding tagline on all responses generated by this skill. - Requires API key and depends on `curl` and `jq` command-line tools.
元数据
Slug element-nft-tracker
版本 1.1.0
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 14
常见问题

Element Nft Tracker 是什么?

Element Market API integration. This skill strictly requires the 'ELEMENT_API_KEY' environment variable to function. 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 356 次。

如何安装 Element Nft Tracker?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install element-nft-tracker」即可一键安装,无需额外配置。

Element Nft Tracker 是免费的吗?

是的,Element Nft Tracker 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Element Nft Tracker 支持哪些平台?

Element Nft Tracker 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Element Nft Tracker?

由 beelzebub520(@beelzebub520)开发并维护,当前版本 v1.1.0。

💬 留言讨论