E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
以太坊源码分析
以太坊源码分析
(24)core-state源码分析
core/state包主要为以太坊的statetrie提供了一层缓存层(cache)-database主要提供了trie树的抽象,提供trie树的缓存和合约代码长度的缓存。-journal主要提供了操作日志,以及操作回滚的功能。-state_object是account对象的抽象,提供了账户的一些功能。-statedb主要是提供了statetrie的部分功能。##database.godataba
尹成
·
2020-07-12 18:20
区块链
以太坊源码分析
(52)trie源码分析
包trie实现了MerklePatriciaTries,这里用简称MPT来称呼这种数据结构,这种数据结构实际上是一种Trie树变种,MPT是以太坊中一种非常重要的数据结构,用来存储用户账户的状态以及状态的变更,用来存储交易信息,用来存储交易的收据信息。MPT实际上是三种数据结构的组合,分别是Trie树,PatriciaTrie,和Merkle树。下面分别介绍这三种数据结构。##Trie树(引用介绍
尹成
·
2020-07-12 18:20
区块链
以太坊源码分析
(14)P2P分析
#概述Kademlia(简称Kad)是一种分布式哈希表技术,用于建立p2p网络拓扑结构。基本原理就是以两个节点ID的异或值作为两节点间的距离d,每个节点都将其他节点的信息存储到称之为K桶的表结构中,该表结构按照d的为1的最高bit位分层(可理解为桶索引),每层中存储最多K个节点信息。如下:|I|距离范围|邻居||:---:|:---------:|:-----------:||0|[2^0,2^1
尹成
·
2020-07-12 18:19
区块链
以太坊源码分析
(8)区块分析
##区块存储区块的存储是由leveldb完成的,leveldb的数据是以键值对存储的。在这里保存区块信息时,key一般是与hash相关的,value所保存的数据结构是经过RLP编码的。在代码中,core/database_util.go中封装了区块存储和读取相关的代码。在存储区块信息时,会将区块头和区块体分开进行存储。因此在区块的结构体中,能够看到Header和Body两个结构体。区块头(Head
尹成
·
2020-07-12 18:19
区块链
以太坊源码分析
(5)accounts代码分析
##1.personal.newAccount创建账户方法用户在控制台输入personal.newAccount会创建一个新的账户,会进入到ethapi.api中的newAccount方法中,这个方法会返回一个地址。```func(s*PrivateAccountAPI)NewAccount(passwordstring)(common.Address,error){acc,err:=fetchK
尹成
·
2020-07-12 18:19
区块链
以太坊源码分析
(23)core-state-process源码分析
##StateTransition状态转换模型/*TheStateTransitioningModel状态转换模型Astatetransitionisachangemadewhenatransactionisappliedtothecurrentworldstate状态转换是指用当前的worldstate来执行交易,并改变当前的worldstateThestatetransitioningmode
尹成
·
2020-07-12 18:19
区块链
以太坊源码分析
--MPT树
MPT(MerklePatriciaTries)是以太坊中存储区块数据的核心数据结构,它MerkleTree和PatriciaTree融合一个树形结构,理解MPT结构对之后学习以太坊区块header以及智能合约状态存储结构的模块源码很有帮助。首先来看下Merkle树:它的叶子是数据块的hash,从图中可以看出非叶子节点是其子节点串联字符串的hash,底层数据的任何变动都会影响父节点,这棵树的Mer
weixin_34293911
·
2020-07-12 09:30
以太坊源码分析
(1)——代码结构
一、说在最前本系列文章【
以太坊源码分析
】将边学习边更新,如未特殊说明,将默认为【go-ethereum-1.8.0】。
极地大王章
·
2020-07-12 04:12
以太坊
以太坊源码分析
---go-ethereum之MPT(Merkle-Patricia Trie)
本文微信公众号月牙寂道长文章链接为:https://mp.weixin.qq.com/s/vljKF9lI6l_fKu0_Nn0U7g本文图片可能不太清晰,看清晰版本的,可以看原文链接微信公众号链接。MPT(Merkle-PatriciaTrie)其实就是一个数据结构,在以太坊中用于存储用户账户的状态及其变更、交易信息、交易的收据信息。要讲MPT,就要讲讲MPT是如何演变来的。Trie图片来自ht
月牙寂
·
2020-07-11 22:26
golang
以太坊
源码分析
以太坊源码分析
---go-ethereum之p2p通信分析(2)
本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1519899372本文csdn博客链接:http://blog.csdn.net/screscent/article/details/79416318上一篇分析了p2p模块的初始化与start。继续上一篇分析。先回顾下p2p的初始化github.com/ethereum/go-ethereum/eth
月牙寂
·
2020-07-11 22:25
golang
区块链
以太坊
以太坊源码分析
:statedb
前言就如以太坊黄皮书讲的,以太坊是状态机,区块的产生,实际是状态迁移的过程。那以太坊是如何定义状态的?是如何迁移状态的?是怎么存储状态的?这篇文章就介绍什么是状态,以及是怎么存储的。状态基本知识状态的定义一个账户的信息,就是一个状态,而以太坊是所有状态的集合。比如,最开始的状态是:{A有10元,B有0元},后来A发起了交易,给B2元,状态变成{A有8元,B有2元},这中间的过程就是状态转移。以太坊
lessisbetter
·
2020-07-11 12:06
区块链
以太坊源码分析
之 P2P网络(一、基础类或类型描述)
区块链特辑:https://blog.csdn.net/fusan2004/article/details/80879343,欢迎查阅,原创作品,转载请标明!从这篇开始,我们将会围绕着以太坊和eos的源码对一个区块链平台系统的不同组成展开进一步的源码级分析,之所以选择P2P开始我们的征程,主要有两个原因,一是我们部门目前正在进行内部区块链平台的开发,我本人正好负责了其中p2p及网络部分的研发任务,
还是要学会仰望
·
2020-07-11 06:32
区块链
以太坊源码分析
之十Merkle Patricia Tree(MPT)
以太坊源码分析
之十MerklePatriciaTree(MPT)以太坊中,MPT是一个非常重要的数据结构,在以太坊中,帐户的交易信息、状态以及相应的状态变更,还有相关的交易信息等都使用MPT来进行管理。
fpcc
·
2020-07-11 06:23
blockchain
以太坊源码分析
—p2p节点发现与协议运行
##前言p2p(peertopeer)负责以太坊底层节点间的通信,主要包括底层节点发现(discover)和上层协议运行两大部分。##节点发现节点发现功能主要涉及Server\Table\udp这几个数据结构,它们有独自的事件响应循环,节点发现功能便是它们互相协作完成的。其中,每个以太坊客户端启动后都会在本地运行一个Server,并将网络拓扑中相邻的节点视为Node,而Table是Node的容器,
187J3X1
·
2020-07-11 03:08
区块链
以太坊源码学习
以太坊源码分析
—Ethash共识算法
Ethereum当前和Bitcoin一样,采用基于工作量证明(ProofofWork,PoW)的共识算法来产生新的区块。与Bitcoin不同的是,Ethereum采用的共识算法可以抵御ASIC矿机对挖矿工作的垄断地位,这个算法叫做Ethash。为什么要反ASICPoW的的核心是Hash运算,谁的Hash运算更快,谁就更有可能挖掘出新的区块,获得更多的经济利益。在Bitcoin的发展过程中,挖矿设备
187J3X1
·
2020-07-11 03:36
以太坊源码学习
以太坊源码分析
(18)以太坊交易执行分析
#以太坊交易执行分析在这里,将其整体串起来,从state_processor.Process函数开始,归纳一下其所作的处理。##1ProcessProcess根据以太坊规则运行交易信息来对statedb进行状态改变,以及奖励挖矿者或者是其他的叔父节点。Process返回执行过程中累计的收据和日志,并返回过程中使用的Gas。如果由于Gas不足而导致任何交易执行失败,将返回错误。**处理逻辑:**~~
尹成
·
2020-07-10 20:47
区块链
以太坊源码分析
(6)accounts账户管理分析
##数据结构分析以太坊的账户管理定义在accounts/manager.go中,其数据结构为:```//Managerisanoverarchingaccountmanagerthatcancommunicatewithvarious//backendsforsigningtransactions.typeManagerstruct{backendsmap[reflect.Type][]Backe
尹成
·
2020-07-10 20:47
以太坊源码分析
(2)go ethereum 目录大概介绍
go-ethereum项目的组织结构基本上是按照功能模块划分的目录,下面简单介绍一下各个目录的结构accounts实现了一个高等级的以太坊账户管理bmt二进制的默克尔树的实现build主要是编译和构建的一些脚本和配置cmd命令行工具,又分了很多的命令行工具,下面一个一个介绍/abigenSourcecodegeneratortoconvertEthereumcontractdefinitionsi
尹成
·
2020-07-10 20:46
区块链
以太坊源码分析
--MPT树
MPT(MerklePatriciaTries)是以太坊中存储区块数据的核心数据结构,它MerkleTree和PatriciaTree融合一个树形结构,理解MPT结构对之后学习以太坊区块header以及智能合约状态存储结构的模块源码很有帮助。首先来看下Merkle树:它的叶子是数据块的hash,从图中可以看出非叶子节点是其子节点串联字符串的hash,底层数据的任何变动都会影响父节点,这棵树的Mer
区块链技术头条
·
2020-07-10 17:12
区块链
以太坊
Solidity
区块链应用
区块链发展
以太坊源码分析
—Whisper
前言Whisper是以太坊中一项非常有趣的技术,它是一个基于身份的通信系统,被设计用于Dapp之间少量数据通信。Whisper协议运行在以太坊p2p协议框架之上,所有运行Whisper协议的节点(以下简称节点)组成一个Whisper网络。通过节点之间的消息转发,理论上,每个节点都可以收到所有Whisper消息。特性Whisper具有以下基本特性和概念通信加密每一条Whisper消息在网络上都是加密
187J3X1
·
2020-07-10 16:23
区块链
以太坊源码学习
以太坊源码分析
—账户的管理
#前言以太坊是一个巨大的状态机,在网络中,每一个全节点都保存着以太坊状态机的全部历史,只要愿意,我们可以查询到任何时刻的状态(黄皮书中WorldState),其中账户状态便是其中的一部分,这部分功能由主要由state包提供##基本概念####账户地址在以太坊中,无论是外部账户还是合约账户,都以一个160bit的数组表示地址,它是由特定椭圆曲线上的一个点表示的公钥经过KeccakHash算法截取而来
187J3X1
·
2020-07-10 15:51
区块链
以太坊源码学习
以太坊源码分析
-转账流程分析
以太坊源码分析
-以太坊启动前面我们分析以太坊的启动过程,在过程中已经创建了交易池(tx_pool),现在我们猜测一下转账的大概步骤:创建一笔交易,并发送接收到交易信息,然后做一些验证验证合法,将该交易放入交易池
weixin_30569033
·
2020-07-10 06:02
以太坊源码分析
-交易源码分析(一)
目录一.发起交易1.发送交易时参数的机构体对象2.SendTransaction()方法介绍2.1.toTransaction()方法2.2.调用wallet.SignTx(account,tx,chainID)对当前交易进行签名。2.2.1调用types.SignTx方法进行签名2.2.2调用WithSignature为交易设置签名2.2.3调用SignatureValues方法获取r,s,v字
火一样的男子
·
2020-07-09 08:38
以太坊
以太坊源码分析
(五) - geth的启动过程分析
先看下启动的日志:y@ubuntu:~/blockchain/Ethereum/go-ethereum-1.8.13$build/bin/geth--identity"TestNode1"--datadir"data0"--rpc--rpcapi"db,eth,net,web3"--port"30303"--networkid"29382"--ws--wsorigins="*"--rpccorsd
yzpyzp
·
2020-07-09 04:08
区块链
以太坊源码分析
以太坊源码分析
(39)geth启动流程分析
geth是我们的go-ethereum最主要的一个命令行工具。也是我们的各种网络的接入点(主网络main-net测试网络test-net和私有网络)。支持运行在全节点模式或者轻量级节点模式。其他程序可以通过它暴露的JSONRPC调用来访问以太坊网络的功能。如果什么命令都不输入直接运行geth。就会默认启动一个全节点模式的节点。连接到主网络。我们看看启动的主要流程是什么,涉及到了那些组件。##启动的
尹成
·
2020-07-09 03:08
区块链
以太坊源码分析
(12)交易数据分析
##交易的数据结构交易的数据结构定义在core.types.transaction.go中,结构如下:```typeTransactionstruct{datatxdata//cacheshashatomic.Valuesizeatomic.Valuefromatomic.Value}```交易的结构体中只有一个data字段,是txdata类型的。其他的hash,size,from都是缓存。txd
尹成
·
2020-07-09 03:08
区块链
以太坊源码分析
(37)eth以太坊协议分析
node中的服务的定义,eth其实就是实现了一个服务。typeServiceinterface{//ProtocolsretrievestheP2Pprotocolstheservicewishestostart.Protocols()[]p2p.Protocol//APIsretrievesthelistofRPCdescriptorstheserviceprovidesAPIs()[]rpc.
尹成
·
2020-07-09 03:08
区块链
以太坊源码分析
(11)eth目前的共识算法pow的整理
###eth目前的共识算法pow的整理#####涉及的代码子包主要有consensus,miner,core,geth```/consensus共识算法consensus.go1.Prepare方法2.CalcDifficulty方法:计算工作量3.AccumulateRewards方法:计算每个块的出块奖励4.VerifySeal方法:校验pow的工作量难度是否符合要求,返回nil则通过5.ve
尹成
·
2020-07-09 03:07
区块链
以太坊源码分析
-交易
以太坊源码分析
-交易机理先说一点区块链转账的基本概念和流程用户输入转账的地址和转入的地址和转出的金额系统通过转出的地址的私钥对转账信息进行签名(用于证明这笔交易确实有本人进行)系统对交易信息进行验证把这笔交易入到本地的
Omni-Space
·
2020-07-07 18:46
以太坊
/
ETH
以太坊
ETH
/
源码分析
以太坊源码分析
之四挖矿和共识之一挖矿主流程
之所以把这部分提前到这里来,也是想对比分析一下和比特币以及EOS的DPOS有什么不同。其实主要是前者,毕竟DPOS是不需要挖矿这个过程的。即使后来改成BFT-DPOS,也是只增加一个超级节点的分布式判定。比特币的POW使用的是块头哈希,算最小值,以太坊与其原理基本一样,不同的是,以太坊不再使用CPU算力,改用了DAG有向无环图。所以自成体系的来了一个ethash.一个个的分析,不要乱。一、挖矿先看
fpcc
·
2020-07-07 08:46
blockchain
以太坊源码分析
(一) - Ubuntu下编译安装go-ethereum以太坊客户端
本文主要来自go-ethereum的官方安装指南:https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu步骤:一、获取源码方法1:执行gitclonehttps://github.com/ethereum/go-ethereum方法2:在github上直接下载源码后解压即可二、安装go通过添
yzpyzp
·
2020-07-06 20:21
区块链
以太坊源码分析
以太坊源码分析
(7)Ethereum 资源分享
#AwesomeEthereum[![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)>collectionofbestresourcesfor
chunqi zhi
·
2020-07-06 12:59
区块链
golang
以太坊
以太坊源码分析
(四) - 以太坊整体架构和核心概念
以太坊目标以太坊的目标是基于区块链技术打造一个运行智能合约的去中心化平台。以太坊核心概念EVMEVM是以太坊中智能合约的运行环境。它不仅被沙箱封装起来,事实上它被完全隔离,也就是说运行在EVM内部的代码不能接触到网络、文件系统或者其它进程。甚至智能合约之间也只有有限的调用。EVM不是基于寄存器,而是基于栈的虚拟机。因此所有的计算都在一个被称为栈的区域执行。栈最大有1024个元素,每个元素256比特
yzpyzp
·
2020-07-06 11:39
区块链
以太坊源码分析
以太坊源码分析
(三) - 以太坊客户端Geth使用以及私有链测试
geth用法geth[选项]命令[命令选项][参数…]geth的常用选项--datadir"xxxx"//指定数据目录,用来存放区块链数据,状态数据,keystore数据等。--cachevalue//分配给内部缓存的内存,单位MB,默认为128--rpc//启用HTTP-RPC服务器--rpcaddrvalue//HTTP-RPC服务器接口地址(默认值:“localhost”),默认只允许本地连
yzpyzp
·
2020-07-06 11:39
区块链
以太坊源码分析
以太坊源码分析
(41)hashimoto源码分析
Hashimoto:I/OboundproofofworkAbstract:Usingacryptographichashfunctionnotasaproofofworkbyitself,butratherasageneratorofpointerstoashareddataset,allowsforanI/Oboundproofofwork.Thismethodofproofofworkisd
尹成
·
2020-07-06 10:59
区块链
以太坊源码分析
(32)eth-downloader-peer源码分析
queue给downloader提供了调度功能和限流的功能。通过调用Schedule/ScheduleSkeleton来申请对任务进行调度,然后调用ReserveXXX方法来领取调度完成的任务,并在downloader里面的线程来执行,调用DeliverXXX方法把下载完的数据给queue。最后通过WaitResults来获取已经完成的任务。中间还有一些对任务的额外控制,ExpireXXX用来控制
尹成
·
2020-07-06 10:59
区块链
以太坊源码分析
(34)eth-downloader源码分析
downloader主要负责区块链最开始的同步工作,当前的同步有两种模式,一种是传统的fullmode,这种模式通过下载区块头,和区块体来构建区块链,同步的过程就和普通的区块插入的过程一样,包括区块头的验证,交易的验证,交易执行,账户状态的改变等操作,这其实是一个比较消耗CPU和磁盘的一个过程。另一种模式就是快速同步的fastsync模式,这种模式有专门的文档来描述。请参考fastsync的文档。
尹成
·
2020-07-06 10:59
区块链
以太坊源码分析
-同步之Syncing接口
在节点同步的过程中,我们经常需要执行eth.syncing来查看当前的同步情况,本篇博客带领大家看一下syncingapi的源代码实现。Syncing方法源代码//Syncingreturnsfalseincasethenodeiscurrentlynotsyncingwiththenetwork.Itcanbeuptodateorhasnot//yetreceivedthelatestblock
二师兄-公众号-程序新视界
·
2020-07-06 07:47
区块链
区块链实践
以太坊源码分析
---go-ethereum之event
本文微信公众号月牙寂道长文章链接为:https://mp.weixin.qq.com/s/gdVIXq75MW3SrH6Of-wT2A本文图片可能不太清晰,看清晰版本的,可以看原文链接微信公众号链接。以太坊go-ethereum源码的模块划分非常清晰,所以其各个模块,几乎是相互独立的。有一个以太坊的架构图:图片来自:https://blog.csdn.net/s_lisheng/article/d
月牙寂
·
2020-07-05 11:28
golang
以太坊
源码分析
以太坊源码分析
---go-ethereum之p2p通信分析(1)
本文csdn博客链接为:http://blog.csdn.net/screscent/article/details/79416251本文QQ空间链接为:https://user.qzone.qq.com/29185807/blog/1519889272先介绍一篇文章,也是介绍以太坊p2p通信的,http://blog.csdn.net/teaspring/article/details/7845
月牙寂
·
2020-07-05 11:24
golang
区块链
以太坊
以太坊源码分析
账号
AccountManager创建p2p节点创建时会创建accountmanagernode.New/NewcreatesanewP2Pnode,readyforprotocolregistration.funcNew(conf*Config)(*Node,error){//EnsurethattheAccountManagermethodworksbeforethenodehasstarted./
hasika
·
2020-07-05 07:00
以太坊源码分析
目录感谢尹成老师的劳动成果,博客地址
以太坊源码分析
(1):go-ethereum的设计思路及模块组织形式
以太坊源码分析
(2):goethereum目录大概介绍
以太坊源码分析
(3):以太坊交易手续费明细
以太坊源码分析
jason_cuijiahui
·
2020-07-04 19:48
2018
blockchain
ethereum
以太坊源码分析
(二) - GoLand导入并编译以太坊源码go-ethereum
从github下载go-ethereum源码,然后用GoLand打开go-ethereum源码后,并不能自动成功编译,任意打开一个go文件,可以看到import那块代码里的github相关的会报错,提示找不到:gocan’tfindimport:github.com/…,如interfaces.go这个文件中的:import("context""errors""math/big""github.c
yzpyzp
·
2020-07-04 04:29
区块链
以太坊源码分析
以太坊源码分析
(1)go-ethereum的设计思路及模块组织形式
go-ethereum的设计思路及模块组织形式===================================以太坊的目标是基于区块链技术打造一个运行智能合约的去中心化平台。##一.区块链技术区块链属于一种去中心化的数字记账技术,区块链数据由彼此互不信任的节点共同维护,每个节点复制一份完整的记录。##二.以太坊核心概念*EVM:以太坊虚拟机,轻量级的虚拟机环境,是以太坊智能合约的运行环境。*
尹成
·
2020-07-04 04:10
区块链
go-ethereum-code-analysis
以太坊源码分析
分析go-ethereum的过程,我希望从依赖比较少的底层技术组件开始,慢慢深入到核心逻辑。目录go-ethereum代码阅读环境搭建以太坊黄皮书符号索引rlp源码解析trie源码分析ethdb源码分析rpc源码分析p2p源码分析eth协议源码分析core源码分析区块链索引chain_indexer源码分析布隆过滤器索引bloombits源码分析以太坊的trie树管理回滚等操作state源码分析交
Omni-Space
·
2020-07-04 01:42
以太坊
ETH
/
源码分析
【我的架构师之路】- 说一说go中的sync包
如果写链相关的篇幅太长,太耗时(下个月继续
以太坊源码分析
吧),算了今天就写一写go的一些源码分析吧。虽然在go
GavinXujiacan
·
2020-07-02 17:54
golang
以太坊源码分析
之四挖矿和共识之二挖矿细节及共识
以太坊源码分析
之四挖矿和共识之二挖矿细节及共识这里详细说明一下ethash的DAG,然后再分析一下共识,这样就可以比较全面的呈现以太坊的挖矿和共识。
fpcc
·
2020-07-02 00:36
blockchain
以太坊源码分析
(2)——以太坊APP对象
前言从这一节开始,我将开始以太坊代码全覆盖讲解,讲解的流程是:以太坊程序入口基本框架以太坊协议发送一笔交易后发生了什么启动挖矿以太坊共识p2p网络阅读本系列文章,将默认读者具备一定的程序基础,并对Go语言特性有一定的了解。如有需要,请自行翻阅Go语言相关文档。go语言中文网点击这里话不多说,现在开始。一、以太坊程序入口1.1main函数以太坊的主程是编译出来的geth程序运行时,程序入口跟其他的高
极地大王章
·
2020-06-27 08:33
以太坊
以太坊源码分析
--挖矿与共识
ethereum.jpeg挖矿(mine)是指矿工节点互相竞争生成新区块以写入整个区块链获得奖励的过程.共识(consensus)是指区块链各个节点对下一个区块的内容形成一致的过程在以太坊中,miner包向外提供挖矿功能,consensus包对外提供共识引擎接口挖矿miner包主要由miner.goworker.goagent.go三个文件组成Miner负责与外部交互和高层次的挖矿控制worker
187J3X1
·
2020-03-06 04:52
以太坊源码分析
--交易的执行
ethereum.jpeg以太坊是一个运行智能合约的平台,被称作可编程的区块链,允许用户将编写的智能合约部署在区块链上运行。而运行合约的主体便是以太坊虚拟机(EVM)区块交易合约区块链由区块(Block)组成,而区块中打包一定数量的交易(Transaction),交易可能是一个单纯的转账操作,也可能是调用一个智能合约,无论是哪一种,EVM在运行(excute)交易时都会创建合约(Contract)
187J3X1
·
2020-02-13 08:26
上一页
1
2
3
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他