首页 > 编程知识 正文

以太坊go代码,以太坊多久产生一个区块

时间:2023-05-06 09:04:19 阅读:33733 作者:18

go-ethereum的设计思路和模块组织形式===================================

以太网的目标是建立基于区块链技术执行智能合约的中心化平台。## 一. 区块链技术区块链是一种集中式数字计费技术,互不信任的节点共同维护区块链中的数据,每个节点复制完整的记录。## 二. 以太坊核心概念* EVM:以太网虚拟机、轻型虚拟机环境和以太网智能合约执行环境。 *会计:帐户分为两类:合同帐户和外部帐户。 合同账户主要存储执行的合同代码,外部账户存储以太网货币,对应具体公钥。 * Transaction:以太网上的交易。 从一个帐户到另一个帐户的消息。 包含以太网货币或此智能合约参数。 *运行在* Gas:以太网网络上的燃料在每次执行智能合约时都会消耗一定的燃料。 * Mine:采掘以太网通过工作量证明算法保证网络安全运行。 p2p网络:以太网分布式网络中的所有节点都处于平等地位,没有中央服务器。## 三. 以太坊模型以太网的本质是基于事务的状态机(transaction-based state machine ),以太网的状态有百万个事务,这些事务每个块都与以前的块链接在一起,在形成反向链表的区块链中添加智能合约,制作以太网。

交易要被认为有效,就必须经过验证过程,即开采(Mine )。 以太网上的矿工都可以尝试创建和验证块。 如果块有效,并且确定验证最早完成,则将其添加到主链中。 主链是以太网上最长的链。 如果同时有多个矿工包装了一个区块,再加上区块在网络中传播需要时间,就不可避免地会产生多条路径。 就是所谓的分歧。 为了防止出现多个链,以太网使用的是http://www.Sina.com/(greedyheaviestobservedsubtree )。 也就是说,选择计算完成最多的路径,块号越大,路径越长,表示开采所需的计算力越大。 由于成功地证实了新区块将受到一定以太网硬币的奖励,从经济学和博弈论的角度来看,选择主链最为合适。**GHOST 协议**以太网架构设计可以简单地分为三层:协议层、接口层和APP应用层。 协议层可以分为网络层和存储层。

从技术角度看,协议层主要包括P2P网络通信、分布式算法、加密签名和数据存储技术。 作为数据存储基础的比特币和以太网使用谷歌开源的LevelDB数据库。

接口层和协议层是完全分离的,确保了基于各种区块链的APP应用层业务的开发不受约束,包括分布式存储业务、机器学习和物联网,但交易时与协议层交互除外。

APP应用层主要出于区块链自身的特性,在不引用第三方机构的情况下提供中心化、不可篡改、安全可靠的场景APP。 主要包括金融服务、征信与权利管理、资源共享、投资管理、物联网与供应链等。 3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/3358 www.Sina.com.Sina.com

` ` ` golang |---accounts以太网帐户管理|---bmt二进制merkle----实现甜蜜灯泡trie|--- build主要是编译和构建的几个脚本和配置|---- ` ---abigen合同接口生成工具---bootnode实现网络发现的节点| |---evm以太网虚拟机| |---faucet | |---geth以太网的命令行

2psim 提供了一个工具来模拟http的API | |---puppeth 创建一个新的以太坊网络的向导 | |---rlpdump 提供RLP数据的格式化输出 | |---swarm swarm网络的接入点 | |---util 公共的组件 | |---wnode 这是一个简单的Whisper节点。 它可以用作独立的引导节点。此外,可以用于不同的测试和诊断目的。 |---common 提供了一些公共的工具类 |---consensus 以太坊的共识算法,包括ethhash, clique |---core 以太坊的核心数据结构和算法(虚拟机,状态,区块链,布隆过滤器) |---crypto 加密,数字签名和hash算法 |---eth 实现了以太坊的协议 |---ethclient 以太坊的RPC客户端 |---ethdb eth的数据库,主要是LevelDB及相应接口 |---event 实时事件处理 |---light 实现为以太坊轻量级客户端提供按需检索的功能 |---metrics 提供磁盘计数器 |---miner 以太坊的挖矿和共识算法 |---mobile 移动端使用的一些warpper |---node 以太坊的多种类型的节点 |---p2p 以太坊p2p网络协议 |---rlp 以太坊序列化和反序列化处理 |---rpc 远程方法调用 |---swarm swarm网络处理 |---trie 以太坊重要的数据结构MPT的实现 |---whisper whisper节点的协议 ```
## 七. 资料
[ 以太坊官方文档]( http://ethdocs.org/en/latest/index.html)
[ 以太坊设计原理]( https://github.com/ethereum/wiki/wiki/Design-Rationale)
[ 以太坊白皮书]( https://github.com/ethereum/wiki/wiki/White-Paper)
[ 以太坊黄皮书]( https://ethereum.github.io/yellowpaper/paper.pdf)

# go-ethereum源码解析 因为go ethereum是最被广泛使用的以太坊客户端, 所以后续的源码分析都从github上面的这份代码进行分析。 然后我使用的是windows 10 64位的环境。
### 搭建go ethereum调试环境 首先下载go安装包进行安装,因为GO的网站被墙,所以从下面地址下载。
    https://studygolang.com/dl/golang/go1.9.1.windows-amd64.msi
安装好之后,设置环境变量,把C:Gorrdgs目录添加到你的PATH环境变量, 然后增加一个GOPATH的环境变量,GOPATH的值设置为你的GO语言下载的代码路径(我设置的是C:GOPATH)

安装git工具,请参考网络上的教程安装git工具, go语言从github自动下载代码需要git工具的支持
打开命令行工具下载 go-ethereum的代码          go get github.com/ethereum/go-ethereum
命令执行成功之后,代码就会下载到下面这个目录,%GOPATH%srcgithub.comethereumgo-ethereum 如果执行过程中出现
    # github.com/ethereum/go-ethereum/crypto/secp256k1     exec: "gcc": executable file not found in %PATH%
则需要安装gcc工具,我们从下面地址下载并安装
    http://tdm-gcc.tdragon.net/download
接下来安装IDE工具。 我是用的IDE是JetBrains的Gogland。 可以在下面地址下载
    https://download.jetbrains.com/go/gogland-173.2696.28.exe
安装完成后打开IDE. 选择File -> Open -> 选择GOPATHsrcgithub.comethereumgo-ethereum目录打开。
然后打开go-ethereum/rlp/decode_test.go. 在编辑框右键选择运行, 如果运行成功,代表环境搭建完成。

### go ethereum 目录大概介绍 go-ethereum项目的组织结构基本上是按照功能模块划分的目录,下面简单介绍一下各个目录的结构,每个目录在GO语言里面又被成为一个Package,我理解跟Java里面的Package应该是差不多的意思。

    accounts     实现了一个高等级的以太坊账户管理     bmt         二进制的默克尔树的实现     build           主要是编译和构建的一些脚本和配置     cmd         命令行工具,又分了很多的命令行工具,下面一个一个介绍         /abigen     Source code generator to convert Ethereum contract definitions into easy to use, compile-time type-safe Go packages         /bootnode   启动一个仅仅实现网络发现的节点         /evm        以太坊虚拟机的开发工具, 用来提供一个可配置的,受隔离的代码调试环境         /faucet              /geth       以太坊命令行客户端,最重要的一个工具         /p2psim     提供了一个工具来模拟http的API         /puppeth    创建一个新的以太坊网络的向导         /rlpdump    提供了一个RLP数据的格式化输出         /swarm      swarm网络的接入点         /util       提供了一些公共的工具         /wnode      这是一个简单的Whisper节点。 它可以用作独立的引导节点。此外,可以用于不同的测试和诊断目的。     common          提供了一些公共的工具类     compression     Package rle implements the run-length encoding used for Ethereum data.     consensus       提供了以太坊的一些共识算法,比如ethhash, clique(proof-of-authority)     console         console类     contracts        core            以太坊的核心数据结构和算法(虚拟机,状态,区块链,布隆过滤器)     crypto          加密和hash算法,     eth         实现了以太坊的协议     ethclient       提供了以太坊的RPC客户端     ethdb           eth的数据库(包括实际使用的leveldb和供测试使用的内存数据库)     ethstats        提供网络状态的报告     event           处理实时的事件     les         实现了以太坊的轻量级协议子集     light           实现为以太坊轻量级客户端提供按需检索的功能     log         提供对人机都友好的日志信息     metrics         提供磁盘计数器     miner           提供以太坊的区块创建和挖矿     mobile          移动端使用的一些warpper     node            以太坊的多种类型的节点     p2p         以太坊p2p网络协议     rlp         以太坊序列化处理     rpc         远程方法调用     swarm           swarm网络处理     tests           测试     trie            以太坊重要的数据结构Package trie implements Merkle 甜甜的灯泡 Tries.     whisper         提供了whisper节点的协议。
可以看到以太坊的代码量还是挺大的,但是粗略看,代码结构还是挺好的。我希望先从一些比较独立的模块来进行分析。然后在深入分析内部的代码。重点可能集中在黄皮书里面没有涉及到的p2p网络等模块。







网址:http://www.qukuailianxueyuan.io/



欲领取造币技术与全套虚拟机资料

区块链技术交流QQ群:756146052  备注:CSDN

尹成学院微信:备注:CSDN





网址:http://www.qukuailianxueyuan.io/



欲领取造币技术与全套虚拟机资料

区块链技术交流QQ群:756146052  备注:CSDN

尹成学院微信:备注:CSDN

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。