暑假在杭州一家区块链网络公司实习,由于工作原因,学习了区块链的一些基础知识,关于区块链的知识,我是学习的《区块链基础知识25讲》,这本书真的非常不错,有时间的小伙伴可以拿来学习一下。当然我这里也就是微微记录一下,一是对自己学习区块链知识的一个总结,二来也是记录自己学习生活的一部分。
文章目录
1.理解分层的概念
软件系统的划分就像是手机的功能,有的功能是我们在现实生活中确确实实体会得到的,有些功能则是在默默在背后起着至关重要的作用
软件系统的分层
1.应用层与实现层
2.功能性与非功能性
应用层与实现层
应用层中的所有内容都是从用户需求出发的(如想要拍照、看电影、听音乐)
实现层则是将这些需求实现(如将图片音乐转化为电信号)
功能性与非功能性
功能性可以指听音乐,看电影,拍照片等实际应用
非功能性是好看的用户界面,用户信息隐私保护等等
同时使用两种标准划分
这里可以用一个手机为例子可以看到下面图片一些我们常见的功能如拍照片、打电话、发邮件这些都属于应用层的功能性特征,而漂亮的用户的界面、简单的操作这些类似于辅助性的都属于应用层的非功能性特征;永久保存本地数据,自动连接最近的基站、优化屏幕动画这些属于实现层的功能性特征,省电、确保用户隐私、高效存储数据这类也是辅助性的也自然属于实现层的非功能性特征。按照我自己的理解,区别应用层和实现层,可以类比一个应用或者网站的前端和后端,应用层对应前端,是一些我们能看到,能实地接触到的功能,实现层对应后端,是一些支撑着前端的功能,虽然我们没有深刻地体验接触到,但正是这些功能才支撑起了整个应用系统。功能性特征和非功能性特征按我的理解则是必要和非必要,功能性特征起到的是一个提供基本服务的作用,而非功能性特征则是起到一个锦上添花的作用。
完备性
完备性在任何系统中都是重要的非功能性特征,它包含数据的完备性、行为的完备性、以及安全性。
数据的完备性是指数据的完整无误。
行为的完备性是指软件系统可以顺利运行,没有逻辑错误,类似与我们编写代码不会报错吧。
安全性是指软件系统对认证用户授权有限的数据访问与使用功能,就好像我们ftp上老师既可以下载学生作业,也可以上传作业任务,而学生只能下载作业任务,以及上传自己的作业,但是不能下载ftp上的学生作业,这种就是权限的有限给予。
大多数软件错误,比如数据丢失,或被陌生人访问了用户数据,都是系统缺乏完备性导致的。
2.纵观全局
区块链在软件系统中的位置与意义就好比是发动机在汽车中的位置和意义,不同的区块链会给软件系统带来不一样的功能体验。
两种软件系统
线代软件系统主要采用两种架构:中心化架构和去中心化架构。(如图左边是去中心化架构,右边是中心化架构)
去中心化架构中的每个节点彼此相连,但没有一个节点会直接连接所有的其余节点。而去中心化架构中存在一个节点连接其余所有节点,而其余节点间不会直接相连。中心化和去中心化的软件系统可以看作系统架构的南北极
去中心化系统的优势
建立在多台计算机之上的去中心化系统主要有如下的优势:
1.更强的计算能力。
2.更低的成本。
3.更高的可靠性(当一个节点遭到攻击无法工作时,其余节点可以接管该节点的工作)。
4.自增长的能力(一个去中心化系统的计算能力是其所有节点计算能力之和)。
去中心化系统的劣势
去中心化系统具有一下劣势:
1.节点间的协调(节点间的协调过程会产生额外的开销)。
2.节点间的冗余通信(通过通信协议进行通信会产生额外的开销)。
3.对网络的过度依赖(节点以网络作为媒介进行通信)。
4.系统编程具有较高的复杂度。
5.安全问题(任何通过网络传递数据与信息都存在可靠性的问题即诚信问题)。
识别去中心化系统
在系统中尝试寻找是否有一个组成部分可以直接关闭这个系统。如果找到了,那么这个系统就是中心化的,如果找不到,就说明这个系统是去中心化的。
区块链的作用
区块链是去中心化系统中用来实现并确保系统完备性的工具(可以将其看作在系统的实现层上满足非功能性特征的工具)。
3.认识去中心化的潜力
点对点系统对一些第三方中介的经济利益造成很大的破坏。就像Napster,使人们不再依赖唱片公司获取最新的音乐资源,并可以与世界各地的人分享自己的音乐文件,而无需购买任何CD。
术语介绍以及点对点系统与区块链之间的联系
点对点系统的定义:
点对点系统是由若干个节点组成的分布式软件系统,系统中单一节点的计算资源可直接被其他节点调用。所有用户的计算机都是系统资源的提供者和享受者。
点对点系统的架构:
点对点系统是分布式计算机系统,它们由共享计算资源的各个节点组成。然而,还有一些仍然利用中心化设计思想的点对点系统。中心化系统通过维护中心节点以促进系统成员之间的交互,同时维护描述不同节点提供的服务目录或执行节点的查找和标识等任务。
点对点系统和区块链之间的关系:
区块链可被认为是实现和维护分布式系统完备性的工具。完全分布式的点对点系统可使用区块链技术来实现和维护系统的完备性。
区块链的潜力
完全去中心化的点对点系统具有极大的商业潜力,因为它们可以取代中心化系统中靠信息中介建立起来的商业模式。既然完全去中心化点对系统可以使用区块链来实现并维护完备性,那么区块链就变得十分重要了。
4.发现核心问题
在一个完全去中心化的点对点系统中,我们会遇到没有一个中心化的控制方来协调多台独立工作的计算机的问题。
点对点系统中的信任与完备性
信任与完备性是一枚硬币的两面。放在软件系统当中,完备性是对一个系统的非功能性特征的描述:完全、完整、持久、正确,并且不会失控和产生错误。而信任则引申至人类之间对可靠、真相以及对一些事物或者人无理解的相信。在一个点对点系统中,如果人们相信这个系统,并且这个系统的运作结果增强了他们的信任,那么他们就会持续地给这个系统做出贡献,系统的完备性满足了用户的预期,用户也会增强他们对系统的信任。但如果系统缺乏完备性使得用户美欧对这个系统增加信任,那么用户就会抛弃这个系统,从而使得这个系统慢慢走向终结。在点对点系统中实现完备性取决于:对节点数量的了解以及对节点可信度的了解。
点对点系统中的完备性威胁
1.点对点系统的完备性威胁主要包括技术性故障以及恶意节点。
技术性故障
点对点系统是由网络中相互连接的独立计算机组成的,任何一台计算机的任意一个硬件(或核心软件),或这个系统所依赖的网络都有发生故障的风险。因此,一个分布式系统必须面对节点故障或系统运行错误带来的风险。
恶意节点
不可信节点与恶意节点构成了点对点系统面临的最大威胁,因为它们在破坏这个系统的基石:信任。一旦用户无法信任他们的连接方,他们就不会信任这个系统,并且离开。
5.消除术语的歧义
术语
”区块链“这个术语会有以下几种含义。
作为一种数据结构的名称。
作为一种算法的名称。
作为一个完整技术方案的名称。
作为普通应用场景下完全去中心化点对点系统的一个概括性术语。
一种数据结构
数据“区块”形成的链状数据结构是通过一个特殊的编码系统来实现的,这个编码系统与书籍当中页码的编写方法类似,但要复杂得多。
一种算法
当我们把“区块链”作为一种算法来考虑时,指的是在一个完全去中心化的点对点系统中,将大量特定数据结构的数据妥协调度组织在一起的算法,类似于一种完美的民主投票方法。
一个完整的技术方案
当我们把“区块链”作为一个完整的技术方案提出来的时候,“区块链”指的是将区块链数据结构、区块链算法、密码学以及安全技术综合在一起,来确保完全去中心化点对点系统完备性的一个完整技术方案。
在普通场景下完全去中心化点对点系统的一个概括性术语
在这种情况下,“区块链”指的是一个完全的去中心化系统,而不是一个完全去中心化系统的一部分。
临时定义
区块链是一个完全分布式的点对点账本系统,其利用一个特殊算法,实现对区块内信息生成顺序的协调,并使用加密技术对区块数据进行连接,从而确保了系统的完备性。
6.理解所有权的本质
所有权的基础
一般证明所有权需要有一下3个要素。
1.对所有者的证明。
2.对事物被拥有的证明。
3.提供一个所有者和事物之间的联系。
对所有者的证明可以利用身份证、出生证明或者驾驶证,通过序列号、产品证书去区别不同的产品。这一类文件从它们生成之后就不会变化,因此对应的人和产品是不会变化的。所有者和所有事物之间的关联会象征性地通过一个账本进行记录,这个账本并不是一直不变的,而是每完成一次交易,所有权的变更都会在账本中登记。
浅谈安全
身份认证
身份认证指的是通过提供可以作为标识符的相关信息来确认使用者的身份。
鉴定
鉴定的目的是为了阻止有人冒充他人。鉴定就意味着要核实你的确是你声称的这个人。
授权
授权意味着根据对应人的身份特征准许其访问特定的资源或使用特定的服务。授权产生于一次成功的鉴定,以及对其所拥有权利的准确评估。
身份认证指的是确认使用者的身份。鉴定指的是证明你确实是你所声称的这个人。授权是让你根据之前的身份鉴定能访问特定的资源获得到特定的服务,就像之前提到的ftp上只有老师可以获取学生提交的作业,而学生则无权下载观看提交上去的作业。
账本的性质与意义
该图表明一个账本必须同时履行两种相对的功能。一方面能够读取账本中的数据来证明所有权,另一方面账本需要记录每一次所有权的转移,也就意味着新的数据需要被写入账本。这两个功能最重要的不同可以归结喂公开与隐私的不同。区块链是一个能够被任何人访问,拥有类似账本功能的巨大去中心化点对点系统,也可以将它理解为一个去中心化的账本。
所有权与区块链
通过账本和区块链来进行所有权管理之间的联系可以总结为以下5点。
1.单个账本可以用来记录与所有权相关的信息,可以看作一份区块链中存储与所有权相关的数据的账本。
2.单个账本存储在一个点对点系统中的节点上。
3.区块链算法确保了单个节点在进行每一次投票之后,能够同步到同一个状态。
4.系统的完备性是系统具备提供真实且正确所有权描述的关键。
5.在身份认证、鉴定、授权以及确保数据安全性时,必须采用密码学技术。
7.双花问题
双花问题
节点之间传递消息并且更新各个节点上的账本都需要时间,以保证更新到 最新的状态。然而,在节点之间传递信息并更新更新各节点桑的账本都需要时间,知道系统的最后一个节点收到最新的消息,并且完成对自己账本的更新之后,系统才可达到一个稳定的状态。也就是说,有的节点会比其他节点更早得知最新一次所有权转移的信息,而这就给那些提前获取账本更新的节点留下一个利用这一信息来作恶的机会。按照我自己的理解,就是有的节点会利用其他节点还没有接收到这个正确消息的时间差,给这个节点传输错误信息。
术语
“双花”也有以下3种含义。
1.复制数字商品引起的问题。
2.去中心化的点对点分布式账本中可能存在的问题。
3.完全分布式点对点系统中违反完备性的一个例子。
复制数字商品引起的问题
指在复制数字商品时,本该同一时间只有一个所有者的“加密货币”或其他数据出现多个所有者的问题。
去中心化点对点分布式账本中可能存在的问题
将信息同步到整个去中心化系统上需要花费时间,这导致了在同一个时间并不是所有的节点上都记录了完全一致的所有权信息,同步信息慢的节点会被其他拥有最新信息的节点所利用,导致在一个系统中出现同一个所有权在同一时间内多次转移。
分布式点对点系统中违反完备性带来的双花问题
双花问题可以看作去中心化点对点系统中数据一致性的问题。因为数据的一致性时系统完备性的重要组成部分,所以我们可以说双花问题是影响系统完备性的具体例子。
如何解决双花问题
解决复制数字商品引起的双花问题
该问题事实上和所有权的特性有关,如果不限定方法的话,任何可接受的将数字商品映射到其所有者的方法都可解决这个问题。
解决去中心化的点对点分布式账本中潜在的双花问题
“区块链”可以看作是去中心化点对点分布式 账本中潜在双花问题的解决方案。
解决分布式点对点系统中违反完备性的双花问题
如果在不明确应用的特殊要求和目标下,我们无法回答去快来拿相关技术是否是实现并确保系统完备性的正确工具,这就意味着可能在一些去中心化的点对点系统应用场景下,其他的诸如通过设计数据结构和特殊算法等方法,更适合用来确保系统的完备性。
8.设计区块链
起点
作为起点,我们将所研究系统的主要特征概括如下。
1.这是一个完全去中心化的点对点系统,所有计算机资源均由系统用户提供。
2.这个点对点系统的节点之间通过互联网相连接。
3.系统的节点数量,节点是否使得信赖,以及节点的可靠性都是未知的。
4.这个点对点系统的设计初衷是为了管理数字资产的所有权
要完成的任务
描述所有权
设计一个管理所有权的软件系统,必须首先决定如何描述所有权。事实证明,交易是描述所有权转移的好方法,交易的完整历史记录是识别当前所有者的关键。
保护所有权
保护所有权有3个主要部分:识别所有者、认证所有者并限制其他人获得这一数字资产。
存储交易数据
交易记录是证明所有权的核心要素,因此必须要以安全的方式进行存储,而区块链数据结构就类似对账本的数字化。
准备将账本分发到一个不值得信任的环境中
事实证明,防止交易记录被更改的最佳办法就是使其不能被修改。这就意味着账本以及其中的交易历史记录写入后就不能更改。你不用担心账本被篡改或者伪造,因为它们不能被改变。所以之后学习的附加新区块得到链式数据结构是一个可以添加新的区块,但是几乎不可能改变过去已经添加区块内的数据的结构。
分布式账本
管理所有权的分布式系统还涉及对等节点之间的交互问题。
向账本添加交易记录
为确保只添加有效和经过授权午安的交易记录,所有成员将彼此监督,并指出相连节点所犯的任何错误。
决定哪些账本代表了真相
当不同成员节点维护了不同的交易数据,点对点系统中可以存在不同版本的交易历史记录。所以我们需要找到一个查找和选择代表真相的交易历史记录的标准。
9.记录所有权
区块链中权利的交易就像是接力比赛中接力棒的交接,而需要区块链做的就是把这些交接历史记录下来。
目标
以透明的和可理解的方式记录所有权。任何查看交易记录的人,都应能够说明数字资产与其所有者的关联。
一个点子
持续维护一个账本中所有权转让的交易记录,而不是仅用账本描述当前的所有权状态。
所有权数据和交易数据
通过所有权数据或交易数据来描述所有权是两种不同的记账方式。所有权数据描述当前的所有权状态,它更类似于只显示当前可用余额的银行账户交易。交易数据则可描述所有权的转让,它更类似于列出银行账户的每笔提款、存款和转账记录的对账单。
它如何工作
描述所有权的转让
转让所有权的行为依赖于描述所有权转移的数据,这些数据包含执行所有权转让所需的所有信息。这些信息包括:
1.原所有权拥有者账户的标识符。
2.交易目标账户的标识符。
3.要交易的资产数量。
4.交易完成的时间。
5.支付给系统的费用。
6.证明