core/types: add unittest for tx json serialization (#3609)
This commit is contained in:
parent
82aa5b1de6
commit
c46c41eae3
@ -19,6 +19,7 @@ package types
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
|
"encoding/json"
|
||||||
"math/big"
|
"math/big"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@ -29,7 +30,6 @@ import (
|
|||||||
|
|
||||||
// The values in those tests are from the Transaction Tests
|
// The values in those tests are from the Transaction Tests
|
||||||
// at github.com/ethereum/tests.
|
// at github.com/ethereum/tests.
|
||||||
|
|
||||||
var (
|
var (
|
||||||
emptyTx = NewTransaction(
|
emptyTx = NewTransaction(
|
||||||
0,
|
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())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user