小试牛刀-SOL链创建Token

目录

1.编写目的

2.账户结构

3.环境及使用依赖

4.步骤分解

4.1.导入相关依赖

4.2. 初始化变量

4.3.  创建并初始化Mint Account

4.4. 创建并初始化Metadata Account

4.5. 发送创建和初始化mint Account

4.6 铸造Token

5.源码分享


Welcome to Code Block's blog

本篇文章主要介绍了

[小试牛刀-SOL链创建Token]
❤博主广交技术好友,喜欢文章的可以关注一下❤

文章为在测试网络进行,不涉及任何其他建议!!


1.编写目的

        最近需要编写SOL合约进行SPL Token的转移,因为在测试网上需要自己部署测试Token,同时为了更加美观,Token需携带metadata数据(对名称、头像等)进行定义.在此对创建过程进行记录,希望帮助到有需要实现相关功能的朋友.

2.账户结构

        SOL链内的所有数据都存储在账户中,创建Token需要使用不同的程序(合约)创建三个Account,结构图如下:

60670c95ade44a6aa49d00fd2de3364e.png

 Mint Account:使用TOKEN_PROGRAM(Token相关操作)程序,创建一个Mint Account,这个账户的作用是用来铸造Token.

MetaData Account:使用METADATA_PROGRAM(metadata数据相关操作)程序,创建一个MetaData账户,用来存储Token基础信息(名称、图标/头像).

ACT Account: 铸造出的Token需要ACT Account进行接收,这需要使用用户和mint Account进行计算然后进行创建,用于接收铸造完成的Token.

3.环境及使用依赖

依赖名 版本号
@metaplex-foundation/mpl-token-metadata 2.1.1
@solana/spl-token 0.4.8
@solana/web3.js 1.95.3
{
  "scripts": {
    "test": "ts-node ./test/createmint.test.ts"
  },
  "dependencies": {
    "@metaplex-foundation/mpl-token-metadata": "^2.1.1",
    "@solana/spl-token": "^0.4.8",
    "@solana/web3.js": "^1.95.3",
  },
  "devDependencies": {
    "@types/node": "^22.5.0",
    "ts-node": "^10.9.2",
    "typescript": "^5.5.4"
  }
}

        这里使用TypeScript和node环境进行代码编写,主要需要用到@metaplex-foundation/mpl-token-metadata(用于metadata Account初始化),@solana/spl-token(mint Account初始化和ACT Account创建),@solana/web3.js(用于基础Account创建和一些工具类).

注:这里尽量保持引入版本一致,因为不同版本的方法名称可能不同.

4.步骤分解

4.1.导入相关依赖

import { Keypair, PublicKey, SystemProgram,Connection,sendAndConfirmTransaction, Transaction } from "@solana/web3.js";
import { MINT_SIZE, TOKEN_PROGRAM_ID, createInitializeMint2Instruction, getOrCreateAssociatedTokenAccount,mintTo } from "@solana/spl-token";

### 解析 SA-Token-JWT 生成的 JWT Token 为了解析由 SA-Token 使用 JSON Web Token (JWT) 方案创建的令牌,通常会涉及到验证签名以及解码载荷两部分工作。由于 SA-Token 支持 JWT 并允许通过配置启用此功能[^1],当应用程序接收到带有 `Authorization` 头部携带 token 的 HTTP 请求时,框架内部已经处理了大部分复杂的逻辑。 然而,在某些情况下可能需要手动解析这个 token,比如在调试过程中或是构建自定义中间件的时候。此时可以利用第三方库如 PyJWT 或者其他语言对应的 JWT 库来进行操作。下面是一个基于 Python 和 PyJWT 库的例子: ```python import jwt secret_key = 'your_secret_key' # 这里替换为你自己的密钥 algorithm = 'HS256' def decode_jwt(token): try: payload = jwt.decode(token, secret_key, algorithms=[algorithm]) return payload except jwt.ExpiredSignatureError: print('Token expired') except jwt.InvalidTokenError: print('Invalid token') # 假设这是从前端传来的Bearer类型的token字符串 bearer_token = "Bearer your.jwt.token.here" auth_token = bearer_token.split(" ")[1] decoded_data = decode_jwt(auth_token) print(decoded_data) ``` 这段代码展示了如何接收来自客户端的一个 Bearer 类型的 token 字符串,并从中提取实际的 JWT 部分用于后续的解析过程。需要注意的是,这里的 `secret_key` 必须与服务端用来签署 token 的密钥相匹配;而算法则取决于当初签发 token 所使用的哈希函数,默认为 HMAC SHA-256 (`HS256`)。 对于 Java 开发者来说,则可以直接借助于 Sa-Token 自身提供的工具类完成相同的工作,无需额外引入依赖项。具体可查阅官方文档获取更多细节[^3]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code blocks

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值