布隆过滤器原理
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读oracle 原理和实现交易池分析TxList 解读MPT树区块同步geth源码学习——介绍How Geth starts its server 介绍 布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 可见,它解决的核心问题是 检索一个元素是否在一个集合中。原理大致如下: 当一个元素被加入集合时,通过 K 个散列函数将这个元素映射成一个二进制数组中的 K 个位置,把这些位置的值设置为 1。检索时,我们只要观察这些对应的位置的值是不是都是 1 就(大约)知道集合中有没有检索的元素:如果这 K 个位置中有任何一个 0,则被检索元素一定不在集合中;如果都是...
forkId 解读
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读oracle 原理和实现交易池分析TxList 解读MPT树区块同步geth源码学习——介绍How Geth starts its server EIP-2124 因为 core/forkId 包是 EIP-2124 的实现,因此我们先了解 EIP-2124 的内容。 目的 记住以太坊是向后兼容! 以太坊节点之前寻找其他节点的方式是:随机的选择可以连接的节点,再去判断节点是否对自己有用。但是其他的节点可能是主网节点、测试网节点、私网节点、共识机制不一致的节点,这样“盲目”的寻找会浪费资源。 于是这个提案希望在连接前,其他节点可以发送自己的链配置,实现精确连接到有用节点。这个传递的信息在提案中被称作 fork identifier,它实现如下功能: 如果两个节点在不同的网络上,他们不应该考虑连接。 如果硬分叉通过,升级的节点应该拒绝未升级的节点。 如果两条链有相同的创世区块配置和链配置,但没有分叉(ETH /...
oracle 原理和实现
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读oracle 原理和实现交易池分析TxList 解读MPT树区块同步geth源码学习——介绍How Geth starts its server oracle 介绍 oracle 翻译是预言机,英文中的意思是预卜先知,知晓消息的意思。在区块链里用于合约获取链外的数据。例如你想把比特币转换成美元,如果在链上进行,那么就需要从链外获取比特币和美元的汇率,例如price feed oracles。但是以太坊是封闭的系统,直接与外界交互很容易破坏 EVM 安全性,因此才用了预言机作为中间层,沟通链上和链外。详细可见chainlink 的文档和官方文档。 在以太坊上,oracle 是已经部署的智能合约和链外组件,它可以查询 API 提供的信息,然后给其他合约发消息,更新合约的数据。但是只相信唯一的数据源也是很不可靠的方式,通常是多个数据源。我们可以自己创建,也可以直接使用服务商提供的服务。 一般 oracle...
交易池分析
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读oracle 原理和实现交易池分析TxList 解读MPT树区块同步geth源码学习——介绍How Geth starts its server core\txpool.go 前言 这篇文章是博主的朋友写的。 在写这篇文章的时候,笔者已经完完全全看完该代码文件的每一行代码,但是由于代码量过于庞大,所以自然存在边看边忘的情况,所以在此写下这篇文章记录自己的理解以及收获,笔者能力有限,错误之处在所难免,还望包容 由于该文件代码量过大,而且笔者还同时在看该仓库其他的代码文件,所以笔者决定分期写,一边阅读其他的源码文件,一边回顾txPool.go同时写下阅读笔记 而且大部分的理解已经记录在源码文件中了,所以阅读源码中的笔记更能帮助理解 一些重要概念 可执行交易和非可执行交易。可执行交易是指从交易池中择优选出的一部分交易可以被执行,打包到区块中。非可执行交易则相反,任何刚进入交易池的交易均属于非可执行状态,在某一个时刻才会提升为可执行状态。 本地交易...
TxList 解读
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读oracle 原理和实现交易池分析TxList 解读MPT树区块同步geth源码学习——介绍How Geth starts its server 本文旨在分析清楚 tx_list.go 中这个工具包里面的重要代码 堆排序 以下为tx_list.go中的heap.Interface的全部实现代码,非常标准,和默认的一样; 123456789101112131415161718//heap的整个实现过程type nonceHeap []uint64func (h nonceHeap) Len() int { return len(h) }func (h nonceHeap) Less(i, j int) bool { return h[i] < h[j] }func (h nonceHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i]...
blockchain核心
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读oracle 原理和实现交易池分析TxList 解读MPT树区块同步geth源码学习——介绍How Geth starts its server 参考: 以太坊 blockchain 源码分析 - mindcarver - 博客园 (cnblogs.com) 主要部分转载:以太坊 blockchain 源码分析 blockchain 关键元素 db:持久化到底层数据储存,即 leveldb(注意不是 MySQL)(源码core/rawdb);(参考文章:)Leveldb 基本介绍和使用指南 - 知乎 (zhihu.com) 以及对应的百科 [LevelDB_百度百科 (baidu.com)](https://baike.baidu.com/item/LevelDB/6416354#:~:text= Leveldb 是一个 google 实现的非常高效的 kv 数据库,目前的版本 1.2 能够支持 billion 级别的数据量了。...
理解交易
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读oracle 原理和实现交易池分析TxList 解读MPT树区块同步geth源码学习——介绍How Geth starts its server 交易的入门介绍 这里不作额外说明,可以学习官方文档、以及仓库中提供的《区块链基础》 交易的结构 类型 传统交易(Legacy)是以太坊最初的交易类型,但是后来逐渐出现了 AccessList 类型的交易和 DynamicFee 类型的交易,他们分别由 EIP-2930 和 EIP-1559 定义 12345const ( LegacyTxType = iota //传统交易 AccessListTxType //EIP-2930 定义的访问列表 DynamicFeeTxType //EIP-1559 定义的动态交易费) 关于这两个 EIP 的详细说明请看后文的『影响交易的 EIP』 下面是交易的定义 1234567891011121314151617181920type Transaction...
理解区块
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读oracle 原理和实现交易池分析TxList 解读MPT树区块同步geth源码学习——介绍How Geth starts its server 结构定义 区块 首先我们需要明白区块的结构。 123456789101112131415161718192021// Block represents an entire block in the Ethereum blockchain.type Block struct { header *Header //区块头 uncles []*Header //引用的叔块 transactions Transactions //交易 // caches hash atomic.Value //区块哈希 size atomic.Value //区块大小 // Td is used by package core to store the total...
理解收据receipt
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读oracle 原理和实现交易池分析TxList 解读MPT树区块同步geth源码学习——介绍How Geth starts its server 核心结构 收据主要包括交易类型、交易是否成功的状态码、交易是否成功的编码、直到这笔交易区块消耗的 gas、和布隆过滤器。为了方便处理交易,也添加了交易的信息,包括交易哈希、合约地址和消耗的 gas。为了检查交易和收据是否匹配,提供了区块哈希、区块高度和交易在区块中的索引。 12345678910111213141516171819202122232425262728// Receipt represents the results of a transaction.type Receipt struct { // Consensus fields: These fields are defined by the Yellow Paper Type uint8 ...
智能合约学习资源
智能合约的经典漏洞智能合约的审计工具智能合约学习资源智能合约安全学习路线区块链相关学习材料 这些资源主要来自笔者的经历和学习,也参考了许多人的总结,作为自己的系统作结,应该对大家有帮助。 帮助和交流平台 gitter 在线频道。 reddit ethereum 讨论区 以太坊的 stackexchange stackoverflow 还有一些 discord 服务器,感兴趣可以加入。 优质社区 以太坊社区网络,他们的文章整理的不错,文档也很好。 以太坊维基百科,可以浏览基本的概念,很有帮助。 以太坊基金会博客,可以得到很多前沿信息。 登链社区,许多翻译的文章质量很高,并且有一些文档翻译。 以太坊知识库,虽然许多东西没有更新,但是有些文章翻译的很好,例如 新手入门、以及它开发者提供的参考 都可以看出来是花了很长时间整理的,可以浏览,增长见识。比较可惜的是,后续没有继续更新,可能是小白成为大佬的过程常常写很多的文章,但是成为大佬后都应对复杂问题,就没有继续写下去了吧。 layer2 方案的备忘录,以后深入以太坊拓展方案后可以很快对 layer2...