December 6, 2024
什么是Layer 2网络
"我们平时提到的比特币、以太坊、Solana,它们都属于Layer 1网络,而Layer 2(L2) 网络是指基于Layer1网络之上构建的一层网络,它很类似于Layer 1 网络,也是一个独立的区块链。但它的主要目的并不是为了代替 Layer 2 ,而是为了通过扩展 Layer1 层网络从而解决一些在 Layer 1 网络中存在的一些问题,它同时继承了 Layer 1 网络的安全性和去中心化性。\n以太坊存在的问题 这里以以太坊为例,在 L1 网络上随着交易量越来越大,交易频率也越来越频繁,导致Gas(网络交易费)越来越高,一笔交易可能在网络繁忙的时候高达十几美元,导致一些交易可能需要花费好久才可以真正成交到区块网络。\n这两个问题大大提高了用户使用门槛,那有没有好的解决办法呢?\n解决方案 区块链的三个核心特性是 去中心化、安全性和可扩展性,一般简单的区块链架构只能实现其中两个特性(这一点很类似于分布式中的CAP理论)。想要一个安全且去中心化的区块链的话,只能牺牲可扩展性,而这也正是第二层网络发挥作用的地方。\n以太坊生态系统坚定认为,第 2 层扩展是解决可扩展性三难问题的唯一途径,同时保持 …"
December 4, 2024
Solana中如何解析指令
"开发过Solodity的同学都知道在合约开发中,不同指令对应的不同前端Endpoint(API接口),这种开发模式特别的清晰且易维护。那在开发Solana合约时没有有对应的方法呢?\nSolana开发方式 开发 Solana 合约,一般分 Native 和 Anchor 框架开发。\nNative 主要是开发者通过SDK 手动实现所有业务逻辑。 这种模式一般对开发者要求比较高,除了需要了解相关概念外,最重要的还需要知道对应的SDK实现,如PDA账户的创建。\nAnchor框架 推荐使用,只需要一些宏即可以实现一些逻辑,不需要用户关心底层实现。这种开发方式对于指令的处理基本与Solidity中一致,开发者只要搞明白了基本用法就可以了。\n下面主要讲一下在 Native 这种方式下,如何实现指令或附加数据的解析。\n如果你对 指令这个概念不太理解的话,可以将其视为路由。其类于似在mvc开发中控制器路由,如 /user/info、 /user/base、/user/changepwd 之类。\n示例介绍 我们先看一个在 https://beta.solpg.io 网站上创建的一个 Native …"
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: /Users/sxf/.config/solana/cli/config.yml …"
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 中的包管理工具, …"