布隆过滤器原理
交易的签名理解收据receipt理解区块理解交易blockchain核心oracle 原理和实现forkId 解读布隆过滤器原理交易池分析TxList 解读MPT树区块同步geth源码学习——介绍How Geth starts its server 介绍 布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 可见,它解决的核心问题是 检索一个元素是否在一个集合中。原理大致如下: 当一个元素被加入集合时,通过 K 个散列函数将这个元素映射成一个二进制数组中的 K 个位置,把这些位置的值设置为 1。检索时,我们只要观察这些对应的位置的值是不是都是 1 就(大约)知道集合中有没有检索的元素:如果这 K 个位置中有任何一个 0,则被检索元素一定不在集合中;如果都是...
交易池分析
交易的签名理解收据receipt理解区块理解交易blockchain核心oracle 原理和实现forkId 解读布隆过滤器原理交易池分析TxList 解读MPT树区块同步geth源码学习——介绍How Geth starts its server core\txpool.go 前言 这篇文章是博主的朋友写的。 在写这篇文章的时候,笔者已经完完全全看完该代码文件的每一行代码,但是由于代码量过于庞大,所以自然存在边看边忘的情况,所以在此写下这篇文章记录自己的理解以及收获,笔者能力有限,错误之处在所难免,还望包容 由于该文件代码量过大,而且笔者还同时在看该仓库其他的代码文件,所以笔者决定分期写,一边阅读其他的源码文件,一边回顾txPool.go同时写下阅读笔记 而且大部分的理解已经记录在源码文件中了,所以阅读源码中的笔记更能帮助理解 一些重要概念 可执行交易和非可执行交易。可执行交易是指从交易池中择优选出的一部分交易可以被执行,打包到区块中。非可执行交易则相反,任何刚进入交易池的交易均属于非可执行状态,在某一个时刻才会提升为可执行状态。 本地交易...
TxList 解读
交易的签名理解收据receipt理解区块理解交易blockchain核心oracle 原理和实现forkId 解读布隆过滤器原理交易池分析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核心oracle 原理和实现forkId 解读布隆过滤器原理交易池分析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核心oracle 原理和实现forkId 解读布隆过滤器原理交易池分析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核心oracle 原理和实现forkId 解读布隆过滤器原理交易池分析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核心oracle 原理和实现forkId 解读布隆过滤器原理交易池分析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...
智能合约安全学习路线
智能合约的经典漏洞智能合约的审计工具智能合约学习资源智能合约安全学习路线区块链相关学习材料 前言 笔者相对擅长合约安全方面,因此这个学习路线大致是偏向于智能合约开发和智能合约安全,对于很多从事开发的朋友,可能显得比较学院派,不是那么切合工作实际,不过抛砖引玉,欢迎讨论和补充。学习的资源可以在下方的资源汇总中找到,笔者日后将会写合约审计方面的文章。 我们学习的心得、理论基础和源码分析,都会写在仓库里,欢迎交流学习 https://github.com/learnerLj/geth-analyze 这下面的内容笔者也没有完全掌握,但是会逐渐的学习,在未来 3-5 年研究生毕业后也许能够在合约安全、安全的区块链系统构建等方面有一定的成就。 第一步:完成简单 DApp 开发 一开始入门就要求做简单的 DApp 可能看起来不合理,因为读者可能现在都不知道 DApp 是什么。但是项目驱动的学习将会非常有效,并且掌握的开发技能将会在后续的学习中发挥重要作用。 将会学会的知识有: 编程语言:JavaScript, Solidity, (HTML, CSS) 完成前端与合约交互往往用的...
交易的签名
交易的签名理解收据receipt理解区块理解交易blockchain核心oracle 原理和实现forkId 解读布隆过滤器原理交易池分析TxList 解读MPT树区块同步geth源码学习——介绍How Geth starts its server 在阅读交易的签名之前,请先阅读 理解交易 以理解源码中交易的定义和实现,这里不做重复的说明。这篇文章暂时只关注逻辑和实现,密码学函数日后单独讨论。 核心接口 Signer core/types/transaction_signing.go 中主要定义了签名器 Signer,他是一个接口,封装了签名相关的方法。 123456789101112131415161718// Note that this interface is not a stable API and may change at any time to accommodate// new protocol rules.type Signer interface { // Sender returns the sender address of the...