How to learn Blockchain
确定方向
从事区块链开发也有很多方向,如:区块链应用开发人员、区块链架构师、底层核心开发、共识算法研究等等。
方向不同,需要学习的内容就不一样,如果做基于区块链应用开发,只需要了解一门编程语言(nodejs, Go, Python, C++ 等), 大概了解区块链的原理,不一定要深入,当能理解越深入开发应用就越顺。
如果做区块链基础开发,就需要了解加密算法,P2P通信,共识算法等等。
投入时间学习-动手实践
由于区块链涉及的技术很多,可以相对各个技术有一个概念了解,再逐步深入原理。
总=(深入)>分=(总结)>总;逐步深入的过程也是解答疑问的过程,需要我们善用Google搜索。
如果觉得已经理解一个概念或原理时,可以尝试动手实现它,如在理解挖矿后,可以写代码模拟挖矿过程。实践检验学习,画出脑图,印在脑中,记录下来
学习是一个长期的过期,没有捷径,必须得多读书,读代码,写代码。
学习资源介绍
比特币:一种点对点的电子现金系统-英文
比特币:一种点对点的电子现金系统-中文
以太坊白皮书-英文
以太坊白皮书-中文
区块链技术指南-电子书
区块链开发指南-纸书
比特币 - 官网
以太坊 - github
超级账本Hyperledger
ETHFANS - 社区
深入浅出区块链
08年次贷危机;中心化的思想 => 比特币,revolution,技术改变世界,去中心化。
Blockchain introduction
什么是比特币
比特币是一种基于分布式网络的数字货币。
比特币系统(广义的比特币)则是用来构建这种数字货币的网络系统,是一个分布式的点对点网络系统。
本文立足于狭义的区块链货币。
数字货币是什么
凯恩斯在《货币论》上讲,货币可以承载债务,价格的一般等价物。货币的本质是等价物,它可以是任何东西,如:一张纸,一个数字,只要人们认可它的价值。人民币,美元等作为国家信用货币,其价值由国家主权背书。而数字货币是一种不依赖信用和实物的新型货币,它的价值由大家的共识决定。比特币就是一种数字货币。(我们在网银,微信,支付宝的金额,准确来讲,它是信用货币的数字化,不是数字货币,不过央行也在研究比特币,准备发行数字货币)
运行原理
在银行系统的数据库里记录着跟我们身份id对应的财产,下文称这样的记录为账本,如张三的卡10月1日转入1w, 余额10w。
比特币系统也同样有这样的账本,不同银行由单一的组织负责记录,比特币的记账由所有运行系统的人(即节点,可以简单理解为一台电脑)共同参与记录,每个节点都保存(同步)一份完整的账本。
同时使用简单多数原则,来保证账本的一致性。举个例子:如果有人在自己电脑上把自己的余额从1万改为1百万,他这个账本和大多数人的账本不一致,就会被比特币系统认为是无效的。
比特币使用区块链技术来支撑整个系统的运行:
区块链记账原理
比特币所有权问题
比特币如何挖矿
进阶阅读:
分析比特币网络:一种去中心化、点对点的网络架构,可以详细了解比特币网络。
比特币区块结构Merkle树及简单支付验证分析,可以详细了解区块结构如何验证交易。
区块链记账原理
区块链(1.0)是一个基于密码学安全的分布式账本,是一个方便验证,不可篡改的账本。
通常认为与智能合约相结合的区块链为区块链2.0, 如以太坊是典型的区块链2.0
很多人只了解过比特币,不知道区块链,比特币实际是一个使用了区块链技术的应用,只是比特币当前太热,把区块链技术的光芒给掩盖了。区块链才是未来,期望各位开发人员少关心币价,多关心技术。
本文将讲解区块链1.0技术是如何实现的。
哈希函数
在讲区块链记账之前,先说明一下哈希函数。
哈希函数:Hash(原始信息) = 摘要信息
原始信息可以是任意的信息, hash之后会得到一个简短的摘要信息
哈希函数有几个特点:
- 同样的原始信息用同一个哈希函数总能得到相同的摘要信息
- 原始信息任何微小的变化都会哈希出面目全非的摘要信息
- 从摘要信息无法逆向推算出原始信息
举例说明:
Hash(张三借给李四100万,利息1%,1年后还本息 …..) = AC4635D34DEF
账本上记录了AC4635D34DEF这样一条记录。
可以看出哈希函数有4个作用:
简化信息
很好理解,哈希后的信息变短了。
标识信息
可以使用AC4635D34DEF来标识原始信息,摘要信息也称为原始信息的id。
隐匿信息
账本是AC4635D34DEF这样一条记录,原始信息被隐匿。
验证信息
假如李四在还款时欺骗说,张三只借给李四10万,双方可以用AC4635D34DEF来验证原始信息。
哈希函数的这4个作用在区块链技术里有广泛的运用。
(哈希函数是一组函数或算法)
区块链记账方法
假设有一个账页序号为0的账页交易记录如下:
账号 | 入账 | 出账 | 余额 | 备注说明 |
---|---|---|---|---|
王二 | 100 | 190 | 收到xx货款 | |
张三 | 100 | 30 | xxxx | |
李四 | 120 | 90 | 170 | xxxx |
记账时间为:2018-11-11 10:22:02
区块链在记账是会把账页信息(包含序号、记账时间、交易记录)作为原始信息进行Hash, 得到一个Hash值,如:787635ACD, 用函数表示为:Hash(序号0、记账时间、交易记录) = 787635ACD
账页信息和Hash值组合在一起就构成了第一个区块。
比特币系统里约10分钟记一次账,即每个区块生成时间大概间隔10分钟
在记第2个账页的时候,会把上一个块的Hash值和当前的账页信息一起作为原始信息进行Hash,即:
Hash(上一个Hash值、序号1、记账时间、交易记录) = 456635BCD
这样第2个区块不仅包含了本账页信息,还间接的包含了第一个区块的信息。依次按照此方法继续记账,则最新的区块总是间接包含了所有之前的账页信息。
所有这些区块组合起来就形成了区块链,这样的区块链就构成了一个便于验证(只要验证最后一个区块的Hash值就相当于验证了整个账本),不可更改(任何一个交易信息的更改,会让所有之后的区块的Hash值发生变化,这样在验证时就无法通过)的总账本。
记账有成本,想了解节点为什么要记账,请看这篇:比特币如何挖矿(挖矿原理)-工作量证明