• 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节点

  • 相关阅读:
    机器学习到深度学习资料
    安装CentOS 6停在selinux-policy-targeted卡住的问题解决
    U盘安装Ubuntu 16.04出现:Failed to load ldlinux.c32
    Ubuntu 16.04下使用UNetbootin制作的ISO镜像为U盘启动出现:Missing Operating System (mbr.bin)
    为什么Linux的Fdisk分区时First Sector为2048?
    Windows下将ISO镜像制作成U盘启动的工具(U盘启动工具/UltraISO/Rufus/Universal-USB)
    CentOS 6.9安装类型选择(Basic Server/Web Server)
    Java中String与byte[]的转换
    IntelliJ IDEA插件-翻译插件
    Mycat查询时出现:Error Code: 1064. can't find any valid datanode
  • 原文地址:https://www.cnblogs.com/xuesu/p/10544250.html
Copyright © 2020-2023  润新知