github.com/zhiqiangxu/go-ethereum@v1.9.16-0.20210824055606-be91cfdebc48/core/types/block_test.go (about) 1 // Copyright 2014 The go-ethereum Authors 2 // This file is part of the go-ethereum library. 3 // 4 // The go-ethereum library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The go-ethereum library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 16 17 package types 18 19 import ( 20 "bytes" 21 "math/big" 22 "reflect" 23 "testing" 24 25 "github.com/zhiqiangxu/go-ethereum/common" 26 "github.com/zhiqiangxu/go-ethereum/rlp" 27 ) 28 29 // from bcValidBlockTest.json, "SimpleTx" 30 func TestBlockEncoding(t *testing.T) { 31 blockEnc := common.FromHex("f90260f901f9a083cafc574e1f51ba9dc0568fc617a08ea2429fb384059c972f13b19fa1c8dd55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a05fe50b260da6308036625b850b5d6ced6d0a9f814c0688bc91ffb7b7a3a54b67a0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845506eb0780a0bd4472abb6659ebe3ee06ee4d7b72a00a9f4d001caca51342001075469aff49888a13a5a8c8f2bb1c4f861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba09bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094fa08a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b1c0") 32 var block Block 33 if err := rlp.DecodeBytes(blockEnc, &block); err != nil { 34 t.Fatal("decode error: ", err) 35 } 36 37 check := func(f string, got, want interface{}) { 38 if !reflect.DeepEqual(got, want) { 39 t.Errorf("%s mismatch: got %v, want %v", f, got, want) 40 } 41 } 42 check("Difficulty", block.Difficulty(), big.NewInt(131072)) 43 check("GasLimit", block.GasLimit(), uint64(3141592)) 44 check("GasUsed", block.GasUsed(), uint64(21000)) 45 check("Coinbase", block.Coinbase(), common.HexToAddress("8888f1f195afa192cfee860698584c030f4c9db1")) 46 check("MixDigest", block.MixDigest(), common.HexToHash("bd4472abb6659ebe3ee06ee4d7b72a00a9f4d001caca51342001075469aff498")) 47 check("Root", block.Root(), common.HexToHash("ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017")) 48 check("Hash", block.Hash(), common.HexToHash("0a5843ac1cb04865017cb35a57b50b07084e5fcee39b5acadade33149f4fff9e")) 49 check("Nonce", block.Nonce(), uint64(0xa13a5a8c8f2bb1c4)) 50 check("Time", block.Time(), uint64(1426516743)) 51 check("Size", block.Size(), common.StorageSize(len(blockEnc))) 52 53 tx1 := NewTransaction(0, common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87"), big.NewInt(10), 50000, big.NewInt(10), nil) 54 tx1, _ = tx1.WithSignature(HomesteadSigner{}, common.Hex2Bytes("9bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094f8a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b100")) 55 check("len(Transactions)", len(block.Transactions()), 1) 56 check("Transactions[0].Hash", block.Transactions()[0].Hash(), tx1.Hash()) 57 58 ourBlockEnc, err := rlp.EncodeToBytes(&block) 59 if err != nil { 60 t.Fatal("encode error: ", err) 61 } 62 if !bytes.Equal(ourBlockEnc, blockEnc) { 63 t.Errorf("encoded block mismatch:\ngot: %x\nwant: %x", ourBlockEnc, blockEnc) 64 } 65 } 66 67 func TestUncleHash(t *testing.T) { 68 uncles := make([]*Header, 0) 69 h := CalcUncleHash(uncles) 70 exp := common.HexToHash("1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347") 71 if h != exp { 72 t.Fatalf("empty uncle hash is wrong, got %x != %x", h, exp) 73 } 74 } 75 func BenchmarkUncleHash(b *testing.B) { 76 uncles := make([]*Header, 0) 77 b.ResetTimer() 78 for i := 0; i < b.N; i++ { 79 CalcUncleHash(uncles) 80 } 81 }