一、元数据 ≠ 交易核心字段
|
类型
|
内容
|
是否元数据?
|
说明
|
|---|---|---|---|
|
核心字段
|
from、to、value、gas、nonce
|
错
|
区块链共识必须字段
|
|
元数据
|
input data、OP_RETURN、NFT URI、备注、标签
|
对
|
可选、灵活、可扩展
|
二、元数据在不同链上的常见存放方式
|
区块链
|
元数据位置
|
最大容量
|
典型用途
|
|---|---|---|---|
|
比特币
|
OP_RETURN 输出
|
80 bytes
|
存哈希、时间戳、协议标识
|
|
以太坊
|
input data(calldata)
|
无限(付gas)
|
调用智能合约、传参数、存JSON
|
|
BSC/Polygon
|
同以太坊
|
同上
|
低成本存大文件哈希
|
|
Solana
|
instruction data
|
1,232 bytes/条
|
程序调用参数
|
|
Filecoin/IPFS
|
CID 存于链上
|
46 bytes
|
指向链下大文件
|
三、元数据的真实用途案例
|
场景
|
元数据内容
|
存放方式
|
示例
|
|---|---|---|---|
|
NFT铸造
|
{name, image, attributes}
|
以太坊 input data → IPFS CID
|
tokenURI = ipfs://Qm…
|
|
跨境支付备注
|
“Invoice #12345”
|
比特币 OP_RETURN
|
OP_RETURN 696e766f696365203132333435
|
|
链上存证
|
文件SHA256
|
BSC calldata
|
keccak256(doc.pdf) = 0xabc…
|
|
DeFi闪贷日志
|
还款路径、利润
|
emit Event(非元数据,但常与input并用)
|
—
|
四、元数据技术格式(主流标准)
json
// 1. ERC-721 NFT 元数据(链下IPFS)
{
"name": "Bored Ape #1234",
"description": "A unique ape...",
"image": "ipfs://Qm...",
"attributes": [
{"trait_type": "Fur", "value": "Gold"}
]
}
// 2. 比特币 OP_RETURN(十六进制)
6a20 7465737420646174612068657265 // "test data here"
// 3. 以太坊 calldata(ABI编码)
0x12345678 0000000000000000000000000000000000000000000000000000000000000040 ..
元数据 vs 链上数据 vs 链下数据
mermaid
graph TD
A[元数据] --> B[链上小数据<br>(< 1KB)]
A --> C[链上哈希<br>(指向链下)]
C --> D[IPFS/Arweave<br>大文件存储]
B --> E[直接读取]
D --> F[通过CID获取]
开发者如何操作元数据?以太坊(Solidity)示例:
solidity
// 铸造NFT时写入元数据URI
function mintWithMetadata(string memory tokenURI) public {
uint tokenId = ++counter;
_safeMint(msg.sender, tokenId);
_setTokenURI(tokenId, tokenIURI); // 存入 input data
}
比特币(JS库 bitcoinjs-lib):
js
const opReturn = bitcoin.script.compile([
bitcoin.opcodes.OP_RETURN,
Buffer.from('invoice #12345', 'utf8')
]);
风险与最佳实践
|
风险
|
建议
|
|---|---|
|
元数据被篡改
|
存哈希 + 链下签名
|
|
链上存储贵
|
小数据上链,大文件用IPFS
|
|
隐私泄露
|
加密元数据(如零知识)
|
|
标准不统一
|
遵循 ERC-721 / EIP-5573
|
区块链交易的元数据 = “交易的说明书”
它不参与共识,但决定交易能做什么、代表什么、指向哪里。
它不参与共识,但决定交易能做什么、代表什么、指向哪里。
发布者:BlockSky,转载请注明出处:https://www.blocksky.info/post/4116