Documentation ¶
Index ¶
- Constants
- Variables
- func AccumulateRewards(statedb *state.StateDB, block *types.Block)
- func AddressFromMessage(msg Message) common.Address
- func ApplyMessage(env vm.Environment, msg Message, coinbase *state.StateObject) ([]byte, *big.Int, error)
- func CalcDifficulty(block, parent *types.Header) *big.Int
- func CalcGasLimit(parent *types.Block) *big.Int
- func CalculateTD(block, parent *types.Block) *big.Int
- func Disassemble(script []byte) (asm []string)
- func GenesisBlock(db common.Database) *types.Block
- func IntrinsicGas(msg Message) *big.Int
- func IsInvalidTxErr(err error) bool
- 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 IsValueTransferErr(e error) bool
- func MakeBlock(bman *BlockProcessor, parent *types.Block, i int, db common.Database, seed int) *types.Block
- func MakeChain(bman *BlockProcessor, parent *types.Block, max int, db common.Database, ...) types.Blocks
- func MessageCreatesContract(msg Message) bool
- func MessageGasValue(msg Message) *big.Int
- func NewBlockFromParent(addr common.Address, parent *types.Block) *types.Block
- func ParentError(hash common.Hash) error
- func UncleError(str string) error
- type AccountChange
- type Backend
- type BlockCache
- type BlockProcessor
- 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, error)
- func (self *BlockProcessor) ChainManager() *ChainManager
- func (sm *BlockProcessor) GetLogs(block *types.Block) (logs state.Logs, err error)
- func (sm *BlockProcessor) Process(block *types.Block) (logs state.Logs, err error)
- func (sm *BlockProcessor) RetryProcess(block *types.Block) (logs state.Logs, err error)
- func (sm *BlockProcessor) TransitionState(statedb *state.StateDB, parent, block *types.Block, transientProcess bool) (receipts types.Receipts, err error)
- func (sm *BlockProcessor) ValidateHeader(block, parent *types.Header) error
- func (sm *BlockProcessor) VerifyUncles(statedb *state.StateDB, block, parent *types.Block) error
- type ChainEvent
- type ChainHeadEvent
- type ChainManager
- func (self *ChainManager) CalcTotalDiff(block *types.Block) (*big.Int, error)
- func (self *ChainManager) CurrentBlock() *types.Block
- func (self *ChainManager) Export(w io.Writer) error
- func (self *ChainManager) GasLimit() *big.Int
- func (bc *ChainManager) Genesis() *types.Block
- func (self *ChainManager) GetAncestors(block *types.Block, length int) (blocks []*types.Block)
- func (self *ChainManager) GetBlock(hash common.Hash) *types.Block
- func (self *ChainManager) GetBlockByNumber(num uint64) *types.Block
- func (self *ChainManager) GetBlockHashesFromHash(hash common.Hash, max uint64) (chain []common.Hash)
- func (self *ChainManager) GetUnclesInChain(block *types.Block, length int) (uncles []*types.Header)
- func (bc *ChainManager) HasBlock(hash common.Hash) bool
- func (self *ChainManager) InsertChain(chain types.Blocks) (int, error)
- func (self *ChainManager) LastBlockHash() common.Hash
- func (bc *ChainManager) NewBlock(coinbase common.Address) *types.Block
- func (bc *ChainManager) Reset()
- func (bc *ChainManager) ResetWithGenesisBlock(gb *types.Block)
- func (bc *ChainManager) SetHead(head *types.Block)
- func (self *ChainManager) SetProcessor(proc types.BlockProcessor)
- func (self *ChainManager) State() *state.StateDB
- func (self *ChainManager) Status() (td *big.Int, currentBlock common.Hash, genesisBlock common.Hash)
- func (bc *ChainManager) Stop()
- func (self *ChainManager) Td() *big.Int
- func (self *ChainManager) TransState() *state.StateDB
- func (self *ChainManager) TxState() *state.ManagedState
- type ChainSideEvent
- type ChainSplitEvent
- type ChainUncleEvent
- type Execution
- type FakePow
- type Filter
- func (self *Filter) FilterLogs(logs state.Logs) state.Logs
- func (self *Filter) Find() state.Logs
- func (self *Filter) SetAddress(addr []common.Address)
- func (self *Filter) SetEarliestBlock(earliest int64)
- func (self *Filter) SetLatestBlock(latest int64)
- func (self *Filter) SetMax(max int)
- func (self *Filter) SetSkip(skip int)
- func (self *Filter) SetTopics(topics [][]common.Hash)
- type GasPriceChanged
- type InvalidTxErr
- type KnownBlockError
- type Message
- type NewBlockEvent
- type NewMinedBlockEvent
- type NonceErr
- type OutOfGasErr
- type ParentErr
- type PendingBlockEvent
- type StartMining
- 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) To() *state.StateObject
- func (self *StateTransition) UseGas(amount *big.Int) error
- type TDError
- type TopMining
- 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) GetQueuedTransactions() types.Transactions
- func (tp *TxPool) GetTransaction(hash common.Hash) *types.Transaction
- func (self *TxPool) GetTransactions() (txs types.Transactions)
- func (self *TxPool) RemoveTransactions(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 common.Address, data []byte, gas, price, value *big.Int) ([]byte, error)
- func (self *VMEnv) CallCode(me vm.ContextRef, addr common.Address, data []byte, gas, price, value *big.Int) ([]byte, error)
- func (self *VMEnv) Coinbase() common.Address
- func (self *VMEnv) Create(me vm.ContextRef, 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) common.Hash
- func (self *VMEnv) Origin() common.Address
- 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
- type ValueTransferError
Constants ¶
const ( // must be bumped when consensus algorithm is changed, this forces the upgradedb // command to be run (forces the blocks to be imported again using the new algorithm) BlockChainVersion = 2 )
Variables ¶
var ( CanonicalSeed = 1 ForkSeed = 2 )
So we can deterministically seed different blockchains
var ( BlockNumberErr = errors.New("block number invalid") BlockFutureErr = errors.New("block time is in the future") BlockEqualTSErr = errors.New("block time stamp equal to previous") )
var ( ErrInvalidSender = errors.New("Invalid sender") ErrNonce = errors.New("Nonce too low") ErrBalance = errors.New("Insufficient balance") ErrNonExistentAccount = errors.New("Account does not exist or account balance too low") ErrInsufficientFunds = errors.New("Insufficient funds for gas * price + value") ErrIntrinsicGas = errors.New("Intrinsic gas too low") ErrGasLimit = errors.New("Exceeds block gas limit") )
var BlockReward *big.Int = big.NewInt(1.5e+18)
var GenesisData = []byte(`{
"0000000000000000000000000000000000000001": {"balance": "1"},
"0000000000000000000000000000000000000002": {"balance": "1"},
"0000000000000000000000000000000000000003": {"balance": "1"},
"0000000000000000000000000000000000000004": {"balance": "1"},
"dbdbdb2cbd23b783741e8d7fcf51e459b497e4a6": {"balance": "1606938044258990275541962092341162602522202993782792835301376"},
"e4157b34ea9615cfbde6b4fda419828124b70c78": {"balance": "1606938044258990275541962092341162602522202993782792835301376"},
"b9c015918bdaba24b4ff057a92a3873d6eb201be": {"balance": "1606938044258990275541962092341162602522202993782792835301376"},
"6c386a4b26f73c802f34673f7248bb118f97424a": {"balance": "1606938044258990275541962092341162602522202993782792835301376"},
"cd2a3d9f938e13cd947ec05abc7fe734df8dd826": {"balance": "1606938044258990275541962092341162602522202993782792835301376"},
"2ef47100e0787b915105fd5e3f4ff6752079d5cb": {"balance": "1606938044258990275541962092341162602522202993782792835301376"},
"e6716f9544a56c530d868e4bfbacb172315bdead": {"balance": "1606938044258990275541962092341162602522202993782792835301376"},
"1a26338f0d905e295fccb71fa9ea849ffa12aaf4": {"balance": "1606938044258990275541962092341162602522202993782792835301376"}
}`)
var ZeroHash160 = make([]byte, 20)
var ZeroHash256 = make([]byte, 32)
var ZeroHash512 = make([]byte, 64)
Functions ¶
func AccumulateRewards ¶ added in v0.9.17
func AddressFromMessage ¶ added in v0.7.10
func ApplyMessage ¶
func ApplyMessage(env vm.Environment, msg Message, coinbase *state.StateObject) ([]byte, *big.Int, error)
func Disassemble ¶ added in v0.7.10
func IntrinsicGas ¶
func IsInvalidTxErr ¶ added in v0.9.17
func IsKnownBlockErr ¶ added in v0.7.10
func IsNonceErr ¶ added in v0.7.10
func IsOutOfGasErr ¶ added in v0.7.10
func IsParentErr ¶ added in v0.7.10
func IsUncleErr ¶ added in v0.7.10
func IsValidationErr ¶ added in v0.7.10
func IsValueTransferErr ¶ added in v0.9.17
func MessageCreatesContract ¶ added in v0.7.10
func MessageGasValue ¶ added in v0.7.10
func NewBlockFromParent ¶ added in v0.9.17
Utility functions for making chains on the fly Exposed for sake of testing from other packages (eg. go-ethash)
func ParentError ¶ added in v0.7.10
func UncleError ¶ added in v0.7.10
Types ¶
type AccountChange ¶ added in v0.7.10
type AccountChange struct {
Address, StateAddress []byte
}
type BlockCache ¶ added in v0.9.17
type BlockCache struct {
// contains filtered or unexported fields
}
BlockCache implements a caching mechanism specifically for blocks and uses FILO to pop
func NewBlockCache ¶ added in v0.9.17
func NewBlockCache(size int) *BlockCache
Creates and returns a `BlockCache` with `size`. If `size` is smaller than 1 it will panic
func (*BlockCache) Clear ¶ added in v0.9.17
func (bc *BlockCache) Clear()
func (*BlockCache) Delete ¶ added in v0.9.17
func (bc *BlockCache) Delete(hash common.Hash)
func (*BlockCache) Push ¶ added in v0.9.17
func (bc *BlockCache) Push(block *types.Block)
type BlockProcessor ¶ added in v0.8.4
type BlockProcessor struct { // Proof of work used for validating Pow pow.PoW // contains filtered or unexported fields }
func NewBlockProc ¶ added in v0.9.17
func NewBlockProc(db common.Database, cman *ChainManager, eventMux *event.TypeMux) *BlockProcessor
func NewBlockProcessor ¶ added in v0.8.4
func NewBlockProcessor(db, extra common.Database, pow pow.PoW, txpool *TxPool, chainManager *ChainManager, eventMux *event.TypeMux) *BlockProcessor
func NewCanonical ¶ added in v0.9.17
func NewCanonical(n int, db common.Database) (*BlockProcessor, error)
func (*BlockProcessor) ApplyTransaction ¶ added in v0.8.4
func (*BlockProcessor) ApplyTransactions ¶ added in v0.8.4
func (self *BlockProcessor) ApplyTransactions(coinbase *state.StateObject, statedb *state.StateDB, block *types.Block, txs types.Transactions, transientProcess bool) (types.Receipts, error)
func (*BlockProcessor) ChainManager ¶ added in v0.9.17
func (self *BlockProcessor) ChainManager() *ChainManager
func (*BlockProcessor) Process ¶ added in v0.8.4
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) RetryProcess ¶ added in v0.9.17
func (*BlockProcessor) TransitionState ¶ added in v0.8.4
func (*BlockProcessor) ValidateHeader ¶ added in v0.9.17
func (sm *BlockProcessor) ValidateHeader(block, parent *types.Header) 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)
func (*BlockProcessor) VerifyUncles ¶ added in v0.9.17
type ChainHeadEvent ¶
type ChainManager ¶ added in v0.7.10
type ChainManager struct {
// contains filtered or unexported fields
}
func NewChainMan ¶ added in v0.9.17
func NewChainManager ¶ added in v0.7.10
func NewChainManager(blockDb, stateDb common.Database, mux *event.TypeMux) *ChainManager
func (*ChainManager) CalcTotalDiff ¶ added in v0.7.10
func (*ChainManager) CurrentBlock ¶ added in v0.7.10
func (self *ChainManager) CurrentBlock() *types.Block
func (*ChainManager) Export ¶ added in v0.7.10
func (self *ChainManager) Export(w io.Writer) error
Export writes the active chain to the given writer.
func (*ChainManager) GasLimit ¶ added in v0.9.17
func (self *ChainManager) GasLimit() *big.Int
func (*ChainManager) Genesis ¶ added in v0.7.10
func (bc *ChainManager) Genesis() *types.Block
Accessors
func (*ChainManager) GetAncestors ¶ added in v0.8.4
func (*ChainManager) GetBlock ¶ added in v0.7.10
func (self *ChainManager) GetBlock(hash common.Hash) *types.Block
func (*ChainManager) GetBlockByNumber ¶ added in v0.7.10
func (self *ChainManager) GetBlockByNumber(num uint64) *types.Block
func (*ChainManager) GetBlockHashesFromHash ¶ added in v0.8.4
func (*ChainManager) GetUnclesInChain ¶ added in v0.8.4
func (*ChainManager) HasBlock ¶ added in v0.7.10
func (bc *ChainManager) HasBlock(hash common.Hash) bool
Block fetching methods
func (*ChainManager) InsertChain ¶ added in v0.7.10
func (self *ChainManager) InsertChain(chain types.Blocks) (int, error)
InsertChain will attempt to insert the given chain in to the canonical chain or, otherwise, create a fork. It an error is returned it will return the index number of the failing block as well an error describing what went wrong (for possible errors see core/errors.go).
func (*ChainManager) LastBlockHash ¶ added in v0.7.10
func (self *ChainManager) LastBlockHash() common.Hash
func (*ChainManager) NewBlock ¶ added in v0.7.10
func (bc *ChainManager) NewBlock(coinbase common.Address) *types.Block
Block creation & chain handling
func (*ChainManager) Reset ¶ added in v0.7.10
func (bc *ChainManager) Reset()
func (*ChainManager) ResetWithGenesisBlock ¶ added in v0.9.17
func (bc *ChainManager) ResetWithGenesisBlock(gb *types.Block)
func (*ChainManager) SetHead ¶ added in v0.9.17
func (bc *ChainManager) SetHead(head *types.Block)
func (*ChainManager) SetProcessor ¶ added in v0.7.10
func (self *ChainManager) SetProcessor(proc types.BlockProcessor)
func (*ChainManager) State ¶ added in v0.7.10
func (self *ChainManager) State() *state.StateDB
func (*ChainManager) Stop ¶ added in v0.7.10
func (bc *ChainManager) Stop()
func (*ChainManager) Td ¶ added in v0.7.10
func (self *ChainManager) Td() *big.Int
func (*ChainManager) TransState ¶ added in v0.7.10
func (self *ChainManager) TransState() *state.StateDB
func (*ChainManager) TxState ¶ added in v0.9.17
func (self *ChainManager) TxState() *state.ManagedState
type ChainSplitEvent ¶ added in v0.8.4
ChainSplit is posted when a new head is detected
type ChainUncleEvent ¶ added in v0.9.17
type Execution ¶ added in v0.7.10
func NewExecution ¶ added in v0.7.10
func (*Execution) Create ¶ added in v0.7.10
func (self *Execution) Create(caller vm.ContextRef) (ret []byte, err error, account *state.StateObject)
type FakePow ¶ added in v0.9.17
type FakePow struct{}
So we can generate blocks easily
func (FakePow) GetHashrate ¶ added in v0.9.17
type Filter ¶ added in v0.7.10
type Filter struct { BlockCallback func(*types.Block, state.Logs) TransactionCallback func(*types.Transaction) LogsCallback func(state.Logs) // contains filtered or unexported fields }
Filtering interface
func NewFilter ¶ added in v0.7.10
Create a new filter which uses a bloom filter on blocks to figure out whether a particular block is interesting or not.
func (*Filter) FilterLogs ¶ added in v0.8.4
func (*Filter) SetAddress ¶ added in v0.8.4
func (*Filter) SetEarliestBlock ¶ added in v0.7.10
Set the earliest and latest block for filtering. -1 = latest block (i.e., the current block) hash = particular hash from-to
func (*Filter) SetLatestBlock ¶ added in v0.7.10
type GasPriceChanged ¶ added in v0.9.20
type InvalidTxErr ¶ added in v0.9.17
type InvalidTxErr struct {
Message string
}
func InvalidTxError ¶ added in v0.9.17
func InvalidTxError(err error) *InvalidTxErr
func (*InvalidTxErr) Error ¶ added in v0.9.17
func (err *InvalidTxErr) Error() string
type KnownBlockError ¶ added in v0.7.10
type KnownBlockError struct {
// contains filtered or unexported fields
}
func (*KnownBlockError) Error ¶ added in v0.7.10
func (self *KnownBlockError) Error() string
type Message ¶
type Message interface { From() (common.Address, error) To() *common.Address GasPrice() *big.Int Gas() *big.Int Value() *big.Int Nonce() uint64 Data() []byte }
Message represents a message sent to a contract.
type NewBlockEvent ¶ added in v0.7.10
NewBlockEvent is posted when a block has been imported.
type NewMinedBlockEvent ¶
NewMinedBlockEvent is posted when a block has been imported.
type NonceErr ¶ added in v0.7.10
func NonceError ¶ added in v0.7.10
type OutOfGasErr ¶ added in v0.7.10
type OutOfGasErr struct {
Message string
}
func OutOfGasError ¶ added in v0.7.10
func OutOfGasError() *OutOfGasErr
func (*OutOfGasErr) Error ¶ added in v0.7.10
func (self *OutOfGasErr) Error() string
type ParentErr ¶ added in v0.7.10
type ParentErr struct {
Message string
}
Parent error. In case a parent is unknown this error will be thrown by the block manager
type PendingBlockEvent ¶ added in v0.8.4
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 ¶ added in v0.7.10
func (self *StateTransition) AddGas(amount *big.Int)
func (*StateTransition) BuyGas ¶ added in v0.7.10
func (self *StateTransition) BuyGas() error
func (*StateTransition) Coinbase ¶ added in v0.7.10
func (self *StateTransition) Coinbase() *state.StateObject
func (*StateTransition) From ¶ added in v0.7.10
func (self *StateTransition) From() *state.StateObject
func (*StateTransition) To ¶ added in v0.7.10
func (self *StateTransition) To() *state.StateObject
type TxMsg ¶ added in v0.7.10
type TxMsg struct{ Tx *types.Transaction }
type TxPool ¶
type TxPool struct {
// 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 ¶ added in v0.8.4
func (self *TxPool) AddTransactions(txs []*types.Transaction)
func (*TxPool) GetQueuedTransactions ¶ added in v0.9.17
func (self *TxPool) GetQueuedTransactions() types.Transactions
func (*TxPool) GetTransaction ¶ added in v0.9.17
func (tp *TxPool) GetTransaction(hash common.Hash) *types.Transaction
GetTransaction allows you to check the pending and queued transaction in the transaction pool. It has two stategies, first check the pool (map) then check the queue
func (*TxPool) GetTransactions ¶ added in v0.8.4
func (self *TxPool) GetTransactions() (txs types.Transactions)
func (*TxPool) RemoveTransactions ¶ added in v0.9.17
func (self *TxPool) RemoveTransactions(txs types.Transactions)
func (*TxPool) ValidateTransaction ¶ added in v0.7.10
func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error
type TxPoolHook ¶ added in v0.7.10
type TxPoolHook chan *types.Transaction
type TxPostEvent ¶ added in v0.7.10
type TxPostEvent struct{ Tx *types.Transaction }
TxPostEvent is posted when a transaction has been processed.
type TxPreEvent ¶ added in v0.7.10
type TxPreEvent struct{ Tx *types.Transaction }
TxPreEvent is posted when a transaction enters the transaction pool.
type TxProcessor ¶ added in v0.7.10
type TxProcessor interface {
ProcessTransaction(tx *types.Transaction)
}
type VMEnv ¶ added in v0.7.10
type VMEnv struct {
// contains filtered or unexported fields
}
func (*VMEnv) BlockNumber ¶ added in v0.7.10
func (*VMEnv) Create ¶ added in v0.7.10
func (self *VMEnv) Create(me vm.ContextRef, data []byte, gas, price, value *big.Int) ([]byte, error, vm.ContextRef)
func (*VMEnv) Difficulty ¶ added in v0.7.10
type ValidationErr ¶ added in v0.7.10
type ValidationErr struct {
Message string
}
Block validation error. If any validation fails, this error will be thrown
func ValidationError ¶ added in v0.7.10
func ValidationError(format string, v ...interface{}) *ValidationErr
func (*ValidationErr) Error ¶ added in v0.7.10
func (err *ValidationErr) Error() string
type ValueTransferError ¶ added in v0.9.17
type ValueTransferError struct {
// contains filtered or unexported fields
}
func ValueTransferErr ¶ added in v0.9.17
func ValueTransferErr(str string, v ...interface{}) *ValueTransferError
func (*ValueTransferError) Error ¶ added in v0.9.17
func (self *ValueTransferError) Error() string