区块链入门简介
概述
维基百科上对区块链的定义如下:
A blockchain originally block chain is a continuously growing list of records, called blocks, which are linked and secured using cryptography.
区块链可以理解为一个去中心,去信任的数据结构,它不是一种全新的技术,而是多种现有技术的的整合,这些技术包括:密码学,分布式系统,P2P网络,共识机制等。
数据结构
区块链中的数据是以区块+链的数据结构存储的,区块链的名称也因此而来,每个区块分别由区块头和区块体组成,在区块头中会包含之前前一个区块头的指针。
交易
不同于传统的给予信任的金融交易,区块链的交易基于密码学。交易的发起者需要使用私钥对交易签名,交易接受者通过发起者的公钥验证签名。
通过非对称加密解决了交易发起者的身份问题,但是还存在双花(dobule-spending)问题,即:交易发起者将同一个电子货币同时交易到不同地址,比特币通过分叉+延迟确认的方式来解决双花问题。
网络
区块链是基于分布式系统,每一笔交易都需要经过网络中所有节点的验证,并最终达成共识,最终形成新的区块并附加到链的最后。
共识算法
由于区块链中的交易验证&确认等相关操作是在网络中所有节点中进行,需要有一种机制确定最终需要加入到链中的区块,这种机制即为共识算法,常见的共识算法有:POW(Proof of Work), POS(Proof of Stake),RAFT,IBFT等。
比特币采用的是POW共识算法,在比特币的区块头中包含一个nonce字段,所有参与区块验证的节点需要不断的调整nonce值,使得区块头的(双重)hash值满足一定的条件(前置若干个零)。
激励
- 对于pow共识算法的取款链,当某节点完成工作量证明后,会额外奖励一定数额的加密货币(挖矿)
- 对于以太坊这类区块链,完成交易需要支付一定的费用(Gas)。
特点
去中心 - 数据分布式存储和更新并通过共识算法保持一致,每个节点都包含完整的数据,从而去除对单一中心的依赖
匿名 - 各个节点遵循固定算法进行数据交换,交易依赖地址
不可篡改 - 区块+链的数据结构保证一旦被写入区块就无法被修改
去信任 - 区块链基于固定的算法完成交易,无需可信第三方
平台
- 比特币
- 以太坊
- Fabric
区块链开发
Web & 移动应用开发
基于区块链开发相关的web或移动应用,所使用的技术和目前主流的web & 移动开发没有大的区别。
智能合约开发
智能合约开发主要是使用类似solidity这类语言,相对于传统的编程语言更为简单,缺少了多线程,并发等复杂特性,本质上智能合约即是面向区块链的商业合同,因此智能合约的难点在于理解商业逻辑。
区块链平台开发
区块链平台开发即区块链节相关开发,涉及的编程语言有c++,go。java等,需要对分布式系统,p2p网络,密码学等区块链底层技术都有一定的理解。