Documentation ¶
Index ¶
- Variables
- func AddressFromMessage(msg Message) []byte
- func CalcDifficulty(block, parent *types.Block) *big.Int
- func CalcGasLimit(parent, block *types.Block) *big.Int
- func CalculateTD(block, parent *types.Block) *big.Int
- func Disassemble(script []byte) (asm []string)
- func GenesisBlock(db ethutil.Database) *types.Block
- func IsKnownBlockErr(e error) bool
- func IsNonceErr(err error) bool
- func IsOutOfGasErr(err error) bool
- func IsParentErr(err error) bool
- func IsTDError(e error) bool
- func IsUncleErr(err error) bool
- func IsValidationErr(err error) bool
- func MakeContract(msg Message, state *state.StateDB) *state.StateObject
- func MessageCreatesContract(msg Message) bool
- func MessageGasValue(msg Message) *big.Int
- func ParentError(hash []byte) error
- func UncleError(str string) error
- type AccountChange
- type Backend
- type BlockProcessor
- func (sm *BlockProcessor) AccumulateRewards(statedb *state.StateDB, block, parent *types.Block) error
- func (self *BlockProcessor) ApplyTransaction(coinbase *state.StateObject, statedb *state.StateDB, block *types.Block, ...) (*types.Receipt, *big.Int, error)
- func (self *BlockProcessor) ApplyTransactions(coinbase *state.StateObject, statedb *state.StateDB, block *types.Block, ...) (types.Receipts, types.Transactions, types.Transactions, types.Transactions, ...)
- func (sm *BlockProcessor) GetLogs(block *types.Block) (logs state.Logs, err error)
- func (sm *BlockProcessor) Process(block *types.Block) (td *big.Int, err error)
- func (sm *BlockProcessor) TransitionState(statedb *state.StateDB, parent, block *types.Block, transientProcess bool) (receipts types.Receipts, err error)
- func (sm *BlockProcessor) ValidateBlock(block, parent *types.Block) error
- type ChainEvent
- type ChainManager
- func (self *ChainManager) CalcTotalDiff(block *types.Block) (*big.Int, error)
- func (self *ChainManager) CurrentBlock() *types.Block
- func (self *ChainManager) Export() []byte
- func (bc *ChainManager) Genesis() *types.Block
- func (self *ChainManager) GetAccount(addr []byte) *state.StateObject
- func (self *ChainManager) GetAncestors(block *types.Block, length int) (blocks []*types.Block)
- func (self *ChainManager) GetBlock(hash []byte) *types.Block
- func (self *ChainManager) GetBlockByNumber(num uint64) *types.Block
- func (self *ChainManager) GetBlockHashesFromHash(hash []byte, max uint64) (chain [][]byte)
- func (self *ChainManager) GetUnclesInChain(block *types.Block, length int) (uncles []*types.Header)
- func (bc *ChainManager) HasBlock(hash []byte) bool
- func (self *ChainManager) InsertChain(chain types.Blocks) error
- func (self *ChainManager) LastBlockHash() []byte
- func (bc *ChainManager) NewBlock(coinbase []byte) *types.Block
- func (bc *ChainManager) Reset()
- func (self *ChainManager) SetProcessor(proc types.BlockProcessor)
- func (self *ChainManager) State() *state.StateDB
- func (self *ChainManager) Status() (td *big.Int, currentBlock []byte, genesisBlock []byte)
- func (bc *ChainManager) Stop()
- func (self *ChainManager) Td() *big.Int
- func (self *ChainManager) TransState() *state.StateDB
- func (self *ChainManager) TxState() *state.StateDB
- type ChainSplitEvent
- type Execution
- type Filter
- func (self *Filter) FilterLogs(logs state.Logs) state.Logs
- func (self *Filter) Find() state.Logs
- func (self *Filter) SetAddress(addr [][]byte)
- func (self *Filter) SetEarliestBlock(earliest int64)
- func (self *Filter) SetLatestBlock(latest int64)
- func (self *Filter) SetMax(max int)
- func (self *Filter) SetOptions(options FilterOptions)
- func (self *Filter) SetSkip(skip int)
- func (self *Filter) SetTopics(topics [][]byte)
- type FilterOptions
- type KnownBlockError
- type Message
- type NewBlockEvent
- type NewMinedBlockEvent
- type NonceErr
- type OutOfGasErr
- type ParentErr
- type PendingBlockEvent
- type StateQuery
- type StateTransition
- func (self *StateTransition) AddGas(amount *big.Int)
- func (self *StateTransition) BuyGas() error
- func (self *StateTransition) Coinbase() *state.StateObject
- func (self *StateTransition) From() *state.StateObject
- func (self *StateTransition) GasUsed() *big.Int
- func (self *StateTransition) RefundGas()
- func (self *StateTransition) To() *state.StateObject
- func (self *StateTransition) TransitionState() (ret []byte, err error)
- func (self *StateTransition) UseGas(amount *big.Int) error
- type TDError
- type TxMsg
- type TxPool
- func (self *TxPool) Add(tx *types.Transaction) error
- func (self *TxPool) AddTransactions(txs []*types.Transaction)
- func (pool *TxPool) Flush()
- func (self *TxPool) GetTransactions() (txs types.Transactions)
- func (pool *TxPool) RemoveInvalid(query StateQuery)
- func (self *TxPool) RemoveSet(txs types.Transactions)
- func (self *TxPool) Size() int
- func (pool *TxPool) Start()
- func (pool *TxPool) Stop()
- func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error
- type TxPoolHook
- type TxPostEvent
- type TxPreEvent
- type TxProcessor
- type UncleErr
- type VMEnv
- func (self *VMEnv) AddLog(log state.Log)
- func (self *VMEnv) BlockNumber() *big.Int
- func (self *VMEnv) Call(me vm.ContextRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error)
- func (self *VMEnv) CallCode(me vm.ContextRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error)
- func (self *VMEnv) Coinbase() []byte
- func (self *VMEnv) Create(me vm.ContextRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, vm.ContextRef)
- func (self *VMEnv) Depth() int
- func (self *VMEnv) Difficulty() *big.Int
- func (self *VMEnv) GasLimit() *big.Int
- func (self *VMEnv) GetHash(n uint64) []byte
- func (self *VMEnv) Origin() []byte
- func (self *VMEnv) SetDepth(i int)
- func (self *VMEnv) SetVmType(t vm.Type)
- func (self *VMEnv) State() *state.StateDB
- func (self *VMEnv) Time() int64
- func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error
- func (self *VMEnv) Value() *big.Int
- func (self *VMEnv) VmType() vm.Type
- type ValidationErr
Constants ¶
This section is empty.
Variables ¶
var ( BlockNumberErr = errors.New("block number invalid") BlockFutureErr = errors.New("block time is in the future") )
var BlockReward *big.Int = big.NewInt(1.5e+18)
var EmptyListRoot = crypto.Sha3(ethutil.Encode(""))
var EmptyShaList = crypto.Sha3(ethutil.Encode([]interface{}{}))
var (
ErrInvalidSender = errors.New("Invalid sender")
)
var ZeroHash160 = make([]byte, 20)
var ZeroHash256 = make([]byte, 32)
var ZeroHash512 = make([]byte, 64)
Functions ¶
func AddressFromMessage ¶
func Disassemble ¶
func IsKnownBlockErr ¶
func IsNonceErr ¶
func IsOutOfGasErr ¶
func IsParentErr ¶
func IsUncleErr ¶
func IsValidationErr ¶
func MakeContract ¶
func MakeContract(msg Message, state *state.StateDB) *state.StateObject
Converts an transaction in to a state object
func MessageCreatesContract ¶
func MessageGasValue ¶
func ParentError ¶
func UncleError ¶
Types ¶
type AccountChange ¶
type AccountChange struct {
Address, StateAddress []byte
}
type Backend ¶
type Backend interface { BlockProcessor() *BlockProcessor ChainManager() *ChainManager TxPool() *TxPool PeerCount() int IsListening() bool Peers() []*p2p.Peer KeyManager() *crypto.KeyManager Db() ethutil.Database EventMux() *event.TypeMux }
type BlockProcessor ¶
type BlockProcessor struct { // Proof of work used for validating Pow pow.PoW // contains filtered or unexported fields }
func NewBlockProcessor ¶
func NewBlockProcessor(db ethutil.Database, txpool *TxPool, chainManager *ChainManager, eventMux *event.TypeMux) *BlockProcessor
func (*BlockProcessor) AccumulateRewards ¶
func (*BlockProcessor) ApplyTransaction ¶
func (*BlockProcessor) ApplyTransactions ¶
func (self *BlockProcessor) ApplyTransactions(coinbase *state.StateObject, statedb *state.StateDB, block *types.Block, txs types.Transactions, transientProcess bool) (types.Receipts, types.Transactions, types.Transactions, types.Transactions, error)
func (*BlockProcessor) Process ¶
Process block will attempt to process the given block's transactions and applies them on top of the block's parent state (given it exists) and will return wether it was successful or not.
func (*BlockProcessor) TransitionState ¶
func (*BlockProcessor) ValidateBlock ¶
func (sm *BlockProcessor) ValidateBlock(block, parent *types.Block) error
Validates the current block. Returns an error if the block was invalid, an uncle or anything that isn't on the current block chain. Validation validates easy over difficult (dagger takes longer time = difficult)
type ChainManager ¶
type ChainManager struct {
// contains filtered or unexported fields
}
func NewChainManager ¶
func NewChainManager(db ethutil.Database, mux *event.TypeMux) *ChainManager
func (*ChainManager) CalcTotalDiff ¶
func (*ChainManager) CurrentBlock ¶
func (self *ChainManager) CurrentBlock() *types.Block
func (*ChainManager) Export ¶
func (self *ChainManager) Export() []byte
func (*ChainManager) GetAccount ¶
func (self *ChainManager) GetAccount(addr []byte) *state.StateObject
Satisfy state query interface
func (*ChainManager) GetAncestors ¶
func (*ChainManager) GetBlockByNumber ¶
func (self *ChainManager) GetBlockByNumber(num uint64) *types.Block
func (*ChainManager) GetBlockHashesFromHash ¶
func (self *ChainManager) GetBlockHashesFromHash(hash []byte, max uint64) (chain [][]byte)
func (*ChainManager) GetUnclesInChain ¶
func (*ChainManager) HasBlock ¶
func (bc *ChainManager) HasBlock(hash []byte) bool
Block fetching methods
func (*ChainManager) InsertChain ¶
func (self *ChainManager) InsertChain(chain types.Blocks) error
func (*ChainManager) LastBlockHash ¶
func (self *ChainManager) LastBlockHash() []byte
func (*ChainManager) NewBlock ¶
func (bc *ChainManager) NewBlock(coinbase []byte) *types.Block
Block creation & chain handling
func (*ChainManager) Reset ¶
func (bc *ChainManager) Reset()
func (*ChainManager) SetProcessor ¶
func (self *ChainManager) SetProcessor(proc types.BlockProcessor)
func (*ChainManager) State ¶
func (self *ChainManager) State() *state.StateDB
func (*ChainManager) Status ¶
func (self *ChainManager) Status() (td *big.Int, currentBlock []byte, genesisBlock []byte)
func (*ChainManager) Stop ¶
func (bc *ChainManager) Stop()
func (*ChainManager) Td ¶
func (self *ChainManager) Td() *big.Int
func (*ChainManager) TransState ¶
func (self *ChainManager) TransState() *state.StateDB
func (*ChainManager) TxState ¶
func (self *ChainManager) TxState() *state.StateDB
type ChainSplitEvent ¶
ChainSplit is posted when a new head is detected
type Execution ¶
func NewExecution ¶
func (*Execution) Create ¶
func (self *Execution) Create(caller vm.ContextRef) (ret []byte, err error, account *state.StateObject)
type Filter ¶
type Filter struct { BlockCallback func(*types.Block) PendingCallback func(*types.Block) LogsCallback func(state.Logs) // contains filtered or unexported fields }
Filtering interface
func NewFilter ¶
Create a new filter which uses a bloom filter on blocks to figure out whether a particular block is interesting or not.
func (*Filter) SetAddress ¶
func (*Filter) SetEarliestBlock ¶
Set the earliest and latest block for filtering. -1 = latest block (i.e., the current block) hash = particular hash from-to
func (*Filter) SetLatestBlock ¶
func (*Filter) SetOptions ¶
func (self *Filter) SetOptions(options FilterOptions)
type FilterOptions ¶
type KnownBlockError ¶
type KnownBlockError struct {
// contains filtered or unexported fields
}
func (*KnownBlockError) Error ¶
func (self *KnownBlockError) Error() string
type NewBlockEvent ¶
NewBlockEvent is posted when a block has been imported.
type NewMinedBlockEvent ¶
NewMinedBlockEvent is posted when a block has been imported.
type NonceErr ¶
func NonceError ¶
type OutOfGasErr ¶
type OutOfGasErr struct {
Message string
}
func OutOfGasError ¶
func OutOfGasError() *OutOfGasErr
func (*OutOfGasErr) Error ¶
func (self *OutOfGasErr) Error() string
type ParentErr ¶
type ParentErr struct {
Message string
}
Parent error. In case a parent is unknown this error will be thrown by the block manager
type PendingBlockEvent ¶
type StateQuery ¶
type StateQuery interface {
GetAccount(addr []byte) *state.StateObject
}
type StateTransition ¶
type StateTransition struct {
// contains filtered or unexported fields
}
* The State transitioning model * * A state transition is a change made when a transaction is applied to the current world state * The state transitioning model does all all the necessary work to work out a valid new state root. * 1) Nonce handling * 2) Pre pay / buy gas of the coinbase (miner) * 3) Create a new state object if the recipient is \0*32 * 4) Value transfer * == If contract creation == * 4a) Attempt to run transaction data * 4b) If valid, use result as code for the new state object * == end == * 5) Run Script section * 6) Derive new state root
func NewStateTransition ¶
func NewStateTransition(env vm.Environment, msg Message, coinbase *state.StateObject) *StateTransition
func (*StateTransition) AddGas ¶
func (self *StateTransition) AddGas(amount *big.Int)
func (*StateTransition) BuyGas ¶
func (self *StateTransition) BuyGas() error
func (*StateTransition) Coinbase ¶
func (self *StateTransition) Coinbase() *state.StateObject
func (*StateTransition) From ¶
func (self *StateTransition) From() *state.StateObject
func (*StateTransition) GasUsed ¶
func (self *StateTransition) GasUsed() *big.Int
func (*StateTransition) RefundGas ¶
func (self *StateTransition) RefundGas()
func (*StateTransition) To ¶
func (self *StateTransition) To() *state.StateObject
func (*StateTransition) TransitionState ¶
func (self *StateTransition) TransitionState() (ret []byte, err error)
type TxMsg ¶
type TxMsg struct {
Tx *types.Transaction
}
type TxPool ¶
type TxPool struct { SecondaryProcessor TxProcessor // contains filtered or unexported fields }
The tx pool a thread safe transaction pool handler. In order to guarantee a non blocking pool we use a queue channel which can be independently read without needing access to the actual pool.
func (*TxPool) AddTransactions ¶
func (self *TxPool) AddTransactions(txs []*types.Transaction)
func (*TxPool) GetTransactions ¶
func (self *TxPool) GetTransactions() (txs types.Transactions)
func (*TxPool) RemoveInvalid ¶
func (pool *TxPool) RemoveInvalid(query StateQuery)
func (*TxPool) RemoveSet ¶
func (self *TxPool) RemoveSet(txs types.Transactions)
func (*TxPool) ValidateTransaction ¶
func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error
type TxPoolHook ¶
type TxPoolHook chan *types.Transaction
type TxPostEvent ¶
type TxPostEvent struct{ Tx *types.Transaction }
TxPostEvent is posted when a transaction has been processed.
type TxPreEvent ¶
type TxPreEvent struct{ Tx *types.Transaction }
TxPreEvent is posted when a transaction enters the transaction pool.
type TxProcessor ¶
type TxProcessor interface {
ProcessTransaction(tx *types.Transaction)
}
type VMEnv ¶
type VMEnv struct {
// contains filtered or unexported fields
}
func (*VMEnv) BlockNumber ¶
func (*VMEnv) Create ¶
func (self *VMEnv) Create(me vm.ContextRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, vm.ContextRef)
func (*VMEnv) Difficulty ¶
type ValidationErr ¶
type ValidationErr struct {
Message string
}
Block validation error. If any validation fails, this error will be thrown
func ValidationError ¶
func ValidationError(format string, v ...interface{}) *ValidationErr
func (*ValidationErr) Error ¶
func (err *ValidationErr) Error() string