一、区块链技术入门

2018-09-24  本文已影响0人  屉屉

第一章

跳过前期区块链介绍等废话

声明:我知道hash值是16进制的,所有不应该有g以后的字母,但是我都是乱按键盘的,所以请哥哥姐姐们不要在意!

第五课:使用非对称加密技术确定所有权

一、私钥

核心:如何在不泄露所有权的情况下证明所有权:非对称加密

const yourAdress = "2A39cbA2390fDe"
const yourPraviteKey = "GJKGTOUHKJHuiTyihotr"
Hash(Hash(fun("GJKGTOUHKJHuiTyihotr")))   ->  "2A39cbA2390fDe"  #私钥可以推地址,而地址不能推私钥

二:交易的处理流程

交易发起者签名后广播至相邻节点→相邻节点验证是否有效→继续广播

1.对交易签名签名

hash('
     {"fromAddress":"2A39cbA2390fDe",
     "toAddress":"3aDF789cdjkLcRf",
     "sum":"0.8btc"
     }'
    )  -> "8aDb23CDEa6"  #对一个交易进行hash运算产生交易摘要

sign("8aDb23CDEa6","GJKGTOUHKJHuiTyihotr") -> "sd7854hctgf9" 
#用私钥对交易摘要进行签名,返回签名信息,该操作通常在离线环境下完成

2.签名后广播

签名后广播(交易信息 + 签名信息)至相邻节点 ,相邻节点验证后保存到本地,然后继续广播

#验证过程:
即:verify("sd7854hctgf9","3aDF789cdjkLcRf") -> "8aDb23CDEa6"

if(verify("sd7854hctgf9","3aDF789cdjkLcRf")
   == hash('
     {"fromAddress":"2A39cbA2390fDe",
     "toAddress":"3aDF789cdjkLcRf",
     "sum":"0.8btc"
     }'
    )):
    #写入账本,继续广播
 else:
    # 啥都不做

三.补充

  1. 关于隐私:地址和自然人的对应关系不是公开的
  2. 关于安全:私钥只有自己知道

第六课:使用区块链结构高效验证数据

一、问题

由于数据是分布式存储的,如果单个节点篡改数据,如何验证数据真实?

二、方法:验证账本的hash值

Hash 函数:Hash(原始信息) = 摘要信息

三、具体解决方案:

info_need_verify = Hash(Hash(blockFatherId,blockFatherInfo,time),blockId,blockInfo,timenow) = "7875Agc"
#即对上一个区块的Hash值,当前区块id,当前区块的账本信息,时间戳共4个参数进行hash运算得到hash值
#只需对info_need_verify进行校验即可,效率贼高!
#由于每个区块的info_need_verify都含有上一个区块的信息,可以依次向前验证

第七课:使用工作量证明进行挖矿

一、记账的规则

二、工作量证明

# 普通的记账过程
Hash(Hash(blockFatherId,blockFatherInfo,time),blockId,blockInfo,timenow) = "7875Agc"
#加入工作量证明的记账过程
 #通过在Hash函数里面加入随机数参数增加难度,要求生成前x位为0的Hash值。x越大,难度越高。
 #简单来说,该过程没有任何技巧可言,如果希望尽快找到解,除堆积算力外没有其他方法
const x = 24  #根据目前参与挖矿的算力的大小选择合适的x设定挖矿难度
Hash(Hash(blockFatherId,blockFatherInfo,time,random()),blockId,blockInfo,timenow,random()) = "0" * x +"495CD6FH"

完成上述过程后:

  1. 收集广播中还没有被记录到账本的交易
  2. 验证收集的交易的有消息
  3. 添加一笔"fromAddress" == Null & "toAddress" == yourself 的交易,作为挖矿的奖励

三、工作量证明的计算量到底有多大

Hash值为16进制的字符串,则1个为0的概率为1/16,如果需要前x位同时为0,概率为(1/16)^x

第八课:共识机制

一、为什么节点要遵守协议?

二、如何解决分叉问题?

在产生一个新的区块时,第二个节点挖到矿时还没有覆盖超过50%的节点

(信息的传播是需要时间的,离得越近传播的越快)

第九课:p2p网络的节点如何连接

第十课:智能合约的革命性

一、背景:

比特币的智能合约编程是图灵不完备的,基于比特币的区块链开发需要下载比特币的源码,然后在其中修改加密算法、共识机制等,相对复杂且局限。

二、以太坊:

下一代智能合约和去中心化应用平台,类似android、ios等

特点:

三、智能合约

第十一课:不一样的区块链-EOS

一、背景

以太坊的局限性:交易的确认时间和交易的吞吐量很小(TPS)

二、EOS:Enterprise Operation System

致力于打造可以承载商业级区块链的平台,但是共识机制是DPOS,不是真正意义的去中心化。

特点:

上一篇下一篇

猜你喜欢

热点阅读