区块链笔记

9/6/2017

区块链技术的发展起源于2008年中本聪发表的一篇论文《比特币,一种点对点的电子现金系统》,后逐步的演变成为更加关注与底层实现技术的区块链技术。本身并没有新的技术内容,只是将原有的很多内容融合在一起,比如密码学,P2P, 共识机制,智能合约等。

区块链的分类

区块链(Block Chain)称之为交易数据块的链,比特币是最大的区块链应用实例。区块链中的主要分类如下:

  1. 公共链 对外开放,任何人都可以参与,无需授权可自由出入网络,公共链中的区块可以被任何人查看,在互相陌生的环境中建立起共识,一般利用工作量证明或权益证明来实现共识机制。使用在虚拟货币,大众的电子商务和互联网金融领域等。
  2. 联盟链 仅限于联盟成员参与,比如银行R3联盟,和Linux基金会开发的超级账本(Hyperleger), 参与的话需要注册加入许可后才可以。主要用于一些B2B场景中,银行之间的对账等等。
  3. 私有链 一般仅限于企业内部使用的私有链,提供安全可追溯,不可篡改和自动执行的平台,比如数据库管理和审计使用,或者政府的行业统计和预算执行等场景。

另外根据当前的现状,区块链还分为主链和侧链,比如比特币作为当前最大的区块链应用实例,可以看做为一个主链,由于协议已经固定,很难对于其进行创新和扩展(影响所有的用户),从而可以以比特币作为基础,重构一个区块链,称之为侧链。当前很多的代币都是基于这种模式发行的虚拟货币。

区块链的价值

区块链技术室人类历史上实现了去中心话的大规模信用机制,可以简化原有的很多流程和操作,保证交易双方完成相应义务,实时的结算和清算,提升透明度和监管效率。

  • 金融领域的结算和清算(维护同一个联盟区块链,实现资金转移和交易)
  • 数字货币
  • 跨境支付
  • 财产保险行业

比特币的工作方式

比特币是区块链中的一个典型应用也是应用最广的一种方式。传统的银行,作为中心化的管理机构,维护所有人的账户信息,彼此转账的话也是通过银行进行转账,中心可以看成一个大的数据库,这个数据库保存所有用户的信息。比特币基于P2P网络,其中每个节点保存有一个完整的账户数据库,因此其中每一个用户都可以查看其他用户的账户信息。

原来中心化管理的时候,每个人去银行开户都会默认相信银行可以帮你保管好钱财,但是对于区块链这种去中心化的架构如何处理信任问题,它又是如何工作的呢?

比如Alice 发送5BTC给Bob, 这条消息会在整个的网络中传播,所有收到信息的人都更新自己的账本,变成更新后的。但是如何保证这个信息是合法授权的呢? 其中用到的就是数字签名技术

每一个交易都会生成一个特殊的数字签名,只有具有私钥的用户才能加密消息生成数字签名,而接收到签名的用户只要是能够利用发送方公钥解密消息,则证明这个消息就是合法签名的消息。

Alice用自己的私钥加密交易信息后,完成数字签名,所有用户收到后都可以确认这的确是Alice发送的交易信息,接受并更新即可,每一个交易信息都保存有一些特殊的字段比如交易时间等,因此生成的信息都是不同的。

椭圆曲线加密算法。

输入与输出: 每一笔交易的时候都会将所有的当前资金发送出去,比如现在Alice有100BTC ,现在需要发送给Bob50BTC,因此会将所有的Input发送给Bob. 输出中显示Bob返回50给Alice. 可以通过这种方式来验证所有的输入和输出时是否匹配,也可以用来追踪每一个btc的来源。

当下载btc钱包的时候,可以检查所有的之前交易信息是否正确。

BTC中的下载的文件,并不是每个账户多少钱,而是每笔BTC的转移,从某一个用户到另一个用户转移了多少比特币,因此可以很容易的知道是否某一个用户有足够的钱去生成一个新的交易,比如转移给另一个人。检查是否所有的输入都是unused状态。

BTC中的货币丢失比如私钥的丢失,不充分的备份等等都会导致BTC的彻底丢失,因此保存好私钥十分的重要

彻底的匿名性,如果使用Tor网络来隐藏自己的地址,你的所有交易都会无法追踪,因为对于外界用户来说你就是一个公钥地址。这个地址集合的大小是2的160次方,基本上可以看作是比地球上每一粒沙子都变成一个新的地球后总计的沙子的数量还要大的一个数量级。

BTC的安全问题:

Double spending

比如用户Alice转移1BTC给Bob,然后又将同样的input发送给自己,这样当在网络中传播的时候,由于这个交易信息还没有被所有节点确认,因此没有办法检查他的unused状态,导致有可能最终到达bob的时候,Alice发送自己的先被确认,检查input输入状态的时候该输入已用失效。

比特币使用的方式是通过将所有的排序的交易信息放置在一个块中,称之为block,而每一个chain都相互连接在一起,每一个block都代表了那个时间点的所有交易的信息。每一个block都相互前后连接在一起。

未计入到当前区块链中的交易信息称之为未确认或者未排序,任何人都可以收集所有未确认和未排序的交易信息,放置在block chain中,如何决定哪一个应该放在其中,这就涉及到了一个交易的挖矿问题。

所有交易的block都应该包含一个数学问题的答案,这个只有不断的猜测才能获得的答案,消耗大量的资源去获取。猜测的方式就是通过将整个的交易块和随机数组合,进行hash后取得的值满足一定的特殊条件,这一般需要大概所有node执行10分钟左右的时间产生。一旦解决后就可以执行广播将这个信息传递出去。

区块链的稳定

当同时多个node解决问题并广播自己的信息出去的时候,这个时候就会导致分叉的出现,一般新的block会放置在第一个接收到的位置,并继续,当又有新的block产生的时候,他总是会选择最长的链进行链接,导致整个的区块链的稳定。

所有其他的数据会被放置在未确认或未排序的池子中。

另外由于之前的hash运算会计算出一个特殊的值,作为这个块的标示,而下面的计算中又需要这个值,因此无法直接的提前创建一系列的区块来从中间斩断,创建更长的区块来替换原有的,因此对于double spend的问题会削弱。 一般来说等待1小时左右确认会比较安全。

比特币的现状

比特币通过挖矿来获得,而挖矿会每隔4年减少一般,所以最终的可能大小是2100万,最后的比特币是会在2140年被生成。

现在的一些矿场的容量有一些已经超过了总计容量的20%,特别是中国的一些地区。

10分钟的时间选择基于整个的系统稳定性和计算能力来动态的调整出来的,主要是通过困难度来完成。


区块链 页面已被访问176次

发表评论