github.com/lmittmann/w3@v0.20.0/module/eth/block_test.go (about)

     1  package eth_test
     2  
     3  import (
     4  	"errors"
     5  	"math/big"
     6  	"testing"
     7  
     8  	"github.com/ethereum/go-ethereum/common"
     9  	"github.com/ethereum/go-ethereum/core/types"
    10  	"github.com/lmittmann/w3"
    11  	"github.com/lmittmann/w3/module/eth"
    12  	"github.com/lmittmann/w3/rpctest"
    13  )
    14  
    15  func TestBlockByHash(t *testing.T) {
    16  	rpctest.RunTestCases(t, []rpctest.TestCase[*types.Block]{
    17  		{
    18  			Golden: "get_block_by_hash__1",
    19  			Call:   eth.BlockByHash(w3.H("0x88e96d4537bea4d9c05d12549907b32561d3bf31f45aae734cdc119f13406cb6")),
    20  			WantRet: types.NewBlockWithHeader(&types.Header{
    21  				ParentHash:  w3.H("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3"),
    22  				UncleHash:   w3.H("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"),
    23  				Coinbase:    w3.A("0x05a56E2D52c817161883f50c441c3228CFe54d9f"),
    24  				Root:        w3.H("0xd67e4d450343046425ae4271474353857ab860dbc0a1dde64b41b5cd3a532bf3"),
    25  				TxHash:      w3.H("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"),
    26  				ReceiptHash: w3.H("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"),
    27  				Bloom:       types.BytesToBloom(w3.B("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")),
    28  				Difficulty:  w3.I("0x3ff800000"),
    29  				Number:      w3.I("0x1"),
    30  				GasLimit:    0x1388,
    31  				GasUsed:     0x0,
    32  				Time:        0x55ba4224,
    33  				Extra:       w3.B("0x476574682f76312e302e302f6c696e75782f676f312e342e32"),
    34  				MixDigest:   w3.H("0x969b900de27b6ac6a67742365dd65f55a0526c41fd18e1b16f1a1215c2e66f59"),
    35  				Nonce:       types.EncodeNonce(0x539bd4979fef1ec4),
    36  			}),
    37  		},
    38  		{
    39  			Golden: "get_block_by_hash__46147",
    40  			Call:   eth.BlockByHash(w3.H("0x4e3a3754410177e6937ef1f84bba68ea139e8d1a2258c5f85db9f1cd715a1bdd")),
    41  			WantRet: types.NewBlockWithHeader(&types.Header{
    42  				ParentHash:  w3.H("0x5a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfc"),
    43  				UncleHash:   w3.H("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"),
    44  				Coinbase:    w3.A("0xe6A7a1d47ff21B6321162AEA7C6CB457D5476Bca"),
    45  				Root:        w3.H("0x0e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169"),
    46  				TxHash:      w3.H("0x4513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598"),
    47  				ReceiptHash: w3.H("0xfe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4"),
    48  				Bloom:       types.BytesToBloom(w3.B("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")),
    49  				Difficulty:  w3.I("0x153886c1bbd"),
    50  				Number:      w3.I("0xb443"),
    51  				GasLimit:    0x520b,
    52  				GasUsed:     0x5208,
    53  				Time:        0x55c42659,
    54  				Extra:       w3.B("0x657468706f6f6c2e6f7267"),
    55  				MixDigest:   w3.H("0xb48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf4"),
    56  				Nonce:       types.EncodeNonce(0xba4f8ecd18aab215),
    57  			}).WithBody(types.Body{
    58  				Transactions: types.Transactions{
    59  					types.NewTx(&types.LegacyTx{
    60  						Nonce:    0x0,
    61  						GasPrice: w3.I("0x2d79883d2000"),
    62  						Gas:      0x5208,
    63  						To:       w3.APtr("0x5DF9B87991262F6BA471F09758CDE1c0FC1De734"),
    64  						Value:    w3.I("0x7a69"),
    65  						V:        w3.I("0x1c"),
    66  						R:        w3.I("0x88ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0"),
    67  						S:        w3.I("0x45e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33a"),
    68  					}),
    69  				},
    70  			}),
    71  		},
    72  		{
    73  			Golden:  "get_block_by_hash__0x00",
    74  			Call:    eth.BlockByHash(common.Hash{}),
    75  			WantErr: errors.New("w3: call failed: not found"),
    76  		},
    77  		{
    78  			Golden: "get_block_by_hash__18000000",
    79  			Call:   eth.BlockByHash(w3.H("0x95b198e154acbfc64109dfd22d8224fe927fd8dfdedfae01587674482ba4baf3")),
    80  			WantRet: types.NewBlockWithHeader(&types.Header{
    81  				BaseFee:         w3.I("0x50ead8e39"),
    82  				Difficulty:      w3.I("0x0"),
    83  				Extra:           w3.B("0x496c6c756d696e61746520446d6f63726174697a6520447374726962757465"),
    84  				GasLimit:        0x1c9c380,
    85  				GasUsed:         0xf7e9ab,
    86  				Bloom:           types.BytesToBloom(w3.B("0x53f146f2484e1cb4b24d5a028329290bd702c80fe8465d9e55e900682e28809f405df83fd48d530900908f3c62de69000a530db688092c03d9406056852a0152220084ec4f8daa3c2c226e9878b08578163190e80b482ad30604c3649c25002037100c2086aaa3291c0407418431ebaa851804a6212996a206840875360bd84d2123065273780b9d04e4950c029a40d3e062b2697b048e4f3629824234ba00318a680d70eab6a9d740e38de89394d492c4c2ad6424bac19d4bcf08ca4044435aca49069e6907893082841ca20446b2220f4053121e7cc4b8cb84095f1a32320e105a20c821f675418c0d13308a896040d67550322ac88444e20080b364670401")),
    87  				Coinbase:        w3.A("0xdafea492d9c6733ae3d56b7ed1adb60692c98bc5"),
    88  				MixDigest:       w3.H("0x8b14d8532c673877dcc735caf93392bd05603456b7745fc3f012a3e3b156acfa"),
    89  				Nonce:           types.EncodeNonce(0x0000000000000000),
    90  				Number:          w3.I("0x112a880"),
    91  				ParentHash:      w3.H("0x198723e0ddf20153951c6304093cbd97fd306c5db03287c5586c0430a986080d"),
    92  				ReceiptHash:     w3.H("0xd925652022fa6da2ca5b9781ab2fd50cb05d3b4741a327f52322e2b7917d3a2f"),
    93  				UncleHash:       w3.H("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"),
    94  				Root:            w3.H("0x08b7443c83a93d4711f5c63e738c27c54a932522405b37b4ca7868a944105deb"),
    95  				Time:            0x64ea268f,
    96  				TxHash:          w3.H("0x97dd0200249a35da2c73b366612c2d9c3d112e83ef5e0277cded1352c66628ba"),
    97  				WithdrawalsHash: ptr(w3.H("0x5362ee94b61e8cef92bf61353e62744b4fe6d1f2482aade614054527e6d5de7d")),
    98  			}).WithBody(types.Body{
    99  				Withdrawals: []*types.Withdrawal{
   100  					{Index: 0xeb9b8c, Validator: 0xa474b, Address: w3.A("0xd7a0b38496064412a8d6b1f77bc30ada93e7b7a5"), Amount: 0xeb0d50},
   101  				},
   102  			}),
   103  		},
   104  	})
   105  }
   106  
   107  func TestBlockByNumber(t *testing.T) {
   108  	rpctest.RunTestCases(t, []rpctest.TestCase[*types.Block]{
   109  		{
   110  			Golden: "get_block_by_number__1",
   111  			Call:   eth.BlockByNumber(big.NewInt(1)),
   112  			WantRet: types.NewBlockWithHeader(&types.Header{
   113  				ParentHash:  w3.H("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3"),
   114  				UncleHash:   w3.H("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"),
   115  				Coinbase:    w3.A("0x05a56E2D52c817161883f50c441c3228CFe54d9f"),
   116  				Root:        w3.H("0xd67e4d450343046425ae4271474353857ab860dbc0a1dde64b41b5cd3a532bf3"),
   117  				TxHash:      w3.H("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"),
   118  				ReceiptHash: w3.H("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"),
   119  				Bloom:       types.BytesToBloom(w3.B("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")),
   120  				Difficulty:  w3.I("0x3ff800000"),
   121  				Number:      w3.I("0x1"),
   122  				GasLimit:    0x1388,
   123  				GasUsed:     0x0,
   124  				Time:        0x55ba4224,
   125  				Extra:       w3.B("0x476574682f76312e302e302f6c696e75782f676f312e342e32"),
   126  				MixDigest:   w3.H("0x969b900de27b6ac6a67742365dd65f55a0526c41fd18e1b16f1a1215c2e66f59"),
   127  				Nonce:       types.EncodeNonce(0x539bd4979fef1ec4),
   128  			}),
   129  		},
   130  		{
   131  			Golden: "get_block_by_number__46147",
   132  			Call:   eth.BlockByNumber(big.NewInt(46147)),
   133  			WantRet: types.NewBlockWithHeader(&types.Header{
   134  				ParentHash:  w3.H("0x5a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfc"),
   135  				UncleHash:   w3.H("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"),
   136  				Coinbase:    w3.A("0xe6A7a1d47ff21B6321162AEA7C6CB457D5476Bca"),
   137  				Root:        w3.H("0x0e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169"),
   138  				TxHash:      w3.H("0x4513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598"),
   139  				ReceiptHash: w3.H("0xfe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4"),
   140  				Bloom:       types.BytesToBloom(w3.B("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")),
   141  				Difficulty:  w3.I("0x153886c1bbd"),
   142  				Number:      w3.I("0xb443"),
   143  				GasLimit:    0x520b,
   144  				GasUsed:     0x5208,
   145  				Time:        0x55c42659,
   146  				Extra:       w3.B("0x657468706f6f6c2e6f7267"),
   147  				MixDigest:   w3.H("0xb48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf4"),
   148  				Nonce:       types.EncodeNonce(0xba4f8ecd18aab215),
   149  			}).WithBody(types.Body{
   150  				Transactions: types.Transactions{
   151  					types.NewTx(&types.LegacyTx{
   152  						Nonce:    0x0,
   153  						GasPrice: w3.I("0x2d79883d2000"),
   154  						Gas:      0x5208,
   155  						To:       w3.APtr("0x5DF9B87991262F6BA471F09758CDE1c0FC1De734"),
   156  						Value:    w3.I("0x7a69"),
   157  						V:        w3.I("0x1c"),
   158  						R:        w3.I("0x88ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0"),
   159  						S:        w3.I("0x45e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33a"),
   160  					}),
   161  				},
   162  			}),
   163  		},
   164  		{
   165  			Golden:  "get_block_by_number__999999999",
   166  			Call:    eth.BlockByNumber(big.NewInt(999999999)),
   167  			WantErr: errors.New("w3: call failed: not found"),
   168  		},
   169  	})
   170  }
   171  
   172  func TestBlockTxCountByHash(t *testing.T) {
   173  	rpctest.RunTestCases(t, []rpctest.TestCase[uint]{
   174  		{
   175  			Golden:  "block_transaction_count_by_hash__15050000",
   176  			Call:    eth.BlockTxCountByHash(w3.H("0xc43d35f6a64f8a64f046c8deb4069572d622dfe7f028f62301b186f08f0e96f2")),
   177  			WantRet: 32,
   178  		},
   179  		{
   180  			Golden:  "block_transaction_count_by_hash__0x00",
   181  			Call:    eth.BlockTxCountByHash(common.Hash{}),
   182  			WantErr: errors.New("w3: call failed: not found"),
   183  		},
   184  	})
   185  }
   186  
   187  func TestBlockTxCountByNumber(t *testing.T) {
   188  	rpctest.RunTestCases(t, []rpctest.TestCase[uint]{
   189  		{
   190  			Golden:  "block_transaction_count_by_number__15050000",
   191  			Call:    eth.BlockTxCountByNumber(big.NewInt(15050000)),
   192  			WantRet: 32,
   193  		},
   194  	})
   195  }
   196  
   197  func TestHeaderByHash(t *testing.T) {
   198  	rpctest.RunTestCases(t, []rpctest.TestCase[*types.Header]{
   199  		{
   200  			Golden: "get_block_by_hash__12965000",
   201  			Call:   eth.HeaderByHash(w3.H("0x9b83c12c69edb74f6c8dd5d052765c1adf940e320bd1291696e6fa07829eee71")),
   202  			WantRet: &types.Header{
   203  				ParentHash:  w3.H("0x3de6bb3849a138e6ab0b83a3a00dc7433f1e83f7fd488e4bba78f2fe2631a633"),
   204  				UncleHash:   w3.H("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"),
   205  				Coinbase:    w3.A("0x7777788200B672A42421017F65EDE4Fc759564C8"),
   206  				Root:        w3.H("0x41cf6e8e60fd087d2b00360dc29e5bfb21959bce1f4c242fd1ad7c4da968eb87"),
   207  				TxHash:      w3.H("0xdfcb68d3a3c41096f4a77569db7956e0a0e750fad185948e54789ea0e51779cb"),
   208  				ReceiptHash: w3.H("0x8a8865cd785e2e9dfce7da83aca010b10b9af2abbd367114b236f149534c821d"),
   209  				Bloom:       types.BytesToBloom(w3.B("0x24e74ad77d9a2b27bdb8f6d6f7f1cffdd8cfb47fdebd433f011f7dfcfbb7db638fadd5ff66ed134ede2879ce61149797fbcdf7b74f6b7de153ec61bdaffeeb7b59c3ed771a2fe9eaed8ac70e335e63ff2bfe239eaff8f94ca642fdf7ee5537965be99a440f53d2ce057dbf9932be9a7b9a82ffdffe4eeee1a66c4cfb99fe4540fbff936f97dde9f6bfd9f8cefda2fc174d23dfdb7d6f7dfef5f754fe6a7eec92efdbff779b5feff3beafebd7fd6e973afebe4f5d86f3aafb1f73bf1e1d0cdd796d89827edeffe8fb6ae6d7bf639ec5f5ff4c32f31f6b525b676c7cdf5e5c75bfd5b7bd1928b6f43aac7fa0f6336576e5f7b7dfb9e8ebbe6f6efe2f9dfe8b3f56")),
   210  				Difficulty:  w3.I("0x1b81c1fe05b218"),
   211  				Number:      w3.I("0xc5d488"),
   212  				GasLimit:    0x1ca3542,
   213  				GasUsed:     0x1ca2629,
   214  				Time:        0x610bdaa6,
   215  				Extra:       w3.B("0x68747470733a2f2f7777772e6b7279707465782e6f7267"),
   216  				MixDigest:   w3.H("0x9620b46a81a4795cf4449d48e3270419f58b09293a5421205f88179b563f815a"),
   217  				Nonce:       types.EncodeNonce(0xb223da049adf2216),
   218  				BaseFee:     w3.I("0x3b9aca00"),
   219  			},
   220  		},
   221  	})
   222  }
   223  
   224  func TestHeaderByNumber(t *testing.T) {
   225  	rpctest.RunTestCases(t, []rpctest.TestCase[*types.Header]{
   226  		{
   227  			Golden: "get_block_by_number__12965000",
   228  			Call:   eth.HeaderByNumber(big.NewInt(12965000)),
   229  			WantRet: &types.Header{
   230  				ParentHash:  w3.H("0x3de6bb3849a138e6ab0b83a3a00dc7433f1e83f7fd488e4bba78f2fe2631a633"),
   231  				UncleHash:   w3.H("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"),
   232  				Coinbase:    w3.A("0x7777788200B672A42421017F65EDE4Fc759564C8"),
   233  				Root:        w3.H("0x41cf6e8e60fd087d2b00360dc29e5bfb21959bce1f4c242fd1ad7c4da968eb87"),
   234  				TxHash:      w3.H("0xdfcb68d3a3c41096f4a77569db7956e0a0e750fad185948e54789ea0e51779cb"),
   235  				ReceiptHash: w3.H("0x8a8865cd785e2e9dfce7da83aca010b10b9af2abbd367114b236f149534c821d"),
   236  				Bloom:       types.BytesToBloom(w3.B("0x24e74ad77d9a2b27bdb8f6d6f7f1cffdd8cfb47fdebd433f011f7dfcfbb7db638fadd5ff66ed134ede2879ce61149797fbcdf7b74f6b7de153ec61bdaffeeb7b59c3ed771a2fe9eaed8ac70e335e63ff2bfe239eaff8f94ca642fdf7ee5537965be99a440f53d2ce057dbf9932be9a7b9a82ffdffe4eeee1a66c4cfb99fe4540fbff936f97dde9f6bfd9f8cefda2fc174d23dfdb7d6f7dfef5f754fe6a7eec92efdbff779b5feff3beafebd7fd6e973afebe4f5d86f3aafb1f73bf1e1d0cdd796d89827edeffe8fb6ae6d7bf639ec5f5ff4c32f31f6b525b676c7cdf5e5c75bfd5b7bd1928b6f43aac7fa0f6336576e5f7b7dfb9e8ebbe6f6efe2f9dfe8b3f56")),
   237  				Difficulty:  w3.I("0x1b81c1fe05b218"),
   238  				Number:      w3.I("0xc5d488"),
   239  				GasLimit:    0x1ca3542,
   240  				GasUsed:     0x1ca2629,
   241  				Time:        0x610bdaa6,
   242  				Extra:       w3.B("0x68747470733a2f2f7777772e6b7279707465782e6f7267"),
   243  				MixDigest:   w3.H("0x9620b46a81a4795cf4449d48e3270419f58b09293a5421205f88179b563f815a"),
   244  				Nonce:       types.EncodeNonce(0xb223da049adf2216),
   245  				BaseFee:     w3.I("0x3b9aca00"),
   246  			},
   247  		},
   248  	})
   249  }
   250  
   251  func ptr[T any](v T) *T { return &v }