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工作原理的更多相关文章

  1. bitcoin PoW原理及区块创建过程

    bitcoin PoW原理及区块创建过程 PoW 为了在点对点的基础上实现一个分布式时间戳服务器,我们需要使用PoW(Proof of Work)系统来达成共识.PoW过程就是寻找一个目标值的过程,当 ...

  2. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  3. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  4. HashMap的工作原理

    HashMap的工作原理   HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...

  5. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)

    RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...

  6. ThreadLocal 工作原理、部分源码分析

    1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...

  7. Servlet的生命周期及工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

  8. 代码管理工具 --- git的学习笔记二《git的工作原理》

    通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...

  9. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

随机推荐

  1. hdu 4599 Dice

    数学能力已经彻底降低到了小学水平,真是惨啊惨... 首先G(M)很容易确定,G(M) = 6 * M; H(N) = 6 * F(N),于是推出来H(N)就可以了,昨天请教了一下别人,直接数学公式搞定 ...

  2. python爬虫(二)--了解deque

    队列-deque 有了上面一节的基础.当然你须要全然掌握上一节的全部方法,由于上一节的方法.在以下的教程中 会重复的用到. 假设你没有记住,请你返回上一节. http://blog.csdn.net/ ...

  3. Wi-Fi无线网络(WPA2加密)快速破解 ——某公司无线设备安全隐患报告

    Wi-Fi无线网络(WPA2加密)快速破解 --某公司无线设备安全隐患报告 评估人:阿牛 2013年12月12日 文件夹 一. 导言 2 二. 背景 2 三. 无线产品应当採取的安全策略 3 四. 存 ...

  4. Python常用的几种常用的内置函数

    abs(x)              用于返回绝对值 divmod(x,y)       函数中传入两个数字,返回的是x/y的一个结果的元组(商,余数) pow(x,y)            用于 ...

  5. PHP swfupload图片上传实例

    swfupload已经是第二次研究,这次自已整了个简单demo,无奈菜鸟最杯… PHP代码如下: if (isset($_FILES["Filedata"]) || !is_upl ...

  6. LuaInterface简单介绍

    LuaInterface简单介绍 Lua是一种非常好的扩展性语言.Lua解释器被设计成一个非常easy嵌入到宿主程序的库.LuaInterface则用于实现Lua和CLR的混合编程. (一)Lua f ...

  7. Centos 6.4 搭建LANMP一键安装版

    lanmp一键安装包是wdlinux官网2010年开始推出的lamp,lnmp,lnamp(apache,nginx,php,mysql,zend,eAccelerator,pureftpd)应用环境 ...

  8. MySQL 温故而知新--Innodb存储引擎中的锁

    近期碰到非常多锁问题.所以攻克了后,细致再去阅读了关于锁的书籍,整理例如以下:1,锁的种类 Innodb存储引擎实现了例如以下2种标准的行级锁: ? 共享锁(S lock),同意事务读取一行数据. ? ...

  9. C项目实践--贪吃蛇(2)

    12.按键处理 函数名称:key_down 函数功能:按键处理函数,主要包括:1.刚开始或结束时的按键处理,游戏开始时,按任意键进入游戏,游戏运行过程中按回车键是游戏的暂停或开始的切换键:2.游戏运行 ...

  10. p_CreateAuditEntry

    如果你能搜到我这篇博客,相信你导遇到的了和我一样在导入CRM组织时遇到了类似的错误.这个错误我查资料可以通过CRM升级来解决参考下面连接: https://support.microsoft.com/ ...