github.com/klaytn/klaytn@v1.10.2/blockchain/types/block_test.go (about)

     1  // Modifications Copyright 2018 The klaytn Authors
     2  // Copyright 2014 The go-ethereum Authors
     3  // This file is part of the go-ethereum library.
     4  //
     5  // The go-ethereum library is free software: you can redistribute it and/or modify
     6  // it under the terms of the GNU Lesser General Public License as published by
     7  // the Free Software Foundation, either version 3 of the License, or
     8  // (at your option) any later version.
     9  //
    10  // The go-ethereum library is distributed in the hope that it will be useful,
    11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    13  // GNU Lesser General Public License for more details.
    14  //
    15  // You should have received a copy of the GNU Lesser General Public License
    16  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    17  //
    18  // This file is derived from core/types/block_test.go (2018/06/04).
    19  // Modified and improved for the klaytn development.
    20  
    21  package types
    22  
    23  import (
    24  	"bytes"
    25  	"io/ioutil"
    26  	"math/big"
    27  	"reflect"
    28  	"testing"
    29  
    30  	"github.com/stretchr/testify/assert"
    31  
    32  	"github.com/klaytn/klaytn/common"
    33  	"github.com/klaytn/klaytn/rlp"
    34  )
    35  
    36  func genHeader() *Header {
    37  	return &Header{
    38  		ParentHash:  common.HexToHash("6e3826cd2407f01ceaad3cebc1235102001c0bb9a0f8c915ab2958303bc0972c"),
    39  		Rewardbase:  common.HexToAddress("5A0043070275d9f6054307Ee7348bD660849D90f"),
    40  		Root:        common.HexToHash("f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fb97"),
    41  		TxHash:      common.HexToHash("f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fb99"),
    42  		ReceiptHash: common.HexToHash("f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fba9"),
    43  		Bloom:       BytesToBloom([]byte("f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fba9f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fba9f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fba9")),
    44  		BlockScore:  big.NewInt(10),
    45  		Number:      big.NewInt(9),
    46  		GasUsed:     uint64(100),
    47  		Time:        big.NewInt(1549606547),
    48  		TimeFoS:     20,
    49  		Extra:       common.Hex2Bytes("0xd7820404846b6c617988676f312e31302e33856c696e75780000000000000000f90164f854942525dbdbb7ed59b8e02a6c4d3fb2a75b8b07e25094718aabda0f016e6127db6575cf0a803da7d4087b94c9ead9f875f4adc261a4b5dc264ee58039f281a794d8408db804ab30691e984e8623e2edb4cba853dfb8419da17c0fe3fdecbc32f3a2fbedf8300693067d0f944014cf575076df888709b2057869f36edc299542be1372d2b582bd8dc8e2c220059270fa37b2a2fe287ffb00f8c9b841e8765ffc1bfda438115f9bfa912f39bcc2a286fdb67c71229c9fe4084db5dd942d2076e244a4faf915aeb51a5ea097706e5421e2a7985425d0f9d6fa446c378d00b8411511d9bbd78f6a8b2151406c3c5071bcbe7a452a2ad4eebe1f9a15494ef8ff3b63b41e033de9a02c48e640d51944d7d20a462f7785525c6b26c401177521808101b841c7abdfa3ef691e8a306c8fedc32ee6af44b2fc82b921358466db9948ffce42f221a6870e01eda5ab4f54b6ee68798631e2d46a090c76c8a5d507453acaec48c401"),
    50  		Governance:  common.Hex2Bytes("b8dc7b22676f7665726e696e676e6f6465223a22307865373333636234643237396461363936663330643437306638633034646563623534666362306432222c22676f7665726e616e63656d6f6465223a2273696e676c65222c22726577617264223a7b226d696e74696e67616d6f756e74223a393630303030303030303030303030303030302c22726174696f223a2233342f33332f3333227d2c22626674223a7b2265706f6368223a33303030302c22706f6c696379223a302c22737562223a32317d2c22756e69745072696365223a32353030303030303030307d"),
    51  		Vote:        common.Hex2Bytes("e194e733cb4d279da696f30d470f8c04decb54fcb0d28565706f6368853330303030"),
    52  	}
    53  }
    54  
    55  func genMagmaHeader() *Header {
    56  	header := genHeader()
    57  	header.BaseFee = big.NewInt(25000000000)
    58  	return header
    59  }
    60  
    61  func genBlock() *Block {
    62  	return &Block{
    63  		header:       genHeader(),
    64  		transactions: Transactions{},
    65  	}
    66  }
    67  
    68  func genMagmaBlock() *Block {
    69  	return &Block{
    70  		header:       genMagmaHeader(),
    71  		transactions: Transactions{},
    72  	}
    73  }
    74  
    75  // TestBlockHash tests if the hash calculator can return the correct block hash.
    76  func TestBlockHash(t *testing.T) {
    77  	/*
    78  		> klay.getBlock(49921251)
    79  		{
    80  			blockscore: "0x1",
    81  			extraData: "0xd883010503846b6c617988676f312e31342e36856c696e757800000000000000f90604f901ce94bca8ffa45cc8e30bbc0522cdf1a1e0ebf540dfe29452d41ca72af615a1ac3301b0a93efa222ecc7541941782834bf8847e235f21f2c1f13fca4d5dff66219436ff2aa21d5c6828ee12cd2bc3de0e987bc0d4e7949419fa2e3b9eb1158de31be66c586a52f49c5de794e3d92072d8b9a59a0427485a1b5f459271df457c94b9456fd65a6810b19df24832c50b2e61a41867f8948a88a093c05376886754a9b70b0d0a826a5e64be9456e8c1463c341abf8b168c3079ea41ce8a387e18946873352021fe9226884616dc6f189f289aeb0cc5940b59cae1f03534209fdb9ddf5ea65b310cd7060c9453970bc504cbc41c2a0e6460aef7d866551862849416c192585a0ab24b552783b4bf7d8dc9f6855c3594e783fc94fddaeebef7293d6c5864cff280f121e194a2ba8f7798649a778a1fd66d3035904949fec555947b065fbb3a9b6e97f2ba788d63700bd4b8b408bc945e59db28cef098d5a2e877f84127aed10d7378f294ed6ee8a1877f9582858dbe2509abb0ac33e5f24e9456e3a565e31f8fb0ba0b12c03355518c6437212094386ca3cb8bb13f48d1a6adc1fb8df09e7bb7f9c8949f10d38e650184142c1c791e1b8d03e5f14ae47f94f8c9c61c5e7f2b6219d1c28b94e5cb3cdc802594b841f1cbe853c3df5fd75d25d7343e80455e103477f8b381aa0cbac56245da14b9093bcd2134bc12a7b99c02386a2a40bfd016d207c75fd0d2e34b476885448cdcd400f903edb8419e719dd155e9cc7a23f5c4e4a4ac43e4ab38758f5aa9d864267306bb0afafa8c3eaab8933cd4f0e585da5281fb4acfdd5e8ab5901ffa00dfc8bcc1146490455101b84105df89ca0f0ecebfee0358c68c9b14b9cf29af27fb70f7fefcd1d10e11c1503732280fbffec53c559bff1366cfc6e11153fab9e45d0b4230b4f418dbc7fe8d4301b841464414eadf064c3354e05b17188b8a12bb6831a7957e1e43c9f6417189863ed43b1efdd86e932fca444c80b43760adf2fa403d0938a403d7a880e9a25861caab00b841d92d24405ef652f939c91b0f12153de3d0f79f20ccff9d19b5b1907eaa37b4cb54b370cb097b8a3b3eedd484b5e59dcdbb739635a756ebd16ff67079f279292100b8410019ea8f699c67554fed7769438562bb9afcacce87d4b68aa73d79765adf60a554da08109bcae270f472e893154b2b1f5d6db11273a0fd3e386ab8a9044fb0d601b841730b78e6506ad3d2e6aa96e398a50f16350d52e67f8de48a0f1e6eb0543125515707371c9ae1896ac1ad234c6a8b69d4626e37ddfeab77b1d908762ba24bbe2300b841bc1049d862282e4a28b383c71ce08e036e486d633908dc3c4c982d3ef6209168750ffb00886e704d527cc4cb30a0f598d4888e6b645085614920192e781da89001b841949ea5ec5d8e8e3da20a54be04452a239f77e3d540a0bb1dbdcecdc7b952616d08959b9fbfa6529a968e0c9ec7b023b5271aa546799f944210ec8ed786a8efa101b84184407503c7b15a33d115721ea924e3eff4e131b4272d4c6eaab33e88390d9fbf3572f45c8ab5e7d894c4f99df6b7b52da32c0e8a4fb8903c9e81f40732503db900b841f372fb55ac864896d7d78219fc1aacd77641b4e78762e979325fff2b23b194d855939e37bc7eaaad6084dfc4cecf04806c38419ef505fd4114ee9da864bc5e2900b8417806616afaa7d21e49be276a086722cc81d8a3812c19dc80c5e32fa7dd46b3b37a387c6cf83873e2c0b114e1b833d49db2934666e2860d9b57a72fd6093118b900b841662361882fddbc22cd58eb794f06fcfeca39ccdffd642f7450037bab61920d5c06e4d65fa0397dc88875605d2821668a0ebcb94e43d72f5e27eee45860ba95b200b841cc9ba8706b8711e1a9cce58077688273709b0fdfb820a4649f624dd3eff6d6006ce999397e514553348334649b2baed97d7e0e1705459cc22c12ac3842a6e42a00b8415d7cd03c4948afd6dd29662145c661cb2a28a5da75771eddf3436db1e095237c26223e1034b4856f077f5d09a0c62442c5e8d7147caef5ab0f5af41a2edcdbe800b841762ebace1d091ec9eb161d5bfb32bdd232ecf638b4e567333cb8f38783c8973d79a7784cab13a6ceecd077b60be847113b2f8b52be2bbb16a6a496dd166d697e00",
    82  			gasUsed: 974936,
    83  			governanceData: "0x",
    84  			hash: "0x5c0ba5050c597bbe3edfa4434b1bd59ef2c7e3d695bd023469e649dbea6aa02d",
    85  			logsBloom: "0x00000000000000000000000000000000000000100000000000000000400000000004000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000040000000000000000000000000000000000010000000000000000008400000000000000080000000000000000000000000000000000000000000020008000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000008000000",
    86  			number: 49921251,
    87  			parentHash: "0x17ef3bfcd861e9f42f06616262196e3af53bbb03ef8ce1958434b22f2287aa52",
    88  			receiptsRoot: "0x01125072b53afaed30d7c90b2e28b77abb2eb2af2516a2feb00fce865dff8f92",
    89  			reward: "0x179679457f93094a4e7186abcb2089661e92fc22",
    90  			size: 5654,
    91  			stateRoot: "0xf7cabcd8242901bc774ca7af1d9858e7f2adfa1c8d3a44402e270ca88ba6b07f",
    92  			timestamp: 1611578519,
    93  			timestampFoS: 26,
    94  			totalBlockScore: "0x2f9bce4",
    95  			transactions: ["0x5ad7e8803c3da290f232c6ac65fa6be31846d411f57ef62f7a2a661727fcfe4a", "0x896f2db7c56efdc74c972e18c24892ddb1924cf15081e60924252a07f3df1458", "0x4a1c6f03b17ad92ad12076d94a79dfcaecf45f64d4594c3eed7cfdc52d26f0cd", "0xbe1e2342cfc7d342c6618c02e2c37b6f721275bc8b2206b3157999a3a6a2ff66", "0x9baf8ae069c1706cb3eceb2bc33404387c66e26234ddbdd0bb5eca7b794e41fe", "0x799a2110933169ce224962b86184826c1c892f4f1f2b3f21485baa69a3cc18d3", "0x0d7870349032a3cdd0bff1cba1dfef2f09b5346efb67bb69a16dcd7d2caaac58"],
    96  			transactionsRoot: "0xfb13666763ea4562bdb3f6b288d32c963a0b05edbab59f93677aa04306784070",
    97  			voteData: "0x"
    98  		}
    99  	*/
   100  
   101  	header := &Header{
   102  		ParentHash:  common.HexToHash("0x17ef3bfcd861e9f42f06616262196e3af53bbb03ef8ce1958434b22f2287aa52"),
   103  		Rewardbase:  common.HexToAddress("0x179679457f93094a4e7186abcb2089661e92fc22"),
   104  		Root:        common.HexToHash("0xf7cabcd8242901bc774ca7af1d9858e7f2adfa1c8d3a44402e270ca88ba6b07f"),
   105  		TxHash:      common.HexToHash("0xfb13666763ea4562bdb3f6b288d32c963a0b05edbab59f93677aa04306784070"),
   106  		ReceiptHash: common.HexToHash("0x01125072b53afaed30d7c90b2e28b77abb2eb2af2516a2feb00fce865dff8f92"),
   107  		Bloom:       BytesToBloom(common.Hex2Bytes("00000000000000000000000000000000000000100000000000000000400000000004000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000040000000000000000000000000000000000010000000000000000008400000000000000080000000000000000000000000000000000000000000020008000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000008000000")),
   108  		BlockScore:  big.NewInt(1),
   109  		Number:      big.NewInt(49921251),
   110  		GasUsed:     uint64(974936),
   111  		Time:        big.NewInt(1611578519),
   112  		TimeFoS:     26,
   113  		Extra:       common.Hex2Bytes("d883010503846b6c617988676f312e31342e36856c696e757800000000000000f90604f901ce94bca8ffa45cc8e30bbc0522cdf1a1e0ebf540dfe29452d41ca72af615a1ac3301b0a93efa222ecc7541941782834bf8847e235f21f2c1f13fca4d5dff66219436ff2aa21d5c6828ee12cd2bc3de0e987bc0d4e7949419fa2e3b9eb1158de31be66c586a52f49c5de794e3d92072d8b9a59a0427485a1b5f459271df457c94b9456fd65a6810b19df24832c50b2e61a41867f8948a88a093c05376886754a9b70b0d0a826a5e64be9456e8c1463c341abf8b168c3079ea41ce8a387e18946873352021fe9226884616dc6f189f289aeb0cc5940b59cae1f03534209fdb9ddf5ea65b310cd7060c9453970bc504cbc41c2a0e6460aef7d866551862849416c192585a0ab24b552783b4bf7d8dc9f6855c3594e783fc94fddaeebef7293d6c5864cff280f121e194a2ba8f7798649a778a1fd66d3035904949fec555947b065fbb3a9b6e97f2ba788d63700bd4b8b408bc945e59db28cef098d5a2e877f84127aed10d7378f294ed6ee8a1877f9582858dbe2509abb0ac33e5f24e9456e3a565e31f8fb0ba0b12c03355518c6437212094386ca3cb8bb13f48d1a6adc1fb8df09e7bb7f9c8949f10d38e650184142c1c791e1b8d03e5f14ae47f94f8c9c61c5e7f2b6219d1c28b94e5cb3cdc802594b841f1cbe853c3df5fd75d25d7343e80455e103477f8b381aa0cbac56245da14b9093bcd2134bc12a7b99c02386a2a40bfd016d207c75fd0d2e34b476885448cdcd400f903edb8419e719dd155e9cc7a23f5c4e4a4ac43e4ab38758f5aa9d864267306bb0afafa8c3eaab8933cd4f0e585da5281fb4acfdd5e8ab5901ffa00dfc8bcc1146490455101b84105df89ca0f0ecebfee0358c68c9b14b9cf29af27fb70f7fefcd1d10e11c1503732280fbffec53c559bff1366cfc6e11153fab9e45d0b4230b4f418dbc7fe8d4301b841464414eadf064c3354e05b17188b8a12bb6831a7957e1e43c9f6417189863ed43b1efdd86e932fca444c80b43760adf2fa403d0938a403d7a880e9a25861caab00b841d92d24405ef652f939c91b0f12153de3d0f79f20ccff9d19b5b1907eaa37b4cb54b370cb097b8a3b3eedd484b5e59dcdbb739635a756ebd16ff67079f279292100b8410019ea8f699c67554fed7769438562bb9afcacce87d4b68aa73d79765adf60a554da08109bcae270f472e893154b2b1f5d6db11273a0fd3e386ab8a9044fb0d601b841730b78e6506ad3d2e6aa96e398a50f16350d52e67f8de48a0f1e6eb0543125515707371c9ae1896ac1ad234c6a8b69d4626e37ddfeab77b1d908762ba24bbe2300b841bc1049d862282e4a28b383c71ce08e036e486d633908dc3c4c982d3ef6209168750ffb00886e704d527cc4cb30a0f598d4888e6b645085614920192e781da89001b841949ea5ec5d8e8e3da20a54be04452a239f77e3d540a0bb1dbdcecdc7b952616d08959b9fbfa6529a968e0c9ec7b023b5271aa546799f944210ec8ed786a8efa101b84184407503c7b15a33d115721ea924e3eff4e131b4272d4c6eaab33e88390d9fbf3572f45c8ab5e7d894c4f99df6b7b52da32c0e8a4fb8903c9e81f40732503db900b841f372fb55ac864896d7d78219fc1aacd77641b4e78762e979325fff2b23b194d855939e37bc7eaaad6084dfc4cecf04806c38419ef505fd4114ee9da864bc5e2900b8417806616afaa7d21e49be276a086722cc81d8a3812c19dc80c5e32fa7dd46b3b37a387c6cf83873e2c0b114e1b833d49db2934666e2860d9b57a72fd6093118b900b841662361882fddbc22cd58eb794f06fcfeca39ccdffd642f7450037bab61920d5c06e4d65fa0397dc88875605d2821668a0ebcb94e43d72f5e27eee45860ba95b200b841cc9ba8706b8711e1a9cce58077688273709b0fdfb820a4649f624dd3eff6d6006ce999397e514553348334649b2baed97d7e0e1705459cc22c12ac3842a6e42a00b8415d7cd03c4948afd6dd29662145c661cb2a28a5da75771eddf3436db1e095237c26223e1034b4856f077f5d09a0c62442c5e8d7147caef5ab0f5af41a2edcdbe800b841762ebace1d091ec9eb161d5bfb32bdd232ecf638b4e567333cb8f38783c8973d79a7784cab13a6ceecd077b60be847113b2f8b52be2bbb16a6a496dd166d697e00"),
   114  		Governance:  common.Hex2Bytes(""),
   115  		Vote:        common.Hex2Bytes(""),
   116  	}
   117  
   118  	b := &Block{
   119  		header: header,
   120  	}
   121  
   122  	assert.NotEqual(t, b.Hash(), common.HexToAddress("0x5c0ba5050c597bbe3edfa4434b1bd59ef2c7e3d695bd023469e649dbea6aa02d"))
   123  	t.Log(b.Hash().String())
   124  }
   125  
   126  func TestBlockEncoding(t *testing.T) {
   127  	b := genBlock()
   128  
   129  	// To make block encoded bytes, uncomment below.
   130  	//encB, err := rlp.EncodeToBytes(b)
   131  	//if err != nil {
   132  	//	t.Fatal(err)
   133  	//}
   134  	//fmt.Println(common.Bytes2Hex(encB))
   135  	//return
   136  
   137  	blockEnc := common.FromHex("f902adf902a9a06e3826cd2407f01ceaad3cebc1235102001c0bb9a0f8c915ab2958303bc0972c945a0043070275d9f6054307ee7348bd660849d90fa0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fb97a0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fb99a0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fba9b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006634313261313563623634373762643162306534386538666332643130313239326135633162623963306237386637613131323966656134663836356662613966343132613135636236343737626431623065343865386663326431303132393261356331626239633062373866376131313239666561346638363566626139663431326131356362363437376264316230653438653866633264313031323932613563316262396330623738663761313132396665613466383635666261390a0964845c5d1e931480b8deb8dc7b22676f7665726e696e676e6f6465223a22307865373333636234643237396461363936663330643437306638633034646563623534666362306432222c22676f7665726e616e63656d6f6465223a2273696e676c65222c22726577617264223a7b226d696e74696e67616d6f756e74223a393630303030303030303030303030303030302c22726174696f223a2233342f33332f3333227d2c22626674223a7b2265706f6368223a33303030302c22706f6c696379223a302c22737562223a32317d2c22756e69745072696365223a32353030303030303030307da2e194e733cb4d279da696f30d470f8c04decb54fcb0d28565706f6368853330303030c0")
   138  	var block Block
   139  	if err := rlp.DecodeBytes(blockEnc, &block); err != nil {
   140  		t.Fatal("decode error: ", err)
   141  	}
   142  
   143  	header := block.header
   144  	println(header.String())
   145  
   146  	check := func(f string, got, want interface{}) {
   147  		if !reflect.DeepEqual(got, want) {
   148  			t.Errorf("%s mismatch: got %v, want %v", f, got, want)
   149  		}
   150  	}
   151  
   152  	// Comparing the hash from  Header and ToHeader()
   153  	fHeader := Header{
   154  		ParentHash:  header.ParentHash,
   155  		Rewardbase:  header.Rewardbase,
   156  		Root:        header.Root,
   157  		TxHash:      header.TxHash,
   158  		ReceiptHash: header.ReceiptHash,
   159  		Bloom:       header.Bloom,
   160  		BlockScore:  header.BlockScore,
   161  		Number:      header.Number,
   162  		GasUsed:     header.GasUsed,
   163  		Time:        header.Time,
   164  		TimeFoS:     header.TimeFoS,
   165  		Extra:       header.Extra,
   166  		Governance:  header.Governance,
   167  		Vote:        header.Vote,
   168  	}
   169  
   170  	resHash := rlpHash(fHeader)
   171  	resCopiedBlockHeader := rlpHash(header)
   172  	check("Hash", resHash, resCopiedBlockHeader)
   173  
   174  	// Check the field value of example block.
   175  	check("ParentHash", block.ParentHash(), b.ParentHash())
   176  	check("Rewardbase", block.Rewardbase(), b.Rewardbase())
   177  	check("Root", block.Root(), b.Root())
   178  	check("TxHash", block.TxHash(), b.TxHash())
   179  	check("ReceiptHash", block.ReceiptHash(), b.ReceiptHash())
   180  	check("Bloom", block.Bloom(), b.Bloom())
   181  	check("BlockScore", block.BlockScore(), b.BlockScore())
   182  	check("NUmber", block.Number(), b.Number())
   183  	check("GasUsed", block.GasUsed(), b.GasUsed())
   184  	check("Time", block.Time(), b.Time())
   185  	check("TimeFoS", block.TimeFoS(), b.TimeFoS())
   186  	check("Extra", block.Extra(), b.Extra())
   187  	check("Hash", block.Hash(), b.Hash())
   188  	check("Size", block.Size(), common.StorageSize(len(blockEnc)))
   189  
   190  	// TODO-Klaytn Consider to use new block with some transactions
   191  	//tx1 := NewTransaction(0, common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87"), big.NewInt(10), 50000, big.NewInt(10), nil)
   192  	//
   193  	//tx1, _ = tx1.WithSignature(HomesteadSigner{}, common.Hex2Bytes("9bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094f8a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b100"))
   194  	//fmt.Println(block.Transactions()[0].Hash())
   195  	//fmt.Println(tx1.data)
   196  	//fmt.Println(tx1.Hash())
   197  	//check("len(Transactions)", len(block.Transactions()), 1)
   198  	//check("Transactions[0].Hash", block.Transactions()[0].Hash(), tx1.Hash())
   199  
   200  	ourBlockEnc, err := rlp.EncodeToBytes(&block)
   201  	if err != nil {
   202  		t.Fatal("encode error: ", err)
   203  	}
   204  	if !bytes.Equal(ourBlockEnc, blockEnc) {
   205  		t.Errorf("encoded block mismatch:\ngot:  %x\nwant: %x", ourBlockEnc, blockEnc)
   206  	}
   207  }
   208  
   209  func TestEIP2718BlockEncoding(t *testing.T) {
   210  	b := genBlock()
   211  
   212  	blockEnc := common.FromHex("f903aff902a9a06e3826cd2407f01ceaad3cebc1235102001c0bb9a0f8c915ab2958303bc0972c945a0043070275d9f6054307ee7348bd660849d90fa0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fb97a0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fb99a0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fba9b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006634313261313563623634373762643162306534386538666332643130313239326135633162623963306237386637613131323966656134663836356662613966343132613135636236343737626431623065343865386663326431303132393261356331626239633062373866376131313239666561346638363566626139663431326131356362363437376264316230653438653866633264313031323932613563316262396330623738663761313132396665613466383635666261390a0964845c5d1e931480b8deb8dc7b22676f7665726e696e676e6f6465223a22307865373333636234643237396461363936663330643437306638633034646563623534666362306432222c22676f7665726e616e63656d6f6465223a2273696e676c65222c22726577617264223a7b226d696e74696e67616d6f756e74223a393630303030303030303030303030303030302c22726174696f223a2233342f33332f3333227d2c22626674223a7b2265706f6368223a33303030302c22706f6c696379223a302c22737562223a32317d2c22756e69745072696365223a32353030303030303030307da2e194e733cb4d279da696f30d470f8c04decb54fcb0d28565706f6368853330303030f90100f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a8025a09bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094fa08a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b17801f89b01800a8301e24194095e7baea6a6c7c4c2dfeb977efac326af552d878080f838f7940000000000000000000000000000000000000001e1a0000000000000000000000000000000000000000000000000000000000000000001a03dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335a0476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef14")
   213  	var block Block
   214  	if err := rlp.DecodeBytes(blockEnc, &block); err != nil {
   215  		t.Fatal("decode error: ", err)
   216  	}
   217  	check := func(f string, got, want interface{}) {
   218  		if !reflect.DeepEqual(got, want) {
   219  			t.Errorf("%s mismatch: got %v, want %v", f, got, want)
   220  		}
   221  	}
   222  
   223  	check("ParentHash", block.ParentHash(), b.ParentHash())
   224  	check("Rewardbase", block.Rewardbase(), b.Rewardbase())
   225  	check("Root", block.Root(), b.Root())
   226  	check("TxHash", block.TxHash(), b.TxHash())
   227  	check("ReceiptHash", block.ReceiptHash(), b.ReceiptHash())
   228  	check("Bloom", block.Bloom(), b.Bloom())
   229  	check("BlockScore", block.BlockScore(), b.BlockScore())
   230  	check("NUmber", block.Number(), b.Number())
   231  	check("GasUsed", block.GasUsed(), b.GasUsed())
   232  	check("Time", block.Time(), b.Time())
   233  	check("TimeFoS", block.TimeFoS(), b.TimeFoS())
   234  	check("Extra", block.Extra(), b.Extra())
   235  	check("Hash", block.Hash(), b.Hash())
   236  	check("Size", block.Size(), common.StorageSize(len(blockEnc)))
   237  
   238  	// Create legacy tx.
   239  	to := common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87")
   240  	tx1 := NewTx(&TxInternalDataLegacy{
   241  		AccountNonce: 0,
   242  		Recipient:    &to,
   243  		Amount:       big.NewInt(10),
   244  		GasLimit:     50000,
   245  		Price:        big.NewInt(10),
   246  	})
   247  	sig := common.Hex2Bytes("9bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094f8a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b100")
   248  	tx1, _ = tx1.WithSignature(LatestSignerForChainID(big.NewInt(1)), sig)
   249  
   250  	// Create ACL tx.
   251  	addr := common.HexToAddress("0x0000000000000000000000000000000000000001")
   252  	tx2 := NewTx(&TxInternalDataEthereumAccessList{
   253  		ChainID:      big.NewInt(1),
   254  		AccountNonce: 0,
   255  		Recipient:    &to,
   256  		GasLimit:     123457,
   257  		Price:        big.NewInt(10),
   258  		AccessList:   AccessList{{Address: addr, StorageKeys: []common.Hash{{0}}}},
   259  	})
   260  	sig2 := common.Hex2Bytes("3dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef1401")
   261  	tx2, _ = tx2.WithSignature(LatestSignerForChainID(big.NewInt(1)), sig2)
   262  	check("len(Transactions)", len(block.Transactions()), 2)
   263  	check("Transactions[0].Hash", block.Transactions()[0].Hash(), tx1.Hash())
   264  	check("Transactions[1].Hash", block.Transactions()[1].Hash(), tx2.Hash())
   265  	check("Transactions[1].Type()", block.Transactions()[1].Type(), TxType(TxTypeEthereumAccessList))
   266  
   267  	ourBlockEnc, err := rlp.EncodeToBytes(&block)
   268  	if err != nil {
   269  		t.Fatal("encode error: ", err)
   270  	}
   271  	if !bytes.Equal(ourBlockEnc, blockEnc) {
   272  		t.Errorf("encoded block mismatch:\ngot:  %x\nwant: %x", ourBlockEnc, blockEnc)
   273  	}
   274  }
   275  
   276  func TestMagmaBlockEncoding(t *testing.T) {
   277  	b := genMagmaBlock()
   278  
   279  	// blockEnc := common.FromHex("f9044ff902a9a06e3826cd2407f01ceaad3cebc1235102001c0bb9a0f8c915ab2958303bc0972c945a0043070275d9f6054307ee7348bd660849d90fa0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fb97a0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fb99a0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fba9b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006634313261313563623634373762643162306534386538666332643130313239326135633162623963306237386637613131323966656134663836356662613966343132613135636236343737626431623065343865386663326431303132393261356331626239633062373866376131313239666561346638363566626139663431326131356362363437376264316230653438653866633264313031323932613563316262396330623738663761313132396665613466383635666261390a0964845c5d1e931480b8deb8dc7b22676f7665726e696e676e6f6465223a22307865373333636234643237396461363936663330643437306638633034646563623534666362306432222c22676f7665726e616e63656d6f6465223a2273696e676c65222c22726577617264223a7b226d696e74696e67616d6f756e74223a393630303030303030303030303030303030302c22726174696f223a2233342f33332f3333227d2c22626674223a7b2265706f6368223a33303030302c22706f6c696379223a302c22737562223a32317d2c22756e69745072696365223a32353030303030303030307da2e194e733cb4d279da696f30d470f8c04decb54fcb0d28565706f6368853330303030f901a0f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a8025a09bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094fa08a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b17801f89b01800a8301e24194095e7baea6a6c7c4c2dfeb977efac326af552d878080f838f7940000000000000000000000000000000000000001e1a0000000000000000000000000000000000000000000000000000000000000000001a03dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335a0476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef147802f89c01800a0a8301e24194095e7baea6a6c7c4c2dfeb977efac326af552d878080f838f7940000000000000000000000000000000000000002e1a0000000000000000000000000000000000000000000000000000000000000000001a03dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335a0476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef14")
   280  	blockEnc := common.FromHex("f90455f902afa06e3826cd2407f01ceaad3cebc1235102001c0bb9a0f8c915ab2958303bc0972c945a0043070275d9f6054307ee7348bd660849d90fa0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fb97a0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fb99a0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fba9b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006634313261313563623634373762643162306534386538666332643130313239326135633162623963306237386637613131323966656134663836356662613966343132613135636236343737626431623065343865386663326431303132393261356331626239633062373866376131313239666561346638363566626139663431326131356362363437376264316230653438653866633264313031323932613563316262396330623738663761313132396665613466383635666261390a0964845c5d1e931480b8deb8dc7b22676f7665726e696e676e6f6465223a22307865373333636234643237396461363936663330643437306638633034646563623534666362306432222c22676f7665726e616e63656d6f6465223a2273696e676c65222c22726577617264223a7b226d696e74696e67616d6f756e74223a393630303030303030303030303030303030302c22726174696f223a2233342f33332f3333227d2c22626674223a7b2265706f6368223a33303030302c22706f6c696379223a302c22737562223a32317d2c22756e69745072696365223a32353030303030303030307da2e194e733cb4d279da696f30d470f8c04decb54fcb0d28565706f63688533303030308505d21dba00f901a0f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a8025a09bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094fa08a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b17801f89b01800a8301e24194095e7baea6a6c7c4c2dfeb977efac326af552d878080f838f7940000000000000000000000000000000000000001e1a0000000000000000000000000000000000000000000000000000000000000000001a03dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335a0476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef147802f89c01800a0a8301e24194095e7baea6a6c7c4c2dfeb977efac326af552d878080f838f7940000000000000000000000000000000000000002e1a0000000000000000000000000000000000000000000000000000000000000000001a03dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335a0476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef14")
   281  	var block Block
   282  	if err := rlp.DecodeBytes(blockEnc, &block); err != nil {
   283  		t.Fatal("decode error: ", err)
   284  	}
   285  	check := func(f string, got, want interface{}) {
   286  		if !reflect.DeepEqual(got, want) {
   287  			t.Errorf("%s mismatch: got %v, want %v", f, got, want)
   288  		}
   289  	}
   290  
   291  	check("ParentHash", block.ParentHash(), b.ParentHash())
   292  	check("Rewardbase", block.Rewardbase(), b.Rewardbase())
   293  	check("Root", block.Root(), b.Root())
   294  	check("TxHash", block.TxHash(), b.TxHash())
   295  	check("ReceiptHash", block.ReceiptHash(), b.ReceiptHash())
   296  	check("Bloom", block.Bloom(), b.Bloom())
   297  	check("BlockScore", block.BlockScore(), b.BlockScore())
   298  	check("NUmber", block.Number(), b.Number())
   299  	check("GasUsed", block.GasUsed(), b.GasUsed())
   300  	check("Time", block.Time(), b.Time())
   301  	check("TimeFoS", block.TimeFoS(), b.TimeFoS())
   302  	check("Extra", block.Extra(), b.Extra())
   303  	check("Hash", block.Hash(), b.Hash())
   304  	check("BaseFee", block.header.BaseFee, b.Header().BaseFee)
   305  	check("Size", block.Size(), common.StorageSize(len(blockEnc)))
   306  
   307  	// Create legacy tx.
   308  	to := common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87")
   309  	tx1 := NewTx(&TxInternalDataLegacy{
   310  		AccountNonce: 0,
   311  		Recipient:    &to,
   312  		Amount:       big.NewInt(10),
   313  		GasLimit:     50000,
   314  		Price:        big.NewInt(10),
   315  	})
   316  	sig := common.Hex2Bytes("9bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094f8a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b100")
   317  	tx1, _ = tx1.WithSignature(LatestSignerForChainID(big.NewInt(1)), sig)
   318  
   319  	// Create ACL tx.
   320  	addr := common.HexToAddress("0x0000000000000000000000000000000000000001")
   321  	tx2 := NewTx(&TxInternalDataEthereumAccessList{
   322  		ChainID:      big.NewInt(1),
   323  		AccountNonce: 0,
   324  		Recipient:    &to,
   325  		GasLimit:     123457,
   326  		Price:        big.NewInt(10),
   327  		AccessList:   AccessList{{Address: addr, StorageKeys: []common.Hash{{0}}}},
   328  	})
   329  	sig2 := common.Hex2Bytes("3dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef1401")
   330  	tx2, _ = tx2.WithSignature(LatestSignerForChainID(big.NewInt(1)), sig2)
   331  
   332  	// Create DynamicFee tx.
   333  	addr2 := common.HexToAddress("0x0000000000000000000000000000000000000002")
   334  	tx3 := NewTx(&TxInternalDataEthereumDynamicFee{
   335  		ChainID:      big.NewInt(1),
   336  		AccountNonce: 0,
   337  		Recipient:    &to,
   338  		GasLimit:     123457,
   339  		GasFeeCap:    big.NewInt(10),
   340  		GasTipCap:    big.NewInt(10),
   341  		AccessList:   AccessList{{Address: addr2, StorageKeys: []common.Hash{{0}}}},
   342  	})
   343  	sig3 := common.Hex2Bytes("3dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef1401")
   344  	tx3, _ = tx3.WithSignature(LatestSignerForChainID(big.NewInt(1)), sig3)
   345  
   346  	check("len(Transactions)", len(block.Transactions()), 3)
   347  	check("Transactions[0].Hash", block.Transactions()[0].Hash(), tx1.Hash())
   348  	check("Transactions[1].Hash", block.Transactions()[1].Hash(), tx2.Hash())
   349  	check("Transactions[1].Type()", block.Transactions()[1].Type(), TxType(TxTypeEthereumAccessList))
   350  	check("Transactions[2].Hash", block.Transactions()[2].Hash(), tx3.Hash())
   351  	check("Transactions[2].Type()", block.Transactions()[2].Type(), TxType(TxTypeEthereumDynamicFee))
   352  
   353  	ourBlockEnc, err := rlp.EncodeToBytes(&block)
   354  	temp := common.Bytes2Hex(ourBlockEnc)
   355  	t.Log(temp)
   356  	if err != nil {
   357  		t.Fatal("encode error: ", err)
   358  	}
   359  	if !bytes.Equal(ourBlockEnc, blockEnc) {
   360  		t.Errorf("encoded block mismatch:\ngot:  %x\nwant: %x", ourBlockEnc, blockEnc)
   361  	}
   362  }
   363  
   364  func TestEIP1559BlockEncoding(t *testing.T) {
   365  	b := genBlock()
   366  
   367  	blockEnc := common.FromHex("f9044ff902a9a06e3826cd2407f01ceaad3cebc1235102001c0bb9a0f8c915ab2958303bc0972c945a0043070275d9f6054307ee7348bd660849d90fa0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fb97a0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fb99a0f412a15cb6477bd1b0e48e8fc2d101292a5c1bb9c0b78f7a1129fea4f865fba9b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006634313261313563623634373762643162306534386538666332643130313239326135633162623963306237386637613131323966656134663836356662613966343132613135636236343737626431623065343865386663326431303132393261356331626239633062373866376131313239666561346638363566626139663431326131356362363437376264316230653438653866633264313031323932613563316262396330623738663761313132396665613466383635666261390a0964845c5d1e931480b8deb8dc7b22676f7665726e696e676e6f6465223a22307865373333636234643237396461363936663330643437306638633034646563623534666362306432222c22676f7665726e616e63656d6f6465223a2273696e676c65222c22726577617264223a7b226d696e74696e67616d6f756e74223a393630303030303030303030303030303030302c22726174696f223a2233342f33332f3333227d2c22626674223a7b2265706f6368223a33303030302c22706f6c696379223a302c22737562223a32317d2c22756e69745072696365223a32353030303030303030307da2e194e733cb4d279da696f30d470f8c04decb54fcb0d28565706f6368853330303030f901a0f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a8025a09bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094fa08a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b17801f89b01800a8301e24194095e7baea6a6c7c4c2dfeb977efac326af552d878080f838f7940000000000000000000000000000000000000001e1a0000000000000000000000000000000000000000000000000000000000000000001a03dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335a0476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef147802f89c01800a0a8301e24194095e7baea6a6c7c4c2dfeb977efac326af552d878080f838f7940000000000000000000000000000000000000002e1a0000000000000000000000000000000000000000000000000000000000000000001a03dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335a0476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef14")
   368  	var block Block
   369  	if err := rlp.DecodeBytes(blockEnc, &block); err != nil {
   370  		t.Fatal("decode error: ", err)
   371  	}
   372  	check := func(f string, got, want interface{}) {
   373  		if !reflect.DeepEqual(got, want) {
   374  			t.Errorf("%s mismatch: got %v, want %v", f, got, want)
   375  		}
   376  	}
   377  
   378  	check("ParentHash", block.ParentHash(), b.ParentHash())
   379  	check("Rewardbase", block.Rewardbase(), b.Rewardbase())
   380  	check("Root", block.Root(), b.Root())
   381  	check("TxHash", block.TxHash(), b.TxHash())
   382  	check("ReceiptHash", block.ReceiptHash(), b.ReceiptHash())
   383  	check("Bloom", block.Bloom(), b.Bloom())
   384  	check("BlockScore", block.BlockScore(), b.BlockScore())
   385  	check("NUmber", block.Number(), b.Number())
   386  	check("GasUsed", block.GasUsed(), b.GasUsed())
   387  	check("Time", block.Time(), b.Time())
   388  	check("TimeFoS", block.TimeFoS(), b.TimeFoS())
   389  	check("Extra", block.Extra(), b.Extra())
   390  	check("Hash", block.Hash(), b.Hash())
   391  	check("Size", block.Size(), common.StorageSize(len(blockEnc)))
   392  
   393  	// Create legacy tx.
   394  	to := common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87")
   395  	tx1 := NewTx(&TxInternalDataLegacy{
   396  		AccountNonce: 0,
   397  		Recipient:    &to,
   398  		Amount:       big.NewInt(10),
   399  		GasLimit:     50000,
   400  		Price:        big.NewInt(10),
   401  	})
   402  	sig := common.Hex2Bytes("9bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094f8a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b100")
   403  	tx1, _ = tx1.WithSignature(LatestSignerForChainID(big.NewInt(1)), sig)
   404  
   405  	// Create ACL tx.
   406  	addr := common.HexToAddress("0x0000000000000000000000000000000000000001")
   407  	tx2 := NewTx(&TxInternalDataEthereumAccessList{
   408  		ChainID:      big.NewInt(1),
   409  		AccountNonce: 0,
   410  		Recipient:    &to,
   411  		GasLimit:     123457,
   412  		Price:        big.NewInt(10),
   413  		AccessList:   AccessList{{Address: addr, StorageKeys: []common.Hash{{0}}}},
   414  	})
   415  	sig2 := common.Hex2Bytes("3dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef1401")
   416  	tx2, _ = tx2.WithSignature(LatestSignerForChainID(big.NewInt(1)), sig2)
   417  
   418  	// Create DynamicFee tx.
   419  	addr2 := common.HexToAddress("0x0000000000000000000000000000000000000002")
   420  	tx3 := NewTx(&TxInternalDataEthereumDynamicFee{
   421  		ChainID:      big.NewInt(1),
   422  		AccountNonce: 0,
   423  		Recipient:    &to,
   424  		GasLimit:     123457,
   425  		GasFeeCap:    big.NewInt(10),
   426  		GasTipCap:    big.NewInt(10),
   427  		AccessList:   AccessList{{Address: addr2, StorageKeys: []common.Hash{{0}}}},
   428  	})
   429  	sig3 := common.Hex2Bytes("3dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef1401")
   430  	tx3, _ = tx3.WithSignature(LatestSignerForChainID(big.NewInt(1)), sig3)
   431  
   432  	check("len(Transactions)", len(block.Transactions()), 3)
   433  	check("Transactions[0].Hash", block.Transactions()[0].Hash(), tx1.Hash())
   434  	check("Transactions[1].Hash", block.Transactions()[1].Hash(), tx2.Hash())
   435  	check("Transactions[1].Type()", block.Transactions()[1].Type(), TxType(TxTypeEthereumAccessList))
   436  	check("Transactions[2].Hash", block.Transactions()[2].Hash(), tx3.Hash())
   437  	check("Transactions[2].Type()", block.Transactions()[2].Type(), TxType(TxTypeEthereumDynamicFee))
   438  
   439  	ourBlockEnc, err := rlp.EncodeToBytes(&block)
   440  	if err != nil {
   441  		t.Fatal("encode error: ", err)
   442  	}
   443  	if !bytes.Equal(ourBlockEnc, blockEnc) {
   444  		t.Errorf("encoded block mismatch:\ngot:  %x\nwant: %x", ourBlockEnc, blockEnc)
   445  	}
   446  }
   447  
   448  func BenchmarkBlockEncodingHashWithInterface(b *testing.B) {
   449  	data, err := ioutil.ReadFile("../../tests/b1.rlp")
   450  	if err != nil {
   451  		b.Fatal("Failed to read a block file: ", err)
   452  	}
   453  
   454  	blockEnc := common.FromHex(string(data))
   455  	var block Block
   456  	if err := rlp.DecodeBytes(blockEnc, &block); err != nil {
   457  		b.Fatal("decode error: ", err)
   458  	}
   459  
   460  	b.ResetTimer()
   461  	for i := 0; i < b.N; i++ {
   462  		block.header.HashNoNonce()
   463  	}
   464  }
   465  
   466  func BenchmarkBlockEncodingRlpHash(b *testing.B) {
   467  	data, err := ioutil.ReadFile("../../tests/b1.rlp")
   468  	if err != nil {
   469  		b.Fatal("Failed to read a block file: ", err)
   470  	}
   471  
   472  	blockEnc := common.FromHex(string(data))
   473  	var block Block
   474  	if err := rlp.DecodeBytes(blockEnc, &block); err != nil {
   475  		b.Fatal("decode error: ", err)
   476  	}
   477  
   478  	b.ResetTimer()
   479  	for i := 0; i < b.N; i++ {
   480  		rlpHash(block.header)
   481  	}
   482  }
   483  
   484  func BenchmarkBlockEncodingCopiedBlockHeader(b *testing.B) {
   485  	data, err := ioutil.ReadFile("../../tests/b1.rlp")
   486  	if err != nil {
   487  		b.Fatal("Failed to read a block file: ", err)
   488  	}
   489  
   490  	blockEnc := common.FromHex(string(data))
   491  	var block Block
   492  	if err := rlp.DecodeBytes(blockEnc, &block); err != nil {
   493  		b.Fatal("decode error: ", err)
   494  	}
   495  
   496  	b.ResetTimer()
   497  	for i := 0; i < b.N; i++ {
   498  		rlpHash(block.header)
   499  	}
   500  }
   501  
   502  // TODO-Klaytn-FailedTest Test fails. Analyze and enable it later.
   503  /*
   504  // from bcValidBlockTest.json, "SimpleTx"
   505  func TestBlockEncoding(t *testing.T) {
   506  	blockEnc := common.FromHex("f90260f901f9a083cafc574e1f51ba9dc0568fc617a08ea2429fb384059c972f13b19fa1c8dd55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a05fe50b260da6308036625b850b5d6ced6d0a9f814c0688bc91ffb7b7a3a54b67a0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845506eb0780a0bd4472abb6659ebe3ee06ee4d7b72a00a9f4d001caca51342001075469aff49888a13a5a8c8f2bb1c4f861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba09bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094fa08a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b1c0")
   507  	var block Block
   508  	if err := rlp.DecodeBytes(blockEnc, &block); err != nil {
   509  		t.Fatal("decode error: ", err)
   510  	}
   511  
   512  	check := func(f string, got, want interface{}) {
   513  		if !reflect.DeepEqual(got, want) {
   514  			t.Errorf("%s mismatch: got %v, want %v", f, got, want)
   515  		}
   516  	}
   517  	check("BlockScore", block.BlockScore(), big.NewInt(131072))
   518  	check("GasUsed", block.GasUsed(), uint64(21000))
   519  	check("Root", block.Root(), common.HexToHash("ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017"))
   520  	check("Hash", block.Hash(), common.HexToHash("0a5843ac1cb04865017cb35a57b50b07084e5fcee39b5acadade33149f4fff9e"))
   521  	check("Nonce", block.Nonce(), uint64(0xa13a5a8c8f2bb1c4))
   522  	check("Time", block.Time(), big.NewInt(1426516743))
   523  	check("Size", block.Size(), common.StorageSize(len(blockEnc)))
   524  
   525  	tx1 := NewTransaction(0, common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87"), big.NewInt(10), 50000, big.NewInt(10), nil)
   526  
   527  	tx1, _ = tx1.WithSignature(HomesteadSigner{}, common.Hex2Bytes("9bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094f8a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b100"))
   528  	fmt.Println(block.Transactions()[0].Hash())
   529  	fmt.Println(tx1.data)
   530  	fmt.Println(tx1.Hash())
   531  	check("len(Transactions)", len(block.Transactions()), 1)
   532  	check("Transactions[0].Hash", block.Transactions()[0].Hash(), tx1.Hash())
   533  
   534  	ourBlockEnc, err := rlp.EncodeToBytes(&block)
   535  	if err != nil {
   536  		t.Fatal("encode error: ", err)
   537  	}
   538  	if !bytes.Equal(ourBlockEnc, blockEnc) {
   539  		t.Errorf("encoded block mismatch:\ngot:  %x\nwant: %x", ourBlockEnc, blockEnc)
   540  	}
   541  }
   542  */