[BUG] API onchain_info 字段聚合不完整 - GET /api/assets/{id} 返回链上信息为空 #1

Closed
opened 2026-03-22 21:44:20 +08:00 by nacadmin · 1 comment
Owner

问题描述

在 2026-03-22 对一键上链系统(onboarding.newassetchain.io)进行完整数据流转验证时,发现 GET /api/assets/{id} API 接口返回的 onchain_info 字段中,链上关键信息为空(--),但前端界面能正确显示这些信息。

影响范围

  • 系统:NAC 资产一键上链系统(onboarding.newassetchain.io)
  • 后端/opt/nac/onboarding/backend,FastAPI,端口 9552
  • 优先级:中(不影响当前前端功能,但影响 API 完整性和第三方集成)

复现步骤

  1. 完成一键上链全流程(17步,100%进度)
  2. 调用 GET /api/assets/{asset_id} 接口
  3. 查看返回的 onchain_info 字段

实际结果

{
  "onchain_info": {
    "dna_hash": "--",
    "chain_tx": "--",
    "token_symbol": "--",
    "token_address": "--",
    "xtzh_minted": "--"
  }
}

期望结果

{
  "onchain_info": {
    "dna_hash": "NAC-DNA-XXXXXXXX",
    "chain_tx": "0xXXXXXXXX",
    "token_symbol": "TESRWA",
    "token_address": "0xc0c58302...",
    "xtzh_minted": "4000000"
  }
}

根本原因分析

前端能正确显示这些数据,说明数据存储在步骤历史(step_history)的 details 字段中,而不是在 onchain_info 聚合字段中。API 的 onchain_info 字段没有从 step_history 中正确聚合这些数据。

修复方案

在后端 GET /api/assets/{id} 接口中,遍历 step_history 数组,从各步骤的 details 字段中提取以下信息并填充到 onchain_info

  • DnaGenerated 步骤 → dna_hash
  • ChainConfirmed 步骤 → chain_tx
  • TokenIssued 步骤 → token_symbol, token_address
  • XtzhMinted 步骤 → xtzh_minted

验证方法

修复后,调用 GET /api/assets/{id} 应返回完整的链上信息,与前端显示一致。

关联工单

  • 本工单由 2026-03-22 一键上链系统数据流转验证发现
  • 验证报告:/home/ubuntu/logs/2026-03-22_onboarding_verification_report.md

完成标准

  • GET /api/assets/{id} 返回完整的 onchain_info 字段
  • 所有链上字段(dna_hash、chain_tx、token_symbol、token_address、xtzh_minted)正确填充
  • API 响应与前端显示数据一致
  • 修复后代码提交到 Git 仓库并记录日志
## 问题描述 在 2026-03-22 对一键上链系统(onboarding.newassetchain.io)进行完整数据流转验证时,发现 `GET /api/assets/{id}` API 接口返回的 `onchain_info` 字段中,链上关键信息为空(`--`),但前端界面能正确显示这些信息。 ## 影响范围 - **系统**:NAC 资产一键上链系统(onboarding.newassetchain.io) - **后端**:`/opt/nac/onboarding/backend`,FastAPI,端口 9552 - **优先级**:中(不影响当前前端功能,但影响 API 完整性和第三方集成) ## 复现步骤 1. 完成一键上链全流程(17步,100%进度) 2. 调用 `GET /api/assets/{asset_id}` 接口 3. 查看返回的 `onchain_info` 字段 ## 实际结果 ```json { "onchain_info": { "dna_hash": "--", "chain_tx": "--", "token_symbol": "--", "token_address": "--", "xtzh_minted": "--" } } ``` ## 期望结果 ```json { "onchain_info": { "dna_hash": "NAC-DNA-XXXXXXXX", "chain_tx": "0xXXXXXXXX", "token_symbol": "TESRWA", "token_address": "0xc0c58302...", "xtzh_minted": "4000000" } } ``` ## 根本原因分析 前端能正确显示这些数据,说明数据存储在步骤历史(`step_history`)的 `details` 字段中,而不是在 `onchain_info` 聚合字段中。API 的 `onchain_info` 字段没有从 `step_history` 中正确聚合这些数据。 ## 修复方案 在后端 `GET /api/assets/{id}` 接口中,遍历 `step_history` 数组,从各步骤的 `details` 字段中提取以下信息并填充到 `onchain_info`: - `DnaGenerated` 步骤 → `dna_hash` - `ChainConfirmed` 步骤 → `chain_tx` - `TokenIssued` 步骤 → `token_symbol`, `token_address` - `XtzhMinted` 步骤 → `xtzh_minted` ## 验证方法 修复后,调用 `GET /api/assets/{id}` 应返回完整的链上信息,与前端显示一致。 ## 关联工单 - 本工单由 2026-03-22 一键上链系统数据流转验证发现 - 验证报告:`/home/ubuntu/logs/2026-03-22_onboarding_verification_report.md` ## 完成标准 - [ ] `GET /api/assets/{id}` 返回完整的 `onchain_info` 字段 - [ ] 所有链上字段(dna_hash、chain_tx、token_symbol、token_address、xtzh_minted)正确填充 - [ ] API 响应与前端显示数据一致 - [ ] 修复后代码提交到 Git 仓库并记录日志
nacadmin self-assigned this 2026-03-22 21:44:20 +08:00
Author
Owner

修复完成 - 2026-03-22

修复内容:

routers/assets.pyGET /api/assets/{asset_id} 接口中,新增了 _build_onchain_info() 函数,从各步骤专用字段中聚合链上关键信息:

  • doc["dna"]["hash"]dna_hash(Step 5 generate-dna)
  • doc["warrant"]["tx_hash"]chain_tx(Step 6 chain-confirm)
  • doc["token"]["symbol/address"]token_symbol, token_address(Step 14 issue-token)
  • doc["xtzh"]["amount"]xtzh_minted(Step 13 mint-xtzh)
  • doc["warrant_cert"]["warrant_id"]warrant_id(Step 9 issue-warrant)
  • doc["custody"]["warrant_custody_tx"]custody_tx(Step 11 custody)

验证结果:

onchain_info 字段聚合修复成功!(11/12 字段有值)
- dna_hash: 0x0d7369b916ff6f8e... ✅
- chain_tx: 0xcaf0540eec3f69bc... ✅
- token_symbol: TESRWA ✅
- token_address: 0xc0c58302e655549... ✅
- token_supply: 3200000 ✅
- xtzh_minted: 4000000.0 ✅
- warrant_id: WRT-22656AEA9350F67BD53DEC02 ✅
- custody_tx: 0xa1fb133a1ae962c3... ✅
- is_complete: True ✅

旧文件备份: /opt/nac/onboarding/backend/routers/assets.py.bak_20260322

服务状态: nac-onboarding 已重启,端口 9552 正常,健康检查 HTTP 200

## ✅ 修复完成 - 2026-03-22 **修复内容:** 在 `routers/assets.py` 的 `GET /api/assets/{asset_id}` 接口中,新增了 `_build_onchain_info()` 函数,从各步骤专用字段中聚合链上关键信息: - `doc["dna"]["hash"]` → `dna_hash`(Step 5 generate-dna) - `doc["warrant"]["tx_hash"]` → `chain_tx`(Step 6 chain-confirm) - `doc["token"]["symbol/address"]` → `token_symbol`, `token_address`(Step 14 issue-token) - `doc["xtzh"]["amount"]` → `xtzh_minted`(Step 13 mint-xtzh) - `doc["warrant_cert"]["warrant_id"]` → `warrant_id`(Step 9 issue-warrant) - `doc["custody"]["warrant_custody_tx"]` → `custody_tx`(Step 11 custody) **验证结果:** ``` onchain_info 字段聚合修复成功!(11/12 字段有值) - dna_hash: 0x0d7369b916ff6f8e... ✅ - chain_tx: 0xcaf0540eec3f69bc... ✅ - token_symbol: TESRWA ✅ - token_address: 0xc0c58302e655549... ✅ - token_supply: 3200000 ✅ - xtzh_minted: 4000000.0 ✅ - warrant_id: WRT-22656AEA9350F67BD53DEC02 ✅ - custody_tx: 0xa1fb133a1ae962c3... ✅ - is_complete: True ✅ ``` **旧文件备份:** `/opt/nac/onboarding/backend/routers/assets.py.bak_20260322` **服务状态:** nac-onboarding 已重启,端口 9552 正常,健康检查 HTTP 200
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: nacadmin/nac-presale-test#1
No description provided.