SOL原理及分析(白话版)
March 24th, 2022

一、怎么快?

引用 Anatoly 的话说,Solana 的目标是「让一个去中心化的节点网络与单个节点的性能相当」 单一节点,点对点很快,就是人们要相信这个单一节点. 区块链需要以一种公开和不可改变的方式在一群参与者之间达成共识 他们使用工作量证明(PoW)和权益证明(PoS)等共识机制来做到这一点 而单一节点,只需要和自己达成共识. pow机制,在工作量证明中,全世界的矿工每天在处理越来越难的数学问题.以验证新区块. 工作量证明是去中心化的,也是安全的, 但是无法拓展(不符合经济学)

多数区块链,以及ETH2.0使用的POS证明,在权益证明中,在专用计算机运行程序,通过处理传入交易 投票,和向区块链添加新区块来保护网络,每个验证者都可以投票选择他们认为应该被加入的区块的交易 每个投票者由他们自己的token加权,作为抵押品来确保他们诚实. solana使用了pos,Delegated pos,所有持有SOL的人都可以将自己的投票委托给他们选择的验证人. 并且分享验证交易成功的奖励.

传统的Pos,每个验证者需要相互协调,以了解验证什么时候通过,下一步该用那个区块. 任何人任何时候提供区块,验证着需要等待很长时间,看看那个区块通过了,再追加到链后. 对于数量庞大的节点,达成共识需要很久时间,所以他们使用了很少的验证节点 例如BSC使用的权益质押授权算法 只需要21个拥有最多质押的验证者达成共识,并且BSC有10个 所以它的可拓展性更强,但是中心化也更强.

SOLANA 采用了一种完全不同的方法,关键的创新是 POH (proof of histrory). 利用历史证明创建一个历史记录,证明一个事件在特定的时间点上发生过。 其他区块链需要验证者相互交谈以同意时间已经过去 而每个 Solana 验证者通过将时间的流逝编码在一个简单的 SHA-256、 顺序哈希的可验证延迟函数(VDF)中来维护自己的时钟

所以solana验证者可以使用账本本身的编码信息来确定一项交易是否是有效的,而不需要等待其他验证者. (这个在后面会详细解释.) 所以POH实现了可预测性,不用等待其他验证者的延迟,验证者可以通过Leader Rotation进行轮换. 领导者给定时间,在给定的时间,依靠质押的比例加权,生成一个条目,确定谁是下个leader多久.

二、POH 的详述

对于一个不确定的数据(某一个交易),从最开始计算sha256(一个防冲突性强的hash函数)开始, 记录其下标以及HASH值,将每次输出当作下一次输入, 在运行到第300次时就会得到一组hash 以及下标的数据 . 验证者只能从头将数据跑一遍,否则无法预测这条hash是否正确,所以在验证成功后 就可以认为索引0到300之间一定存在一段真实存在的时间.

对于验证而言

并行确认每次输入输出hash,就可以很快的验证数据的一致性

对于拓展性

序列生成器A和B,A从B处接收数据包hash1b,其中包含生成器B的上一状态 以及从生成器A处观察到的生成器B的上一状态。由于生成器A输出的下一个哈希值取决于生成器B的状态 因此我们可以推导出hash1b比hash3a要产生得更早。 这一属性同样是可传递的,也就是说,假如三个生成器通过A ↔ B ↔ C的过程进行同步 即使A和C之间并没有直接的数据传递,我们仍然可以追踪它们的依赖关系。 通过定期对生成器进行同步,每个生成器都可以只处理外部信息的一部分, 从而使整个系统能够处理的事件量显著增加,虽然生成器之间的通信延迟会导致系统时间的准确度下降。 不过,网络中事件的全局顺序仍然可以通过 选择某个具有确定性的函数来对同步窗口中的事件进行排序(例如哈希值本身的大小)而实现 同步过程是可传递的。在A ↔ B ↔ C的同步过程中,A和C之间存在一个可以验证的事件顺序。 这个代价是降低了系统的可用性,10×1Gbps的连接在原来999变成 99。

对于一致性

用户时间Hash 0c0 依靠hash 0da 生成,他将0xda 连接到下一个生成的块 这样可以预防恶意攻击者在隐藏的序列里重排事件

三、对于ETH的差别

账本类型

1、eth账本账户,一个是个人账户 余额 ,一个是合约 合约有data. solana 账户有多个字段 lamports :balance owner:owner这个字段保证了用户对账户的决定拥有权利, 如果某一个地址是某一个account的owner, 那么那个地址就可以对这个account资产进行转移。 所以solana的合约token其实就是solana程序会帮忙生成一个account, 然后把owner赋予给你。 executable: 这个表示用户的状态是不是可执行的状态。 在solana的账户体系里面的data字断是表示存储,或者可执行。 可执行的data是帐户数据专门用于不可变字节代码该字节代码用于处理交易。 data:同executable 描述相似 rent_epoch:就是solana的合约和solidity合约不一样的地方, solana的合约部署是要按大小定期收费的,目前是费用是2天一收 应该是0.01SOL 1K的大小。如果没有费用solana系统就会清除。

2、合约差异

solana的合约其实就是一段程序,这个程序没有存储功能,程序编译好以后,是一个BPF字节码, 这个和solidity 编译后是一段二进制码是一样的。 solidity是通过合约地址找到合约存在得状态数,然后再通过input参数,拿到需要执行得方法和参数, 再执行对于得合约方法。其实solana 这个部分是一样得, solana 发布到连上得合约有一个programID, 这个programID也是一个Hash256,和solidity合约地址一样, solana 合约得方法通过一个枚举来定义,也就是,方法分别是0-1-2-3-4,参数就是解析data, 那么solana 合约最难得就是要解析这个data,因为这个data是用户自己定义和排序的, solana不提供标准的map,struct,这些数据结构存储, 都是以文本得形式存储在各个account里面得data里面, 所以solana合约最困难得就是要对data进行编码, 解析再解码,比如一个token合约,solidity 最多两个map,一个是balance,一个是allowance, 但是solana不一样,他没有存储,他需要为每一个人创建一个临时得account, 然后解析出来,给他们做tranfer或者approve操作。 还要有一堆的安全性判断。最重要得是你要得存储进行排版,解析 官方介绍支持llvm编译的都应该支持合约编写,官方公链代码是rust写的.整个框架大多都是rust开发

3、NFT差异

eth NFT 合集是通过部署新的智能合约来创建的,这些合约现在必须符合 erc721 或者 erc1155 市场仅使用智能合约地址,就能够轻松识别日志事件中的 NFT 转账 可以很清除的查看到 一系列合集的NFT 比如 bayc 他们的NFT都是来自 0BC4CA0EdA7647A8aB7C2061c2E118A18a936f13D 并且可以使用少量的代码来进行分销.或者收益发放. 缺点就是交互必须依赖与合约的ABI.每个变更 NFT原始状态的操作都是对其智能合约的函数调用, 需要支付 ETH gas 费用 Solana 上的 NFT 都只是普通的 SPL Token(Solana Program Library Token), 其供应集固定等于 1,并且通常附加了一些元数据。 这使得 Solana 上的 NFT 非常易于部署和传输,无需编写或部署智能合约, 也无需像以太坊那样根据 NFT 调用不同的传输函数 而且无法像eth 一样很容易通过一个合约查看所有的一系列NFT

四、总结

对于开发者而言,底层的高效才能助推生态的繁荣. 而solana无疑提供了另一种方式,来让底层更加高效 或许后续会出现更多的项目,例如Audius, 同时建立在 Solana 和 Ethereum 上, 使用 Solana 进行更频繁的交易,而 Ethereum 作为结算层。 在一个跨链的世界里,人们可以在 Solana 上构建并在以太坊上结算, 两个链都会从整体活动的增加中获胜.

以上引用了solana白皮书以及一些文献,如有不妥,请作者联系我们。

欢迎关注WR投研和我的Twiiter:

Subscribe to White
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from White

Skeleton

Skeleton

Skeleton