把市值3.5万的比特币按在地上爆锤,区块链才是究极王者!
前阵子股票、基金大涨,比特币也像打了鸡血一般狂涨,一度冲击4w大关。紧接着,各种凡学新闻扑面而来: 丢了2.4个亿的程序员、花10000比特币买pizza……
然而很多人不知道 比特币的底层应用——区块链 。在入币圈之前,建议别盲目投机,先把底层原理搞清楚,才不至于被人割韭菜。
关于区块链,这必须要请出我们的广贞老师了,目前国内TOP1教育科技集团区块链团队领队,带领团队获得国内区块链专利17项,教育部《区块链在教育领域中的应用》白皮书主要执笔人之一。
要学习区块链技术,首先要对区块链的概念和组成有基本的认识,这样学习才会有方向。以下内容是广贞老师《 区块链实战—从原理到应用 》的干货分享,话不多说,我们进入正题。
区块链的组成
- 区块链存储是一种链式存储,区块链按生成的时间顺序前后链接( 时间戳 )。
- 区块生成后会在区块链系统的各个节点做分布式同步,存在多个全量数据节点( 分布式一致性、CAP )。
- 异地分布式同步,远程通信及协议。( 点对点通信 )
- 严禁数据删改,登记一切数据操作历史。( 日志系统 )
- 区块链上每一步操作、数据传输、状态转移,均须建立在可信计算的基础上。( 密码系统、安全计算 )
区块链的技术组件
- 语言基础:JAVA/GO/C++
- 分布式一致性工具:Kafka/Zookeeper/ETCD
- 数据库:FS/Nosql/MemCache/SqlServer
- HTTP协议:P2P/WebSocket/HTTP/RPC
- Docker
区块链技术研发推荐用Go语言,也有用Java的。比如蚂蚁金服团队主要是招Java工程师,做业务端工作,安全方面的算法工作会用偏底层的C++。不过从大趋势来看,Go语言会是主流,比如腾讯云招人指定要求Go语言。

区块链的算法
- CAP: Paxos/Raft/XBFT/PoW
- Crypto: ECC/SHA-256/AES
- Graph: DAG
- P2P: Kademlia/DHT
- 协议: P2P/GHOST/Gossip
其中前两项必需,后几项有的话加分。
区块链的价值
学习区块链技术自然要考虑区块链的价值。《资本论》有云: 使用价值是价值的前身。 所以在讨论区块链的价值之前,一定要看区块链的使用价值。我们说 链上数据的使用价值决定了区块链的使用价值,而区块链的使用价值,确保了链上数据的使用价值。
无论是自己使用,还是面试时考虑雇主情况,一定要首先想明白这个问题。
目前,2个经典公链(比特币和以太坊)和1个经典联盟链(超级账本Fabric),基本全面覆盖了区块链的技术体系,包括 系统架构、共识机制算法和区块数据结构 。区块链的体系结构是通过“层”的形式的。

来源:《区块链白皮书(2018)》
这里我们以比特币为例,来详细拆解区块链技术。
比特币的系统架构

1.存储层 :用于存储系统日志数据和元数据,主要使用文件系统和LevelDB。
- 键值数据库,按键有序存储,可自定义键大小比较方法
- 底层存储利用了 LSM 树的思想
- 提供增删改查,相比 Redis 大量省内存,持久化存储
- 支持数据快照,支持批处理,读写分离,可能看到脏数据
- 支持数据压缩
- 性能:写 40万/秒,读 6-10万/秒(LSM)
其中LSM解决传统硬盘读写机制,随机读写远逊于顺序读写的问题,相差至少三个数量级。

2.数据层
- 将数据打包成为区块
- 区块中内容的加密与散列计算
- 区块内容的数字签名
- 为区块打上时间戳印记
- 将交易数据构建成为默克尔树,计算树根散列值
- 将区块构建为链式结构
3.网络层 :构建动态点对点通信网络,支持实时网络节点的加入和离开。
4.共识层 :工作量证明的共识算法,本质是分布式锁。
5.通信层 :提供“远程过程调用”服务结构,提供JSON接口供客户端访问底层服务。
6.应用层
- 远程过程调用客户端;
- 比特币钱包管理钱包(地址)、查看余额、转账等操作;
- 彩虹币,游戏充值等等
比特币共识机制——工作量证明

- 基于散列算法实现。
- 暴力攻击一个结构化的目标散列值(前导若干个零的目标值)。
- 基于1、2,除了暴力破解别无它法(即所谓的『电子计算机的工作量』)。
- 自动化检测暴力攻击效率,随着攻击效率提高,提高破解难度。
- 基于4,维持平均破解时间在十分钟左右,每两周(2016个块)调整一次难度。
- 是目前唯一一个,『可信时间戳』自建,不依赖外部授时的内建时间系统(生物钟)。
比特币数据结构

- 上述六个字段里,nVersion、hashPrevBlock、nBits是全网统一的。
- nBits每2016个区块链调整一次,调整算法固定。剩下的三个字段,则每个节点均有权自建。
- nNonce是用于攻击SHA-256目标散列值的可调参数,但它不是唯一的可调参数,通过调整交易顺序,以及关联的手续费而决定的该区块的币基值,以及币基收益地址,hashMerkleRoot的值也会变化。
- nTime用于区块竞争,同一高度的新生区块,该值最小的被全网采用,因此矿工会尽可能让该值取小。虽然由矿工自定,但受规则约束,该值不得早于前11个区块的时间戳中位数,否则视为非法区块。
另外关于 以太坊 和 超级账本Fabric 的架构,广贞老师在《 区块链实战—从原理到应用 》都会有详细讲解,另外还会带你手把手实战3个区块链项目,首节课程目前免费开放中,想要从事区块链开发或者对区块链行业有兴趣的同学可以来看看。