智能合约

  • 智能合约是用来编写控制逻辑的
  • 智能合约并不智能,而是自动
  • 不可篡改性是双刃剑
    • 一方面增添了公信力
    • 修补漏洞非常困难
  • 没有什么是不可篡改的
  • solidity设计上是否正确
    • 更好的应该是一个表达能力适中的语言
      • 但很难设计出来
  • Many eyeball fallacy
    • 不要认为开源软件要比不开源的软件安全
      • 遇见关键性应用,尽量自己检查

去中心化

去中心化不说都是自动的,没有人为干预
规则的修改要由去中心化的方法决定

分叉

  • 分叉其实是去中心化的体现

分布式系统不等于去中心化

  • 一个去中心化的系统必然是分布式的
  • 但是分布式不一定是去中心化的
  • 在一个分布式的平台上可以运行一个中心化或非中心化的应用

state machine

  • 最早应用:
    • mission critical application(无间断提供服务的应用)
      • 效率低

==Block chain is secured by mining==(区块链被挖矿保护)

比特币挖矿机制的缺点

  • 挖矿门槛的提高
  • 挖矿间隔十分钟

LiteCoin

  • scrypt:对内存要求很高的挖矿协议
    • ASIC—resistance and GPU—resistance
    • ![[Pasted image 20240426163113.png]]
      经过计算得到seed
      表后面的数都是对前面的数取hash,得到一个数组
      然后用伪随机的顺序读取数组,进行运算
    • 问题:验证困难
  • 出块间隔为两分半

ETH

ASIC resistance

  • ethash
    ![[Pasted image 20240426164727.png]]
  • 经过根据block header和nonce计算得到seed
    表后面的数都是对前面的数取hash,得到一个数组cache
    然后用伪随机的顺序读取数组,进行256次读取,每次 读取的值都填入dataset
    mining时在dataset中读取64次(128个数),最后和难度阈值比较,不行更换nonce在进行
    • 有两个数据集
    • cache(轻节点保存)
    • dataset (miner保存)
    • 数据集都逐渐增长,初始cache为16M,dataset为1G

伪代码

![[Pasted image 20240426164838.png]]
![[Pasted image 20240426165024.png]]![[Pasted image 20240426165042.png]]![[Pasted image 20240426170612.png]]![[Pasted image 20240426170703.png]]

==proof of stake==:virtual mining(虚拟挖矿)

  • 原因:
    • 原来的工作量证明太浪费电
  • 系统中预留一部分货币给开发者,并出售部分,根据权益证明的共识机制进行分配,投票是根据拥有该币的多少决定
    • 解决电量
    • 能够解决新链刚建立时的薄弱期
  • 问题:nothing at stake:可以在两条链上同时下注
    ![[Pasted image 20240427143145.png]]

Caspe协议

  • valiator(保证金)
  • epoch![[Pasted image 20240427144125.png]]
    • 对前面区块是prepare 后面是commit
    • 投票成功的epoch会变成finality
    • 验证者履行职责可以得到相应奖励
    • 但如果不投票,会退掉一定的valiator,两边下注要没收(销毁)全部
ETH挖矿使用的mining puzzle

1.BTC挖矿是基于算力的,ETH是memory hard mining puzzle(对内存要求高),一定限度上限制了ASIC 芯片的使用
2.以太坊要从proof of work 改为proof of stake(权益证明)
3.增添了对smart contract(智能合约)的支持,增添了decentralized contract(去中心化合约的支持)
注意:1.BTC的最小单位为SATOSHI ETH为wei
2.逻辑比较简单,比较清晰的合同可以写成智能合约的形式,在跨国合同能更有效地保证司法有效性。

地址表示为40个16进制的数 ,160位
address —> state(账户状态)
==问:为什么不用hash表?==
每次添加新内容,merkle tree都会改变,构建代价太高
==问:直接建立merkle tree==
没有快速查找更新方法,要排序,不然形状不唯一 ,但排序代价太大

trie(字典查找树)

![[Pasted image 20240423191318.png]]
注意:比特币和以太坊的地址是不通用的,但都是公钥经过转换得到的

Patricia tree(压缩前缀树)

![[Pasted image 20240423193054.png]]
适用于稀疏的trie

MPT(Meikle Patricia tree)

优点:不可篡改,merkle proof

modified MPT

![[Pasted image 20240423195445.png]]
![[Pasted image 20240423195622.png]]
注意:1.以太坊是一颗MPT包裹很多小的MPT
2.不同节点的MPT大体相同
3.每个全节点不是维护一颗MPT,而是新建一个节点时,创建一个新的MPT
4.不当场维护,而是新建一棵树是为了在分叉时回滚89![[Pasted image 20240423200711.png]]
以太坊中的数据结构
![[Pasted image 20240423200711.png]]
parenthash:区块头的hash
root:状态树的root hash
TXhash:交易树的root hash
Receiphash:收据树的根hash
![[Pasted image 20240423200957.png]]
该图是区块发布时发布的信息
(key,value):key是地址,value要经过RLP(Recursive Length Profix)序列化

账户模式

BTC:tranduction—based ledger(基于交易的账本)![[Pasted image 20240423090126.png]]
ETH:accoun—based ledger(基于账户的账本)![[Pasted image 20240423090444.png]]
注意:1.不用说明币的来源,不用一次性将币转出。
2.天然防范double spending attack(双花攻击)
3.以太坊用nonce(开始nonce为0,每发布一个新交易nonce加1)防范replay attack(重放攻击)——nonce的值也受签名保护![[Pasted image 20240423091158.png]]

账户类型
1.externally owned account(外部账户,普通账户)
    存在balance(余额)和nonce
2.smart contract account(合约账户)——不能主动发起一个交易
        code
        storage
        balance
        nonce
            注意:合约账户只能被调用参与一个交易
                智能合约要求要有一个稳定的账户

区块难度

![[Pasted image 20240427095825.png]]
注意:Hd为父区块,为该区块链当前的最后一个区块
![[Pasted image 20240427100426.png]]

  • 调整难度都是父区块难度的整数倍进行调整的
  • ![[Pasted image 20240427100833.png]]
  • ![[Pasted image 20240427100949.png]]
  • 原因:
    • 减小转入POS协议的阻力
      • 在挖矿后期挖矿难度巨大,无法挖矿,让miner愿意迁移到POS协议(权益证明)
      • Hi开始没有,是后来分叉得到的
      • ![[Pasted image 20240427101738.png]]

以太坊发展的四个阶段![[Pasted image 20240427101817.png]]

具体代码实现

![[Pasted image 20240427102046.png]]![[Pasted image 20240427102236.png]]![[Pasted image 20240427102432.png]]

NFT:非同质化货币
DeFi:去中心化金融
DAPPS:去中心化应用

  • 正向迅速
  • 逆向困难
  • 输出敏感
  • 避免碰撞
  • 不可预测

作用

  • 保障数据的完整性和不可篡改性
  • 将各个区块连接起来,保证链的连贯性
  • 形成merkle树,用于高效验证
  • 用来实施工作量证明,保证链的安全性

fork(分叉)——有一条链分成两条链
state fork——对区块链产生了意见分歧而产生的分叉
例:forking attack(人为导致意见分歧)
protocd fork(对协议产生分歧):
1.hard fork(硬分叉)
2.soft fork(软分叉)
1.hard fork:旧节点不会认可新节点挖出来的链,所以只要不是所有节点都更新设备,就会导致永久性的分叉
![[Pasted image 20240412210259.png]]
例: block size limit(比特币的区块大小限制):1M——>4M(假设)
注意:hard fork会形成两个平行的链,造成社区分裂,每个链上都有自己的加密货币。措施不完善,可能会导致地址一样,产生问题(ETH,ETC经典案例)
2.soft fork:旧节点会认可所有链,所以只要有半数以上的节点更新了设备,就不会导致永久的分叉![[Pasted image 20240412211842.png]]
例:1.block size limit(比特币的区块大小限制)1M——>0.5M(假设)
2.coinbase域:8字节用作调整挖矿难度(挖矿难度笔记),剩下的用作UTXO集合(未被写到比特币系统中,由自己维护)的根hash(比特币交易系统笔记)
钱包是轻节点
3.P2SH(pay to script hash)