aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeffrey Wilcke <jeffrey@ethereum.org>2015-04-01 19:57:35 +0800
committerJeffrey Wilcke <jeffrey@ethereum.org>2015-04-01 19:57:35 +0800
commitc8e5d53a3909274f9d648d17c7003417e6e82a87 (patch)
tree5e26494b0ef3055e02758d801a50ec8e49f5e2cb
parent4a4da9a24e39c45db6535ca5ad51dc1385f2491b (diff)
parentdbf17105f62da03972fa9350f76485f5cc7aaeb8 (diff)
downloaddexon-c8e5d53a3909274f9d648d17c7003417e6e82a87.tar.gz
dexon-c8e5d53a3909274f9d648d17c7003417e6e82a87.tar.zst
dexon-c8e5d53a3909274f9d648d17c7003417e6e82a87.zip
Merge pull request #618 from tgerring/issue613
Issue #613
-rw-r--r--rpc/api.go29
-rw-r--r--rpc/responses.go24
-rw-r--r--rpc/responses_test.go2
3 files changed, 27 insertions, 28 deletions
diff --git a/rpc/api.go b/rpc/api.go
index c046c22fe..660bb3251 100644
--- a/rpc/api.go
+++ b/rpc/api.go
@@ -113,7 +113,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) 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())
case "eth_getBlockTransactionCountByNumber":
args := new(GetBlockByNumberArgs)
@@ -121,7 +121,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) 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())
case "eth_getUncleCountByBlockHash":
args := new(GetBlockByHashArgs)
@@ -130,7 +130,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
}
block := api.xeth().EthBlockByHash(args.BlockHash)
- br := NewBlockRes(block)
+ br := NewBlockRes(block, false)
*reply = common.ToHex(big.NewInt(int64(len(br.Uncles))).Bytes())
case "eth_getUncleCountByBlockNumber":
args := new(GetBlockByNumberArgs)
@@ -139,7 +139,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
}
block := api.xeth().EthBlockByNumber(args.BlockNumber)
- br := NewBlockRes(block)
+ br := NewBlockRes(block, false)
*reply = common.ToHex(big.NewInt(int64(len(br.Uncles))).Bytes())
case "eth_getData", "eth_getCode":
args := new(GetDataArgs)
@@ -179,8 +179,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
}
block := api.xeth().EthBlockByHash(args.BlockHash)
- br := NewBlockRes(block)
- br.fullTx = args.IncludeTxs
+ br := NewBlockRes(block, true)
*reply = br
case "eth_getBlockByNumber":
@@ -190,8 +189,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
}
block := api.xeth().EthBlockByNumber(args.BlockNumber)
- br := NewBlockRes(block)
- br.fullTx = args.IncludeTxs
+ br := NewBlockRes(block, true)
*reply = br
case "eth_getTransactionByHash":
@@ -214,8 +212,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
}
block := api.xeth().EthBlockByHash(args.Hash)
- br := NewBlockRes(block)
- br.fullTx = true
+ br := NewBlockRes(block, true)
if args.Index >= int64(len(br.Transactions)) || args.Index < 0 {
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)
- v := NewBlockRes(block)
- v.fullTx = true
+ v := NewBlockRes(block, true)
if args.Index >= int64(len(v.Transactions)) || args.Index < 0 {
return NewValidationError("Index", "does not exist")
@@ -241,14 +237,14 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) 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 {
return NewValidationError("Index", "does not exist")
}
uhash := br.Uncles[args.Index]
- uncle := NewBlockRes(api.xeth().EthBlockByHash(uhash.String()))
+ uncle := NewBlockRes(api.xeth().EthBlockByHash(uhash.String()), false)
*reply = uncle
case "eth_getUncleByBlockNumberAndIndex":
@@ -258,15 +254,14 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
}
block := api.xeth().EthBlockByNumber(args.BlockNumber)
- v := NewBlockRes(block)
- v.fullTx = true
+ v := NewBlockRes(block, true)
if args.Index >= int64(len(v.Uncles)) || args.Index < 0 {
return NewValidationError("Index", "does not exist")
}
uhash := v.Uncles[args.Index]
- uncle := NewBlockRes(api.xeth().EthBlockByHash(uhash.String()))
+ uncle := NewBlockRes(api.xeth().EthBlockByHash(uhash.String()), false)
*reply = uncle
case "eth_getCompilers":
diff --git a/rpc/responses.go b/rpc/responses.go
index 3e9293fbb..45a2fa18b 100644
--- a/rpc/responses.go
+++ b/rpc/responses.go
@@ -29,12 +29,15 @@ type BlockRes struct {
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 {
return &BlockRes{}
}
res := new(BlockRes)
+ res.fullTx = fullTx
res.BlockNumber = newHexNum(block.Number())
res.BlockHash = newHexData(block.Hash())
res.ParentHash = newHexData(block.ParentHash())
@@ -52,11 +55,20 @@ func NewBlockRes(block *types.Block) *BlockRes {
// res.MinGasPrice =
res.GasUsed = newHexNum(block.GasUsed())
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()))
for i, uncle := range block.Uncles() {
res.Uncles[i] = newHexData(uncle.Hash())
}
+
return res
}
@@ -91,14 +103,6 @@ func NewTransactionRes(tx *types.Transaction) *TransactionRes {
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 {
// Hash string `json:"hash"`
// Address string `json:"address"`
diff --git a/rpc/responses_test.go b/rpc/responses_test.go
index 5c6c6a895..43924151a 100644
--- a/rpc/responses_test.go
+++ b/rpc/responses_test.go
@@ -49,7 +49,7 @@ func TestNewBlockRes(t *testing.T) {
"timestamp": reNum,
}
- v := NewBlockRes(block)
+ v := NewBlockRes(block, false)
j, _ := json.Marshal(v)
for k, re := range tests {