【区块链】以太坊

[复制链接]
发表于 2025-10-13 18:19:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
学习视频源链接:
https://www.bilibili.com/video/BV1Vt411X7JF/
本文是根据肖老师的视频举行的条记纪录
bitcoin 1.0 区块链 以太坊 2.0区块链
以太坊 设置了 memory hard mining puzzle ,这造成了asic resistance,
后续 proof of work (工作证明)将改成 proof of stake (权益证明)
Mining Puzzle (挖矿谜题)
还增长了对智能合约的支持: 智能合约 (Smart Contract)
bitcoin : decentralized currency  去中央化的货币 ——取代了当局的发币权利
ethereum : decentralized contract 去中央化的协议 —— 取代了条约权利
btc: satoshi
eth: wei
去中央化的货币有什么长处? 跨过转账 快,手续少,生意业务费少
为什么有去中央化的条约?假如条约的签署方来自天下各地,用司法维护条约可用性比力困难。
1 eth 账户
bitcoin 为了维护隐私,打一枪换一个地方
Eth 利用了 account- based ledger ,对double spending attack 有自然的防范作用,也不消纪录币的泉源。
有人窜改账户余额怎么办? 发布生意业务的时间,不须要阐明自己的余额,余额是状态树维护的。
但是对应double spending attack (是付款方不老实 —— 在bitcoin能出现, eth不能出现)
replay attack (是收款方不老实,在bitcoin能出现,eth 上须要加一个计数器,生意业务次数 nonce ,纪录这个账户有史以来发布过多少次数)
生意业务次数 nonce 受到发布者署名掩护,
重放攻击 (Replay Attack)
1.1 externally owned account
类似 bitcoin : 用公私钥 控制
构成:
balance 余额
nonce 计数器(应该叫counter)
1.2 smart contract account
合约账户不能自动发起生意业务
构成:
code
storage
合约: 要求有比力稳固的身份。

  • Eth 状态树
以太坊的区块链布局与比特币有一些差异。以太坊不是利用简朴的二叉树,而是接纳了一种称为"区块头"(block header)的布局来毗连区块。
在以太坊中,每个区块头包罗以下关键字段:
parentHash: 父区块的哈希,这是区块链的重要毗连方式
ommersHash: 叔块(uncle blocks)列表的哈希
stateRoot: 状态树(state trie)的根哈希
transactionsRoot: 生意业务树(transaction trie)的根哈希
receiptsRoot: 收据树(receipts trie)的根哈希
以太坊的区块头哈希(也就是区块的标识符)是通过对上述区块头字段以及其他字段(如nonce, difficulty, number等)举行Keccak-256(也称为SHA-3)哈希盘算得出的。
以太坊不像比特币那样利用简朴的链式布局,而是利用了一种称为"atricia Merkle Trie"的数据布局来管理状态、生意业务和收据。这些"树"的根哈希被包罗在区块头中。
在以太坊的代码实现中,可以查察core/types/block.go文件,此中界说了区块头的布局和哈希盘算方法。
addr -> state的 映射
地点是 160 bits   40个 16进制的数
区块链删除东西比力难,不符合。
数据布局: trie(branching factory) Trie 数据布局详解
branching factory 0-f
查找服从取决于key的长度
不会出现碰撞(hash肯定会有辩说,但是这个不会)
在健值希奇时,假如可以归并key,就可以进步服从,引入了 patricia trie (tree) 路经压缩后的 trie
以太坊中的MPT (Merkle Patricia Trie)
为啥要把账户地点弄这么希奇? 2的 160次方 。
防止碰撞
每次出现一个区块,都要新建一个mtp,但是很多都是共享的。
智能合约是图灵完备的,
Bitcoin与以太坊区块链回滚机制对比
单笔生意业务回滚
以太坊状态树与RLP编码详解
3. 生意业务树 & 收据树
生意业务数和收据树 节点逐一对应。 他们都是mpt ,支持查找利用,而且数据布局得到了同一。
mpt 也是一种merkler tree 但是
收据树为了智能合约比力复杂,可以快速查询一些效果
每个生意业务树和 收据树都是独立的,不会像状态树一样共享节点。
生意业务树/收据树 可以证明 merkle proof
布隆过滤器在以太坊中的应用
bloom filter 有大概出现 false positive ,大概出现误报,但是不大概出现漏报
bloom filter。不支持删除利用,假如支持删除的话,谁人位置不能是0、1 ,须要酿成计数器,但是计数器也要防止越界。
先查一下哪个块头在不在bloom filter,假如有的话,再去对生意业务树,到底有没有。
三棵树的根hash值都在块头里
以太坊运行过程,可以看成是生意业务驱动的状态机 transaction- driven state machine,这个状态机的状体就是全部账户的状态,就是状态树。生意业务是什么? 每次发布的区块里包罗的生意业务。
通过实行这些生意业务,可以通过体系从当前状态驱动到下一个状态。
Btc 也可以以为是transaction- driven state machine ,但是状态是utxo ,发布的区块驱动如今的状态转移到下一个状态。
btc 和以太坊中的状态转移都必须是确定性的,由于全部的矿工都要实行雷同的状态转移。
收据就是这个,
区块块头数据布局
这个bloom是由每个收据的bloom 归并得到的
createbllom :归并每个收据的bloom ,天生区块的bloom
logsbloom :天生每个收据的bloom,
bloom9: bloomfilter 中利用的hash 函数,

  • GHOST 共识协议
    出块速率快的长处是什么? 进步体系的throughput(吞吐) ,低沉体系反应时间 。
    bitcoin和 以太坊本质上都是应用层的共识协议,底层运行在 overlay network ,底层运行时间比力长,十几秒出一个新块,且底层运行的网络比力慢,以是分支是常态,这对共识协议有什么挑衅呢?
    会出现以下标题:
    挖矿中央化(Mining Centralization)
    中央化私见 (Centralization Bias)
    怎样办理呢? 接纳基于ghost 协议的机制
    bitcoin :只有在最长正当链 才有初块嘉奖,其他的分叉的初块嘉奖是取消的。
ghost: 挖到矿,这个链条取消了,我们给你肯定的赔偿(uncle block )
uncle block 得到 7/8 *3 的初块嘉奖, 一个主链块 最多归并两个uncle block,他能得到2(两个) x 1/32 x 3 + 3 个初块嘉奖
他归并的是uncle block,挖的时间,已经知道uncle block 的存在, 然后把它们包在 block header 上 。
有没有什么缺陷?
假如矿工处于竞争关系,就不包罗
仅能包罗叔叔辈的
怎么办呢?
岂论资排辈,不管是叔叔辈、爷爷辈、只要能归并就归并,只要给钱就归并。只在当前这个区块在七代内有共同 主线,才气算uncle 为什么这么计划? 假如不限定叔叔的备份,这个实现起来对全节点来说,维护的东西太多了。 而且,计划最多隔着七代,而且嘉奖对前面的渐渐淘汰,以是鼓励出现分叉之后尽早归并 。不管你包罗的是哪一个辈分的叔叔,
以太坊中的区块嘉奖与燃料费
gas fee (tx fee)—— 比力低 (曾经约为1%)
以太坊中没有规定定期初块嘉奖 减半。
以太坊中的5个以太币,酿成3个亿台币,是为了挖矿难度调解,挖矿炸弹难度大幅降落,然后block 从5->3
以太坊的燃烧机制详解
须要查uncle block是不是符合挖矿难度要求的,符合就以为是正当的叔叔区块。至于这个叔叔区块内里的生意业务是否正当,我们是不查抄的,由于大概和主链生意业务是辩说的。
以太坊防止分叉攻击的综合机制
只有分叉后的第一个区块才气得到uncle reward,以是低沉了分叉攻击的风险。

  • 挖矿算法
    对于基于工作量证明的区块链体系 来说,挖矿是包管安全的:block chain is secured by mining.
bug bounty。 bitcoin 的 bug bounty 继承了磨练,但是bitcoin 有个毛病是,只有专业装备才气挖到矿,也与最开始bitcoin 论文 one cpu,one vote 背道而驰。
以是bitcoin 出现了很多加密货币,包罗以太坊,一个计划原则就是 asic resistance 。
怎样实现 这个计划原则呢? 要实现 memory hard mining puzzle
eg. liteCoin , puzzle 基于 scrypt  。开设很大数组,增长对内存读取,特殊像寻常盘算机对内存的需求。
好的:mining 的时间是 memory hard
坏的: 对轻节点 验证时 也是 memory hard。。。。
导致: litecoin真正利用时, 对内存设置不能太大。。。以是实际上litcoin利用时,seed 仅有128k
但是,对冷启动的时间是很有资助的。早期的计划理念对于聚集人气是很告急的。。。
与bitcoin 的对比:除了出块速率 两分半,是bitcoin 的四倍,
5.2 以太坊怎么计划的?
小的 16 m cache  (轻节点用这个就行):从seed 节点运算,把整个数组从前今后填满整个伪随机数。
然后天生一个更大的数组。按照伪随机的原则从小的cache 读取一些元素,
大的 1gb dataset DAG (由小的天生)
以太坊怎样天生 Dataset (DAG)
部门伪代码
5.3 转向 pow -> pos
从工作量证明转向权益证明
类似股份制公司。对于asic 的厂商是个严峻的威胁。
转入权益证明后就不挖矿了。
以太坊上接纳了预挖矿 —— pre-mining  预留一部门给以太坊的开发者。
pre-sale : 类似风投
工作量证明导致asic 才气挖矿,如许不公平?
但是另一个角度来说,通用盘算机挖矿大概导致云厂商被租用,导致大面积攻击,也有大概不公平。
6 难度调解算法。
当难度炸弹开始发挥的时间,恰好是工作量证明转向权益证明的时机
权益证明不那么完善,以是工作量证明还是继承挖,(想转没法转)但
北京时间9月15日,OKLink数据体现,天下上最活泼的区块链网络以太坊在区块高度15537393触发归并机制,并产出首个PoS区块(高度为15537394),自此以太坊共识正式从PoW转为PoS机制,完成了此次“The Merge”升级。 最新行情数据体现,以太坊报价来到了1630美元,归并升级对其代价没有立刻产生影响。
比特币改进提案 (BIP: Bitcoin Improvement Proposal)

  • 权益证明 proof of stake
矿工为什么要挖矿? 初块嘉奖,收益
为什么要给他们这些收益: 为了鼓励矿工,挖矿去维护区块链
接纳权益证明的加密货币,会接纳virtual mining
假造挖矿(Virtual Mining)详解
infanticiside :假如一个加密货币接纳工作证明,假如恶意算力攻击,很容易对初创货币造成infanticiside
pos 必须起首搞到富足多的币,才气发动攻击。以是pos是一个闭环。
有的加密货币 pow和 pos 乃至是连合的。
casper the friendly finality gadset (ffg)
Casper FFG (Friendly Finality Gadget): 以太坊终极性机制详解
区块链中的 Epoch(纪元)详解
包罗在finality的生意业务是不会被颠覆的吗?
8 智能合约
智能合约是运行在区块链上的一段代码,代码的逻辑界说了合约的内容
智能合约账户生存了合约当前的运行状态
balance:当前余额
nonce:生意业务次数
code:合约代码
storage:存储,数据布局是一棵mpt
solidity 是智能合约最常用的语言,语法上与javascript很靠近
拍卖的时间,也得上交锁定的包管金。
外部账户怎样调用智能合约?
创建一个生意业务,担当地点为要调用的谁人智能合约的地点,data域填写要调用的函数及其参数的编码值。
一个合约调用另一个合约
以太坊智能合约中的函数
以太坊智能合约的创建与运行
以太坊Gas费用详解
evm和 jvm类似,也是加一层假造机,为智能合约的运行提供一层同一情况。
evm 寻址空间: 256位
汽油费不敷的话, 实行的状态会回滚,但是gas fee 是不退的。
由于担心造成 恶意攻击。
公共数据是免费的。
智能合约中的连锁回调标题
bitcoin 的每一个生意业务最多1m
但是以太坊的很复杂,以是根据利用复杂度
gaslimit :这个区块全部生意业务能斲丧的上限。
每一个矿工可以对gaslimit 举行微调 1/1024
以太坊生意业务收据(Transaction Receipt)数据布局
全部的全节点都须要在当地实行转账生意业务。(分布式共识机制)
以是汽油费是怎么扣的?
三棵树在全节点在当地维护的树
状态树:每个账户的状态(包罗余额) : 收到
先挖矿还是先实行? 先实行,没有办法先挖矿。
标题:假如实行完了,没挖到矿,有啥赔偿?
汽油费是给挖到矿的。 全部的都是免费的,有点像陪太子读书,挖矿慢的就很亏损。
就不会出现由于没有汽油费,而不验证的情况? —— 危害区块链安全。(区块链安全——全部全节点独立验证。)
假如他跳过验证步调,以后就没法挖矿了。由于不验证,当地的三棵树状态就不对了,自己算出来的根hash值别人以为是不对的。
为什么必须实行验证步调才气更新这三棵树,由于发布出来的东西没有这三棵树的内容,真是块头内里有根hash值,只有通过验证步调,才气更新三棵树
发布到区块链上的生意业务是不是全都乐成举行的? 假如智能合约实行中出现了错误,要不要也发不到区块链上?
由于要扣掉汽油费,以是须要发布到区块链上,形成共识。
以太坊,就是生意业务驱动的状态机(共识),由于全部全节点须要到达同一个状态。
以是以太坊不支持多核,除了多线程外,全部大概有不确定性的效果的,都不支持
以太坊的智能合约,不能产生真正意义上的随机数。
多线程的标题:多个查对内存访问次序差异,实行效果有大概不确定
地点范例:
addr.balance :这个地点的余额
addr.transfer(12345) :当前这个合约,往address上转入的钱
以太坊中的随机性标题
发送eth 的三种方法:
以太坊转账ETH的三种方法及其区别
写完一个智能合约,发布到区块链里,
智能合约的发布与调用流程
写一个solidy 的步伐,然后线下宣传,然后
auctionEnd 只有某个人调用,才气实行
没办法设置为拍卖调用竣事,自动调用。
但是不存在ended 并发实行,由于没有并发实行
答案:
红框中通过循环退款有标题: 调用时忘记 fullback函数了
code is law : 智能合约的规则是由代码决定的,一旦发布到区块链上就无法修改了——无人能修改规则,但是规则中有毛病也改不了了。
智能合约假如计划欠好,容易拿不出去。
智能合约锁仓是个常用利用。。。
有点类似于不可取消信托。
须要多次测试,在专门测试网站上测试好了再来。
这个递归重复取钱会连续到什么时间? gas不敷、钱包不敷、调用栈溢出了。
这个怎样修改呢? 先清零,在转账。
重放攻击
decentralized 不便是 distribute
大部门的分布式根本都是为了更快。但是以太坊、比特币要求的是state machine (状态机)
状态机不是为了块,而是为了容错。 最初的状态机应用是 mission critical application
9 . ETH-TheDAO
通用概念:
DAO: decentralized Autonomous Organization
DAC:  decentralized Autonomous  Corporation .
案例:
The DAO :运行在以太坊上的智能合约
一共存活三个月。
怎么取接纳益呢?
splitDAO 拆分完后得到 childDAO,非常的就是一个人的childDAO,然后就是取回
有七天的讨论期
有28天锁定期。
但是标题在哪? splitDAO代码有标题
这个代码先赢利,然后再把余额减去相应数量,再把调用者账户清零。
应该先把调用者账户清零,再转账
splitDAO代码毛病分析
10 eth 反思
智能合约着实不智能,就是一个代码条约
智能合约发布后,没办法制止被调用。
nothing is irrevoable
用脚投票——区块链用挖矿投票
分叉恰好是去中央化的,存在分叉,恰好是民主的体现。
decentralized  不便是 distribute
状态机的目的不是比速率快,而是为了容错。
这个不是分布式体系的常态。
不要把智能合约当成是大规模盘算/大规模存储的服务,智能合约是用来编写控制逻辑的,只有那些须要在互不信托的实体之间创建信托,才须要智能合约。

  • 美链 beauty chain
有大概红框部门会栈溢出,导致扣了很少的货币,但是发了正常数量的代币。
以是代币直接通货膨胀了
防备步伐: safemath库
12 总结:
应用:
比特币固然黑白中央化的,但是接纳比特币这个非中央化付出模式,不肯定只能用在非中央化的范畴。比方说亚马逊是中央化的,但是可以接纳bitcoin
1 .  bitcoin 不应该和已有付出方式竞争。
bitcoin : world wide currency
新的加密货币在付出服从已经大大进步了
bitcoin 1m 字节,10分钟一个块
评价付出方式服从优劣,要放到期间配景下看
物理天下中的智能合约 ATM
不是一种最完善的制度,但是是一种进步。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表