diff --git a/src/Nethermind/Chains/base-mainnet.json b/src/Nethermind/Chains/base-mainnet.json index 3098cc81864..642f5ae56c0 100644 --- a/src/Nethermind/Chains/base-mainnet.json +++ b/src/Nethermind/Chains/base-mainnet.json @@ -16,6 +16,10 @@ "create2DeployerAddress": "0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2", "create2DeployerCode": "6080604052600436106100435760003560e01c8063076c37b21461004f578063481286e61461007157806356299481146100ba57806366cfa057146100da57600080fd5b3661004a57005b600080fd5b34801561005b57600080fd5b5061006f61006a366004610327565b6100fa565b005b34801561007d57600080fd5b5061009161008c366004610327565b61014a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100c657600080fd5b506100916100d5366004610349565b61015d565b3480156100e657600080fd5b5061006f6100f53660046103ca565b610172565b61014582826040518060200161010f9061031a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604052610183565b505050565b600061015683836102e7565b9392505050565b600061016a8484846102f0565b949350505050565b61017d838383610183565b50505050565b6000834710156101f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b815160000361025f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016101eb565b8282516020840186f5905073ffffffffffffffffffffffffffffffffffffffff8116610156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016101eb565b60006101568383305b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b61014e806104ad83390190565b6000806040838503121561033a57600080fd5b50508035926020909101359150565b60008060006060848603121561035e57600080fd5b8335925060208401359150604084013573ffffffffffffffffffffffffffffffffffffffff8116811461039057600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156103df57600080fd5b8335925060208401359150604084013567ffffffffffffffff8082111561040557600080fd5b818601915086601f83011261041957600080fd5b81358181111561042b5761042b61039b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156104715761047161039b565b8160405282815289602084870101111561048a57600080fd5b826020860160208301376000602084830101528095505050505050925092509256fe608060405234801561001057600080fd5b5061012e806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063249cb3fa14602d575b600080fd5b603c603836600460b1565b604e565b60405190815260200160405180910390f35b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16608857600060aa565b7fa2ef4600d742022d532d4747cb3547474667d6f13804902513b2ec01c848f4b45b9392505050565b6000806040838503121560c357600080fd5b82359150602083013573ffffffffffffffffffffffffffffffffffffffff8116811460ed57600080fd5b80915050925092905056fea26469706673582212205ffd4e6cede7d06a5daf93d48d0541fc68189eeb16608c1999a82063b666eb1164736f6c63430008130033a2646970667358221220fdc4a0fe96e3b21c108ca155438d37c9143fb01278a3c1d274948bad89c564ba64736f6c63430008130033" } + }, + "OptimismCL": { + "sequencerP2PAddress": "0xAf6E19BE0F9cE7f8afd49a1824851023A8249e8a", + "nodes": ["/ip4/150.136.106.181/tcp/9222/p2p/16Uiu2HAkwJ9rhDQHogv1PB6yZtpu6QMZMuA7TjAYhNbVKQGrSkYB", "/ip4/45.42.140.30/tcp/21727/p2p/16Uiu2HAm4KH5k1Qkq2gEk74WhWvfunLJLSE7ptVaX5nGy7mdVR7g", "/ip4/54.198.153.150/tcp/9222/p2p/16Uiu2HAkwSnpTCP4f1ttHa2hKgiwZaa8TFJYWHtNNhYbqKwaYMRu", "/ip4/85.17.108.76/tcp/9222/p2p/16Uiu2HAm9bjq6bjVfQtM9SwGV7W3tC5NUaLJPsSBRn4SoqzCXhLq", "/ip4/35.173.48.199/tcp/9222/p2p/16Uiu2HAmHKzkXepNhPBmUrVNShk26WBvaZB5edjCNCpV5sza8Sgd", "/ip4/184.72.129.189/tcp/9222/p2p/16Uiu2HAm3qwgs4Bvfx1GJ5qnY4LjPbYCc394kvdjpxuJBsP3SQnW", "/ip4/184.73.87.196/tcp/9222/p2p/16Uiu2HAmAocWHkRKPsD4kN8pTEEpCqc576vu5nR19DoAfvKd8o8i", "/ip4/18.208.138.113/tcp/9222/p2p/16Uiu2HAmUcc9SxrGewq68TG4EoYB7noYqQrVr1yzinCVHqg4WRGF", "/ip4/173.231.41.130/tcp/9233/p2p/16Uiu2HAm8XHH6fhCh1hxiwCAMpak1rwnd6M53Pqe3AaUGiUZ5AG1", "/ip4/3.231.11.52/tcp/9222/p2p/16Uiu2HAkvLBTPqfA9HHXgnLUQiEJg7EKPb7gu7qMXfJFS79Goy3b", "/ip4/44.221.43.51/tcp/9333/p2p/16Uiu2HAmEGAgiKjz9MCPoEqU3KK9Xu9ZAhJBRoP6quzNKTMKpee9", "/ip4/3.220.145.177/tcp/9222/p2p/16Uiu2HAm31LCBALXkJfNGmK1tVkgzQDw9QQoNcFznzBBCYUPUhAD"] } }, "params": { @@ -64,7 +68,7 @@ "eip4844TransitionTimestamp": "0x65f23e01", "eip5656TransitionTimestamp": "0x65f23e01", "eip6780TransitionTimestamp": "0x65f23e01", - + "rip7212TransitionTimestamp": "0x668eb001", "opGraniteTransitionTimestamp": "0x66e1be81", diff --git a/src/Nethermind/Chains/base-sepolia.json b/src/Nethermind/Chains/base-sepolia.json index d9ab7c57857..71d3fb265ac 100644 --- a/src/Nethermind/Chains/base-sepolia.json +++ b/src/Nethermind/Chains/base-sepolia.json @@ -17,6 +17,10 @@ "create2DeployerAddress": "0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2", "create2DeployerCode": "6080604052600436106100435760003560e01c8063076c37b21461004f578063481286e61461007157806356299481146100ba57806366cfa057146100da57600080fd5b3661004a57005b600080fd5b34801561005b57600080fd5b5061006f61006a366004610327565b6100fa565b005b34801561007d57600080fd5b5061009161008c366004610327565b61014a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100c657600080fd5b506100916100d5366004610349565b61015d565b3480156100e657600080fd5b5061006f6100f53660046103ca565b610172565b61014582826040518060200161010f9061031a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604052610183565b505050565b600061015683836102e7565b9392505050565b600061016a8484846102f0565b949350505050565b61017d838383610183565b50505050565b6000834710156101f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b815160000361025f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016101eb565b8282516020840186f5905073ffffffffffffffffffffffffffffffffffffffff8116610156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016101eb565b60006101568383305b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b61014e806104ad83390190565b6000806040838503121561033a57600080fd5b50508035926020909101359150565b60008060006060848603121561035e57600080fd5b8335925060208401359150604084013573ffffffffffffffffffffffffffffffffffffffff8116811461039057600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156103df57600080fd5b8335925060208401359150604084013567ffffffffffffffff8082111561040557600080fd5b818601915086601f83011261041957600080fd5b81358181111561042b5761042b61039b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156104715761047161039b565b8160405282815289602084870101111561048a57600080fd5b826020860160208301376000602084830101528095505050505050925092509256fe608060405234801561001057600080fd5b5061012e806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063249cb3fa14602d575b600080fd5b603c603836600460b1565b604e565b60405190815260200160405180910390f35b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16608857600060aa565b7fa2ef4600d742022d532d4747cb3547474667d6f13804902513b2ec01c848f4b45b9392505050565b6000806040838503121560c357600080fd5b82359150602083013573ffffffffffffffffffffffffffffffffffffffff8116811460ed57600080fd5b80915050925092905056fea26469706673582212205ffd4e6cede7d06a5daf93d48d0541fc68189eeb16608c1999a82063b666eb1164736f6c63430008130033a2646970667358221220fdc4a0fe96e3b21c108ca155438d37c9143fb01278a3c1d274948bad89c564ba64736f6c63430008130033" } + }, + "OptimismCL": { + "sequencerP2PAddress": "0xb830b99c95Ea32300039624Cb567d324D4b1D83C", + "nodes": ["/ip4/18.208.138.113/tcp/9222/p2p/16Uiu2HAmUcc9SxrGewq68TG4EoYB7noYqQrVr1yzinCVHqg4WRGF", "/ip4/44.221.43.51/tcp/9333/p2p/16Uiu2HAmEGAgiKjz9MCPoEqU3KK9Xu9ZAhJBRoP6quzNKTMKpee9", "/ip4/184.73.87.196/tcp/9222/p2p/16Uiu2HAmAocWHkRKPsD4kN8pTEEpCqc576vu5nR19DoAfvKd8o8i", "/ip4/150.136.106.181/tcp/9222/p2p/16Uiu2HAkwJ9rhDQHogv1PB6yZtpu6QMZMuA7TjAYhNbVKQGrSkYB", "/ip4/173.231.41.130/tcp/9233/p2p/16Uiu2HAm8XHH6fhCh1hxiwCAMpak1rwnd6M53Pqe3AaUGiUZ5AG1", "/ip4/45.42.140.30/tcp/21727/p2p/16Uiu2HAm4KH5k1Qkq2gEk74WhWvfunLJLSE7ptVaX5nGy7mdVR7g"] } }, "params": { diff --git a/src/Nethermind/Chains/op-mainnet.json b/src/Nethermind/Chains/op-mainnet.json index 7f6a7765ef3..92b65c15058 100644 --- a/src/Nethermind/Chains/op-mainnet.json +++ b/src/Nethermind/Chains/op-mainnet.json @@ -16,6 +16,10 @@ "create2DeployerAddress": "0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2", "create2DeployerCode": "6080604052600436106100435760003560e01c8063076c37b21461004f578063481286e61461007157806356299481146100ba57806366cfa057146100da57600080fd5b3661004a57005b600080fd5b34801561005b57600080fd5b5061006f61006a366004610327565b6100fa565b005b34801561007d57600080fd5b5061009161008c366004610327565b61014a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100c657600080fd5b506100916100d5366004610349565b61015d565b3480156100e657600080fd5b5061006f6100f53660046103ca565b610172565b61014582826040518060200161010f9061031a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604052610183565b505050565b600061015683836102e7565b9392505050565b600061016a8484846102f0565b949350505050565b61017d838383610183565b50505050565b6000834710156101f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b815160000361025f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016101eb565b8282516020840186f5905073ffffffffffffffffffffffffffffffffffffffff8116610156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016101eb565b60006101568383305b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b61014e806104ad83390190565b6000806040838503121561033a57600080fd5b50508035926020909101359150565b60008060006060848603121561035e57600080fd5b8335925060208401359150604084013573ffffffffffffffffffffffffffffffffffffffff8116811461039057600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156103df57600080fd5b8335925060208401359150604084013567ffffffffffffffff8082111561040557600080fd5b818601915086601f83011261041957600080fd5b81358181111561042b5761042b61039b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156104715761047161039b565b8160405282815289602084870101111561048a57600080fd5b826020860160208301376000602084830101528095505050505050925092509256fe608060405234801561001057600080fd5b5061012e806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063249cb3fa14602d575b600080fd5b603c603836600460b1565b604e565b60405190815260200160405180910390f35b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16608857600060aa565b7fa2ef4600d742022d532d4747cb3547474667d6f13804902513b2ec01c848f4b45b9392505050565b6000806040838503121560c357600080fd5b82359150602083013573ffffffffffffffffffffffffffffffffffffffff8116811460ed57600080fd5b80915050925092905056fea26469706673582212205ffd4e6cede7d06a5daf93d48d0541fc68189eeb16608c1999a82063b666eb1164736f6c63430008130033a2646970667358221220fdc4a0fe96e3b21c108ca155438d37c9143fb01278a3c1d274948bad89c564ba64736f6c63430008130033" } + }, + "OptimismCL": { + "sequencerP2PAddress": "0xAAAA45d9549EDA09E70937013520214382Ffc4A2", + "nodes": ["/ip4/23.92.177.87/tcp/20254/p2p/16Uiu2HAm4pKiPJoM8ub3jH9chumSpEfX5pCd8sm9njkzaH7mFUN3", "/ip4/144.76.158.143/tcp/30311/p2p/16Uiu2HAmEHh2HSzK3Ff9BYpzXch68guMytNyjKvogFLanaKCcUES", "/ip4/51.91.72.147/tcp/9003/p2p/16Uiu2HAmGXwim6g3kQd3tehvWtqab7JcvT4bWpkCAnhzY56vZubc", "/ip4/45.42.140.30/tcp/21727/p2p/16Uiu2HAm4KH5k1Qkq2gEk74WhWvfunLJLSE7ptVaX5nGy7mdVR7g", "/ip4/35.173.48.199/tcp/9222/p2p/16Uiu2HAmHKzkXepNhPBmUrVNShk26WBvaZB5edjCNCpV5sza8Sgd", "/ip4/5.39.71.166/tcp/9003/p2p/16Uiu2HAkw4vemhwxVdNa5VaudjBRnA4XRKUDZmrxynVHFgMrG84c", "/ip4/3.239.211.184/tcp/9222/p2p/16Uiu2HAkxFNPGjdqZXXTdUr9xHKUJyUZbXqZC1EgDqStG2RxxzZ8", "/ip4/34.71.206.92/tcp/9003/p2p/16Uiu2HAmNRGrco5LGvaGT8Q85eqCxwWeWGsbgw9cL6HFsTbyci7m", "/ip4/15.204.213.68/tcp/9003/p2p/16Uiu2HAmAAP78k6MEFKbZjFvwC2Syr86ePVKJGRa9eXeCqrnXiAq", "/ip4/116.202.215.20/tcp/9222/p2p/16Uiu2HAm6h61WPbW7tySjVqJsF1ArvQ5G2HWSGicNTh31TBdHcVB", "/ip4/142.132.209.114/tcp/21367/p2p/16Uiu2HAmA6ECeJPQGUrcEhF4XFvKkLJvpr2nHbkTL4hZ2777K3d3", "/ip4/85.17.108.76/tcp/9222/p2p/16Uiu2HAm9bjq6bjVfQtM9SwGV7W3tC5NUaLJPsSBRn4SoqzCXhLq", "/ip4/18.208.138.113/tcp/9222/p2p/16Uiu2HAmUcc9SxrGewq68TG4EoYB7noYqQrVr1yzinCVHqg4WRGF"] } }, "params": { diff --git a/src/Nethermind/Chains/op-sepolia.json b/src/Nethermind/Chains/op-sepolia.json index f59bd1f8f34..6dc4494191a 100644 --- a/src/Nethermind/Chains/op-sepolia.json +++ b/src/Nethermind/Chains/op-sepolia.json @@ -17,6 +17,10 @@ "create2DeployerAddress": "0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2", "create2DeployerCode": "6080604052600436106100435760003560e01c8063076c37b21461004f578063481286e61461007157806356299481146100ba57806366cfa057146100da57600080fd5b3661004a57005b600080fd5b34801561005b57600080fd5b5061006f61006a366004610327565b6100fa565b005b34801561007d57600080fd5b5061009161008c366004610327565b61014a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100c657600080fd5b506100916100d5366004610349565b61015d565b3480156100e657600080fd5b5061006f6100f53660046103ca565b610172565b61014582826040518060200161010f9061031a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604052610183565b505050565b600061015683836102e7565b9392505050565b600061016a8484846102f0565b949350505050565b61017d838383610183565b50505050565b6000834710156101f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b815160000361025f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016101eb565b8282516020840186f5905073ffffffffffffffffffffffffffffffffffffffff8116610156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016101eb565b60006101568383305b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b61014e806104ad83390190565b6000806040838503121561033a57600080fd5b50508035926020909101359150565b60008060006060848603121561035e57600080fd5b8335925060208401359150604084013573ffffffffffffffffffffffffffffffffffffffff8116811461039057600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156103df57600080fd5b8335925060208401359150604084013567ffffffffffffffff8082111561040557600080fd5b818601915086601f83011261041957600080fd5b81358181111561042b5761042b61039b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156104715761047161039b565b8160405282815289602084870101111561048a57600080fd5b826020860160208301376000602084830101528095505050505050925092509256fe608060405234801561001057600080fd5b5061012e806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063249cb3fa14602d575b600080fd5b603c603836600460b1565b604e565b60405190815260200160405180910390f35b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16608857600060aa565b7fa2ef4600d742022d532d4747cb3547474667d6f13804902513b2ec01c848f4b45b9392505050565b6000806040838503121560c357600080fd5b82359150602083013573ffffffffffffffffffffffffffffffffffffffff8116811460ed57600080fd5b80915050925092905056fea26469706673582212205ffd4e6cede7d06a5daf93d48d0541fc68189eeb16608c1999a82063b666eb1164736f6c63430008130033a2646970667358221220fdc4a0fe96e3b21c108ca155438d37c9143fb01278a3c1d274948bad89c564ba64736f6c63430008130033" } + }, + "OptimismCL": { + "sequencerP2PAddress": "0x57CACBB0d30b01eb2462e5dC940c161aff3230D3", + "nodes": ["/ip4/34.27.24.113/tcp/9003/p2p/16Uiu2HAmL7Zmt7uNr8eNJTi3hJVH1gb4eDfcmBN3fP2k9Lu7L5i4","/ip4/87.246.108.92/tcp/31900/p2p/16Uiu2HAkxuB7g9PaV6ekEo2yUCB5ocW4MPBrRtW5eXsAgccBSj1b", "/ip4/141.147.43.140/tcp/9222/p2p/16Uiu2HAmCKPsKd8wAJ993zzFHg2VLRrqQVsfFqG1PYv3NG5kB924", "/ip4/34.170.131.59/tcp/9003/p2p/6Uiu2HAmK7wyBpAEg2b7jXebgmNNtyCywHJKm4YaWYn6PMUoDHmC"] } }, "params": { diff --git a/src/Nethermind/Nethermind.Core/Address.cs b/src/Nethermind/Nethermind.Core/Address.cs index 9b940feba52..11a92cd615b 100644 --- a/src/Nethermind/Nethermind.Core/Address.cs +++ b/src/Nethermind/Nethermind.Core/Address.cs @@ -140,6 +140,18 @@ public Address(byte[] bytes) Bytes = bytes; } + public Address(ReadOnlySpan bytes) + { + if (bytes.Length != Size) + { + throw new ArgumentException( + $"{nameof(Address)} should be {Size} bytes long and is {bytes.Length} bytes long", + nameof(bytes)); + } + + Bytes = bytes.ToArray(); + } + public bool Equals(Address? other) { if (other is null) diff --git a/src/Nethermind/Nethermind.Core/Bloom.cs b/src/Nethermind/Nethermind.Core/Bloom.cs index 1cd212b0606..50673c9ee30 100644 --- a/src/Nethermind/Nethermind.Core/Bloom.cs +++ b/src/Nethermind/Nethermind.Core/Bloom.cs @@ -46,6 +46,11 @@ public Bloom(byte[] bytes) Bytes = bytes; } + public Bloom(ReadOnlySpan bytes) + { + Bytes = bytes.ToArray(); + } + public byte[] Bytes { get; } public void Set(ReadOnlySpan sequence) diff --git a/src/Nethermind/Nethermind.Optimism.Test/CL/PayloadDecoderTests.cs b/src/Nethermind/Nethermind.Optimism.Test/CL/PayloadDecoderTests.cs new file mode 100644 index 00000000000..68d61f34136 --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism.Test/CL/PayloadDecoderTests.cs @@ -0,0 +1,203 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using FluentAssertions; +using Nethermind.Core; +using Nethermind.Merge.Plugin.Data; +using Nethermind.Optimism.CL; +using NUnit.Framework; + +namespace Nethermind.Optimism.Test.CL; + +public class PayloadDecoderTests +{ + [TestCaseSource(nameof(RealPayloadsTestCases))] + public void OpMainnetPayloadsTest((string Data, ExecutionPayloadV3 Payload) testCase) + { + byte[] bytes = Convert.FromBase64String(testCase.Data); + ExecutionPayloadV3 decoded = PayloadDecoder.Instance.DecodePayload(bytes); + ComparePayloads(testCase.Payload, decoded); + } + + private void ComparePayloads(ExecutionPayloadV3 expected, ExecutionPayloadV3 actual) + { + expected.BaseFeePerGas.Should().Be(actual.BaseFeePerGas); + expected.BlobGasUsed.Should().Be(actual.BlobGasUsed); + expected.BlockHash.Should().Be(actual.BlockHash); + expected.BlockNumber.Should().Be(actual.BlockNumber); + expected.ExcessBlobGas.Should().Be(actual.ExcessBlobGas); + expected.ExecutionRequests.Should().BeEquivalentTo(actual.ExecutionRequests); + expected.ExtraData.Should().BeEquivalentTo(actual.ExtraData); + expected.FeeRecipient.Should().BeEquivalentTo(actual.FeeRecipient); + expected.GasLimit.Should().Be(actual.GasLimit); + expected.GasUsed.Should().Be(actual.GasUsed); + expected.Timestamp.Should().Be(actual.Timestamp); + expected.ParentHash.Should().Be(actual.ParentHash); + expected.Transactions.Should().BeEquivalentTo(actual.Transactions); + expected.ParentBeaconBlockRoot.Should().Be(actual.ParentBeaconBlockRoot!); + expected.ReceiptsRoot.Should().BeEquivalentTo(actual.ReceiptsRoot); + expected.StateRoot.Should().BeEquivalentTo(actual.StateRoot); + expected.Withdrawals.Should().BeEquivalentTo(actual.Withdrawals); + expected.LogsBloom.Should().Be(actual.LogsBloom); + expected.PrevRandao.Should().Be(actual.PrevRandao); + } + + public static IEnumerable<(string, ExecutionPayloadV3)> RealPayloadsTestCases() + { + // OP-mainnet + yield return ("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", + new ExecutionPayloadV3() + { + BaseFeePerGas = 0x55451, + BlobGasUsed = 0, + BlockHash = new("0xaadc2aff85b5f6704b66e56d3d73ae795209ecd601ec7d4cf2a64750c152988c"), + BlockNumber = 129499858, + ExcessBlobGas = 0, + ExecutionRequests = null, + ExtraData = Array.Empty(), + FeeRecipient = new("0x4200000000000000000000000000000000000011"), + GasLimit = 0x3938700, + GasUsed = 0x7b5d2c, + Timestamp = 0x6763df5d, + ParentHash = new("0x414aba29e9e6c0c137e074f5e19f365fdc5aa59a6b5c9eb6289b4953bc87174c"), + Transactions = new byte[][] + { + Convert.FromBase64String("fvj4oGNZXhCDzUFKDGCZihNWuD1shnHfxHswY5MlznXt6OHzlN6t3q3erd6t3q3erd6t3q3erQABlEIAAAAAAAAAAAAAAAAAAAAAAAAVgICDD0JAgLikRApeIAAAFGsAD3nFAAAAAAAAAAAAAAAAZ2PfDwAAAAABRxRrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAll7R3sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACduiKH0ShqEQ51XF31bU752PooW1nqrpyiPh/NMOZzcrp5s0AAAAAAAAAAAAAAAAaIckZmijuH9U3rO5S6R6b2PzKYU="), + Convert.FromBase64String("+MuCBmeEHc1lAIMBhqCUlWDoJ682yU0qwzo5vOH+eGMQiNuAuGQjuHLdAAAAAAAAAAAAAAAAYlHn+qgjd3pnEBoiTlWGzMPIF6IAAAAAAAAAAAAAAACR3KN4ViQOXhkGIi7HknixZCDckgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTY7Y/1stsAAOKD5NZFi55RlTQhoFP7lXq2IiyUrcJuvr+s0r5ddmLq8L6ATOKz2cLxw5/QKf9AX4GT0FcLBvFPONHb9cCvdLJBt5g=="), + Convert.FromBase64String("AvkBMwqDBXH6hAQsHYCEBDbGIoMJJ8CUgCtltdkBZiHmYAOu0LFmFQk/MouAuMSgBZegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApFuKEYQ2zAAAAAAAAAAAAAAAAAAAAAAAAAAKZH1F95u7Hxd3dEOUwAAAAAAAAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAABNwiWIreBcQDOKnZWm2p3O5ovNYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY+APwICg7MvmjmhDiTxtTzqnrMtw17Ehuf0Krbb0bUkmqy0Z2AGgek8a8El54GSIu5BNo/BdS45bPuL/y6AQQ0Y3pWsUgrg="), + Convert.FromBase64String("AvkBMwqDBGnOhAF9eECEAYgg4oMJJ8CUgCtltdkBZiHmYAOu0LFmFQk/MouAuMSgBZegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHOGC4mDkPgAAAAAAAAAAAAAAAAAAAAAAAAAKZH0tfOMS7112xzjKgAAAAAAAAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAD8HzKWRY+bKieguR3XaBxAIOCdBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY+APwICgbHbR/jPBiwz1iQnswruSfWkvvMc25kPEl9z4cO06lfigcgzs9C9CWrxkHE1Lxo6tIw2G1r1Ocnq0ScDV7mrNZQk="), + Convert.FromBase64String("AvhwCoMPDPaDGWxsgyQWMIPk4cCUq/TarBiSVTDR5Pmf1TjVe4vxAXyAhCT4iGPAAaAo5Tp1XGBAUnsnG/qST9yQ+55WBYH13/hBfz5lpV7TDKBpN8oWpZhh/I5BPbmj25sRaMxgtjVmvQkLtkkd1hQvwQ=="), + + Convert.FromBase64String("AvhtCoKer4MeuduDHrnbg5iWgJTT3AeaxvmCdbu80K/xHLqttNjyrICCAAHAAaBxIZlpWi4LXWSzPCK7S/GX6s9t6KeNAsi6lvgYOUBdHqB2fxcRz1ZUZJRDK2LNic0Y+VMgvUun8x7Mtl26+ZDa/Q=="), + Convert.FromBase64String("AvhuCoJosIMPzCWEA5OHAIOYloCU09wHmsb5gnW7vNCv8Ry6rbTY8qyAggABwAGgYjV4hqsKkR7BaVZogU6B+jawGGLWBJQ1QC6N4SdDXjWgIs6cwoVgB2KHvUl9j+SNs/3CnX1TgniZDC2V7RV+8TQ="), + Convert.FromBase64String("AviwCoIHa4MQyOCDFJiogwFJmpQLLGOcUzgT9KqdeDfK9iZT0Jf/hYC4RAlep7MAAAAAAAAAAAAAAADyiHN+ZkLhKwlCn6U+xz3GGKRBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAicBU8wICgOW3yGXXJhf7mD4FxUjphe2lbjbzM5JqpA3WHYTOOS6ugBZvxSSZqybLjxYlaaadsEJuILazCeBq9s4usyn9OieA="), + Convert.FromBase64String("AvhuCoIBd4MPQkCEA5OHAIOYloCU09wHmsb5gnW7vNCv8Ry6rbTY8qyAggABwAGgyjuKrQ9o5ovapvwvxlCH9k8Va1GLdvC0bEpvScReuQagHzi4NHJLijTbkHS1j+NnYSm0agzHUfkdAhTfoX4WRVM="), + Convert.FromBase64String("AviwCoIs+oMPQkCDGewEgwLoZ5Q6vcJLbAB8izcFqmy9wbjRw9mDxIC4RF+/uc8AAAAAAAAAAAAAAABvc8aSXTL/vv3hMqgxnN/9J+ZlYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABezXwICgxBQL+6Jj4J2qptDTXdneZoW5Hfp4FbGwPJCGENMPn0+gOS6AnoEkuTMYBMVIRt8gar5o8KarGKOg7KAwxVCdgHs="), + + Convert.FromBase64String("AvkEkQqCp6uDD0JAgxWmr4ME6eiUAAAAAHFyfeIuXp2Lrw7axvN9oDKAuQQkdl6CfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAQzcAm+Q8fsyb+94PF4BVOqBlGH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAaiqtLiDvYrW1bk4rXjQuU+5/oE8AABdxnBQAAAAAAAAAAAAAAAAAAAAA5PEAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAjz+AAAAAAAAAAAAAAAAAAJaNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqrJAAAAAAAAAAAAAAAAAA9CQAAAAAAAAAAAAAAAAAAVqKIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5OmuXFMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHhmaLxu6nNAS02ld1x3T6/IFbZrNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqQWcuwAAAAAAAAAAAAAAALuao+JhJUpvPHUlUnbecZNGsN4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX14QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAAA5zV6K4FJXzlHEc93RAAAAAAAAAAAAAAAAAABrkgAAAAAAAAAAAAAAAAAAAAEAAABnY+GyAAAAAAAAci5t9WolE1qJYHLf/5yRYX+r1N/ErOHV3Cvc6IKCZh10c9z352FZwB5k0ehrqyuqJFPuObxNT0pvBKUbbtzp5hwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQv9LTVieQeGEtBubGnvMZXPa6+WZVFfJQ6Okdb2yaltpsH+L5A1oVBbSnmezkGf5XV1Mbo9nfbiiFKhbIl6c/Q2uGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAoJFo00Skrr7PAtOGO+RjeIKCuaI78pAzQafM+wolF9UZoFYVRWaPvWrl6UTVawENKxepe9TuANgQ4jR58UR3WO1J"), + Convert.FromBase64String("AvkEUQqCpzaDD0JAgxWmr4MFRXOUX/E31LD9zUncowx89X5XigJtJ4mAuQPkH62UjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAQzcBCPMO5e1UqVZfN6876FApA/UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAANFUdoKHDAUlmfw/BiddySZX3ERkAAAAAAAAAAAAAAAAAAAAAAAABk94gdw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYrVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFnR4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWoogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIS2HSf2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAA+4ZtqqeTUsxWigBdlgAAAGdj4bIAAAAAAAChYGw58OznDJZLi65tZrYvwpNX/yr/AKEJRABo8ud9WgrMQGnKAr9O+PDJOmSyL51ogRPq2+qSjYYPtYBFV2BTGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQ5T7hhmN1PvLUKL62VSaK5ZoFy+f9A0LtpQFnKy0sOhhIF4hKcyZ8V3EIAj6v/fCIj6Kq8VwCYwmFnFJSU/ahxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICgIYAj3Q48eLVrLz9U+pVs9yRY7BJER/gizxujbX/kEyWgVAaOvIWrZqhqRfVcuC5wRd5Jj5vRpgOCXuh0VvRGw5U="), + Convert.FromBase64String("AvhwCoMeODKDD0JAgxnsBIPk4cCUq/TarBiSVTDR5Pmf1TjVe4vxAXyAhCT4iGPAAaDqtGJxD7OBzoyGBCAQvytIEnGi+EVwdzZlUCcSqpnb+qB5FtgUtJEcEr0Wcuc6jrNk0hi+BNvTG3mM+dMZGgZgxw=="), + Convert.FromBase64String("+MGDDCW8gwhaDoMDNl+U8a8mI5ZyvtcxGBxYqIKauQVQxU2AuFoDv7tk5xQrlZzLPI/B7XdpAEdCwZfiglECfgAAgItqAMlBhcMf+jcG0czp1SWgDxx9SikRdUwAAID/llVGLQOp3BGLIxSABY56OwUQQuyDZjeUAAAAi1B/BS43oOxOlAX65fFZCcbu7yp58kiq7zs48pqz5DHs5QiwffOXoHUYhNqxqMBKCpERvyWFJ+SeiPXyW6UCvYiBH5FyQH1t"), + Convert.FromBase64String("+QpsgwNGSoMG3DyDEQUulOzpz2qPJ2ijuLZQYJJbZGr+qlFngLkKBMWjcDYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAA+t619bp6Tfytf+gMqqPmX9+cQKoCu6HA2C4CiU+CsGFoPeOmH57v8GU0P/P+DstN4iObjExVoNo565MX9nF8l+woF8pmvjQJ7XKJ9LJNY8tP/dJ9Il6GmrKfHvm5L5e/TAAAAAAF/PGAAAAAAAARr5QAAAAAZ2PfTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/d8Gmcm1+TNkIc8TFdoj/HF2PfREsRLZOiUgOBVZw/Br04oKAAAAAAAAAKKnhv+RSPfIjukzctuMvp6UWFx0/aAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWEa3UNY5nJtfkzZCHPExXaI/xxdj30RLES2TolIDgVWcPwa9OKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkxNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAA9sXwHH8xSIka0OGd94dD0x45DR8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABS1E0NMTdIMAAAAAAAAAAAAAAAALNYh+0fhvcizCLd6S1oGynBa6VGAAAAAAAAAAAAAAAAoqeG/5FI98iO6TNy24y+npRYXHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEFAAAAAAAAAAAAAAAAs1iH7R+G9yLMIt3pLWgbKcFrpUYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAJBGAzZryKz4gaNc1Mfg1RTwR3/8//////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4M+0CYpVF3Xivw9WF9/ORij3mIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPjW4nwa2pTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAEze+3J0i7L52bfEFyWI5IqJ5Y+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQWwzcUVkeVgAAAAAAAAAAAAAAAPNw2e0BQSB+gTIRWDk+6l2KUMxyAAAAAAAAAAAAAAAAs1iH7R+G9yLMIt3pLWgbKcFrpUYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAs1iH7R+G9yLMIt3pLWgbKcFrpUYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGS0zMoNa3UNYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACip4b/kUj3yI7pM3LbjL6elFhcdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpVRstQJcxtw1G0wIze+P2KY9yw/wafzC8cxt7jBu7+QAbfRVY286y7tqOwadlmDqirfJuM450G43Z4PtEXME62QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgC5MqV8TMjBnzwP1GxxSAkcTuIqtlV7axCQL8iaOJxZ6GclGMsfEEHhzamat0fK7/OKbOndVMVAkmH+W89fNp10WH+k8jma+yh3iomFofVDPgXgQeoewiW0+fRb1t4rz0iGyFSjQl3wMSkCR5DJ5L3h1DAfsoMdZBu0XZcqVahL4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUtn4jdT6wp149hkBChrrXLAGu9enkTHS9wUjwscIVaAfg1PEZpA2nDhDynP7xfyjYT1/odtIuocPgWb4ZBoQsOKAnfy97FMTVLX2jZtrakFXK2dk0UWylxF4v7nggZGqMyKAhi5KLdoqzGY8DeGNQcHIuBcKfDaJUJOmnizM28rkVvw=="), + + Convert.FromBase64String("AvhwCoMWDG2DAYahgwwwZYPk4cCUq/TarBiSVTDR5Pmf1TjVe4vxAXyAhCT4iGPAAaBL8+2GumLtef4TVqHIHmjpmYo8MN+3Q5FySA2aUOsJYaA7kfSVx3IyDc9uXLy2cDH1s8VLQv6xpQBZbJPo0xBwWQ=="), + Convert.FromBase64String("AvhuCoK+EoMBhqCEA5OHAIOYloCU09wHmsb5gnW7vNCv8Ry6rbTY8qyAggABwICgcExTmkmitkVJUwBsiYknDuhDzfM980g0sxiCplavFvegTlSr4zndPBPIaWl3HiKaEI8WAZpvGRqd+7ba4xSJUGc="), + Convert.FromBase64String("AvhxCoIBc4MBhqCDFtoEglIIlHp6NeFF16IQPEic4MwGjQaAMkAHhwqoe+5TgACAwAGgb1pkoH7WydD4A8MACWgay+0o5P4c5oMAV+as+GuS4o+gL3OhoFxrqNy2DNQdXrfqeZJdLv5Qh5+0RCrdYKtUFHU="), + Convert.FromBase64String("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"), + Convert.FromBase64String("AvhvCoMBhfWDAYaghAOThwCDmJaAlNPcB5rG+YJ1u7zQr/Ecuq202PKsgIIAAcABoGBTzkRrXFFmqBSzOH3e6gG4zDfgOOZ6OPBRU8WI+wpRoGk2bII2zBQJRgc/Cb8bunQ9X5Hd1v4Bza2V5kwd7wpO"), + + Convert.FromBase64String("AvhwCoMwUYCDAYaggwwwZIPk4cCUq/TarBiSVTDR5Pmf1TjVe4vxAXyAhCT4iGPAAaCPDWWjXPjGxjetWwY4tvFsTEcEDSDV/WHi//Rh5PI7u6BPMVmJ7+dwgcXUWpCVkWPrc6DafFI/R/PrJ6eLy1iPZA=="), + Convert.FromBase64String("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") + }, + ParentBeaconBlockRoot = new("0x3c91f05470cdc6942d0b347b3258dfeb6f9cf68a24cf26cf0d72bd467003c437"), + ReceiptsRoot = new("0xbe404128db2f49d82825bccf1568f3cd876b023feb74ba637cb7a93cca3e0007"), + StateRoot = new("0xf1054086f7dec9f3badfc063d5a9932dbeac44ed1fe1e810718a754001503fae"), + Withdrawals = Array.Empty(), + LogsBloom = new(Convert.FromHexString("02402900000c040281010814014100004000010800001000300402004004032000090000282100000002c01140400480811900480001288208002a45002082c508120404420000082001000805c00200114c04030410081081086820102820094e0241000a2800000040080102104800000004000002085002c10014302a00601000000211800020000c001010014000024000200022800a044020004202100002000010400200000040600000000200080440042c04800104400200000100120408102200224448000118200800012020a0000140858004c611000c104028004070800800922004010000020203000004818000880288140000080110008020")), + PrevRandao = new("0xb4df95545f5218867dff8faf7a3c04238d746a474e2f043fd45b22b0123995d5") + }); + // OP-mainnet + yield return ("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", + new ExecutionPayloadV3() + { + BaseFeePerGas = 0x55502, + BlobGasUsed = 0, + BlockHash = new("0x4682e6ae5e83d3901ffb0094636f106386cee5fa7aa283292225bb0a9de4e83a"), + BlockNumber = 0x7b802d9, + ExcessBlobGas = 0, + ExecutionRequests = null, + ExtraData = Array.Empty(), + FeeRecipient = new("0x4200000000000000000000000000000000000011"), + GasLimit = 0x3938700, + GasUsed = 0xc5e787, + Timestamp = 0x6763df6b, + ParentHash = new("0xf1309f038d6481b76e50404d19c5adcdc293226548cb594a2e85e10b776714e9"), + Transactions = new byte[][] + { + Convert.FromBase64String("fvj4oL1rW324wN4m8eNy1xUciORi+xruPTtnk5B048UEJVdslN6t3q3erd6t3q3erd6t3q3erQABlEIAAAAAAAAAAAAAAAAAAAAAAAAVgICDD0JAgLikRApeIAAAFGsAD3nFAAAAAAAAAAEAAAAAZ2PfGwAAAAABRxRsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiww43EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkCvPkYqq5Czb2IR0tAVy4IBUgHxLU946PKqbYTUlCfxPuipAAAAAAAAAAAAAAAAaIckZmijuH9U3rO5S6R6b2PzKYU="), + Convert.FromBase64String("AviSCoMCr9mEDXPNHoQNc80egwSwb5RvH+WwSN4EF8ToOLH8QkWq8lTx3ICkskYMSAALBq153tZZ1FgAAAAAAAAAACd7Gitgk+mX4Y4Tp58AwICgzABFQH2OpZ9vFPMOKrrRfzGG8BaCWW2OQXH94vJhEYOgF8XLnSvvevnn0b4gg3BlxPXlldM+2U3Cj6r0EHgbsBs="), + Convert.FromBase64String("Avi0CoMga9qEBfXhAIULqkCXQIMCSfCUlLAIqgBXnBMHsO8sSZrZiozljliAuESpBZy7AAAAAAAAAAAAAAAAfWLJRD4FbFP2fsaPgupeukbu6ooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfXhAMABoJrw4MJoUaWz8jkkcZLrBeQnI11G+ckvmuqPZ8K54iB8oEOnZIAVHgtN9pH5ivuM4fC8GK5Lf9KYLImQqRpQ8ESr"), + Convert.FromBase64String("AvkBMgqC4XiEAX14QIQBiCJEgwknwJSAK2W12QFmIeZgA67QsWYVCT8yi4C4xKAFl6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV+rblU6j7YAAAAAAAAAAAAAAAAAAAAAAAACfNs9HXb23wuMbEl22WXAAAAAAAAAAAAAAAAhwDa7DWvj/iMFr3wQYd0yz11mbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPJbvBimB7viGMh7of8OZz2bU91YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdj4B7AgKAziQjqPHFC7J9lnGp2WeWBNy9NJWCQXTIDW0pQ4KSBpaAZYy4sd7nYcG6AFWekRWNu0C99BIb9rFNUarP0esRiEg=="), + Convert.FromBase64String("AvkBUAqCnnSDmJaAg59IqYMFe9mUNyGw4SJ2jO3fs97IEOZMNhF3+CaAuORHT9h0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJ+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAABCAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiL0SPFSmTAAaAMQxWct66oIFFvTumRsRWuKN7XLzhQR3s/K0ygcfO6eKAptn9R5/V5bNRC+931lCv7tzDDZehXhaOZTtwpHIZuTA=="), + + Convert.FromBase64String("+KuDCMQ4gy3GwIMCGOOUQgAAAAAAAAAAAAAAAAAAAAAAAEKAuESpBZy7AAAAAAAAAAAAAAAALuz6UAwzwHWN0cDgm5SSlufjl0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7dcy0LAicAADegAb0ltzDB4z9OhkAQmb3T3d1xzM9auhtNG2XePRiy6NigOQq+GExG/Egys+h/xj1L85aCxsuCeUgm9FkLjflVsW8="), + Convert.FromBase64String("+KuDCMQ5gy3GwIMBNDeUlLAIqgBXnBMHsO8sSZrZiozljliAuESpBZy7AAAAAAAAAAAAAAAADDM2ikzscOx2C8y2wXC9Xe2ZyQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE1FQDeg/v1VhEo1X5lq7RZs4N3nRwjBoigPGH6X4N4pWJ0vBVygIt81KE+sV+C/j6cMiTxEx4jStYl9n+H9pE2ky4dQnUM="), + Convert.FromBase64String("AvhwCoMPDP2DGXCYgyQWqIPk4cCUq/TarBiSVTDR5Pmf1TjVe4vxAXyAhCT4iGPAAaBf0yttDLrInNR1t5DuenWeSiss9fhGIg98PulKHARY3KBqpfOK2PJGpIJmqqUOGEPR+uFGe511dHFNqSl5w6S5Jw=="), + Convert.FromBase64String("AvhtCoKetoMeumWDHrplg5iWgJTT3AeaxvmCdbu80K/xHLqttNjyrICCAAHAAaCnyo4TyRZ6H5a6Caz/3DiNnwXTGIKFyfIySwGnAee1i6ARSgQ/l3yFNACJeNrHGT5nbWxgv3jnfVGoNSbgjfsF3w=="), + Convert.FromBase64String("AvhuCoJot4MPzCWEA5OHAIOYloCU09wHmsb5gnW7vNCv8Ry6rbTY8qyAggABwAGg4rLDabPmqQvZ0Wfa9uHEWTbFY+Pmw6ZuCC6iJriXv8CgYcDVQhGIE+2lMU30p8kO3GWbHNx1fPZMv/3sz3DOv5w="), + + Convert.FromBase64String("AvkIcQqCBP+DEk+AgxTk1IMiGSSUEL0WV++mzS/rsfPN0dPEqbyfoPWAuQgE9TBDdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAA8lu8GKYHu+IYyHuh/w5nPZtT3VgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Tvlg7SitiCasum42DtU9ysbBO8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFrQzkGsbcvp1jhZuI5xD1o3G8pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAACyxjnFM4E/SqnXg3yvYmU9CX/4UAAAAAAAAAAAAAAACHANrsNa+P+IwWvfBBh3TLPXWZtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjRxq8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAALlKR1qo7SgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFrQzkGsbcvp1jhZuI5xD1o3G8pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALLGOcUzgT9KqdeDfK9iZT0Jf/hQAAAAAAAAAAAAAAAIcA2uw1r4/4jBa98EGHdMs9dZm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFPpEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASh22JEOSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAALLGOcUzgT9KqdeDfK9iZT0Jf/hQAAAAAAAAAAAAAAAIcA2uw1r4/4jBa98EGHdMs9dZm0wICgiTARmSQKWBIhT5NMBm72Yio6ca9ClYWFmvyIdfRdb7KgFQ5jdt4X0Th1i+bnllQUqF8Mkag1vJ/GUUGE7KoyxPc="), + Convert.FromBase64String("+QErgwEktIMUnQiDIuTwlHnjhYXct2RH/wcuvlPVZkwoL3INgLjEp+69sgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAOZ8zzmL1QWwOZszI6eqkKLhZLGTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOkllv3B7hADigZkGFXIwNlDKKQ61q8xmXxXAC5n7cigYmTlwvhQjV5zigTMc0As20qvsAG4aojUa5TdN6Ok54FLGc4f6hObDdGOo="), + Convert.FromBase64String("AvhxCoCDD0JAgxYbNYMBhqCUW9+FIW7B441kWMhwmSpp444D9++IP7uYB/c1IYCAwAGgW0FR3XjgLlQR/0Bphkq8z8wxgtFtJee43FSmDP24M0mgKKOoGbIngKRJvS3FNhff4GI3nq0BUQED40E0rZimoYo="), + Convert.FromBase64String("AvhuCoIBfoMPQkCEA5OHAIOYloCU09wHmsb5gnW7vNCv8Ry6rbTY8qyAggABwICgPu8KXHtO3azbKMd1vo4toH8ofOO4v50PL/Z5exZ3ncygWg8+w2tHmGy8Gyj8e87ZRGMVZ0H4zb3eUmaagKSUq+w="), + Convert.FromBase64String("AvixCoMEBRODD0JAg90QEoMBhqCUlLAIqgBXnBMHsO8sSZrZiozljliAuESpBZy7AAAAAAAAAAAAAAAACcn4BRwxdV9jgvwspASW/5qDcaIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkQhjlMABoCOg+caUBu2C8TNovzaweEzdx7hUS7augnFQCpE4EqNFoDW7SvMUVSvI/JnOQghjEIFZldooqXBCc9q4Najnyz7r"), + + Convert.FromBase64String("AvixCoMEBRSDD0JAg90QEoMBhqCUlLAIqgBXnBMHsO8sSZrZiozljliAuESpBZy7AAAAAAAAAAAAAAAAlfRX/++OJako0CjB1HxhKh1j7RcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHdH44MABoCwXvQXP5LGGISCVEHPGMP/0tNNAIALrOQEvc54H7gNboHdrCq/sjylKh55RuT1da0ynM21Uij+1/a2DJ8DZReUg"), + Convert.FromBase64String("AvkE2QqDAVr+gw9CQIMVp+qDBeOQlAAAAAD8BMkQoLX+ozsD4ER60LCqhwHtn7OMdv25BGSkTJznAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/cbB4uRiaEZHXbHe9GXaANDv7YAAAAAAAAAAAAAAAAAAAAA/LCApNbDmpNU2p65vBBM1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY+G/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQy40Xckt/cLsx9ndk8QGkMAZMglstaOvcc6ytCDBsc2UVFlv72cmf8IlKX1hz7iW+QPKDk2ZpaI7twZCFW1+MocAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY+G/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIX9/UrDKCBaxlW8kqKBvEskD7UXf+mfThFhjvLQ/EUNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPAAAAAAAAAAAAAAAAAAu95DdeZOjX9hHwFPt2ulA0FVZYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY+G/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEF/TrJWjRxb7mJl/GY1N8J/0eu1Al6g9Y1zN83ftU0FAX1gsINjplEW0SYVGZoQq6lh04VNHPh2iehQlxw63qStHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQVv9XwkTmtuFOJiEZvKpeVgf2ISmViWFPu+llfQOBbF9UC7GwknrDUanrjfA1DbRkZcdJQq9bNQqt/yfYDmnvLQbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAoMKb0fWeC4TTP5nIiZkRF1l/yvZxBFXjS5z7UW/94aF0oHV/jc5YM31BPC+iVErlPWHH7gLhkj901mqq3OHc+5Om"), + Convert.FromBase64String("AvkDUgqDAVkFgw9CQIMVpx2DAsf+lAAAAAD8VpR8fnGD+MpLYjmMqt8LgLkC5KAF09IAAAAAAAAAAAAAAACKNnfbw6pZtVaL2sHjCTujqQHZSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdj4cIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg8wU4yGMS2YwlVPuPWybP5ae0G+wqH/H9he6HKH7oy3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK9TUAAAAAAAAAAAAAAABibC10OHUHbKJbVBSzu71fsv/w3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdj4pMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQV4sBjCwXaMhLcG/m4C2He/3hIYNnIwFYP3leuDEnkINb168DLGeK6ZXjw3J2Sp6TrdNq+vHhBAWc1tlfGcndPEcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB7tyoZ97tuAXkpDjNC/yQ0JDgz/nZZa5EKTvNd96GSLAvJWWBTfdI3H+x3TCDlrLMzzRWc6dB7iR5jR+r54nDMhsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICgXfxvlaTcry4mIJ5xaM5EIfCrgMkWMW6uE+Fb+ys7X3agVLPF8nE8MLT9TV+N1EB/GMh7Ak0anzAWf3n67QgMU6k="), + Convert.FromBase64String("AvkBUAqC0jmDD0JAgxnsRIMJJ8CUgCtltdkBZiHmYAOu0LFmFQk/MouAuOSVQ1rJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBSViug1FwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGbASDNd3COFBEwAAAAAAAAAAAAAAAIcA2uw1r4/4jBa98EGHdMs9dZm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGFdAAAAAAAAAAAAAAAAHHVO1txQeHsmj/JzEi0dmEC0UpKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdj4B7AAaD+BouowklB2HVS5MmJtk+r/9gd21rnH8MrNXJ1w+CeYKAc91ns6Z/OXTKcTCgCw42b5k1G2RNwxi28cBKN+nhL1Q=="), + Convert.FromBase64String("AvhwCoMeODmDD0JAgxnoUIPk4cCUq/TarBiSVTDR5Pmf1TjVe4vxAXyAhCT4iGPAAaDFhCtP+fra+CZIaRNXno5VcLF4cNGJV9LOUahCr9KU6qATVziH1jyToWVE4s98W8QHAe0tbfiTNk/U2TwLvcNk3w=="), + + Convert.FromBase64String("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"), + Convert.FromBase64String("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"), + Convert.FromBase64String("AvhwCoMWDHSDAYahgwwssYPk4cCUq/TarBiSVTDR5Pmf1TjVe4vxAXyAhCT4iGPAAaBKYsAY08acCHWjELBB4Q1YnoqOGdsHTaJDDDZsWyHDv6ADBa7ZIpK9KoMH6ss6eCgLgKQktFK/JVuDFzQzj+of4A=="), + Convert.FromBase64String("AvkDFQolgwGGoIMW1WiDAb+1lAtO1L3N1/Oa0z3brcWmjnPR6qnZhrXmIPSAALkCpHaSuoYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2Pj4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY98wAAAAAAAAAAAAAAAAC07Uvc3X85rTPdutxaaOc9HqqdkAAAAAAAAAAAAAAAA6Pma01BO4bKlFPoRgW4y862Yd3wAAAAAAAAAAAAAAADo+ZrTUE7hsqUU+hGBbjLzrZh3fAAAAAAAAAAAAAAAAnDZik7p+iTzhhNdXlDMNZ05NF8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC15iD0gAAAAAAAAAAAAAAAAADu7u7u7u7u7u7u7u7u7u7u7u7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAscANBFbNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALLGOcUzgT9KqdeDfK9iZT0Jf/hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyKbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIGkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgKAvPcWwWzSe/GyJDW+nBYhLZ02cRCHOH3lPuZk/prRovqAZeMig2gxAHpoD5y3KgQwbJRSt9FMqBW/XJ1GcwiXU0Q=="), + Convert.FromBase64String("AvhuCoK+GYMBhqCEA5OHAIOYloCU09wHmsb5gnW7vNCv8Ry6rbTY8qyAggABwAGgOnbIpFrU9ivskOnqHKRqx14d3Ql7iYU7W9NqY2bDCHygeVvlaZmAaHu8YiRn2P+cdq30iNiNZquFFAEMIgI6ll4="), + + Convert.FromBase64String("AvkDFQolgwGGoIMW2gSDAb+plAtO1L3N1/Oa0z3brcWmjnPR6qnZhrXmIPSAALkCpHaSuoYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2Pj3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY98tAAAAAAAAAAAAAAAAC07Uvc3X85rTPdutxaaOc9HqqdkAAAAAAAAAAAAAAAClXGl8NCDc/hyjzDzF8YJLE97uEAAAAAAAAAAAAAAAAKVcaXw0INz+HKPMPMXxgksT3u4QAAAAAAAAAAAAAAAAnDZik7p+iTzhhNdXlDMNZ05NF8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC15iD0gAAAAAAAAAAAAAAAAADu7u7u7u7u7u7u7u7u7u7u7u7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAscKJ1i8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALLGOcUzgT9KqdeDfK9iZT0Jf/hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyKbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIGkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAaAwJUyiRPIG4es4hxoiRZNsTpC2p11bxO3D0DnAgyJ37qBt+zk6SvYJ878q+MT7YIeEIVCAGo+fZHtp5AUku8VC/A=="), + Convert.FromBase64String("AvhwCoMwUYeDAYaggwwssIPk4cCUq/TarBiSVTDR5Pmf1TjVe4vxAXyAhCT4iGPAAaBgDHLl2qhSeodPCp4j4UCIksKvRj9+Yzkzbpx+lRCpcqAIROUhJhBZYZr0PBO6ftRqJeZMYhLlgPFUGqh/nen6aw=="), + Convert.FromBase64String("AvhvCoMBhfyDAYaghAOThwCDmJaAlNPcB5rG+YJ1u7zQr/Ecuq202PKsgIIAAcABoOTxmbPBAFx+ekbXqY22KVYWpuT61VUZEUFQpZolxrDuoAnZRtd6l5reYIiSqwq1/ZWMsu9MrAbSg5dMPBpL5DCU"), + Convert.FromBase64String("AvkElwqCA5eDAYaggxbaBIMDkxiUEZXPZfg7Oldo88SW06Ba1kEsZLeGRDZMW7AAuQQkmqp4eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6AAAAAAAAAAAAAAAAAAAAAAJcMLHhiZRZSSozyVpuwOf/joVycRyX466u3zxZ5ijWEiQRlw68DBnOktxzpr8qk5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENkxbsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAzBEHJLZZabzefxCWCsCQwfAfhHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhNZXRhTWFzawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1aXBmczovL1FtYWF6bjE2OTM5Zkh0VnBXVHM1b3ZrNERLU3NSdWVNazd5d3h4M0hMa251bmcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAABrCBe/swv4xN34nPbk/S7FFxnoZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQYjRbJdZeq1Bpr6jkxgHJD5kQzYgf50Todb5lgofpvFSDiC4z8a30RN0KtBZzEszo+gWXa8jRfgHH7uGRIW3BD4cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMABoH5Br0lxhDsqJFMLn16UL5fIXCiW3Drx5ADp08U6EyaOoB8Hh+OLL9kts7Ei+RW0fic8jNdUr/IDm3IWxdE9iqUu"), + Convert.FromBase64String("AvhvCoMBo6SDAYafhAOThwCDmJaAlNPcB5rG+YJ1u7zQr/Ecuq202PKsgIIAAcABoGxM9g0uW+nuutMDimZShI1ibRbgrDSdY3k/LhuahbsLoEdEEz9WhOQg0VEv0Ba2oFMiHYWAhlROKiuEdJlSJ9pd"), + + Convert.FromBase64String("AvhwCoM1IxeDAYafgwwsr4Pk4cCUq/TarBiSVTDR5Pmf1TjVe4vxAXyAhCT4iGPAAaALs7rNaib36BudX2/W4zQyzJ8CWny8n7xi8hGafiokq6A+L1TYZDHuJ1N87121UaXmcgRuL8bI6afweH+qbBFJAw=="), + Convert.FromBase64String("AvhtCoMETzwFgwwwEYM0y+yUO3Sb5soz8n4oNxOO3mn4xsU/kgeAhP21oD7AgKD3scFSmumEN//g+zWAeHd7OdpcV7LEVGJB1a60QmqNxKByrZO493VevxxZhleny42G6t0etyGkenEzp3l/WZ+1Yg=="), + }, + ParentBeaconBlockRoot = new("0x5f064007409e7e2c51811e448c61f98cc85af44f77922f3e2717847482fa6b14"), + ReceiptsRoot = new("0x6da79badb38a47d4f94b3887e3c9ea03cac0c13a190c6ca4b0c7cc485532a6ce"), + StateRoot = new("0xadb8655e6510b2376c8631a0c6f460f8d4aa418a6502db0e09d3003622b3c80b"), + Withdrawals = Array.Empty(), + LogsBloom = new(Convert.FromHexString("5618309111040001808010800203440001800508420420040804011040c0110007291200200c068101000010810c3110215104404000261006288440403410c006002801041820aaa305140a0000000380808c000026003080400004800040403090800a222400009c114000030008299dc00402280c8a001981203a080c0888102014314810041058a00e004008004021c0d8210030020000020c0c1a8000308a80000020b0020000008442005002a0203001010140030840822300800001a68200128308008301282808264042408101880200a684070c2098022000226084011c980900244042283040828031112070008000508009c80602400000cf1890")), + PrevRandao = new("0xae6223389278dd4d32efdfff1141888a75202098042137afa5f7d294796ded20") + }); + // OP-sepolia + yield return ("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eV0C1C4IRAfZhkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFnNwJhPWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABa3FO2IXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdVrMV3IgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCnQaRieAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY/W2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdj9bYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2P1tgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY/W2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdj9bQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY/WyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdj9bIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2P1sgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY/WuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2P1uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY/W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdj9bgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2P1ugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY/W6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdj9bgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY+Y4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA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", + new ExecutionPayloadV3() + { + BaseFeePerGas = 0x108, + BlobGasUsed = 0, + BlockHash = new("0x7f007a35cd262d8d99a36f69d7bb6e8315682c2a810642bb93def01f64314be2"), + BlockNumber = 0x1468d1e, + ExcessBlobGas = 0, + ExecutionRequests = null, + ExtraData = Convert.FromHexString("00000000fa00000006"), + FeeRecipient = new("0x4200000000000000000000000000000000000011"), + GasLimit = 0x3938700, + GasUsed = 0x548e02, + Timestamp = 0x6763f5e8, + ParentHash = new("0x493b5117ac4457d004d9f9e0139c5f844c9894df333da27055e425944ea44ef5"), + Transactions = new byte[][] + { + Convert.FromBase64String("fvj4oF0kYcUcgt9O8FOt/4uOAUehrTbLN8bX0IZFQl89D/xwlN6t3q3erd6t3q3erd6t3q3erQABlEIAAAAAAAAAAAAAAAAAAAAAAAAVgICDD0JAgLikRApeIAAAHbAADScwAAAAAAAAAAIAAAAAZ2P1nAAAAAAAb40gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCzq4zgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATxhfVJGN8sbuHdGU7mM8oTuguoDD4M3EWioaqPwAg7rAAAAAAAAAAAAAAAAjyO7OPUxYA5dj92q7EHxP6tG6Yw="), + Convert.FromBase64String("AvkBXoOqN9yBqoUBKgXyAIUBKgXzCIMCH5iU8iF1DlKqCAg10pV/Lu0NXX3djDiIAWNFeF2KAAC45FZZHVlhcmJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QVEm4GFtmKGG0LQaa+vKHPHshYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0JB3+8S3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAMABoK8h/J8K2YG9YB+kX0+Jcd+qZ99bDf497E8Gkw6xllxHoDMDXjTBeVcJHkI2GFeRq4gCvBwSuIXJnHirsY/89A5p"), + Convert.FromBase64String("AvkBXYOqN9yCDqWEBfXhAIQF9eEAgwFcPJTyIXUOUqoICDXSlX8u7Q1dfd2MOIgBY0V4XYoAALjkVlkdWWFyYnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlv7ZmpvjiPo7V5zshrXhkDq5hIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFi8xv9moEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAwAGg3jLNP0NvINuM0OFdoszCV3CVAM7xSacqT8Bh+bq1Baqgdh+RIWr9345C38P6R29zGhrt244m1WWyNmY8ivHqcIw="), + Convert.FromBase64String("+QNQgywWRIMPalqDGIRqlIxEDBXXZzxm5aboGZ/taec6X7mrgLkC5Buv3hkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnbs8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ27PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwzYIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiFloAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAADMl9UANrAl9lCh8WwudywGe6vFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmVEhAFUb9ygKvyRpXhJLbus2PWpuoAlZj1oa3TFRdKFKRQa82peg1egAsQeEw/NvZvZLG/Gr6064m+KAMudP5hmHdqL5fegY/U="), + Convert.FromBase64String("+QNQgyxaF4MPalqDGD1hlIxEDBXXZzxm5aboGZ/taec6X7mrgLkC5Buv3hkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnbs8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ27PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADuaygAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8logAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwHd+YmzUC67+P1b2AO8GSTO3+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmVuhAFUb9ygVL39xluN65xlSyBa+lpG19k0VIyXu/9VeaFMyJGdrZCgcN61uYmJwZThLm7cH8HiTnROLeY0OGcI/ako9jZT4W4="), + + Convert.FromBase64String("AvkBWYOqN9wCgw9CQIMPRFCDAVxzlPIhdQ5SqggINdKVfy7tDV193Yw4iAFjRXhdigAAuORWWR1ZYXJidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJjVcfEI3LpAiX1IuNGiW9RBtczPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWK/p8gxY20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAADAAaAkQTC5X2jZDEqbIJp/2GniTPJ5boyb493XPM2QtyeG66A4MaVdVwaoiq6uNZ4wjTvCdDtBRZISysj1Zne0yQbW6A=="), + Convert.FromBase64String("Aviwg6o33EWDAYaggwGKwILVvZS5RnskEX/XnVbzlq3DzNtpXZBa5IC4RAlep7MAAAAAAAAAAAAAAAAyZ+ctyHgKFRL6adp3Wexm8wNQ4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/7sOwAGgfv5W0wrWDY5yhV0BfQiVZBjyHUuNGGMLRmMKQLn8572gMWrsbb5QedSu4qB4tkhAEOl5yQp/wBrrtFKXcp+nBQA="), + Convert.FromBase64String("Avjxg6o33CaDAYaggwGKwIMClBKUMmfnLch4ChUS+mnad1nsZvMDUOOAuIRi5MVFAAAAAAAAAAAAAAAARkyOwQDy9C+05C4H4gPaIyT5/GcAAAAAAAAAAAAAAABRgvO5y1ING6Ql+bye7Dzo+WJeYwAAAAAAAAAAAAAAAKBkv7XH6BQmZH3CCg2FTaFThVncAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACo/ENMDMq3AAaCYmXnSzSGpswxuUHRoPLf9f2Ixr0G/E3uTcvwPSnrvzKBOrC9VVBX1yNFkBQKD7uJaPhaT5feQM/bO2QiNEs3W/w=="), + Convert.FromBase64String("AvjRg6o33A2DAYaggwGKwIMChJqUMmfnLch4ChUS+mnad1nsZvMDUOOAuGSDQPVJAAAAAAAAAAAAAAAAuUZ7JBF/151W85atw8zbaV2QWuQAAAAAAAAAAAAAAABDBpnFTlj+iqVezYICqddiOu4iPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMi2cwAGgDyskqgGuelCKv8AHeqN3EitY4gzHN/zjhCCKN3FJ7hWgWgxeVJlyJeKg/sD61gyW7KN7id5RZ4dsk9fY5C8nBok="), + Convert.FromBase64String("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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZzcCYT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWtxTtiFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXVazFdyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQp0GkYngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY0V4XYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWNFeF2KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFjRXhdigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2P1tgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY/W2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdj9bYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2P1tgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY/W0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2P1sgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY/WyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdj9bIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2P1rgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdj9bgAAAAAAAAAAAAA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") + }, + ParentBeaconBlockRoot = new("0x859272c18aad3de6dd556680419591b9d8acf242c16ac51fbcabefc16a17ba68"), + ReceiptsRoot = new("0xaa27e8eab6d7398581b73eaf6f29a79e08b3b6c75b7c90a3f195b6e8e5304c88"), + StateRoot = new("0x808e89b7a69cad0cf59f156af6e65ded0d6ca8571782f3d4b94da6b3564ed273"), + Withdrawals = Array.Empty(), + LogsBloom = new(Convert.FromHexString("54000001110180400008008614000042000408010000802440000400a0800260200022220400000000400028100008000020120400022000080004000aa4a00201060041200000800080a00a40004900008020040004a040240885a004000000090001010300008000000000000408020400002101010040000040100105000081aa10408204012400082085008000010442020001106910c0108008000800000228000000044040400043210000004080a108000420028410000040000000404000000208044842084005200020001001002002004148000200048d048960014210410808030120010200000001300050081000048000040020430800000000")), + PrevRandao = new("0xd0e7fd5c4bd98eabb96356f50d855d3c39377d256589cf276541b84a30e3a9ea") + }); + } +} diff --git a/src/Nethermind/Nethermind.Optimism/CL/CLConfig.cs b/src/Nethermind/Nethermind.Optimism/CL/CLConfig.cs new file mode 100644 index 00000000000..0ccafb965b7 --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/CL/CLConfig.cs @@ -0,0 +1,15 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; + +namespace Nethermind.Optimism.CL; + +public class CLConfig : ICLConfig +{ + public bool Enabled { get; set; } = false; + public string P2PHost { get; set; } = "127.0.0.1"; + public int P2PPort { get; set; } = 3030; + public string? L1BeaconApiEndpoint { get; set; } + public string? L1EthApiEndpoint { get; set; } +} diff --git a/src/Nethermind/Nethermind.Optimism/CL/ICLChainSpecEngineParameters.cs b/src/Nethermind/Nethermind.Optimism/CL/ICLChainSpecEngineParameters.cs new file mode 100644 index 00000000000..b96be6b126f --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/CL/ICLChainSpecEngineParameters.cs @@ -0,0 +1,17 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Specs.ChainSpecStyle; + +namespace Nethermind.Optimism.CL; + +public class CLChainSpecEngineParameters : IChainSpecEngineParameters +{ + public Address? BatcherInboxAddress { get; set; } + public Address? BatcherAddress { get; set; } + public Address? SequencerP2PAddress { get; set; } + public string[]? Nodes { get; set; } + public string? EngineName => "OptimismCL"; + public string? SealEngineType => null; +} diff --git a/src/Nethermind/Nethermind.Optimism/CL/ICLConfig.cs b/src/Nethermind/Nethermind.Optimism/CL/ICLConfig.cs new file mode 100644 index 00000000000..b1c67504bcc --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/CL/ICLConfig.cs @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Config; +using Nethermind.Core; + +namespace Nethermind.Optimism.CL; + +public interface ICLConfig : IConfig +{ + [ConfigItem(Description = "Use enshrined op cl.", DefaultValue = "false")] + bool Enabled { get; set; } + [ConfigItem(Description = "CL p2p communication host", DefaultValue = "127.0.0.1")] + public string P2PHost { get; set; } + [ConfigItem(Description = "CL p2p communication host", DefaultValue = "3030")] + public int P2PPort { get; set; } + [ConfigItem(Description = "URL to L1 beacon node", DefaultValue = "null")] + string? L1BeaconApiEndpoint { get; set; } + [ConfigItem(Description = "URL to L1 execution node.", DefaultValue = "null")] + string? L1EthApiEndpoint { get; set; } +} diff --git a/src/Nethermind/Nethermind.Optimism/CL/OptimismCL.cs b/src/Nethermind/Nethermind.Optimism/CL/OptimismCL.cs new file mode 100644 index 00000000000..11e12241d6f --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/CL/OptimismCL.cs @@ -0,0 +1,44 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Threading; +using Nethermind.Core; +using Nethermind.Core.Specs; +using Nethermind.Crypto; +using Nethermind.Logging; +using Nethermind.Optimism.Rpc; +using Nethermind.Serialization.Json; + +namespace Nethermind.Optimism.CL; + +public class OptimismCL : IDisposable +{ + private readonly ILogger _logger; + private readonly OptimismCLP2P _p2p; + private readonly IOptimismEngineRpcModule _engineRpcModule; + private readonly CLChainSpecEngineParameters _chainSpecEngineParameters; + + public OptimismCL(ISpecProvider specProvider, CLChainSpecEngineParameters engineParameters, ICLConfig config, IJsonSerializer jsonSerializer, + IEthereumEcdsa ecdsa, ITimestamper timestamper, ILogManager logManager, IOptimismEngineRpcModule engineRpcModule) + { + ArgumentNullException.ThrowIfNull(engineParameters.SequencerP2PAddress); + ArgumentNullException.ThrowIfNull(engineParameters.Nodes); + + _engineRpcModule = engineRpcModule; + _logger = logManager.GetClassLogger(); + _chainSpecEngineParameters = engineParameters; + + _p2p = new OptimismCLP2P(specProvider.ChainId, engineParameters.Nodes, config, _chainSpecEngineParameters.SequencerP2PAddress, timestamper, logManager, engineRpcModule); + } + + public void Start() + { + _p2p.Start(); + } + + public void Dispose() + { + _p2p.Dispose(); + } +} diff --git a/src/Nethermind/Nethermind.Optimism/CL/P2P/IP2PBlockValidator.cs b/src/Nethermind/Nethermind.Optimism/CL/P2P/IP2PBlockValidator.cs new file mode 100644 index 00000000000..86e5a42b4cb --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/CL/P2P/IP2PBlockValidator.cs @@ -0,0 +1,28 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Merge.Plugin.Data; + +namespace Nethermind.Optimism.CL; + +// Validates p2p "blocks" messages +public interface IP2PBlockValidator +{ + ValidityStatus Validate(ExecutionPayloadV3 payload, P2PTopic topic); + ValidityStatus ValidateSignature(ReadOnlySpan payloadData, Span signature); + ValidityStatus IsBlockNumberPerHeightLimitReached(ExecutionPayloadV3 payload); +} + +public enum ValidityStatus +{ + Valid, + Reject +} + +public enum P2PTopic +{ + BlocksV1, + BlocksV2, + BlocksV3 +} diff --git a/src/Nethermind/Nethermind.Optimism/CL/P2P/IPayloadDecoder.cs b/src/Nethermind/Nethermind.Optimism/CL/P2P/IPayloadDecoder.cs new file mode 100644 index 00000000000..b9095164e9c --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/CL/P2P/IPayloadDecoder.cs @@ -0,0 +1,13 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Merge.Plugin.Data; + +namespace Nethermind.Optimism.CL; + +public interface IPayloadDecoder +{ + ExecutionPayloadV3 DecodePayload(ReadOnlySpan data); + byte[] EncodePayload(ExecutionPayloadV3 payload); +} diff --git a/src/Nethermind/Nethermind.Optimism/CL/P2P/OptimismCLP2P.cs b/src/Nethermind/Nethermind.Optimism/CL/P2P/OptimismCLP2P.cs new file mode 100644 index 00000000000..f47e190dad6 --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/CL/P2P/OptimismCLP2P.cs @@ -0,0 +1,268 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Libp2p.Core; +using Nethermind.Libp2p.Core.Discovery; +using Nethermind.Libp2p.Protocols.Pubsub; +using Nethermind.Libp2p.Stack; +using Nethermind.Libp2p.Protocols; +using System; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading; +using System.Threading.Channels; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Multiformats.Address; +using Nethermind.Core; +using Nethermind.Core.Collections; +using Nethermind.Libp2p.Protocols.Pubsub.Dto; +using Nethermind.Logging; +using ILogger = Nethermind.Logging.ILogger; +using Nethermind.Merge.Plugin.Data; +using Nethermind.Optimism.CL; +using Nethermind.Optimism.Rpc; +using Nethermind.Core.Crypto; +using Nethermind.JsonRpc; +using Snappier; + +namespace Nethermind.Optimism; + +public class OptimismCLP2P : IDisposable +{ + private readonly ServiceProvider _serviceProvider; + private PubsubRouter? _router; + private readonly CancellationTokenSource _cancellationTokenSource = new(); + private readonly ILogger _logger; + private readonly IOptimismEngineRpcModule _engineRpcModule; + private readonly IP2PBlockValidator _blockValidator; + private readonly Multiaddress[] _staticPeerList; + private readonly ICLConfig _config; + private ILocalPeer? _localPeer; + private readonly Task _mainLoopTask; + + private readonly string _blocksV2TopicId; + + private ITopic? _blocksV2Topic; + + private const int MaxGossipSize = 10485760; + + public OptimismCLP2P(ulong chainId, string[] staticPeerList, ICLConfig config, Address sequencerP2PAddress, ITimestamper timestamper, ILogManager logManager, IOptimismEngineRpcModule engineRpcModule) + { + _logger = logManager.GetClassLogger(); + _config = config; + _staticPeerList = staticPeerList.Select(addr => Multiaddress.Decode(addr)).ToArray(); + _engineRpcModule = engineRpcModule; + _blockValidator = new P2PBlockValidator(chainId, sequencerP2PAddress, timestamper, _logger); + + _blocksV2TopicId = $"/optimism/{chainId}/2/blocks"; + + _serviceProvider = new ServiceCollection() + .AddSingleton() + .AddLibp2p(builder => builder) + .AddSingleton(new IdentifyProtocolSettings + { + ProtocolVersion = "", + AgentVersion = "optimism" + }) + .AddSingleton(new Settings()) + .BuildServiceProvider(); + + _mainLoopTask = new(async () => + { + await MainLoop(); + }); + } + + private ulong _headPayloadNumber; + private readonly Channel _blocksP2PMessageChannel = Channel.CreateBounded(10); // for safety add capacity + + private async void OnMessage(byte[] msg) + { + try + { + if (TryValidateAndDecodePayload(msg, out var payload)) + { + if (_logger.IsTrace) _logger.Trace($"Received payload prom p2p: {payload}"); + await _blocksP2PMessageChannel.Writer.WriteAsync(payload, _cancellationTokenSource.Token); + } + } + catch (Exception e) + { + if (e is not OperationCanceledException && _logger.IsError) _logger.Error("Unhandled exception in Optimism CL P2P:", e); + } + } + + private async Task MainLoop() + { + while (!_cancellationTokenSource.IsCancellationRequested) + { + try + { + ExecutionPayloadV3 payload = + await _blocksP2PMessageChannel.Reader.ReadAsync(_cancellationTokenSource.Token); + + if (_headPayloadNumber >= (ulong)payload.BlockNumber) + { + // Old payload. skip + return; + } + + if (_blockValidator.IsBlockNumberPerHeightLimitReached(payload) is not ValidityStatus.Valid) + { + return; + } + + if (await SendNewPayloadToEL(payload) && await SendForkChoiceUpdatedToEL(payload.BlockHash)) + { + _headPayloadNumber = (ulong)payload.BlockNumber; + } + } + catch (Exception e) + { + if (_logger.IsError && e is not OperationCanceledException and not ChannelClosedException) + _logger.Error("Unhandled exception in Optimism CL P2P:", e); + } + } + } + + private bool TryValidateAndDecodePayload(byte[] msg, [MaybeNullWhen(false)] out ExecutionPayloadV3 payload) + { + int length = Snappy.GetUncompressedLength(msg); + if (length is < 65 or > MaxGossipSize) + { + payload = null; + return false; + } + + using ArrayPoolList decompressed = new(length, length); + Snappy.Decompress(msg, decompressed.AsSpan()); + + Span signature = decompressed.AsSpan()[..65]; + ReadOnlySpan payloadData = decompressed.AsSpan()[65..]; + + if (_blockValidator.ValidateSignature(payloadData, signature) != ValidityStatus.Valid) + { + payload = null; + return false; + } + + try + { + payload = PayloadDecoder.Instance.DecodePayload(payloadData); + } + catch (ArgumentException e) + { + if (_logger.IsTrace) _logger.Trace($"Unable to decode payload from p2p. {e.Message}"); + + payload = null; + return false; + } + + ValidityStatus validationResult = _blockValidator.Validate(payload, P2PTopic.BlocksV3); + + if (validationResult == ValidityStatus.Reject) + { + payload = null; + return false; + } + return true; + } + + private async Task SendNewPayloadToEL(ExecutionPayloadV3 executionPayload) + { + _cancellationTokenSource.Token.ThrowIfCancellationRequested(); + ResultWrapper npResult = await _engineRpcModule.engine_newPayloadV3(executionPayload, Array.Empty(), + executionPayload.ParentBeaconBlockRoot); + + _cancellationTokenSource.Token.ThrowIfCancellationRequested(); + + if (npResult.Result.ResultType == ResultType.Failure) + { + if (_logger.IsError) + { + _logger.Error($"NewPayload request error: {npResult.Result.Error}"); + } + return false; + } + + if (npResult.Data.Status == PayloadStatus.Invalid) + { + if (_logger.IsTrace) _logger.Trace($"Got invalid payload from p2p"); + return false; + } + + return true; + } + + private async Task SendForkChoiceUpdatedToEL(Hash256 headBlockHash) + { + _cancellationTokenSource.Token.ThrowIfCancellationRequested(); + ResultWrapper fcuResult = await _engineRpcModule.engine_forkchoiceUpdatedV3( + new ForkchoiceStateV1(headBlockHash, headBlockHash, headBlockHash), + null); + + _cancellationTokenSource.Token.ThrowIfCancellationRequested(); + + if (fcuResult.Result.ResultType == ResultType.Failure) + { + if (_logger.IsError) + { + _logger.Error($"ForkChoiceUpdated request error: {fcuResult.Result.Error}"); + } + return false; + } + + if (fcuResult.Data.PayloadStatus.Status == PayloadStatus.Invalid) + { + if (_logger.IsTrace) _logger.Trace($"Got invalid payload from p2p"); + return false; + } + + return true; + } + + public void Start() + { + if (_logger.IsInfo) _logger.Info("Starting Optimism CL P2P"); + + IPeerFactory peerFactory = _serviceProvider.GetService()!; + _localPeer = peerFactory.Create(new Identity(), $"/ip4/{_config.P2PHost}/tcp/{_config.P2PPort}"); + + _router = _serviceProvider.GetService()!; + + _blocksV2Topic = _router.GetTopic(_blocksV2TopicId); + _blocksV2Topic.OnMessage += OnMessage; + + _ = _router.RunAsync(_localPeer, new Settings + { + DefaultSignaturePolicy = Settings.SignaturePolicy.StrictNoSign, + GetMessageId = CalculateMessageId + }, token: _cancellationTokenSource.Token); + + PeerStore peerStore = _serviceProvider.GetService()!; + peerStore.Discover(_staticPeerList); + + _mainLoopTask.Start(); + + if (_logger.IsInfo) _logger.Info($"Started P2P: {_localPeer.Address}"); + } + + private MessageId CalculateMessageId(Message message) + { + var sha256 = IncrementalHash.CreateHash(HashAlgorithmName.SHA256); + sha256.AppendData(BitConverter.GetBytes((ulong)message.Topic.Length)); + sha256.AppendData(Encoding.ASCII.GetBytes(message.Topic)); + sha256.AppendData(message.Data.Span); + return new MessageId(sha256.GetHashAndReset()); + } + + public void Dispose() + { + _blocksV2Topic?.Unsubscribe(); + _cancellationTokenSource.Cancel(); + _blocksP2PMessageChannel.Writer.Complete(); + } +} diff --git a/src/Nethermind/Nethermind.Optimism/CL/P2P/P2PBlockValidator.cs b/src/Nethermind/Nethermind.Optimism/CL/P2P/P2PBlockValidator.cs new file mode 100644 index 00000000000..574af324d4f --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/CL/P2P/P2PBlockValidator.cs @@ -0,0 +1,164 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Crypto; +using Nethermind.Int256; +using Nethermind.Logging; +using Nethermind.Merge.Plugin.Data; +using NonBlocking; + +namespace Nethermind.Optimism.CL; + +public class P2PBlockValidator : IP2PBlockValidator +{ + private readonly ILogger _logger; + private readonly ITimestamper _timestamper; + private readonly Dictionary _numberOfBlocksSeen = new(); + private readonly Address _sequencerP2PAddress; + private readonly byte[] _chainId; + + + public P2PBlockValidator(UInt256 chainId, Address sequencerP2PAddress, ITimestamper timestamper, ILogger logger) + { + _logger = logger; + _timestamper = timestamper; + _sequencerP2PAddress = sequencerP2PAddress; + _chainId = chainId.ToBigEndian(); + } + + public ValidityStatus Validate(ExecutionPayloadV3 payload, P2PTopic topic) + { + if (!IsTopicValid(topic) || !IsTimestampValid(payload) || !IsBlockHashValid(payload) || + !IsBlobGasUsedValid(payload, topic) || !IsExcessBlobGasValid(payload, topic) || + !IsParentBeaconBlockRootValid(payload, topic)) + { + return ValidityStatus.Reject; + } + + return ValidityStatus.Valid; + } + + // This method is not thread safe + public ValidityStatus IsBlockNumberPerHeightLimitReached(ExecutionPayloadV3 payload) + { + // [REJECT] if more than 5 different blocks have been seen with the same block height + _numberOfBlocksSeen.TryGetValue(payload.BlockNumber, out var currentCount); + _numberOfBlocksSeen[payload.BlockNumber] = currentCount + 1; + return currentCount > 5 ? ValidityStatus.Reject : ValidityStatus.Valid; + } + + public ValidityStatus ValidateSignature(ReadOnlySpan payloadData, Span signature) + { + return IsSignatureValid(payloadData, signature) ? ValidityStatus.Valid : ValidityStatus.Reject; + } + + private bool IsTopicValid(P2PTopic topic) + { + // Reject everything except V3 for now + // We assume later that we receive only V3 messages + if (topic != P2PTopic.BlocksV3) + { + if (_logger.IsError) _logger.Error($"Invalid topic: {topic}"); + return false; + } + + return true; + } + + private bool IsTimestampValid(ExecutionPayloadV3 payload) + { + // [REJECT] if the payload.timestamp is older than 60 seconds in the past (graceful boundary for worst-case propagation and clock skew) + // [REJECT] if the payload.timestamp is more than 5 seconds into the future + ulong timestamp = _timestamper.UnixTime.Seconds; + if (payload.Timestamp < timestamp - 60 || timestamp + 5 < payload.Timestamp) + { + if (_logger.IsError) _logger.Error($"Invalid Timestamp: now {timestamp}, payload: {payload.Timestamp}"); + return false; + } + + return true; + } + + private bool IsBlockHashValid(ExecutionPayloadV3 payload) + { + // [REJECT] if the block_hash in the payload is not valid + payload.TryGetBlock(out Block? block); + if (block is null) + { + if (_logger.IsError) _logger.Error($"Error creating block"); + return false; + } + + Hash256 calculatedHash = block.Header.CalculateHash(); + if (payload.BlockHash != calculatedHash) + { + if (_logger.IsError) _logger.Error($"Invalid block hash: expected {payload.BlockHash}, got: {calculatedHash}"); + return false; + } + + return true; + } + + private bool IsBlobGasUsedValid(ExecutionPayloadV3 payload, P2PTopic topic) + { + // [REJECT] if the block is on a topic >= V3 and has a blob gas-used value that is not zero + if (payload.BlobGasUsed != 0) + { + if (_logger.IsError) _logger.Error($"Invalid BlobGasUsed: {payload.BlobGasUsed}"); + return false; + } + + return true; + } + + private bool IsExcessBlobGasValid(ExecutionPayloadV3 payload, P2PTopic topic) + { + // [REJECT] if the block is on a topic >= V3 and has an excess blob gas value that is not zero + if (payload.ExcessBlobGas != 0) + { + if (_logger.IsError) _logger.Error($"Invalid ExcessBlobGas {payload.ExcessBlobGas}"); + return false; + } + + return true; + } + + private bool IsParentBeaconBlockRootValid(ExecutionPayloadV3 payload, P2PTopic topic) + { + // [REJECT] if the block is on a topic >= V3 and the parent beacon block root is nil + if (payload.ParentBeaconBlockRoot is null) + { + if (_logger.IsError) _logger.Error($"Invalid BeaconBlockRoot"); + return false; + } + + return true; + } + + private bool IsSignatureValid(ReadOnlySpan payloadData, Span signature) + { + if (signature[64] > 3) return false; + // domain(all zeros) + chain id + payload hash + Span sequencerSignedData = stackalloc byte[32 + 32 + 32]; + + _chainId.CopyTo(sequencerSignedData.Slice(32, 32)); + KeccakHash.ComputeHashBytes(payloadData).CopyTo(sequencerSignedData.Slice(64, 32)); + byte[] signedHash = KeccakHash.ComputeHashBytes(sequencerSignedData); + + Span publicKey = stackalloc byte[65]; + bool success = SpanSecP256k1.RecoverKeyFromCompact( + publicKey, + signedHash, + signature.Slice(0, 64), + signature[64], + false); + + Address? address = success ? PublicKey.ComputeAddress(publicKey.Slice(1, 64)) : null; + + return address == _sequencerP2PAddress; + } +} diff --git a/src/Nethermind/Nethermind.Optimism/CL/P2P/PayloadDecoder.cs b/src/Nethermind/Nethermind.Optimism/CL/P2P/PayloadDecoder.cs new file mode 100644 index 00000000000..2ac55d2463b --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/CL/P2P/PayloadDecoder.cs @@ -0,0 +1,91 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Buffers.Binary; +using Nethermind.Core; +using Nethermind.Core.Extensions; +using Nethermind.Merge.Plugin.Data; + +namespace Nethermind.Optimism.CL; + +public class PayloadDecoder : IPayloadDecoder +{ + public static readonly PayloadDecoder Instance = new(); + + private const int PrefixDataSize = 560; + + private PayloadDecoder() + { + } + + public ExecutionPayloadV3 DecodePayload(ReadOnlySpan data) + { + ExecutionPayloadV3 payload = new(); + + if (PrefixDataSize >= data.Length) + { + throw new ArgumentException("Invalid payload data size"); + } + + ReadOnlySpan movingData = data; + payload.ParentBeaconBlockRoot = new(movingData.TakeAndMove(32)); + payload.ParentHash = new(movingData.TakeAndMove(32)); + payload.FeeRecipient = new(movingData.TakeAndMove(20)); + payload.StateRoot = new(movingData.TakeAndMove(32)); + payload.ReceiptsRoot = new(movingData.TakeAndMove(32)); + payload.LogsBloom = new(movingData.TakeAndMove(256)); + payload.PrevRandao = new(movingData.TakeAndMove(32)); + payload.BlockNumber = (long)BinaryPrimitives.ReadUInt64LittleEndian(movingData.TakeAndMove(8)); + payload.GasLimit = (long)BinaryPrimitives.ReadUInt64LittleEndian(movingData.TakeAndMove(8)); + payload.GasUsed = (long)BinaryPrimitives.ReadUInt64LittleEndian(movingData.TakeAndMove(8)); + payload.Timestamp = BinaryPrimitives.ReadUInt64LittleEndian(movingData.TakeAndMove(8)); + UInt32 extraDataOffset = 32 + BinaryPrimitives.ReadUInt32LittleEndian(movingData.TakeAndMove(4)); + payload.BaseFeePerGas = new(movingData.TakeAndMove(32)); + payload.BlockHash = new(movingData.TakeAndMove(32)); + UInt32 transactionsOffset = 32 + BinaryPrimitives.ReadUInt32LittleEndian(movingData.TakeAndMove(4)); + UInt32 withdrawalsOffset = 32 + BinaryPrimitives.ReadUInt32LittleEndian(movingData.TakeAndMove(4)); + payload.BlobGasUsed = BinaryPrimitives.ReadUInt64LittleEndian(movingData.TakeAndMove(8)); + payload.ExcessBlobGas = BinaryPrimitives.ReadUInt64LittleEndian(movingData.TakeAndMove(8)); + + if (withdrawalsOffset > data.Length || transactionsOffset >= withdrawalsOffset || extraDataOffset > transactionsOffset || withdrawalsOffset != data.Length) + { + throw new ArgumentException($"Invalid offsets. Data length: {data.Length}, extraData: {extraDataOffset}, transactions: {transactionsOffset}, withdrawals: {withdrawalsOffset}"); + } + + payload.ExtraData = data[(int)extraDataOffset..(int)transactionsOffset].ToArray(); + payload.Transactions = DecodeTransactions(data[(int)transactionsOffset..(int)withdrawalsOffset]); + payload.Withdrawals = []; + + return payload; + } + + byte[][] DecodeTransactions(ReadOnlySpan data) + { + if (4 > data.Length) throw new ArgumentException("Invalid transaction data"); + UInt32 firstTxOffset = BinaryPrimitives.ReadUInt32LittleEndian(data[..4]); + UInt32 txCount = firstTxOffset / 4; + byte[][] txs = new byte[txCount][]; + int previous = (int)firstTxOffset; + for (int i = 0; i < txCount; i++) + { + int next; + if (i + 1 < txCount) + { + if (i * 4 + 8 > data.Length) throw new ArgumentException("Invalid transaction data"); + next = (int)BinaryPrimitives.ReadUInt32LittleEndian(data[(i * 4 + 4)..(i * 4 + 8)]); + } + else + { + next = data.Length; + } + if (previous >= next || next > data.Length) throw new ArgumentException("Invalid transaction offset"); + txs[i] = data[previous..next].ToArray(); + previous = next; + } + + return txs; + } + + public byte[] EncodePayload(ExecutionPayloadV3 payload) => throw new NotImplementedException(); +} diff --git a/src/Nethermind/Nethermind.Optimism/Nethermind.Optimism.csproj b/src/Nethermind/Nethermind.Optimism/Nethermind.Optimism.csproj index 939e7284adb..261f414a45a 100644 --- a/src/Nethermind/Nethermind.Optimism/Nethermind.Optimism.csproj +++ b/src/Nethermind/Nethermind.Optimism/Nethermind.Optimism.csproj @@ -5,6 +5,12 @@ true + + + + + + @@ -13,6 +19,7 @@ + diff --git a/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs b/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs index 91956235e67..b0a87e678b6 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using System.Threading; using System.Threading.Tasks; using Autofac; using Nethermind.Api; @@ -27,6 +28,8 @@ using Nethermind.Facade.Eth.RpcTransaction; using Nethermind.Merge.Plugin.Synchronization; using Nethermind.HealthChecks; +using Nethermind.Init.Steps; +using Nethermind.Optimism.CL; using Nethermind.Serialization.Json; using Nethermind.Specs.ChainSpecStyle; using Nethermind.Serialization.Rlp; @@ -55,6 +58,8 @@ public class OptimismPlugin : IConsensusPlugin, ISynchronizationPlugin, IInitial private IBeaconPivot? _beaconPivot; private BeaconSync? _beaconSync; + private OptimismCL? _cl; + public bool ShouldRunSteps(INethermindApi api) => api.ChainSpec.SealEngineType == SealEngineType; #region IConsensusPlugin @@ -279,6 +284,18 @@ public async Task InitRpcModules() _api.RpcModuleProvider.RegisterSingle(opEngine); + StepDependencyException.ThrowIfNull(_api.EthereumEcdsa); + + ICLConfig clConfig = _api.Config(); + if (clConfig.Enabled) + { + CLChainSpecEngineParameters chainSpecEngineParameters = _api.ChainSpec.EngineChainSpecParametersProvider + .GetChainSpecParameters(); + _cl = new OptimismCL(_api.SpecProvider, chainSpecEngineParameters, clConfig, _api.EthereumJsonSerializer, + _api.EthereumEcdsa, _api.Timestamper, _api!.LogManager, opEngine); + _cl.Start(); + } + if (_logger.IsInfo) _logger.Info("Optimism Engine Module has been enabled"); }