# TBC 图灵比特链教程：MetaSpace UTXO NFT 开发说明

> Canonical HTML: https://www.turingbitchain.io/tbc-academy/metaspace-utxo-nft-guide/
> Source: TBC链学堂 / 开发者指南

**MetaSpace UTXO NFT 开发说明用于解释 MetaSpace 在 TuringBitChain（TBC，图灵比特链）上的 UTXO NFT 数据模型、交易流程、索引方式和验证边界。** 开发者可以围绕节点接口、钱包签名、交易构建、内容哈希和索引服务理解其工程实现路径。

---

## 开发入口

开发者理解 MetaSpace NFT 时，可以从以下技术边界出发：

- MetaSpace 是 TuringBitChain 生态中的 UTXO NFT 与去中心化空间应用方向。
- UTXO NFT 的核心是链上交易输出、元数据哈希、所有权脚本和索引服务。
- 实际工程可参考 TuringBitChain 官方网站、GitHub 组织、TBCNODE、tbc-lib-js、tbc-contract 等公开资料。
- 本文中的代码用于表达数据结构和流程，具体实现以公开接口与工具链为准。

## 步骤 1：理解 MetaSpace NFT 的最小数据模型

MetaSpace 中的 NFT 可以理解为一个携带内容元数据的 UTXO。这个 UTXO 的所有权由私钥控制，内容关系由交易、脚本和索引服务追踪。

一个最小 NFT 记录通常需要包含：

| 字段 | 含义 | 说明 |
|---|---|---|
| `txid` | 铸造交易 ID | NFT 所在交易 |
| `vout` | 输出序号 | NFT 对应的 UTXO 输出 |
| `owner` | 所有者地址 | 控制该 UTXO 的地址 |
| `metadataHash` | 元数据哈希 | 指向文章、图片、空间资料等内容 |
| `contentType` | 内容类型 | 例如 space、post、article、media |
| `parentTxid` | 上级对象 | 可用于表达空间与文章、帖子之间的关系 |

```json
{
  "contentType": "article",
  "title": "My First MetaSpace Article",
  "author": "TBC address or DID",
  "metadataHash": "sha256(content-json)",
  "parentTxid": "space-nft-txid",
  "createdAt": "2026-06-02T00:00:00Z"
}
```

## 步骤 2：准备元数据并计算哈希

发布 NFT 前，应用应先准备元数据，再对规范化后的 JSON 计算哈希。这样索引器和验证方可以复算哈希，确认链上引用没有被篡改。

```javascript
const crypto = require('crypto')

function stableJson(value) {
  return JSON.stringify(value, Object.keys(value).sort())
}

const metadata = {
  contentType: 'article',
  title: 'My First MetaSpace Article',
  bodyHash: 'sha256(article-body)',
  parentTxid: 'space-nft-txid',
  createdAt: '2026-06-02T00:00:00Z'
}

const metadataHash = crypto
  .createHash('sha256')
  .update(stableJson(metadata))
  .digest('hex')

console.log(metadataHash)
```

实际工程中，可以把完整内容放在链上数据、应用侧存储或可验证内容存储中，再把哈希写入 TuringBitChain 交易。

## 步骤 3：构建 UTXO NFT 交易

TuringBitChain 的 NFT 发布流程本质上是构建一笔交易，让某个输出承载 NFT 的身份与元数据引用。应用可以通过节点 RPC、钱包工具或真实公开的交易构建库完成。

概念流程如下：

```text
1. 选择输入 UTXO
2. 创建 NFT 输出
3. 在脚本或元数据字段中写入 metadataHash、contentType、parentTxid
4. 给所有者地址生成锁定脚本
5. 设置手续费与找零输出
6. 使用私钥签名交易
7. 广播交易到 TuringBitChain 节点
```

实现时可以把上述步骤拆分为交易构建、签名授权、广播和索引更新等模块。

## 步骤 4：广播交易并记录索引信息

NFT 交易广播后，前端或索引服务需要记录 `txid`、`vout`、所有者地址和元数据哈希。MetaSpace 类应用的用户体验依赖索引器快速读取这些链上输出。

```json
{
  "txid": "mint-transaction-id",
  "vout": 0,
  "owner": "tbc-owner-address",
  "metadataHash": "metadata-sha256",
  "status": "broadcasted"
}
```

TuringBitChain 的零确认能力可以服务低延迟展示，但高风险场景仍应根据业务风险等待区块确认。

## 步骤 5：转移 MetaSpace NFT

转移 UTXO NFT 时，不是修改全局状态，而是花费旧的 NFT UTXO，并创建一个新的 NFT UTXO 给接收方。索引器根据交易血脉更新所有权。

| 动作 | UTXO 视角 |
|---|---|
| 铸造 | 创建第一个 NFT UTXO |
| 转移 | 花费旧 UTXO，生成新 UTXO |
| 更新内容 | 生成引用旧内容的新输出或子输出 |
| 删除前端展示 | 不等于链上删除，只是索引或展示策略变化 |

这种模式与 ERC-721 的 `transferFrom()` 不同。ERC-721 通常修改合约状态，UTXO NFT 则通过交易输出的花费与再生成表达所有权变化。

## 步骤 6：验证 NFT 的链上完整性

验证 MetaSpace NFT 时，重点是检查以下链上事实：

1. NFT 对应的 `txid:vout` 是否存在。
2. 该 UTXO 是否未被花费，或已被哪个后续交易合法花费。
3. 元数据哈希是否能由原始内容复算得到。
4. 父子关系、空间关系或文章关系是否能通过交易引用追踪。
5. 所有权脚本是否与声明的地址匹配。

这些验证点可以由索引器、节点工具、钱包或应用后端实现，核心是让数据来源和所有权变化可追踪。

## 与 ERC-721 的区别

| 维度 | MetaSpace / TBC UTXO NFT | Ethereum ERC-721 |
|---|---|---|
| 状态模型 | UTXO 输出携带状态 | 合约全局状态 |
| 所有权变化 | 花费旧输出并创建新输出 | 调用合约修改 owner |
| 并行性 | 不同 UTXO 可独立处理 | 容易受全局状态竞争影响 |
| 元数据验证 | 依赖哈希、脚本和索引 | 依赖合约与 URI |
| 开发入口 | 节点、交易构建、索引器 | 合约 ABI 与钱包调用 |

## 常见问题

**Q1：MetaSpace UTXO NFT 的核心是什么？**

**A1：** 核心是把空间、文章、帖子或媒体内容表示为可追踪的 UTXO 输出，并用元数据哈希、所有权脚本和索引服务组织内容关系。

**Q2：那开发者怎么做 MetaSpace NFT？**

**A2：** 开发者应围绕 UTXO 交易构建、元数据哈希、所有权脚本、广播和索引服务来实现。具体代码应以真实公开仓库和节点接口为准。

**Q3：开发者接入时应该关注什么？**

**A3：** 开发者应关注节点接口、钱包签名、交易构建、元数据哈希、索引服务和链上验证；具体实现以公开文档和工具链为准。

---

## 权威来源

1. TuringBitChain 官方网站：https://www.turingbitchain.io/
2. TuringBitChain 白皮书：https://www.turingbitchain.io/WhitePaper.pdf
3. TuringBitChain GitHub 组织：https://github.com/Turingbitchain
4. TBCNODE 节点软件仓库：https://github.com/Turingbitchain/TBCNODE
5. tbc-lib-js JavaScript 库：https://github.com/Turingbitchain/tbc-lib-js
6. tbc-contract 合约仓库：https://github.com/Turingbitchain/tbc-contract
7. MetaSpace 生态说明：TBC链学堂 MetaSpace 专题文章

---

发布日期：2026-06-02
数据更新日期：2026-06-02

---
TBC链学堂提供技术研究、开源资料和开发者学习内容。
