前言
最近的招聘面试时,我一般会问对方有什么想要了解的事情;
很多对区块链不熟悉的人都会问一下区块链到底是什么,我一般都会给他们耐心讲解和解答。
说了几十遍后, 我提炼总结了一个简化版本的, 5分钟搞懂区块链核心;
简述
首先将区块链理解为一个分布式署数据库, 例如 一个拥有很多节点的mysql数据库集群;
它有 2 个关键特性。
- 数据只能 插入+查询, 不能更新和删除;
- 每个节点的数据都完全相同, 且每个节点都可以读写,每个节点新插入的数据会同步给其它所有节点;
好,这就是区块链中最关键的2条基础准则了,由此衍生出来了整个区块链技术栈。
你可能会发现和其它的数据库集群似乎没有什么不同;是的,区块链本质上就是一个数据库;
但区块链相比其它数据库,最为关注的目标是 “数据的不可篡改性”。
单节点内数据的不可篡改性
如何保障不可篡改?
以数据库为例, 如果每一行记录的头部附加一个字段,用来记录上一行内容的hash。
这样每一行数据都和前面的每一条记录有关系了,反过来前面的任一行记录都和最新行也是有关系的;
删除或修改表内任何一条数据,那么这条记录之后所有的行的 hash 值都会被影响;
这个就决定了当前节点的某条数据如果被篡改了, 会立即发现;
多节点的不可篡改性
如果操作人登录服务器修改了当前节点的所有数据,甚至直接替换了节点的二进制程序文件;
又该怎么办呢?
- 其它节点不接收关于历史区块的任何修改广播;
- 其它节点不信任广播来的任何hash值, 所有hash必须通过自身的数据进行计算出来或校验。
于是攻击者最多只能篡改控制的少量节点内的数据,集群内其它的多数节点中的数据仍然是正确的;
最新数据的可信
某节点写入一条数据后, 会将数据和hash 广播给其它节点;
其它节点会根据广播来的数据 独立计算 hash, 如果接收的 hash 和自己计算出来的 hash 不一致, 则这个同步来的数据是错误的,需要丢弃。
写限制
如果我一直发送垃圾数据怎么办呢?只是垃圾数据同步的就可能耗光集群的资源。
传统集群怎么做的呢?
- 网络限制, 只有可信源ip地址可以访问
- 身份限制, 使用账号密码或证书限制访问
- 速率限制, 限制某个客户端可以发送的速率
例如,目前同一银行内小额转账虽然一般是不收手续费的,但转账次数一多就会触发风控限制;
区块链一般是怎么做的呢?“gas费”
每笔交易都需要出一定的手续费, 只要支付了手续费,就不算垃圾数据;
目前的公链都需要交易手续费, 所以公链都会发币。
数据的相对可信
你打开手机银行 app, 看到余额有2万,就认为这个数是真实的,你是为信任这个数呢?
后台工作人员难道不能篡改这个余额吗?
答:还有交易流水可以算出余额。
那么后台工作人员将交易流水一起窜改呢?
答:还有第三方入账的流水记录,例如另一个银行转过来的记录;
有没有可能2个以上的银行后台人员合谋篡改这些记录呢?
答:也是有可能的,只不过作恶者不可能为了我这么少的金额费那么大功夫;
更关键的还有银行的信誉和政府监管。
嗯,那么我们就确定了银行数据的可信来源:
- 我的资金不大,篡改成本较高;
- 银行历史信誉很好,百年品牌不可能自砸招牌;
- 银行的管理措施:权限管理, 风控、审计等等管理措施和审计措施;
- 可信任政府监管。
那么你原因把钱存到非洲某小国的某某银行吗?
答:不愿意。
最终原因还是因为不可信。
那为什么区块链的数据是可信的呢?
比特币的可信:
- 历史数据全网非常多节点都有,篡改历史记录难度太大且无意义;
- 篡改最新数据: 需要全网算力的一半,成本太高;
以太坊等质押模型的可信:
- 历史数据全网非常多节点都有,篡改历史记录难度太大且无意义;
- 篡改最新数据: 需要控制全网质押总额的 2/3, 基本上不可能做到;
银行的可信是相对的, 主要是依靠人和组织的可信程度。之前没出过问题,不代表以后不会出问题;
区块链的可信是 数学+成本,只要公开的数学hash算法没有漏洞, 以及足够高的成本,就可以认定为可信;
这2者谁更可信呢?当然是智者见智吧。
就这个点来说,区块链的很重要一个用途就是:在不可信的网络中维护一个可信的数据存储。
数据和状态
有一个很重要的地方就是 区块链的 交易数据 和 交易状态;
用一个简单例子来理解: 1+2=3
这个 1+2 就是交易数据, 是需要向全网所有节点广播的内容;
=3 这个值就是交易的状态, 这个值是由当前节点通过 交易数据独立计算出来的,是不接收外部输入的;
区块链中所有的 hash 也都需要本地节点独立计算出来,外部传来的任何hash都不可信,当前节点只是做简单的比对和校验。
交易hash: 简单理解 md5(1+2) 的值
区块hash: 某一批交易的总 hash 值
应用场景
在任何需要“最严格的数据最终一致性和防篡改”的场景都可以使用区块链技术;
虽然现实中很多场景似乎都需要,但是目前 最最最需要数据安全的场景就是 金融行业, 毕竟与钱有关的值都非常需要可信;
因为离钱最近的行业从业者通常又是最能赚钱的,所有web3中区块链金融一直是最热的;
其它场景举例:
场景一: 个人档案
如果这个数据库用来存储所有人的个人档案, 例如每人每月新增一条记录;
交易频率也不需要太高,大家对档案的可信度要求也是很高的:
场景二: 通信交流
对每条发言进行一次 hash, 并上链,防止后续篡改历史交流数据。
区块链的一些局限性
为了数据的强一致和不可篡改特性,自然需要在其它地方做取舍了;
- 通常来说性能都不太好,一分钟几百笔交易都算很大规模了
- 因为防攻击的措施是gas费, 所以每笔交易都需要控制成本
- 因为控制权的分散,所以版本升级比较麻烦,需要提案投票等大家达成共识,周期一般很长。