萌新理解区块链

本文深入解析区块链技术核心,阐述以太坊的工作原理,包括挖矿机制、Merkle树的应用、智能合约执行环境EVM,以及从PoW到PoS的过渡。探讨区块链如何确保数据安全与交易信任,矿工的角色与收益,和未来发展方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  区块链很火,但是之前其实一直有些云里雾里,今天抽时间,认真了解了一下其中的原理。 

  这个是今天学习的教材,从优快云首页上摘取的,国外大神写的,认真读完很有收获。

  https://mp.weixin.qq.com/s?__biz=MzU2MTE1NDk2Mg==&mid=2247485990&idx=1&sn=d99f22c3b8e6f41b8d06cf9f1c24c5c1&scene=21#wechat_redirect

 之前其实一直不明白,为啥子要挖矿,花费大量电量,有些挖矿的厂子可能包下一座小电厂,进行挖矿活动。算出那几个数字,能制造出何种实际价值。 今天读完这篇文章后,算是有了一个大概的理解了。
首先,算出的数字本身是没有意义的,但有意义的是,算出这个数字的过程。
矿工的工作,在区块链中,从我的理解来看,有两个意义:
一方面矿工的计算,为区块链提供安全机制,和信任的基石。
另一方面,矿工完成的这一过程,获得奖金。
这是一个完整的机制,完整的循环,一体两面。
区块链去中心化,在我看来,不是没有中心,而是把传统社会的中心,也是信任的基石,从社会科学的产物,如政府、银行等,抽象上升到了 数学公理,客观事实。 也在这一刻,我有点明白了这一转变的伟大之处。
另外,原本依赖于银行人员、公信机构人员完成的维护公信的工作量,转变成了矿工,进行穷举搜索的过程,将人力成本,变成了资源成本。
区块链技术是优秀的、进步的,但实话讲,怎么获得大众的认可还有很长的路要走,类似我之前状态的人,还有很多,因为虽然本身这个信任基石没有问题,但很多人其实不理解其中的原理,更无从认可, 毕竟信任更多的是社会性,其本身是离不开广大群众的。

 

以下是我自己摘录的一些零散笔记:

1、用 CAP 定理来看,以太坊一个区块链,满足了 C 一致性, P 分区容错性,A 可用性应该很差啊?
      难道区块链不属于分布式系统吗?(定理的前提) 还是本身 不需要 高可用这一特性? (实现目标)
2、 Merkle 树感觉很强, 感觉比我大学时期记忆的树强了很多,不知道是不是没有学到家的缘故。
看来是得重新学习数据结构了。
Merkle树可以实现轻节点的快速查询。根节点作为数据安全证明; 每个局部区块都可以在无需保存整个状态的情况下,验证以太坊一部分状态。
3、 终于理解了,为什么要有比特币,为什么需要矿工, 通过Gas,在区块链上的每一笔交易,都需要被验证, 这个验证的费用,由发起交易方支付,验证这个交易的过程,就是由矿工进行的。  而第一个完成运算的矿工,将收到最大金额的奖励,其他矿工,如果在 交易发起方支付的 虚拟货币消耗完前,就完成的交易证明,那么他们会瓜分剩余的 虚拟货币。
4、 去中心化: 之前的交易,都必须有一个中心, 这个中心必须由政府或者机构完成。 现在区块链中,数据安全由 Merkle 树的根节点保证, 交易维护工作,由网上分布式的矿工完成。
5、 区块的验证时间(矿工挖矿的所需要消耗的时间),通过难度机制实现平衡,耗时越长,难度越大,这时就减少区块的验证难度,保证每个区块的验证时间为 15 秒。

执行模式:
6、 以太坊虚拟机 EVM(Ethernet virtual machine) , 采用堆栈结构,先入后出, 与冯诺依曼计算机不同,代码不是存放在内存中,而是放在 一个虚拟的 ROM (read only memory),修改合约时,通过 solidiy 高级语言编程,之后编译成可在 EVM 中执行的 字节码(这个与java 很相似)。
7、 由于存在 Gas 机制,整个以太坊中 Gas 的存量,会约束可以完成的计算总量。这是EVM与传统图灵完备(可以模拟执行计算机上所有运算,包括循环)虚拟机的不同。
8、 EVM 运行机制:这个有点云里雾里的:
       (1) EVM 具有几个全局状态:
                  可用的 Gas 、 程序计数器、 内存内容、 内存活跃数、 栈内容
       (2) 一个堆栈是一个循环,每个循环执行,程序计数器加一,同时 gas 消耗;
       (3)执行一个堆栈的结果,总体分为两类:一类为 可控结果, 一类为异常,
                 发生异常: gas不足、栈条目数不足、栈条目数超过1024、无效的 jump指令等,
                 或者系统宕机、这时,任何更改将被丢弃。
       (4)可控状态: EVM 生成结果状态、保留执行结束后的 gas。
9、 工作量证明 及 安全机制:这一段我觉得没法精简,所以全摘录了
       总体而言,PoW的目的是以一种安全加密方式证明工作量,基于特定的计算量生成某些输出(即nonce)。这是因为除了穷举所有可能性之外,没有更好的办法来找到低于要求阈值的nonce。重复应用哈希函数的输出具有均匀分布,因此我们可以确信,找到这样一个nonce所需的平均时间取决于难度阈值。难度越大,解决问题的时间就越长。这样,PoW算法对难度概念赋予了真实的意义,这个概念被用来增强区块链的安全。

那么,区块链安全又是指什么?很简单:就是要创建一个每个人都信任的区块链。正如先前在本文中讨论的那样,如果存在一个以上的链,用户将对其失去信任,因为他们无法合理地确定哪一个链是「有效的」链。为了让一组用户接受存储在块环链上的基本状态,需要一个大家都相信的且单一规范的区块链。

而这正是PoW的作用:它确保一个特定的区块链可以保持规范,使攻击者难以创建新的区块,或者覆盖历史的某一部分(例如擦除交易或创建虚假的交易),或者对一个分叉进行维护。为了验证他们的区块,攻击者需要比网络中的其他任何人都更快地解决nonce问题,这样网络就会相信他们的链条是最重链(基于之前提到的GHOST协议的原则)。这是基本上不可能的,除非攻击者拥有超过一半的网络挖掘能力,因此这种情况被称为「51%攻击」。

10、 矿工的收入构成:
      (1) 贡献算力中获胜的奖励;
      (2) Gas 成本
      (3) ommer作为区块的一部分额外奖励


11、 ommer:
比起比特币之类的区块链,以太坊的构建方式使区块生成时间要低很多。这样可以更快地处理交易。然而,缩短区块生成时间的一个缺点是,矿工们要找到更多相互竞争的区块解决方案。这些相互竞争的区块也被称为「孤儿区块」,不能进入主链。

Ommer的目的是帮助奖励矿工,也包括这些孤儿区块。矿工的ommer必须是「有效的」,也就是说在目前区块的第六代或更小的范围内。六代之后,陈旧的孤儿区块就不能再被引用。比起完整的区块,Ommer块获得的奖励要小一些。尽管如此,矿工们仍然有一定的动力去挖掘这些孤儿区块并获得回报。

12、 以太坊正在从 Pow 工作量证明机制, 过度到 POS 机制:

资料来源: https://blog.youkuaiyun.com/sqc3375177/article/details/79528191


PoW背后的基本概念很简单:工作端提交已知难于计算但易于验证的计算结果,而其
他任何人都能够通过验证这个答案就确信工作端为了求得结果已经完成了量相当大的计算
工作。然而PoW机制存在明显的弊端。一方面,PoW的前提是,节点和算力是均匀分布
的,因为通过CPU的计算能力来进行投票,拥有钱包(节点)数和算力值应该是大致匹配
的,然而随着人们将CPU挖矿逐渐升级到GPU、FPGA,直至ASIC矿机挖矿,节点数和算
力值也渐渐失配。另一方面,PoW太浪费了。比特币网络每秒可完成数百万亿次SHA256
计算,但这些计算除了使恶意攻击者不能轻易地伪装成几百万个节点和打垮比特币网络,
并没有更多实际或科学价值。当然,相对于允许世界上任何一个人在瞬间就能通过去中心
化和半匿名的全球货币网络,给其他人几乎没有手续费地转账所带来的巨大好处,它的浪
费也许只算是很小的代价。
有鉴于此,人们提出了一些工作量证明的替代者。权益证明(Proof of Stake,PoS)
就是其中的一种方法。
权益证明要求用户证明拥有某些数量的货币(即对货币的权益),点点币
(Peercoin)是首先采用权益证明的货币,尽管它依然使用工作量证明挖矿。

POS --- Proof of Stake

大多数地方叫权益证明,其实可以看作是股权证明,也是一种共识算法,在基于权益证明的数字货币中,下一个区块的选择是根据不同节点的股份和时间进行随机选择的。打个比方说,假如你买了1万个数字货币,然后就放在POS机制中,这样你就拥有了机会去获得新的区块从而得到奖励,机会有多大呢,就是那些拥有1千个数字货币的人的10倍概率,因为你有1万个,1万是1千的十倍,10%的股份分红是1%股份的10倍,道理是一样的。

由于创造新的区块并不会消耗大量的 CPU,这也就给了很多节点作弊的机会,每一个节点为了最大化利益会在多条链上同时挖矿。显然这个问题要被解决,这里引入了惩罚机制,惩罚同时在多条链上投票的节点,第二种方法是直接惩罚在错误的链上创建块的节点。

优势:不需要浪费算力,同时,进行51%攻击的代价更高,因为想要进行51%攻击的话,你得拥有51%的货币。也就是说,这东西越值钱,攻击的成本就越高。


DPOS --- Delegated Proof of Stake
上面介绍的权益证明算法可以将整个区块链网络理解为一家公司,占比最大的人有更多的机会得到区块;对于小股东来说,能产生区块的可能性很小,只能得到股份带来的分红和收益。

但是在这里介绍的DPOS委托权益证明能够让每一个人选出可以代表自己利益的人参与到获取区块的争夺中,这样多个小股东就能够通过投票选出自己的代理人,争取自己的利益。

在委托权益证明中,每一个参与者都能够选举任意数量的节点生成下一个区块,得票最多的前 M 个节点会被选择成为区块的创建者,下一个区块的创建者就会从这样一组当选者中随机选取,除此之外,M的数量也是由整个网络投票决定的,所以可以尽可能地保证网络的去中心化,而且最重要的还是随机选出的,也就是说数量M不确定,M中选取哪一个也不确定,再加上足够多的总量,可以确定几乎是不可操控的。


总结:
介绍了POS(权益证明)是通过持有股份来获取新区块的机会,优点是不需要消耗计算资源,但是小股东获取的利益有限。
DPOS(委托权益证明)让每个人都可以选出代表自己利益的人,多个小股东聚集到一起,增加了获取区块的机会,并且通过获取总票数中随机的一部分投票,在随机中再随机选一个来生成区块,更大程度上确保了不可篡改性。

CH341A编程器是一款广泛应用的通用编程设备,尤其在电子工程和嵌入式系统开发领域中,它被用来烧录各种类型的微控制器、存储器和其他IC芯片。这款编程器的最版本为1.3,它的一个显著特点是增加了对25Q256等32M芯片的支持。 25Q256是一种串行EEPROM(电可擦可编程只读存储器)芯片,通常用于存储程序代码、配置数据或其他非易失性信息。32M在这里指的是存储容量,即该芯片可以存储32兆位(Mbit)的数据,换算成字节数就是4MB。这种大容量的存储器在许多嵌入式系统中都有应用,例如汽车电子、工业控制、消费电子设备等。 CH341A编程器的1.3版更,意味着它可以与更多的芯片型号兼容,特别是针对32M容量的芯片进行了优化,提高了编程效率和稳定性。26系列芯片通常指的是Microchip公司的25系列SPI(串行外围接口)EEPROM产品线,这些芯片广泛应用于各种需要小体积、低功耗和非易失性存储的应用场景。 全功能版的CH341A编程器不仅支持25Q256,还支持其他大容量芯片,这意味着它具有广泛的兼容性,能够满足不同项目的需求。这包括但不限于微控制器、EPROM、EEPROM、闪存、逻辑门电路等多种类型芯片的编程。 使用CH341A编程器进行编程操作时,首先需要将设备通过USB连接到计算机,然后安装相应的驱动程序和编程软件。在本例中,压缩包中的"CH341A_1.30"很可能是编程软件的安装程序。安装后,用户可以通过软件界面选择需要编程的芯片类型,加载待烧录的固件或数据,然后执行编程操作。编程过程中需要注意的是,确保正确设置芯片的电压、时钟频率等参数,以防止损坏芯片。 CH341A编程器1.3版是面向电子爱好者和专业工程师的一款实用工具,其强大的兼容性和易用性使其在众多编程器中脱颖而出。对于需要处理25Q256等32M芯片的项目,或者26系列芯片的编程工作,CH341A编程器是理想的选择。通过持续的软件更和升级,它保持了与现代电子技术同步,确保用户能方便地对各种芯片进行编程和调试。
内存分区情况的分析是嵌入式系统开发中的一个重要环节,特别是在资源有限的MCU(微控制器)环境中。标题提到的工具是一款专为分析Linux环境下的`gcc-map`文件设计的工具,这类文件在编译过程结束后生成,包含了程序在目标设备内存中的布局信息。这个工具可以帮助开发者理解程序在RAM、ROM以及FLASH等存储区域的占用情况,从而进行优化。 `gcc-map`文件通常包含以下关键信息: 1. **符号表**:列出所有定义的全局和静态变量、函数以及其他符号,包括它们的地址和大小。 2. **节区分配**:显示每个代码和数据节区在内存中的位置,比如.text(代码)、.data(已初始化数据)、.bss(未初始化数据)等。 3. **内存汇总**:总览所有节区的大小,有助于评估程序的整体内存需求。 4. **重定位信息**:显示了代码和数据如何在目标地址空间中定位。 该分析工具可能提供以下功能: 1. **可视化展示**:将内存分配以图形化方式呈现,便于直观理解。 2. **详细报告**:生成详细的分析报告,列出每个符号的大小和位置。 3. **比较功能**:对比不同编译版本或配置的`map`文件,查看内存使用的变化。 4. **统计分析**:计算各种内存区域的使用率,帮助识别潜在的优化点。 5. **自定义过滤**:允许用户根据需要筛选和关注特定的符号或节区。 虽然在MCU环境中,Keil IDE自带的工具可能更方便,因为它们通常针对特定的MCU型号进行了优化,提供更加细致的硬件相关分析。然而,对于通用的Linux系统或跨平台项目,这款基于`gcc-map`的分析工具提供了更广泛的适用性。 在实际使用过程中,开发者可以利用这款工具来: - **优化内存使用**:通过分析哪些函数或数据占用过多的内存,进行代码重构或调整链接器脚本以减小体积。 - **排查内存泄漏**:结合其他工具,比如动态内存检测工具,查找可能导致内存泄漏的部分。 - **性能调优**:了解代码执行时的内存分布,有助于提高运行效率。 - **满足资源限制**:在嵌入式系统中,确保程序能在有限的内存空间内运行。 总结来说,`gcc-amap`这样的工具对于深入理解程序的内存布局和资源消耗至关重要,它能帮助开发者做出更明智的决策,优化代码以适应不同的硬件环境。在处理`map`文件时,开发者不仅能获取到程序的内存占用情况,还能进一步挖掘出可能的优化空间,从而提升系统的整体性能和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值