北京大学肖臻老师《区块链技术与应用》笔记
北京大学肖臻老师《区块链技术与应用》笔记
需要记住的是,在BTC和以太坊中,交易保存在区块内部,一个区块可以包含多个交易。通过区块构成区块链,而非交易。
思考如何组织账户的数据结构 我们能否像BTC中,将哈希表的内容组织为Merkle Tree?但当新区块发布,哈希表内容会改变,再次将其组织为新的Merkle Tree?如果这样,每当产生新区块(ETH中新区块产生时间为10s左右),都要重新组织Merkle Tree,很明显这是不现实的。
需要注意的是,比特币系统中没有账户概念,交易由区块管理,而区块包含上限为4000个交易左右,所以Merkle Tree不是无限增大的。而ETH中,Merkle Tree来组织账户信息,很明显其会越来越庞大。
实际中,发生变化的仅仅为很少一部分数据,我们每次重新构建Merkle Tree代价很大 那我们不要哈希表了,直接使用Merkle Tree,每次修改只需要修改其中一部分即可,这个可以吗?
实际中,Merkle Tree并未提供一个高效的查找和更新的方案。此外,将所有账户构建为一个大的Merkle Tree,为了保证所有节点的一致性和查找速度,必须进行排序。 那么经过排序,使用Sorted Merkle Tree可以吗?
新增账户,由于其地址随机,插入Merkle Tree时候很大可能在Tree中间,发现其必须进行重构。所以Sorted Merkle Tree插入、删除(实际上可以不删除)的代价太大。
既然哈希表和 Merkle Tree都不可以,那么我们看一下实际中以太坊采取的数据结构:MPT。
注意:BTC系统中,虽然每个节点构建的Merkle Tree不一致(不排序),但最终是获得记账权的节点的Merkle Tree才是有效的。
一个简单的数据结构——trie(字典树、前缀树)如下为一个通过5个单词组成的trie数据结构(只画出key,未画出value)
特点:
那么trie有缺点吗?当然有:
trie的存储浪费。很多节点只存储一个key,但其“儿子”只有一个,过于浪费。因此,为了解决这一问题,我们引入Patricia tree/trie Patricia trie(Patricia tree)
Patricia trie就是进行了路径压缩的trie。如上图例子,进行路径压缩后如下图所示:
需要注意的是,如果新插入单词,原本压缩的路径可能需要扩展开来。那么,需要考虑什么情况下路径压缩效果较好?树中插入的键值分布较为稀疏的情况下,可见路径压缩效果较好。
在以太坊系统中,160位的地址存在2^160 种,该数实际上已经非常大了,和账户数目相比,可以认为地址这一键值非常稀疏。
因此,我们可以在以太坊账户管理种使用Patricia tree这一数据结构!但实际上,在以太坊种使用的并非简单的PT(Patricia tree),而是MPT(Merkle Patricia tree)。
区块链和链表的区别在于区块链使用哈希指针,链表使用普通指针。
同样,Merkle Tree 相比 Balance Tree,也是普通指针换成了哈希指针。
所以,以太坊系统中可如此,将所有账户组织为一个经过路径压缩和排序的Merkle Tree,其根哈希值存储于block header中。
BTC系统中只有一个交易组成的Merkle Tree,而以太坊中有三个(三棵树)。
也就是说,在以太坊的block header中,存在有三个根哈希值。
根哈希值的用处:
防止篡改。 提供Merkle proof,可以证明账户余额,轻节点可以进行验证。 证明某个发生了交易的账户是否存在 MPT(Modified Patricia tree)以太坊中针对MPT(Merkle Patricia tree)进行了修改,我们称其为MPT(Modified Patricia tree)
下图为以太坊中使用的MPT结构示意图。右上角表示四个账户(为直观,显示较少)和其状态(只显示账户余额)。(需要注意这里的指针都是哈希指针)
每次发布新区块,状态树中部分节点状态会改变。但改变并非在原地修改,而是新建一些分支,保留原本状态。如下图中,仅仅有新发生改变的节点才需要修改,其他未修改节点直接指向前一个区块中的对应节点。
所以,系统中全节点并非维护一棵MPT,而是每次发布新区块都要新建MPT。只不过大部分节点共享。
为什么要保存原本状态?为何不直接修改?
为了便于回滚。如下1中产生分叉,而后上面节点胜出,变为2中状态。那么,下面节点中状态的修改便需要进行回滚。因此,需要维护这些历史记录。
区块结构
区块在网上真正发布时的信息
做投资理财区块链数字货币。有个标准就是尽量找对懂行,一线的分析师,而且负责任的分析师,因为很多人靠自己是判断不出、辨别不了的,所以最好的方法就是找一个懂行并负责任的分析师。
因为在这个行业里,你的分析师也是项目的投资人,所以他们会有更专业的标准来选择项目、 借力给你启动项目、全力教你运作项目、甚至什么最佳时机及时退出,这些都是合格的分析师能带给你的。
所以在这个行业里流行一句话 跟对人,选对事!无论你是小白还是老手都可以加我交流!
北京大学肖臻老师《区块链技术与应用》笔记
------
延伸阅读:
币圈炒币成功的心理障碍:恐惧,贪婪和希望
成为一位成功的虚拟币投资人,你必须做到下述三点:
第一,获得炒币的基本知识;第二,制定切实可行的炒币计划;第三,严格按照这个计划实行。
到现在为止,你已具备足够的基本知识来判断虚拟币的走势和虚拟币大市,知道应该怎么选币,怎么决定买入点和卖出点。你已经有足够的知识架构来制定作战计划。
虚拟币的基本知识是死的,学会它相对容易,制定作战计划也并不困难。困难在于怎样从心理上自然地执行这些计划及在必要的时候修改这些计划。业余和专业炒手的区别就划分在这里。
恐惧
恐惧有很强的记忆能力。你如果在币市经历了一个可怕的亏损,你将恐惧同样的经历会重新出现。在下次投资的时候,你的判断力就会受到这个经历的影响,任何可能有麻烦的迹象,无论这迹象是多么小,多么的基于想像,你都将作出离场的决定,以避免再次受到伤害。这就是炒手们常常过早离场的原因。应该获利五万元的机会,你可能只得到五千。上次你有了赚钱币种以亏钱收场的惨痛经历,你这次要避免同样的伤痛,什么走势、大市、分析等等你都顾不得了。一般的人同样恐惧不随大流。我们这代人都经历了“文革”,回头想想,可能觉得自己当年很愚蠢。但身在其中,当时有多少人怀疑批判刘邓的正确性?币市出了热门,人人都在追捧,你有能力抵抗诱惑吗?你对“未随大流”的恐惧和失去“赚大钱”机会的贪婪常使你在虚拟币的最高点入市。
贪婪
贪婪是情绪反应的另一极端,它在币市上的表现就是在最短的时间内赚很多的钱。钱哪里有够的?在日常生活中,你听说过有人嫌工资太高、福利太好的吗?无论得到什么,得到多少,你总会编出理由来证明你应该得到更多。这一方面出自人这种动物对争夺生存资源的自然反应,另一方面源自对自己的无知,对外界的无知,所谓缺乏自知之明。在虚拟币投资上,这种情绪是极其有害的。
首先,它会使你失去理性判断的能力,不管币市的具体环境,你无法让钱闲着,你勉强入市。不错,资金不入市不可能赚钱,但贪婪使你忘记了入市的资金也可能亏掉。不顾外在条件,不停地在币市跳进跳出是还未能控制自己情绪的币市新手的典型表现之一。贪婪也使你忘记了分散风险。美滋滋地想像着如果这只虚拟币翻两倍的话你能赚多少钱,忽略了虚拟币跌的话怎么办?情绪性地加持是不对的,特别在贪婪控制你的情绪之时。你是否被贪婪控制,自己最知道。
希望
虚拟币不断爬升,你终于等不及了,你进场了,希望它会继续升。不幸的是,一旦你进场,虚拟币开始下跌,你的账面损失一天天在增加。自然地,你希望币价能回升到你入市的价格,让你全身而退。这种希望是阻止你进行理性思考的障碍之一。一旦怀抱“希望”,你每天都在寻找对你有利的信息,忽略对你不利的信息。就如同一般人对表扬常记于心,把批评当耳边风一样。你每天都在希望虚拟币做对你有利的运动,而不是客观地判断市场。希望可以定义成“对某种事物的期待”。成功的投资必须基于对今天和未来所发生的事件对币价的可能影响做理性判断,“希望”在这个判断过程中不应占有任何地位。虚拟币的运动决不以你的希望为转移,它会走自己的路。别忘了你买的虚拟币都是其他人卖给你的。你有一定的期望,至少有相同的人持有相反的期望。没有理由认为币市对你特别偏爱。每次进的虚拟币开始亏钱,你必须很严肃地问自己:我原先买这个币种的理由对吗?再进一步问自己:如果我今天没有这只虚拟币,手上有余钱,我还会买这个币种吗?如果答案是肯定的,没有卖出的必要;如果是,那么你在用希望取代理性判断,赶快卖币走人。这样做有两个明显的结果:一是防止小的亏损慢慢累进成致命的大亏;二是你失掉了包袱,容易开始新的市场观察,寻找下一个机会。
------------------
推荐阅读:
上半年基金持仓分析:DOT蝉联第一,大公链和头部DeFi最受追捧
上一篇:NNN币值多少钱一枚