我们已经学会了如何创建智能合约项目、部署合约以及调用连上合约,接下来深入了解一下智能合约编程语言的写法,关注如何写出自己想要的逻辑。我们将会以写一个简单的 USDT 代币合约为例,分析相关的代码,并且理解 Solana 智能合约的写法。
1. 创建项目
用我们已经学会的命令,来创建一个新的项目:
bash
体验AI代码助手
代码解读
复制代码
anchor init usdt_clone
2. 配置文件
可以注意到项目路径 programs/usdt_clone/Cargo.toml 下的这个文件,Cargo 是 Rust 语言常用的包管理器,这个 Cargo.toml 则是包管理器的配置文件,指定了要引入哪些依赖库,以及依赖库的版本。我们自动生成的配置文件里有这么两行:
Rsut
体验AI代码助手
代码解读
复制代码
[dependencies] anchor-lang = "0.31.1"
Anchor 提供的宏是 Solana 智能合约的关键,宏的形式如 #[program]、#[account] 等,这些宏会告诉 Solana 的 SVM 虚拟机,程序从哪里开始、数据结构在哪里定义等。如果没有 Anchor 这个依赖,合约项目就是普通的 Rust 语言项目了,Solana 的智能合约系统无法识别和解析。这也就解释了,Solana 的智能合约,是如何利用 Rust 语言来实现的。
3. 合约地址
我们近距离看一下合约的代码文件 usdt_clone/programs/usdt_clone/src/lib.rs。文件的第一行内容是这样,use 把 Anchor 常用的类型一下子全部导入进来了,这没什么问题,不需要修改,方便我们后续编写程序。:
Rsut
体验AI代码助手
代码解读
复制代码
use anchor_lang::prelude::*;
第二行内容是一个对 declare_id 函数的调用,declare_id 声明了当前这个智能合约项目的 Program ID,也就是合约地址是什么,之前我们提到过,Solana 的智能合约地址,是可以离线生成的。
Rsut
体验AI代码助手
代码解读
复制代码
declare_id!("CFmGdHuqDymqJYBX44fyNjrFoJx6wRkZPkYgZqfkAQvT");
这个合约地址是一个随机值,但不是随意格式的值,它是一个 Ed25529 的公钥。假如你手动把最后一个字符 T 改为 t,这整个字符串就不是一个合法的公钥了,所以这个值可以随机生成,但是不能随便改。那么既然是公钥,它的私钥在哪里呢?在初始化项目的时候,会自动生成一个私钥,文件位置在 target/deploy/usdt_clone-keypair.json,可以打开看到是一些字节数组,declare_id 使用的公钥,就是根据这个私钥生成的。
4. 储存数据结构
接下来我们需要新增一些自己的逻辑,在 declare_id 语句的下方,写入这个代码:
Rsut
体验AI代码助手
代码解读
复制代码
#[account] pub struct Mint { pub decimals: u8, pub mint_authority: Pubkey, }
可以理解为 #[account] 宏是用来定义数据结构的,Anchor 黑魔法会在背后进行一系列操作,让我们可以针对这个数据结构在链上进行读写操作。这里的代码很简单,我们定义了一个叫 Mint 的结构体,这个结构体包含两个属性,decimals

最低0.47元/天 解锁文章
933

被折叠的 条评论
为什么被折叠?



