github.com/cheng762/platon-go@v1.8.17-0.20190529111256-7deff2d7be26/core/ppos/ticket_context.go (about) 1 package pposm 2 3 import ( 4 "github.com/PlatONnetwork/PlatON-Go/common" 5 "github.com/PlatONnetwork/PlatON-Go/core/state" 6 "github.com/PlatONnetwork/PlatON-Go/core/types" 7 "github.com/PlatONnetwork/PlatON-Go/core/vm" 8 "github.com/PlatONnetwork/PlatON-Go/p2p/discover" 9 "github.com/PlatONnetwork/PlatON-Go/params" 10 "math/big" 11 ) 12 13 type ChainInfo interface { 14 FindTransaction(txHash common.Hash) (*types.Transaction, common.Hash, uint64, uint64) 15 GetHeader(blockHash common.Hash, blockNumber uint64) *types.Header 16 GetBody(blockNumber uint64) *types.Body 17 GetNewStateDB(root common.Hash, blockNumber *big.Int, blockHash common.Hash) (*state.StateDB, error) 18 } 19 20 type TicketPoolContext struct { 21 Configs *params.PposConfig 22 chainConfig *params.ChainConfig 23 ChainInfo 24 } 25 26 var tContext *TicketPoolContext 27 28 // Initialize the global ticket pool context object 29 func NewTicketPoolContext(configs *params.PposConfig) *TicketPoolContext { 30 tContext = &TicketPoolContext{ 31 Configs: configs, 32 } 33 return tContext 34 } 35 36 func (c *TicketPoolContext) SetChainInfo(ci ChainInfo) { 37 c.ChainInfo = ci 38 } 39 40 func (c *TicketPoolContext) SetChainConfig(chainConfig *params.ChainConfig) { 41 c.chainConfig = chainConfig 42 } 43 44 func GetTicketPoolContextPtr() *TicketPoolContext { 45 return tContext 46 } 47 48 func (c *TicketPoolContext) initTicketPool() *TicketPool { 49 return NewTicketPool(c.Configs) 50 } 51 52 func (c *TicketPoolContext) GetPoolNumber (state vm.StateDB) uint32 { 53 return c.initTicketPool().GetPoolNumber(state) 54 } 55 56 func (c *TicketPoolContext) VoteTicket (state vm.StateDB, owner common.Address, voteNumber uint32, deposit *big.Int, nodeId discover.NodeID, blockNumber *big.Int) (uint32, error) { 57 return c.initTicketPool().VoteTicket(state, owner, voteNumber, deposit, nodeId, blockNumber) 58 } 59 60 func (c *TicketPoolContext) GetTicket(state vm.StateDB, ticketId common.Hash) *types.Ticket { 61 return c.initTicketPool().GetTicket(state, ticketId) 62 } 63 64 func (c *TicketPoolContext) GetExpireTicketIds(state vm.StateDB, blockNumber *big.Int) []common.Hash { 65 return c.initTicketPool().GetExpireTicketIds(state, blockNumber) 66 } 67 68 func (c *TicketPoolContext) GetTicketList (state vm.StateDB, ticketIds []common.Hash) []*types.Ticket { 69 return c.initTicketPool().GetTicketList(state, ticketIds) 70 } 71 72 func (c *TicketPoolContext) GetCandidateTicketIds (state vm.StateDB, nodeId discover.NodeID) []common.Hash { 73 return c.initTicketPool().GetCandidateTicketIds(state, nodeId) 74 } 75 76 func (c *TicketPoolContext) GetCandidateEpoch (state vm.StateDB, nodeId discover.NodeID) uint64 { 77 return c.initTicketPool().GetCandidateEpoch(state, nodeId) 78 } 79 80 func (c *TicketPoolContext) GetTicketPrice (state vm.StateDB) *big.Int { 81 return c.initTicketPool().GetTicketPrice(state) 82 } 83 84 func (c *TicketPoolContext) Notify (state vm.StateDB, blockNumber *big.Int) error { 85 return c.initTicketPool().Notify(state, blockNumber) 86 } 87 88 func (c *TicketPoolContext) StoreHash (state vm.StateDB, blockNumber *big.Int, blockHash common.Hash) error { 89 return c.initTicketPool().CommitHash(state, blockNumber, blockHash) 90 } 91 92 func (c *TicketPoolContext) GetCandidateTicketCount (state vm.StateDB, nodeId discover.NodeID) uint32 { 93 return c.initTicketPool().GetCandidateTicketCount(state, nodeId) 94 } 95 96 func (c *TicketPoolContext) GetCandidatesTicketCount (state vm.StateDB, nodeIds []discover.NodeID) map[discover.NodeID]uint32 { 97 return c.initTicketPool().GetCandidatesTicketCount(state, nodeIds) 98 } 99 100 func (c *TicketPoolContext) GetCandidatesTicketIds (state vm.StateDB, nodeIds []discover.NodeID) map[discover.NodeID][]common.Hash { 101 return c.initTicketPool().GetCandidatesTicketIds(state, nodeIds) 102 } 103 104 func (c *TicketPoolContext) DropReturnTicket(stateDB vm.StateDB, blockNumber *big.Int, nodeIds ...discover.NodeID) error { 105 return c.initTicketPool().DropReturnTicket(stateDB, blockNumber, nodeIds...) 106 } 107 108 func (c *TicketPoolContext) ReturnTicket(stateDB vm.StateDB, nodeId discover.NodeID, ticketId common.Hash, blockNumber *big.Int) error { 109 return c.initTicketPool().ReturnTicket(stateDB, nodeId, ticketId, blockNumber) 110 } 111 112 func (c *TicketPoolContext) SelectionLuckyTicket(stateDB vm.StateDB, nodeId discover.NodeID, blockHash common.Hash) (common.Hash, error) { 113 return c.initTicketPool().SelectionLuckyTicket(stateDB, nodeId, blockHash) 114 } 115 116 func (c *TicketPoolContext) GetBatchTicketRemaining(stateDB vm.StateDB, ticketIds []common.Hash) map[common.Hash]uint32 { 117 return c.initTicketPool().GetBatchTicketRemaining(stateDB, ticketIds) 118 } 119 120 121 122