布隆过滤器原理
交易的签名理解收据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 ...
智能合约安全学习路线
智能合约的经典漏洞智能合约的审计工具智能合约安全学习路线智能合约学习资源区块链相关学习材料 前言 笔者相对擅长合约安全方面,因此这个学习路线大致是偏向于智能合约开发和智能合约安全,对于很多从事开发的朋友,可能显得比较学院派,不是那么切合工作实际,不过抛砖引玉,欢迎讨论和补充。学习的资源可以在下方的资源汇总中找到,笔者日后将会写合约审计方面的文章。 我们学习的心得、理论基础和源码分析,都会写在仓库里,欢迎交流学习 https://github.com/learnerLj/geth-analyze 这下面的内容笔者也没有完全掌握,但是会逐渐的学习,在未来 3-5 年研究生毕业后也许能够在合约安全、安全的区块链系统构建等方面有一定的成就。 第一步:完成简单 DApp 开发 一开始入门就要求做简单的 DApp 可能看起来不合理,因为读者可能现在都不知道 DApp 是什么。但是项目驱动的学习将会非常有效,并且掌握的开发技能将会在后续的学习中发挥重要作用。 将会学会的知识有: 编程语言:JavaScript, Solidity, (HTML, CSS) 完成前端与合约交互往往用的...