github.com/klaytn/klaytn@v1.12.1/blockchain/types.go (about) 1 // Modifications Copyright 2018 The klaytn Authors 2 // Copyright 2015 The go-ethereum Authors 3 // This file is part of the go-ethereum library. 4 // 5 // The go-ethereum library is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU Lesser General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // The go-ethereum library is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU Lesser General Public License for more details. 14 // 15 // You should have received a copy of the GNU Lesser General Public License 16 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 17 // 18 // This file is derived from core/types.go (2018/06/04). 19 // Modified and improved for the klaytn development. 20 21 package blockchain 22 23 import ( 24 "github.com/klaytn/klaytn/blockchain/state" 25 "github.com/klaytn/klaytn/blockchain/types" 26 "github.com/klaytn/klaytn/blockchain/vm" 27 ) 28 29 // Validator is an interface which defines the standard for block validation. It 30 // is only responsible for validating block contents, as the header validation is 31 // done by the specific consensus engines. 32 // 33 type Validator interface { 34 // ValidateBody validates the given block's content. 35 ValidateBody(block *types.Block) error 36 37 // ValidateState validates the given statedb and optionally the receipts and 38 // gas used. 39 ValidateState(block, parent *types.Block, state *state.StateDB, receipts types.Receipts, usedGas uint64) error 40 } 41 42 // Prefetcher is an interface for pre-caching transaction signatures and state. 43 type Prefetcher interface { 44 // Prefetch processes the state changes according to the Klaytn rules by running 45 // the transaction messages using the statedb, but any changes are discarded. The 46 // only goal is to pre-cache transaction signatures and state trie nodes. 47 Prefetch(block *types.Block, stateDB *state.StateDB, cfg vm.Config, interrupt *uint32) 48 PrefetchTx(block *types.Block, ti int, stateDB *state.StateDB, cfg vm.Config, interrupt *uint32) 49 } 50 51 // Processor is an interface for processing blocks using a given initial state. 52 type Processor interface { 53 // Process processes the state changes according to the Klaytn rules by running 54 // the transaction messages using the statedb and applying any rewards to 55 // the processor (coinbase). 56 Process(block *types.Block, stateDB *state.StateDB, cfg vm.Config) (types.Receipts, []*types.Log, uint64, []*vm.InternalTxTrace, ProcessStats, error) 57 }