Go-ethereum源码解析-Part I
1. 整体概览
makefile
CANDY:
.PHONY: geth android ios geth-cross swarm evm all test clean
已知phony 目标并非是由其它文件生成的实际文件,make 会跳过隐含规则搜索。这就是声明phony 目标会改善性能的原因,即使你并不担心实际文件存在与否。
/CANDY
入口主要与两个文件有关 build/env.sh build/ci.go
依赖的其他库有:
env GOBIN= go get -u golang.org/x/tools/cmd/stringer
env GOBIN= go get -u github.com/kevinburke/go-bindata/go-bindata
env GOBIN= go get -u github.com/fjl/gencodec
env GOBIN= go get -u github.com/golang/protobuf/protoc-gen-go
env GOBIN= go install ./cmd/abigen
env GOBIN= go install ./cmd/swarm/mimegen
在ci.go里可以了解到,
主要有两部分
1. ethereum
包含
a. abigen: 把以太坊合约定义编译为go package
b. bootnode 实现了网络发现的节点
c. evm 虚拟机,虚拟机开发工具,用于提供一个可配置,受隔离的代码调试环境
d. geth 命令行客户端
e. puppeth 管理以太网专用网络?
f. rlpdump 打印RLP结构的开发工具
g. wnode Ethereum Whisper诊断工具
h. clef 以太坊账户管理工具
2. swarm
目前推测可能与跨平台有关?
看到build里还有nsis,感觉很亲切
外部的文件夹,docs里面有代码质量的审计报告, vendor里有第三方代码,装着源码的共有以下34?个
a. accounts 以太坊账户管理
b. cmd 命令行工具的包装
c. common
d. consensus 一些共识算法
e. console
f. contracts
g. core 核心算法(虚拟机,状态,区块链,布隆过滤器)
h. crpto 加密和hash算法
i. dashboard 控制台
j. eth 实现以太坊协议
k. ethclient 以太坊RPC客户端
l. ethdb eth数据库,包含实际使用的和测试用的
m. ethstats 提供网络状态的报告
n. event 处理实时事件
o. graphql
p. internal
q. les 轻量级协议子集
r. light 为轻量级客户端按需检索
s. log
t. metrics 磁盘计数器
u. miner 区块创建和挖矿
v. mobile 移动端使用的一些wrapper
w. node 多种类型的节点
x. p2p p2p网络协议
y. params
z. rlp 序列化处理
aa. rpc 远程方法调用
ab.signer
ac. swarm
ad. tests
ae. trie
af. whisper whisper节点协议
目前看来最可能成为突破口的是tests,其次是cmd或者ethclient这类,最应该关注的是p2p,consensus和contracts, evm。需要格外注意whisper,必须要把clef相关的源码了解透彻
最后最好把docs中提到的漏洞理解
接下来看他人的解析
1. cmd文件夹下
a. abigen contract2go
b. bootnode 仅仅实现网络发现的节点
c. evm 虚拟机开发工具,用于提供一个可配置的,受隔离的代码调试环境
d. faucet 防止攻击者耗尽所有funds?或者积累足够的Ether来邮件轰炸
CANDY
What is ether?
用来支付操作以太坊平台的费用
/CANDY
e. geth 命令行客户端
f. p2psim 模拟p2p网络
g. puppeth 创建新以太坊网络的向导
h. rlpdump RLP数据的格式化输出
i. swam swam网络接入点
j. util
k. wnode 简单的whisper节点
Go-ethereum源码解析-Part I的更多相关文章
- 以太坊go-ethereum签名部分源码解析
以太坊go-ethereum签名部分源码解析 golang标准库里的crypto/ecdsa椭圆曲线加密算法所提供的函数有: ecdsa.PublicKey结构体通过持有一个elliptic,Curv ...
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- jQuery2.x源码解析(缓存篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 缓存是jQuery中的又一核心设计,jQuery ...
- Spring IoC源码解析——Bean的创建和初始化
Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...
- jQuery2.x源码解析(构建篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 笔者阅读了园友艾伦 Aaron的系列博客< ...
- jQuery2.x源码解析(设计篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 这一篇笔者主要以设计的角度探索jQuery的源代 ...
- jQuery2.x源码解析(回调篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 通过艾伦的博客,我们能看出,jQuery的pro ...
随机推荐
- Thinking in work
Scheduler? Realtime? sure SCI? Power supply and ECU life. how to assure? EMC?
- 原生js开发,无依赖、轻量级的现代浏览器图片懒加载插件,适合在移动端开发使用
优势 1.原生js开发,不依赖任何框架或库 2.支持将各种宽高不一致的图片,自动剪切成默认图片的宽高 比如说你的默认图片是一张正方形的图片,则各种宽度高度不一样的图片,自动剪切成正方形. 完美解决移动 ...
- 【题解】Luogu P1344 [USACO4.4]追查坏牛奶Pollutant Control
原题传送门 看到这种题,应该一眼就能知道考的是最小割 没错这题就是如此简单,跑两遍最大流(最小割=最大流),一次边权为题目所给,一次边权为1 还有一种优化,优化后只需跑一次最大流,把每条边的权值改成w ...
- Oracle 12 Rman增量备份
增量备份 增量备份主要作用是仅复制自上次备份以来已更改的数据块.您可以使用RMAN创建数据文件,表空间或整个数据库的增量备份. 将增量备份作为策略的一部分的主要原因是: 用于基于增量更新备份的策略,其 ...
- mysql 删除重复数据
1在日常使用mysql中 前端页面点击次数过多 mysql就会容易产生冗余数据,那这些数据该怎么删除呢 说下思路 查询重复字段id 查询重复字段最小id 删除重复字段ID 保留最小ID 查询重复记录这 ...
- Vue学习——使用vue-cli搭建一个简单的本地vue项目
前提 安装好node.js.npm.vue-cli.为什么要先安装这些,建议查看https://www.cnblogs.com/jixue/p/10673875.html,这个对于vue-cli理解很 ...
- Android中粗字体
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页面里面有普通字体.中粗字体.加粗字体.对于IOS的小伙伴,分分钟搞定,但是对于Android开发的我,瞬间懵逼了.WTF! 安卓只有粗和不 ...
- flutter插件汇总2
作者:知乎用户链接:https://www.zhihu.com/question/307594373/answer/568969429来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- 使用教育邮箱激活JetBrains全家桶
如果你还有在校时的邮箱,比如your_name@xxx.edu或者your_name@xxx.edu.cn的邮箱,那么你可以免费激活JetBrains全家桶. JetBrains Toolbox 专业 ...
- aop(权限控制)
创建sysContext (管理请求) package com.tp.soft.common.util; import javax.servlet.http.HttpServletRequest; i ...