Respect fullTx option #614
This commit is contained in:
parent
55b9689950
commit
b6f0b40037
@ -1,6 +1,8 @@
|
|||||||
package rpc
|
package rpc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/core/state"
|
"github.com/ethereum/go-ethereum/core/state"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
)
|
)
|
||||||
@ -29,6 +31,99 @@ type BlockRes struct {
|
|||||||
Uncles []*hexdata `json:"uncles"`
|
Uncles []*hexdata `json:"uncles"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *BlockRes) MarshalJSON() ([]byte, error) {
|
||||||
|
if b.fullTx {
|
||||||
|
var ext struct {
|
||||||
|
BlockNumber *hexnum `json:"number"`
|
||||||
|
BlockHash *hexdata `json:"hash"`
|
||||||
|
ParentHash *hexdata `json:"parentHash"`
|
||||||
|
Nonce *hexdata `json:"nonce"`
|
||||||
|
Sha3Uncles *hexdata `json:"sha3Uncles"`
|
||||||
|
LogsBloom *hexdata `json:"logsBloom"`
|
||||||
|
TransactionRoot *hexdata `json:"transactionRoot"`
|
||||||
|
StateRoot *hexdata `json:"stateRoot"`
|
||||||
|
Miner *hexdata `json:"miner"`
|
||||||
|
Difficulty *hexnum `json:"difficulty"`
|
||||||
|
TotalDifficulty *hexnum `json:"totalDifficulty"`
|
||||||
|
Size *hexnum `json:"size"`
|
||||||
|
ExtraData *hexdata `json:"extraData"`
|
||||||
|
GasLimit *hexnum `json:"gasLimit"`
|
||||||
|
MinGasPrice *hexnum `json:"minGasPrice"`
|
||||||
|
GasUsed *hexnum `json:"gasUsed"`
|
||||||
|
UnixTimestamp *hexnum `json:"timestamp"`
|
||||||
|
Transactions []*TransactionRes `json:"transactions"`
|
||||||
|
Uncles []*hexdata `json:"uncles"`
|
||||||
|
}
|
||||||
|
|
||||||
|
ext.BlockNumber = b.BlockNumber
|
||||||
|
ext.BlockHash = b.BlockHash
|
||||||
|
ext.ParentHash = b.ParentHash
|
||||||
|
ext.Nonce = b.Nonce
|
||||||
|
ext.Sha3Uncles = b.Sha3Uncles
|
||||||
|
ext.LogsBloom = b.LogsBloom
|
||||||
|
ext.TransactionRoot = b.TransactionRoot
|
||||||
|
ext.StateRoot = b.StateRoot
|
||||||
|
ext.Miner = b.Miner
|
||||||
|
ext.Difficulty = b.Difficulty
|
||||||
|
ext.TotalDifficulty = b.TotalDifficulty
|
||||||
|
ext.Size = b.Size
|
||||||
|
ext.ExtraData = b.ExtraData
|
||||||
|
ext.GasLimit = b.GasLimit
|
||||||
|
ext.MinGasPrice = b.MinGasPrice
|
||||||
|
ext.GasUsed = b.GasUsed
|
||||||
|
ext.UnixTimestamp = b.UnixTimestamp
|
||||||
|
ext.Transactions = b.Transactions
|
||||||
|
ext.Uncles = b.Uncles
|
||||||
|
return json.Marshal(ext)
|
||||||
|
} else {
|
||||||
|
var ext struct {
|
||||||
|
BlockNumber *hexnum `json:"number"`
|
||||||
|
BlockHash *hexdata `json:"hash"`
|
||||||
|
ParentHash *hexdata `json:"parentHash"`
|
||||||
|
Nonce *hexdata `json:"nonce"`
|
||||||
|
Sha3Uncles *hexdata `json:"sha3Uncles"`
|
||||||
|
LogsBloom *hexdata `json:"logsBloom"`
|
||||||
|
TransactionRoot *hexdata `json:"transactionRoot"`
|
||||||
|
StateRoot *hexdata `json:"stateRoot"`
|
||||||
|
Miner *hexdata `json:"miner"`
|
||||||
|
Difficulty *hexnum `json:"difficulty"`
|
||||||
|
TotalDifficulty *hexnum `json:"totalDifficulty"`
|
||||||
|
Size *hexnum `json:"size"`
|
||||||
|
ExtraData *hexdata `json:"extraData"`
|
||||||
|
GasLimit *hexnum `json:"gasLimit"`
|
||||||
|
MinGasPrice *hexnum `json:"minGasPrice"`
|
||||||
|
GasUsed *hexnum `json:"gasUsed"`
|
||||||
|
UnixTimestamp *hexnum `json:"timestamp"`
|
||||||
|
Transactions []*hexdata `json:"transactions"`
|
||||||
|
Uncles []*hexdata `json:"uncles"`
|
||||||
|
}
|
||||||
|
|
||||||
|
ext.BlockNumber = b.BlockNumber
|
||||||
|
ext.BlockHash = b.BlockHash
|
||||||
|
ext.ParentHash = b.ParentHash
|
||||||
|
ext.Nonce = b.Nonce
|
||||||
|
ext.Sha3Uncles = b.Sha3Uncles
|
||||||
|
ext.LogsBloom = b.LogsBloom
|
||||||
|
ext.TransactionRoot = b.TransactionRoot
|
||||||
|
ext.StateRoot = b.StateRoot
|
||||||
|
ext.Miner = b.Miner
|
||||||
|
ext.Difficulty = b.Difficulty
|
||||||
|
ext.TotalDifficulty = b.TotalDifficulty
|
||||||
|
ext.Size = b.Size
|
||||||
|
ext.ExtraData = b.ExtraData
|
||||||
|
ext.GasLimit = b.GasLimit
|
||||||
|
ext.MinGasPrice = b.MinGasPrice
|
||||||
|
ext.GasUsed = b.GasUsed
|
||||||
|
ext.UnixTimestamp = b.UnixTimestamp
|
||||||
|
ext.Transactions = make([]*hexdata, len(b.Transactions))
|
||||||
|
for i, tx := range b.Transactions {
|
||||||
|
ext.Transactions[i] = tx.Hash
|
||||||
|
}
|
||||||
|
ext.Uncles = b.Uncles
|
||||||
|
return json.Marshal(ext)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func NewBlockRes(block *types.Block, fullTx bool) *BlockRes {
|
func NewBlockRes(block *types.Block, fullTx bool) *BlockRes {
|
||||||
// TODO respect fullTx flag
|
// TODO respect fullTx flag
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@ const (
|
|||||||
reNumNonZero = `"0x([1-9a-f][0-9a-f]{0,15})"` // non-zero required must not have left-padded zeros
|
reNumNonZero = `"0x([1-9a-f][0-9a-f]{0,15})"` // non-zero required must not have left-padded zeros
|
||||||
reNumOpt = `"0x([1-9a-f][0-9a-f]{0,15})|0"|null` // must not have left-padded zeros or null
|
reNumOpt = `"0x([1-9a-f][0-9a-f]{0,15})|0"|null` // must not have left-padded zeros or null
|
||||||
reData = `"0x[0-9a-f]*"` // can be "empty"
|
reData = `"0x[0-9a-f]*"` // can be "empty"
|
||||||
|
// reListHash = `[("\w":"0x[0-9a-f]{64}",?)*]`
|
||||||
|
// reListObj = `[("\w":(".+"|null),?)*]`
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNewBlockRes(t *testing.T) {
|
func TestNewBlockRes(t *testing.T) {
|
||||||
@ -49,9 +51,70 @@ func TestNewBlockRes(t *testing.T) {
|
|||||||
// "minGasPrice": "0x",
|
// "minGasPrice": "0x",
|
||||||
"gasUsed": reNum,
|
"gasUsed": reNum,
|
||||||
"timestamp": reNum,
|
"timestamp": reNum,
|
||||||
|
// "transactions": reListHash,
|
||||||
|
// "uncles": reListHash,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
to := common.HexToAddress("0x02")
|
||||||
|
amount := big.NewInt(1)
|
||||||
|
gasAmount := big.NewInt(1)
|
||||||
|
gasPrice := big.NewInt(1)
|
||||||
|
data := []byte{1, 2, 3}
|
||||||
|
tx := types.NewTransactionMessage(to, amount, gasAmount, gasPrice, data)
|
||||||
|
|
||||||
v := NewBlockRes(block, false)
|
v := NewBlockRes(block, false)
|
||||||
|
v.Transactions = make([]*TransactionRes, 1)
|
||||||
|
v.Transactions[0] = NewTransactionRes(tx)
|
||||||
|
j, _ := json.Marshal(v)
|
||||||
|
|
||||||
|
for k, re := range tests {
|
||||||
|
match, _ := regexp.MatchString(fmt.Sprintf(`{.*"%s":%s.*}`, k, re), string(j))
|
||||||
|
if !match {
|
||||||
|
t.Error(fmt.Sprintf("%s output json does not match format %s. Got %s", k, re, j))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNewBlockResWithTrans(t *testing.T) {
|
||||||
|
parentHash := common.HexToHash("0x01")
|
||||||
|
coinbase := common.HexToAddress("0x01")
|
||||||
|
root := common.HexToHash("0x01")
|
||||||
|
difficulty := common.Big1
|
||||||
|
nonce := uint64(1)
|
||||||
|
extra := ""
|
||||||
|
block := types.NewBlock(parentHash, coinbase, root, difficulty, nonce, extra)
|
||||||
|
tests := map[string]string{
|
||||||
|
"number": reNum,
|
||||||
|
"hash": reHash,
|
||||||
|
"parentHash": reHash,
|
||||||
|
"nonce": reData,
|
||||||
|
"sha3Uncles": reHash,
|
||||||
|
"logsBloom": reData,
|
||||||
|
"transactionRoot": reHash,
|
||||||
|
"stateRoot": reHash,
|
||||||
|
"miner": reAddress,
|
||||||
|
"difficulty": `"0x1"`,
|
||||||
|
"totalDifficulty": reNum,
|
||||||
|
"size": reNumNonZero,
|
||||||
|
"extraData": reData,
|
||||||
|
"gasLimit": reNum,
|
||||||
|
// "minGasPrice": "0x",
|
||||||
|
"gasUsed": reNum,
|
||||||
|
"timestamp": reNum,
|
||||||
|
// "transactions": `[{.*}]`,
|
||||||
|
// "uncles": reListHash,
|
||||||
|
}
|
||||||
|
|
||||||
|
to := common.HexToAddress("0x02")
|
||||||
|
amount := big.NewInt(1)
|
||||||
|
gasAmount := big.NewInt(1)
|
||||||
|
gasPrice := big.NewInt(1)
|
||||||
|
data := []byte{1, 2, 3}
|
||||||
|
tx := types.NewTransactionMessage(to, amount, gasAmount, gasPrice, data)
|
||||||
|
|
||||||
|
v := NewBlockRes(block, true)
|
||||||
|
v.Transactions = make([]*TransactionRes, 1)
|
||||||
|
v.Transactions[0] = NewTransactionRes(tx)
|
||||||
j, _ := json.Marshal(v)
|
j, _ := json.Marshal(v)
|
||||||
|
|
||||||
for k, re := range tests {
|
for k, re := range tests {
|
||||||
|
Loading…
Reference in New Issue
Block a user