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 ...
随机推荐
- eclipse设置每次提交代码忽略target、.settings、.svn、.project文件
- Samba简单配置--匿名用户共享资料可读可写的实现
http://e-mailwu.blog.163.com/blog/static/65104036200931893921923/ http://www.cnblogs.com/god_like_do ...
- Android中的图片查看器
本案例,使用Eclipse来开发Android2.1版本号的图片查看器. 1)首先,打开Eclipse.新建一个Android2.1版本号的项目ShowTu,打开res/values中文件夹下的str ...
- ansible学习之--简单学习笔记1
1.利用dm-crypt来创建加密文件系统.编写shell脚本(安装和卸载两个shell脚本) 2.编写ansible,playbook文件 3.编写python脚本 首先编写shell脚本 inst ...
- The sandbox is not sync with the Podfile.lock
github下载的Demo,很多时候使用到CocoaPods,有的时候因为依赖关系或者版本问题不能编译运行. 出现 以下错误 The sandbox is not sync with the Podf ...
- rocketmq消费队列代码
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(Constant.operationLogGroup); try { consum ...
- 深入分析JavaWeb Item13 -- jsp指令具体解释
一.JSP指令简单介绍 JSP指令(directive)是为JSP引擎而设计的.它们并不直接产生不论什么可见输出,而仅仅是告诉引擎怎样处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指 ...
- HDU1045 Fire Net —— 二分图最大匹配
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others) ...
- YTU 2439: C++习题 复数类--重载运算符+
2439: C++习题 复数类--重载运算符+ 时间限制: 1 Sec 内存限制: 128 MB 提交: 1022 解决: 669 题目描述 定义一个复数类Complex,重载运算符"+ ...
- 【Codevs1346】HelloWorld编译器
http://codevs.cn/problem/1346/ 可怜我战绩 // <1346.cpp> - 10/30/16 17:12:09 // This file is made by ...