参考视频:https://learnblockchain.cn/video/play/1248 参考代码:https://github.com/solana-foundation/gill/tree/master/examples/tokens
hello_gill 是一个 TypeScript 工程
mkdir hello_gill
cd hello_gill
nvm use 22
pnpm install
# 或自己安装一下依赖
# https://github.com/solana-foundation/gill
pnpm add gill esrun dotenv
pnpm add @types/node typescript
账号加载及获取余额
Sol 转账交易
创建 Token (Mint), 默认是没有 Meta 信息的, 例如:这个Token , Mint 账户记录着这些信息: decimals : 小数位数 supply: 当前总供应量 mint_authority: 铸造权限, 谁可以发行 token freeze_authority: 冻结权限:冻结或解冻某个账户的 Token, 防止该账户进行转账或接收 Token。
结构定义参考: https://github.com/solana-program/token/blob/main/program/src/state.rs
Mint 账户代表着 token 的“身份”, SPL Token 相关程序(比如钱包、DEX、DeFi)都以 mint 为判断 token 类型的依据。
创建 Token 有 Meta 信息(注意Token 名称等信息,不是唯一的) 例如这个 Token .
SPL Token 默认是没有 Meta 信息的,惯例是使用 Metaplex 的 Token Metadata Program , 通过 mint 账户作为seed ,创建 metadatePDA 账户来保存
字段 | 描述 |
---|---|
name |
Token 全称,例如:USD Coin |
symbol |
简写,例如:USDC |
uri |
指向 JSON 文件的 URL,JSON 中可包含图标、描述、官网链接等 |
creators |
Token 创作者列表(可选) |
collection |
可选绑定到 NFT 集合 |
seller_fee_basis_points |
用于 NFT 收费的费率(通常为 0) |
使用 gill/programs/token 提供的 buildCreateTokenTransaction 来创建 Token , 例如这个 Token
使用 gill/programs/token 提供的 buildCreateTokenTransaction 来创建 Token2022, 例如这个 Token
铸造 Token, 先创建 ata account (使用 CreateIdempotent 指令,如果账户已经存在,什么都不做) , 然后铸造 Token, 参考tx1 , tx2
铸造 Token , mint_token.ts 的更简单版本,使用一个方法: buildMintTokensTransaction
Token 转账
NFT 创建铸造转账
NFT 合集及合集内NFT 创建铸造转账。 gill 目前的版本创建的 NFT 没法通过Collection 验证, 通过 4_diagnose_collection.ts 排查,发现原因是 gill 无法创建 Master Edition 账户 。
Master Edition 账户: 表示唯一原始版本(或源 NFT),也是作为 NFT 集合(Collection)的标识。 普通的 Edition 账户则表示复制品或印刷品。
创建NFT合集及合集内NFT, 并验证。 这里是一个示例
相关地址参考: metaplex-collection-addresses.json
pnpx esrun 加文件名:
pnpx esrun ./src/transfer_sol.ts