当前位置: 首页 > 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智能合约 的效率!

 

 

http://www.lryc.cn/news/575627.html

相关文章:

  • windows下 tomcat的安装部署
  • 机器学习17-发展历史补充
  • 第一章-人工智能概述-机器学习基础与应用(1/36)
  • spring-ai 1.0.0 (1)模型调用能力
  • day43 复习日(猫狗图像分类)
  • 算法第48天|单调栈:42. 接雨水、84.柱状图中最大的矩形
  • 从零开始理解百度语音识别API的Python实现
  • 抖音图文带货和短视频带货有什么区别
  • 深入解析设备管理系统新趋势:物联网与云原生驱动的智能化实践
  • OpenBayes 一周速览丨Nanonets-OCR-s深度语义理解,精准结构化转换;HLE人类问题推理基准上线,含2.5k题目,助力封闭式评估体系构建
  • COZE API上传文件 直接从前端发送就可以,而通过后端发请求给CozeAPI就不行,为什么?
  • 【百日精通JAVA | 数据结构篇】 一文了解泛型体系
  • 新手向:Anaconda3的安装与使用方法
  • AMS流媒体服务器-新版(h265-flv)
  • FFMpeg的AVFrame数据格式解析
  • IDE如何快速切换JLINK版本
  • vue 开启 source-map 后构建速度会很慢
  • Android杂谈(一):悬浮球
  • 随记:WebMvcConfigurationSupport 和WebMvcConfigurer 的区别
  • DevSecOps时代下测试工具的全新范式:从孤立到融合的质变之路
  • ubuntu22.04系统kubeadm部署k8s高可用集群
  • 伏羲微官网企业建站授权证书/防伪查询/三合一应用【前端开源】
  • 2D写实交互数字人如何重塑服务体验?
  • [特殊字符] Windows 查看端口占用及服务来源教程(以 9018 端口为例)
  • TCP 重传机制详解:原理、变体与故障排查应用
  • Python 多版本与开发环境治理架构设计
  • 【鸿蒙开发实战】蓝牙功能的开发
  • Vue3 中 Axios 深度整合指南:从基础到高级实践引言总结
  • WPF Binding 的 Mode 属性
  • 12345政务热线系统:接诉即办,赋能智慧城市治理