当前位置: 首页 > news >正文

本地开发Anchor智能合约:效率翻倍的秘密

  前言 本地 anchor 开发环境能解决那些问题:

已经有在线 编辑 anchor 智能合约了,为什么还需要 本地开发环境? 这个也是我刚开始想知道的。后来我试用了一下 发现是真的香! 下面我们来对比下:

✪:我们使用本地开发环境的时候 可以借助 IDE 功能,能在编写状态 看到报错信息。 不用非要 build 才能看到报错信息

✪:可以跳转到 函数的定义,查看函数的方法定义,比如我们想看下
initialize_poll(ctx: Context<InitializePoll>

Content 是个什么东西。在线的是看不了的。本地使用 IDE 很容易就能看到,这对我们代码的编写 学习 和 错误的查找 很是便利。

 ✪ 打包速度很快,测试 调用不用 sol
  • 本地基本上 5秒钟
  • 在线 13 秒

✿ 其实我最看重的是 IDE 提供的实时错误提示功能,这对提升代码开发效率大有帮助。接下来我将详细介绍本地开发环境的搭建步骤。

 1. solana 本地环境的搭建,主要区分 mac 和  linux;官网文档已经介绍很详细了:

https://solana.com/zh/docs/intro/installationhttp://solana 本地环境的搭建因为我这边是 windos 环境,所以走的是  WSL 路线;

我的 windos 打不开应用商店,所以直接 下载的  Ubuntu2204-221101.AppxBundle ,离线安装

走到这里我假定已经安装上 ubuntu 并且所有 依赖了也都安装了:可以查看下面的 安装依赖版本:

  • Rust
  • Solana
  • Anchor
  • Node
  • Yarn

2. 开发前期的配置

2.1  开发网络 钱包 配置

solana config getConfig File: /home/solana/.config/solana/cli/config.yml
RPC URL: https://api.devnet.solana.com
WebSocket URL: wss://api.devnet.solana.com/ (computed)
Keypair Path: /home/solana/.config/solana/id.json
Commitment: confirmed#配置 开发网络
solana config set --url mainnet-beta
solana config set --url devnet
solana config set --url localhost
solana config set --url testnet#配置 开发网络 简写
solana config set -um    # For mainnet-beta
solana config set -ud    # For devnet
solana config set -ul    # For localhost
solana config set -ut    # For testnet

2.2 钱包管理

#查看当前钱包的 地址
solana address#创建钱包
solana-keygen new#空投 本地一般 2个, 但是 在线编辑器 一般 5个
solana airdrop 2#钱包查询余额
solana balance

3. solana anchor 项目创建  

3.1 anchor 项目的创建

环境安装好了之后, 我们就能创建 anchor 项目了, cd 到我们喜欢的项目 路径

solana@DESKTOP-B2Q44I9:~$ ls
anchor-counter  enu-project-name  learning  myproject  project# 创建一个 anchor 项目  然后使用ide  打开
anchor init <project-name>

IDE: 我这里使用的是:RustRover 2025.1.3    

 

Anchor.toml  这个文件 是 anchor 运行环境的配置文件。 这里修改 部署的网络环境 programid

 

3.2 编写 和 运行 

我们先复制一段代码这是一个 计数器功能的脚本

use anchor_lang::prelude::*;// This is your program's public key and it will update
// automatically when you build the project.
declare_id!("HKvWCsAhzhXRfj8zNhNrofjV3dDjSmm42EguMKK3X5n");#[program]
pub mod anchor_counter {use super::*;pub fn initialize(ctx: Context<Initialize>, init_data: u64) -> Result<()> {msg!("initialize from: {:?}", ctx.program_id);//直接给pad 账户复制ctx.accounts.counter.count = init_data;Ok(())}pub fn reset(ctx: Context<UpdateCount>, init_data: u64) -> Result<()> {let counter = &mut ctx.accounts.counter;msg!("increment from: {:?}", ctx.program_id);msg!("previous counter: {:?}", counter.count);counter.count = init_data;//counter.count -= 2;msg!("after counter: {:?}", counter.count);Ok(())}pub fn increment(ctx: Context<UpdateCount>) -> Result<()> {let counter = &mut ctx.accounts.counter;msg!("increment from: {:?}", ctx.program_id);msg!("previous counter: {:?}", counter.count);counter.count = counter.count.checked_add(1).unwrap();//counter.count -= 2;msg!("after counter: {:?}", counter.count);Ok(())}pub fn subtract(ctx: Context<UpdateCount>, count: u64) -> Result<()> {let counter = &mut ctx.accounts.counter;msg!("increment from: {:?}", ctx.program_id);msg!("previous counter: {:?}", counter.count);//counter.count = counter.count.checked_add(1).unwrap();counter.count -= count;msg!("after counter: {:?}", counter.count);Ok(())}
}#[derive(Accounts)]
pub struct Initialize<'info> {#[account(mut)]// user 调用者 签名者, 是否 mut有权限修改信息pub user: Signer<'info>,// counter 数据账户  pda 派生#[account(init,seeds = [b"counter_seed"],bump,payer = user,space = 8 + 8)]pub counter: Account<'info, Counter>,// 程序账户pub system_program: Program<'info, System>,
}#[derive(Accounts)]
pub struct UpdateCount<'info> {// user 调用者 签名者pub user: Signer<'info>,#[account(mut)]pub counter: Account<'info, Counter>,
}#[account]
pub struct Counter {count: u64,
}

我们直接  anchor build, 我这边会报错 "

error[E0599]: no method named `source_file` found for struct `proc_macro2::Span` in the current scope" 

 

 

看样子是生成 IDL json 文件出出错 了。 有两种方式解决

  1. anchor build --no-idl;  以这种方式打包 但是这种方式不能 有idl.json 文件不可取
  2. anchor-lang = "0.31.1" 升级依赖版本,这样就可以了 

 

3.3 启动 Solana 本地 环境:

如果你要 运行 或者 写测试代码 运行 anchor 只能合约,那么你需要开启本地 solana 环境:

 solana-test-validator

这样就能开启一个 本地环境的 solana 运行节点

 

 

然后我们打开 Solana 区块链浏览器。连接到本地环境

 

3.4 部署 anchor 智能合约到本地 环境

 anchor deploy

 

复制上面的 hashSolana浏览器 搜索:就能查看到我们部署的智能合约

这里我们基本上 就可以在本地  开发 和 跑起 Solana anchor 只能合约了,可以进一步提升 开发 Solana智能合约 的效率!

 

 

相关文章:

  • 企业建设电子商务网站的预期收益十大管理培训课程
  • 国外网站模板下载seo需要掌握哪些技术
  • 网站建设方案书模板 备案seo站内优化和站外优化
  • 填写网站备案信息在线生成网站
  • 怎么看网站是谁家做的什么是网站
  • 加工平台网站企业推广是什么意思
  • AAAI 2025论文分享│面向生物医学的具有像素级洞察力的多模态大语言模型
  • 精品方案 | GCKontrolGCAir在汽车ECU协同开发中的应用
  • 小程序入门:跳过域名校验、跨域与 Ajax 问题解析
  • WPF中Converter基础用法
  • 众趣科技与中原地产达成VR看房技术合作,赋能房产经纪数字化转型
  • C++ 快速回顾(二)
  • heygem报错Error: Error invoking remote method ‘model/addModel‘:
  • 16.1 Python应用容器化终极指南:Dockerfile多阶段构建与安全优化实战
  • 适合初学者(kubernetes)k8s脚本安装
  • .NET测试工具Parasoft dotTEST内置安全标准,编码合规更高效
  • 基于 SpringBoot+JSP+ElementUI+jQuery 助农生鲜销售系统设计与实现
  • 使用ASIO的协程实现高并发服务器
  • 数据结构-第三节-树与二叉树
  • 《汇编语言:基于X86处理器》第5章 过程(1)
  • IDE如何快速切换JLINK版本
  • HarmonyOs开发之——TypeScript介绍、入门,及 TypeScript、JavaScript、ArkTs的具体区别解读。
  • 制药行业的精细化管理:GCOM80-2NET自动化解决方案
  • Python+selenium自动化生成测试报告
  • 营业额统计-02.代码开发及功能测试
  • 命名数据网络 | 兴趣包(Interest Packet)