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

区块链前世今生

链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。
在这里插入图片描述
比特币的起源
2008年,一位化名为中本聪的人,在一篇为《比特币:一个点对点的电子现金系统》的论文中首先提出了比特币。中本聪结合以前的多个数字货币发明,如B-money和HashCash,创建了一个完全去中心化的电子现金系统,不依赖于通货保障或是结算验证保障的中央权威。关键的创新是利用分布式计算系统(称为”工作量证明”算法)每隔10分钟进行一次的全网”选拔”,能够使用去中心化的网络同步交易记录。这个能优雅的解决双重支付问题(即一个单一的货币单位可以使用两次,此前,双重支付问题是数字货币的一个弱点,并通过一个中央结算机构清除所有交易来处理)。

比特币打开了区块链大门

  1. 区块链技术是比特币原创的核心技术。在比特币被发明之前世界上并不存在区块链这个东西。

  2. 比特币发明之后,很多人参考比特币中的区块链实现,使用类似的技术实现各种应用,这类技术统称区块链技术。用区块链技术实现的各种链即为区块链。

区块链技术的巨大价值
其实区块链技术最核心的就是解决信任成本的问题,去中心化去中介是区块链技术的核心概念。区块链藐视一切禁锢我们头脑的旧思维,它将颠覆交易执行的管理方式和集中型控制模式。区块链松开了信任的缰绳,这缰绳曾经牢牢控制在各种中心机构的手中,例如银行、政策制定者、清算中心、政府、大公司等。区块链让人们摆脱了这些老旧的控制节点。例如,交易双方完全可以在区块链上进行交易的认证,而不再需要一个清算中心。信用的实现应该是无偿的,更不应该掌握在某种集中型的权威手中,这种权力要么利用信用收税,要么肆意操纵,玩弄各种形式的费用、访问权、许可权等等。所以我相信未来的区块链遍地开花之时,将引爆一个新的纪元。

什么区块链技术?
从本质上讲,区块链技术,是一种交易记录的存储技术。它对交易记录进行永久性存储,而且存储之后永远无法删除,只能按照次序加入新的交易,由此对所有的交易历史进行永不结束的记载。这个看似简单的功能描述,实则含义深刻。它促使我们,重新思考如何去创建交易、存储数据和交换资产。它是一场巨大变革的起点。

一句话描述区块链技术?

基于密码学安全的分布式账簿网络技术。

区块链技术核心点
一个点对点分布式网络(各网络节点同步数据)
一份所有交易的账簿数据(区块链)
一个去中心化的交易验证(基于密码学交易安全、脚本验证交易实现合约或智能合约)
一个去中心化的定量货币发行(分布式挖矿、矿池挖矿协议、工作量证明生成新区块)
一、点对点的P2P网络(Peer to Peer)
1.1 网络工作原理
新的交易向全网进行广播
每一个节点都将收到的交易信息纳入一个区块中
每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明
当一个节点找到了一个工作量证明,它就向全网进行广播
当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同 该区块的有效性
其他节点表示他们接受该区块,而表示接受的方法,则是在跟随该区块的末尾,制造 新的区块以延长该链条,而将被接受区块的随机散列值视为先于新区快的随机散列值
1.2 区块链网络组成部分

1.3 区块链网络详细流程图

二、区块链(Block Chain)
2.1 区块链原理及简介
区块链的实现方案首先提出一个“时间戳服务器”。时间戳服务器通过对以区块(block)形式存在 的一组数据实施随机散列而加上时间戳,并将该随机散列进行广播,就像在新闻或世界性新闻组网络(Usenet)的发帖一样组成一个楼层链条。显然,该时间戳能够证实特定数据必然于某特定时刻是的确存在的,因为只有在该时刻存在了才能获取相应的随机散列值。每个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间戳都对之前的一个时间戳进行增强, 这样就形成了一个链条。

区块链形象图

2.2 区块链的连接
矿工会根据工作量证明每过特定时间挖到新的区块(如比特币:根据难度系数,工作量证明算法全网算力大概10分钟左右才能产生一个新区块;难度系数会根据全网算力的增加而调整,永远保证大概10分钟产生一个新的区块)。节点会在”父区块哈希值“字段找出包含它的父区块的哈希值。这是节点已知的哈希值,也就是如下图中第277314块区块的哈希值。故这个区块是这个链条里的最后一个区块的子区块,因此现有的区块链得以扩展。节点将新的区块添加到链条的尾端,使区块链变长到一个新的高度277315。

下图展示了三个区块的连接:

2.3 区块链 - 比特币创世区块信息

三、交易(Transactions)
我们定义,一枚电子货币(an electronic coin)是这样的一串数字签名:每一位所有者通过对前一次交易和下一位拥有者的公钥(Public key) 签署一个随机散列的数字签名,并将这个签名附加在这枚电子货币的末尾,电子货币就发送给了下一位所有者。而收款人通过对签名进行检验,就能够验证该链条的所有者。

3.1 复式记账薄式交易

3.2 交易中的输入与输出
一笔数字货币的交易是一个含有输入值和输出值的数据结构。该数据结构植入了将一笔资金从初始点(输入值)转移至目标地址(输出值)的代码信息。数字货币交易的输入值和输出值与账号或才身份信息无关。你应该将它们理解成一种被特定密钥信息锁定的一定数量的数字货币。只有拥有者这个密钥信息的人可以解锁。

交易流程图

一般交易,最常见的交易形式是从一个地址到另一个地址的简单支持。这种交易也常常包含给支付者”找零“。

集合型交易,是集合多个输入到一个输出的模式,相当于现实生活中将很多硬币和纸币兑换为一个 大额面钞。

分散型交易,是将一个输入分配给多个输出,这类交易类似于老板给员工发工资的情形,从一个账号转账给多个账号。

3.3 交易数据(Transactions Data)
下图为比特币的交易数据结构

四、工作量证明(Proof-of-Work)
4.1 工作量简介
为了在点对点的基础上构建一组分散化的时间戳服务器,仅仅像报纸或世界性新闻网络组 一样工作是不够的,我们还需要一个类似于亚当·柏克(Adam Back)提出的哈希现金(Hashcash) 。在进行随机散列运算时,工作量证明机制引入了对某一个特定值的扫描工作,比方说 SHA-256 下,随机散列值以一个或多个0 开始。那么随着 0 的数目的上升, 找到这个解所需要的工作量 将呈指数增长,但是检验结果仅需要一次随机散列运算。

我们在区块中补增一个随机数(Nonce),这个随机数要使得该给定区块的随机散列值出现 了所需的那么多个0。我们通过反复尝试来找到这个随机数,找到为止。这样我们就构建了一 个工作量证明机制。只要该 CPU 耗费的工作量能够满足该工作量证明机制,那么除非重新完 成相当的工作量,该区块的信息就不可更改。由于之后的区块是链接在该区块之后的,所以想 要更改该区块中的信息,就还需要重新完成之后所有区块的全部工作量。

4.2 挖矿

  1. 挖矿是增加数字货币供应的一个过程,挖矿同时还保护着数字货币系统的安全。

  2. 矿工们在挖矿过程会得到两种类型的奖励:创建新区块的新币奖励,以及区块中所含的交易费。

4.3 矿池挖矿
在激烈的算法竞争的环境中,个体矿工独立工作(solo挖矿)是没有一点机会。他们可以通过矿池协议合作组成矿池,共同协作挖矿分享奖励。

五、区块链常用术语
比特币

首字母大写的Bitcoin用来表示比特币的概念或整个比特币网络本身。例如:“今天我学了些有关Bitcoin协议的内容。”

而没有大写的bitcoin则表示一个记账单位。例如:“我今天转出了10个bitcoin。”该单位通常也简写为BTC或XBT。

比特币地址

比特币地址就像一个物理地址或者电子邮件地址。这是别人付给你比特币时你唯一需要提供的信息。然而一个重要的区别是,每个地址应该只用于单笔交易。

对等式网络

对等式网络是指,通过允许单个节点与其他节点直接交互,从而实现整个系统像有组织的集体一样运作的系统 。对于比特币来说,比特币网络以这样一种方式构建——每个用户都在传播其他用户的交易。而且重要的是,不需要银行作为第三方。

哈希率

哈希率是衡量比特币网络处理能力的测量单位。为保证安全,比特币网络必须进行大量的数学运算。当网络达到10Th/秒的哈希率时,就意味着它能够进行每秒10万亿次的计算。

交易确认

交易确认意味着一笔交易已经 被网络处理且不太可能被撤销。当交易被包含进一个块时会收到一个确认,后续的每一个块都对应一个确认。对于小金额交易单个确认便可视为安全,然而对于比如1000美元的大金额交易,等待6个以上的确认比较合理。每一个确认都成 指数级地降低交易撤销的风险。

块链

块链是一个按时间顺序排列的比特币交易公共记录。块链由所有比特币用户共享。它被用来验证比特币交易的永久性并防止双重消费。

密码学

密码学是数学的一个分支,它让我们创造出可以提供很高安全性的数学证明。电子商务和网上银行也用到了密码学。对于比特币来说,密码学用来保证任何人都不可能使用他人钱包里的资金,或者破坏块链。密码学也用来给钱包加密,这样没有密码就用不了钱包。

签名

密码学签名是一个让人可以证明所有权的数学机制。对于比特币来说,一个比特币钱包和它的私钥通过一些数学魔法关联到一起。当你的比特币软件用对应的私钥为一笔交易签名,整个网络都能知道这个签名和已花费的比特币相匹配。但是,世界上没有人可以猜到你的私钥来窃取你辛苦赚来的比特币。

钱包

比特币钱包大致实体钱包在比特币网络中的等同物。钱包中实际上包含了你的私钥,可以让你消费块链中分配给钱包的比特币。和真正的钱包一样,每个比特币钱包都可以显示它所控制的所有比特币的总余额,并允许你将一定金额的比特币付给某人。这与商家进行扣款的信用卡不同。

区块

一个块是块链中的一条记录,包含并确认待处理的交易。平均约每10分钟就有一个包含交易的新块通过挖矿的方式添加到块链中。

双重消费

如果一个不怀好意的用户试图将比特币同时支付给两个不同的收款人,就被称为双重消费。比特币挖矿和块链将就两比交易中那笔获得确认并被视为有效在网络上达成一致。

私钥

私钥是一个证明你有权从一个特定的钱包消费比特币的保密数据块,是通过一个密码学签名来实现的 。如果你使用的是钱包软件,你的私钥就存储在你的计算机内;如果使用的是在线钱包,你的私钥就存储在远程服务器上。千万不能泄露私钥,因为它们可以让你消费对应比特币钱包里的比特币。

挖矿

比特币挖矿是利用计算机硬件为比特币网络做数学计算进行交易确认和提高安全性的过程。作为对他们服务的奖励,矿工可以得到他们所确认的交易中包含的手续费,以及新创建的比特币。挖矿是一个专业的、竞争激烈的市场,奖金按照完成的计算量分割。并非所有的比特币用户都挖矿,挖矿赚钱也并不容易。

Satoshi聪

Satoshi是标明一个比特币的最小单位的常用单位 100,000,000聪等于1 比特币 (BTC).

相关文章:

前端知识之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(本地连接 主机地址可以不写),回车后提示你输入密码,输入正确之后&#xff…

区块链+物联网=?

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链与物联网(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中的事务及隔离级别事务&#xff1a;InnoDB存储引擎支持事务。事务是mysql的执行最小单元&#xff0c;也就是原子性。要么执行成功&#xff0c;要么执行失败。>start transaction>commit…

如何让自己时刻冷静的方法_4个方法,教你如何真正爱自己

很多人说&#xff0c;我想爱自己&#xff0c;看了很多文章&#xff0c;依然不知道如何爱自己。那你可以问一问自己&#xff0c;你对自己拥有的一切感到开心、快乐和满足吗&#xff1f;“爱自己”对你是知识还是习惯呢&#xff1f;实际上&#xff0c;当你的内在固有的思维模式转…

记录一个比较完整的python项目分析架构

世界杯&#xff1a;用Python分析热门夺冠球队 https://www.cnblogs.com/lemonbit/p/9174965.html 转载于:https://www.cnblogs.com/testerhome-yizhou2018/p/9287115.html

list,set,map,数组间的相互转换

1.list转set Java代码 Set set new HashSet( new ArrayList()); 2.set转list Java代码 List list new ArrayList( new HashSet()); 3.数组转为list Java代码 List stooges Arrays.asList( "Larry" , "Moe" , "Curly" ); 此时st…

void函数返回值_(*void(*)()0)() 是什么

(*void(*)()0)()代码分析这是啥这行代码&#xff0c;是我今天在看《C陷阱与缺陷》时看到的&#xff0c;一开始很不能理解。慢慢上网摸索一些后&#xff0c;大致理解了&#xff0c;现在来分享一下我所理解的这行代码。1.首先&#xff0c;得明白什么是函数指针。顾明思义&#xf…