forked from cerc-io/plugeth
DRY up height logic
This commit is contained in:
parent
865f31018b
commit
82b5a8af49
51
xeth/xeth.go
51
xeth/xeth.go
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user