文章 视频 课程 百科图谱 集训营
更多
  • 问答
  • 提问
  • 发表文章
  • 专栏
  • 活动
  • 文档
  • 工作
  • 集市
  • 发现
  • 文章
  • 问答
  • 视频
  • 课程
  • 集训营
  • 专栏
  • 活动
  • 工作
  • 文档
  • 集市
搜索
  • 登录/注册
deliriusz
  • 文章
  • 专栏
  • 问答
  • 视频
  • 课程
  • 集市作品
  • 活动
  • 招聘
TA的视频 TA的合集
EVM & Yul 编程课程 #3 - 操作码和预编译
视频 AI 总结: 本视频是 EVM 计划课程的第三集,主要讲解了 EVM(以太坊虚拟机)中的 Opcodes 和 Precompiles,它们是 EVM 交易的核心。视频首先解释了 Bytes 的概念,以及数字的不同表达方式(二进制、八进制、十六进制),以及大小端序。然后深入讲解了 Opcodes 的类型,包括停止、数学运算、环境信息、储存/记忆操作、Logs/Events 和系统操作,以及 Precompiles 的作用和一些常用的 Precompiles 合约。 关键信息: * Bytes 的不同表达方式:二进制(0b)、八进制、十进制、十六进制(0x)。 * 大小端序:小端序和大端序在书写 Bytes 方式上的不同。 * EVM 支持的唯一类型是 32 Bytes。 * Opcodes 是 EVM 的低级指令,用于构建智能合约。 * Opcodes 的分类:停止、数学运算、环境信息、储存/记忆操作、Logs/Events、系统操作。 * Precompiles 是预先编译好的智能合约,用于执行数据上昂贵的行动,提高效率。 * 常用的 Precompiles 合约:ecrecover, sha256, ripemd160, identity, modexp, ecadd, ecmul, ecpairing, blake2f。 * Logs 和 Events 实际上是同一个东西,在 Solidity 中叫 Event,在底层叫 Log。 * Delegatecall 需要一个少于 call 的 gas,因为它并不需要密码价值。 * Staticcall 就像一般的 call,但是它不允许任何储存改变。
3
0
0
5小时前
EVM & Yul 编程课程 #4 - 处理字节
视频 AI 总结: 本视频深入讲解了以太坊虚拟机(EVM)中的字节操作,这是理解EVM底层运作的关键。视频详细介绍了位运算(AND、OR、XOR、NOT)和移位操作(左移、右移),以及比较运算和算术运算在EVM中的应用。通过二进制表示,视频解释了这些操作如何修改字节,并展示了如何在EVM中实现数据转换、掩码操作、以及如何处理有符号数。此外,还介绍了字节掩码在数据转换中的应用,以及如何使用位运算来提取和操作数据。 关键信息: * EVM 基于字节操作,理解字节操作是理解 EVM 的基础。 * 介绍了位运算(AND、OR、XOR、NOT)和移位操作(左移、右移)的原理和应用。 * 比较运算(小于、大于、等于)和算术运算(加法、乘法、除法、取模)在 EVM 中的使用。 * 展示了如何使用字节掩码进行数据转换和提取。 * 解释了有符号数的处理方式,以及有符号移位操作。 * 介绍了数据拼接、切片、长度计算、类型转换、数据打包/解包和哈希运算等高级字节操作。 * 通过实例演示了如何在 EVM 中实现结构体存储和数据转换。
3
0
0
5小时前
EVM & Yul 编程课程 #5 - 与智能合约交互。
视频 AI 总结: 本视频主要讲解了以太坊虚拟机(EVM)如何与智能合约交互,以及如何使用交易来改变 EVM 的状态。核心内容包括通过 JSON RPC 与 EVM 交互,交易是改变区块链状态的唯一方式,以及不同类型的交易,如创建合约和调用合约。此外,视频还详细解释了合约创建过程中的 ByteCode 和 RuntimeByteCode 的区别,以及四种合约调用方式(Call, Delegate Call, Call Code, Static Call)的特性和适用场景。 关键信息: * EVM 通过 JSON RPC 与外部世界交互。 * 只有交易才能改变区块链的状态。 * 创建合约涉及 ByteCode 和 RuntimeByteCode,前者用于初始化,后者是实际运行的代码。 * 四种合约调用方式: * Call:标准的合约调用,会转移 gas 和 value。 * Delegate Call:被调用合约的代码在调用合约的上下文中执行,不转移 value。 * Call Code:已弃用,不应使用。 * Static Call:只读调用,不能修改状态。
3
0
0
5小时前
Yul编程 #2 - Yul基础
视频 AI 总结: 本视频介绍了Yule语言的基础知识,包括变量声明、数据类型、运算符、条件语句(if)、循环语句(for)以及switch语句的使用。Yule 嵌入在 Solidity 的 assembly 块中,但它不是纯粹的汇编语言。视频通过Remix演示了Yule的实际应用,展示了如何在Yule中进行变量定义、算术运算、条件判断和循环操作,并强调了Yule与Solidity在语法和类型处理上的差异。 关键信息: 1. Yule 变量声明使用 `let` 关键字,赋值使用 `:=` 符号,且没有分号。 2. Yule 只有一种数据类型:word (uint256),但可以引用外部定义的其他类型变量。 3. Yule 函数名通常与 EVM 操作码相同,但操作可以链式调用,从右向左执行。 4. Yule 的 `if` 语句只接受一个条件,非零值视为真,只有零视为假。 5. Yule 的 `switch` 语句在匹配到一个 case 后,不会继续执行其他 case。 6. Yule 只有 `for` 循环,其初始化、条件和迭代部分使用不同的语法结构。
2
0
0
5小时前
EVM & Yul 编程课程 - geth 节点实现第一部分
视频 AI 总结: 该视频是 EVM 编程课程的附加内容,深入讲解了 GoEthereum 中 EVM 的实现原理。视频首先简要介绍了 Go 语言的特性,包括结构体、接口、模块、错误处理、元数据、泛型和延迟函数等,这些特性对于理解 GoEthereum 的代码至关重要。然后,视频详细分析了 GoEthereum 中交易处理的流程,从接收共识层的区块提议到状态更新,重点讲解了 apply transaction 函数,包括 pre-check、购买 gas、计算 intrinsic gas、执行 EVM 代码以及 gas 退款等关键步骤。 视频中提出的关键信息: * Go 语言的结构体和接口可以实现类似面向对象编程的功能。 * Go 语言的模块可能分散在多个文件中,查找特定函数可能比较困难。 * Go 语言通过返回可选的返回值来处理错误,而不是抛出异常。 * Go 语言的结构体可以使用元数据来定义字段的属性。 * Go 语言最近才引入了泛型。 * Go 语言的 defer 关键字用于在函数结束时执行代码。 * GoEthereum 首先从共识层接收区块提议,然后进行状态更新。 * apply transaction 函数是交易处理的核心,包括 pre-check、购买 gas、计算 intrinsic gas、执行 EVM 代码以及 gas 退款等步骤。 * EVM 的执行分为 create 和 call 两种情况,分别对应合约创建和合约调用。 * Gas 退款的比例在不同的 EIP 中有所不同。
2
0
0
5小时前
EVM & Yul 编程课程 - geth 节点实现第二部分
视频 AI 总结: 该视频详细讲解了以太坊虚拟机(EVM)中合约创建(create)操作的实现原理,重点分析了 go-ethereum 客户端中 EVM.create 函数的实现逻辑。视频的核心内容包括合约地址的生成方式、gas 消耗的计算、nonce 的更新、访问列表的处理、以及如何通过 journal 机制实现状态回滚(revert)。视频还解释了 EVM 如何处理不同硬分叉带来的规则变化,以及如何防止拒绝服务攻击。 关键信息: * **Create 和 Create2 的区别:** 主要在于合约地址的生成方式不同,Create2 允许开发者通过 init code 和 salt 影响合约地址。 * **EVM.create 的实现:** 涉及深度检查、余额转移、nonce 更新、访问列表添加等步骤。 * **状态回滚(Revert)机制:** 通过 journal 记录状态变更,并在 revert 时回溯 journal 条目,恢复到之前的状态。 * **Gas 消耗:** 创建合约需要消耗 gas,包括代码部署的 gas 费用。 * **硬分叉兼容性:** go-ethereum 需要兼容所有硬分叉,因此代码中包含大量的条件判断语句。 * **安全考虑:** 视频提到了防止拒绝服务攻击的措施,例如 out-of-gas 错误的处理方式。 * **合约部署流程:** 包括创建账户、转移资金、运行构造函数(init code)、以及设置部署后的代码。
2
0
0
5小时前
EVM & Yul 编程课程 - geth 节点实现第三部分
视频 AI 总结: 该视频深入讲解了以太坊虚拟机(EVM)的内部运作机制,重点介绍了`interpreter.run`函数,它是EVM执行合约代码的核心。视频详细分析了EVM如何逐字节执行合约代码,处理调用深度、只读标志,以及如何管理内存、堆栈和调用上下文。此外,视频还介绍了EVM中的操作码(opcode)及其执行过程,包括gas消耗、堆栈操作、内存管理以及不同类型的调用(call、delegatecall、staticcall)的实现方式。最后,视频还展示了预编译合约(precompile contract)的实现方式。 关键信息: * `interpreter.run`是EVM执行合约代码的核心函数,负责逐字节执行代码。 * EVM使用堆栈(stack)和内存(memory)来存储和操作数据。 * EVM通过操作码(opcode)执行不同的操作,每个操作码都有相应的gas成本。 * EVM支持多种调用类型,包括call、delegatecall和staticcall,它们在消息发送者、值传递和状态修改方面有所不同。 * 预编译合约(precompile contract)是直接在EVM中实现的特殊合约,执行效率更高。 * EVM通过jump table将操作码映射到相应的执行函数。 * EVM会检查堆栈的上溢和下溢,并根据gas消耗情况进行错误处理。 * delegatecall允许合约借用另一个合约的代码逻辑,但使用调用合约的上下文。 * staticcall是只读调用,不允许修改状态。 * EVM使用gas来限制计算资源的使用,并防止无限循环。
2
0
0
5小时前
EVM & Yul 编程课程 #10 - EVM 怪癖
视频 AI 总结: 该视频主要讲解了以太坊虚拟机(EVM)的一些特性和怪异之处,以及这些特性背后的设计原因。视频解释了 EVM 中存在的静默下溢和溢出、没有浮点数、构造函数返回要部署的代码等问题,并阐述了这些设计选择的原因,例如为了简化实现、保证金融系统的精度、以及 EVM 的底层工作方式。此外,视频还强调了 Solidity 的确定性执行的重要性,以及为什么 Solidity 与外部系统隔离,以避免链分裂。 关键信息: * **静默下溢和溢出:** EVM 中的算术运算在溢出或下溢时不会报错,而是会回绕,这是为了简化实现,并模拟底层处理器的行为。 * **没有浮点数:** Solidity 不支持浮点数,而是使用固定精度的十进制数(如 WAD 和 Ray)来保证金融计算的精度和一致性。 * **构造函数返回代码:** Solidity 构造函数会返回要部署到链上的字节码,包括函数选择器和函数代码。 * **确定性执行:** Solidity 必须保证确定性执行,即所有节点在相同输入下必须得到相同的结果,这是保证区块链一致性的关键。 * **与外部系统隔离:** Solidity 与外部系统隔离,不能直接访问外部数据,以避免因外部数据变化导致链分裂。需要通过 Oracle 来获取外部数据。 * **存储成本高昂:** EVM 中存储操作成本很高,因为需要从磁盘读取数据,这比从内存读取数据慢得多。 * **栈、内存和调用栈限制:** EVM 对栈、内存和调用栈都有大小限制,以防止拒绝服务攻击。
2
0
0
5小时前
EVM & Yul 编程课程 #11 - 硬分叉
视频 AI 总结: 该视频主要讲解了区块链中的硬分叉(Hard Fork)和软分叉(Soft Fork)的概念,以及以太坊(Ethereum)历史上发生的几次重要硬分叉事件。视频强调了硬分叉需要所有节点同意并更新代码,否则会导致链分裂。同时,视频也提到了 EVM 兼容链实际上并非完全兼容,因为它们可能引入不同的逻辑、预编译合约或预部署合约,导致代码在不同链上的行为不一致。 关键信息: * **硬分叉(Hard Fork)**:区块链的重大升级,需要所有节点更新代码才能保持一致,否则会产生链分裂。 * **软分叉(Soft Fork)**:节点可以选择同意的更新,不影响世界观的运作。 * **以太坊硬分叉历史**:包括 Frontier、Homestead、Ethereum Classic(DAO Hack 后)、Metropolis、Serenity、Berlin、London、Shanghai 等。 * **EVM 兼容性问题**:许多声称 EVM 兼容的链实际上存在差异,例如 Aurora、Arbitrum、zk-sync 等,可能导致代码行为不一致。 * **预编译合约(Pre-compile)和预部署合约(Pre-deploy)**:EVM 兼容链可能引入的两种特殊合约,影响链的行为。 * **Multi-Chain Auditor**:一个用于比较不同链之间差异的资源。
3
0
0
5小时前
EVM & Yul 编程课程 #7 - Gas(Gas)。
视频 AI 总结: 本视频详细讲解了以太坊虚拟机(EVM)中的 Gas 机制。Gas 是执行 EVM 操作所需的计算量单位,用于补偿验证者、防止滥用和有效分配网络资源。视频解释了 Gas 的计算方式,以及不同操作消耗 Gas 不同的原因,例如存储访问的冷热状态会影响 Gas 消耗。此外,视频还讨论了 Gas 退款机制及其演变,以及 EIP-1559 对 Gas 费市场的影响,最后介绍了 63/64 规则对合约调用栈深度的限制。 关键信息: * Gas 是 EVM 中衡量计算量的单位,用于支付交易费用。 * Gas 消耗取决于操作类型,例如存储访问、计算复杂度等。 * 首次访问存储(冷状态)比后续访问(热状态)消耗更多 Gas。 * Gas 退款机制曾被滥用,后通过 EIP-3529 进行了调整。 * EIP-1559 引入了基础费用(Base Fee)和矿工小费(Tip),改变了 Gas 费市场。 * 63/64 规则限制了合约调用栈的深度,防止潜在的攻击。 * 每个区块的 Gas 上限是 15 million gas,根据网络拥堵情况,可以调整到 7.5 million 到 30 million 之间。
4
0
0
6小时前
  • ‹
  • 1
  • 2
  • ›
deliriusz
deliriusz
贡献值: 35 学分: 152
江湖只有他的大名,没有他的介绍。
0 关注 3 粉丝
关于
关于我们
社区公约
学分规则
Github
伙伴们
DeCert
ChainTool
GCC
合作
广告投放
发布课程
联系我们
友情链接
关注社区
Discord
Twitter
Youtube
B 站
公众号

关注不错过动态

微信群

加入技术圈子

©2025 登链社区 版权所有 | Powered By Tipask3.5|
粤公网安备 44049102496617号 粤ICP备17140514号 粤B2-20230927 增值电信业务经营许可证

发送私信

请将文档链接发给晓娜,我们会尽快安排上架,感谢您的推荐!

提醒

检测到你当前登录的账号还未绑定手机号
请绑定后再发布
去绑定
编辑封面图
封面预览