简明区块链原理
链客,专为开发者而生,有问必答!
此文章来自区块链技术社区,未经允许拒绝转载。
“区块链”应有特质:
· 使用了具有 “哈希链” (下文有解释) 形式的数据结构保存基础数据
· 有多个结点参与系统运行(分布式)
· 通过一定的协议或算法对于基础数据的一致性达成共识(共识协议/算法)。
介于比特币目前是区块链最典型且最有影响力的应用之一, 理解比特币如何使用区块链后, 再去理解其他形式各样的区块链应用就会容易很多。在谈应用之前,最重要的是先理解它的技术本质是什么, 所有介绍区块链的答案里, 都最先提到了区块链不可篡改的特性, 所以第一个要理解的是它到底是怎么实现不可篡改性的。
· 前置知识;
o 密码学Hash()函数的单向性: Hash(x) =y , 通过y很难找到x
o 哈希链: 假如现在有顺序产生的数据块 A, B , C 。 那么我们可以这样计算一个hash 。 注意 “||” 表示拼接
h0= Hash(A) h1 = Hash(B || h0)h2 = Hash(C || h1)
· h2是我们计算的hash头部,现在来看, 为什么我们管这个东西叫Hash链, 因为h2 的值依赖于之前一系列数据的内容和计算顺序。 假如说现在你知道了h2 , 别人拿着A,B, C, 他不管是修改A,B, C的任一点内容还是A,B, C的出现顺序,你都无法再次计算出正确的h2
· 好的, 其实到这里区块链的概念就有点感觉了不是吗。"区块链"这个词是英文 Block Chain 的翻译, 如果从字面上理解, “数据块组成的链条” 就足以阐释它的基本内涵了。比特币区块链其实就是哈希链的一个变种(注意, 下文描述的这种添加随机数以及对随机数有特殊要求的规则是比特币为了实现工作量证明 Proof of Work 的共识机制而添加的, 并不是区块链的一个必要特征)。 怎么变? 添加一个随机数(Nonce)
o 假如现在有顺序产生的数据块 A, B , C 。 我们来这样计算hash头。 注意 “||” 表示拼接
h0= Hash(A|| Nonce0) h1 = Hash(B || h0 || Nonce1)h2 = Hash(C || h1 || Nonce2)
· 这里我们还添加一个额外的要求, 就是 h0, h1, h2 必须都得是以指定数目的0 bit开头的,例如要求每个哈希值都必须以5个0开头,则h0,h1,h2都应该是这样的形式(00000*****************)
· 添加了这个要求以后, h0, h1, h2就都不是那么容易计算的了, 因为你不能根据输出的形式来反推输入是什么, 而A, B, C又是给定的, 那只能不断更改Nonce来穷举计算, 然后找到一个可以满足要求的Nonce值 ,使得h0, h1, h2符合要求
· 到这里大家就知道所谓的矿工是在干什么了, 就是接受广播出来的数据块,然后计算当前最新的哈希链的头部, 当成功计算出了一个符合要求的Hash后, 就告诉所有人,自己找到了, 让别人再去计算下一个哈希头部。
· 其实到这里, 区块链的本质就已经差不多了, 假如网络中大家都默认遵守协议, 只在最长的哈希链后计算新的头部,那么一切都很好, 但是如果有人想搞不一样,那他就得拥有更强的计算能力, 在诚实者都遵守规则的情况下, 自己能够计算出一个链条分叉甚至说直接计算出一个新的链条,让大家都承认。
·至于这个难度的证明,中本聪就是建立了一个泊松分布的概率模型, 假设了诚实结点计算出新的哈希头的概率p和不诚实结点计算出新的Hash头的概率q后,算出了一个N值。
o 这个N值的含义是给出了当一个新的哈希头部 h1 计算出来后,其后追加N个头部(h2,h3,h4…)后,网络才应该承认这个新的头部 h1. 因为此时, 攻击者要想成功发动攻击, 至少需要计算出一个长度大于N的分支, 这个概率在攻击者没有掌握全网算力50%的时候是很难达到的
所以到这里, 区块链就已经清楚了,就是一个密码学工具的一种巧妙应用而已。那这里思考一下, 不可篡改性其实并不是一个什么神奇的特性,密码学的签名技术就能提供不可篡改性呀, 区块链到底解决了一个什么问题。答案是
· 信任问题
o 区块链提供了一种方案, 让一个网络中,所有的结点都有能力去用计算能力投票, 从而保证了得到承认的结果是大多数人公认的结果, 不会因为少数结点作恶,而修改结果
o 传统的交易建立在什么基础上, 我们对于金融机构的信任, 对于中央银行的信任, 或者对于交易对手的信任, 对于第三方中间人的信任。
· 这里其实就引出了很多安全技术应用,或者说很多制度建立的本质, 如果你信任的越多, 需要做的工作就越少。
· 区块链就是因为不想信任网络中的任意一个单一结点, 所以让大多数人具有公平的投票权利, 而这个投票权利,不是按人头算的, 是按CPU算的, 每个CPU有一票。
· 区块链的最难以克服的缺点1: 效率问题
o 前面说过, 当你信任的越多, 需要做的工作越少, 就好比你和一个人做生意, 如果你完全信任对方, 那么合同都不用签, 口头约定就行。 如果不太信任, 签一个简单的合同, 规定最重要的事项。 如果特别不信任, 让律师对交易中所有存在风险的地方列出条款,规定责任, 签一个大大的合同。
o 所以看出来了吧, 信任越多, 效率越高。 信任越少, 效率越低。
o 区块链也是一样,因为没有单一结点可以信任,通过计算来换取信任。 所以简单的一个承认交易的操作, 需要大量的计算参与进来, 结果是什么, Bitcoin平均交易速度只有7笔每秒。
· 比特币的最难以克服的缺点2: 宏观金融的适应性
o 金融学和经济学作为人类多年来发展出来的科学具有不可替代的地位, 比特币的流通货币量是存在上限且增加速度基本固定的, 这符合经济规律吗? 显然不符合。 因为学过经济的人都知道, 货币只是对实物财富的衡量, 货币增长速度快于商品增长数量, 则发生通胀, 货币增长速度慢于增长速度则发生通缩。
· 比特币的最难以克服的缺点3: 匿名引发的安全性
o 想一想匿名对于罪犯的好处,就不难理解比特币的洗钱风险
o 比特币作为信息安全学者的发明产物, 现在常被应用于黑客入侵之后勒索的交易手段, 想起来也真是讽刺
· 比特币的最难以克服的缺点4: 用户的易用性
o 比特币的技术是基于密码学签名技术的, 你的账户安全由你的私钥保护, 如果不添加别的手段,比如在别人那里备份, 或者在别的地方备份, 你丢失了密钥, 账户里的 钱是没有人能给你找回来的。 想想人们丢银行卡, 忘记密码的频率, 这个问题有多大, 不用我说大家也懂
说了这么多缺点, 区块链技术和比特币技术就不行了吗? 显然不是,不然那些国际金融机构也不会下大功夫研究它, 但其实, 和其他所有的技术一样, 大家都只是在寻找一种能够更高效解决信任问题的手段而已, 金融机构的核心是什么, 交易投资与风险控制呗。 其实也都是围绕信任问题展开的。信任问题的解决在金融机构本来其实就是耗费了大量的成本的, 只不过很多成本在后台, 或者在人工的耗费上, 很多人看不到而已。
总结 :
区块链的技术有望以一个更低的成本解决更广泛的信任问题所以被受人关注。
相关文章:

Bash shell
一、认识bash shell 1、登录取得的shell就记录在/etc/passwd这个文件内 可以使用cat /etc/passwd查看 2、bash shell 功能 a. 命令记忆能力(history),默认1000个,存在~/.bash_history文件 b. 命令与文件补全功能(Tab键…

快过高铁!构建云分布式应用还能这样操作?!
先跟跟大家说一个中国历史上杰出的军事家、政治家,长长的胡子,红的发黑的脸,骑着一匹红色的马。没错!他就是三国跑的最快的男人——曹操(说曹操曹操到)! 不说笑了。 关羽,字云长&…

基于安卓的考试系统_基于安卓11定制!华为最新手机系统曝光:体验堪比苹果iOS!...
在最近的一场发布会上,华为正式宣布了自家的HMS和AppGallery服务,对标安卓Play商店和苹果Appstore商店,这一举措让华为再度登上风口浪尖。这种做法在业界人士眼里的目的只有一个,华为要脱离安卓系统自立门户,从建立第三…

区块链前世今生
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 比特币的起源 2008年,一位化名为中本聪的人,在一篇为《比特币:一个点对点的电子现金系统》的论文中首先提出了比…

前端知识之HTML内容
参考:http://www.cnblogs.com/liwenzhou/p/7988087.html HTML介绍 Web服务本质 import socketsk socket.socket()sk.bind(("127.0.0.1", 8080)) sk.listen(5)while True:conn, addr sk.accept()data conn.recv(8096)conn.send(b"HTTP/1.1 200 OK\r\n\r\n&qu…

征途linux mysql_MySql征途之mysql常用命令
mysql征程之mysql常用命令一、连接MySql语法: mysql -h 主机地址 -u 用户名 -p 用户密码例1:连接到本机上的MYSQL。键入命令mysql -u root -p(本地连接 主机地址可以不写),回车后提示你输入密码,输入正确之后ÿ…

区块链+物联网=?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链与物联网(IoT)的交叉应用已成为最有前途的区块链用例之一。在过去的几个月里,IoTeX一直与我们的战略合作伙伴合作,并…

mysql 中文截取_mysql 截取中文字符
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

2016年度工作总结
一想起来今天全办公室人都在写年终总结的场景,不由自主的笑开了颜,因为我把一名程序媛的年终总结硬生生的写成了一篇“散文”,而且还是很“冒牌”的总结,以下就是“散文版”的总结。 在紧锣密鼓的业务GO推广上线期间,x…

django-后台sms管理系统的css框架
django-后台sms管理系统的css框架 地址:https://adminlte.io/ 下载代码。使用index.html的页面及相关文件 通过下在线检查adminlte.io的后台的各种模块元素,仿写。posted on 2018-07-06 11:41 .Tang 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.c…

go语言学习-iota
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 Go没有枚举类型,可以用常量模拟可以用iota生成从0 开始的自动增长的枚举值。按行递增,可以省略后续行的 iota 关键字. iota 在一个const()中每次累…

mysql中查询表格属性
(1)获取数据库表格列设置的长度,SQL SELECT CHARACTER_MAXIMUM_LENGTH FROM information_schema.COLUMNS WHERE TABLE_NAME表名 AND TABLE_SCHEMA数据库名 AND COLUMN_NAME字段名 (1)查出数据库表格所有的属性 SELECT …

BZOJ 2190: [SDOI2008]仪仗队
2190: [SDOI2008]仪仗队 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2689 Solved: 1713[Submit][Status][Discuss]Description 作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一&…

mysql下载解压安装_mysql zip 解压安装
系统:win10 专业版mysql 5.7.21 解压安装。对于Windows,mysql官网推荐使用可执行文件进行安装,这里我还是暂时用noinstall 解压zip文件来安装从zip压缩包安装mysql的过程如下:1. 解压文档到指定目录2. 创建选项文件如果您在运行服…

go 性能相关总结
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 性能测试基本概念 基本概念 Benchmark: 性能测试 ns/op: 纳秒/每个操作,前面数值越小越快 命令 go test -c go test -test.bench. -t…

64位 ubuntu android studio gradle 权限不够 缺少文件和权限导致
安装 32位 库文件 sudo apt-get install lib32z1 给文件夹加权限 chmod 777 -R SDK chmod 777 -R android-studio -R表示所有子文件和文件夹 模拟器需要下载 gcc3-libs.tar.bz2 把文件解压移动到 /lib 即可转载于:https://www.cnblogs.com/exayong/p/6216077.html

微信是个坑货4-网页授权
功能:认证服务号通过网页授权获取用户信息 --公众号后台配置 》此次设置的是网页授权域名,设置成你调试的域名或者正式备案的域名(不带http或https)。 --自定义菜单设置 设置参数: appid:微信公众号的appid uri&#x…

root 123 mysql_MySQL常用命令
1、查看数据库状态 及启动停止/etc/init.d/mysqld status/etc/init.d/mysqld start/etc/init.d/mysqld stop2、给用户配置初始密码123456:mysqladmin -u root -password 1234563、修改root用户密码为 abc123mysqladmin -u root -p123456 password abc1234、如果想去…

想挖矿?不如先学习一下以太坊
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 许多使用点对点协议且基于区块链的项目在性能和吞吐量上夸大其辞。在研发阶段,这些项目已经出现了一些创新,但是一旦这些协…

Kubernetes入门
简介 它是一个全新的基于容器技术的分布式解决方案,基于强大的自动化机制解决传统系统架构中负载均衡和实施部署的问题,从而节省了30%开发成本,其次具有完备的集群能力, 包括服务注册、服务发现、故障的发现和修复、服务滚动升…

ubuntu 14.04安装postgresql最新版本
官网: https://www.postgresql.org/download/linux/ubuntu/ -------------------------------------------------------------------------------------------------------------------- 另一篇文章,讲的差不多也是这个: http://tecadmin.net…

c++ mysql ctime_C++操作mysql数据库范例代码
下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家,也给大家做个参考。#include #include void TestMySQL(){TRACE("MySQL client version: %s\n",mysql_get_client_info());MYSQL *conn mysql_init(NULL);if (conn NULL…

链客区块链技术问答社区
链客是中国领先的区块链垂直领域技术问答社区(www.liankexing.com),旨在为大家提供一个直接、高效的技术交流平台,区块链技术爱好者遇到的每一个问题,链客做到有问必答! 在这里: ①海量的真实…

oracle imp dmp
imp helpy导入自己的表:exp scott/tigerorcl tables(student, address) fileD:\scott_stu_add.dmp logD:\scott_stu_add.logimp scott/tigerorcl fileD:\scott_stu_add.dmp logD:log.logimp scott/tigerorcl fileD:\scott_stu_add.dmp tablesstudent 导入别人的表&a…

STM32普通定时器(TIM2-7)的时钟源
STM32普通定时器(TIM2-7)的时钟源 转载于:https://www.cnblogs.com/LittleTiger/p/6218048.html

operate函数_跟着 redux 学 compose组合函数
▲ 点击上方蓝字关注我 ▲把你的心 我的心串一串 串一株幸运草 串一个同心圆文 / 景朝霞来源公号 / 朝霞的光影笔记ID / zhaoxiajingjing目录0 / 热热身1 / redux 中的compose函数2 / 逐步分析(1)compose()函数调用① reduce第一轮遍历② reduce第一轮遍历③ reduce第三轮遍历(…

感恩有你,链客一周年!
感恩有你,链客一周年! 2018年6月16日,天气:晴,在这一天,诞生了一个崭新的技术社区:链客区块链技术问答社区(www.liankexing.com) 她的诞生让我们赋予了’利他‘的概念,…

【Python3_基础系列_006】Python3-set-集合
一、set集合的方法 set不是特别常用,但是set的一些特性可以方便处理一些特殊情况。 集合(set)是一个无序不重复元素的序列。 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { }…

springmvc xml 空模板
<?xml version"1.0" encoding"UTF-8"?><!-- Bean头部 --><beans xmlns"http://www.springframework.org/schema/beans" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns:p"http://www.springframe…

mysql ltree_mysq基础知识总结l
一、Mysql架构二、Mysql查询过程例如执行select * from tablea where id4;三、Mysql中的事务及隔离级别事务:InnoDB存储引擎支持事务。事务是mysql的执行最小单元,也就是原子性。要么执行成功,要么执行失败。>start transaction>commit…