当前位置: 首页 > 编程日记 > 正文

区块链到底是什么?

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

翻译人:ArrayZoneYour,该成员来自云+社区翻译社

原文链接:https://www.investinblockchain.com/what-exactly-is-blockchain/

原文作者:Matt Bourke

如果我告诉你:

区块链不存在。

或者区块链有两种完全不同的含义。

或者,区块链是三个完全不同的东西的别称。

觉得不对?听我把话说完。区块链是一个效率非常低的数据库,它作为比特币中拼图难题(jigsaw puzzle)正常运转必须的技术之一而被人们熟知。比特币技术是基于“区块链”技术实现的,而不是区块链技术基于比特币技术。“区块链技术”与“一个区块链”(A Blockchain)或“这个区块链”(The Blockchain)的概念是截然不同的。是不是感到很困惑?从技术角度来看,这些不同的术语有着细微的差别。在本文中,你将了解到每个术语的真正含义并深入理解区块链的工作原理。

让我们从“区块链技术”(Blockchain Technology)

区块链技术其实就是一个分散的不可信网络,它利用本地资产,分散账本和一些基于博弈论模型的算法来使网络中的每一方达成共识。

什么是“一个区块链”(A Blockchain)?

假想你现在有一个Excel电子表格,表格中的每一行都有包含着几列的数据,其中一列包含着“交易信息”。

现在,如果每一行中的特定列中包含着该行的所有数据加上上一行传递的哈希(Hash)值对应的唯一指纹(一个新的哈希值),此时这些行顺序串联起来就构成了一个“哈希链”。

一个哈希链的实例。所有的数据都具有唯一的哈希值,就像指纹一样,修改其中的任意一个数据都将打破这个链条

用户可以利用软件来检测这些哈希值。软件可以通过哈希链的计算方式来判断每一个哈希值的有效性。一旦出现了无效的哈希值,用户就可以知道有人在后来(哈希链创建后)伪造了某一行的数据。

哈希链可能有很大用处,但是并没有什么令人激动的特性。我们为什么要讲哈希链,哈希链与“一个区块链”又有什么联系呢?

再进一步,把上面电子表格中的行扩展为多个电子表格,每个电子表格中充满了交易信息。我们将通过这种方式组合起来的交易信息称为“交易块”。

如果你在一个电子表格中创建了所有数据的哈希值,然后在另一个电子表格中创建该表中所有数据的哈希值,通过上面的方式我们可以通过两表的哈希值组合计算得到新的哈希值。像下图一样串联起来,你就得到了一个电子表格组成的链。

请记住:由于这些表格包含着一个交易块,所以它们构成了一个简单有效的区块链。

那么“区块链”意味着什么?

最初,“区块链”是一项大型现代企业看来都很具有颠覆性的技术,即使不用“加密货币”或者“分散式账本”(Distributed ledger)这样听起来具有颠覆性的名称也是如此。

现在,你可能经常听到有人通过说“我们在做区块链”来吸引投资者的注意。“区块链”的概念也被广泛传播,此时的概念基本上是指“围绕分散式账本概念构建的计算机网络”。

我们甚至看到了不使用“一个区块链”来构建的“区块链”,取而代之的是其他的存储技术,比如说DAG(有向无环图)。

很多在职者提到“区块链”时,他们指的其实是“一个只与我们信任的人分享的共享式数据库(shared database)”。这并不是一个新鲜的事物,分布式数据库(distributed database)在比特币出现时已经存在了至少十年。

“区块链”的魅力在哪里?

区块链真正的魅力不是在于数据存储的技术,而是如何使网络中所有的不可信用户达成共识。

举例来说,通过“区块链”,可以让每个人都承认Alice支付且仅只支付给了Bob。通过她的交易信息可以证明她没有支付双倍的金额。(例:Alice在完全相同的精确时间同时支付了$5给Bob和John)。

双重支付问题是比特币所取得的主要突破。

交易信息将被存储在于网络绑定的“一个区块链”当中。网络中的任何用户都可以下载该区块链的副本(如果他们选择这样做的话),然后运行软件检验网络中加入的交易信息。

软件将拒绝任何形式的双重支付尝试。如果交易有效,软件将更新区块链中比特币(或其他资产)的所有权。

当用户使用“区块链”进行交易时,他们的软件实际上做了以下工作:

软件(用户的钱包)创建一个脚本。这个脚本是用所有计算机都可以处理、检验的计算机语言编写的。这个脚本通过私钥进行了签名,网络的用户可以通过他们的私钥来证明他们对某一区块链的所有权。

一旦通过数字签名证明所有权之后,网络就可以继续处理脚本内容。以上面提到的场景作为最简单的脚本实例——“Alice支付给Bob五美元”,此时网络中的计算机将检验Alice交易条目的真实性,如果交易有效,整个网络将同意更新信息,Alice的账户将减少5美元,Bob的账户将增加五美元。

一旦使用数字签名证明了所有权,网络就可以继续处理脚本。最简单的脚本将简单地说“给Alice 5美元”。然后网络上的计算机将验证Alice在区块链中有一个条目; 如果有效,整个网络将同意更新Alice的账户,减少5美元,而Bob的账户增加5美元。

这里还有一个有趣的现象:一个常见的误解是“比特币不提供合约”。实际上提供了!一个脚本就是一份合约。当你听到“智能合约”一词时应当意识到这是交易脚本的营销术语。

“区块链”的关键问题是双重支付问题——我上面解释的过程并不能解决这个问题。

如果世界各地的两台电脑同时收到来自Alice的不同脚本怎么办?一个脚本说:“给Bob五美元”,另一个脚本说:“给苏珊五美元”——网络如何达成共识?

你瞧,“区块链”的魅力不在于“区块链”,而在于工作量证明。

工作量证明是区块链网络用来确保网络分散性的计算机算法,它还可以防止网络中的计算机自己构建历史信息。

下面给出理解工作量证明的一个简单方法:

想象在网络中运行着一个彩票系统,每隔几分钟网络会随机选择一台计算机为获胜方。此时网络会说:“这台电脑是赢家!”

然后网络对获奖的电脑说:“把你最新的有效交易块和中奖彩票交给所有其他的电脑。如果你能证明你有中奖彩票,所有其它的计算机将检查你提供的交易块是否只包含有效的交易信息。如果确实如此的话我们会更新我们的区块链来获得你新创建的区块,相应地你会获得你的奖励。”

这是简化的加密货币挖掘(cryptocurrency mining)。通过仅允许一个用户提供一个交易块,我们可以确保Alice的双重支出尝试中只有单个记录进入交易块。

此时如果不同的计算机正在构建不同的交易块即Alice目前有双重支付的交易在网络中传递,Alice最终只能花一笔钱。这是因为会根据提供的之前最新的区块来完成他们的副本的更新,之后的更新会忽略任何与最新副本不匹配的区块。

现在每个人都拥有最新的区块链副本,之后创建的任何新区块都必须通过哈希链接在当前区块链之上。

什么是“区块链”(The Blockchain)?

通常来说,这个术语通常用来代表第一个区块链——比特币区块链。不过,在现在的营销环境下,它的概念已经很模糊了。

问答

区块链专题——什么是区块链?

相关阅读

什么是区块链?

简明区块链原理

如何学习区块链技术

此文已由作者授权腾讯云+社区推送,转载请注明文章出处

原文链接:https://cloud.tencent.com/developer/article/1055228

转载于:https://my.oschina.net/qcloudcommunity/blog/1633369

相关文章:

java怎么返回xml_java – 如何从Web服务返回XML

这可能是疯狂/愚蠢/愚蠢/冗长的问题之一,因为我是网络服务的新手.我想写一个Web服务,它将以XML格式返回答案(我正在使用我的服务进行YUI自动完成).我正在使用Eclipse和Axis2并遵循http://www.softwareagility.gr/index.php?qnode/21我希望以下列格式回复代码元素的数量可能因响…

jsp路径问题

绝对路径:/StudentInfo/images/login.jpg 相对路径:images/login.jpg 路径前面的第一个/代表tomcate目录下面的webapps这个文件夹 jsp的Advanced模版。。。默认有一个基准路径,所有写的路径都会变成绝对路径。 测试的时候发现,在IE下面可以正…

写一篇C语言入门第一讲

嗨~大家好~ 我是小白,最近才使用这个博客,我是一个计算机系的学生,我会在这里发一些我给我们班其他同学讲C语言入门的博文,希望大家能共享这些资料,当然了,我也很希望大家给我提出好的意见或建议。&#x…

李嘉骐:03 PyTorch模块与基础实战

深入浅出Pytorch 03 PyTorch模块与基础实战 内容属性:深度学习(实践)专题航路开辟者:李嘉骐、牛志康、刘洋、陈安东领航员:叶志雄航海士:李嘉骐、牛志康、刘洋、陈安东开源内容:https://githu…

math.hypot java_Java之Math类

Java之Math类#Java的Math类封装了很多与数学有关的属性和方法,后续遇到常用也会直接在这篇博客更新。。。###public static void t2() {System.out.println(Math.E);//比任何其他值都更接近 e(即自然对数的底数)的 double 值。System.out.println(Math.PI);//比任何其他值都更接…

ruby Mixin用法

module MyNA"China"attr:nameattr:agedef set_name(name)namenameenddef get_namereturn nameenddef set_age(age)ageageend endclass Testinclude My endtTest.new t.set_name("history") p t.get_name 转载于:https://www.cnblogs.com/wangwenfei/p/ruby…

delphi ScriptGate 调用JS

在 FireMonkey 使用 TWebBrowser 调用 Javascript函数并获取返回值以及 JavaScript 中调 Delphi 的函数/过程,普遍都在使用老掉牙的URL重定的方法,还要改 FMX 的源码,相当繁琐。 现在使用 ScriptGate 可轻易解决这个问题,ScriptGa…

【NCEPU】韩绘锦:扩散卷积神经网络

韩绘锦是华北电力大学数理系大四的学生,Datawhale成员/Dreamtech成员,也在天池比赛中取得了不错的成绩,现保送大连理工大学软件工程学院深造。 这篇图文是他在线下组队学习时,分享的内容。 希望参与我们组队学习的同学可以在微信…

java 解压与压缩代码_Java实现多文件压缩和解压缩代码详解

Java实现多文件压缩和解压缩代码import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.Enumeration;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;…

关系管理系统:js代码生成select的出生日期

//page初始调用function pageInit() {makeYear();makeMonth();makeDay();} //产生Year function makeYear(){var year document.getElementById("year");for(var i1901;i<new Date().getYear();i){var option document.createElement("option");optio…

【组队学习】【31期】IOS开发

IOS开发 航路开辟者&#xff1a;李岳昆、易远哲领航员&#xff1a;杨皓博航海士&#xff1a;李岳昆、易远哲 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/team-learning-program/tree/master/IOS内容属性&#xff1a;公测课程内容说明&#xff1a;iOS开…

amh支持java吗_跟我学Android之三 常用视图

目标掌握视图的概念。明白Activity与Widget的区别。掌握XML方式布局界面的特点和一些基本特性。掌握几种常见基本视图的用法学会使用代码方式进行界面布局的方法。熟练掌握界面程序的事件驱动模型视图(View)是可视化的界面元素,任何可视化组件都需要从android.view.View类继承,…

Linux 终端命令行提示符的艺术--PS1进阶

话不多说&#xff0c;先瞅瞅我的命令行提示符&#xff08;有点大&#xff09;&#xff1a; 图中命令行解释&#xff1a;┌[阳历日期/农历日期 时间]├[当前目录下目录数当前目录下文件数][当前绝对目录]└[用户名主机名-第几个终端 ╰_╯] 相关配置文件 全局配置文件&#xff1…

Centos 7 冗余备份磁盘配置介绍

Centos 7 冗余备份磁盘配置介绍我们上一盘介绍了Centos 7 磁盘阵列配置介绍&#xff0c;今天继续上一篇的配置介绍&#xff0c;通过上一篇的配置介绍我们发现了一个问题。&#xff0c;运维人员需要在硬盘硬件出现故障后&#xff0c;手动增加新的硬盘进去&#xff0c;这样很不方…

【组队学习】【31期】基于Python的办公自动化

基于Python的办公自动化 航路开辟者&#xff1a;牧小熊、刘雯静、张晓东、吴争光、隆军领航员&#xff1a;六一航海士&#xff1a;牧小熊、李显、刘羽中、王晓亮 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/team-learning-program/tree/master/Office…

java urlconn 下载慢_使用HttpURLConnection下载文件时出现 java.io.FileNotFoundException彻底解决办法...

import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;/*** 多线程下载* author bing**/public class OmbDownloadOfThreadsUtil …

java中Array和ArrayList区别

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff09;精辟阐述&#xff1a; 可以将 ArrayList想象成一种“会自动扩增容量的Array”。 2&#xff09;Array&#xff08;[]&#xff09;&#xff1a;最高效&#xff1b;但是其容量固定且无法动态改变&#xff1b; …

【组队学习】【31期】 吃瓜教程——西瓜书+南瓜书

吃瓜教程——西瓜书南瓜书 航路开辟者&#xff1a;谢文睿、秦州领航员&#xff1a;张海腾航海士&#xff1a;谢文睿、秦州 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/pumpkin-bookB 站视频&#xff1a;https://www.bilibili.com/video/BV1Mh411e7VU内…

设计模式之“代理模式”

代理&#xff08;Proxy&#xff09;模式给某一个对象提供一个代理&#xff0c;并由代理对象控制对原对象的引用。 代理模式的英文叫做Proxy或Surrogate&#xff0c;中文都可译成"代理"。所谓代理&#xff0c;就是一个人或者一个机构代表另一个人或者另一个机构采取行…

php更新数据库时间戳,关于Thinkphp5 里面数据库自动更新与创建时间的问题

我们有时候往数据库里面写入新的一条数据 时&#xff0c;可能需要自动更新时间、自动创建时间、这样就可以方便我们、从而大大减小我们的代码量&#xff1b;不过在TP5里面有一个小规律&#xff0c;就是save()与insert()语句的区别&#xff1b;1、我们先看一下TP5里面自动更新时…

【组队学习】【31期】LeetCode 刷题

LeetCode 刷题 航路开辟者&#xff1a;杨世超领航员&#xff1a;刘军航海士&#xff1a;杨世超、李彦鹏、叶志雄、赵子一 基本信息 开源内容&#xff1a;https://github.com/itcharge/LeetCode-Py开源电子书&#xff1a;https://algo.itcharge.cn内容属性&#xff1a;合作课…

DOM---文档对象模型(Document Object Model)的基本使用

一、DOM简介  文档对象模型&#xff08;Document Object Model&#xff0c;简称DOM&#xff09;&#xff0c;是W3C组织推荐的处理可扩展置标语言的标准编程接口。它是一种与平台和语言无关的应用程序接口(API),它可以动态地访问程序和脚本,更新其内容、结构和www文档的风格(目…

剑指offer--3题

题目&#xff1a;输入一个整形数组&#xff0c;数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组&#xff0c;每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5&#xff0c;和最大的子数组…

php可以打印一个页面,利用html实现分页打印功能的实例详解

本篇介绍利用html实现分页打印功能的实例详解&#xff0c;有些不想打印出来的分页打印的都可以应用这类样式进行控制 在非打印时是无效的。页面打印/* 应用这个样式的在打印时隐藏 */.noPrint {display: none;}/* 应用这个样式的&#xff0c;从那个标签结束开始另算一页&#x…

java动态加载配置文件

最近项目中需要做定时任务&#xff0c;即定时数据库的备份。定时时间用户可以在界面中配置&#xff0c;要求配置修改好立即生效。 想不到什么好办法。下面是一种实现思路 把用户配置的时间存到properties配置文件中&#xff0c;定时任务每隔一分钟执行一次&#xff0c;每次执行…

商品秒杀,防并发解决思路

我们在做电商项目的时候,经常会遇到抢购秒杀的问题&#xff0c;综合来说主要是两个问题 一&#xff0c;高并发情况下对数据库产生的压力 二&#xff0c;如何避免超卖(库存< 0)的情况。 针对这两个问题来谈下解决思路 一,缓解数据库压力 用 缓存就可以解决 例如redis,memecac…

【组队学习】【31期】动手学数据分析

动手学数据分析 航路开辟者&#xff1a;陈安东、金娟娟、杨佳达、老表、李玲、张文涛、高立业领航员&#xff1a;陈玉立航海士&#xff1a;陈安东、武帅、肖涵哲、叶前坤、沈豪 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/hands-on-data-analysis内容…

php不报错怎么回事,解决PHP 7等web编程语言不报错一例

PHP的开发者必须尽快转到PHP 7平台&#xff0c;因为原来在PHP 5下开发的程序&#xff0c;有很多在PHP 7下都会报错。PHP 5的程序改为PHP 7的写法&#xff0c;工作量是很大的&#xff0c;所以开发者只能一步到位转到PHP 7平台。PHP 7增强了数据类型&#xff1b;数组与变量名不能…

在存储过程中如何实现将ID列表字符串传入IN()

我们在平常编写sql语句时&#xff0c;经常碰到要把id列表字符串&#xff08;比如&#xff1a;001&#xff0c;002&#xff0c;003&#xff0c;....)当做参数传递给存储过程&#xff0c; 那么在存储过程中要用in作为条件进行记录的过滤&#xff0c;那么采用in(idList)&#xff0…

【组队学习】【31期】数据可视化(Matplotlib)

数据可视化&#xff08;Matplotlib&#xff09; 航路开辟者&#xff1a;杨剑砺、杨煜、耿远昊、李运佳、居凤霞领航员&#xff1a;贾献华航海士&#xff1a;杨剑砺、郭棉昇、张文恺、肖桐 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/fantastic-matplo…