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...
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...
理解区块
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读交易池分析TxList 解读oracle 原理和实现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 解读交易池分析TxList 解读oracle 原理和实现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核心布隆过滤器原理forkId 解读交易池分析TxList 解读oracle 原理和实现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...
(一)初识软件分析
(一)初识软件分析(二)数据流分析基础(三)Datalog和程序分析(四)静态单赋值和稀疏分析(五)过程间分析(六)指向分析(七)抽象解释(八)SMT和符号执行(九)体验静态分析工具(十)Fuzzing 基础 这篇文章,或者说软件分析这一个系列更像是学习笔记,绝大部分内容来自于“北大-熊英飞-软件分析”,以及南大的静态分析课程,感谢他们提供高质量的公开课,课程资源将会在文末给出。除了老师们的公开课,文章中可能会包括我自己的总结以及从其他学习资料(如博客、书等)中的内容,补充完善这篇文章。 为什么学习智能合约安全需要学习软件分析呢?因为,合约的代码安全非常重要,而代码的分析,乃至代码编译成的字节码的分析,可以笼统的归纳为软件工程的内容。当合约审计人员熟悉了合约审计工具的使用,能够避免目前已经被发现的漏洞时,如果还希望再进一步,从 DApp...