假设有一个大家都信任的中心化机构想要发行数字货币。

该机构由用自己的私钥签名后后发行,任何人都可以通过公钥验证该货币是否为真。
买东西的时候,购买者可以将数字货币发送给卖方,卖方可以也可以通过公钥验证该货币为真后即可完成支付的过程。
此方案没有用到区块链技术,使用的是密码学中的非对称加密公私钥体系。
但该方案存在一个明显漏洞:
不同于现实中的货币,交易者可以对手中的数字货币进行复制,使得一张数字货币可以重复使用。
花两次攻击/双花攻击(double spending attack)
数字货币面临的主要挑战就是怎么应对double spending attack。
如果如下图所示,对每一个发行的数字货币进行编号。

同时,货币发行机构维护一个数据库,负责记录每一张数字货币的归属。

如上图,在进行交易的时候首先通过机构核实该货币目前的归属,如果发现该货币已经支付给了别人,则无法进行第二次支付,以此来避免double spending attack。
此方案可以实现,但属于一个中心化的方案。数字货币的发行和每一次交易都需要通过发行机构证明合法性。
能否实现一个去中心化的方案,将货币发行机构的职能由广大用户进行承担?这就是BTC数字货币系统要解决的问题。
一个去中心化的货币需要解决两个问题:
1.数字货币的发行。(谁有权力发行数字货币)
2.怎么验证交易的有效性。(怎样防止double spending attack)
对于第二个问题,解决方法也是需要维护一个数据结构,来检测这个币有没有被花过,被谁花过。但这个数据结构不是由中心化机构来维护,而是由所有的用户来维护。这个数据结构就是区块链。
BTC系统中每个交易都包含了输入和输出两部分。输入部分要说明币的来源,输出部分要给出收款人公钥的哈希。

如上图所示,A拿到了铸币权,发行了10个比特币,接着A给B和C每个人5个比特币,该交易需要A的签名,证明是A同意的。同时该交易还要说明花掉的10个比特币的来源。B接着转给C两个比特币,转给D3个比特币,同样B也要进行签名,同时说明币的来源。C将7个比特币转给E,签字,说明币的来源(两个来自前一个块,5个来自前前一个块)。
此处有两种哈希指针,一种负责连接整个区块,一种负责指向前面的某个交易,为了说明币的来源,防范double spending attack。
值得注意的是,如果A要向B转BTC,A需要向所有人公布自己的公钥,以此来使所有人能够通过A的公钥验证这笔交易(验证A的签名)。
但这里就存在一个问题,假设一个B’,声称自己为A,自己签名后发布自己的公钥声称是A完成的转账,其他人通过B’的公钥可以得到B’的签名,那如何分辨出该交易是伪造的呢?
每个交易分为输入和输出两部分,输入部分要说明币的来源和付款人的公钥,输出部分要给出收款人的公钥哈希。在上述情况中,A的币的来源于铸币交易,coinbase tx,输出里面有A的公钥哈希,因此A的转账中使用的公钥哈希要跟之前的公钥哈希对应,以此来验证是否真的为A发起的交易。
在实际中,每个区块可以包含很多交易,这些交易就组织成Merkle Tree。
每个区块分为块头(Block Header)和块身(Block Body)两部分。
Block Header包含该区块中宏观的信息,比如用的BTC哪个版本的协议(Version),区块链中指向前一个区块的指针(hash of previous block header/只算区块的块头),整个Merkle Tree的根哈希值(Merkle root hash),挖矿的难度目标阈值(target/目标阈值编码nBits)和随机数nonce。

Block Body中包含交易列表。
取hash时将块头的所有部分取hash,Block Body的信息不用管。因为Merkle root hash已经可以保证Block Body的信息无法被篡改。
系统中还分为全节点(full node)和轻节点(light node)。
全节点保存验证所有信息(fully validating node),轻节点(light weight node)保留Block Header的信息,一般来说,轻节点无法独立验证交易的合法性。系统中存在的大多数节点都是轻结点。轻节点没有参与区块链的构造与维护,只是利用区块链的一些信息做一些查询。
账本的内容要取得分布式共识(distributed consensus)。
distributed consensus的一个简单的例子是分布式的哈希表(distributed hash table)。这里需要取得共识包括哈希表中包含了哪些key-value pair。
在分布式系统中包含了很多不可能结论(impossible results),其中最著名的就是FLP:
在一个异步(asynchronous)(网络传输时延没有上限)的系统中,即使只有一个成员是有问题的(faulty),也没有办法达成共识。
还有一个著名结论CAP Theorem:
CAP指的是分布式系统我们想要达成的三个性质:Consistency、Availiability和Partition Tolerance。任何一个分布式系统最多只能满足上述两个性质,无法同时满足三个。
分布式共识的一个比较著名的协议Paxos,该协议可以保持一致性(Consistency),但某些情况下可能一直无法达成共识。
BTC中的共识协议(Consensus in BItcoins):
BTC共识协议需要解决的问题是,有些节点可能是有恶意的。
如果采取投票决定新区块的协议首先要决定membership的问题,谁有资格进行投票。如果说这个membership有严格定义,比如联盟链(hyperledger fabric),只有某些符合条件的大公司才能加入。这种情况下基于投票的方案是可行的。
但是在区块链中,产生一个账户不需要任何人的批准,如果有个恶意节点一直连续不断的产生账户,产生的账户数量超过了要投票账户数量的一半,便可以操纵投票结果。(女巫攻击,sybil attack)
BTC系统中使用计算力代替账户进行投票。 每个节点都可以在本地组装成一个候选区块,把该节点认为合法的交易放入这个区块中,然后就开始尝试各种nonce值。

组装完成后开始测试各种随机数是否满足上述要求,如果某个节点找到了符合要求的nonce,则该节点获得了记账权,即向BTC去中心化账本中写入下一个区块的权利,只有找到nonce,获得记账权的账户才有权力发布下一个区块。其他节点收到区块以后要验证这个区块的合法性。
假设一个区块接收检查后都符合要求,是否一定会被接收?
longest valid chain:
BTC协议中规定,接受的链,应该是在扩展最长合法链。

分叉攻击(forking attack):通过向区块链中间位置插入区块,来回滚某个已经发生了的交易。
在正常情况下,如果有两个节点同时获得了记账权,此时会发现两个等长的分叉。

BTc协议中,如果收到新的区块之后继续向下扩展,则说明认可(接收)了该区块。
如果出现了上述情况,上述情况会维持一段时间,一旦其中一个区块有新的区块向下扩展,另外一个就被丢弃掉了。、

为什么要争夺记账权?
1.有一定的权力,决定哪些交易可以被写入区块链中。(不应成为主要动力)
2.block reward
coinbase transaction是发行新的比特币的唯一方法。其他所有交易都只不过是把已有的BTC从一个账户转移到另一个账户。
挖矿(mining):争夺记账权的过程。digital gold,miner。
笔记合集
原视频:北京大学肖臻老师《区块链技术与应用》公开课
目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
如何学习ruby的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/
尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify
深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG
文章目录1、自相关函数ACF2、偏自相关函数PACF3、ARIMA(p,d,q)的阶数判断4、代码实现1、引入所需依赖2、数据读取与处理3、一阶差分与绘图4、ACF5、PACF1、自相关函数ACF自相关函数反映了同一序列在不同时序的取值之间的相关性。公式:ACF(k)=ρk=Cov(yt,yt−k)Var(yt)ACF(k)=\rho_{k}=\frac{Cov(y_{t},y_{t-k})}{Var(y_{t})}ACF(k)=ρk=Var(yt)Cov(yt,yt−k)其中分子用于求协方差矩阵,分母用于计算样本方差。求出的ACF值为[-1,1]。但对于一个平稳的AR模型,求出其滞
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定