区块链?黑人问号?NO.1
# 区块链的大白话
我是小蕉。
从前的从前啊,有一个桃花屯,屯里住着一群跟小布小青这样的种田青年。屯里出现了这么一件事,每年的收成都是几千斤几千斤这样,每次出去卖一趟粮食,我了个乖乖,累死我娘的宝贝儿子了。这时候有个聪明的小蕉站出来了,说我们不如就用粮票来代表粮食,见票如见粮,这样大家都可以轻松点啦。商人一般都很奸诈的嘛,肯定会有贪小便宜的人,最后搞得你也不信我我也不信你,你的票可能是自己手抄的,你也不一定有这么多粮食。
区块链最根本的就是解决信任问题。
以前的解决方法就是,大家不是谁都不信谁嘛,那好啊,来搞个粮局,大家都来这里登记,不就一了百了了吗?
但是随着大家交易越来越大,问题就来了,粮局的成本越来越高,而且不同地区的不同粮局在结算的时候很慢,这就让大家很难受了,这怎么办呢?是吧?
这时候鸡贼的小蕉又出来了,那好咯,大家不是家里都有电脑吗?每个人都记一下账咯,规则就这样定。由系统来决定一个记账难度,大家都来竞争记账,记账完成的告诉大家一下,大家都来验证这位青年的记账是不是符合结果,如果符合,哎呀~那好,咱就按他的账本为准,大家都更新一下,接在账本的后一页。就像在一根绳子上打结一样,一次打一个结,一次打一个结,无论绳子有多长,总能找到绳子的第一个结。
竞争使用的一般是计算过程难,但验证过程简单的方式
具体这个竞争记账是怎么来实现呢?一般说有两种,一种叫智能公约,也就是大家按照既定的约定来进行记账。另外一种就是我们今天要讲的比特币的竞争记账方式,叫工作量证明。你说你算出来了,那我肯定是不信的,我一定要自己试试看。诶,你算出来的结果还真是符合前8位都是0呢,哎呀呀,好好好算你大功一支,奖励大公鸡一只。
这个过程的难度是怎么样呢,就是希望在针海里把针头上的原子数为某个数值的针找回来。这就麻烦了,要去找到这根针,只好慢慢捞了吖,而且规定捞过的针如果没用处就得丢掉,捞上来还要去鉴定一下是不是符合规定,除了一根一根捞没什么其他的办法了。但是证明这根针是不是符合规定,每个人只需要用自家的仪器看一看就可以了。
每一个字符串经过哈希算法能产生一个固定长度的随机串,而且不能反推出原来的字符串。
那如果整个屯的人都合作起来一起做假账,或者大部分人要做假账,也就是传说中的一张粮票取两次粮的事情,该怎么办呢?哎呀我天啊,这种屯还怎么发展下去,每个人都有自己的利益的,这种损人不利己的事情他们是不会做的,但是如果有一个大老板把他们全部贿赂了咋办?那只好抱佛祈祷这个屯里的村们了,在绝对的实力面前任何策略都没有任何的作用。
少年你还是对力量一无所知
好了,那如果有两户人都一起计算到符合条件的结果呢,咋办好?那就一起记咯,直到最长链出现,就抛弃短链,再把这些在主链上没有父块的孤儿块重新放回交易池,等待下一次记账把它们收养到最长链上。
出现分叉链会继续记账,但是最终会把短链边缘化
总得来说,区块链就是一项屯里的村民互相不信任,但是要高效记账的一项技术。只有屯里的几个人用,别的人想看都没得看,叫私有链。所有的人都可以随意用,叫公共链。只有少数几个人掌控大权,其他人只能是小喽啰,叫联盟链。链接多个区块链的技术,叫互联链。
从此,桃花屯的小青年商人们又愉快地生活了,他们经常想起那些天在夕阳下的奔跑,那是他们逝去的青春。
- 【技巧】应赛技巧,教你如何在Kaggle比赛中排在前1%
- 熔断器 Hystrix 源码解析 —— 命令执行(一)之正常执行逻辑
- 智能主题检测与无监督机器学习:识别颜色教程
- 如何下载安装Weka机器学习工作平台
- Dubbo 源码解析 —— LoadBalance
- 如何处理机器学习中类的不平衡问题
- 【死磕Java并发】—– Java内存模型之重排序
- Mask R-CNN源代码终于来了,还有它背后的物体检测平台
- 37个TOP实例命令,超过一半你肯定都没见过
- 利用TensorFlow生成图像标题
- 保存并加载您的Keras深度学习模型
- 简单、通用的JQuery Tab实现
- Dubbo源码解析 - 远程暴露
- 使用FastText(Facebook的NLP库)进行文本分类和word representatio...
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- android实现手机传感器调用
- Android实现接近传感器
- PHP 模拟登陆功能实例详解
- PHP判断一个变量是否为整数、正整数的方法示例
- android实现打地鼠游戏
- Yii框架连表查询操作示例
- Android studio listview实现列表数据显示 数据循环显示效果
- 关于Curl在Swoole协程中的解决方案详析
- Flutter随机迷宫生成和解迷宫小游戏功能的源码
- Yii框架实现对数据库的CURD操作示例
- Laravel5.4框架中视图共享数据的方法详解
- Android视频悬浮窗口实现的示例代码
- 使用Laravel中的查询构造器实现增删改查功能
- Flutter 自定义Drawer 滑出位置的大小实例代码详解
- laravel5.1框架基础之路由详解