区块链基础知识(一)

本文将简单介绍区块链公链的基本概念和技术构架,从交易的产生到“区块”这个名称的产生,,从挖矿到区块链攻击,从公链基础功能到基于公链操作系统的可编程环境。本文将从不同的角度,对公链的基本技术术语进行简明阐述,对公链的底层技术感兴趣的读者可以根据本文的介绍,检索相关资料。

1.交易

区块链通常被理解为超级账本,账户与账户之间可以通过交易来完成转账,只是这种转账方式与传统的银行转账有很大的不同。

1)这是一个完全去中心化的金融系统,区块链账户不需要使用者到银行机构或者其他部门申请,因为整个系统种没有这样的中心化部门来管理账户信息,使用者只需要根据一种非对称加密算法生成一个密钥对,其公钥作为账户地址,也就是常说的区块链钱包地址,这个地址可以再网络中广播,允许网络中所有的账户获取和使用,下图为QKpay钱包地址。

该账户地址是公开的。私钥作为转账交易的签名和密码,由使用者私人保管,每次转账时,需要通过私钥签名来证明交易的合法性。在现实使用种,私钥往往非常长,而且非常复杂,因此区块链钱包会将私钥进行对称加密,通过使用者输入人类能够理解的密码作为使用加密的密码作为私钥加密的密钥,将区块链密钥以密文的形式保存在磁盘空间里。但是如果忘记解密密钥的密码,用户就失去了对账户的操作权限,也就是说即使账户有余额并且可以查看,也无法进行转账和使用,这就是社交媒体经常报道的丢失比特币的情况。

2)这是一个完全无中心的账本系统,其交易方式与传统的交易系统有着本质的差别,传统的银行系统中,当A转账100元给B时,银行从数据库中将A的账户扣除100元,同时在B的账户下增加100元。在这个过程中,数据库是在银行的严密保护下操作的,扣除与增加金额的操作需要很高的安全级别才能进行,并且查询余额用的数据库和真正写入的数据大多数情况下是能分离的。尤其需要注意的是这个过程生成的交易记录至少有2条:1条是从A的账户下扣除金额的记录,另1条是在B的账户下增加金额的记录。

而发生在区块链上的交易规则完全不一样,在区块链上每一笔交易都是一条转账记录,如果该交易成功被整个区块链网络认可则转账成功,并且会将转账记录存储在区块链的数据库里面,每个区块链节点都可以访问和操作这个数据库,并且任何人都可以查询交易双方的账户信息。对于比特币网络来说,比特币的转账,除了转给对方,还要将账户下的余额转给自己,这样就会生成多条记录,这样做事因为比特币没有账户余额的设计。

如上图所示,Bob给Alice转0.5 BTC时,会生成2条交易记录,1条记录是Bob→Alice,另1条是Bob→Bob,这些交易使用的非对称加密技术的加密和验证签名技术。需要指出的是,这样可以再没有任何中心化银行提供服务并且没人掌握交易接受者或者发生者密钥的情况下,实现公开、安全的转账交易。即使交易数据公开在网络中传播,也无法被篡改,即无人可以将Bob转账的0.5 BTC修改为5 BTC,因为任何数据的变更都会导致数据的Hash值变化,进而导致数据的签名无法被检验通过,进而无法被全网认可,也就是说伪造任何报文和交易,都是无法被网络认可的。这样,比特币在没有银行并且公开交易信息的情况下也能转账。

3)发生在区块链上的交易,是存储在区块链网络中所有的全节点(拥有所有交易数据的区块链节点叫做全节点)上的,并且也是公开可查的,用户不仅可以查询某个账户下的所有交易,还可以查看其账户余额,这与银行的交易记录也是截然不同的。

如上图所示为Qscout区块链浏览器,这些查询系统被称作区块链浏览器。与银行不同的是,即使能看到区块链交易的所有细节及所有账户的余额,也无法将账户与现实世界中的人联系起来,这与银行系统的账户设计完全不同。

2.区块

所有的交易信息都会形成一个结构化的账本,它们会被区块链节点(矿工)按照一定的方式和时间间隔组织起来,存储在区块链节点中。这个用于存储交易信息的结构体就是区块,除了交易信息,区块还要存储一些的额外的信息以保证交易数据的完整性和可靠性。

该结构图仅列举了一些关键信息,不同的公链有各自不同的设计。关于区块的生产间隔,不同的区块链网络有不同的设定,比如夸克区块链出块的时间间隔约为5s,而比特币网络则需要10min才生产一个区块。

区块数据包含区块头与区块体,区块体存储的交易及交易相关的原始数据,区块头存储的是原始数据的Hash信息,任何对原始数据的修改,都会引起区块头Hash值得变化,这样对任何信息的篡改都很容易被察觉到并被验证为假数据。除了交易原始数据和对应得Hash信息,还有一些为了维持区块安全性和有效性的附加信息,比如区块高度、区块难度、矿工地址等;不同的公链系统,还有不同的额外信息,比如以太坊会有状态变更的原始数据和对应的默克尔树信息、收据信息和账户余额信息等。

因此区块的作用就是将不同时间阶段的交易数据按照一定的格式和数量,打包成结构化数据,方便存储和管理。只有被打包到区块中并且被全公链网络认可的交易,才能算作真正的有效交易,此时账户下面的数字货币数量才会真正的发生增减,如果交易失败则转账无效。

3.链

区块头和区块体数据也会被当作输入数据做一次Hash运算,其运算结果都会被存储在下一个区块的区块头中,这样任何区块内容的修改都会反映到区块的Hash值上,而区块的Hash值又是下一个区块的输入数据,它又会被当作新区块的数据参与一次新区块的Hash运算,随着时间的推移和交易量的增加,所有的区块会通过保存前一个区块的Hash运算结果的方式组成一条链。

图为区块链数据结构,对这个链的数据进行任何篡改,都需要修改此链的所有数据及对应得到Hash值,只有这样篡改数据才能被校验为正确的数据。这需要非常强大的算力来支持,同时需要比较长的时间才能完成,而在篡改数据的过程中,还会不断有新交易加入区块链,因此从工程实现的角度来讲,这种篡改不如进行算力挖矿划算,完全得不偿失。

将交易打包成数据块,再将数据块以Hash值得方式组织成链式结构,就是区块链定义的来源。这种结构有点类似于计算机数据结构中单向链,不同的是,这个链式结构不再局限于单个计算机,而是由分布在全世界的节点构成,任何人都可以公开查询,但又无法任意修改。

订阅我们的新闻
获取最新的文章
更多内容
您想提升区块链认知吗?
让我们保持联系