BitCoin工作原理
1.加密货币
公共账本-信任+加密算法=加密货币
BitCoin是第一个被是实现出来的加密货币。
首先理解比特币是什么,在考虑要不要买入?(人人都想一夜暴富,美哉)
2.发送、接收、创造比特币的时候电脑在干什么?
和现实货币而言,加密货币的支柱并不是验证交易的银行系统,而是一个巧妙地、去中心化的、无需信任的验证系统。原理就在于密码学里的数学。
3.协议(Protocol)和账本
协议:
(1)任何人卡都可以在账本上添加新行
(2)每月用真金白银结算
(3)只有有签名的交易才有效。
(4)不可超支,确保不会出现欠下巨款的情况
对于协议,能不能找到一个协议,来决定是否接收交易,并决定交易顺序,使得你可以放心相信,世界上遵守同一个协议的所有人,手上的账本和你的一模一样?
从大体上来看,比特币给出的方案是哪个账本上的计算量大,就信任哪一个账本。这涉及到了所谓的密码哈希函数。
如果我们把计算工作量作为信任的基础,那么我们可以让交易欺诈和账本不一致的情形的计算力成本高到不行。
- 账本
通过一个公开的正本记录交易的信息,使用电子签名保证交易的真实性。
- 电子签名:
所有人都生成一个“公钥-私钥对”(public key-secret key),不一样的信息会生成完全不同的签名,而且生成签名的函数的结果取决于信息本身以及你的私钥,私钥保证只有你可以给出那个签名。
信息能改变签名这个性质,就确保了其他人不能单单把你的签名,复制伪造到另一条信息里。
另一个配套的函数,用于验证签名是否正确,这时候就用到了公钥,函数会返回true/false,来表明这个用于验证的签名,是否是用公钥对应的私钥来获得的。
在不知道秘钥的情况下,几乎完全不可能找出正确的签名。
公钥是公开的,所哟谁都可以检查。
虽然有了电子签名,可以保证没有伪造,但是还是可以复制粘贴一条相同的交易信息到账本上,因为签名和信息的组合还是正确的,这样的话这条交易信息也会被认为是真实的,怎么办?
要解决这个问题,我们可以规定,当你签署一则交易时,信息还必须包含这笔交易独有的某种ID号。这样的话,账本的每一个新的记录,都需要全新的签名。
加密货币的实体是一个账本,而货币的实体是交易的记录。
- 哈希函数
这种函数的输入可以是任意信息或者文件,具体是什么不重要,他的是输出值是固定长度的比特串。这个输出就叫做信息的“哈希值”或者“摘要”。它们是故意设计的杂乱无章,但不是随机,因为对于同一个输入,输出值是固定的。例如SHA256函数
逆向计算是不可行的!
4.比特币工作原理
比特币创始论文的核心想法,是让所有人信任工作量最大的账本。
- 工作原理:
首先把账本割分成“区块”,每一个区块包含了一个交易列表,加上工作量证明,也就是那个特殊的数字,使得整个区块的哈希值开头有很多个0。
只有发款人签名后,交易才算有效。同样的,区块有了工作量证明,才能被认为是有效的。
还有,为了给这些区块一些标准的顺序,我们要求区块的标头,要包含前一个区块的哈希值。
这样子,要是你修改了之前的区块,或者互换了两个区块,那就会改变接下来的区块,同时也改变了哈希值,也就改变了下一块区块。 这就需要重做所有的计算工作了,也就是找到新的特殊数字,使得哈希值开头0的个数是一个约定的数字。
正因为所有的区块都串成了一条链,所以我们一般不把它叫做账本,而是“区块链”(block chain)。
这个新协议的一部分是,我们允许所有人都参与建造区块。即是说,他们都可以听到交易广播,把他们收集成区块,然后做许多的计算工作,找到特殊的数字,使得区块的哈希值开头有约定的数量的0。他们一旦找到这个数,就广播发现了新的区块。为了奖励区块发现者的所有工作,当他整理出区块时,我们允许他在最上面加上一笔很特殊的交易。让他凭空得到一些金钱。这叫做“区块奖励”。这并不需要遵守认可交易与否的准则。因为它不是从其他人那里来的,所以不需要签名。
这也意味着,每一个新的区块,都会给经济添加新的虚拟货币。
建造区块,一般叫做“挖矿”,因为这个过程需要许多工作量,而且也给经济注入了一些新的货币。当你听说或者读到“矿工”时,他们做的其实是,接收交易信息,建造区块,把区块广播出去,然后得到新的钱作为奖励。
我们协议中关键的一点是:
当你接收到两条不同的区块链时,其中交易信息相冲突时,你只保留最长的,也即是包含的工作量最大的那一条。如果长度相同,那么就坐等新的区块,使得其中一条更长。
虽然没有中心权威,所有人也都各自记录区块链,但假如所有人都同意说,认可工作量最大的区块链,那么我们就有办法达成去中心化的共识。
5.比特币和其他加密货币的主要思想
中奖时间:
比特币里所有的钱,归根到底都来自区块奖励。
有一个网站,Block Explorer(方便你查询整个比特币区块链)
补充一些有意思的:
原始的比特币论文:https://bitcoin.org/bitcoin.pdf
Block explorer网站:https://blockexplorer.com/
Michael Nielsen的博客帖子:https://goo.gl/BW1RV3
(它能帮你很好地了解交易具体是怎样的,这是这个视频里没提到过的内容。)
CuriousInventor的视频:https://youtu.be/Lx9zgZCMqXE
Anders Brownworth的视频:“>https://youtu.be/☆160oMzblY8
以太坊白皮书:https://goo.gl/XXZddT
- 矿难
矿工挖比特币都不再是单独挖了(单独挖可能一百年都挖不到一个奖励),他们会把算力集中在一起形成一个算力池,算力池首先爆块的概率高很多,得到的奖励根据算力大小加权分给成员。这样大家得到收益就比较持续稳定了。这个收益可以说是根电费成正比的,比如消耗1度电能挖到0.0001个比特币,当比特币价格暴跌(比如跌倒5000)的时候,一度电的成本(比如1元)比收益(0.0001*5000=0.5元)都高了,那矿工就不愿意开机啦。这就是所谓的矿难。(那矿难有啥好处呢,当然是矿难时矿工们就会甩卖显卡来回血啦,所以说一方矿难,八方点赞了)
BitCoin工作原理的更多相关文章
- bitcoin PoW原理及区块创建过程
bitcoin PoW原理及区块创建过程 PoW 为了在点对点的基础上实现一个分布式时间戳服务器,我们需要使用PoW(Proof of Work)系统来达成共识.PoW过程就是寻找一个目标值的过程,当 ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- HashMap的工作原理
HashMap的工作原理 HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- ThreadLocal 工作原理、部分源码分析
1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...
- Servlet的生命周期及工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
- 代码管理工具 --- git的学习笔记二《git的工作原理》
通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...
- 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...
随机推荐
- Codeforces Round #258 (Div. 2) B. Sort the Array(简单题)
题目链接:http://codeforces.com/contest/451/problem/B --------------------------------------------------- ...
- Deepin-安装QQ音乐(Windows程序)
打开命令行,输入: sudo apt-get install wine 安装完成后,下载QQ音乐的安装包 然后安装 示例:wine xx.exe 实例:wine QQMusic.exe 安装完成,启动 ...
- Windows和linux双系统——改动默认启动顺序
电脑上装了Windows 7和Ubantu双系统,因为Linux系统用的次数比較少而且还是默认的启动项对此非常不能容忍,因此得改动Windows为默认的启动项. 因为电脑上的系统引导程序是GRUB,因 ...
- UISlider无法拖动进度条的问题解决
UISlider无法拖动进度条的问题解决 最近业务中的视频播放使用到了UISlider,但是有一个奇怪的问题,就是在Modar出来的控制器中UISlider是可以正常使用的,但是在Push出来的控制器 ...
- 【iOS系列】-使用CAGradientLayer设置渐变色
有时候iOS开发中需要使用到渐变色,来给图片或者view盖上一层,使其显示效果更好,我们这里使用的CAGradientLayer来设置渐变色 要实现的效果如下: Demo地址---下载 // 创建渐变 ...
- 基于FFMPEG SDK流媒体开发1---解码媒体文件流信息
近期项目涉及到流媒体等开发,因为有过开发经验深知其难度所在,没办法仅仅能又一次拾起,最新版的SDK被改的一塌糊涂,只是大体的开发思路都是一样的,看多少书查多少资料都无用,一步一步的编写代码 才是学好的 ...
- C项目实践--网络协议和套接字编程
1.TCP/IP协议 TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议,ICMP(Internet Control Message Proto ...
- busybox相关的工具
1 mdev busybox里面的类似于udev的工具,学名micro udev. mdev -s扫描/sys目录,如果是设备的话,就会为之在/dev目录下创建设备结点. 2 busybox执行不同的 ...
- Node.js 101(2): Promise and async
--原文地址:http://blog.chrisyip.im/nodejs-101-package-promise-and-async 先回想一下 Sagase 的项目结构: lib/ cli.js ...
- sublime text3使用插件SublimeTextTrans设置透明度
推荐一款在windows上设置sublime2和sublime3背景透明度的插件:SublimeTextTrans, 下载地址:https://github.com/vhanla/SublimeTex ...