Merge pull request #618 from tgerring/issue613

Issue #613
This commit is contained in:
Jeffrey Wilcke 2015-04-01 13:57:35 +02:00
commit c8e5d53a39
3 changed files with 27 additions and 28 deletions

View File

@ -113,7 +113,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
return err return err
} }
block := NewBlockRes(api.xeth().EthBlockByHash(args.BlockHash)) block := NewBlockRes(api.xeth().EthBlockByHash(args.BlockHash), false)
*reply = common.ToHex(big.NewInt(int64(len(block.Transactions))).Bytes()) *reply = common.ToHex(big.NewInt(int64(len(block.Transactions))).Bytes())
case "eth_getBlockTransactionCountByNumber": case "eth_getBlockTransactionCountByNumber":
args := new(GetBlockByNumberArgs) args := new(GetBlockByNumberArgs)
@ -121,7 +121,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
return err return err
} }
block := NewBlockRes(api.xeth().EthBlockByNumber(args.BlockNumber)) block := NewBlockRes(api.xeth().EthBlockByNumber(args.BlockNumber), false)
*reply = common.ToHex(big.NewInt(int64(len(block.Transactions))).Bytes()) *reply = common.ToHex(big.NewInt(int64(len(block.Transactions))).Bytes())
case "eth_getUncleCountByBlockHash": case "eth_getUncleCountByBlockHash":
args := new(GetBlockByHashArgs) args := new(GetBlockByHashArgs)
@ -130,7 +130,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
} }
block := api.xeth().EthBlockByHash(args.BlockHash) block := api.xeth().EthBlockByHash(args.BlockHash)
br := NewBlockRes(block) br := NewBlockRes(block, false)
*reply = common.ToHex(big.NewInt(int64(len(br.Uncles))).Bytes()) *reply = common.ToHex(big.NewInt(int64(len(br.Uncles))).Bytes())
case "eth_getUncleCountByBlockNumber": case "eth_getUncleCountByBlockNumber":
args := new(GetBlockByNumberArgs) args := new(GetBlockByNumberArgs)
@ -139,7 +139,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
} }
block := api.xeth().EthBlockByNumber(args.BlockNumber) block := api.xeth().EthBlockByNumber(args.BlockNumber)
br := NewBlockRes(block) br := NewBlockRes(block, false)
*reply = common.ToHex(big.NewInt(int64(len(br.Uncles))).Bytes()) *reply = common.ToHex(big.NewInt(int64(len(br.Uncles))).Bytes())
case "eth_getData", "eth_getCode": case "eth_getData", "eth_getCode":
args := new(GetDataArgs) args := new(GetDataArgs)
@ -179,8 +179,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
} }
block := api.xeth().EthBlockByHash(args.BlockHash) block := api.xeth().EthBlockByHash(args.BlockHash)
br := NewBlockRes(block) br := NewBlockRes(block, true)
br.fullTx = args.IncludeTxs
*reply = br *reply = br
case "eth_getBlockByNumber": case "eth_getBlockByNumber":
@ -190,8 +189,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
} }
block := api.xeth().EthBlockByNumber(args.BlockNumber) block := api.xeth().EthBlockByNumber(args.BlockNumber)
br := NewBlockRes(block) br := NewBlockRes(block, true)
br.fullTx = args.IncludeTxs
*reply = br *reply = br
case "eth_getTransactionByHash": case "eth_getTransactionByHash":
@ -214,8 +212,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
} }
block := api.xeth().EthBlockByHash(args.Hash) block := api.xeth().EthBlockByHash(args.Hash)
br := NewBlockRes(block) br := NewBlockRes(block, true)
br.fullTx = true
if args.Index >= int64(len(br.Transactions)) || args.Index < 0 { if args.Index >= int64(len(br.Transactions)) || args.Index < 0 {
return NewValidationError("Index", "does not exist") return NewValidationError("Index", "does not exist")
@ -228,8 +225,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
} }
block := api.xeth().EthBlockByNumber(args.BlockNumber) block := api.xeth().EthBlockByNumber(args.BlockNumber)
v := NewBlockRes(block) v := NewBlockRes(block, true)
v.fullTx = true
if args.Index >= int64(len(v.Transactions)) || args.Index < 0 { if args.Index >= int64(len(v.Transactions)) || args.Index < 0 {
return NewValidationError("Index", "does not exist") return NewValidationError("Index", "does not exist")
@ -241,14 +237,14 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
return err return err
} }
br := NewBlockRes(api.xeth().EthBlockByHash(args.Hash)) br := NewBlockRes(api.xeth().EthBlockByHash(args.Hash), false)
if args.Index >= int64(len(br.Uncles)) || args.Index < 0 { if args.Index >= int64(len(br.Uncles)) || args.Index < 0 {
return NewValidationError("Index", "does not exist") return NewValidationError("Index", "does not exist")
} }
uhash := br.Uncles[args.Index] uhash := br.Uncles[args.Index]
uncle := NewBlockRes(api.xeth().EthBlockByHash(uhash.String())) uncle := NewBlockRes(api.xeth().EthBlockByHash(uhash.String()), false)
*reply = uncle *reply = uncle
case "eth_getUncleByBlockNumberAndIndex": case "eth_getUncleByBlockNumberAndIndex":
@ -258,15 +254,14 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
} }
block := api.xeth().EthBlockByNumber(args.BlockNumber) block := api.xeth().EthBlockByNumber(args.BlockNumber)
v := NewBlockRes(block) v := NewBlockRes(block, true)
v.fullTx = true
if args.Index >= int64(len(v.Uncles)) || args.Index < 0 { if args.Index >= int64(len(v.Uncles)) || args.Index < 0 {
return NewValidationError("Index", "does not exist") return NewValidationError("Index", "does not exist")
} }
uhash := v.Uncles[args.Index] uhash := v.Uncles[args.Index]
uncle := NewBlockRes(api.xeth().EthBlockByHash(uhash.String())) uncle := NewBlockRes(api.xeth().EthBlockByHash(uhash.String()), false)
*reply = uncle *reply = uncle
case "eth_getCompilers": case "eth_getCompilers":

View File

@ -29,12 +29,15 @@ type BlockRes struct {
Uncles []*hexdata `json:"uncles"` Uncles []*hexdata `json:"uncles"`
} }
func NewBlockRes(block *types.Block) *BlockRes { func NewBlockRes(block *types.Block, fullTx bool) *BlockRes {
// TODO respect fullTx flag
if block == nil { if block == nil {
return &BlockRes{} return &BlockRes{}
} }
res := new(BlockRes) res := new(BlockRes)
res.fullTx = fullTx
res.BlockNumber = newHexNum(block.Number()) res.BlockNumber = newHexNum(block.Number())
res.BlockHash = newHexData(block.Hash()) res.BlockHash = newHexData(block.Hash())
res.ParentHash = newHexData(block.ParentHash()) res.ParentHash = newHexData(block.ParentHash())
@ -52,11 +55,20 @@ func NewBlockRes(block *types.Block) *BlockRes {
// res.MinGasPrice = // res.MinGasPrice =
res.GasUsed = newHexNum(block.GasUsed()) res.GasUsed = newHexNum(block.GasUsed())
res.UnixTimestamp = newHexNum(block.Time()) res.UnixTimestamp = newHexNum(block.Time())
res.Transactions = NewTransactionsRes(block.Transactions())
res.Transactions = make([]*TransactionRes, len(block.Transactions()))
for i, tx := range block.Transactions() {
res.Transactions[i] = NewTransactionRes(tx)
res.Transactions[i].BlockHash = res.BlockHash
res.Transactions[i].BlockNumber = res.BlockNumber
res.Transactions[i].TxIndex = newHexNum(i)
}
res.Uncles = make([]*hexdata, len(block.Uncles())) res.Uncles = make([]*hexdata, len(block.Uncles()))
for i, uncle := range block.Uncles() { for i, uncle := range block.Uncles() {
res.Uncles[i] = newHexData(uncle.Hash()) res.Uncles[i] = newHexData(uncle.Hash())
} }
return res return res
} }
@ -91,14 +103,6 @@ func NewTransactionRes(tx *types.Transaction) *TransactionRes {
return v return v
} }
func NewTransactionsRes(txs []*types.Transaction) []*TransactionRes {
v := make([]*TransactionRes, len(txs))
for i, tx := range txs {
v[i] = NewTransactionRes(tx)
}
return v
}
// type FilterLogRes struct { // type FilterLogRes struct {
// Hash string `json:"hash"` // Hash string `json:"hash"`
// Address string `json:"address"` // Address string `json:"address"`

View File

@ -49,7 +49,7 @@ func TestNewBlockRes(t *testing.T) {
"timestamp": reNum, "timestamp": reNum,
} }
v := NewBlockRes(block) v := NewBlockRes(block, false)
j, _ := json.Marshal(v) j, _ := json.Marshal(v)
for k, re := range tests { for k, re := range tests {