区块链基础

密码学原理

密码学中的哈希原理有两个重要的性质
1 collision resistance 碰撞防御
亦或者称为collision free,主要是为了保密性。由于人为难以制造hash碰撞,因此hash可以用作与验证
2 hiding
hash值可以从x -> f(x),但是难以通过f(x)去反推出x。

验证信息的准确性使用例子:
预测为了不干扰现实世界,无法直接将明文进行公布,可以提前公布某个hash函数,然后公布hash值,由于hash函数具有collision resistance的性质,预测结果无法被反推出来,在预测的事件发生之后,发布这个明文,可以通过hash函数和提前公布的hash值进行验证。

hash函数往往会面临输入空间不够大的问题,因此可以对原本的输入进行拼接来拓展这个输出空间。

比特币中的hash值具有第三个性质:
3.puzzle friendly:hash值的计算事先不可预测,但是又希望这个hash函数可以让结果落在某个范围内。

挖矿就和这个性质相关
寻找一个随机数nonce和区块的其他值合并在一起,通过hash落在某个范围内[-target,target]内就成功挖矿。
挖矿的工作量就等价了虚拟货币的价值,btc由于难以获取这个nonce,大量的显卡作为成本,因此虚拟货币的价格也一度水涨船高。
虚拟货币的价格增长也带来的显卡的价格增长。

虚拟货币的开户是一个简单的事情:
创建一对公私钥,这个概念来源于非对称加密。可以公开自己的公钥而保存好自己的私钥。解决了对称加密中的密钥分发问题。
交易的过程就是用自己的私钥对交易进行签名,然后链上可以通过公钥对这笔交易进行验证。
生成公私钥的过程也是随机的,且需要好的随机源,防止生成类似或者相同的公私钥,导致资产被窃取。

比特币中的数据结构

hash pointers 哈希指针
指针里存放的往往是地址,一个指针的大小大约是一个字节也就是8位。指针本身存放的就是一块地址。间接去访问某个数据
hash指针不仅仅存放了地址,同时对数据的内容进行了hash

struct hashpoint{
	node:*p
	hash:string
}

可以认为hash指针是类似于这样的一个结构体

hash chain
哈希链表和普通的链表的区别
:用hash指针代替了普通的指针。
第一个区块被称为创世纪块 genesis block,每个区块都包含着指向前一个区块的hash指针,且每个hash值都是由前面全部区块集体取hash获得的。
因此我们只需要保存一个hash值就可以对前面所有的节点进行验证。

merkle tree
如果不知道这个merkle tree但是一定知道binary tree,树的底层是一系列的区块,每两个块的hash值组成一个新的块,再取hash向上保存,最终形成一颗树,保存祖先节点的hash值就可以验证数据的正确性。
这棵树的节点是一系列的交易。

这棵树有什么用途?
首先链上的节点存储着block header和block body是非常笨重的,但是我们希望有轻量级的验证,因此产生了merkle tree,可以找到叶子的一笔交易,沿着路径找到树根。

可以向全节点获取三个红色hash,然后自底向上计算hash,最终和merkle root 的hash值进行比对,以完成验证。

BTC-协议

思考一个问题,银行是否能够发行数字货币?
由于数字货币的本质是一个文件,存在可以复制的问题,因此不可以。
在这里插入图片描述
比特币系统中的转账,需要交易的双方公开地址,就如同银行转账需要银行卡号一样。同时还需要知道A的公钥,公钥本身是一种身份,用来验证这个信息是否是正确的,但是公钥和地址是有区别的,公钥是全公开的,需要所有的人知道,

协议主要是为了区分一些"坏节点"。
添加节点的节点,有权利发布区块取决于计算力,在最新计算出nonce值的区块可以进行发布区块。

比特币系统的实现

比特币是采用基于记账本的交易模式,但是系统并没有记录某个账户有多少币,而是通过记录来计算本账户的余额。
全节点需要维护一个数据结构叫做:UTXO unspend transferd output
还未被花出去的交易的输出,一个交易可能有多个输出
在这里插入图片描述
交易的过程
A进行交易的时候 需要把这个交易记录到UTXO中,负责记录的这个区块

相较于btc这种模式,以太坊更加贴近于生活中的模式,即会显示的表明账户中的余额,
在这里插入图片描述
发布区块需要获取记账权,获取记账权的节点可以获取一部分的手续费,但是如果这个获取记账权的节点是恶意节点,发布的区块就不会被广大节点接受,那么由于最长链的原则,这个发布的区块会被丢弃。那么这个出块的人就会损失出块奖励。
为了防止交易人对一个货币进行重用,确认时需要等待多个区块被发布之后才能被完全确认。

比特币网络

比特币工作在应用层,引用层表现为一层比特币的区块链,网络层时一个p2p的网络,。

比特币分叉

原来十几条链最后只有一条链,比如在挖矿的时候两个节点都挖到了区块,都可以发布区块,这个时候就会出现分叉
state fork
如果比特币希望更新协议,但是人们又希望不更新,这个时候就会出现
protocol fork
协议分叉又分为硬分叉和软分叉

hard fork

block size limit 区块的大小太小,会限制交易的次数,因此可能需要修改区块的大小。
但是有的节点可能希望大,有的希望小,就会导致双方的认可不一致
在这里插入图片描述
新的节点在进来之后会不被少数的区块认可,因此旧结点即使受到最长链的限制,也不会认可最长链,因此就会存在两条合法的链。也就是分叉eth这种货币就是从硬分叉出现的,最初的币种叫做ETC,分叉之后出现了ETH。由于分叉会导致重放攻击,将一笔交易在两条链上重现,因此添加了chain id来辨别分叉的交易。

soft fork
主要出现在缩小块的时候,平时不怎么会出现就不深入探讨了。

比特币的匿名性

银行如果可以选用化名进行存取的话,具有良好的匿名性,因为银行的交易记录是不允许被查询的。
但是btc的交易记录是完全公开的,被记录在链上的。所以会有不太好的匿名性。也就是同一个用户的多个地址可以被输出和输入被关联起来。
因此某些钱包会通过多笔输入输出来减弱这种关联性。
btc的匿名性没有那么好,可以通过转账记录等发掘出多个钱包之间的关联,甚至定位出该账户的持有人。

以太坊概述

比特币的出块时间是10分钟,以太坊改进了这个事件,改为十几秒,以太坊的内存要求很高,限制ASIC的使用,从而使得挖矿不再是计算能力的天下。
也是从以太坊开始,虚拟货币开始支持智能合约
比特币打开了去中心化币种的大门,以太坊则是打开了去中心化的合约的大门。
比特币的单位是聪,取于发明人中本聪,ETH的单位是wei。
现实生活中的财富可以通过司法来判定合同来保证财产安全,智能合约就是类似于取代了这个司法保障的合同的作用。
智能合约一旦进行发布,没有人能够篡改。

ETH账户模式

比特币是一种基于账本的交易模式,无法显示的发现一个账户具有多少资产,隐私保护性很好,但是在使用的时候同样收到这个问题的困扰。
比特币系统中如果你持有10个币,花出去3个,必须转移另外7个币,以太坊则修改了这种模式,采用了一种账户模式来记录账户的余额,牺牲了私密性但是更加符合日常生活中的使用。

ETH状态树

以太坊的账户有160bits,表现为40位的16进制。
如果存储一个账户和账户状态是否可以使用hashmap取维护这个账本(在不考虑hash碰撞的情况下)
但是如何验证一个钱包的准确性呢,也就是btc中的merkle proof做的事情。
如果把这个hash表构造一棵树再取hash值来验证,但是存在一个问题就是,构造的这棵树不是唯一的。
如果此时发布一个新的区块产生新的交易,就需要重新构造这个tree,区别于btc的merkle tree,btc的树的大小是有容量大小的,但是eth会有太多的记录,构造这棵树的成本会变得很高。

在这里插入图片描述

权益证明

挖矿的过程,会产生大量的计算,同时也会产生大量的电力消耗,这个被认为是工作量的证明。

智能合约

智能合约的本质是运行在区块链上的一段代码,代码的逻辑定义了合约的内容,智能合约的账户保存了合约当前的运行状态
balance 余额
nonce 交易次数
code 合约代码
storage 存储,是一颗merkle tree(eth改进后的版本),MPT
主要使用solidity进行编写
在这里插入图片描述
调用payable会把钱锁定在智能合约里,使用withdraw可以把钱从合约里拿出来。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
evm是全世界共享的一个虚拟电脑,寻址范围很大,有256位的寻址
在这里插入图片描述
balance获取当前地址的余额
transfer 向当前这个合约转入amount的金额(区别于payable的函数)
send也可以进行转账,transfer会进行连锁回滚,send不会发送连锁回滚。因为tansfer会抛出一个异常,但是send如果失败了会返回一个false也就是这个函数本质上是进行了错误处理的,函数执行完毕了。
call 也可以进行转账,但是call的本质是为了进行函数调用。

在这里插入图片描述

DAO

DECENTRALIZED AUTONOMAOUS ORGANIZATION
去中心化的自治组织。
the dao可以把以太币发送给the dao换取代币,代币可以参与获取项目的分红。
DAC区别于DAO,corporation主要是为了盈利为目的。
The Dao的参与者可以选择参与某些项目,也就是代币具有投票权,参与者少的项目可以使用下方的split dao从而实现独立,生成一个child dao。在这里插入图片描述
split dao的代码由于先把钱退还回去之后才进行了账户清零操作,造成了黑客可以通过重入攻击,对the dao基金的以太币进行多次获取。
为了处理这个问题,以太坊社区进行了一次软分叉的处理,合约中新增一条规则,和the dao相关的账户无法进行交易,这个判断的本质是一次运算,但是社区不允许收取gas fee导致了矿工纷纷回滚了软分叉的升级。软分叉方案失败。
因此又采用了硬分叉的方法,但是虽然成功了,eth产生了两条链,eth和etc。

看到这里感觉这个课程后续的技术细节似乎无法带给我相关的技术提升,但是还是感谢肖老师对区块链技术的讲解让我认识到了一个具体的区块链世界,在后续学习完相关的应用技术之后,一定回来补完余下的课程,后续会继续更新这个博客。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值