一、区块链技术入门

第一章

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

声明:我知道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都含有上一个区块的信息,可以依次向前验证

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

一、记账的规则

  • 一段时间内只有一个人可以记账成功
  • 通过解决密码学难题(pow)竞争获得唯一记账权
  • 其他节点复制记账结果
  • 记账可以获得比特币奖励,即对记账的激励

二、工作量证明

# 普通的记账过程
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网络的节点如何连接

  • 节点会记住连接信息,即连接过一次后,节点会保存这部分连接的信息
  • 节点加入后会向相邻的节点广播,相邻节点会继续向他们的相邻节点广播
  • 节点加入后会向邻居节点索要其连接信息,即节点之前相互引荐
  • 若节点加入时没有任何已知节点可以相连,则会连接至种子节点(网络内保存活跃的节点),然后重复上述3条

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

一、背景:

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

二、以太坊:

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

特点:

  • 支持高级语音编程(智能合约)
  • 每15s出一个区块,更快的区块确认时间,更多的每秒交易量
  • tulingwanb无总量限制(比特币的上限是2100万)

三、智能合约

  • 以太坊上的程序,是代码和数据(状态)的集合,是消息驱动的
  • Code is Law,其执行像法律一样,执行不受任何人的干扰
  • (准)图灵完备

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

一、背景

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

二、EOS:Enterprise Operation System

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

特点:

  • 使用石墨烯技术提高TPS

    石墨烯技术:跟石墨烯本人没有关系,只是将共识机制改为了DPOS,交易确认速度更快,

    TPS已经接近MySql的量级。
    
  • 有完整的账号系统,即有字符串形式的账号作为地址,而不是一串"2A39cbA2390fDe"。

  • 在链上的读写操作无需消耗代币,但是需要抵押代币来获得资源,再用资源去进行操作。

你可能感兴趣的:(一、区块链技术入门)