solana杂谈(1)

本文适用于“只需大致了解 Solana”的读者,部分说法可能不够准确或不够深入。如需详细了解,建议阅读 Solana 的官方文档:https://solana.com/zh/docs

solana账户模型

solana 上所有数据都是储存在账户中,也就是说你可以通过账户信息拿到链上的任意状态(将区块链理解为一个大型状态机).

solana 账户结构如下:

  • 钱包账户(Wallet Account)data 字段为空。这类账户由椭圆曲线生成的公私钥对管理,拥有私钥的用户可以通过签署并发送交易来修改链上状态。
  • 程序账户(Program Account)data 字段包含 Solana 程序的指令集及其 WASM 二进制代码。
  • 数据账户(Data Account)data 字段包含所有编码后的数据。

在 Solana 中,程序账户和数据账户的地址通常是通过特殊方式生成的,并非由椭圆曲线公私钥对直接控制,因此无法直接通过私钥生成签名。它们的状态修改通常通过程序派生地址(Program Derived Address, PDA)代理签名,在状态机内部进行。

账户租金

账户租金是solana避免数据臃余的处理方案(evm是通过释放空间,返回eth的方式),对于solana上所有的用户都需要支付租金(或者余额大于一定值免租).

  • 钱包账户:租金由账户所有者自己支付。
  • 程序账户:租金通常由程序的创建者一次性支付,以确保程序的可持续运行。

租金豁免:如果账户中存储的 SOL 数量足以支付该账户两年期的租金,则该账户可以获得租金豁免,无需再支付租金。这意味着账户将永久存在,除非被关闭。

  • 数据账户(Data Account):通常是程序用于保存数据的账户,其租金由创建该数据账户的交易发起者支付。

数据账户管理:对于核心项目数据,通常在程序部署时进行统一初始化,以防止意外删除。对于用户自行管理的数据账户(如链上的 Token 账户),则由用户自己创建并管理租金。

rent_epoch:这是一个遗留字段,源于 Solana 曾经有一个机制会定期从账户中扣除 lamports。虽然此字段仍然存在于账户类型中,但自从租金收取被弃用后,它已不再使用。 租金已经被弃用了

solana的token标准

solana上的token不像evm有多种token执行标准(erc20/erc721/erc1155),也不会每个token都上去部署一个合约。

solana上的token由token program统一管理(token progeam有两个版本,这里不做展开),接下来我们从token的生命周期来看一下solana的脱可能标准

  1. 项目方创建token

    项目方创建token实际上是向token program发送一个mintinit指令,在token program中登记一个token 以及记录怎么发行token

    不同于evm,不是一个合约,由合约管理token

  2. mint token

    在token初始化时制定了mint权限,拥有mint权限的账户合约mint token,注意每一个token有他独立的mint account.mint account的权限

  3. 创建token account

    钱包用户通过token program,创建对应token 的token account(实际上也是一个数据账户),用于保存钱包用户的token的状态

  4. token transfer

    token transfer指令由钱包用户发起,由token program执行,修改发送方/接收方的token account 里面的余额状态,实现token的转账

另外还有销毁和授权,这里不做展开

在solana上发行token不需要额外的部署代码

对于nft类的token,solana并不严格区分token类型,nft和ft共享相同的指令集(指令里面也没有区分这两者)

solana上的nft

solana nft转账之类的操作在token program上实现,生命周期通常由类似 Metaplex这类token标准管理(这些token是社区推动的标准,不同于token program预编译在solana主链上)

Metaplex这类标准通过控制token program mint不同的token来实现nft,也就是对于每一个nft的生成,实际上是在token program上执行 mintinit操作(!!! 不是mint操作),每一个nft的mint相当于是发行一个token,Metaplex程序控制发行量,从而实现nft

solana合约标准

solana使用的BPF vm执行合约

合约生命周期有BPF loader系列系统合约管理.通常情况下需要将合约编码成wasm的二进制码然后部署在solana链上

对于合约开发,合约需要与solana链交互,所以并不是所有语言都可以开发solana合约,需要对应语言实现solana program sdk 并且可以编译成wasm的二进制码

目前来看只有(rust/c/c++)其他语言有一些社区实现的sdk,可能存在问题

solana的共识

Solana 采用的是一种混合共识机制,结合了以下几个关键技术:

  • Proof of History (PoH) — 历史证明

这是 Solana 最核心的创新点。

PoH 通过一个加密哈希函数(SHA-256)以连续的方式产生可验证的时间顺序证明,相当于给所有交易和事件打上了时间戳。

这个机制让网络无需等待区块时间戳验证,极大地提高了交易处理速度和吞吐量。

  • Tower BFT — 基于 PoH 的拜占庭容错共识

Tower BFT 是 Solana 的一种优化的 Practical Byzantine Fault Tolerance (PBFT) 机制。

利用 PoH 生成的全局时间顺序,节点可以在这个时间线上锁定状态,从而更高效地达成共识。

节点通过投票和锁定投票权重防止双重花费和恶意行为。

  • Turbine — 高效的数据传播协议

用于快速分发数据包,减少网络拥堵,提高广播效率。

  • Gulf Stream — 交易转发协议

允许交易在网络中提前转发给验证者,减少确认时间。

  • Sealevel — 并行智能合约运行时

允许同时处理多个交易,提高吞吐量。

Solana 共识流程简要

  1. 交易发起后,节点利用 PoH 来验证交易的时间顺序。

  2. 验证者节点基于 Tower BFT 达成共识,投票决定哪个区块被接受。

  3. 通过这种方式,Solana 可以实现每秒数千至数万笔交易的处理速度。

solana杂谈(1)的更多相关文章

  1. 【转】PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数

    原文地址: PHP 杂谈<重构-改善既有代码的设计>之一 重新组织你的函数 思维导图   点击下图,可以看大图.    介绍   我把我比较喜欢的和比较关注的地方写下来和大家分享.上次我写 ...

  2. 【管理心得之三十二】PMP杂谈---------爱情必胜术

    这次一反常态,没有场景设计,我想借此文普及一下PMP是什么? 但我不知道这样枯燥的话题能否能引起你的兴趣,我不得不套用“标题党”<爱情必胜术>来博你眼球. 我真没有说谎,此文是献给那些孤身 ...

  3. [python爬虫] Selenium定向爬取海量精美图片及搜索引擎杂谈

    我自认为这是自己写过博客中一篇比较优秀的文章,同时也是在深夜凌晨2点满怀着激情和愉悦之心完成的.首先通过这篇文章,你能学到以下几点:        1.可以了解Python简单爬取图片的一些思路和方法 ...

  4. 杂谈:HTML 5页面可视性API

    译文来源:http://www.ido321.com/1126.html 原文:HTML5 Page Visibility API 译文:HTML 5的页面可视性API 译者:dwqs 在早期,浏览器 ...

  5. Ⅸ.spring的点点滴滴--IObjectFactory与IFactoryObject的杂谈

    承接上文 ObjectFactory与IFactoryObject的杂谈 .net篇(环境为vs2012+Spring.Core.dll v1.31) public class parent { pu ...

  6. 子树大小平衡树(Size Balanced Tree,SBT)操作模板及杂谈

    基础知识(包括但不限于:二叉查找树是啥,SBT又是啥反正又不能吃,平衡树怎么旋转,等等)在这里就不(lan)予(de)赘(duo)述(xie)了. 先贴代码(数组模拟): int seed; int ...

  7. 杂谈之SolrCloud这个坑货

    杂谈之SolrCloud这个坑货 看<Solr In Action>时候看到对Solr不足的介绍有这么一段话:“One final limitation of Solr worth men ...

  8. 杂谈之不同行业的Solr

    杂谈之不同行业的Solr 前几天去一家互联网创业公司面试搜索引擎开发工程师,结果被pass了,仍不住想来吐槽下.尽管当时面试没啥准备,也没表现好,但是也学到了不少东西.现在就随便吐槽一下吧. 本人是在 ...

  9. iOS APP安全杂谈

      iOS APP安全杂谈 高小厨 · 2015/06/30 10:16 0x00 序 以前总是在这里看到各位大牛分享其安全渗透经验,而今我也很荣幸的收到了乌云的约稿,兴奋之情难以言表.由于IOS是一 ...

  10. WPF 杂谈——开篇简言。

    这俩年多来笔者一直在从事关于WPF的开发.虽然不能说是专家级别的.但是对于WPF的应用还是有一定的了解.论他的灵活性决对不在WinForm之下.WPF的出现更是引发一段热议.他的何去何从更是让很多人感 ...

随机推荐

  1. PLSQL自动登录,记住用户名密码&日常使用技巧

    配置启动时的登录用户名和密码 这是个有争议的功能,因为记住密码会给带来数据安全的问题. 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Develope ...

  2. Tomcat之Jconsole监控

    JConsole的图形用户界面是一个符合Java管理扩展(JMX)规范的监测工具,JConsole使用Java虚拟机(Java VM),提供在Java平台上运行的应用程序的性能和资源消耗的信息.在Ja ...

  3. C# 中合并2个 Dictionary

    内置方法 using System.Collections.Generic; using System.Linq; Dictionary<string, object> dicA = ne ...

  4. Web前端入门第 26 问:CSS 浏览器兼容性怎么查?

    学编码之前,当先学排查问题的能力. 在那个 IE 浏览器 当道的时代,前端开发简直就是刀耕火种一般,一个简单的圆角模块,嘿...不好意思,它不支持,用图片吧. 但凡经历过 IE 的洗礼,就会知道当时哪 ...

  5. 记录一次ubuntu软件安装未完全的解决

    背景 预想是在ubuntu20.10上去安装android-studio,所以找了个教程,是使用ubuntu-make来进行安装,不过我也不知为何,安装到最后,出现了dpkg的报错并返回,错误提示是让 ...

  6. AoP的相关术语

    一.Joinpoint(连接点): 所谓连接点是指那些被拦截到的点.在 spring 中,这些所谓的点指就是方法,因为 spring 只支持方法类型的连接点. 二.Pointcut(切入点): 所谓切 ...

  7. hybrid应用自动化

    一.hybrid介绍 hybrid是一种混合app,将h5页面嵌入native原生页面. 基于uiautomator+chromedriver.native部分走uiautomator,web部分走c ...

  8. s2-061(CVE-2020-17530)漏洞复现+利用+getshell工具。

    声明 本文仅用于技术交流,请勿用于非法用途 由于传播.利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任. 文章作者拥有对此文章的修改和解释权.如 ...

  9. 揭秘AI自动化框架Browser-use(终):利用MCP与Spring AI,3行代码复刻Browser-use实现

    技术背景与目标 在前几篇文章中,我们深入解析了Browser-use框架的核心机制,包括DOM树遍历与分析.提示词构造.任务分解与规划.以及浏览器操作的函数调用.我们将通过Spring AI和Play ...

  10. 【工具】SageMath|Ubuntu 22 下 SageMath 安装和一般数域筛法代码示例(2024年)

    就一个终端就能运行的东西, 网上写教程写那么长, 稍微短点的要么是没链接只有截图.要么是链接给的不到位, 就这,不是耽误生命吗. 废话就到这里. 文章目录 链接 步骤 链接 参考: Install S ...