认识区块链技术

什么是区块链

  1. 让很多人一起监管的数据库,保证历史数据不会被某个机构篡改
  2. 密码学保护:别人无法伪造你的信息,盗号难度极大,保证数据的真实性
  3. 信息公开:所有信息公开透明,如果有隐私数据,可使用哈希算法或密码学加密后上链,需要时获取密文并解密即可,或直接提供明文证明真实性
  4. 智能合约:公开代码的程序,大家按照某个公开的智能合约规则做事,不用担心暗箱操作,就像一份合同

特性:

  1. 多节点监管: 区块链本质上是一个分布式的数据库,由多个参与者维护并监管该数据库,由于共识算法的保护,除非全网大部分参与者达成协议,否则不可能对区块链的历史数据进行更改,让该数据库不被某个公司或机构完全控制,实现去中心化,减小被攻击的风险。监管者的数量越多分布越广,区块链就越安全,不过因为不可能三角问题,一些区块链平台为了性能,牺牲了部分去中心化。
  2. 信息不可伪造: 因为密码学的原因,区块链还可以保证数据的不可伪造性、账号安全和身份认证(想伪造我的信息必须拿到我的私钥(私钥:可用于加密信息或数字签名,破解难度极大))。
  3. 信息公开: 因为所有参与者都保存有一份数据,公链中的信息是公开透明的,联盟链中的信息对联盟内部公开,公开的部分包括:交易信息,账户状态,合约代码,合约变量,当然你有隐私数据不想公开也可以使用密码学的工具将信息加密之后放到链上,需要使用时再解密读数据,别人拿到数据可以在链上验证(用信息上链人的公钥对数据加密得到密文再和链上数据对比,验证这个数据是否在链上)。合约代码公开这一点很有趣,可以在这方面发挥一下想象力。
  4. 智能合约: 在比特币之后,出现了以太坊,以太坊在区块链上增加了虚拟机,使得用户可以在区块链上部署程序,并与之交互。而以上三点说明了为什么需要在区块链上运行程序

比特币的性能低下和能源浪费:

  • 多数人对区块链最初始的认知是比特币,而比特币的性能低下和能源浪费给人们留下了不好的影响,觉得区块链都是这样一个鸡肋的东西。其实比特币的性能低下和能源浪费主要是因为她所使用的共识算法POW——工作量证明算法,该算法使用了一种计算竞赛的模式来维护比特币网络,使全网保持数据的一致性。
    而在比特币之后的区块链项目中出现了很多pow算法的替代方案,例:pos,PBFT,Dpos,tendermint,hotstuff等,这些新的共识算法解决了比特币性能低下和能源浪费的问题,使得区块链能在各个领域投入使用

一些基础概念:

  • 交易: 交易是用户与区块链进行交互的唯一途径,合约创建的代码和合约调用都是通过交易实现

  • 节点: 每启动一个区块链客户端即开启一个节点,一台机器上可以同时部署多个节点

  • 密钥对: 分为私钥和公钥,公私钥都可以用于加密,公钥的加密只有对应私钥能解开,私钥的加密只有对应公钥能解。一般对外公布公钥,使用私钥对将要发出的交易签名,验证者们使用已公布的公钥来验证签名的合法性。

  • 密钥对的生成: 随机生成一个32字节的字符串的私钥即为一个账号,通过椭圆曲线算法ECDSA-secp256k1 可将私钥映射成公钥,公钥通过keccak-256散列函数得出256 bit固定长度值,取后20个字节即160 bit 即为账号。只要拥有私钥,就等于拥有了这个账户,可以把账户里的钱转走,所以私钥对于区块链来说是非常重要的。

从信息上链流程看区块链:

  1. 账户创建: 用户可以在本地或者通过某个可信的钱包软件生成账户,其中包括地址、私钥、公钥、助记词、keystore文件,其中私钥和助记词是最敏感的,拿到其中一项就可以使用该账户。而keystore文件是为了方便使用,将私钥、公钥、地址用一串密码加密保存在本地的文件,需要时再使用密码解锁,你可以创建多个keystore,只要记住对应密码就行,但私钥和助记词是唯一的,重要的事情一直说。

  2. 创建交易: 最原始的方法当然是直接控制台打命令发交易,将需要填写的信息写入并签名即可,例如接收方,转账金额,gaslimit等。普通用户发送交易肯定不会去控制台噼里啪啦,这时候使用到了web3,在写应用时使用web3来调用区块链接口实现交易发送等功能,当然合约的调用和创建也能通过web3实现。

  3. 交易广播: 将签名后的交易发送后,交易会存在节点的交易池中,检查无误后广播到区块链网络中

  4. 矿工打包: 当前矿工收到交易后会对交易进行检查、处理,并将多个交易和其处理结果打包到一个区块里,然后将打包好的区块广播(广播对象由共识算法决定,因为有些共识不需要全网参与,普通节点只需要拉取已经达成共识的区块就行了)

  5. 共识验证: 区块被挖出之后还需要经过其他验证者的验证并达成共识后才能真正上链。共识算法种类繁多,每条链的共识规则也会有不同,不过最终目的都只有一个,让整个网络最后确定的数据是完全一致的,这样就达到了之前说的多节点共同监管维护一个数据库的目的。

交易上链改变了什么:

  • 交易本身永久存储,想删也删不掉,这是区块链的历史不可篡改性
  • 区块链中有个概念叫世界状态,它记录了所有用户和合约的状态,例如账户余额、合约代码、合约内的变量。当一个区块被共识最终确定并上链,该区块所修改并记录的世界状态就是最新的世界状态,下一个区块的生产必须基于最新世界状态做修改。(注意:这两点并不冲突,区块链的不可篡改是历史交易不可篡改,世界状态可变,用户在链上所做的行为不可篡改。例如:一个装有监视器的房间里有一堆苹果,某人进来拿走了一个,这时苹果总数变化了,但是苹果被这个人拿走的行为被摄像机记录下来了)

有链式结构和共识算法支撑的不可篡改性:

  • 区块链中,区块之间使用链式结构链接在一起,这加大了本地修改数据的难度,也方便验证区块的合法性和每个节点间链的一致性。每个区块都会存储上一个区块的hash值,就是说有人修改了其中某一个区块,那必须将该区块之后的所有区块都改了才行,否则hash对不上。不可篡改性除了链式结构还有共识算法的支持,就算将本地所有的区块都修改了,但整个区块链网络是通过共识算法来确定数据一致性的,和大多数人的不一样的节点数据可以判定是错的,不会同步该数据。除非将网络中大多数节点的数据全改了,否则想要修改历史数据是不可能的。

链上应该存些什么?

  • 如上述信息上链流程所说,信息的上链需要经过一条略繁琐的流程,比较耗时耗存储空间的操作放到链上执行是非常不划算的,所以上链之前应该先理清思路,业务中有哪些是需要放上链的,哪些在链下处理也行,尽量保证上链逻辑安全简单,上链数据精致有效。具体可以了解一下fisco官方的 一文说清“链上”和“链下”

你可能感兴趣的:(区块链,区块链)