core/types: remove String methods from struct types (#16205)
Most of these methods did not contain all the relevant information inside the object and were not using a similar formatting type. Moreover, the existence of a suboptimal String method breaks usage with more advanced data dumping tools like go-spew.
This commit is contained in:
parent
1e248f3a6e
commit
ec8ee611ca
@ -317,7 +317,7 @@ func TestLookupStorage(t *testing.T) {
|
|||||||
if hash != block.Hash() || number != block.NumberU64() || index != uint64(i) {
|
if hash != block.Hash() || number != block.NumberU64() || index != uint64(i) {
|
||||||
t.Fatalf("tx #%d [%x]: positional metadata mismatch: have %x/%d/%d, want %x/%v/%v", i, tx.Hash(), hash, number, index, block.Hash(), block.NumberU64(), i)
|
t.Fatalf("tx #%d [%x]: positional metadata mismatch: have %x/%d/%d, want %x/%v/%v", i, tx.Hash(), hash, number, index, block.Hash(), block.NumberU64(), i)
|
||||||
}
|
}
|
||||||
if tx.String() != txn.String() {
|
if tx.Hash() != txn.Hash() {
|
||||||
t.Fatalf("tx #%d [%x]: transaction mismatch: have %v, want %v", i, tx.Hash(), txn, tx)
|
t.Fatalf("tx #%d [%x]: transaction mismatch: have %v, want %v", i, tx.Hash(), txn, tx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,6 @@ package types
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
"math/big"
|
"math/big"
|
||||||
"sort"
|
"sort"
|
||||||
@ -389,40 +388,6 @@ func (b *Block) Hash() common.Hash {
|
|||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Block) String() string {
|
|
||||||
str := fmt.Sprintf(`Block(#%v): Size: %v {
|
|
||||||
MinerHash: %x
|
|
||||||
%v
|
|
||||||
Transactions:
|
|
||||||
%v
|
|
||||||
Uncles:
|
|
||||||
%v
|
|
||||||
}
|
|
||||||
`, b.Number(), b.Size(), b.header.HashNoNonce(), b.header, b.transactions, b.uncles)
|
|
||||||
return str
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Header) String() string {
|
|
||||||
return fmt.Sprintf(`Header(%x):
|
|
||||||
[
|
|
||||||
ParentHash: %x
|
|
||||||
UncleHash: %x
|
|
||||||
Coinbase: %x
|
|
||||||
Root: %x
|
|
||||||
TxSha %x
|
|
||||||
ReceiptSha: %x
|
|
||||||
Bloom: %x
|
|
||||||
Difficulty: %v
|
|
||||||
Number: %v
|
|
||||||
GasLimit: %v
|
|
||||||
GasUsed: %v
|
|
||||||
Time: %v
|
|
||||||
Extra: %s
|
|
||||||
MixDigest: %x
|
|
||||||
Nonce: %x
|
|
||||||
]`, h.Hash(), h.ParentHash, h.UncleHash, h.Coinbase, h.Root, h.TxHash, h.ReceiptHash, h.Bloom, h.Difficulty, h.Number, h.GasLimit, h.GasUsed, h.Time, h.Extra, h.MixDigest, h.Nonce)
|
|
||||||
}
|
|
||||||
|
|
||||||
type Blocks []*Block
|
type Blocks []*Block
|
||||||
|
|
||||||
type BlockBy func(b1, b2 *Block) bool
|
type BlockBy func(b1, b2 *Block) bool
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
package types
|
package types
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
@ -95,10 +94,6 @@ func (l *Log) DecodeRLP(s *rlp.Stream) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Log) String() string {
|
|
||||||
return fmt.Sprintf(`log: %x %x %x %x %d %x %d`, l.Address, l.Topics, l.Data, l.TxHash, l.TxIndex, l.BlockHash, l.Index)
|
|
||||||
}
|
|
||||||
|
|
||||||
// LogForStorage is a wrapper around a Log that flattens and parses the entire content of
|
// LogForStorage is a wrapper around a Log that flattens and parses the entire content of
|
||||||
// a log including non-consensus fields.
|
// a log including non-consensus fields.
|
||||||
type LogForStorage Log
|
type LogForStorage Log
|
||||||
|
@ -149,14 +149,6 @@ func (r *Receipt) Size() common.StorageSize {
|
|||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
|
||||||
// String implements the Stringer interface.
|
|
||||||
func (r *Receipt) String() string {
|
|
||||||
if len(r.PostState) == 0 {
|
|
||||||
return fmt.Sprintf("receipt{status=%d cgas=%v bloom=%x logs=%v}", r.Status, r.CumulativeGasUsed, r.Bloom, r.Logs)
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("receipt{med=%x cgas=%v bloom=%x logs=%v}", r.PostState, r.CumulativeGasUsed, r.Bloom, r.Logs)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ReceiptForStorage is a wrapper around a Receipt that flattens and parses the
|
// ReceiptForStorage is a wrapper around a Receipt that flattens and parses the
|
||||||
// entire content of a receipt, as opposed to only the consensus fields originally.
|
// entire content of a receipt, as opposed to only the consensus fields originally.
|
||||||
type ReceiptForStorage Receipt
|
type ReceiptForStorage Receipt
|
||||||
|
@ -19,7 +19,6 @@ package types
|
|||||||
import (
|
import (
|
||||||
"container/heap"
|
"container/heap"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
"math/big"
|
"math/big"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
@ -262,58 +261,6 @@ func (tx *Transaction) RawSignatureValues() (*big.Int, *big.Int, *big.Int) {
|
|||||||
return tx.data.V, tx.data.R, tx.data.S
|
return tx.data.V, tx.data.R, tx.data.S
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tx *Transaction) String() string {
|
|
||||||
var from, to string
|
|
||||||
if tx.data.V != nil {
|
|
||||||
// make a best guess about the signer and use that to derive
|
|
||||||
// the sender.
|
|
||||||
signer := deriveSigner(tx.data.V)
|
|
||||||
if f, err := Sender(signer, tx); err != nil { // derive but don't cache
|
|
||||||
from = "[invalid sender: invalid sig]"
|
|
||||||
} else {
|
|
||||||
from = fmt.Sprintf("%x", f[:])
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
from = "[invalid sender: nil V field]"
|
|
||||||
}
|
|
||||||
|
|
||||||
if tx.data.Recipient == nil {
|
|
||||||
to = "[contract creation]"
|
|
||||||
} else {
|
|
||||||
to = fmt.Sprintf("%x", tx.data.Recipient[:])
|
|
||||||
}
|
|
||||||
enc, _ := rlp.EncodeToBytes(&tx.data)
|
|
||||||
return fmt.Sprintf(`
|
|
||||||
TX(%x)
|
|
||||||
Contract: %v
|
|
||||||
From: %s
|
|
||||||
To: %s
|
|
||||||
Nonce: %v
|
|
||||||
GasPrice: %#x
|
|
||||||
GasLimit %#x
|
|
||||||
Value: %#x
|
|
||||||
Data: 0x%x
|
|
||||||
V: %#x
|
|
||||||
R: %#x
|
|
||||||
S: %#x
|
|
||||||
Hex: %x
|
|
||||||
`,
|
|
||||||
tx.Hash(),
|
|
||||||
tx.data.Recipient == nil,
|
|
||||||
from,
|
|
||||||
to,
|
|
||||||
tx.data.AccountNonce,
|
|
||||||
tx.data.Price,
|
|
||||||
tx.data.GasLimit,
|
|
||||||
tx.data.Amount,
|
|
||||||
tx.data.Payload,
|
|
||||||
tx.data.V,
|
|
||||||
tx.data.R,
|
|
||||||
tx.data.S,
|
|
||||||
enc,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Transactions is a Transaction slice type for basic sorting.
|
// Transactions is a Transaction slice type for basic sorting.
|
||||||
type Transactions []*Transaction
|
type Transactions []*Transaction
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/davecgh/go-spew/spew"
|
||||||
"github.com/ethereum/go-ethereum/accounts"
|
"github.com/ethereum/go-ethereum/accounts"
|
||||||
"github.com/ethereum/go-ethereum/accounts/keystore"
|
"github.com/ethereum/go-ethereum/accounts/keystore"
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
@ -1388,7 +1389,7 @@ func (api *PublicDebugAPI) PrintBlock(ctx context.Context, number uint64) (strin
|
|||||||
if block == nil {
|
if block == nil {
|
||||||
return "", fmt.Errorf("block #%d not found", number)
|
return "", fmt.Errorf("block #%d not found", number)
|
||||||
}
|
}
|
||||||
return block.String(), nil
|
return spew.Sdump(block), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SeedHash retrieves the seed hash of a block.
|
// SeedHash retrieves the seed hash of a block.
|
||||||
|
@ -97,12 +97,6 @@ func (h *Header) EncodeJSON() (string, error) {
|
|||||||
return string(data), err
|
return string(data), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// String implements the fmt.Stringer interface to print some semi-meaningful
|
|
||||||
// data dump of the header for debugging purposes.
|
|
||||||
func (h *Header) String() string {
|
|
||||||
return h.header.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Header) GetParentHash() *Hash { return &Hash{h.header.ParentHash} }
|
func (h *Header) GetParentHash() *Hash { return &Hash{h.header.ParentHash} }
|
||||||
func (h *Header) GetUncleHash() *Hash { return &Hash{h.header.UncleHash} }
|
func (h *Header) GetUncleHash() *Hash { return &Hash{h.header.UncleHash} }
|
||||||
func (h *Header) GetCoinbase() *Address { return &Address{h.header.Coinbase} }
|
func (h *Header) GetCoinbase() *Address { return &Address{h.header.Coinbase} }
|
||||||
@ -174,12 +168,6 @@ func (b *Block) EncodeJSON() (string, error) {
|
|||||||
return string(data), err
|
return string(data), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// String implements the fmt.Stringer interface to print some semi-meaningful
|
|
||||||
// data dump of the block for debugging purposes.
|
|
||||||
func (b *Block) String() string {
|
|
||||||
return b.block.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *Block) GetParentHash() *Hash { return &Hash{b.block.ParentHash()} }
|
func (b *Block) GetParentHash() *Hash { return &Hash{b.block.ParentHash()} }
|
||||||
func (b *Block) GetUncleHash() *Hash { return &Hash{b.block.UncleHash()} }
|
func (b *Block) GetUncleHash() *Hash { return &Hash{b.block.UncleHash()} }
|
||||||
func (b *Block) GetCoinbase() *Address { return &Address{b.block.Coinbase()} }
|
func (b *Block) GetCoinbase() *Address { return &Address{b.block.Coinbase()} }
|
||||||
@ -249,12 +237,6 @@ func (tx *Transaction) EncodeJSON() (string, error) {
|
|||||||
return string(data), err
|
return string(data), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// String implements the fmt.Stringer interface to print some semi-meaningful
|
|
||||||
// data dump of the transaction for debugging purposes.
|
|
||||||
func (tx *Transaction) String() string {
|
|
||||||
return tx.tx.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (tx *Transaction) GetData() []byte { return tx.tx.Data() }
|
func (tx *Transaction) GetData() []byte { return tx.tx.Data() }
|
||||||
func (tx *Transaction) GetGas() int64 { return int64(tx.tx.Gas()) }
|
func (tx *Transaction) GetGas() int64 { return int64(tx.tx.Gas()) }
|
||||||
func (tx *Transaction) GetGasPrice() *BigInt { return &BigInt{tx.tx.GasPrice()} }
|
func (tx *Transaction) GetGasPrice() *BigInt { return &BigInt{tx.tx.GasPrice()} }
|
||||||
@ -347,12 +329,6 @@ func (r *Receipt) EncodeJSON() (string, error) {
|
|||||||
return string(data), err
|
return string(data), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// String implements the fmt.Stringer interface to print some semi-meaningful
|
|
||||||
// data dump of the transaction receipt for debugging purposes.
|
|
||||||
func (r *Receipt) String() string {
|
|
||||||
return r.receipt.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *Receipt) GetPostState() []byte { return r.receipt.PostState }
|
func (r *Receipt) GetPostState() []byte { return r.receipt.PostState }
|
||||||
func (r *Receipt) GetCumulativeGasUsed() int64 { return int64(r.receipt.CumulativeGasUsed) }
|
func (r *Receipt) GetCumulativeGasUsed() int64 { return int64(r.receipt.CumulativeGasUsed) }
|
||||||
func (r *Receipt) GetBloom() *Bloom { return &Bloom{r.receipt.Bloom} }
|
func (r *Receipt) GetBloom() *Bloom { return &Bloom{r.receipt.Bloom} }
|
||||||
|
Loading…
Reference in New Issue
Block a user