Jacky Gu

Solana开发笔记: 上传metadata到IPFS

01 Jan 2025 Share to

上传metadata到IPFS

每个代币都需要一个metadata的TOKEN_URI,可以在IPFS、Arweave等web3存储服务商保存元数据,这里介绍如何使用thirdweb来将图片和metadata的json文件上传到IPFS。

一般的元数据格式为:

{
  "name": "TOKEN_NAME",
  "symbol": "TOKEN_SYMBOL",
  "image": "IMAGE_URI", 
  "description": "TOKEN_DESCRIPTION"
}

metadata.json文件中,必须要有:name、symbol、image、description,其他的可选。

复杂一些的元数据中还包括了创建者信息,社交信息等,如下:

{
  "name": "TOKEN_NAME",
  "symbol": "TOKEN_SYMBOL",
  "image": "IMAGE_URI", 
  "description": "TOKEN_DESCRIPTION"
  "creator": {
    "name": "TOKEN_CREATOR_NAME",
    "site": "TOKEN_CREATOR_SITE"
  },
  "extensions": {
    "website": "TOKEN_WEBSITE",
    "twitter": "TOKEN_TWITTER",
    "telegram": "TOKEN_TELEGRAM",
    "discord": "TOKEN_DISCORD"
  }
}

元数据不是链上保存的。

上传元数据至IPFS至少要分两个步骤:

  • 1- 上传图片,获得IMAGE_URI
  • 2- 组装成metadata.json文件,上传metadata.json,获得TOKEN_URI

可使用thirdweb上传文件到IPFS,使用命令行:

npx thirdweb upload <path file> -k <secret key> 

其中secret key需要在thirdweb上免费生成。

举例:

下载一个图片文件,执行上述命令,上传到IPFS并得到IPFS的cid:ipfs://QmanqoqeqGPrrv5V6VkMgHxEJU2PMEZfjsyKcRgAQMUS13

组装一个metadata.json文件:

{
  "name": "Solana test token",
  "symbol": "STT",
  "image": "https://ipfs.io/ipfs/QmanqoqeqGPrrv5V6VkMgHxEJU2PMEZfjsyKcRgAQMUS13", 
  "description": "This is a test spl token"
}

将该json文件上传到IPFS,得到cid: QmbYtkDmQdtzKHUV4WYKysGNX3E36xdF8uD3g6fAPQsSgd

注意:

Solana生态中的浏览器和钱包,绝大多数只支持https,所以不能使用ipfs://作为开头,而需要加上一个可靠的Gateway,转换成https://