区块链基本介绍(一)

区块链产生的背景

传统互联网上的交易都需要借助可信赖的第三方机构来处理电子支付信息,交易双方信赖第三方机构。(淘宝买家-淘宝平台-淘宝卖家)

但是第三方介入也有很多缺点:
- 交易成本高(收取一定的手续费)
- 暴露隐私(第三方为了验证信息,需提供交易双方信息)
- …

试想如果去掉第三方机构,交易双方直接交易,这样怎么保证交易生效呢?区块链技术的出现就是为了解决这样的问题,区块链是一个基于密码学原理而不基于信任机制,使得达成一致的双方直接交易,并且公布给所有的见证人。

区块链的起源

区块链的起源来自2008年中本聪<<比特币:一种点对点电子现金系统>>,根据这种思想概念诞生了第一个产物”比特币”。

比特币

什么是比特币

直观映象
- 具有投资、购买和存储属性的商品
- 虚拟货币,价格波动大,可以购物
- 2017年勒索病毒,暗网交易

概念

比特币是一种虚拟数字货币,总量是恒定的,没有发行方,不可篡改,数学科学做背书,任何人可参与和创造,可以用来购买商品和兑换法币。

比特币的挖矿是什么

比特币中的挖矿就是将一段时间内比特币系统中发生的交易进行确认,并记录在区块链上形成新的区块链的过程,挖矿的人就是矿工,对挖到矿的人进行比特币奖励,换而言之,挖矿就是生产比特币的过程。

节点类型和分工

比特币P2P网络中的各个节点相互对等,但是根据所提供的功能不同,各节点可能具有不同的分工,每个比特币节点都是 钱包、矿工、完整区块链、网络路由节点 的功能集合。

全节点

包含钱包、矿工、完整区块链、网络路由节点,可以独立验证交易,维持与对等节点的连接。

完整区块链节点

包含完整区块链、网络路由节点,只用来同步区块,参与验证,维持与对等节点的连接。

独立矿工节点

包含矿工、完整区块链、网络路由节点,自行验证,参与挖矿,维持与对等节点的连接。

轻量(SPV)钱包

轻量钱包没有完整区块链数据,是通过一种名为“简易支付验证(SPV)”的方
式来完成交易验证

挖矿硬件的进展

  • CPU
  • 显卡
  • FPGA
  • ASIC矿机
比特币为什么有价值

1、去中心化,没有发行机构,匿名性。
2、总量恒定,稀缺性。
3、比特币因挖矿产生,挖矿消耗了电力,对等性产生了价值。
4、越来越多的人参与到比特币网络,为争夺比特币。
5、…..

比特币的网路概览图

什么是区块链

定义

区块链是一个去中心化的分布式账本,由不可更改的数据包组成,这些数据包也称作”区块”,每个区块前后相连就形成”区块链”,是一种通过去中心化、去信任的方式集体维护一个可靠数据库的技术方案。


每个区块都连着上一个区块,就形成的区块链。

从数据角度来看

区块链是一种几乎不可能被更改的分布式数据库,这里的”分布式”不仅体现为数据的分布式存储,也体现为数据的分布式记录(即由参与者共同维护所有数据)

从技术角度看

区块链并不是一种单一的技术,而是多种技术整合的结果,这些技术以新的结构组合在一起,形成一种新的数据记录,存储和表达的方式。

区块链的特征

开放、共识

任何人都可以参与到区块链网络,每一台设备都能作为一个节点,每个节点都允许获得一份完整的数据库拷贝,节点之间基于一套共识机制,通过竞争计算共同维护整个区块链。

去中心化、去信任机制

区块链由众多的节点共同组成一个点对点的网络,不存在中心化的设备和管理机构,节点之间数据交互通过数字签名技术进行验证,不需要信任,只需要按照设置好的规则就行,节点之间不存在欺骗不信任的问题。

交易透明,双方匿名

区块链的运行规则是公开透明的,所有的数据信息也是公开的,每笔交易都是对所有节点公开可见,由于节点之间是去信任的,因此节点不需要公开身份,每个参与的节点都是匿名的。

不可篡改,可追溯

单个节点甚至多个节点对数据库的修改无法影响其他节点的数据库,区块链中的每一笔交易都通过密码学方法与两个相邻的两个区块串联,因此可以追溯每一笔交易的所有记录。

区块链的分类

公有链

无官方组织以及管理机构,无中心服务器,参与的节点按照系统规则自由接入网络,不受控制,节点间基于共识机制开展工作。(颠覆性:绝对可信以及公开)

典型案例:数字货币代表 比特币

私有链

建立在一个集团内部,系统的运作规则根据集团要求进行设定,修改或者读取权限都被进行了一定的限制,同时保留着区块链的真实性和部分去中心化的特性。(相对可信以及公开)

典型案例:R3

例:

联盟链

由若干机构联合发起,介于公有链和私有链之间,兼具部分去中心化的特性,这区快链上的读权限可能是公开的,也有可能是部分公开的,也就是说通过内部指定多个预选的节点为记账人,预选人争夺记账权限,其他接入节点可以参与交易,但不过问记账过程。(预选人的能力不能参差不齐)。
(相对可信以及公开)

已有案例:超级账本

例:
以贷款导流来说,当用户通过我们的链接跳转到对方网页注册之后,对接方可以选择耍赖,说没有收到用户注册的请求。但是如果我们把用户注册的行为放到区块上去,对接方要想接收用户注册行为,必须在接收的时候同时付款给我方。

区块链不同类型的对比


区块链解决了什么问题

区块链最重要是解决了信用成本的问题,在过去,两个互相不认识的人达成公协是很难的,必须通过第三方信任机构来完成,比特币的诞生就是最好的案例,成功的解决了信任问题。

区块链的产生

区块链技术是由比特币联想而产生的,把比特币技术抽象提取出来,称之为区块链技术。

区块链的交易机制

区块链的交易机制是大概10分钟产生一个区块,这个区块会打包全网的交易,但是一个区块的打包是有限制的,会根据规则优先打包一些交易,那些没有被打包的交易就需要等待下一次的被打包机会。打包交易的就是矿工,矿工就是打包游戏中争夺区块链记账权的人,谁能最快解开SHA256这个数学命题的值,就拥有记账的权限,被打包的交易会被盖上时间戳的,而记账的矿工也会得到相对应的奖励。

一次交易过程大概是这样的:

1、发起一笔交易,并广播到区块链网络中。
2、矿工争夺记账的权限,获得记账权限的矿工给交易盖上时间戳,并进行打包到区块当中。
3、矿工通过P2P网络全网公布它盖上时间戳并打包的交易。
4、全网的其他节点对收到的区块进行验证。
5、区块验证通过之后连接到区块链。
6、交易经过六个区块确认之后,交易才算真真完成。

区块链的共识机制

目前主要有几大类共识机制:Pow、Pos、DPos
- Pow(Proof of Work):工作量证明,就是通过计算机对一个数学公式进行计算,谁先计算出的结果与答案结果一样,谁就获得本次记账权。
优点:
算法简单粗暴,节点无需交换额外信息即可以达成共识,破坏难度大;
缺点:
以比特币来说,目前比特币来已经吸引全球大部分的算力,其它再用Pow共识机制的区块链应用很难获得相同的算力来保障自身的安全;挖矿造成大量的资源浪费;共识达成的周期较长,不适合商业应用

  • Pos(Proof of Stake):权益证明,Pow的一种升级共识机制;根据每个节点所占代币的比例和时间;等比例的降低挖矿难度,从而加快找随机数的速度。
    优点:
    在一定程度上缩短了共识达成的时间,节省了资源。
    缺点:
    还是需要挖矿,富人越富,穷人越穷。

  • DPos(Delegated Proof of Stake):股份授权证明机制,类似于董事会投票,持币者投出一定数量的节点,代理他们进行验证和记账。
    优点:
    大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证
    缺点:
    整个共识机制还是依赖于代币。

区块链涉及到的技术

  • 哈希算法
  • 非对称密钥算法
  • 数字签名
  • Merkel Tree
  • 共识机制
  • P2P网络

区块链常见问题

  • 双花
    双花就是一笔钱花两次。
  • 区块链分叉
    分叉分为软分叉和硬分叉。
    软分叉就是同时产生两个区块,都连着上一区块。

    硬分叉就是通过强制升级客户端的方式,更改运行规则。
  • 51%攻击
    掌握全网51%的算力,就有机会产生造假的可能。
  • 代币的丢失
    如果密钥丢失,数字财产将永远找不回来,因为没有找回机制。
  • 完全独立挖矿的困境——矿池的产生
    随着挖矿硬件的不断升级,慢慢形成矿池,算计完全掌握在矿池拥有者的手中,普通人基本没有机会挖到矿。

区块链技术的颠覆性

代码即规则–>用技术确保绝对的信任可靠公正
- 规则公开透明
- 规则不可更改
- 按照规则生成的记录不可更改

区块链的瓶颈

以特币为例
- 交易时间模糊:时间以区块时间为准,每笔交易无时间;
- 交易时间长,吞吐量低
- 扩容问题
- 占用大量存储空间
- pow挖矿浪费计算机资源,且矿机出现,挖矿掌握少数人手里
- 代码即规则,规则能否与时俱进,代码存在BUG,升级需要硬分叉。
- 线程数据库的虽然公开透明,但是不支持关系型数据库的强大操作,大大的降低了数据库的灵活性。

数字货币排行榜

网站

区块链瓶颈的一些解决方案

  • 缩短区块平均产生的时间
  • 中心化服务
  • 扩容
  • 闪电网络(把交易放到链下,通过一条支付通道完成,避免主链堵塞,区块链则确保最终的交易结果被确认)
  • 隔离见证(隔离就是允许把打包的数据进行精简,把”见证”部分”隔离”在区块之外,但又不能丢失数据的完整性验证)
  • …..

区块链在国内的一些应用

1、玩客币(迅雷公司),极速下载。(硬盘大小、带宽和在线时长)
2、百度的莱茨狗。
3、网易星球(点击广告,阅读等得到原力,通过原力得到钻石)
4、阿里云发布区块链解决方案,支持天猫奢侈品正品溯源。
5、腾讯将于4月23发布一款区块链游戏。


区块链的发展现状

区块链1.0

虚拟货币

比特币为代表的数字货币应用,其场景包括支付、流通等货币职能,比特币被认为是互联网上的黄金,它的储量是有限的,将作为未来数字货币的价值铆钉。

区块链2.0

百花齐放

以太坊为代表,数字货币智能合约相结合,可以开发DAPP应用,是金融、经济领域的应用,最大贡献就是开创了智能合约,场景如投票系统。

区块链3.0

支持复杂的商业应用

满足复杂的商业应用,适用于为各行业提供去中心化解决方案,不再依靠某个第三人或机构获得信任或建立信用,实现信息的共享,解决信任问题,提高整个系统的运转效率。

代表产物
- EOS
特点:
- 高性能的交易速度。
- 去掉手续费的困扰。
- 模块化封装,应用人员开发DAPP更加方便(合约异步调用)。
- 以太坊3.0
- 实现“无限”可扩展性。
- 超级账本
- 超级账本是一个联盟组织发起的完全共享、去中心化、透明的联盟链,由几十家大型公司组成,为解决商业商业问题而建立的区块链。虽然技术上没有很大的革新,但出发点是为了适用大部分商业问题,因此也成为区块链3.0的一个代表产物。
- …


区块链技术选型

技术选型上我们选择了区块链2.0时代的领航者-以太坊,以太坊开创了智能合约先例,且以太坊的社区多,以太坊支持的开发语言也很多,其中以go语言最为流行。

以太坊生态中的概念和工具

以太坊

以太坊是一个智能合约区块链平台,在上面你可以创建去中心化的应用程序,也叫Dapp。

智能合约

智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。

Geth

Geth 是由以太坊基金会提供的官方客户端软件。它是用 Go 编程语言编写的

Mist 浏览器

这是一个用于与你的节点通信的桌面应用程序。 任何你能使用 geth 终端完成的操作都可以通过此图形用户界面来完成。

Web3.js

web3.js是javascript的库,可以用来与一个以太坊节点进行交互。 由于它是一个 javaScript 库,你可以使用它来构建基于 web 的去中心化应用 (dapp)。

Solidity

Solidity 是用于编写在以太坊区块链上运行的智能合约最流行的编程语言。它是一种编译时转换为 EVM (以太坊虚拟机)字节码的高级语言。

Truffle/Embark

Truffle 和 Embark 是用于开发以太坊去中心化应用(dapps)的两个最流行的框架。它们将在区块链上编译和部署合约的许多复杂的东西都抽象化了。

Metamask

Metamask是一个用于与以太坊节点进行交互的chrome浏览器插件,是一个轻量级的钱包,可以用来查询余额和交易转账等。


运行一个基于区块链的宠物DAPP

部署一个DAPP的步骤
1、先部署好以太坊网络。
- 创建创始块

{
  "nonce": "0x0000000000000042",
  "timestamp": "0x00",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "0x00",
  "gasLimit": "0x80000000",
  "difficulty": "0x133332",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "alloc": {},
  "config": {
    "chainId": 15,
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
  }
}
  • 初始话创始块
mygeth.exe --datadir "%cd%\chain" init genesis.json
  • 启动geth私有链网络
mygeth.exe --identity "newEth" --rpc --rpccorsdomain "*" --datadir "%cd%\chain" --port 30303 --rpcapi "db,eth,net,web3,personal" --networkid 9999 console

2、编写智能合约,并部署。
合约代码

pragma solidity ^0.4.0;

contract Adoption {
    address[16] public adopters;
    // Adopting a pet
    function adopt(uint petId) public returns (uint) {
        require(petId >= 0 && petId <= 15);

        adopters[petId] = msg.sender;

        return petId;
    }
    // Retrieving the adopters
    function getAdopters() public view returns (address[16]) {
        return adopters;
    }
}

编译合约命令

E:\workspace\truffle\pet-shop>truffle.cmd compile

部署合约命令

E:\workspace\truffle\pet-shop>truffle.cmd migrate

3、启动DAPP
启动宠物商店命令

E:\workspace\truffle\pet-shop>npm run dev

打开网址
http://localhost:3000/
打开网页点击领养,显示领养成功。


研究成果

1、以太坊中心节点部署。
2、智能合约开发。
3、DAPP应用开发。
4、Docker容器化。

待研究

1、Docker命令脚本化封装。
2、研究合约之间异步交互,同步生效。

你可能感兴趣的:(区块链)