Solana —— Token 基础

什么是 Token?

在 Solana 区块链上,Token 是一种数字资产,用于表示价值或所有权。这些 Token 可以代表各种类型的资产,如货币、股权、积分、NFT(非同质化代币)等。

Token 的分类

  • 同质化代币(Fungible Tokens):代表同类型和同价值的可互换和可分割资产(例如 USDC)
  • 非同质化代币(Non-Fungible Tokens, NFTs):代表不可分割资产的所有权(例如艺术品)

SPL (Solana Program Library)

SPL 是一组用于在 Solana 区块链上构建去中心化应用程序的智能合约库。SPL 提供了多种标准和工具,使开发者能够更容易地创建和管理代币。

SPL 的核心组件包括:

  • Token Program(代币程序):包含与网络上的代币交互的所有指令逻辑
  • Mint Account(铸币账户):代表一种特定类型的代币,并存储关于代币的全局元数据,如总供应量和铸造权限
  • Token Account(代币账户):跟踪特定地址拥有的特定类型代币的单位数量

核心概念

1. Token Program(代币程序)

Token Program 是 SPL 中最核心的部分,包含与网络上代币交互的所有指令逻辑。

主要功能:

  • 创建代币及初始化代币账户
  • 在不同账户之间转移代币
  • 授权和撤销授权
  • 查询代币余额

2. Mint Account(铸币账户)

Mint Account 是每个 SPL Token 的核心账户,负责代币的定义和管理。它包含了代币的全局属性,比如总供应量和小数位数。每个代币都由一个独立的 Mint Account 来表示。

主要属性:

  • Decimals(小数位数):定义代币的最小单位,常见取值是 6 或 9
  • Supply(供应量):代币的当前总供应量
  • Mint Authority(铸币权限):有权创建新代币单位的账户地址
  • Freeze Authority(冻结权限):可以冻结或解冻代币账户的权限

主要功能:

  • 铸造代币:增加总供应量并分配给指定的 Token Account
  • 销毁代币:减少总供应量

创建 Mint Account

1
2
3
4
5
6
7
sol@Sunshine:~$ spl-token create-token
Creating token 75nCeiHP6AcHcKiVr24JKxSWTPu9k4fX5Teem3pGAC8F under program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA

Address: 75nCeiHP6AcHcKiVr24JKxSWTPu9k4fX5Teem3pGAC8F
Decimals: 9

Signature: 3R71oyLWt2MKi3EUHttpJg7XnWxyYHheBF7vShkc2n6aQhLn1GWCEzqjqvqARFKVCQqucm3sGxoXum4k1BWf413a

查看 Mint Account 信息

1
2
3
4
5
6
7
8
9
sol@Sunshine:~$ spl-token account-info --address 75nCeiHP6AcHcKiVr24JKxSWTPu9k4fX5Teem3pGAC8F

SPL Token Mint
Address: 75nCeiHP6AcHcKiVr24JKxSWTPu9k4fX5Teem3pGAC8F
Program: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
Supply: 0
Decimals: 9
Mint authority: 8BG3BQmLhCsayYUGinVyUMzfni7CM1WiVApqZmGaJbjW
Freeze authority: (not set)

3. Token Account(代币账户)

Token Account 用于持有特定 SPL Token 的账户。每个用户或合约如果想要持有某种 SPL Token,必须有一个与该 Token 对应的 Token Account。每个 Token Account 只能对应一个特定的 Mint(代币类型),所以如果用户要持有多种代币,就需要为每种代币分别创建一个 Token Account

主要属性:

  • Balance(余额):账户中持有的代币数量
  • Owner(账户拥有者):控制该账户的用户或合约地址
  • Mint(关联铸币账户):该账户与哪个 Mint Account 相关联
  • Delegation(代理账户):被授权可以代表账户所有者转移代币的地址
  • State(状态):账户是否处于冻结状态

主要功能:

  • 接收和发送代币
  • 代理权限管理:可以设置 Delegation 来授权第三方管理该账户的代币

创建 Token Account

1
2
3
4
sol@Sunshine:~$ spl-token create-account 75nCeiHP6AcHcKiVr24JKxSWTPu9k4fX5Teem3pGAC8F /home/sol/.config/solana/wallet2.json
Creating account 65bUqQKj4Axew8Z7KpXGodFowdXbWBE4ne8ocUZMoKmz

Signature: 3p6FztvPYgfzR2eBsKEFunTszbvsQgycXgwn8wNe1rBDdzDtP3jp4Z7XWgL91FbXTPGssy9bNdEiVPCqmkdHZX82

查看 Token Account 信息

1
2
3
4
5
6
7
8
9
10
11
12
sol@Sunshine:~$ spl-token account-info --address 65bUqQKj4Axew8Z7KpXGodFowdXbWBE4ne8ocUZMoKmz

SPL Token Account
Address: 65bUqQKj4Axew8Z7KpXGodFowdXbWBE4ne8ocUZMoKmz (Aux*)
Program: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
Balance: 100
Decimals: 9
Mint: 75nCeiHP6AcHcKiVr24JKxSWTPu9k4fX5Teem3pGAC8F
Owner: 8BG3BQmLhCsayYUGinVyUMzfni7CM1WiVApqZmGaJbjW
State: Initialized
Delegation: (not set)
Close authority: (not set)

4. Associated Token Account(关联代币账户,ATA)

ATA 是一种由钱包地址和 Mint 通过特定规则派生出的标准化 Token Account 地址,每个钱包和某个代币的 Mint 至多对应一个 ATA。

特点:

  • 唯一性:每个钱包地址只能有一个和某个 Mint 关联的 ATA
  • 自动生成:Solana 提供了工具来自动生成 ATA,开发者不需要手动管理账户
  • 简化管理:自动处理钱包地址与代币账户之间的关联

创建 ATA

1
2
3
4
sol@Sunshine:~$ spl-token create-account 75nCeiHP6AcHcKiVr24JKxSWTPu9k4fX5Teem3pGAC8F
Creating account DHvRpFVRXySnAhq5T3Y3nSHVpGS22NRX4gcWGXzTUxLL

Signature: 388vYjLh9HVNYNeWcsa44zvdWgALHVTXC3dqHJbntpJN5P41Poj6G9zGHPPz2q1fysFAxRqPWKww2NUZKVwasoE6

查看 Associated Token Account 信息

1
2
3
4
5
6
7
8
9
10
11
12
sol@Sunshine:~$ spl-token account-info --address DHvRpFVRXySnAhq5T3Y3nSHVpGS22NRX4gcWGXzTUxLL

SPL Token Account
Address: DHvRpFVRXySnAhq5T3Y3nSHVpGS22NRX4gcWGXzTUxLL
Program: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
Balance: 100
Decimals: 9
Mint: 75nCeiHP6AcHcKiVr24JKxSWTPu9k4fX5Teem3pGAC8F
Owner: 8BG3BQmLhCsayYUGinVyUMzfni7CM1WiVApqZmGaJbjW
State: Initialized
Delegation: (not set)
Close authority: (not set)

铸造代币操作

铸造到 ATA 账户

Mint Account 会自动关联到当前钱包的 ATA 账户,无需指定接收账户:

1
2
3
4
5
6
sol@Sunshine:~$ spl-token mint 75nCeiHP6AcHcKiVr24JKxSWTPu9k4fX5Teem3pGAC8F 100
Minting 100 tokens
Token: 75nCeiHP6AcHcKiVr24JKxSWTPu9k4fX5Teem3pGAC8F
Recipient: DHvRpFVRXySnAhq5T3Y3nSHVpGS22NRX4gcWGXzTUxLL

Signature: 32wtkcw2Xjv1Y1rADNuzCDPE6XtJhRTk3oxusPXMFRqKX6WhaU6PNZE3i3Uj6hDcYkfLvarFbki1HoQFHyqP6Wfk

铸造到指定 Token Account

给普通 Token Account 铸造时,需要通过 -- 指定目标账户地址:

1
2
3
4
5
6
7
sol@Sunshine:~$ spl-token mint 75nCeiHP6AcHcKiVr24JKxSWTPu9k4fX5Teem3pGAC8F 100  -- 65bUqQKj4Axew8Z7KpXGodFowdXb
WBE4ne8ocUZMoKmz
Minting 100 tokens
Token: 75nCeiHP6AcHcKiVr24JKxSWTPu9k4fX5Teem3pGAC8F
Recipient: 65bUqQKj4Axew8Z7KpXGodFowdXbWBE4ne8ocUZMoKmz

Signature: 5BWCTCSo2BxqkKWQwsgY7KRr3d1an2KGw4taa2Nao45jnE1sDfsA9EpgwYmTxoLBUp2x5pStJxp7JhKGZas3hbLM

总结

Solana 的 Token 系统通过 SPL Token Program 提供了完整的代币管理功能。理解以下三个核心概念是使用 Solana 代币的基础:

  1. Mint Account(铸币账户):定义代币类型和全局属性,如供应量、小数位数、铸币权限等
  2. Token Account(代币账户):持有特定代币的账户,记录余额和所有权
  3. Associated Token Account(关联代币账户):标准化的代币账户,自动与钱包地址绑定,每个钱包和某个 Mint 仅对应一个 ATA

这套系统支持创建各种类型的数字资产,从可替代代币(如 USDC)到不可替代代币(NFT),为 Solana 生态系统提供了强大而灵活的基础设施。

Hooray!Solana Token 基础完成!!!