December 3, 2024
解决编译solana程序 rustc版本号过低的问题
"本方主要介绍在编译solana程序时,提示 rustc 版本号过低无法编译通过的问题。\n问题描述 在参考官方教程 https://github.com/solana-developers/program-examples/tree/main/basics/favorites/native 在本地执行命令\n➜ native git:(main) ✗ cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so 报错\n➜ native git:(main) ✗ cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so error: package `solana-program v2.1.7` cannot be built because it requires rustc 1.79.0 or newer, while the currently active …"
December 2, 2024
在Solana中为什么Token Account没有owner属性
"在上一篇《了解 Solana 中ATA账户与普通账户的关系》中,我们介绍了在Solana中,ATA账户与Token Account 的区别,其中在浏览器记录查看 user2 用户详细的时候,发现它与前两个账户有所区别,它没有 Owner 属性,这在正常情况下是不应该出现的,所以,我们来分析一下,为什么Token Account没有 Owner 属性?\n在 Soalna中,默认情况下所有的新账户都属于 System Program,也只有系统程序拥有的账户才可以作为交易费用支付者(也就是账户里必须的原生币sol)。\n因此示例中正常的 Token Account\n异常账号 出现我这种情况主要有两种情况:\n交易还在处理中,尚未完成,这种情况下一般只需要等待一会就会正常。 账户未被初始化,需要初始化后才恢复正常。 常见的初始化方法:\n空投原生币 转账原生币 通过 SystemProgram.createAccount 创建账号· 在上篇文章里,我们为了演示转账记录,对 payer 和 user1 用户都进行了空投,在空投时将自动对账户进行初始化操作,因此在浏览器里显示的 Owner 是正常状 …"
December 1, 2024
了解 Solana 中ATA账户与普通账户的关系
"本文主要通过示例让大家理解在 Solana 中 ATA 账户与普通账户的关系。\n目的 主篇内容目的是为了让开发者加深对 solana 中 Account 这一概念的理解,同时搞清楚 关联代币账户(ATA) 在 Solana 开发中的使用场景和用法,以及在多个账户之间的交易和手续费扣除情况。\n本篇实现源码会在 github.com/cfanbo/solana-repos/ 中找到。\n这里用到的一些api 函数可以在以下地址找到:\n@solana/web3.js 用户实现通过 Solana JSON RPC API 与 Solana 网络上的帐户和程序进行交互。 @solana/spl-token 用于实现与 SPL Token 和 Token-2022 程序交互。 本文通过脚本实现 SPL Token 标准功能,并不需要调用已创建好的智能合约,因此不需要 programId.\n设置网络环境 ➜ my-solana-program git:(master) ✗ solana config get Config File: …"
November 7, 2024
彻底理解 ERC20 代币标准中的转账逻辑
"在看 Solidity 文档 https://solidity-by-example.org/app/erc20/ 时,对于其中一段授权额的编码逻辑有点不明白,经过一翻查找资料才算彻底搞明白它的操作逻辑,这里特意将其记录一下。\nERC20代币标准 在ERC20代币标准(https://eips.ethereum.org/EIPS/eip-20) 中定义了一系列的接口方法\ninterface IERC20 { function totalSupply() external view returns (uint256); // 返回代币总供应量。 function balanceOf(address account) external view returns (uint256); // 查询某个账户的代币余额。 function transfer(address recipient, uint256 amount) external returns (bool); // 从调用者账户向其他地址转移代币。 function allowance(address owner, address …"
October 17, 2024
IDE 翻译插件 Ai Translate 新版本发布
"IDE 插件 AI Translate 经过几个小版本的迭代,目前已经支持市面上主流的 LLM 服务提供商,主要有以下几个服务提供商:\nOpenAI Anthropic DeepL 智谱 GLM 字节跳动 DeepSeek Alibaba GitHub Gemini Ollama 除此之外,还有两个智能体服务商\n阿里云百炼 扣子 基本已经满足了大多数开发者的翻译需求。\n下载地址:\nJetBrains: https://plugins.jetbrains.com/plugin/25313-ai-translate VSCode: https://marketplace.visualstudio.com/items?itemName=cfanbo.ai-translate 特别是最近对 Ollama 的支持,允许用户使用本地的大模型提供服务,无需像其它几个 provider 一样,还需要注册会员和身份主证。只需要填写一个 URL 地址即可使用,非常的方便。\n由于目前使用的 prompt 是统一的,因此不同 provider 的翻译效果可能不一样,后续有可能提供针对不同 provider …"
October 14, 2024
为 Zed IDE 设置自定义 LLM provider
"在Zed IDE中,默认只支持以下几种 providers :\nZed AI (Configured by default when signed in) Anthropic GitHub Copilot Chat 1 Google AI 1 Ollama OpenAI 这对于国内开发者来说,由于政策原因,想使用起来可能需要借助一些科学上网的方法,这就有点麻烦了。另外国内几个大模型公司也都提供了一定的免费额度的 tokens,如果可以在 Zed 里集成国内几家的大模型,也是一个不错的主意。\n几个月前试图通过自定义Endpoint 的方法绕过官方对使用区域的限制,但一直没有成功。今天重新试了一下仍是无效,本想打算在官方仓库里开发一个自定义provider的功能,就是感觉着有点麻烦,另外更担心个人电脑过旧,编译是一个大问题,于是重新在issue里找到了一个解决办法 https://github.com/zed-industries/zed/pull/13276,就是设置起来有点麻烦。\n本文将其设置方法整理如下。\n配置 settings.json 首先配置 settings.json …"
September 4, 2024
一款基于LLM实现的IDE翻译插件 AI Translate
"AI Translate 是一款基于LLM实现的IDE专用翻译插件,主要为开发人员在查看项目源码时,可以快速对一些代码英文注释进行中文翻译,这对于英文有些弱的同学很有帮助,下面讲一下为什么开发这款IDE插件,以及它比其它同类翻译插件有什么好处。\n为什么开发这款翻译插件 在以前使用IDE看项目源码时,经常遇到长段的英文段落注释信息,理解起来经常会吃力。当时找了一些翻译插件,但都感觉多多少少有些缺陷。\n主要表现以下几点:\n翻译质量差,有些翻译软件可能将一些专业术语翻译成了其它名词,整体翻译后的语句读起来很让人头疼 由于在源码文件里,多数源码说明 信息都是以注释方式出现的,多数翻译软件无法做到忽略注释符后连贯起来翻译。 目前市面比较好用的翻译插件“沉浸式翻译”,可惜只支持浏览器,并不支持IDE 曾有一段时间的做法是手动从IDE里复制信息、删除注释符、重新整理段落,再到网页翻译里进行翻译,有时翻译的效果不太好,可能同时会用两个翻译软件。\n去年看kubernets源码时,再次被折腾一番,当时花了两三个小时开发了一款基于chrome浏览器的插件,主要实现功能是在软件翻译前,将注释符移除和重新整理段 …"
August 10, 2024
Rust学习教程清单
"今年又一次重新学习RUST这门编程语言,并从零开发了一个kv存储系统 minKV,慢慢的越来越有感觉了。\n本篇主要将日常学习中收集的一些入门教程进行一下汇总,希望对于一些想学习这门开发语言的同学有所帮助。\n下面教程按照推荐顺序,由浅到深依次列出。以下内容将不定期的更新,请自行收藏。 如果您有更多好的教程的话,也可以在评论区列出,大家相互学习。\n入门教程 Rust 程序设计语言 https://doc.rust-lang.org/book/ / (中文版)\n官方教程,强烈推荐,同时还有非官方翻译的中文版。遗憾的是这个教程有许多概念介绍的都有点不清不楚,只能通过下方的一些资料自行补习。\nhttps://play.rust-lang.org/ 在线 RUST 程序 Playground,类似golang的 Playground,非常的方便\nRust Language Cheat Sheet 看完官方的教程后,紧接着就看这篇,先了解一些内存布局,后面再看其它教程就更容易理解了\nThe Cargo Book Cargo 是RUST 中的包管理工具, …"
August 10, 2024
在rust中实现自定义错误
"上一篇 我们介绍了一些错误处理的最基本的用法,主要是指对 panic! 、unwrap、expect 和 ? 这些宏或函数的介绍。但这仅仅是一些最基本的处理方法,对于自定义错误这一块并没有做任何介绍。\n实际开发中可能默认的错误类型,并无法满足我们的业务需求,这时一般需要通过定义自己的错误类型来实现。在rust中错误类型是通过 enum 枚举定义的,对此官方文档也做了一些简介,本文主要介绍一些业务开发过程中对错误的处理方案,当然主要是一些最基本的用法。\n自定义 Error 在 Rust 中,自定义错误类型是一种常见的类型,特别是当你需要提供比标准错误类型更具体的错误信息时。Rust 中的错误处理是通过 Result 和 Error trait 来实现的。以下是如何实现一个自定义错误的示例:\n定义一个错误枚举类型。 实现 std::fmt::Display 为自定义错误提供用户友好的错误信息。 实现 std::error::Error trait,这通常是通过派生 Error trait 来完成的。 下面是一个简单的示例:\nuse std::fmt; use …"
July 27, 2024
一款管理 .gitignore 的CLI工具- gitig
"gitig 是一款基于 https://github.com/github/gitgnore 仓库开发的.gitignore 客户端CLI 管理工具,也是每个开发者必不可少的提高工作效率的必具工具。\n它基于官方仓库 https://github.com/github/gitgnore 丰富的 .gitignore 数据源,帮助开发者快速实现添加各类开发项目的git版本控制忽略文件清单。\n开发背景 工作中,经常需要开发各类项目,如基于 vscode 编写 rust 项目,这时为了方便进行Git管理控制,有些项目文件可能并不需要提交到git仓库,需要将一些文件写入 .gitignore 文件进行忽略。\n如果手动编辑 .gitignore文件可能有些麻烦,另外也能会有一些文件项被遗忘或写错,这时如果有一些工具可以将行业能用的忽略配置项一键写入 .gitignore 文件似乎是一个不错的主意。\n其中著名的 https://github.com/github/gitignore 就是一个专门收集各类开发语句或IDE 需要忽略的 .gitignore 推荐配置的仓库,目前star …"