Solana 智能合约开发入门教程(二)

我们已经学会了如何创建智能合约项目、部署合约以及调用连上合约,接下来深入了解一下智能合约编程语言的写法,关注如何写出自己想要的逻辑。我们将会以写一个简单的 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 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值