solana杂谈(1)
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的脱可能标准
项目方创建token
项目方创建token实际上是向token program发送一个mintinit指令,在token program中登记一个token 以及记录怎么发行token
不同于evm,不是一个合约,由合约管理tokenmint token
在token初始化时制定了mint权限,拥有mint权限的账户合约mint token,注意每一个token有他独立的mint account.mint account的权限创建token account
钱包用户通过token program,创建对应token 的token account(实际上也是一个数据账户),用于保存钱包用户的token的状态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 共识流程简要
交易发起后,节点利用 PoH 来验证交易的时间顺序。
验证者节点基于 Tower BFT 达成共识,投票决定哪个区块被接受。
通过这种方式,Solana 可以实现每秒数千至数万笔交易的处理速度。
solana杂谈(1)的更多相关文章
- 【转】PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
原文地址: PHP 杂谈<重构-改善既有代码的设计>之一 重新组织你的函数 思维导图 点击下图,可以看大图. 介绍 我把我比较喜欢的和比较关注的地方写下来和大家分享.上次我写 ...
- 【管理心得之三十二】PMP杂谈---------爱情必胜术
这次一反常态,没有场景设计,我想借此文普及一下PMP是什么? 但我不知道这样枯燥的话题能否能引起你的兴趣,我不得不套用“标题党”<爱情必胜术>来博你眼球. 我真没有说谎,此文是献给那些孤身 ...
- [python爬虫] Selenium定向爬取海量精美图片及搜索引擎杂谈
我自认为这是自己写过博客中一篇比较优秀的文章,同时也是在深夜凌晨2点满怀着激情和愉悦之心完成的.首先通过这篇文章,你能学到以下几点: 1.可以了解Python简单爬取图片的一些思路和方法 ...
- 杂谈:HTML 5页面可视性API
译文来源:http://www.ido321.com/1126.html 原文:HTML5 Page Visibility API 译文:HTML 5的页面可视性API 译者:dwqs 在早期,浏览器 ...
- Ⅸ.spring的点点滴滴--IObjectFactory与IFactoryObject的杂谈
承接上文 ObjectFactory与IFactoryObject的杂谈 .net篇(环境为vs2012+Spring.Core.dll v1.31) public class parent { pu ...
- 子树大小平衡树(Size Balanced Tree,SBT)操作模板及杂谈
基础知识(包括但不限于:二叉查找树是啥,SBT又是啥反正又不能吃,平衡树怎么旋转,等等)在这里就不(lan)予(de)赘(duo)述(xie)了. 先贴代码(数组模拟): int seed; int ...
- 杂谈之SolrCloud这个坑货
杂谈之SolrCloud这个坑货 看<Solr In Action>时候看到对Solr不足的介绍有这么一段话:“One final limitation of Solr worth men ...
- 杂谈之不同行业的Solr
杂谈之不同行业的Solr 前几天去一家互联网创业公司面试搜索引擎开发工程师,结果被pass了,仍不住想来吐槽下.尽管当时面试没啥准备,也没表现好,但是也学到了不少东西.现在就随便吐槽一下吧. 本人是在 ...
- iOS APP安全杂谈
iOS APP安全杂谈 高小厨 · 2015/06/30 10:16 0x00 序 以前总是在这里看到各位大牛分享其安全渗透经验,而今我也很荣幸的收到了乌云的约稿,兴奋之情难以言表.由于IOS是一 ...
- WPF 杂谈——开篇简言。
这俩年多来笔者一直在从事关于WPF的开发.虽然不能说是专家级别的.但是对于WPF的应用还是有一定的了解.论他的灵活性决对不在WinForm之下.WPF的出现更是引发一段热议.他的何去何从更是让很多人感 ...
随机推荐
- ANSYS 部件组装的注意事项
ANSYS 中部件的装配 ANSYS 也可以实现与 Abaqus 类似的组装功能,但是要注意装配过程中材料编号,单元编号,坐标系编号的变化 具体装配流程 1.组件的创建和保存 ! 1.组件开头设置 f ...
- 面试题-Java集合(新更新版本)
前言 Java集合部分的题目,是我根据Java Guide的面试突击版本V3.0再整理出来的,其中,我选择了一些比较重要的问题,并重新做出相应回答,希望对大家起到一定的帮助. Java集合 Java集 ...
- 【Java】关键字的使用
java中有很多的关键字,他们的使用让Java语言变得更加灵活.易用,下面将介绍Java中最常用的几个关键字并说明其用法. 一.关键字:return--跳出 使用在方法体中,用于:① 结束方法② 针对 ...
- HTB打靶记录-Vintage
信息收集 nmap -sV -sC -O 10.10.11.45 Nmap scan report for 10.10.11.45 Host is up (2.1s latency). Not sho ...
- 【MOOC】华中科技大学操作系统慕课答案-第4~6章+第7章单元测试
文章目录 单选 填空 判断 第七章答案 单选 1 关于进程错误的说法是 . A. 进程的运行全过程不可重现. √B. 一个程序只能生成一个进程. C. 进程具有异步性. D. 多个并发进程共享CPU ...
- K8s进阶之Deployment的更新&回滚
更新概述 更新指的是对 Deployment 所管理应用的配置.镜像版本等进行修改并应用到集群中的过程.通过更新 Deployment,你能够实现应用功能的升级.修复漏洞.调整资源分配等操作. 更新触 ...
- Grid 布局-子项补充及常用布局
上篇我们介绍了 Grid 布局容器项的内容, 看上去属性很多, 其实并没有, 记住关键的概念和简写就行啦. 因为是二维的, 这个属性的数量就比 flex 要多很多哦, 但其实真正也没有常用那没多啦. ...
- python中list、tuple、set、dict区别
list.tuple.set.dict区别 参考:python的列表,字典,元组,集合的区别和各自使用方法 遍历set 由于set也是一个集合,所以,遍历set和遍历list类似,都可以通过for循环 ...
- Pytorch之线性回归
从零开始实现 %matplotlib inline import torch import numpy as np import random 生成数据集 设训练数据集样本数为1000,特征数为2,使 ...
- 不同版本AutoCAD的ProgID
AutoCAD产品名 ProgID AutoCAD 2004 AutoCAD.Application.16 AutoCAD 2005 AutoCAD.Application.16.1 AutoCAD ...