From 82aa5b1de69331a43f5050717d593aa97eda1ef5 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Thu, 26 Jan 2017 20:24:49 +0530 Subject: [PATCH 1/2] core: fix a small typo in blockchain.go (#3611) --- core/blockchain.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/blockchain.go b/core/blockchain.go index 90bb0b5a8e..281f28f361 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -853,7 +853,7 @@ func (self *BlockChain) WriteBlock(block *types.Block) (status WriteStatus, err return } -// InsertChain will attempt to insert the given chain in to the canonical chain or, otherwise, create a fork. It an error is returned +// InsertChain will attempt to insert the given chain in to the canonical chain or, otherwise, create a fork. If an error is returned // it will return the index number of the failing block as well an error describing what went wrong (for possible errors see core/errors.go). func (self *BlockChain) InsertChain(chain types.Blocks) (int, error) { // Do a sanity check that the provided chain is actually ordered and linked From c46c41eae35e3083090e5806932fc5076e53e37c Mon Sep 17 00:00:00 2001 From: bas-vk Date: Thu, 26 Jan 2017 21:16:24 +0100 Subject: [PATCH 2/2] core/types: add unittest for tx json serialization (#3609) --- core/types/transaction_test.go | 44 +++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/core/types/transaction_test.go b/core/types/transaction_test.go index f52f80d34a..6e4519c048 100644 --- a/core/types/transaction_test.go +++ b/core/types/transaction_test.go @@ -19,6 +19,7 @@ package types import ( "bytes" "crypto/ecdsa" + "encoding/json" "math/big" "testing" @@ -29,7 +30,6 @@ import ( // The values in those tests are from the Transaction Tests // at github.com/ethereum/tests. - var ( emptyTx = NewTransaction( 0, @@ -190,3 +190,45 @@ func TestTransactionPriceNonceSort(t *testing.T) { } } } + +// TestTransactionJSON tests serializing/de-serializing to/from JSON. +func TestTransactionJSON(t *testing.T) { + key, err := crypto.GenerateKey() + if err != nil { + t.Fatalf("could not generate key: %v", err) + } + signer := NewEIP155Signer(common.Big1) + + for i := uint64(0); i < 25; i++ { + var tx *Transaction + switch i % 2 { + case 0: + tx = NewTransaction(i, common.Address{1}, common.Big0, common.Big1, common.Big2, []byte("abcdef")) + case 1: + tx = NewContractCreation(i, common.Big0, common.Big1, common.Big2, []byte("abcdef")) + } + + tx, err := SignTx(tx, signer, key) + if err != nil { + t.Fatalf("could not sign transaction: %v", err) + } + + data, err := json.Marshal(tx) + if err != nil { + t.Errorf("json.Marshal failed: %v", err) + } + + var parsedTx *Transaction + if err := json.Unmarshal(data, &parsedTx); err != nil { + t.Errorf("json.Unmarshal failed: %v", err) + } + + // compare nonce, price, gaslimit, recipient, amount, payload, V, R, S + if tx.Hash() != parsedTx.Hash() { + t.Errorf("parsed tx differs from original tx, want %v, got %v", tx, parsedTx) + } + if tx.ChainId().Cmp(parsedTx.ChainId()) != 0 { + t.Errorf("invalid chain id, want %d, got %d", tx.ChainId(), parsedTx.ChainId()) + } + } +}