whale-valut-绘制用户增长线型图

使用subscan-api查询mint nft数量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import requests
import redis
import datetime

# 配置
CONTRACT_ADDRESS = "0x705A0890bFDcD30eaf06b25b9D31a6C5C099100d"
URL = "https://moonbase.api.subscan.io/api/scan/evm/token/transfer"
API_KEY = "你的subscan api密钥"

r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)

def fetch_data():
headers = {"Content-Type": "application/json", "x-api-key": API_KEY}
payload = {"contract": CONTRACT_ADDRESS, "row": 100, "page": 0}

print(f"--- 开始请求 Subscan API ---")
response = requests.post(URL, json=payload, headers=headers)
data = response.json()
transfers = data['data'].get('list', [])
print(f"API 返回记录总数: {len(transfers)}")

daily_stats = {}

for tx in transfers:
# 根据 DEBUG 结果,字段名是 'create_at'
ts = tx.get('create_at')

if ts:
ts_int = int(ts)
# 转换为日期
date_str = datetime.datetime.fromtimestamp(ts_int).strftime('%Y-%m-%d')
daily_stats[date_str] = daily_stats.get(date_str, 0) + 1

print(f"统计后的每日字典: {daily_stats}")

if daily_stats:
# 写入 Redis
r.delete("whale_vault:daily_mints") # 先清理,确保数据纯净
for date, count in daily_stats.items():
r.hset("whale_vault:daily_mints", date, count)
print(f"✅ 大功告成!已同步 {sum(daily_stats.values())} 条数据到 Redis")
else:
print("❌ 逻辑错误:字段存在但解析失败")
if __name__ == "__main__":
fetch_data()

查询redis数据库中的数量

root@server:/opt/Whale-Vault/backend# redis-cli HGETALL whale_vault:daily_mints

  1. “2026-01-13”
  2. “2”
  3. “2026-01-11”
  4. “4”
  5. “2026-01-10”
  6. “22”

第一步,我要指定一个特殊的hashcode为出版社的管理hashcode

请确保你的 /opt/Whale-Vault/backend/.env 文件中有以下两行:
ADMIN_CODE_HASH=访问hash
ADMIN_ADDRESS=钱包地址

redis查询hash code

在 Redis 中查询 Hash Code,取决于你是想查询具体的某个兑换码是否存在,还是想列出所有已存储的兑换码

根据你的项目结构,兑换码主要存储在 Set(集合)String(字符串) 中。以下是常用的查询命令:

1. 查询某个具体的 Hash Code 状态

这是最常用的操作,用来检查一个码是否有效、是否已使用、或绑定了哪个地址。

  • 检查码是否在“有效库”中:
1
2
redis-cli SISMEMBER vault:codes:valid "你的_hash_code"

返回 1 表示有效,0 表示不在库中。

  • 检查码是否已被使用:
1
2
redis-cli SISMEMBER vault:codes:used "你的_hash_code"

返回 1 表示已用过。

  • 查询该码绑定的钱包地址:
1
2
redis-cli GET "bind:你的_hash_code"

如果已绑定,会返回 0x... 地址。


2. 列出所有的 Hash Code

如果你想批量查看数据库里到底有多少码,可以使用以下命令:

  • 列出所有“待使用”的有效码:
1
2
redis-cli SMEMBERS vault:codes:valid

  • 列出所有“已使用”的码:
1
2
redis-cli SMEMBERS vault:codes:used

  • 统计有效码的总数:
1
2
redis-cli SCARD vault:codes:valid


3. 模糊搜索 (Scan)

如果你只记得 Hash Code 的前几位,想找出来:

1
2
3
# 搜索以 9f65 开头的绑定关系
redis-cli --scan --pattern "bind:9f65*"


4. 配合你的管理员逻辑进行手动设置

既然你刚才设定了 9f657… 为管理码,你可以通过以下命令手动确保它在 Redis 中处于正确状态:

1
2
3
4
5
6
# 1. 强行将其加入有效库
redis-cli SADD vault:codes:valid "hash地址"

# 2. 如果之前不小心把它标记为已使用了,可以从已使用库删除
redis-cli SREM vault:codes:used "hash地址"


下一步建议:

既然你已经修改了 main.go 引入了 ADMIN_CODE_HASH 的判断,需要我帮你把前端 MintConfirm.tsx 里的拦截跳转逻辑写出来吗? 这样当你输入出版社地址和这个特殊的 Hash 后,就能丝滑地跳转到 /admin/overview 了。