Haskell(一)入门
Haskell(一)入门Haskell(二)函数式编程Haskell(三) MonadHaskell(四)总结和工具链Haskell(五) 总结和展望Haskell(六) Project Euler 练习1-26 前言 这个系列主要介绍典型的函数式程序设计语言(Functional programming languages,FP)和逻辑式程序设计语言(Logic programming languages,LP),将会分别以 Haskell 和 datalog(主要是 souffle)作为例子,简单的入门和理解。 理解典型的 FP 对于深入学习程序设计语言挺好处的。我们先从 haskell 开始 参考资料: haskell 官网 Haskell 趣学指南,英文原版也很不错。 快速查阅库文档 最推荐的查阅手册,能够直接点击 Quick Jump 搜索关键词,这也是我最常用的文档 官方 WiKi如果有不懂的术语,那么很推荐先在 wiki 上查找。 可以参考的入门课程 资源汇总 交流学习群、交流学习群...
区块同步
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读TxList 解读oracle 原理和实现交易池分析MPT树区块同步geth源码学习——介绍How Geth starts its server 博主的朋友写的 看到core\blockchain.go的时候大量涉及该部分知识,故在此参考大佬博客加之自己的理解先行总结 本文仅仅是简单总结了一下文件结构和重要函数功能,详细函数分析请参考downloader 同步 文件结构 downloader 模块的代码位于 eth/downloader 目录下。主要的功能代码分别是: downloader.go :实现了区块同步逻辑 peer.go :对区块各个阶段的组装,下面的各个FetchXXX 就是很依赖这个模块。 queue.go :对eth/peer.go的封装 statesync.go :同步state对象 注意: downloader是一个下载器,从远程网络节点中获取 hashes 和...
MPT树
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读TxList 解读oracle 原理和实现交易池分析MPT树区块同步geth源码学习——介绍How Geth starts its server 由于MPT 树不属于core部分所以有些地方并没有详细的解读,仅供参考。 由于该部分网上的解读都差异不大,故该文章大部分是进行整合,并且加上个人阅读源码的一些看法,所有图片都已经上传到个人仓库。 感谢前辈的精湛分析! 前缀树 Trie 前缀树(又称字典树),通常来说,一个前缀树是用来存储字符串的。前缀树的每一个节点代表一个字符串(前缀)。每一个节点会有多个子节点,通往不同子节点的路径上有着不同的字符。子节点代表的字符串是由节点本身的原始字符串,以及通往该子节点路径上所有的字符组成的。如下图所示: Trie 的结点看上去是这样子的: [ [Ia, Ib, … I*], value] 其中 [Ia, Ib, ... I*] 在本文中我们将其称为结点的 索引数组 ,它以 key...
布隆过滤器原理
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读TxList 解读oracle 原理和实现交易池分析MPT树区块同步geth源码学习——介绍How Geth starts its server 介绍 布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 可见,它解决的核心问题是 检索一个元素是否在一个集合中。原理大致如下: 当一个元素被加入集合时,通过 K 个散列函数将这个元素映射成一个二进制数组中的 K 个位置,把这些位置的值设置为 1。检索时,我们只要观察这些对应的位置的值是不是都是 1 就(大约)知道集合中有没有检索的元素:如果这 K 个位置中有任何一个 0,则被检索元素一定不在集合中;如果都是...
forkId 解读
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读TxList 解读oracle 原理和实现交易池分析MPT树区块同步geth源码学习——介绍How Geth starts its server EIP-2124 因为 core/forkId 包是 EIP-2124 的实现,因此我们先了解 EIP-2124 的内容。 目的 记住以太坊是向后兼容! 以太坊节点之前寻找其他节点的方式是:随机的选择可以连接的节点,再去判断节点是否对自己有用。但是其他的节点可能是主网节点、测试网节点、私网节点、共识机制不一致的节点,这样“盲目”的寻找会浪费资源。 于是这个提案希望在连接前,其他节点可以发送自己的链配置,实现精确连接到有用节点。这个传递的信息在提案中被称作 fork identifier,它实现如下功能: 如果两个节点在不同的网络上,他们不应该考虑连接。 如果硬分叉通过,升级的节点应该拒绝未升级的节点。 如果两条链有相同的创世区块配置和链配置,但没有分叉(ETH /...
TxList 解读
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读TxList 解读oracle 原理和实现交易池分析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]...
oracle 原理和实现
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读TxList 解读oracle 原理和实现交易池分析MPT树区块同步geth源码学习——介绍How Geth starts its server oracle 介绍 oracle 翻译是预言机,英文中的意思是预卜先知,知晓消息的意思。在区块链里用于合约获取链外的数据。例如你想把比特币转换成美元,如果在链上进行,那么就需要从链外获取比特币和美元的汇率,例如price feed oracles。但是以太坊是封闭的系统,直接与外界交互很容易破坏 EVM 安全性,因此才用了预言机作为中间层,沟通链上和链外。详细可见chainlink 的文档和官方文档。 在以太坊上,oracle 是已经部署的智能合约和链外组件,它可以查询 API 提供的信息,然后给其他合约发消息,更新合约的数据。但是只相信唯一的数据源也是很不可靠的方式,通常是多个数据源。我们可以自己创建,也可以直接使用服务商提供的服务。 一般 oracle...
交易池分析
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读TxList 解读oracle 原理和实现交易池分析MPT树区块同步geth源码学习——介绍How Geth starts its server core\txpool.go 前言 这篇文章是博主的朋友写的。 在写这篇文章的时候,笔者已经完完全全看完该代码文件的每一行代码,但是由于代码量过于庞大,所以自然存在边看边忘的情况,所以在此写下这篇文章记录自己的理解以及收获,笔者能力有限,错误之处在所难免,还望包容 由于该文件代码量过大,而且笔者还同时在看该仓库其他的代码文件,所以笔者决定分期写,一边阅读其他的源码文件,一边回顾txPool.go同时写下阅读笔记 而且大部分的理解已经记录在源码文件中了,所以阅读源码中的笔记更能帮助理解 一些重要概念 可执行交易和非可执行交易。可执行交易是指从交易池中择优选出的一部分交易可以被执行,打包到区块中。非可执行交易则相反,任何刚进入交易池的交易均属于非可执行状态,在某一个时刻才会提升为可执行状态。 本地交易...
blockchain核心
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读TxList 解读oracle 原理和实现交易池分析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 解读TxList 解读oracle 原理和实现交易池分析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...