ox
Version:
Ethereum Standard Library
740 lines (727 loc) • 40.4 kB
text/typescript
import { Block } from 'ox'
import { describe, expect, test } from 'vp/test'
import { anvilMainnet } from '../../../test/prool.js'
describe('fromRpc', () => {
test('default', () => {
const block = Block.fromRpc({
blobGasUsed: '0x1',
baseFeePerGas: '0x0',
difficulty: '0x2d3a678cddba9b',
excessBlobGas: '0x2',
extraData: '0x',
gasLimit: '0x1c9c347',
gasUsed: '0x0',
hash: '0xebc3644804e4040c0a74c5a5bbbc6b46a71a5d4010fe0c92ebb2fdf4a43ea5dd',
logsBloom:
'0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
miner: '0x0000000000000000000000000000000000000000',
mixHash:
'0x0000000000000000000000000000000000000000000000000000000000000000',
nonce: '0x0000000000000000',
number: '0xec6fc6',
parentHash:
'0xe55516ad8029e53cd32087f14653d851401b05245abb1b2d6ed4ddcc597ac5a6',
receiptsRoot:
'0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
sealFields: [
'0x0000000000000000000000000000000000000000000000000000000000000000',
'0x0000000000000000',
],
sha3Uncles:
'0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
size: '0x208',
stateRoot:
'0x0000000000000000000000000000000000000000000000000000000000000000',
timestamp: '0x63198f6f',
totalDifficulty: '0x1',
transactions: [],
transactionsRoot:
'0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
uncles: [],
withdrawals: [],
withdrawalsRoot:
'0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
})
expect(block).toMatchInlineSnapshot(`
{
"baseFeePerGas": 0n,
"blobGasUsed": 1n,
"difficulty": 12730590371363483n,
"excessBlobGas": 2n,
"extraData": "0x",
"gasLimit": 29999943n,
"gasUsed": 0n,
"hash": "0xebc3644804e4040c0a74c5a5bbbc6b46a71a5d4010fe0c92ebb2fdf4a43ea5dd",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"miner": "0x0000000000000000000000000000000000000000",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x0000000000000000",
"number": 15495110n,
"parentHash": "0xe55516ad8029e53cd32087f14653d851401b05245abb1b2d6ed4ddcc597ac5a6",
"receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"sealFields": [
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0x0000000000000000",
],
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size": 520n,
"stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": 1662619503n,
"totalDifficulty": 1n,
"transactions": [],
"transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"uncles": [],
"withdrawals": [],
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
}
`)
})
test('behavior: null block', () => {
const block = Block.fromRpc(null)
expect(block).toBeNull()
})
test('behavior: optional totalDifficulty preserved as undefined', () => {
const block = Block.fromRpc({
extraData: '0x',
gasLimit: '0x1c9c347',
gasUsed: '0x0',
hash: '0xebc3644804e4040c0a74c5a5bbbc6b46a71a5d4010fe0c92ebb2fdf4a43ea5dd',
logsBloom: '0x',
miner: '0x0000000000000000000000000000000000000000',
mixHash:
'0x0000000000000000000000000000000000000000000000000000000000000000',
nonce: '0x0000000000000000',
number: '0xec6fc6',
parentHash:
'0xe55516ad8029e53cd32087f14653d851401b05245abb1b2d6ed4ddcc597ac5a6',
receiptsRoot:
'0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
sha3Uncles:
'0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
size: '0x208',
stateRoot:
'0x0000000000000000000000000000000000000000000000000000000000000000',
timestamp: '0x63198f6f',
transactions: [],
transactionsRoot:
'0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
uncles: [],
})
expect(block?.totalDifficulty).toBeUndefined()
})
test('behavior: network', async () => {
const block = await anvilMainnet
.request({
method: 'eth_getBlockByNumber',
params: ['latest', false],
})
.then(Block.fromRpc)
expect(block).toMatchInlineSnapshot(`
{
"baseFeePerGas": 8758571930n,
"blobGasUsed": 0n,
"difficulty": 0n,
"excessBlobGas": 0n,
"extraData": "0x6265617665726275696c642e6f7267",
"gasLimit": 30000000n,
"gasUsed": 13655878n,
"hash": "0x0c3e51fc62e1dd7401c8884882755b72e1c5720d0b01c75443cdfa8a129d3fc9",
"logsBloom": "0xd123054441c15c9d30998061c8899fbdb40be9b00b9c9b73202d015aef6a92b80e6a1520ca498004de50db02f992518322199054de076a903019e47aa1a8b018a046a6c95d2d39a92c06e33ea9a225aa80c5408964c57f5fe083d5dc8a7051e5e92f4844e244023e90cc74c040236e49c31b9aa023596ec5aa1c0e1458593c036dbe9f7cbaa69538a2ed205c0ae2145e441b1319eb6946a9d82da46e6e9c0ca85f9688c6fa946b844bbdd4cc3f225ce09641d62220214a7cb9744c66340c807013f0315212455a000620a3b27359c8c13e1000130da23e141107d28a4900e1909470a80b03d746114b1596d3a4430b68b4ff3e219bac38d8dfa1680ae4005d4d",
"miner": "0x95222290dd7278aa3ddd389cc1e1d165cc4bafe5",
"mixHash": "0x7702b2acc3443bd74c0b3ff142414f9d51e4caa0f111d57d319f4d46e21dedf7",
"nonce": "0x0000000000000000",
"number": 19868020n,
"parentBeaconBlockRoot": "0xd472790dc1fd2d1b1cc9e208706266196f261e4c1a74f535d86981670c0d5f99",
"parentHash": "0xa93b995575bda48d4cf45a4f72593a48a744786b5e32e5ff92a21372f7a60875",
"receiptsRoot": "0xe2822bc9663118439077ad806cd7a2a1a75bf1d70bf61d901199cf599c46f9d7",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size": 56024n,
"stateRoot": "0x115fd5eac921e6728825958b2b87da8aaf17edc0085164f11de798f6ed00abbd",
"timestamp": 1715686979n,
"totalDifficulty": undefined,
"transactions": [
"0x5d374a026007c13e901765497b9164d44822902463efdf7b574b10c476ee2ad6",
"0x2762a7fb7c973e888edc457a3808d3882b5c8fc4f6c43a082d823319b126b91a",
"0xe637d86545a9b508b373fdd46cc71682ac4a5dba222d7c9ac01380306cc96cd9",
"0xecdfec41e9859fa217c5467debc9a5fa95290c3273f0ecf282f802983d2ca105",
"0x75f544151f040710f96a2c8cd6da6cd7bb60e461bfc9b4f87d015562d9a55328",
"0x07e609166382b05cd4cfd59764226374af8457a5dc0cea255721e5570cb32844",
"0x08109ccb2b1609d10cd929594ba3a131d59c7aa6eb174cc7bf578670a8198405",
"0x932fb264036b15e8a9704501e4f1ae34a9ac7543c498223c3456f03ebbefe221",
"0x4773aaf55c914947aeefe6c996b961c900bddd82b4e809d47a5f99af22b014ef",
"0x04d0728690604a7ec930782021704bb5d75d16d2c3330f8ab051348c906c52d4",
"0x61d5fc3a8aa4f5e802dcd54a7fceaad89a97c873578b845ad12b34a96540aeb7",
"0xd14bf1505356f83e55d4baffa315e0e9210479dff7486c4164a050c935d5bccf",
"0x6c4e8a1e9484ad717ef42df12a6cb9655216b6a2f7420f52dc540ed952860fdb",
"0x1d2361b3ec4fcb498732048e348fec130f15fb7e05187d8878985681c506b32a",
"0xc3da74a44904c29c9046587cbade10386db5aed500d7ead58335a9757fc64c93",
"0xc8632c7648b32e86023d8b585145bda62e5f8c160a5e6c8c02ec183297d05d2d",
"0xb6a79dcd720a72d2ea5728a8e58885304202535b00861113dce00d07bca7f3ab",
"0xc8b9a208eccabd84320946527cb1df897ec48318c1ca67e5fedc48388152518a",
"0xd5b0feea2d8e474913d280c45c4a6e365ec2bd8ab09982f0b07a7e6e2e433526",
"0xd67fa075f7abde07de71273e227856b43373276f18eb1446d1566cfafe896947",
"0xca96b4905a5854d52f3152dc2f86b1e8ef0891ce82b8a6d0622d4470fa980c03",
"0xd80b94b3d5e72e1cc74b3acbf6bec79bde51d6341f021a1259fe2e3303a919f4",
"0x0e034d76d3593f1f07baf2452e337da912dfc06fd61704e658797eaf5c33222e",
"0x755a7415073e029b231d575f935a10ae657eb30d3aa3edd32fcfc812ba2075b9",
"0x082bebb8c90bc915b6931d6d135ae7016a41b01e6d07151b5d11d2e3cc15868c",
"0x5a550298d163c3a6b1ca91412076781462a6e77825a7a34789e514f566a2ddd2",
"0x7f5523181ea3b7b83577e2de0ff3edf0b7bed050436fd6958274a0a6882a487d",
"0xc63aa388331f5016643dc4744dc47f0b79ac2dc30f2837f36058959de5c6d97b",
"0xa1cdde08be62979fb2d51e3d1447e67ef9a72e7e9ad6c70834b6667ab4b25b2f",
"0xeaf27f121d562cf7d6ba5fe04cb7477c2eae917f6ed0d254c474595334e1e61b",
"0x4d3a2c0aa20291ec2a3e9663676770bb1cb1c33c8caa7308ec9b0e180df42039",
"0x1f13065bd8d6bd0ff04592f8216576eb2ce38d766cf1fd4114392b4e622a7658",
"0x220ce318063ac4496ba1e7946b78fd1574f95518ac920563531b124bbc3ec22d",
"0x6c258638f3e25d325a1f73075a338ce02e57b4fac1b2a810a544d40b24e8b9f9",
"0xa2a5fdce0672a32e04908e9a12a683697057855a33da8ab3cfc5275094f270fe",
"0xfeb465bea0d19e832b87965440a36b3ea1d8bffda29d27ab72bf196f5a3954c0",
"0x20b39aed43810bfc46a279f91e2814ae5a56906f7b7505c499850f2605c82dac",
"0xd75f805748cdf37402c13b685d9dd9884ba1c0b0e3189f9f613a3a9ed223dbc8",
"0x46bb82c63a8a2e29d01360f78d5ee871178847627774756ca6efc614c9710cee",
"0x37a217624ca5724463612bc0a4f0943a3bf8599a05e9d4dc82da20bb0df79867",
"0xca8ec3dfca0e43c79a9a32cdd8a01c161a8fbbed07d6f5b4231dc7b4086d1380",
"0x12f7e01f6efcfb1c56bb3d4bf4358c32df847303c92d4f646996d4c601e1bd2f",
"0x50a0a2e7abaeee10aa9ec6ca0303a019acd2b09279357a480fd37c2c03e177f1",
"0x0c0134f6a1f68649f4777c86668ac2c3d348cd5ee9f71adaf5a783a3852a2e1c",
"0x740fb5ab5762b25c2be2f3590cb0811d74b54dae5e40f52bf1e68c8fe2cb6e92",
"0xa2218d513e2ca93a8acb3652d638af7be7e62711f48e81bf255fff3cfbe3a0dd",
"0x413a7f87acffc04ef34261ae47737ab2f5f461d0af5d57269c5f6cdf78275159",
"0x60d81ea9118a9d8075101f22e09d0646f155f23c2f4b84804f7ffc5afb203a68",
"0x2ff7f513238717f264521c91bc457fb17800beda940eaf6d7e56b1c866b42c06",
"0xda6dc1ae732e7ecbcac5765fc442fcee5a3617b5d575f5103b4fd9f706847c07",
"0xf59ef60c1d9dda81fc22a8e985b6d3e589f512eb8b2518b3511a43908a460294",
"0x81c6e17337cabd304c329a799b02e02245f37ece12a413f5c49282d18b1883cb",
"0x18fb9299e78ffe36bfea65442d790288937a4d1d5b69138525dadaa70dc42367",
"0x9db74bf461bb809717866699fb8b5d6bbe33b5bcc967dec46357331272e20df2",
"0xc59eefbe4041f7dc7fdf2c86c9cfc0f1706993dcee80de6b27f25489cb8e10a9",
"0x38b2207a133bfc3aec210fb386a199efb9087d13330fa0f637bfe37df59c312f",
"0xd35ffbf38934b54a900e35c65c07fc3081993ebf5a55bc67977b73410abc211f",
"0xa13e7a446c7f3ddaa8555c5d3437e8d827303b152a4dbb09ff01bde01a0585b0",
"0x0bb1b3eea492459f2796fb9b3f7022417860f3a5450374220c0c9c3bd2e63512",
"0xd9ebb04da1035f95bf3ed0bd06268f53737001f3f292ac825852875c57a6c4be",
"0xe07cf18aa356d0134f2e0da6f68de7c9f28af854455fbdd38770b44be98a1dc6",
"0x9be4c6c6a3c5622fcd0a1bbe13e21b8612eb39932f05b42972edf2ed184804dc",
"0x9cf9a53f37175b3eba970af4b06a9fa98042e08882b2ed96dd285c0eaaa8e13c",
"0x23f3b4e0dad22684741df92bba387be4e5c05414aca5bf54383e74a4b24b30eb",
"0x4dcfcf6353596c9665fd94b7b9281b65e0a94b45f98ddff681db9ffc5c561602",
"0x460b33043b87067727977ec7daea667bf440f482f0e77ab5a86745832c05d09e",
"0x2fd8ab214c757b69349f10a86d94ccdae0a2c692f3408ea4d65bf5a58c710166",
"0x6627f34e22dec201d70e4304375e60b0703a992610487356a7af6812c4ae89f0",
"0x6a2ac6c7b4f140443ea9190beba68706aa0828055cc0a49c037f6bed4a3b94c9",
"0xbadc35a3b5eb2524ddea54babbc6a7c531f94c845b499e2773f0d82f347976df",
"0x258972ea1dced55b6b95ed07085de981786401d4da790000d7bd8739b0132cd9",
"0x2b70ba122ab93b5b020a3e0ede3e5170d91b2fd8c429c4909b025a68e50a0a2a",
"0xa1f2796fbf29d6cb19d541bb9e2ac1bdb8ecf4f64e9d4068a77b18325d736be8",
"0x297b30d9b997e375d6d560c9670449c4ab9fc9e6cbfcfb094c659d053bd74fae",
"0x4f2058432f7e90bde5ac4661e66dd4ddb4865a31a015b5da7a74f1ed682d4471",
"0x88777368f2847a5a370cb5c6113b25841987168e1d60eff8f5e622b608c073b1",
"0x4b6de4690fed6b924865cf234a94b74f8765c969d821bbddeb4333936c558aa9",
"0x89db01005aa4cd9b60c481763f21dffe39a7ba2da6a4df80e1649fe71952ef70",
"0x888b2ccb261734919308c792c458dcafbaf5ec09b35ff490b77e55304d8f6352",
"0x847e03a9a940c74f151694bed14c82fc53eaaae5e4236e7f0525ab438f5e9d77",
"0x176f3b0b49ee54ec554dc3a4dea00b3d115e48a8c0d5d3c6f328d7da8f6beff7",
"0x009d634f81d6cbefe083d48d0741ab332f238bf496aafca838095e6fde0b541f",
"0xaec2cd6a1cf8954187174f4a62c07b021293cac8b69d1b48cd206ba3244292ba",
"0xc914a43546e51a0d4ab116e8fc86bd639c14b563474c9c247bb406404b6241c3",
"0xdd7f4c16cc0512e308b521c944e11b852d652652656ba5c30589fbbd4454002d",
"0x0329301ecb0cca138d687a07c3fc0e13358d10fb73f7ddac636fe1940d45be8b",
"0x2f569a19dff21bc2674064a636b3f87689f3e0ed0ef69a0d99bbedb5721e154c",
"0x06f42e2ae50574d560a495411ed504d3ca1c34ff5fe9f6f74a4327a9ada801f5",
"0x04db2f50573f591543a42ad27ad89efe7182ff286b6d2c75e8787cdfd67682ad",
"0xcac34907d292c7d1e8e307a3c669e9867977630b6667aa8ed0db0d0cb0e757f8",
"0xe043631e0d3d42dfacb87783a95d9a7fb6d1b4a6b556ad5ffd9724dfec8a05dd",
"0x163bd1073a5e99e886ae0ca8a469a58096e9992f772d8cf03c12897bc759ebf9",
"0xe468530ce156f65bf52574d52c7b55489ae9a4a7bc3df7710e3ef8fd47d72386",
"0xc19059a3d7e5f89c1bd674b798c5ff3860748acd9ccb7d684785358bc5a12d20",
"0x73f819dd32e6679910453dafe4976b5724749fcd18407078e46864a22e47181d",
"0xfe592761d1dc1bd893e0f8fdc548eaa3f5b441fda87ee71826d2d498a19b1f33",
"0x291c84340609f89adc913f236425e23792af8728f6320f5e67f936384e02debc",
"0x48aafb002e34c51e578c57e780ef52676301c44ce359c943238e56188c9be970",
"0xb3790060ee3927e51a8415bf742287ed54fefd32e8e5e0e6e6d8327504f67e3f",
"0x3fb1be8cec3734f7f261eee9bb67e16f89bd5e3836822cb30b79c3661fbbe00e",
"0x32ca794db2e8bb3a6ce2fee48506541397112c3deea2dfe46deeae71ee9f663a",
"0x81dc670fb945eb8c35b00b50f015fd9cef8c4560a855563364d01f2ef4508e14",
"0xbd6556b6d46cca1b2b17a19a3a59c240b0ef3cf48a64dec4d3998c9cc24c1a8e",
"0x90ad6135bfdf67e34c8f73238d31cc0986af1cb489bcfe81fc3eee05d9c29b97",
"0x6e1cb115a90aabc2808bc7322acd7b3c34545f4aa8038f5c6d730da941c2e676",
"0xf3f3af837c7e33b56008a0c04e8ab247210934cb6f3c5067e3a7a37f3e5dafe1",
"0xc9d4ceee42f0ec528c1a63eb9d44098fd23beeedba9604f9e083afb2d505fdef",
"0x17e4dea18b087b93f1215bcfad045ec54713658ebc484fe4e8986a771b0852a9",
"0xfb649abb7e83c2cd08e1e30f0604d06186e3d34901206b1d4c409b26b0510d08",
"0xcf248cf3701057459fc2347f9a9c3dc75332df6cfe002a8befe950ec2aa41b8c",
"0xe355fea96b01d1f58a9ad11787f347ab05da938b8ae8355fb4a4811c1791ddf2",
"0xf41a9728a3c5beb95bd54d48781fc5989608892c59cdf58545787581d7ef86a3",
"0x974a1c129883d3d47d8faaae93cb8a0559b095ec5440f2e876b1ee12588be268",
"0x7902398372de025e2a389ab30720d9219a48e0c843800fe2a117870b8588514e",
"0x3858c51d5edd299685ce0ac9aa398d572eba7a25afe941580e9ff281f3ef4b96",
"0x1a1a0c85194c4ceba80a6266fd6cf9977ace734c0bbe36fdb3f3b14fe185dbfc",
"0xfc0faddbc7dfa5939e91d6759c1a58bc8fb19ee24fb19aa31d05cbf8cada3cf2",
"0x99a9b35bfa30a6546895c6d134041b1564f7d404693619cf94fd6d5087559c2e",
"0x9689c75b7fa465187f1723e96ae4a1092f6f6aa86e187882acced16882682e46",
"0x70c6c50149f0bc6fd7c685bc9fab53dfd3f484a3c9bf206578951684a7e78d22",
"0x1c2b3e1326bc24046d45e3c626ce5e865e9f0f4807f129994558caeccc7e4c40",
"0x41491514a58d6db155b09d99c21e935f60aabdcb0b2bfd0ac3c7a66add88c8dc",
"0x120d2916730adbd56c3a6fd6fd4618af561c81b73952b9f247ebd6fb0d253a01",
"0xc65bb3d2984276ad902ed5d790cdbc5cfb953d5ff01dd0790532b2214dfb2f78",
"0xbdf1cf02af245b580cf20f728fddfa39c6eb5b0ed70e0487c1074fbf28ebc0b0",
"0xcbd578f01e8b5feba2ab69487c979e551c33ce2b73902c63943df9945dd23b9b",
"0xc8c42876c9f093326fd24262be17af1ec0a1030693f7e4a24201c28b3b90d82c",
"0x0b8839b2d0aa101cc2e8887c2d20c83d813559e7800f7ad9ce9af8be697a9a18",
"0xf621df816c070c7f0091dda13b34e6a46a7a86dab6852500351d4f5e2ae9eefe",
"0x8418a842e94ae25f54f427b389cee45d06da8cd3f55e41be9332c56241d48962",
"0xac58a960f5db3cc0570a20f8ca307ef444d9a90f630c7b629e66e4313aad45b3",
"0xf66d09329c4db75279f910ebe6d7a1c643632668a711dfb8069f47cf00d7a57a",
"0xdcacf0e0951030d0f733cbbb46b5f0b3b45840953525b757001ceb74bae9fa4b",
"0x941e10e4fde951acfbc184d76a51823b6ab04214b297e7e52bee236d8f66b8b9",
"0xd1dd9fbed648c9d93f590a91ef9922b6256878a498e61055d8fec739395ce0e9",
"0xe7eae47cd583cab13d7d684adc6e443ef38d83c7d2120171eecf7b0c9168a77b",
"0x08a6ff7d42b3056bc571e9c16607b373d37565a71cac95b9a85bf5788f08ea0d",
"0x3bae2e6ec6af9bbffe37b395df67769b234cdd743bd848764420ff2799ea673c",
"0xaa0b772f59055d8dfbef446352b2d08fbacd97968643a300e03e520c50ffdcbf",
"0xd8d29dfd14ab5068e615662b3580d191663f64cc15557873194d7b2718dc0425",
"0x0561ae8390935eece56ca93e3ea5feaa187e3777418fc19134649726c9519f41",
"0xe3c8dc3145997086caf05a06d4209d10096df09379fce4819f40c13cad005d3e",
"0x02d87b27d2a9e5cb47a71051ef0ef3202e2a86373807753e8603807e43ecf4f5",
],
"transactionsRoot": "0xec75fee6c90538b6b5d846f5fd25f550591eaccbb366fc393c4a693f8370d0b4",
"uncles": [],
"withdrawals": [
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18669565n,
"index": 45328939,
"validatorIndex": 221973,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18607647n,
"index": 45328940,
"validatorIndex": 221974,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18647628n,
"index": 45328941,
"validatorIndex": 221975,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18611031n,
"index": 45328942,
"validatorIndex": 221976,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18607324n,
"index": 45328943,
"validatorIndex": 221977,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18614402n,
"index": 45328944,
"validatorIndex": 221978,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18617029n,
"index": 45328945,
"validatorIndex": 221979,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18655967n,
"index": 45328946,
"validatorIndex": 221980,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18630613n,
"index": 45328947,
"validatorIndex": 221981,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 63545835n,
"index": 45328948,
"validatorIndex": 221982,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18617348n,
"index": 45328949,
"validatorIndex": 221983,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18621145n,
"index": 45328950,
"validatorIndex": 221984,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18623915n,
"index": 45328951,
"validatorIndex": 221985,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18611702n,
"index": 45328952,
"validatorIndex": 221986,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18591667n,
"index": 45328953,
"validatorIndex": 221987,
},
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": 18583892n,
"index": 45328954,
"validatorIndex": 221988,
},
],
"withdrawalsRoot": "0x3f196863f2d0d52b020c33d1ac2fb588f257ac153baa09fbee2cc1cce42fadef",
}
`)
})
test('behavior: network (with tx)', async () => {
const block = await anvilMainnet
.request({
method: 'eth_getBlockByNumber',
params: ['latest', true],
})
.then(Block.fromRpc)
expect(block).toMatchSnapshot()
})
})
describe('toRpc', () => {
test('default', () => {
const block = Block.toRpc(
{
baseFeePerGas: 0n,
blobGasUsed: 1n,
difficulty: 12730590371363483n,
excessBlobGas: 2n,
extraData: '0x',
gasLimit: 29999943n,
gasUsed: 0n,
hash: '0xebc3644804e4040c0a74c5a5bbbc6b46a71a5d4010fe0c92ebb2fdf4a43ea5dd',
logsBloom:
'0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
miner: '0x0000000000000000000000000000000000000000',
mixHash:
'0x0000000000000000000000000000000000000000000000000000000000000000',
nonce: '0x0000000000000000',
number: 15495110n,
parentBeaconBlockRoot: undefined,
parentHash:
'0xe55516ad8029e53cd32087f14653d851401b05245abb1b2d6ed4ddcc597ac5a6',
receiptsRoot:
'0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
sealFields: [
'0x0000000000000000000000000000000000000000000000000000000000000000',
'0x0000000000000000',
],
sha3Uncles:
'0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
size: 520n,
stateRoot:
'0x0000000000000000000000000000000000000000000000000000000000000000',
timestamp: 1662619503n,
totalDifficulty: 1n,
transactions: [
{
accessList: [],
blockHash:
'0x0c3e51fc62e1dd7401c8884882755b72e1c5720d0b01c75443cdfa8a129d3fc9',
blockNumber: 19868020n,
chainId: 1,
data: '0x030102553e9c493678d8606d6a5ba284643db2110df8230040150000000000000000000000daa0e9d3ba85490000006401ae78736cd615f374d3085123a210448e74fc6393c02aaa39b223fe8d0a0e5c4f27ead9083c756cc202e590f497df75e26b99774030e1592a27c3e54a91dffc8d8c7ad7df808906ea64992a25297e17000000000000000000000000cc3d76219d81b15491f32a217206fda8e0f4982a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae78736cd615f374d3085123a210448e74fc6393000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000c5abae0c91f1ee00000000000000000000000000000000000000000000000000c9c9d12f33719d8a8000000000000000000000e647457cf40066434f0e00000000000000000000469be304682ad55c57aeb258f271eeebd9e81277e3b53955fcf42a134c0b947477322c96c6a6a2d43120b9f8a661ff8cee8b27a146962f39b377d71cff6eb12b00000000000000000000000000000000000000000000000000c5abae0c91f1eea80000e1000015000000000000000000000000000000000000d276d30606c1e400000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000010a553e9c493678d8606d6a5ba284643db2110df823000000c1000000540000005400000054000000540000002a0000000000000000fb2809a5314473e1165f6b58018e20ed8f07b840065e8a0000234c66434e4e0000b40cbbf4065e8a00b4fb2809a5314473e1165f6b58018e20ed8f07b840065e8a0000234c66434e4e0000b40cbbf4065e8a00b4fb2809a5314473e1165f6b58018e20ed8f07b84066434e36b09498030ae3416b66dc00007bf29735c20c566e5a0c00000c989d73cf0bd5f83b660000d18bd45f0b94f54a968f0000d61b892b2ad6249011850000a59ca88d5813e693528f0000299aad897099c9fc85ce000038d42b0ecf8a9f8ba9db7b0c989d73cf0bd5f83b660300000000000000000000000000000000000000000000',
from: '0x0ff82acd0cd11bff58729e7dc9cdcdbe1fcf7a74',
gas: 690100n,
hash: '0x6c4e8a1e9484ad717ef42df12a6cb9655216b6a2f7420f52dc540ed952860fdb',
input:
'0x030102553e9c493678d8606d6a5ba284643db2110df8230040150000000000000000000000daa0e9d3ba85490000006401ae78736cd615f374d3085123a210448e74fc6393c02aaa39b223fe8d0a0e5c4f27ead9083c756cc202e590f497df75e26b99774030e1592a27c3e54a91dffc8d8c7ad7df808906ea64992a25297e17000000000000000000000000cc3d76219d81b15491f32a217206fda8e0f4982a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae78736cd615f374d3085123a210448e74fc6393000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000c5abae0c91f1ee00000000000000000000000000000000000000000000000000c9c9d12f33719d8a8000000000000000000000e647457cf40066434f0e00000000000000000000469be304682ad55c57aeb258f271eeebd9e81277e3b53955fcf42a134c0b947477322c96c6a6a2d43120b9f8a661ff8cee8b27a146962f39b377d71cff6eb12b00000000000000000000000000000000000000000000000000c5abae0c91f1eea80000e1000015000000000000000000000000000000000000d276d30606c1e400000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000010a553e9c493678d8606d6a5ba284643db2110df823000000c1000000540000005400000054000000540000002a0000000000000000fb2809a5314473e1165f6b58018e20ed8f07b840065e8a0000234c66434e4e0000b40cbbf4065e8a00b4fb2809a5314473e1165f6b58018e20ed8f07b840065e8a0000234c66434e4e0000b40cbbf4065e8a00b4fb2809a5314473e1165f6b58018e20ed8f07b84066434e36b09498030ae3416b66dc00007bf29735c20c566e5a0c00000c989d73cf0bd5f83b660000d18bd45f0b94f54a968f0000d61b892b2ad6249011850000a59ca88d5813e693528f0000299aad897099c9fc85ce000038d42b0ecf8a9f8ba9db7b0c989d73cf0bd5f83b660300000000000000000000000000000000000000000000',
maxFeePerGas: 10483885608n,
maxPriorityFeePerGas: 10483885608n,
nonce: 5605n,
r: '0x6b55b361fe0329871a1654ba2c6bf4174aa8cffaa69dc912e36f2b5a722ec9a3',
s: '0x37739460ab0ca1c2007b48d1442601ac1bae40957ceaf7212966f857af6fb8c9',
to: '0xd42b0ecf8a9f8ba9db7b0c989d73cf0bd5f83b66',
transactionIndex: 12,
type: 'eip1559',
v: 27,
value: 21n,
yParity: 0,
},
],
transactionsRoot:
'0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
uncles: [],
withdrawals: [
{
address: '0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f',
amount: 18611031n,
index: 45328942,
validatorIndex: 221976,
},
],
withdrawalsRoot:
'0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
},
{ includeTransactions: true },
)
expect(block).toMatchInlineSnapshot(`
{
"baseFeePerGas": "0x0",
"blobGasUsed": "0x1",
"difficulty": "0x2d3a678cddba9b",
"excessBlobGas": "0x2",
"extraData": "0x",
"gasLimit": "0x1c9c347",
"gasUsed": "0x0",
"hash": "0xebc3644804e4040c0a74c5a5bbbc6b46a71a5d4010fe0c92ebb2fdf4a43ea5dd",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"miner": "0x0000000000000000000000000000000000000000",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x0000000000000000",
"number": "0xec6fc6",
"parentBeaconBlockRoot": undefined,
"parentHash": "0xe55516ad8029e53cd32087f14653d851401b05245abb1b2d6ed4ddcc597ac5a6",
"receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"sealFields": [
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0x0000000000000000",
],
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size": "0x208",
"stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x63198f6f",
"totalDifficulty": "0x1",
"transactions": [
{
"accessList": [],
"blockHash": "0x0c3e51fc62e1dd7401c8884882755b72e1c5720d0b01c75443cdfa8a129d3fc9",
"blockNumber": "0x12f2974",
"chainId": "0x1",
"from": "0x0ff82acd0cd11bff58729e7dc9cdcdbe1fcf7a74",
"gas": "0xa87b4",
"hash": "0x6c4e8a1e9484ad717ef42df12a6cb9655216b6a2f7420f52dc540ed952860fdb",
"input": "0x030102553e9c493678d8606d6a5ba284643db2110df8230040150000000000000000000000daa0e9d3ba85490000006401ae78736cd615f374d3085123a210448e74fc6393c02aaa39b223fe8d0a0e5c4f27ead9083c756cc202e590f497df75e26b99774030e1592a27c3e54a91dffc8d8c7ad7df808906ea64992a25297e17000000000000000000000000cc3d76219d81b15491f32a217206fda8e0f4982a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae78736cd615f374d3085123a210448e74fc6393000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000c5abae0c91f1ee00000000000000000000000000000000000000000000000000c9c9d12f33719d8a8000000000000000000000e647457cf40066434f0e00000000000000000000469be304682ad55c57aeb258f271eeebd9e81277e3b53955fcf42a134c0b947477322c96c6a6a2d43120b9f8a661ff8cee8b27a146962f39b377d71cff6eb12b00000000000000000000000000000000000000000000000000c5abae0c91f1eea80000e1000015000000000000000000000000000000000000d276d30606c1e400000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000010a553e9c493678d8606d6a5ba284643db2110df823000000c1000000540000005400000054000000540000002a0000000000000000fb2809a5314473e1165f6b58018e20ed8f07b840065e8a0000234c66434e4e0000b40cbbf4065e8a00b4fb2809a5314473e1165f6b58018e20ed8f07b840065e8a0000234c66434e4e0000b40cbbf4065e8a00b4fb2809a5314473e1165f6b58018e20ed8f07b84066434e36b09498030ae3416b66dc00007bf29735c20c566e5a0c00000c989d73cf0bd5f83b660000d18bd45f0b94f54a968f0000d61b892b2ad6249011850000a59ca88d5813e693528f0000299aad897099c9fc85ce000038d42b0ecf8a9f8ba9db7b0c989d73cf0bd5f83b660300000000000000000000000000000000000000000000",
"maxFeePerGas": "0x270e36628",
"maxPriorityFeePerGas": "0x270e36628",
"nonce": "0x15e5",
"r": "0x6b55b361fe0329871a1654ba2c6bf4174aa8cffaa69dc912e36f2b5a722ec9a3",
"s": "0x37739460ab0ca1c2007b48d1442601ac1bae40957ceaf7212966f857af6fb8c9",
"to": "0xd42b0ecf8a9f8ba9db7b0c989d73cf0bd5f83b66",
"transactionIndex": "0xc",
"type": "0x2",
"v": "0x1b",
"value": "0x15",
"yParity": "0x0",
},
],
"transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"uncles": [],
"withdrawals": [
{
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": "0x11bfb57",
"index": "0x2b3aa2e",
"validatorIndex": "0x36318",
},
],
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
}
`)
})
test('numberish inputs', () => {
const input = {
extraData: '0x',
hash: '0xebc3644804e4040c0a74c5a5bbbc6b46a71a5d4010fe0c92ebb2fdf4a43ea5dd',
logsBloom:
'0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
miner: '0x0000000000000000000000000000000000000000',
mixHash:
'0x0000000000000000000000000000000000000000000000000000000000000000',
nonce: '0x0000000000000000',
parentBeaconBlockRoot: undefined,
parentHash:
'0xe55516ad8029e53cd32087f14653d851401b05245abb1b2d6ed4ddcc597ac5a6',
receiptsRoot:
'0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
sealFields: [
'0x0000000000000000000000000000000000000000000000000000000000000000',
'0x0000000000000000',
],
sha3Uncles:
'0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
stateRoot:
'0x0000000000000000000000000000000000000000000000000000000000000000',
transactions: [],
transactionsRoot:
'0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
uncles: [],
withdrawalsRoot:
'0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
} satisfies Partial<Parameters<typeof Block.toRpc>[0]>
const fromBigint = Block.toRpc({
...input,
baseFeePerGas: 1n,
blobGasUsed: 2n,
difficulty: 3n,
excessBlobGas: 4n,
gasLimit: 5n,
gasUsed: 6n,
number: 7n,
size: 8n,
timestamp: 9n,
totalDifficulty: 10n,
withdrawals: [
{
address: '0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f',
amount: 11n,
index: 12,
validatorIndex: 13,
},
],
})
const fromNumber = Block.toRpc({
...input,
baseFeePerGas: 1,
blobGasUsed: 2,
difficulty: 3,
excessBlobGas: 4,
gasLimit: 5,
gasUsed: 6,
number: 7,
size: 8,
timestamp: 9,
totalDifficulty: 10,
withdrawals: [
{
address: '0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f',
amount: 11,
index: 12,
validatorIndex: 13,
},
],
})
const fromHex = Block.toRpc({
...input,
baseFeePerGas: '0x1',
blobGasUsed: '0x2',
difficulty: '0x3',
excessBlobGas: '0x4',
gasLimit: '0x5',
gasUsed: '0x6',
number: '0x7',
size: '0x8',
timestamp: '0x9',
totalDifficulty: '0xa',
withdrawals: [
{
address: '0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f',
amount: '0xb',
index: '0xc',
validatorIndex: '0xd',
},
],
})
expect(fromBigint).toEqual(fromNumber)
expect(fromBigint).toEqual(fromHex)
})
test('behavior: nullish values', () => {
const block = Block.toRpc(
{
baseFeePerGas: undefined,
blobGasUsed: undefined,
difficulty: undefined,
excessBlobGas: undefined,
extraData: '0x',
gasLimit: 0n,
gasUsed: 0n,
hash: null,
logsBloom: null,
miner: '0x0000000000000000000000000000000000000000',
mixHash:
'0x0000000000000000000000000000000000000000000000000000000000000000',
nonce: null,
number: null,
parentBeaconBlockRoot: undefined,
parentHash:
'0xe55516ad8029e53cd32087f14653d851401b05245abb1b2d6ed4ddcc597ac5a6',
receiptsRoot:
'0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
sealFields: [
'0x0000000000000000000000000000000000000000000000000000000000000000',
'0x0000000000000000',
],
sha3Uncles:
'0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
size: 0n,
stateRoot:
'0x0000000000000000000000000000000000000000000000000000000000000000',
timestamp: 0n,
transactions: [
'0x6c4e8a1e9484ad717ef42df12a6cb9655216b6a2f7420f52dc540ed952860fdb',
],
transactionsRoot:
'0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
uncles: [],
withdrawals: [],
withdrawalsRoot:
'0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
},
{ blockTag: 'pending' },
)
expect(block).toMatchInlineSnapshot(`
{
"baseFeePerGas": undefined,
"blobGasUsed": undefined,
"difficulty": undefined,
"excessBlobGas": undefined,
"extraData": "0x",
"gasLimit": "0x0",
"gasUsed": "0x0",
"hash": null,
"logsBloom": null,
"miner": "0x0000000000000000000000000000000000000000",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"nonce": null,
"number": null,
"parentBeaconBlockRoot": undefined,
"parentHash": "0xe55516ad8029e53cd32087f14653d851401b05245abb1b2d6ed4ddcc597ac5a6",
"receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"sealFields": [
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0x0000000000000000",
],
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size": "0x0",
"stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x0",
"totalDifficulty": undefined,
"transactions": [
"0x6c4e8a1e9484ad717ef42df12a6cb9655216b6a2f7420f52dc540ed952860fdb",
],
"transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"uncles": [],
"withdrawals": [],
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
}
`)
})
})
test('exports', () => {
expect(Object.keys(Block)).toMatchInlineSnapshot(`
[
"toRpc",
"fromRpc",
]
`)
})