DRY up height logic

This commit is contained in:
Taylor Gerring 2015-03-24 17:49:37 +01:00
parent 865f31018b
commit 82b5a8af49

View File

@ -116,22 +116,13 @@ func (self *XEth) DefaultGasPrice() *big.Int { return defaultGasPrice }
func (self *XEth) RemoteMining() *miner.RemoteAgent { return self.agent } func (self *XEth) RemoteMining() *miner.RemoteAgent { return self.agent }
func (self *XEth) AtStateNum(num int64) *XEth { func (self *XEth) AtStateNum(num int64) *XEth {
chain := self.backend.ChainManager() block := self.getBlockByHeight(num)
var block *types.Block
// -1 generally means "latest"
// -2 means "pending", which has no blocknum
if num < 0 {
num = chain.CurrentBlock().Number().Int64()
}
block = chain.GetBlockByNumber(uint64(num))
var st *state.StateDB var st *state.StateDB
if block != nil { if block != nil {
st = state.New(block.Root(), self.backend.StateDb()) st = state.New(block.Root(), self.backend.StateDb())
} else { } else {
st = chain.State() st = self.backend.ChainManager().State()
} }
return self.WithState(st) return self.WithState(st)
} }
@ -149,6 +140,22 @@ func (self *XEth) State() *State { return self.state }
func (self *XEth) Whisper() *Whisper { return self.whisper } func (self *XEth) Whisper() *Whisper { return self.whisper }
func (self *XEth) getBlockByHeight(height int64) *types.Block {
var num uint64
// -1 means "latest"
// -2 means "pending", which has no blocknum
if height <= -2 {
return &types.Block{}
} else if height == -1 {
num = self.CurrentBlock().NumberU64()
} else {
num = uint64(height)
}
return self.backend.ChainManager().GetBlockByNumber(num)
}
func (self *XEth) BlockByHash(strHash string) *Block { func (self *XEth) BlockByHash(strHash string) *Block {
hash := common.HexToHash(strHash) hash := common.HexToHash(strHash)
block := self.backend.ChainManager().GetBlock(hash) block := self.backend.ChainManager().GetBlock(hash)
@ -172,29 +179,11 @@ func (self *XEth) EthTransactionByHash(hash string) *types.Transaction {
} }
func (self *XEth) BlockByNumber(num int64) *Block { func (self *XEth) BlockByNumber(num int64) *Block {
if num == -2 { return NewBlock(self.getBlockByHeight(num))
// "pending" is non-existant
return &Block{}
}
if num == -1 {
return NewBlock(self.CurrentBlock())
}
return NewBlock(self.backend.ChainManager().GetBlockByNumber(uint64(num)))
} }
func (self *XEth) EthBlockByNumber(num int64) *types.Block { func (self *XEth) EthBlockByNumber(num int64) *types.Block {
if num == -2 { return self.getBlockByHeight(num)
// "pending" is non-existant
return &types.Block{}
}
if num == -1 {
return self.CurrentBlock()
}
return self.backend.ChainManager().GetBlockByNumber(uint64(num))
} }
func (self *XEth) CurrentBlock() *types.Block { func (self *XEth) CurrentBlock() *types.Block {