原创播客,如需转载请注明出处。原文地址:https://www.cnblogs.com/crawl/p/10253564.html
----------------------------------------------------------------------------------------------------------------------------------------------------------
笔记中提供了必要的代码示例,需要说明的是,大部分代码示例都是本人所敲代码并进行测试,不足之处,请大家指正~
本博客中所有言论仅代表博主本人观点,若有疑惑或者需要本系列分享中的资料工具,敬请联系 qingqing_crawl@163.com
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-
前言
从最初开始学习 JavaEE,到自学大数据,现在实习在做区块链方面的东西,也算是一边实习,一边学习。忙完了一阵工作,总结一下实习四个月来所学到的知识,希望能够对自己和别人有所帮助。
-
比特币
要说区块链,我想先从从比特币说起……
一、比特币的基本信息
1. 什么是比特币
1)比特币系统:一个软件,每个人都可以下载运行,大家都维护一个版本
2)比特币:比特币系统所维护账本上的交易数字(为了完成支付功能而产生的交易数字)
3)区块链:(简单提一下区块链)一个数字账本,记录各种交易数字,是伴随比特币在系统中流通而产生的概念
2. 比特币和区块链的关系
1)比特币是区块链技术的落地应用
2)区块链是比特币的底层支撑系统
3)区块链是从比特币中抽离出来的概念
二、比特币区块链使用的基本技术
1. Hash 算法(用于工作量的证明)
1)作用:将任意长度的输入格式化为固定长度的 16 进制字符串
2)主流算法:MD5(128位)、sha256(256位)
3)性质
① 抗碰撞性:当知道一个 x,无法求出一个 y,使 x 和 y 的 Hash 值相同
② 原像不可逆性:根据 x 的 Hash 值无法求出 x
③ 谜题友好性:计算 Hash 的时候,没有捷径可走,若想计算出预定的 Hash 值,只能一次次的尝试 (这是 pow 共识机制的基础)
2. 密码学(用于资产所有权和交易的验证)
1)对称加密:A、B 双方使用同一把秘钥
2)非对称加密(生成公私钥)
① 介绍:公钥和私钥一一对应,公钥负责加密对外公开;私钥用于解密和签名,决不能外露
② 公钥:用对方的公钥加密,对方用自己的私钥解密,因为私钥自己持有,且公钥无法解密,可以保证安全
③ 私钥:签名,保证数据来源,保证数据未被篡改,但不能保证数据安全
④ 常用算法:RSA、ECC
⑤ 特点:安全性高、加解密复杂、效率低
3. 编码(用于网络传输、生成地址等)
区块链底层较为常用的编码方式是 base64 编码
4. p2p 网络(点对点、端对端)
1)介绍:点对点技术,无中心的服务器,依靠用户群交换信息的互联网体系
2)特点:耐攻击、高容错、地位平等
5. 默克尔树(用于快速交易验证)
1)介绍:Merkle Tree,通常也被称为 Hash Tree,是存储 Hash 值的一棵树,Merkle Tree 的叶子是数据块的 Hash 值
2)特点:二叉树
3)应用:可快速检索,由其是在数量猛增时,搜索效率高(比特币中可以用来校验某一笔交易是否存在某个区块中)
6. 工作量证明(Proof Of Work)
1)比特币的 POW 要求运行一个 Hash 算法(sha256),找到一个符合要求的 Block Hash(Block Hash = sha256(区块信息+随机值n)),该 Hash 值由 n 个前导 0 构成,零的个数取决于网络的难度值。要找到合理的 Block Hash 需要经过大量的尝试计算,计算时间取决于机器的 Hash 运算速度。
2)工作量证明的过程:生成 Coinbase 交易,并与其他所有准备打包进区块的交易组成交易列表,通过 Merkle Tree 算法生成 Merkle Tree Hash,把 Merkle Tree Hash 及其他相关字段组装成区块头,将区块头的 80 字节数据(Block Header)作为工作量证明的输入不停的变更区块头中的随机数即 nonce 值,并对每次变更够的区块头做双重 SHA256 运算(即 SHA256(SHA256(Block_Header))),将结果与当前网络的目标值做对比,如果小于目标值,则解题成功,工作量证明完成
三、比特币的区块结构
1. 区块结构
比特币的区块结构由区块大小、区块头、交易计数器、交易组成
2. 区块头
区块头的信息主要包括版本、父区块头的哈希值、Merkle根、时间戳、难度目标、Nonce
3. 区块体(交易)
1)Coinbase 交易:第一条交易、挖矿交易(没有支付人,只有收款人,即矿工);每一个区块都有一个 Coinbase 交易
2)普通转账交易:每笔交易包括付款方、收款方、付款金额、手续费等
4. 完整结构图
四、交易
UTXO(unspent transaction output):未消费输出,是比特币交易中最小的支付单元,不可分割,每一个 UTXO 必须一次性消耗完,然后形成新的 UTXO,存放在比特币网络的 UTXO 池中
- 区块链
一、区块链的基本信息
1. 什么是区块链
伴随比特币而生,是一个分布式数据库(本质);一种网络底层协议(抽象);存储引擎、计算引擎
2. 区块链的特点
1)去中心化:所有参与其中的网络节点共同维护,无需中心节点控制
2)不可篡改:一旦发出交易便不可再修改和删除,每笔交易和每个区块都有时间戳
3)匿名性:私钥和地址是使用网络的所有条件,无需身份验证
4)可追溯性
二、区块链协议
区块链是一种网络底层协议,可以分为数据层、网络层、共识层、激励层、合约层、应用层
1. 数据层
区块链数据、链式结构、哈希函数、Merkel树、非对称加密、时间戳。数据层需要突破的是区块容量的问题
2. 网络层
P2P 网络、传播机制、验证机制(自组网)
3. 共识层
共识机制:可以使所有的节点对某一状态达成一致的方式,有共识机制去中心化才有意义,才具备可信度,否则只是数据共享。目前主流的共识机制有:POW、POS、DPOS、PBFT等
1)POW(Proof of Work):工作量证明
特点:算一道很难的谜题,系统给予挖矿奖励;多劳多得
优点:
① 所有节点均可参与,记账权公平的分派到每个节点,去中心化
② 多劳多得,矿工的积极性高
③ 安全性高,欺诈成本高,如果能够欺诈成功,那么做诚实节点收益更大
缺点:
① 主流矿池垄断严重,存在51%算力攻击风险
② 浪费资源严重(2018年底消耗全球0.5%的电量)
③ 持币人没有话语权,算力决定一切
④ 网络性能低,共识时间长
项目:比特币、以太坊、比原链等
2)POS(Proof of Stake):股权证明,根据持有货币的量和时间来发利息(币天销毁)
特点:
① 不挖矿,依靠币龄(持币数量 * 持有天数)决定记账权,利息即为奖励
② 按钱分配,钱生钱
优点:
① 在一定程度上缩短了共识打成的时间
② 节约资源
③ 防作弊,币龄越大,获得记账权几率越大、避免51%攻击,因为攻击会使自己的权益受损
缺点:数字货币过于集中化,富有者越来越富有,散户参与积极性低
3)DPOS(Delegated Proof of Stake):委托权益证明
让每一个持有币的人进行投票,由此产生 n 个代表,可以理解为 n 个超级节点或矿池,这 n 个超级节点彼此的权利是完全相等的
特点:不挖矿,每年按比例增发代币,奖励超级节点
优点:高效、扩展性强
缺点:非去中心化,而是多中心化
项目:EOS
4)PBFT 后期会单独讲解
4. 激励层:发行机制,分配机制
5. 合约层
智能合约
定义:一个智能合约是一套以数字形式定义的承诺,包括参与方可以在上面执行这些承诺的协议
本质:数字化合同
特点:代码代替人仲裁和执行合同,同时能够触发支付
1)构建:本地构建
智能合约由区块链内的多个用户共同参与制定,可用于用户之间的任何交易行为。协议种明确了双方的权利和义务,开发人员将这些权利和义务以电子化的方式进行编程,代码中包含会触发合约自动执行的条件
2)存储:链上存储
一旦编码完成,这份智能合约就被上传到区块链网络上,即全网验证节点都会收到你和对方的合约
3)执行:EVM 中执行
① 智能合约会定期检查是否存在相关事件和触发条件,满足条件的事件将会推送到待验证的队列中
② 区块链上的验证节点先对该事件进行验证签名,以确保其有效性;等大多数验证节点对该事件达成共识后,智能合约将成功执行,并通知用户
6. 应用层:业务逻辑
三、区块链的分类
按应用场景可分为:
1)公有链:所有人都可以随时加入和退出,每个节点平等,都有权交易和记账,属于开放式 代表:比特币、以太坊等
2)联盟链:仅部分人参与,加入和退出需要授权,选定某些节点为记账人,其他人可以交易,但无记账权,属于半封闭式 代表:R3CEV、IBM Farbric
3)私有链:公司内部使用,可实现更好的权限控制,管理和审计,属于半封闭式
四、区块链的相关概念
1. 矿工:由运行比特币客户端的节点充当,竞争记账权,从而获得奖励
2. 矿机:CPU挖矿 —> GPU挖矿 –> FPGA挖矿 –> ASIC挖矿(专业矿机)
3. 挖矿
1)矿场:集中矿机设备的场所
2)矿池:一个软件,矿场和普通矿工接入,矿池负责打包,接入的设备负责挖矿,按照贡献算力的比例来分配收益
4. 算力:即计算能力,表明一个矿工挖矿的能力,算力越大算出 Hash 值的概率就越高
5. 分叉:代码升级时不同社区意见发生分歧时的结果,出现重大 bug 修复会分叉
1)软分叉:旧节点接收新协议产生的区块,毫无感知,新老协议共同维护一条链
2)硬分叉:旧节点拒绝接收新节点创造的区块,从此分裂为两条独立的链(以太坊分叉)
6. 叔块(孤块)
在同一时间出现两个矿工同时挖出矿的情况,此时出现临时的分叉,区块链会同时保留两条链,并等待新生成的区块,新区块选择连接的链就是最长链,即主链,那么另外一个区块就被称为叔块(以太坊中的叔块是有奖励的,比特币中的叔块无奖励)。
7. 节点
1)轻节点SPV(Simplifed Payment Verification):手机端钱包,只同步所有区块头信息以及和自己相关的交易数据
2)全节点:包含账本的节点
联盟链中还可以细分为共识节点、交易节点、账本节点、钱包节点、托管节点
8. 代币(Token):创建交易以及运行智能合约运行的燃料,以太坊代币为 eth,燃料为 gas,最小单位为 wei
9. 钱包:创建公私钥,保存私钥,相当于钱包,可以存放多个地址
种类:PC 钱包、手机钱包、轻节点钱包
- 还没有人评论,欢迎说说您的想法!