eth

package
v1.3.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 29, 2016 License: GPL-3.0 Imports: 42 Imported by: 16

Documentation

Overview

Package eth implements the Ethereum protocol.

Index

Constants

View Source
const (
	NetworkId          = 1
	ProtocolMaxMsgSize = 10 * 1024 * 1024 // Maximum cap on the size of a protocol message
)
View Source
const (
	// Protocol messages belonging to eth/61
	StatusMsg                   = 0x00
	NewBlockHashesMsg           = 0x01
	TxMsg                       = 0x02
	GetBlockHashesMsg           = 0x03
	BlockHashesMsg              = 0x04
	GetBlocksMsg                = 0x05
	BlocksMsg                   = 0x06
	NewBlockMsg                 = 0x07
	GetBlockHashesFromNumberMsg = 0x08

	// Protocol messages belonging to eth/62 (new protocol from scratch)
	// StatusMsg          = 0x00 (uncomment after eth/61 deprecation)
	// NewBlockHashesMsg  = 0x01 (uncomment after eth/61 deprecation)
	// TxMsg              = 0x02 (uncomment after eth/61 deprecation)
	GetBlockHeadersMsg = 0x03
	BlockHeadersMsg    = 0x04
	GetBlockBodiesMsg  = 0x05
	BlockBodiesMsg     = 0x06

	// Protocol messages belonging to eth/63
	GetNodeDataMsg = 0x0d
	NodeDataMsg    = 0x0e
	GetReceiptsMsg = 0x0f
	ReceiptsMsg    = 0x10
)

eth protocol message codes

View Source
const (
	ErrMsgTooLarge = iota
	ErrDecode
	ErrInvalidMsgCode
	ErrProtocolVersionMismatch
	ErrNetworkIdMismatch
	ErrGenesisBlockMismatch
	ErrNoStatusMsg
	ErrExtraStatusMsg
	ErrSuspendedPeer
)

Variables

View Source
var ProtocolLengths = []uint64{17, 8, 9}

Number of implemented message corresponding to different protocol versions.

View Source
var ProtocolName = "eth"

Official short name of the protocol used during capability negotiation.

View Source
var ProtocolVersions = []uint{eth63, eth62, eth61}

Supported versions of the eth protocol (first is primary).

Functions

func GPUBench added in v1.3.1

func GPUBench(gpuid uint64)

func PrintOpenCLDevices added in v1.3.1

func PrintOpenCLDevices()

Types

type Config

type Config struct {
	DevMode bool
	TestNet bool

	Name         string
	NetworkId    int
	GenesisFile  string
	GenesisBlock *types.Block // used by block tests
	FastSync     bool
	Olympic      bool

	BlockChainVersion  int
	SkipBcVersionCheck bool // e.g. blockchain export
	DatabaseCache      int

	DataDir   string
	LogFile   string
	Verbosity int
	VmDebug   bool
	NatSpec   bool
	DocRoot   string
	AutoDAG   bool
	PowTest   bool
	ExtraData []byte

	MaxPeers        int
	MaxPendingPeers int
	Discovery       bool
	Port            string

	// Space-separated list of discovery node URLs
	BootNodes string

	// This key is used to identify the node on the network.
	// If nil, an ephemeral key is used.
	NodeKey *ecdsa.PrivateKey

	NAT  nat.Interface
	Shh  bool
	Dial bool

	Etherbase      common.Address
	GasPrice       *big.Int
	MinerThreads   int
	AccountManager *accounts.Manager
	SolcPath       string

	GpoMinGasPrice          *big.Int
	GpoMaxGasPrice          *big.Int
	GpoFullBlockRatio       int
	GpobaseStepDown         int
	GpobaseStepUp           int
	GpobaseCorrectionFactor int

	// NewDB is used to create databases.
	// If nil, the default is to create leveldb databases on disk.
	NewDB func(path string) (ethdb.Database, error)
}

type EthNodeInfo added in v1.3.2

type EthNodeInfo struct {
	Network    int      `json:"network"`    // Ethereum network ID (0=Olympic, 1=Frontier, 2=Morden)
	Difficulty *big.Int `json:"difficulty"` // Total difficulty of the host's blockchain
	Genesis    string   `json:"genesis"`    // SHA3 hash of the host's genesis block
	Head       string   `json:"head"`       // SHA3 hash of the host's best owned block
}

EthNodeInfo represents a short summary of the Ethereum sub-protocol metadata known about the host peer.

type Ethereum

type Ethereum struct {
	SolcPath string

	GpoMinGasPrice          *big.Int
	GpoMaxGasPrice          *big.Int
	GpoFullBlockRatio       int
	GpobaseStepDown         int
	GpobaseStepUp           int
	GpobaseCorrectionFactor int

	Mining       bool
	MinerThreads int
	NatSpec      bool
	DataDir      string
	AutoDAG      bool
	PowTest      bool
	// contains filtered or unexported fields
}

func New

func New(config *Config) (*Ethereum, error)

func (*Ethereum) AccountManager added in v0.9.17

func (s *Ethereum) AccountManager() *accounts.Manager

func (*Ethereum) AddPeer added in v0.9.17

func (self *Ethereum) AddPeer(nodeURL string) error

AddPeer connects to the given node and maintains the connection until the server is shut down. If the connection fails for any reason, the server will attempt to reconnect the peer.

func (*Ethereum) BlockChain added in v1.3.1

func (s *Ethereum) BlockChain() *core.BlockChain

func (*Ethereum) ChainDb added in v1.1.0

func (s *Ethereum) ChainDb() ethdb.Database

func (*Ethereum) ClientVersion added in v0.9.17

func (s *Ethereum) ClientVersion() string

func (*Ethereum) DappDb added in v1.1.0

func (s *Ethereum) DappDb() ethdb.Database

func (*Ethereum) Downloader added in v0.9.17

func (s *Ethereum) Downloader() *downloader.Downloader

func (*Ethereum) EthVersion added in v0.9.17

func (s *Ethereum) EthVersion() int

func (*Ethereum) Etherbase added in v0.9.17

func (s *Ethereum) Etherbase() (eb common.Address, err error)

func (*Ethereum) EventMux

func (s *Ethereum) EventMux() *event.TypeMux

func (*Ethereum) HTTPClient added in v1.3.1

func (self *Ethereum) HTTPClient() *httpclient.HTTPClient

HTTPClient returns the light http client used for fetching offchain docs (natspec, source for verification)

func (*Ethereum) IsListening

func (s *Ethereum) IsListening() bool

func (*Ethereum) IsMining added in v0.9.17

func (s *Ethereum) IsMining() bool

func (*Ethereum) MaxPeers

func (s *Ethereum) MaxPeers() int

func (*Ethereum) Miner

func (s *Ethereum) Miner() *miner.Miner

func (*Ethereum) Name

func (s *Ethereum) Name() string

func (s *Ethereum) Logger() logger.LogSystem { return s.logger }

func (*Ethereum) NetVersion added in v0.9.17

func (s *Ethereum) NetVersion() int

func (*Ethereum) Network added in v1.3.2

func (s *Ethereum) Network() *p2p.Server

Network retrieves the underlying P2P network server. This should eventually be moved out into a protocol independent package, but for now use an accessor.

func (*Ethereum) PeerCount

func (s *Ethereum) PeerCount() int

func (*Ethereum) Peers

func (s *Ethereum) Peers() []*p2p.Peer

func (*Ethereum) ResetWithGenesisBlock added in v0.9.17

func (s *Ethereum) ResetWithGenesisBlock(gb *types.Block)

func (*Ethereum) SetEtherbase added in v0.9.36

func (self *Ethereum) SetEtherbase(etherbase common.Address)

set in js console via admin interface or wrapper from cli flags

func (*Ethereum) SetSolc added in v0.9.23

func (self *Ethereum) SetSolc(solcPath string) (*compiler.Solidity, error)

set in js console via admin interface or wrapper from cli flags

func (*Ethereum) ShhVersion added in v0.9.17

func (s *Ethereum) ShhVersion() int

func (*Ethereum) Solc added in v0.9.23

func (self *Ethereum) Solc() (*compiler.Solidity, error)

func (*Ethereum) Start

func (s *Ethereum) Start() error

Start the ethereum

func (*Ethereum) StartAutoDAG added in v0.9.23

func (self *Ethereum) StartAutoDAG()

StartAutoDAG() spawns a go routine that checks the DAG every autoDAGcheckInterval by default that is 10 times per epoch in epoch n, if we past autoDAGepochHeight within-epoch blocks, it calls ethash.MakeDAG to pregenerate the DAG for the next epoch n+1 if it does not exist yet as well as remove the DAG for epoch n-1 the loop quits if autodagquit channel is closed, it can safely restart and stop any number of times. For any more sophisticated pattern of DAG generation, use CLI subcommand makedag

func (*Ethereum) StartForTest added in v0.9.17

func (s *Ethereum) StartForTest()

func (*Ethereum) StartMining added in v0.9.17

func (s *Ethereum) StartMining(threads int, gpus string) error

func (*Ethereum) Stop

func (s *Ethereum) Stop()

func (*Ethereum) StopAutoDAG added in v0.9.23

func (self *Ethereum) StopAutoDAG()

stopAutoDAG stops automatic DAG pregeneration by quitting the loop

func (*Ethereum) StopMining added in v0.9.17

func (s *Ethereum) StopMining()

func (*Ethereum) TxPool

func (s *Ethereum) TxPool() *core.TxPool

func (*Ethereum) WaitForShutdown

func (s *Ethereum) WaitForShutdown()

This function will wait for a shutdown and resumes main thread execution

func (*Ethereum) Whisper

func (s *Ethereum) Whisper() *whisper.Whisper

type GasPriceOracle added in v0.9.30

type GasPriceOracle struct {
	// contains filtered or unexported fields
}

GasPriceOracle recommends gas prices based on the content of recent blocks.

func NewGasPriceOracle added in v0.9.30

func NewGasPriceOracle(eth *Ethereum) *GasPriceOracle

NewGasPriceOracle returns a new oracle.

func (*GasPriceOracle) SuggestPrice added in v0.9.30

func (self *GasPriceOracle) SuggestPrice() *big.Int

SuggestPrice returns the recommended gas price.

type PeerInfo added in v0.9.17

type PeerInfo struct {
	Version    int      `json:"version"`    // Ethereum protocol version negotiated
	Difficulty *big.Int `json:"difficulty"` // Total difficulty of the peer's blockchain
	Head       string   `json:"head"`       // SHA3 hash of the peer's best owned block
}

PeerInfo represents a short summary of the Ethereum sub-protocol metadata known about a connected peer.

type ProtocolManager added in v0.9.17

type ProtocolManager struct {
	SubProtocols []p2p.Protocol
	// contains filtered or unexported fields
}

func NewProtocolManager added in v0.9.17

func NewProtocolManager(fastSync bool, networkId int, mux *event.TypeMux, txpool txPool, pow pow.PoW, blockchain *core.BlockChain, chaindb ethdb.Database) (*ProtocolManager, error)

NewProtocolManager returns a new ethereum sub protocol manager. The Ethereum sub protocol manages peers capable with the ethereum network.

func (*ProtocolManager) BroadcastBlock added in v0.9.17

func (pm *ProtocolManager) BroadcastBlock(block *types.Block, propagate bool)

BroadcastBlock will either propagate a block to a subset of it's peers, or will only announce it's availability (depending what's requested).

func (*ProtocolManager) BroadcastTx added in v0.9.17

func (pm *ProtocolManager) BroadcastTx(hash common.Hash, tx *types.Transaction)

BroadcastTx will propagate a transaction to all peers which are not known to already have the given transaction.

func (*ProtocolManager) NodeInfo added in v1.3.2

func (self *ProtocolManager) NodeInfo() *EthNodeInfo

NodeInfo retrieves some protocol metadata about the running host node.

func (*ProtocolManager) Start added in v0.9.17

func (pm *ProtocolManager) Start()

func (*ProtocolManager) Stop added in v0.9.17

func (pm *ProtocolManager) Stop()

Directories

Path Synopsis
Package downloader contains the manual full chain synchronisation.
Package downloader contains the manual full chain synchronisation.
Package fetcher contains the block announcement based synchonisation.
Package fetcher contains the block announcement based synchonisation.
package filters implements an ethereum filtering system for block, transactions and log events.
package filters implements an ethereum filtering system for block, transactions and log events.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL