|
|
@ -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 { |
|
|
|