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