加密货币的本质
链客,专为开发者而生,有问必答!
此文章来自区块链技术社区,未经允许拒绝转载。
去年,比特币暴涨,其他币也像雨后春笋一样冒出来,已经有1000多种了。
很多人都在问,加密货币(cryptocurrency)的时代,真的来临了吗?将来会不会人类不再使用美元、人民币,改用加密货币?那么多品种,我应该使用哪一种币?要不要现在就去投资一些?
这些问题的答案,我也想知道,就花了很多时间查阅资料、研究协议。前两周发表的《区块链入门教程》和《比特币入门教程》,是我的学习心得。但是,那两篇教程主要介绍基本概念、探讨协议的可行性,没回答一个根本的问题:加密货币到底是什么?
下面就是我对这个问题的思考。阅读之前,如果你已经了解区块链和比特币,那很好;如果不了解,也没关系,本文不涉及技术,只讨论最基本的原理。
一、钱是什么?
我们都知道,人民币是钱,美元是钱,金银财宝是钱。我问一个问题,它们为什么能成为钱?
你可能回答,因为它们有价值,或者是价值的代表。但是,有价值的东西多了,为什么只有这些品种成为了钱?
答案很容易想到,因为人们普遍相信(认同)它们的价值,其他东西的价值难以得到普通认同,无法成为钱。比如,邮票的价值就没有普遍的认同,除了集邮爱好者,其他地方都不能当钱用。一般来说,认同的人越多,这种钱的通用性就越高。
我曾经去俄罗斯旅行,当地货币是卢布。可是,一旦离开俄国,没人相信它的购买力,所以卢布离开俄国就没用了。相反,全世界人民都相信美元的价值,所以全世界都能用。我用美元付账的时候,我发现那些俄国人都很满意。
所以,钱的本质,或者说货币的本质,就是它的可信性。它必须使人们相信,它是有价值的,然后才能成为钱,才能被收藏和支付。
二、可信性
为什么钱必须是可信的?因为对方必须相信它的价值,否则你没法支付出去。那么,接下来的问题就是,可信的东西是否就是钱?
我的回答是 Yes。一样东西能否成为钱,只取决于人们是否相信它的价值,至于它是不是真的有价值,根本不重要。
如果马云在一张纸条上写"这张纸条价值10000元",下面签了他的名,并且附上防伪标记。你说这纸条是钱吗?我跟你保证,这就是钱,你用来支付,人们都会接受,马云等同于发行了一种新的纸币。
比特币也是如此,它是什么,其实不太重要。重要的是,它必须保证自己是可信的,这样才能让足够的人相信它的价值,然后才能成为钱。
三、比特币的可信性
比特币要解决的核心问题,就是创造一种可信的数字凭证。由于这种凭证可信,所以能够当做货币。
比特币的技术基础是加密学,因为只有加密学才能保证它的可信性。一旦加密被破解,它就没法当作货币了。这也是这一类数字凭证被称为"加密货币"的原因。
技术人员对比特币感兴趣,还有一个重要原因。任何需要可靠的数字凭证的场合,也许都可以用到这种技术。
四、比特币的特点
比特币有三个特点,就是因为做到了这三点,所以它可信,能够当作钱。
首先,它不会被(轻易)偷走。或者反过来说,它使得你无法去偷别人,你只能花你自己的钱。因为必须要有别人的私钥,才能取出他的钱。正常情况下,你拿不到别人的私钥。
其次,它无法伪造。每一个比特币都能追溯来源,而所有比特币都来源于矿工获得的奖励。矿工只有新建区块,才能获得奖励,这是很难的事情,所以无法伪造比特币。
最后,它无法大批生成。原因跟上一条一样,比特币的发行速度是稳定的,现在每10分钟新增12.5个,然后每四年减半,最终停止增长。因此不会像纸币那样,政府滥发导致通货膨胀。
五、比特币有实体吗?
由于后面要提到的原因,比特币不可能拥有实体,没法做到"从口袋里掏出一个币"这种场景,交易都必须通过互联网完成。
你可能会说,钱都有实体,怎么可能存在无形的钱呢?答案正好相反,钱就应该是无形的,那些实体的钱其实是对物质材料的浪费,由于技术不够发达,不得不做成实体。
我小时候买东西,都必须用现金,否则没法证明,自己拥有购买力。只有通过实体的钱,才能保证对方确实收到了钱。如果银行业发达,就不用现金了,可以使用银行卡。支付的时候,对方抄一下银行卡号码,查询银行"这个账户有钱吗"。银行回答有钱,OK,成交。
但是,互联网使得实体的银行卡也不需要了。如果存在一个开放的中央记账系统,任何人都可以查询,你把钱划到老板的账户,老板查询一下,发现收到了,交易自动成交,整个过程都是无形的,还需要什么银行卡呢?
这个中央记账系统已经实现了,就叫做区块链。
六、区块链的作用
区块链就是一个数据库,记载了所有的交易,用作中央记账系统。
每笔交易的核心,就是一句话,比如"张三向李四转移了1个比特币"。为了证明这句话可信,张三为它加上了数字签名。任何人都可以用张三的公钥,证明这确实是张三本人的行为。另一方面,其他人无法伪造张三的数字签名,所以不可能伪造这笔交易。
矿工们收到这句话,首先验证数字签名的可信性,然后验证张三确实拥有这些比特币(每一笔交易都有上一笔交易的编号,用来查询比特币的来源)。验证通过以后,就着手把这句话写入区块链了。一旦写入区块链,所有人就都可以查询到,因此这笔比特币就被认为,从张三转移到了李四。
区块链的作用就是把这句话永久保存下来了,让任何人都可以查看,并且任何人(包括张三本人在内)都无法再修改了。
货币是什么?其实就是这句话。这一句话就完成了一次支付。我们平时用人民币支付,其实只是用纸币表达这条信息。如果每个人都可以实时写入/读取中央记账系统(区块链),那么完全可以不携带货币。
七、双重支出
前面说过,交易不可能被伪造。但是,由于每一笔交易都是一串二进制信号,因此可能被复制。举例来说,"张三向李四转移了1个比特币"这句话,可能被其他人复制,也可能被张三自己复制,提交到区块链。
如果这句话被两次写入区块链,就意味着张三可以把同一笔钱花掉两次。但是,第二次写入的时候,查询区块链可以发现张三已经把这笔钱花掉了,从而认定这是不合法的交易,不能写入区块链。因此,复制交易是不可能的。
比较麻烦的是另一种情况,就是张三把同一笔钱付给两个人。他先向区块链提交一个交易"张三向李四转移了1个比特币",然后又提交了另一个交易"张三向王五转移了1个比特币"。这两个交易都可能被认为是真实的交易,从而进入区块链。因此,必须有办法防止出现这种情况。
情况一:同一个矿工收到了这两个交易。那么他会察觉到,它们不可能同时成立,因此选择其中的一笔写入区块链。
情况二:矿工 A 收到了第一笔交易,矿工 B 收到了第二笔交易,他们各自都会认定这是合法的交易,分别把这两笔交易写入了两个区块,这时区块链就出现了分叉。
比特币协议规定,分叉点之后最先达到6个区块的那个分支,被认定为正式的区块链,其他分支都将被放弃。由于区块的生成速度由计算能力决定,所以到底哪一笔交易最后会被写入区块链,完全由它所在的分支能吸引多少计算能力决定。隐藏的逻辑是,如果大多数人(计算能力)选择相信某一笔交易,那么它就应该是真的。
综上所述,双重支出不可能发生。因为中央记账系统总有办法发现,你把同一笔钱花了两遍。但是,这也说明了比特币的一个代价,就是交易不能实时确认,必须等待至少一个小时。
八、参考链接
How the Bitcoin protocol actually works, by Michael Nielsen
(完)
相关文章:

「2018山东一轮集训」 Tree
为什么出题人这么毒瘤啊??!!一个分块还要带log的题非要出成n<2*1e5。。。。。。。 为了卡过最后两个点我做了无数常数优化,包括但不限于:把所有线段树改成 存差分的树状数组;把树剖求LCA的极…

mysql 表空间收缩_mysql表碎片清理和表空间收缩
mysql表碎片清理和表空间收缩(即清理碎片后report_site_day.ibd文件磁盘空间减小,该方案基于独立表空间存储方式)OPTIMIZETABLE [tablename],当然这种方式只适用于独立表空间清除碎片的优点:降低访问表时的IO,提高mysql性能,释放表空间降低磁盘空间使用率OPTIMIZE TABLE ipvacl…

spring security remember me实现自动登录
1 默认策略 在我们自定义的login中增加一个选择框 <input type"submit" value"Login" /> <br/> <br/> <input type"checkbox" valuetrue name"_spring_security_remember_me" />记住密码 <!-- 记住…

野指针与内存泄漏那些事
野指针:不是NULL指针,是指向垃圾内存的指针 野指针成因: 1.指针变量没有被初始化:指针变量在创建时同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。 2.指针p被free或者delete,没有被设置为…

参数等效模型可以用于_等效媒质理论(介电参数反演)
听说过超材料的读者大概率会了解一个知识点,复杂的媒质块可以等效为一块平板,当然这是有条件的。比如模型小于十分之一波长之类的,尤其对模型厚度要求严格些。大家在查找等效媒质理论文献的时候,可能会被繁杂的理论解释弄得爆炸&a…

js日期格式化Date
使用Date类进行日期格式化。 1 输入“yyyy-MM-dd hh:mm:ss”格式的String字符串,返回字符串 做一个简单判定,在当日显示为几点几分,同年为月日,不同年显示年月 1 function dateFormat(str){2 //str格式为yyyy-mm-dd h…

(十九)异常处理
什么是异常处理 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下 语法错误&…

jquery 获取一组元素的选中项 - 函数、jquery获取复选框值、jquery获取单选按钮值...
做表单提交时,如果现在还在用form提交,用户体验很差,所以一般使用ajax提交。 其中需要获取每个表单输入元素的值,获取的时候像文本框这些还好说,Jquery提供了 .val() 方法,获取很方便,但是获取复…

geany怎么创建文件夹_教程详情|Geany怎么使用,Geany安装使用教程_234游戏网
Geany是利用GTK 2工具包开发的一个快速、轻巧的集成开发环境,具有良好的可移植性和通用性、安全性,广泛应用于各个行业。Geany具有语法高亮、代码折叠、代码自动完成等功能,非常适合开发人员使用。下面是关于Geany安装使用教程,希…

Django模板系统和admin模块
只需要记两种特殊符号:{{ }}和 {% %}变量相关的用 {{}}, 逻辑相关的用 {%%}。 Filters 语法: {{ value|filter_name:参数 }}default{{ value|default: "nothing"}} 如果value值没传的话就显示nothinglength{{ value|length }}|左右…

finalshell文件列表不显示_Jira面板配置_待办事项不显示问题列表
最近,使用jira进行项目管理,出现一些问题,对于其中一些配置,做下记录,后续方便查看,也给需要的人一个参考,传送门:jira使用文档_Java_pang787559613的博客-CSDN博客blog.csdn.netj…

背单词:3年,34150分钟!
转载于:https://www.cnblogs.com/sx00xs/p/6128618.html

如何学习区块链技术
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 有效地学习区块链技术,您需要深入了解区块链协议和一些编程语言。记住区块链是一种可以用各种编程语言实现的协议。看下面的例子&#…

.net里鼠标选中的text数据怎么获取_Python数据科学实践 | 爬虫1
点击上方蓝色字体,关注我们大家好,基于Python的数据科学实践课程又到来了,大家尽情学习吧。本期内容主要由智亿同学与政委联合推出。前面几章大家学习了如何利用Python处理与清洗数据,如何探索性数据分析,以及如何利用…

redis实现对账(集合比较)功能
现状:每日在进行系统之间的订单对账时,往往是这样的操作流程; 1.从外部系统拉取数据存入本地数据库; 2.查询本地订单数据集合localSet; 3.查询外部系统订单数据集合outerSet; 4.以本地localSet为基准,对照o…

Javascript刷题 》 查找数组元素位置
找出元素 item 在给定数组 arr 中的位置 输出描述: function indexOf(arr, item) {..... } 如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1 输入例子: indexOf([ 1, 2, 3, 4 ], 3) 输出例子: 2 实现方法 1、先将arr转换成字符串,…

Go 语言函数
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 函数是基本的代码块,用于执行一个任务。 Go 语言最少有个 main() 函数。 你可以通过函数来划分不同功能,逻辑上每个函数执…

终端主题_再见 XShell 和 ITerm 2,是时候拥抱全平台高颜值终端工具 Hyper 了!
点击上方“涛哥聊Python”,选择“星标”公众号重磅干货,第一时间送达转自:运维之美不论是 macOS 还是 Windows 下,我们都不推荐使用系统自带终端。无论是可拓展性还是可编程性都被「系统自带」这样的特点限制。特别是 Windows 下的…

每天一个linux命令(8):cp 命令
cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。但是如果是在shell脚本…

samba srver on centos-7
切换到root用户安装samba,将windows登录用户admin映射到linux用户centos 安装samba并准备工作目录 yum install -y samba samba-client mkdir -p /var/samba/code chown -R centos:centos /var/samba/codetouch /etc/samba/smbusersecho "centos admin "…

以太坊数据结构MPT
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 MPT(Merkle Patricia Tries)是以太坊存储数据的核心数据结构,它是由Merkle Tree和Patricia Tree结合的一种树形结构,理解MP…

lambda在python中的用法_在python中对lambda使用.assign()方法
我在Python中运行以下代码:#Declaring these now for later use in the plotsTOP_CAP_TITLE Top 10 market capitalizationTOP_CAP_YLABEL % of total cap# Selecting the first 10 rows and setting the indexcap10 cap.loc[:10, :].set_index(id)# Calculating…

react 开发过程中的总结/归纳
1、点击元素,获取绑定该事件的父级元素,使用 e.currentTarget。e.target 获取的是,出发该事件的元素,该元素有可能是所绑定事件的元素的子元素。 2、使用 react router4 history 只能传递给儿子组件,不能传递给孙子组件…

kvm虚拟机--存储池配置梳理(转)
1.创建基于文件夹的存储池(目录) 2.定义存储池与其目录 1 # virsh pool-define-as vmdisk --type dir --target /data/vmfs 3.创建已定义的存储池 (1)创建已定义的存储池 1 # virsh pool-build vmdisk (2)查看已定义的存储池,存储池不激活无法…

区块链概况:什么是区块链
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链技术自身仍然在飞速发展中,目前还缺乏统一的规范和标准。 wikipedia 给出的定义为: A blockchain —originally, b…

drx功能开启后_简单实用!小米手机中这些新功能真香
小米手机作为国产机热销品牌之一,它除了有好看的外观,还有很多隐藏的实用功能,今天小编就来和大家分享5个小米手机里你不知道的功能。Al电话助理看到陌生号码时,很多人第一反应就是挂掉,不想接听,但又担心自…

Ubuntu 8.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解
Linux版本:Ubuntu8.04 内核版本:Linux 2.6.24 交叉编译器版本:arm-linux-gcc-3.4.1 交叉编译器下载链接: https://share.weiyun.com/5oxlS6X (密码:36R7) 前言 1、搭建交叉编译环境 安装、配置交…

Installshield 2015 实现检测某安装文件是否存在并运行安装
最近在用installshiled 2015做安装包,用了很长时间研究明白了怎样实现在安装成功界面显示一个checkbox,选中该checkbox,就会安装选中的安装包。 首先我们要有一个installshield的工程。 其次是判断是否要显示这个checkbox。我的需求是根据某个…

区块链概况:从数字货币说起
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 从数字货币说起 货币是人类文明发展过程中的一大发明,最重要的职能包括价值尺度、流通手段、贮藏手段。很难想象离开了货币,…

Android RecyclerView 基本使用
Android RecyclerView 基本使用 概述 RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用。 据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生…