Below you will find pages that utilize the taxonomy term “web3”
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 …"