学习区块链的基础资料
Created|Updated|工程实践
|Word Count:30|Reading Time:1mins|Post Views:
《猥琐发育成区块链开发者》
普林斯顿的《Bitcoin and Cryptocurrency Technologies》课程
《精通比特币(第二版)》
Author: magicliang
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles

2026-10-05
区块链(17):执行、共识客户端与验证者怎样拼成一个节点
钱包发送交易到执行客户端(EL)的 RPC,不表示共识客户端(CL)已经选它所在的链头。EL 负责 EVM 执行、状态和交易入口;CL 负责共识网络、头选择与最终性判断;验证者客户端持有签名职责并参加提议/投票。两端通过 Engine API 协作:共识端请求构建执行载荷,并让执行端验证收到的载荷,不能只启动其中一个进程就称作完整的 PoS 节点。 先修区块链(16):Gasper 中链头与终局是两次不同判断。在私网里还须冻结执行与共识客户端的兼容版本、chain ID、genesis、fork 时间表、认证材料、验证者存款与网络连接;否则“节点同步”可能只是一端准备就绪,甚至连接了另一条链。Engine API 的认证材料是本地进程凭据,不可纳入博客素材。 sequenceDiagram participant U as 钱包/应用 participant EL as 执行客户端 participant CL as 共识客户端 participant V as 验证者 U->>EL: 提交签名交易 CL->>EL: Engine ...
2018-03-08
重新学习 Solidity
以下内容还是从 Solidity 文档里摘出来的。 智能合约入门/介绍 第一个基本的例子 12345678910111213pragma solidity ^0.4.0;contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public constant returns (uint) { return storedData; }} 一个 contract 可以被认为是一个类型。 默认的 unint 就是256位的。 storedData 可以被认为是 state variable,状态变量。在 Solidity 的概念里面,这个东西可以被认为是数据库里面的一个槽,可以被函数查询和修改。注意看它不是 public 的,所以没有合成方法。 访问状态变量不需要用 this前缀(在什么 scope 下都不需要吗?)。 ...
2018-08-29
以太坊深度研究合集(2017-2018 旧文整合)
本文整合了 2017 年 10 月到 2018 年 8 月间一系列以太坊学习与实战笔记,包括工作机制、Gas 系统、事务与消息调用、随机数问题、硬分叉、谢灵点应用、为什么以太坊不适合做联盟链,以及 CentOS 6.7 上 geth 私链搭建、web3 安装、solidity 智能合约部署等实战。三篇 2018-08-29 的"旧文一篇"已统一收录于第五至第七章,作者当时的"旧文回顾"语气一并保留。 一、概述 以太坊(Ethereum)是一台 transactional singleton machine with shared-state——事务性状态共享的单例机器。实际上就是逻辑上唯一,但物理上由多个节点维护的共识中的 world computer。这台机器的状态是由事务变迁驱动的: 以太坊的核心区别于比特币的设计点: 引入 EVM 与图灵完备的智能合约 账户模型而非 UTXO 用 Gas 系统作为算力定价与防滥用机制 默克尔帕特里夏树存储状态、事务和收据 “幽灵协议”(GHOST = Greedy Heaviest Observe...
2018-03-08
重放攻击问题
比特币靠不同的地址前缀可以规避重放攻击问题。 以太坊可以靠 EIP155 钱包来规避重放攻击问题。 何为重放攻击问题? 一个区块链有若干个测试网络。如果一套公私钥可以在不同的网络上通用,则可以恶意地把在测试网络中出现的 transaction 播放到主网上。如果在测试网络上有人从账户 A 转了一笔钱到账户 B,而账户 B 是一个傻瓜测试账户,私钥是由类似123456之类的种子生成的话。那么只要账户 A 在主网中的余额大于这笔钱,心怀恶意者就能把主网中 A 的钱财转走,从主网中的账户 B 里把钱取出来。即使心怀恶意者没有 B 的取款方法,也能让账户 A 蒙受资金损失。 所以不要跨网使用相同的公私钥对。

2026-10-05
区块链(18):EVM 执行后哪些状态进入状态根
Bitcoin 的输入消耗产生新输出;EVM 的世界状态主要描述账户的 nonce、余额、代码与存储承诺。合约调用携带发送者、目标、value、calldata 与可用 gas,在给定初始状态和规则版本下按确定性执行产生新状态、日志、gas 消耗及成功或失败结果。区块链(17):执行、共识客户端与验证者怎样拼成一个节点的 CL 不替 EL 重演每一步执行,但最终能否认可载荷依赖执行验证。 flowchart LR I[前状态根 + 签名交易 + fork 规则] --> E[EVM: 栈、内存、storage 与调用帧] E --> A[账户余额/nonce/代码/存储变化] A --> R[后状态根] E --> L[日志与回执: 单独承诺对象] E --> X[revert: 调用帧效果撤销,费用另算] 栈用于操作数,内存是调用期间的临时字节区域,storage 是合约持久化的键值空间;一次调用的中间值不自动变成永久链上状态。外部调用可以转移执行控制,必须区分调用失败返回与 revert 传播、内部状态撤销与发送者实际消耗的费...

2026-10-05
区块链(19):revert 以后为什么仍要核算 Gas 与 nonce
交易先经过签名、余额和 nonce 等可接收性检查,执行中还要为每一步消耗 gas。eth_estimateGas 是在给定当时的状态和参数下模拟,后续实际状态、排序和费用环境可能变化;“估算成功”不是“上链执行成功”,模拟时的读数据可能被其他交易改写。区块链(18):EVM 执行后哪些状态进入状态根中的 revert 撤销执行帧的状态效果,不能据此推断发起者完全不付费用。 flowchart TD S[签名与 nonce 有效] --> I[被纳入区块] I --> E{EVM 执行} E -->|成功| C[状态变化 + 用气 + 回执成功] E -->|revert/耗尽 gas| F[业务状态未按预期改变,仍有费用] C --> B[再检查区块与最终性] F --> B EIP-1559 风格费用把协议动态调整的基础费与交易提出的费用上限、小费上限联系起来;基础费按规则处理,不应简单写成全部支付给验证者。应用实际支出要从回执用气量与生效单位价格复算,不能把 maxFeePerGas × gas...
Announcement
人生只是,守株待兔





