Anchor框架

微信扫码分享
开发第一个 Solana 程序

开发第一个 Solana 程序

**视频 AI 总结**:该视频是 Solana 开发课,主要讲解 Solana 的账户模型、程序(智能合约)开发流程以及使用 Solana Playground 在线 IDE 进行实战演示。讲师首先回顾作业(安装 Phantom 钱包、领测试币、配置开发环境),然后重点介绍 Solana 中所有事物都是账户的设计理念,以及如何创建账户、部署程序、使用 Anchor 框架编写代码。通过三个案例(加法计算、存储数据、PDA 账户存储用户偏好)完整演示了从编译、部署到交互的流程,并对比了与以太坊的差异。最后布置了编写计数器程序的作业。 **主要内容**: - 安装 Phantom 钱包并领测试币,配置 Solana 开发环境(Rust、Anchor、Solana CLI) - Solana 账户体系:所有内容均为账户,程序无状态,数据存储在独立账户中,默认可升级 - 使用 Anchor 框架开发程序,包含宏、客户端 SDK 等工具 - 在 Solana Playground 上演示三个示例: - 简单加法程序(无数据存储) - 存储数据的账户(用户创建账户并传给程序) - PDA 账户存储用户偏好(种子生成关联账户) - 部署程序需消耗较多 SOL(用于支付租金),并可查看链上交易日志

4 0 0 21 小时前
SPL Token 编程与 CPI 调用

SPL Token 编程与 CPI 调用

视频 AI 总结: 本节课是课程最后一节,主要讲解在 Anchor 框架中编写 Solana 程序,使用 TypeScript 发行 Token,并介绍更现代的 Gear 库(封装了 Solana Web3.js V2)进行 Token 创建、铸造、转账及 NFT 合集操作。同时深入讲解了跨程序调用(CPI)实现 Solana 和 SPL Token 转账,以及 Bank 和 Token Bank 的账户设计,强调通过 PDA 和种子签名替代传统授权,简化用户交互。 关键信息: 1. 介绍 Gear 库:更友好的 TypeScript 客户端,屏蔽底层细节,支持 Token 创建、铸造、转账的简化方法(如 EJCreate、EJTransfer)。 2. NFT 合集:通过 Metaplex 的 Metadata 关联,使用 Collection NFT 和 Verify 机制确保 NFT 归属。 3. CPI 调用:Solana 程序间调用类似以太坊但更高效,签名权限可传递至被调用程序,允许直接操作用户 ATA,无需预先授权。 4. Bank 程序:存款时使用 PDA 控制的全局账户存钱,另存用户存款记录;取款时用种子作 PDA 签名。 5. Token Bank 程序:更复杂,需处理用户 ATA、Mint 地址、PDA authority 等七个账户,通过 CPI 实现 SPL Token 转账。

43 0 0 2026-04-29 08:59
与 Solana 链交互

与 Solana 链交互

视频 AI 总结: 本课程主要讲解了Solana开发中的本地测试环境切换(从Solana test validator换为Surfpool)、Anchor测试与TypeScript测试的实践、后端脚本与前端交互的核心流程(如创建Connection、Provider和Program),以及数据解析方法(包括监听日志、扫区块和PDA账户解码)。同时介绍了Solana Kit和Kodama等新工具的使用。 关键信息: 1. 默认本地模拟链从Solana test validator改为Surfpool,需调整代码。 2. 测试分为Rust测试(Anchor test)和TypeScript测试(使用Mocha框架)。 3. 后端脚本:通过Connection、Wallet、Provider和IDL创建Program实例,随后调用合约指令并解析PDA账户数据。 4. Web3.js常用操作:转账(System Program Transfer)、请求空投、确认交易。 5. 数据获取方式:监听日志/账户变化(适用于新数据);扫区块(通过getBlock遍历交易,按discriminator匹配指令并解码);通过getSignatures获取地址相关交易。 6. 前端交互:推荐使用Solana Kit和Kodama工具,根据IDL生成TypeScript客户端,通过钱包连接后调用合约。 7. 数据解析:自定义程序需手动解码二进制数据(使用Borsh Coder),系统程序可直接解析。

34 0 0 2026-04-28 08:11
Anchor 入门:SPL 与 Token 2022

Anchor 入门:SPL 与 Token 2022

本节课程围绕 **Solana 的 SPL Token 体系** 展开,重点帮助学员建立对 **Mint、Token Account、Associated Token Account(ATA)** 的清晰认知,并理解在 Anchor 程序中如何与 SPL Token(包括 Token-2022)进行交互,为后续涉及资产托管、转账、空投等场景打下基础。 ## 一、核心学习目标 通过本节课程,学员应能够: - 理解 SPL Token 的核心账户结构 - 区分 Mint、Token Account 与 ATA 的实际含义 - 理解 PDA 在 Token 管理与托管场景中的作用 - 理解 Anchor 程序与 TS / Python 脚本之间的职责分工 - 对 Token-2022 的扩展能力建立初步认知 ## 二、SPL Token 的三类核心账户 这是本节课讨论最集中、也是最容易混淆的部分。 ### 1. Mint Account(铸币账户) - 定义一种代币本身 - 记录代币的: - 总供应量 - 精度(decimals) - 铸造权限(mint authority) - 每一种 SPL Token 对应 **唯一一个 Mint** 可以把 Mint 理解为“代币的规格说明书”。 ### 2. Token Account(代币账户) - 用于存储某个地址持有的某种代币余额 - 一个 Token Account 只对应: - 一个 Mint - 一个 Owner - 区块浏览器中常把 ATA 也统称为 Token Account,这也是初学者混淆的来源之一 ### 3. Associated Token Account(ATA) - ATA 是一种**特殊规则下的 Token Account** - 由以下三者唯一确定: - 钱包地址 - Mint - ATA 程序规则 特点包括: - 每个钱包地址 + 每种 Mint,**最多只有一个 ATA** - 是官方推荐的钱包持币方式 - 大多数钱包、前端、SDK 默认只使用 ATA > 可以理解为: > > > **ATA 是 Token Account 的“标准形态”** > ## 三、为什么初学者容易混淆这些概念 课程中反复出现的疑问,本质原因在于: - Solana 把一切状态都叫 Account - 区块浏览器往往统一显示为 Token Account - 历史早期存在“非 ATA 的 Token Account”用法 - 不同教程对命名不够统一 课堂给出的关键结论是: - Mint ≠ Token Account - ATA ⊂ Token Account - 大多数应用场景下,可以直接把 **ATA 当作默认 Token Account 使用** ## 四、PDA 在 Token 场景中的作用 ### 1. 程序账户无法签名 - 程序账户本身不能签名 - PDA 也不能直接签名 - PDA 通过 `invoke_signed` 由程序“代签” ### 2. PDA + ATA 的常见组合 在实际开发中,常见模式包括: - 使用 PDA 作为 Token Account 或 ATA 的 owner - 实现: - 资产托管 - 金库 - 合约控制资金流向 课堂中讨论的典型问题包括: - 是否可以把 USDC 转入 PDA 的 ATA - 是否可以再由 PDA 把资金转出到任意用户的 ATA 答案是: **逻辑上可行,但前提是权限与 signer 设计正确** ## 五、Anchor 与 TS / Python 脚本的分工 这是很多新同学容易误解的点。 ### 1. Anchor 的职责 - 编写和部署链上程序 - 定义: - 账户结构 - 权限规则 - 状态变更逻辑 ### 2. TS / Python 的职责 - 与链上程序交互 - 执行: - 创建 ATA - 转账 - 空投 - 查询状态 因此: - Anchor 不是用来写“脚本”的 - TS / Python 不是用来写“合约逻辑”的 二者是明确分层的。 ## 六、关于 Token-2022 的初步认知 课程后半段涉及 Token-2022,并引发了较多提问。 ### 1. Token-2022 是什么 - SPL Token 的扩展版本 - 提供更多原生能力,例如: - 冻结 - 转账限制 - 扩展字段 ### 2. Anchor 中的抽象方式 - 使用 `TokenInterface` trait - 允许同一套程序逻辑同时兼容: - 传统 SPL Token - Token-2022 如果要使用 Token-2022 的特有能力,仍需要明确指定并处理对应逻辑。 ## 七、开发中的安全与认知提醒 课堂中还反复提到一些重要提醒: - 不要随意在脚本中填写真实主网私钥 - 理解代码在做什么,比“能跑起来”更重要 - API 不需要死记,核心是知道: - 用什么场景 - 去哪里查文档 ## 八、课后实践建议 - 自行梳理一张对照表: - Mint - Token Account - ATA - 使用区块浏览器观察真实代币的账户结构 - 尝试用 Anchor + 脚本完成: - 创建 ATA - 向 ATA 转账 - 使用 PDA 控制 Token 流转 - 把 Token 与账户模型的理解写成自己的笔记 文课程档: https://accu.cc/content/solana/project_rule/ https://accu.cc/content/solana/project_control_by_program/ https://accu.cc/content/solana/project_code/ https://accu.cc/content/solana/project_airdrop/ https://accu.cc/content/solana/project_github/ 项目代码仓库地址: - 原生 rust 实现: https://github.com/mohanson/pxsol-spl - Anchor 实现: https://github.com/mohanson/pxsol-spl-anchor

2215 0 0 2026-01-24 14:47
task2:构建一个 Anchor 金库程序

task2:构建一个 Anchor 金库程序

Task2:https://learn.blueshift.gg/zh-CN/challenges/anchor-vault 助教包:https://github.com/daog1/blueshift_anchor_vault https://github.com/solana-foundation/solana-dev-skill

1444 0 0 2026-01-22 11:33
用 Anchor 重写简单链上数据存储程序

用 Anchor 重写简单链上数据存储程序

本节课程围绕 **Anchor 的基础使用方式** 展开,通过将一个“简单链上数据存储程序”从原生 Solana 写法迁移至 Anchor,实现对 Solana 账户模型、PDA 使用方式以及 Anchor 标准开发流程的系统理解,为后续 Vault 与更复杂合约内容打下基础。 ## 一、核心学习目标 通过本节课程,学员需要掌握以下能力: - 理解 Solana 与 EVM 在数据存储模型上的本质差异 - 熟悉 Anchor 项目的基础结构与开发流程 - 能够使用 PDA 为用户创建并管理专属数据账户 - 掌握账户空间分配与动态扩容的基本规则 - 能够独立排查 Anchor 开发中的常见报错 ## 二、Anchor 开发的基本流程 Anchor 提供了一套高度标准化的 Solana 开发体验,本次课程覆盖了完整闭环。 ### 1. 本地开发与测试流程 典型流程包括: - 安装依赖并初始化环境 - 使用 `anchor build` 编译程序 - 使用 `anchor test` - 自动启动本地 validator - 部署程序 - 执行测试脚本 在开发早期阶段,`anchor test` 是验证逻辑正确性的首选方式。 ## 三、Solana 账户模型与 PDA 的使用 ### 1. Solana 与 EVM 的关键差异 在 EVM 体系中,数据通常直接存储在合约内部。 而在 Solana 中: - **程序本身不存储业务数据** - 数据存储在独立的 **账户(Account)** 中 - 程序通过读写账户来完成状态更新 ### 2. PDA 在本次课程中的角色 本次“用户金库”示例中: - 每个用户对应一个 PDA 账户 - PDA 通过 `seeds + program_id` 派生 - PDA 用来存储用户的金库数据或余额信息 - 用户签名 + PDA 规则共同保证数据归属的安全性 ### 3. 是否需要 Auth 校验 课程中强调了一个常见误区: - PDA 的 owner 通常是 system program - 如果不做额外校验,逻辑层面的“数据归属”并不直观 因此,在真实项目中,建议通过: - 用户 signer - PDA seeds - 明确的字段校验 来确保账户只能被对应用户操作。 ## 四、账户空间(space)分配与计算 账户空间是 Anchor 开发中**最容易出错、但必须理解**的一部分。 ### 1. 基本原则 - Solana 账户在创建时必须一次性声明空间大小 - Anchor 账户默认需要额外 **8 bytes** 用于 discriminator ### 2. 常见写法 课程中对比了两种写法: - `space = 8 + Struct::INIT_SPACE` - 使用辅助函数动态计算空间 ### 3. 动态字段的注意事项 当账户结构体中包含以下字段时: - `Vec<T>` - `String` 必须: - 显式声明最大长度(如 `max_len`) - 否则 Anchor 无法正确计算所需空间 这是初学者最容易忽略、也最常导致运行时报错的点。 ## 五、realloc 与 realloc::zero 的理解 当账户需要扩容时,可以使用 `realloc`。 ### 1. realloc 的作用 - 在已有账户基础上增加空间 - 常用于列表增长、数据追加等场景 ### 2. realloc::zero 的含义 - `realloc::zero = true` - 新增空间会被初始化为 0 - 更安全、更可预测 - `false` - 新空间内容不确定 - 可能带来逻辑或安全风险 在涉及用户资产或关键状态时,推荐开启 zero。 ## 六、常见报错与排查方向 ### 1. Program ID 不匹配(最常见) **错误类型** `DeclaredProgramIdMismatch (4100)` **排查思路** - 确认 `Anchor.toml` 中的 program id - 使用以下命令获取真实部署 id ```bash solana-keygen pubkey target/deploy/<program>-keypair.json ``` - 确保以下三处完全一致 - `declare_id!` - `Anchor.toml` - 实际部署的 program id ### 2. 找不到 .so 文件 **错误表现** - deploy 阶段提示找不到 program 文件 **解决思路** - 确认 `anchor build` 成功执行 - 检查 `target/deploy` 目录下是否生成 `.so` 文件 ### 3. 工具链或 Solana CLI 版本问题 **典型现象** - toolchain 名称无效 - 编译阶段直接失败 **解决思路** - 检查本地 solana-cli 版本 - 按课程推荐版本重新安装或切换 - 保证 Anchor 与 Solana 版本兼容 ### 4. 测试脚本依赖缺失 **错误表现** - `ts-mocha` 找不到 **解决思路** - 先执行 `yarn install` - 确保测试相关依赖已正确安装 ## 七、课后实践建议 - 独立完整跑通一次项目流程 - build - test - deploy - 把以下内容整理成自己的 checklist - PDA 设计 - 权限校验 - space 计算 - realloc 使用场景 - 为毕业设计提前养成习惯 - 每次 deploy 前检查 program id - 关键逻辑不只依赖自动生成代码

1333 0 0 2026-01-22 11:03
将简单链上数据存储器扩展为可交易代币程序

将简单链上数据存储器扩展为可交易代币程序

Mohanson老师通过解答学员实战报错,深入探讨了 Solana 处理高并发时的底层真相及网络协议限制。 ### **1. 并发执行的真相:账户锁定 (Locking)** - **并行转串行**:Solana 虽然支持并行处理,但前提是交易涉及的账户不冲突。 - **热点账户瓶颈**:当成千上万人同时买入同一个流动性池或抢购同一个 NFT 时,由于它们都操作同一个账户,系统会强制将其转为**串行执行**。这解释了为何在极端热点下,用户会感受到“局部拥堵”。 - **交易所方案**:交易所内部转账通常在中心化数据库完成,仅在充提时与链上交互,以规避链上账户锁定的性能限制。 ### **2. 解决包大小限制:LUT (Address Look Up Tables)** - **1280 字节限制**:受 UDP 协议 MTU 限制,单笔交易的数据包极其有限,无法包含过多的账户地址(通常上限为 20-30 个)。 - **LUT 地址查找表**:当业务逻辑极其复杂(如聚合器交易涉及 100 个账户)时,通过 LUT 在链上建立“通讯录”,交易中只需传“索引编号”即可。这极大压缩了交易体积,是复杂应用开发的必备技巧。 ### **3. 交易费用构成与报错排查** - **费用公式**:`Total Fee = Fixed Transaction Fee + Priority Fee + Account Rent`。 - **优先费 (Priority Fee)**:在高并发期间,通过增加优先费可以获得验证者的优先打包权。 - **报错解析**:`Attempt to debit an account but found no record`。这通常是因为目标账户尚未创建或余额不足以支付租金押金,导致交易模拟阶段就报错回滚。 ### **4. PDA (Program Derived Address) 的付费与管理** - **谁使用谁付费**:PDA 的创建费用(租金)由用户支付。 - **管理权限分离**:用户虽付了钱,但没有私钥,无法直接动用资金;只有 Owner 程序能通过 `invoke_signed` 根据 Seeds 派生签名来管理其中的资产。 --- --- **总结陈述:** 本次课程深入到了 Solana 的**工程边界**。理解“账户锁定导致的串行化”能帮助你设计更好的业务并发逻辑;而掌握 **LUT** 和 **Rent 管理** 则是解决实战中“发不出交易”和“交易莫名报错”的关键。 文档:https://solana.com/zh/docs/intro/installation 附件中有社区小伙伴 Dean 分享的课程笔记

1776 0 0 2026-01-16 12:20
Breakpoint 2025:Anchor 的现在与未来

Breakpoint 2025:Anchor 的现在与未来

视频 AI 总结: 该视频主要介绍了 Anchor 的现状和未来发展方向,特别是即将发布的 Anchor 1.0 版本和正在规划的 Anchor 2.0 版本。Anchor 1.0 致力于成为一个稳定可靠的框架,解决开发者和审计人员面临的一些常见问题,例如重复账户问题。Anchor 2.0 则着眼于优化性能和扩展性,计划采用 Pinocchio 作为底层,并提供更灵活的 trait 系统,允许开发者自定义框架行为。此外,视频还介绍了 Anchor Fuzz 和 Anchor Linting 等新工具,旨在提升 Solana 生态系统的安全性。 关键信息: * **Anchor 1.0 发布候选版已发布:** 解决了重复可变账户的问题,并升级了 Borscht 依赖。 * **Anchor 工具链:** 将 SurfBull 等工具集成到 Anchor 中,简化了依赖管理。 * **社区参与:** 鼓励开发者参与社区讨论,提供反馈和建议。 * **安全审计:** Anchor 已经过审计,并设立了漏洞赏金计划。 * **Anchor 2.0 规划:** 采用 Pinocchio 作为底层,提供零拷贝支持和更灵活的 trait 系统。 * **Anchor Fuzz:** 引入原生模糊测试工具,帮助开发者发现潜在漏洞。 * **Anchor Linting:** 引入静态代码分析工具,帮助开发者避免常见错误。

833 0 0 2026-01-11 19:53
在程序上使用 SPL Token

在程序上使用 SPL Token

视频 AI 总结: 该视频主要讲解了如何使用 TypeScript 创建 Token,并在 Anchor 和 Solana 程序中调用 SPL 程序。视频介绍了 gill 库的使用,包括创建和发行 Token,以及进行转账。同时,视频还演示了如何在 Anchor 中实现 SOL 和 Token 的转账功能,类似于 Solidity 中的存款功能。此外,视频还详细讲解了 NFT 合集的创建和验证过程,以及如何在 Anchor 中实现 Server 的转账和 Token 的转账。 关键信息: 1. gill 库是 Solana/Web3.js 的 V2 版本上的封装,简化了 Token 的创建、发行和转账操作。 2. 创建 Token 的步骤包括创建 mint 账户、计算账户空间、初始化账户,并创建包含多个指令的完整交易。 3. gill 库提供了 easy\_create 方法,可以封装多个指令,简化 Token 的创建过程。 4. NFT 合集的创建需要先创建一个合集 NFT,然后在子 NFT 的 Metadata 中指定合集信息,并通过验证关联。 5. 在 Anchor 中调用 SPL 程序需要使用 CPI(跨程序调用),并传递所需的账户和参数。 6. 实现存款功能需要设计多个账户,包括存放资金的 Bank 账户和记录用户存款金额的 User 账户。 7. Token Bank 的实现需要一个程序管理的 ATA 账户,并使用 PDA 账户作为权限控制者。

166 0 0 2025-11-01 08:24
使用 Solana Kit 和 Anchor 交互 (迁移旧 web3.js 应用)

使用 Solana Kit 和 Anchor 交互 (迁移旧 web3.js 应用)

该视频的核心内容是演示如何将一个使用旧版 web3.js 构建的 Solana 应用程序迁移到使用 Solana Kit (原 web3.js v2)。视频展示了如何使用 Solana Kit 与 Anchor 程序进行交互,包括测试和前端开发。 **关键论据/信息:** * **Solana Kit 是新一代的 Solana JavaScript/TypeScript 技术。** 它由 Anza (原 Solana Labs) 开发,用于与 Solana 程序进行交互。 * **Anchor 仍然是 Solana 上最流行的链上应用(智能合约)开发框架。** * **Codama 用于生成 TypeScript 客户端。** Codama 读取 Anchor IDL 文件,并生成 TypeScript 客户端代码,用于与 Anchor 程序进行交互。 * **Solana Kit 用于与 Solana 上的任何程序进行交互。** 它可以与 Codama 配合使用,向 Anchor 程序发送指令,也可以直接与 Solana 的其他程序(如 Token Program)进行交互。 * **视频演示了如何将一个简单的投票程序从 web3.js 迁移到 Solana Kit。** 演示包括: * 更新测试代码,使用 Codama 生成的客户端和 Solana Kit 发送指令。 * 构建 React 前端,使用 Solana Kit 连接钱包(如 Phantom, Solflare),获取账户信息,并向 Anchor 程序发送指令。 * **强调学习 Solana 开发时,应关注最新的技术和内容。** 建议关注近六个月内发布的内容,避免使用过时的代码和库。 * **Solana Kite 是一个高阶库,简化了 Solana Kit 的使用。** 它封装了常用的操作,减少了样板代码。

1168 0 0 2025-06-25 10:57
L5_Anchor开发与测试

L5_Anchor开发与测试

* Anchor 是什么 * 测试 代码库:https://github.com/666pulse/solana-vote-demo

448 0 0 2025-03-26 10:05
实现可编程货币

实现可编程货币

实现可编程货币 代码库: https://github.com/solana-developers/developer-bootcamp-2024 中文翻译由 Solar 及 登链社区组织翻译.

1528 0 0 2024-12-23 20:58
实现 DEFI 借贷协议 #2

实现 DEFI 借贷协议 #2

实现 DEFI 借贷协议 #2 代码库: https://github.com/solana-developers/developer-bootcamp-2024 中文翻译由 Solar 及 登链社区组织翻译.

1563 0 0 2024-12-23 20:58