From 7e02dc8ecb204da031f7edd505d7d461bb58c7b2 Mon Sep 17 00:00:00 2001 From: Maria Varvaroi Date: Wed, 13 Aug 2025 10:55:58 +0100 Subject: [PATCH 1/2] Update test data for hoodi and sepolia --- .../deposit_data-1670231001.json | 1 - .../hoodi/deposit_data-1755071454.json | 35 +++++++++++++++++++ ...eystore-m_12381_3600_0_0_0-1755071454.json | 32 +++++++++++++++++ ...eystore-m_12381_3600_1_0_0-1755071454.json | 32 +++++++++++++++++ ...eystore-m_12381_3600_2_0_0-1755071454.json | 32 +++++++++++++++++ ...eystore-m_12381_3600_0_0_0-1670230999.json | 1 - ...eystore-m_12381_3600_1_0_0-1670231000.json | 1 - ...eystore-m_12381_3600_2_0_0-1670231000.json | 1 - .../sepolia/deposit_data-1755013393.json | 35 +++++++++++++++++++ ...eystore-m_12381_3600_0_0_0-1755013393.json | 32 +++++++++++++++++ ...eystore-m_12381_3600_1_0_0-1755013393.json | 32 +++++++++++++++++ ...eystore-m_12381_3600_2_0_0-1755013393.json | 32 +++++++++++++++++ .../deposit_data-1670927040.json | 1 - .../hoodi/deposit_data-1755078158.json | 1 + ...eystore-m_12381_3600_1_0_0-1755078158.json | 1 + ...eystore-m_12381_3600_2_0_0-1755078158.json | 1 + ...eystore-m_12381_3600_1_0_0-1670927039.json | 1 - ...eystore-m_12381_3600_2_0_0-1670927039.json | 1 - .../sepolia/deposit_data-1755078034.json | 1 + ...eystore-m_12381_3600_1_0_0-1755078034.json | 1 + ...eystore-m_12381_3600_2_0_0-1755078034.json | 1 + .../deposit_data-1668613231.json | 1 - .../hoodi/deposit_data-1755000050.json | 13 +++++++ ...eystore-m_12381_3600_0_0_0-1755000050.json | 32 +++++++++++++++++ ...eystore-m_12381_3600_0_0_0-1668613231.json | 1 - .../sepolia/deposit_data-1755012899.json | 13 +++++++ ...eystore-m_12381_3600_0_0_0-1755012899.json | 32 +++++++++++++++++ .../deposit_data-1669709160.json | 1 - .../hoodi/deposit_data-1755073089.json | 1 + ...eystore-m_12381_3600_0_0_0-1755073089.json | 1 + ...eystore-m_12381_3600_0_0_0-1669709160.json | 1 - .../sepolia/deposit_data-1755072599.json | 13 +++++++ ...eystore-m_12381_3600_0_0_0-1755072599.json | 32 +++++++++++++++++ 33 files changed, 405 insertions(+), 11 deletions(-) delete mode 100644 tests/e2e/expected_testdata/multiple_validators/deposit_data-1670231001.json create mode 100644 tests/e2e/expected_testdata/multiple_validators/hoodi/deposit_data-1755071454.json create mode 100644 tests/e2e/expected_testdata/multiple_validators/hoodi/keystore-m_12381_3600_0_0_0-1755071454.json create mode 100644 tests/e2e/expected_testdata/multiple_validators/hoodi/keystore-m_12381_3600_1_0_0-1755071454.json create mode 100644 tests/e2e/expected_testdata/multiple_validators/hoodi/keystore-m_12381_3600_2_0_0-1755071454.json delete mode 100644 tests/e2e/expected_testdata/multiple_validators/keystore-m_12381_3600_0_0_0-1670230999.json delete mode 100644 tests/e2e/expected_testdata/multiple_validators/keystore-m_12381_3600_1_0_0-1670231000.json delete mode 100644 tests/e2e/expected_testdata/multiple_validators/keystore-m_12381_3600_2_0_0-1670231000.json create mode 100644 tests/e2e/expected_testdata/multiple_validators/sepolia/deposit_data-1755013393.json create mode 100644 tests/e2e/expected_testdata/multiple_validators/sepolia/keystore-m_12381_3600_0_0_0-1755013393.json create mode 100644 tests/e2e/expected_testdata/multiple_validators/sepolia/keystore-m_12381_3600_1_0_0-1755013393.json create mode 100644 tests/e2e/expected_testdata/multiple_validators/sepolia/keystore-m_12381_3600_2_0_0-1755013393.json delete mode 100644 tests/e2e/expected_testdata/regenerate_from_seed_index/deposit_data-1670927040.json create mode 100644 tests/e2e/expected_testdata/regenerate_from_seed_index/hoodi/deposit_data-1755078158.json create mode 100644 tests/e2e/expected_testdata/regenerate_from_seed_index/hoodi/keystore-m_12381_3600_1_0_0-1755078158.json create mode 100644 tests/e2e/expected_testdata/regenerate_from_seed_index/hoodi/keystore-m_12381_3600_2_0_0-1755078158.json delete mode 100644 tests/e2e/expected_testdata/regenerate_from_seed_index/keystore-m_12381_3600_1_0_0-1670927039.json delete mode 100644 tests/e2e/expected_testdata/regenerate_from_seed_index/keystore-m_12381_3600_2_0_0-1670927039.json create mode 100644 tests/e2e/expected_testdata/regenerate_from_seed_index/sepolia/deposit_data-1755078034.json create mode 100644 tests/e2e/expected_testdata/regenerate_from_seed_index/sepolia/keystore-m_12381_3600_1_0_0-1755078034.json create mode 100644 tests/e2e/expected_testdata/regenerate_from_seed_index/sepolia/keystore-m_12381_3600_2_0_0-1755078034.json delete mode 100644 tests/e2e/expected_testdata/withdrawal_credentials_bls/deposit_data-1668613231.json create mode 100644 tests/e2e/expected_testdata/withdrawal_credentials_bls/hoodi/deposit_data-1755000050.json create mode 100644 tests/e2e/expected_testdata/withdrawal_credentials_bls/hoodi/keystore-m_12381_3600_0_0_0-1755000050.json delete mode 100644 tests/e2e/expected_testdata/withdrawal_credentials_bls/keystore-m_12381_3600_0_0_0-1668613231.json create mode 100644 tests/e2e/expected_testdata/withdrawal_credentials_bls/sepolia/deposit_data-1755012899.json create mode 100644 tests/e2e/expected_testdata/withdrawal_credentials_bls/sepolia/keystore-m_12381_3600_0_0_0-1755012899.json delete mode 100644 tests/e2e/expected_testdata/withdrawal_credentials_execution/deposit_data-1669709160.json create mode 100644 tests/e2e/expected_testdata/withdrawal_credentials_execution/hoodi/deposit_data-1755073089.json create mode 100644 tests/e2e/expected_testdata/withdrawal_credentials_execution/hoodi/keystore-m_12381_3600_0_0_0-1755073089.json delete mode 100644 tests/e2e/expected_testdata/withdrawal_credentials_execution/keystore-m_12381_3600_0_0_0-1669709160.json create mode 100644 tests/e2e/expected_testdata/withdrawal_credentials_execution/sepolia/deposit_data-1755072599.json create mode 100644 tests/e2e/expected_testdata/withdrawal_credentials_execution/sepolia/keystore-m_12381_3600_0_0_0-1755072599.json diff --git a/tests/e2e/expected_testdata/multiple_validators/deposit_data-1670231001.json b/tests/e2e/expected_testdata/multiple_validators/deposit_data-1670231001.json deleted file mode 100644 index 707e719..0000000 --- a/tests/e2e/expected_testdata/multiple_validators/deposit_data-1670231001.json +++ /dev/null @@ -1 +0,0 @@ -[{"pubkey": "8c239d313e3f4efb1ed937e7560dfaabeb6def6b88001357d5e9a3c33fdb022f7b028085c09451667f06b6b849c71ce8", "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", "amount": 32000000000, "signature": "80bb84926f6a1a89a7fea95de603b29e3c80df4606c78d2e34577e2a71dcb2a59458d3617a444eb846c0e5dc4d68e3e50c256d922db74ae4d3a03290bd8952c2b51d13b64c97b1ef4355b6f60bece0647e3bcb7ba60f8103d7ffd20f6347d052", "deposit_message_root": "2fbd8c8ae64bf60838663354422ff2004f37ddfc3a482fc29d39082b4a3903cb", "deposit_data_root": "4ef4e979a5507143fd40c16113122678e6b876d91b68e148785b691dd55bcb94", "fork_version": "00001020", "network_name": "goerli", "deposit_cli_version": "2.7.0"}, {"pubkey": "80145bdb454a8f55f7275903108f516ade8747efff0906616febb11c6e307667431ee286d1a1a919ea22739e0e7f6e9a", "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", "amount": 32000000000, "signature": "84b03b7210505a3acd8d061081832b4f8f0702de0e8621fd69a4d888cc69ff514473acc783a8db61ae2243eb478e16af1131e16514a011128d054f73b1126f2ede15609c49fcb9b397db56edb98021464a6e3fdb4e1b301159c0c038ba191342", "deposit_message_root": "f3b7eb90dfc663686ec76975c54ad12d7557c59e63fdb26eddeb8a68fb7c2711", "deposit_data_root": "9b900bb67fff83b3e13e8a78fe8442eb2ceff6d42a91d52fd5c684331d797adf", "fork_version": "00001020", "network_name": "goerli", "deposit_cli_version": "2.7.0"}, {"pubkey": "a759ea6450a376507bebc596b8e52981a70467fd7a33c6a66e45b51afb388078eb1dd7e9a751a91d65fba793ab2430fd", "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", "amount": 32000000000, "signature": "9513a225a05af2f4a14268151612cb48d9f49d7c9624023e4b6e1a437ab4bb5fa4d8374bdbf2edb0c6d0d282de133ec00e478dbf022a27cc16a90bc7c04b951ec722dca66d5cc6c050f42ba84ddf7874ffdc2b75db1f54972745fb7077f098e1", "deposit_message_root": "c40f308d03554f2f183475436014943545b2be2397376aec42b7fa5e1054481d", "deposit_data_root": "34c2aedd784eaa62a12fc7360e933f6b86372e55c9218e1c23b1c0ad5d57c823", "fork_version": "00001020", "network_name": "goerli", "deposit_cli_version": "2.7.0"}] \ No newline at end of file diff --git a/tests/e2e/expected_testdata/multiple_validators/hoodi/deposit_data-1755071454.json b/tests/e2e/expected_testdata/multiple_validators/hoodi/deposit_data-1755071454.json new file mode 100644 index 0000000..1bdbade --- /dev/null +++ b/tests/e2e/expected_testdata/multiple_validators/hoodi/deposit_data-1755071454.json @@ -0,0 +1,35 @@ +[ + { + "pubkey": "8c239d313e3f4efb1ed937e7560dfaabeb6def6b88001357d5e9a3c33fdb022f7b028085c09451667f06b6b849c71ce8", + "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", + "amount": 32000000000, + "signature": "b75c4efccece365c659c27e736357d39e4fbc0ebe3b604cd17e85bf1d2efaf5d401f0b81e2a357ba229d9b50ca60e7ad06f8ec747580490a91864f5429ec613b8991e200d59d036c39d1edad51d39e9173163e824d97b12016c5f5cbd424d0fe", + "deposit_message_root": "2fbd8c8ae64bf60838663354422ff2004f37ddfc3a482fc29d39082b4a3903cb", + "deposit_data_root": "2b1e08816db71d077e326c0d2b88f40970bdb0787c94eb914a2f0fb0575e6b2a", + "fork_version": "10000910", + "network_name": "hoodi", + "deposit_cli_version": "1.2.2" + }, + { + "pubkey": "80145bdb454a8f55f7275903108f516ade8747efff0906616febb11c6e307667431ee286d1a1a919ea22739e0e7f6e9a", + "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", + "amount": 32000000000, + "signature": "94d4855ecb68f9b8fd469b8b1a7571c5b59ebd4f16b134a1067f99da539c15d22ec6fc6f8b15dbd20597e4283e732d59173e46544d343cdefabe6a1513b52e00902b42966060d5040bafb6a12e9e59f4211699e752ec37f0f04ba48d8e88f120", + "deposit_message_root": "f3b7eb90dfc663686ec76975c54ad12d7557c59e63fdb26eddeb8a68fb7c2711", + "deposit_data_root": "86a86d4dddca9b467abc696be635bd91e1d073d0060e5f617f9885c402f9f9a2", + "fork_version": "10000910", + "network_name": "hoodi", + "deposit_cli_version": "1.2.2" + }, + { + "pubkey": "a759ea6450a376507bebc596b8e52981a70467fd7a33c6a66e45b51afb388078eb1dd7e9a751a91d65fba793ab2430fd", + "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", + "amount": 32000000000, + "signature": "98b281de0f39d57a9937b5c1774378434141acca185d6ecef1e08fa00f4e4b4dd5ef8805fbbdc8f40fcd81df08d8430b165cba608304693fae89839fe77f8faac058df5d910c2da5c6bad82c9b880c1d4b9bbd84298e2397da56ae327fa77440", + "deposit_message_root": "c40f308d03554f2f183475436014943545b2be2397376aec42b7fa5e1054481d", + "deposit_data_root": "01a695929f6fd21c186881c6dfccf3a9b3af3461513a7b55463209af17343bf8", + "fork_version": "10000910", + "network_name": "hoodi", + "deposit_cli_version": "1.2.2" + } +] diff --git a/tests/e2e/expected_testdata/multiple_validators/hoodi/keystore-m_12381_3600_0_0_0-1755071454.json b/tests/e2e/expected_testdata/multiple_validators/hoodi/keystore-m_12381_3600_0_0_0-1755071454.json new file mode 100644 index 0000000..e9bd326 --- /dev/null +++ b/tests/e2e/expected_testdata/multiple_validators/hoodi/keystore-m_12381_3600_0_0_0-1755071454.json @@ -0,0 +1,32 @@ +{ + "crypto": { + "kdf": { + "function": "scrypt", + "params": { + "dklen": 32, + "n": 262144, + "r": 8, + "p": 1, + "salt": "629052528505d14d76195776dab6d5edbcfd59659dd9ee504c118ed7bf05383c" + }, + "message": "" + }, + "checksum": { + "function": "sha256", + "params": {}, + "message": "94432abb4020bab546e81e9ce544d68bc7f81882655b4f423dfb9a133c8f78f6" + }, + "cipher": { + "function": "aes-128-ctr", + "params": { + "iv": "f0cfcdb7848811b12d9a60ce538affd3" + }, + "message": "772b36ed91a227a5efe4353bb9a23f7935e330ff44d4ec98a0b9777698a4ca16" + } + }, + "description": "", + "pubkey": "8c239d313e3f4efb1ed937e7560dfaabeb6def6b88001357d5e9a3c33fdb022f7b028085c09451667f06b6b849c71ce8", + "path": "m/12381/3600/0/0/0", + "uuid": "e2438e7c-79d9-4e05-bb83-ad6413b63817", + "version": 4 +} diff --git a/tests/e2e/expected_testdata/multiple_validators/hoodi/keystore-m_12381_3600_1_0_0-1755071454.json b/tests/e2e/expected_testdata/multiple_validators/hoodi/keystore-m_12381_3600_1_0_0-1755071454.json new file mode 100644 index 0000000..ea30242 --- /dev/null +++ b/tests/e2e/expected_testdata/multiple_validators/hoodi/keystore-m_12381_3600_1_0_0-1755071454.json @@ -0,0 +1,32 @@ +{ + "crypto": { + "kdf": { + "function": "scrypt", + "params": { + "dklen": 32, + "n": 262144, + "r": 8, + "p": 1, + "salt": "b8f64f38a6b8e8ef7c62881eef117466b485b06ab4d5ef69b5c6465b7b253ecb" + }, + "message": "" + }, + "checksum": { + "function": "sha256", + "params": {}, + "message": "bb08549d92319c9273359fcffe75d882cf2728e657f336ff19a9cc213c5c4b1c" + }, + "cipher": { + "function": "aes-128-ctr", + "params": { + "iv": "6743def91885ad566d5952ab08cb4bbb" + }, + "message": "837012f9bf0b5f38c9f48224585a00aa1b3bc9a3a0f926569453a3ead769262f" + } + }, + "description": "", + "pubkey": "80145bdb454a8f55f7275903108f516ade8747efff0906616febb11c6e307667431ee286d1a1a919ea22739e0e7f6e9a", + "path": "m/12381/3600/1/0/0", + "uuid": "a23be570-9d94-4ace-9c81-f530dcc3c0b6", + "version": 4 +} diff --git a/tests/e2e/expected_testdata/multiple_validators/hoodi/keystore-m_12381_3600_2_0_0-1755071454.json b/tests/e2e/expected_testdata/multiple_validators/hoodi/keystore-m_12381_3600_2_0_0-1755071454.json new file mode 100644 index 0000000..adaa172 --- /dev/null +++ b/tests/e2e/expected_testdata/multiple_validators/hoodi/keystore-m_12381_3600_2_0_0-1755071454.json @@ -0,0 +1,32 @@ +{ + "crypto": { + "kdf": { + "function": "scrypt", + "params": { + "dklen": 32, + "n": 262144, + "r": 8, + "p": 1, + "salt": "c73a2e6dee822ec34b1fa4a3442b5f53120199dde49c60e477c716065cad3551" + }, + "message": "" + }, + "checksum": { + "function": "sha256", + "params": {}, + "message": "509b16ac2e405f17f12660371cc3076c32cf0da47cff526f9ef5c6f9fc6b9b59" + }, + "cipher": { + "function": "aes-128-ctr", + "params": { + "iv": "fa122a18b1b5dbd8994e8cbc3cb16233" + }, + "message": "b594d2fec8a8589678e6df93b18c4123ceb8094a60d6664a310c961b4e3546e6" + } + }, + "description": "", + "pubkey": "a759ea6450a376507bebc596b8e52981a70467fd7a33c6a66e45b51afb388078eb1dd7e9a751a91d65fba793ab2430fd", + "path": "m/12381/3600/2/0/0", + "uuid": "6f3dcf41-43aa-4a29-9bbe-9bf6ac810271", + "version": 4 +} diff --git a/tests/e2e/expected_testdata/multiple_validators/keystore-m_12381_3600_0_0_0-1670230999.json b/tests/e2e/expected_testdata/multiple_validators/keystore-m_12381_3600_0_0_0-1670230999.json deleted file mode 100644 index b86bf51..0000000 --- a/tests/e2e/expected_testdata/multiple_validators/keystore-m_12381_3600_0_0_0-1670230999.json +++ /dev/null @@ -1 +0,0 @@ -{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "a5d43938a99f65863ca80cdc6785b6fa8e0e739d1cc8f1b563661f956b3206ac"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "b5f79cf8ffb466bce3f01fb14d4bc3c4ccae84b646a9682ca5a44d2caeec058e"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "3f33e1223b9ef1fa531bc65e4db7b7b5"}, "message": "4c0cc030a577f438bff15fc09b99ef44d98193d751a90afa0c0f80d09b7d2a86"}}, "description": "", "pubkey": "8c239d313e3f4efb1ed937e7560dfaabeb6def6b88001357d5e9a3c33fdb022f7b028085c09451667f06b6b849c71ce8", "path": "m/12381/3600/0/0/0", "uuid": "58bca3e6-b0c9-4025-870d-660903be9380", "version": 4} \ No newline at end of file diff --git a/tests/e2e/expected_testdata/multiple_validators/keystore-m_12381_3600_1_0_0-1670231000.json b/tests/e2e/expected_testdata/multiple_validators/keystore-m_12381_3600_1_0_0-1670231000.json deleted file mode 100644 index 10ca0e2..0000000 --- a/tests/e2e/expected_testdata/multiple_validators/keystore-m_12381_3600_1_0_0-1670231000.json +++ /dev/null @@ -1 +0,0 @@ -{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "a5d43938a99f65863ca80cdc6785b6fa8e0e739d1cc8f1b563661f956b3206ac"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "3f3006f32968efcf13f66dd123ada804a6b88046aa11ab2b11db18ed320f9d31"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "3f33e1223b9ef1fa531bc65e4db7b7b5"}, "message": "6ec5b2736cb29435e1dc89322cafa4330a9c63156859152ddc06dbf22ab1b425"}}, "description": "", "pubkey": "80145bdb454a8f55f7275903108f516ade8747efff0906616febb11c6e307667431ee286d1a1a919ea22739e0e7f6e9a", "path": "m/12381/3600/1/0/0", "uuid": "272670a3-0e10-4519-8ce2-c61e8c609b2c", "version": 4} \ No newline at end of file diff --git a/tests/e2e/expected_testdata/multiple_validators/keystore-m_12381_3600_2_0_0-1670231000.json b/tests/e2e/expected_testdata/multiple_validators/keystore-m_12381_3600_2_0_0-1670231000.json deleted file mode 100644 index 44c968f..0000000 --- a/tests/e2e/expected_testdata/multiple_validators/keystore-m_12381_3600_2_0_0-1670231000.json +++ /dev/null @@ -1 +0,0 @@ -{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "a5d43938a99f65863ca80cdc6785b6fa8e0e739d1cc8f1b563661f956b3206ac"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "1e94556d8f1355c972b15ec665538e7a0d3156799797084b503490acf69fc154"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "3f33e1223b9ef1fa531bc65e4db7b7b5"}, "message": "5ce7058902f31f1eb0497ce035fff8f1076e729afdc4fb23353bfde96c4d763d"}}, "description": "", "pubkey": "a759ea6450a376507bebc596b8e52981a70467fd7a33c6a66e45b51afb388078eb1dd7e9a751a91d65fba793ab2430fd", "path": "m/12381/3600/2/0/0", "uuid": "f5d400c6-3457-4b3f-81dc-c12d4cf5aedb", "version": 4} \ No newline at end of file diff --git a/tests/e2e/expected_testdata/multiple_validators/sepolia/deposit_data-1755013393.json b/tests/e2e/expected_testdata/multiple_validators/sepolia/deposit_data-1755013393.json new file mode 100644 index 0000000..edb0f16 --- /dev/null +++ b/tests/e2e/expected_testdata/multiple_validators/sepolia/deposit_data-1755013393.json @@ -0,0 +1,35 @@ +[ + { + "pubkey": "8c239d313e3f4efb1ed937e7560dfaabeb6def6b88001357d5e9a3c33fdb022f7b028085c09451667f06b6b849c71ce8", + "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", + "amount": 32000000000, + "signature": "96648d873ec18ad1f0529315d8d311495be68b9939513fa6f0b35183e5b95fd1b2f346ad17cdebf4f5e75cdb9d478de10c15c3b6e7cb9aa260af09219ca48bbe0c694ef4b74844fb42defa437f3dabe8e23d10dcbcc4d342b72ad76ad9cfa570", + "deposit_message_root": "2fbd8c8ae64bf60838663354422ff2004f37ddfc3a482fc29d39082b4a3903cb", + "deposit_data_root": "bddf517bb2b9d60609387b106fb450b246e7cf76a3e3fab8dc532264a2be1166", + "fork_version": "90000069", + "network_name": "sepolia", + "deposit_cli_version": "1.2.2" + }, + { + "pubkey": "80145bdb454a8f55f7275903108f516ade8747efff0906616febb11c6e307667431ee286d1a1a919ea22739e0e7f6e9a", + "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", + "amount": 32000000000, + "signature": "a94ea5f2ab6dc4f1cae370dee6e07cbd9d8695ec1851a17674692d4070dc9b87c228cf9fbdbd2482c38787932afc02fe07d71dbe7cf446fdf404f42d661b5997a308bd3dcb4b23848929843701755c7bc255bcd7282a7b681bf30d709da0bf09", + "deposit_message_root": "f3b7eb90dfc663686ec76975c54ad12d7557c59e63fdb26eddeb8a68fb7c2711", + "deposit_data_root": "0acbb7352698e144b5b00ed1be05cf3171d56a5bc60e0c61e427b35cf8539ecf", + "fork_version": "90000069", + "network_name": "sepolia", + "deposit_cli_version": "1.2.2" + }, + { + "pubkey": "a759ea6450a376507bebc596b8e52981a70467fd7a33c6a66e45b51afb388078eb1dd7e9a751a91d65fba793ab2430fd", + "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", + "amount": 32000000000, + "signature": "a7f9ff7d107174011695a8a90de3b875aa5b8c3e5d581b38c424307f9c98bc999ca4dcc125d7e9756c459189f1fce3e505959f903db0ae3cc52f62a6555d5eed455030c2020b6f81f4be99f6572ce5892aa07c37d19cc278f3462af9b0f6e6ad", + "deposit_message_root": "c40f308d03554f2f183475436014943545b2be2397376aec42b7fa5e1054481d", + "deposit_data_root": "2c7d4ce48efc8f783f2bbce87c1f9b18b312903b7c315a1e714be9dd3fd3e19d", + "fork_version": "90000069", + "network_name": "sepolia", + "deposit_cli_version": "1.2.2" + } +] diff --git a/tests/e2e/expected_testdata/multiple_validators/sepolia/keystore-m_12381_3600_0_0_0-1755013393.json b/tests/e2e/expected_testdata/multiple_validators/sepolia/keystore-m_12381_3600_0_0_0-1755013393.json new file mode 100644 index 0000000..021fbff --- /dev/null +++ b/tests/e2e/expected_testdata/multiple_validators/sepolia/keystore-m_12381_3600_0_0_0-1755013393.json @@ -0,0 +1,32 @@ +{ + "crypto": { + "kdf": { + "function": "scrypt", + "params": { + "dklen": 32, + "n": 262144, + "r": 8, + "p": 1, + "salt": "d38ba9d9533e36e0125a0ddc447026e4e55f0c2e5612467488fb043417d39482" + }, + "message": "" + }, + "checksum": { + "function": "sha256", + "params": {}, + "message": "b992e714202473013df9b7450abf9cd310b9fe38a033557fe707fff4bcb03f07" + }, + "cipher": { + "function": "aes-128-ctr", + "params": { + "iv": "4a65431112dbd48113921e0b1cd5ac6f" + }, + "message": "750582abdbef6a3b026da55f948b462350cbbe714c684bf649fe5b3e00861a5e" + } + }, + "description": "", + "pubkey": "8c239d313e3f4efb1ed937e7560dfaabeb6def6b88001357d5e9a3c33fdb022f7b028085c09451667f06b6b849c71ce8", + "path": "m/12381/3600/0/0/0", + "uuid": "a4150ffa-fdb5-4726-a794-67d7a7f88ec9", + "version": 4 +} diff --git a/tests/e2e/expected_testdata/multiple_validators/sepolia/keystore-m_12381_3600_1_0_0-1755013393.json b/tests/e2e/expected_testdata/multiple_validators/sepolia/keystore-m_12381_3600_1_0_0-1755013393.json new file mode 100644 index 0000000..62a5c6d --- /dev/null +++ b/tests/e2e/expected_testdata/multiple_validators/sepolia/keystore-m_12381_3600_1_0_0-1755013393.json @@ -0,0 +1,32 @@ +{ + "crypto": { + "kdf": { + "function": "scrypt", + "params": { + "dklen": 32, + "n": 262144, + "r": 8, + "p": 1, + "salt": "e9db4602da0420b21aeedcd59e2df87c2d52935e5e406bc16bf5748be2dcf52b" + }, + "message": "" + }, + "checksum": { + "function": "sha256", + "params": {}, + "message": "7209d852221cc8aee070d36b8afacc112cde9f50cba0816c1ec63301c6273267" + }, + "cipher": { + "function": "aes-128-ctr", + "params": { + "iv": "7824bac6d8bff8a40c5c0a80ab4263a9" + }, + "message": "7c5c19a32329e5c0ec1f7698f5ab437c64c4e53a3ac14f957bf0ea1e1c467dc4" + } + }, + "description": "", + "pubkey": "80145bdb454a8f55f7275903108f516ade8747efff0906616febb11c6e307667431ee286d1a1a919ea22739e0e7f6e9a", + "path": "m/12381/3600/1/0/0", + "uuid": "eda9d9db-1fb5-410a-830a-35420ab252c5", + "version": 4 +} diff --git a/tests/e2e/expected_testdata/multiple_validators/sepolia/keystore-m_12381_3600_2_0_0-1755013393.json b/tests/e2e/expected_testdata/multiple_validators/sepolia/keystore-m_12381_3600_2_0_0-1755013393.json new file mode 100644 index 0000000..7846e2e --- /dev/null +++ b/tests/e2e/expected_testdata/multiple_validators/sepolia/keystore-m_12381_3600_2_0_0-1755013393.json @@ -0,0 +1,32 @@ +{ + "crypto": { + "kdf": { + "function": "scrypt", + "params": { + "dklen": 32, + "n": 262144, + "r": 8, + "p": 1, + "salt": "0a06f0dc02055a3d2e7ce9e601a82e5e83dd5e32fc31c24da779455bc1e6ede9" + }, + "message": "" + }, + "checksum": { + "function": "sha256", + "params": {}, + "message": "5d2307d912a01533a45cbdb03d4ead165606a43fae7590424eeca118fcd04eb2" + }, + "cipher": { + "function": "aes-128-ctr", + "params": { + "iv": "b44bf23c79e7bf91848aa20aa7ad9abf" + }, + "message": "3ac69d079cd5457e916b8ca3ec669ddd3226e7dd3b2a6f75a38ad99cef32704f" + } + }, + "description": "", + "pubkey": "a759ea6450a376507bebc596b8e52981a70467fd7a33c6a66e45b51afb388078eb1dd7e9a751a91d65fba793ab2430fd", + "path": "m/12381/3600/2/0/0", + "uuid": "1d6236a5-e0cf-456a-9df3-eebe64c6a757", + "version": 4 +} diff --git a/tests/e2e/expected_testdata/regenerate_from_seed_index/deposit_data-1670927040.json b/tests/e2e/expected_testdata/regenerate_from_seed_index/deposit_data-1670927040.json deleted file mode 100644 index 056ea6d..0000000 --- a/tests/e2e/expected_testdata/regenerate_from_seed_index/deposit_data-1670927040.json +++ /dev/null @@ -1 +0,0 @@ -[{"pubkey": "80145bdb454a8f55f7275903108f516ade8747efff0906616febb11c6e307667431ee286d1a1a919ea22739e0e7f6e9a", "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", "amount": 32000000000, "signature": "84b03b7210505a3acd8d061081832b4f8f0702de0e8621fd69a4d888cc69ff514473acc783a8db61ae2243eb478e16af1131e16514a011128d054f73b1126f2ede15609c49fcb9b397db56edb98021464a6e3fdb4e1b301159c0c038ba191342", "deposit_message_root": "f3b7eb90dfc663686ec76975c54ad12d7557c59e63fdb26eddeb8a68fb7c2711", "deposit_data_root": "9b900bb67fff83b3e13e8a78fe8442eb2ceff6d42a91d52fd5c684331d797adf", "fork_version": "00001020", "network_name": "goerli", "deposit_cli_version": "2.7.0"}, {"pubkey": "a759ea6450a376507bebc596b8e52981a70467fd7a33c6a66e45b51afb388078eb1dd7e9a751a91d65fba793ab2430fd", "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", "amount": 32000000000, "signature": "9513a225a05af2f4a14268151612cb48d9f49d7c9624023e4b6e1a437ab4bb5fa4d8374bdbf2edb0c6d0d282de133ec00e478dbf022a27cc16a90bc7c04b951ec722dca66d5cc6c050f42ba84ddf7874ffdc2b75db1f54972745fb7077f098e1", "deposit_message_root": "c40f308d03554f2f183475436014943545b2be2397376aec42b7fa5e1054481d", "deposit_data_root": "34c2aedd784eaa62a12fc7360e933f6b86372e55c9218e1c23b1c0ad5d57c823", "fork_version": "00001020", "network_name": "goerli", "deposit_cli_version": "2.7.0"}] \ No newline at end of file diff --git a/tests/e2e/expected_testdata/regenerate_from_seed_index/hoodi/deposit_data-1755078158.json b/tests/e2e/expected_testdata/regenerate_from_seed_index/hoodi/deposit_data-1755078158.json new file mode 100644 index 0000000..0031aed --- /dev/null +++ b/tests/e2e/expected_testdata/regenerate_from_seed_index/hoodi/deposit_data-1755078158.json @@ -0,0 +1 @@ +[{"pubkey": "80145bdb454a8f55f7275903108f516ade8747efff0906616febb11c6e307667431ee286d1a1a919ea22739e0e7f6e9a", "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", "amount": 32000000000, "signature": "94d4855ecb68f9b8fd469b8b1a7571c5b59ebd4f16b134a1067f99da539c15d22ec6fc6f8b15dbd20597e4283e732d59173e46544d343cdefabe6a1513b52e00902b42966060d5040bafb6a12e9e59f4211699e752ec37f0f04ba48d8e88f120", "deposit_message_root": "f3b7eb90dfc663686ec76975c54ad12d7557c59e63fdb26eddeb8a68fb7c2711", "deposit_data_root": "86a86d4dddca9b467abc696be635bd91e1d073d0060e5f617f9885c402f9f9a2", "fork_version": "10000910", "network_name": "hoodi", "deposit_cli_version": "1.2.2"}, {"pubkey": "a759ea6450a376507bebc596b8e52981a70467fd7a33c6a66e45b51afb388078eb1dd7e9a751a91d65fba793ab2430fd", "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", "amount": 32000000000, "signature": "98b281de0f39d57a9937b5c1774378434141acca185d6ecef1e08fa00f4e4b4dd5ef8805fbbdc8f40fcd81df08d8430b165cba608304693fae89839fe77f8faac058df5d910c2da5c6bad82c9b880c1d4b9bbd84298e2397da56ae327fa77440", "deposit_message_root": "c40f308d03554f2f183475436014943545b2be2397376aec42b7fa5e1054481d", "deposit_data_root": "01a695929f6fd21c186881c6dfccf3a9b3af3461513a7b55463209af17343bf8", "fork_version": "10000910", "network_name": "hoodi", "deposit_cli_version": "1.2.2"}] \ No newline at end of file diff --git a/tests/e2e/expected_testdata/regenerate_from_seed_index/hoodi/keystore-m_12381_3600_1_0_0-1755078158.json b/tests/e2e/expected_testdata/regenerate_from_seed_index/hoodi/keystore-m_12381_3600_1_0_0-1755078158.json new file mode 100644 index 0000000..dc59dd8 --- /dev/null +++ b/tests/e2e/expected_testdata/regenerate_from_seed_index/hoodi/keystore-m_12381_3600_1_0_0-1755078158.json @@ -0,0 +1 @@ +{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "c84d983c64b5b832ee6e5e53678f15de1d5e34f1a9cfabd144f2c0187012e81e"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "4c8f9a25592b8186eae47357848aabd027727034bc9eb12a79c364bcf119b04f"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "2d1c2ef2583044687a9fe0babe9b458f"}, "message": "f3e3874b896143ab6c68a3d8941d68da00ddfc96a86a9f4c5eef101d60771366"}}, "description": "", "pubkey": "80145bdb454a8f55f7275903108f516ade8747efff0906616febb11c6e307667431ee286d1a1a919ea22739e0e7f6e9a", "path": "m/12381/3600/1/0/0", "uuid": "7dd55339-6407-4e48-b22a-d5ecc1d8dbbe", "version": 4} \ No newline at end of file diff --git a/tests/e2e/expected_testdata/regenerate_from_seed_index/hoodi/keystore-m_12381_3600_2_0_0-1755078158.json b/tests/e2e/expected_testdata/regenerate_from_seed_index/hoodi/keystore-m_12381_3600_2_0_0-1755078158.json new file mode 100644 index 0000000..7c6cc84 --- /dev/null +++ b/tests/e2e/expected_testdata/regenerate_from_seed_index/hoodi/keystore-m_12381_3600_2_0_0-1755078158.json @@ -0,0 +1 @@ +{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "7049884d89a3d94aaf0dad734efa65d62917921852cc94fda202f2b2bd4c8de8"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "50502006ff2d0a9831a5f8df2c4f260e09a69a65d7bc8da4956a14e2bf2331cd"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "2f15007f2d1426e3035cd9ac66757cb1"}, "message": "6d68c342f75877bbf1ba5db8f5962bdd255e32b0d11aad1cbe066f0be6905295"}}, "description": "", "pubkey": "a759ea6450a376507bebc596b8e52981a70467fd7a33c6a66e45b51afb388078eb1dd7e9a751a91d65fba793ab2430fd", "path": "m/12381/3600/2/0/0", "uuid": "dfaa2386-d649-4570-b44e-cc859d05e058", "version": 4} \ No newline at end of file diff --git a/tests/e2e/expected_testdata/regenerate_from_seed_index/keystore-m_12381_3600_1_0_0-1670927039.json b/tests/e2e/expected_testdata/regenerate_from_seed_index/keystore-m_12381_3600_1_0_0-1670927039.json deleted file mode 100644 index 5bfca9a..0000000 --- a/tests/e2e/expected_testdata/regenerate_from_seed_index/keystore-m_12381_3600_1_0_0-1670927039.json +++ /dev/null @@ -1 +0,0 @@ -{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "894d886491c66c5c40b5e4096f7e1d8e1e03e65a1244d2f693ec3b94469cbaeb"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "bbf64e3719318384e21613675ddad0019a4ad14b60ba057d86a3f088ac06e954"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "0be158a16567906280c384746f16fdfa"}, "message": "40c9f642e013adbfb594e6edc21eda5224c2e2070a02395498ed54dbf580c624"}}, "description": "", "pubkey": "80145bdb454a8f55f7275903108f516ade8747efff0906616febb11c6e307667431ee286d1a1a919ea22739e0e7f6e9a", "path": "m/12381/3600/1/0/0", "uuid": "7b4bd324-c57b-436f-af8d-d895db713166", "version": 4} \ No newline at end of file diff --git a/tests/e2e/expected_testdata/regenerate_from_seed_index/keystore-m_12381_3600_2_0_0-1670927039.json b/tests/e2e/expected_testdata/regenerate_from_seed_index/keystore-m_12381_3600_2_0_0-1670927039.json deleted file mode 100644 index d556ea5..0000000 --- a/tests/e2e/expected_testdata/regenerate_from_seed_index/keystore-m_12381_3600_2_0_0-1670927039.json +++ /dev/null @@ -1 +0,0 @@ -{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "894d886491c66c5c40b5e4096f7e1d8e1e03e65a1244d2f693ec3b94469cbaeb"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "d2a0b0806a86d0ad4190fedd7e7a9f94f225eac05c19f9ad1671192ba8383b4b"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "0be158a16567906280c384746f16fdfa"}, "message": "72eb41b88e522694e401133fdb4e86902930f3889f9fd75a71d072c0b37c043c"}}, "description": "", "pubkey": "a759ea6450a376507bebc596b8e52981a70467fd7a33c6a66e45b51afb388078eb1dd7e9a751a91d65fba793ab2430fd", "path": "m/12381/3600/2/0/0", "uuid": "dadac6dc-feb0-4750-b2be-76a647bed8d8", "version": 4} \ No newline at end of file diff --git a/tests/e2e/expected_testdata/regenerate_from_seed_index/sepolia/deposit_data-1755078034.json b/tests/e2e/expected_testdata/regenerate_from_seed_index/sepolia/deposit_data-1755078034.json new file mode 100644 index 0000000..e89e0e0 --- /dev/null +++ b/tests/e2e/expected_testdata/regenerate_from_seed_index/sepolia/deposit_data-1755078034.json @@ -0,0 +1 @@ +[{"pubkey": "80145bdb454a8f55f7275903108f516ade8747efff0906616febb11c6e307667431ee286d1a1a919ea22739e0e7f6e9a", "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", "amount": 32000000000, "signature": "a94ea5f2ab6dc4f1cae370dee6e07cbd9d8695ec1851a17674692d4070dc9b87c228cf9fbdbd2482c38787932afc02fe07d71dbe7cf446fdf404f42d661b5997a308bd3dcb4b23848929843701755c7bc255bcd7282a7b681bf30d709da0bf09", "deposit_message_root": "f3b7eb90dfc663686ec76975c54ad12d7557c59e63fdb26eddeb8a68fb7c2711", "deposit_data_root": "0acbb7352698e144b5b00ed1be05cf3171d56a5bc60e0c61e427b35cf8539ecf", "fork_version": "90000069", "network_name": "sepolia", "deposit_cli_version": "1.2.2"}, {"pubkey": "a759ea6450a376507bebc596b8e52981a70467fd7a33c6a66e45b51afb388078eb1dd7e9a751a91d65fba793ab2430fd", "withdrawal_credentials": "0100000000000000000000000000000000000000000000000000000000000001", "amount": 32000000000, "signature": "a7f9ff7d107174011695a8a90de3b875aa5b8c3e5d581b38c424307f9c98bc999ca4dcc125d7e9756c459189f1fce3e505959f903db0ae3cc52f62a6555d5eed455030c2020b6f81f4be99f6572ce5892aa07c37d19cc278f3462af9b0f6e6ad", "deposit_message_root": "c40f308d03554f2f183475436014943545b2be2397376aec42b7fa5e1054481d", "deposit_data_root": "2c7d4ce48efc8f783f2bbce87c1f9b18b312903b7c315a1e714be9dd3fd3e19d", "fork_version": "90000069", "network_name": "sepolia", "deposit_cli_version": "1.2.2"}] \ No newline at end of file diff --git a/tests/e2e/expected_testdata/regenerate_from_seed_index/sepolia/keystore-m_12381_3600_1_0_0-1755078034.json b/tests/e2e/expected_testdata/regenerate_from_seed_index/sepolia/keystore-m_12381_3600_1_0_0-1755078034.json new file mode 100644 index 0000000..19527c3 --- /dev/null +++ b/tests/e2e/expected_testdata/regenerate_from_seed_index/sepolia/keystore-m_12381_3600_1_0_0-1755078034.json @@ -0,0 +1 @@ +{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "5bf2e0c8a690673fe762cda527a338df81125fc02bb461b7c60a37d106cbd469"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "6e1fa7b6bb2706711bc54fc86be93b771e68f55883f55ba3d54bc7528c9aaf6a"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "b58026d119af75bbf1dd67bb250f8f56"}, "message": "d438d040da159c0d0fe20fed5486404b7da5b4e8a5968bc8234bde00b00d3326"}}, "description": "", "pubkey": "80145bdb454a8f55f7275903108f516ade8747efff0906616febb11c6e307667431ee286d1a1a919ea22739e0e7f6e9a", "path": "m/12381/3600/1/0/0", "uuid": "a6fddbe9-6688-44b7-bb8a-1bbbeba91ae0", "version": 4} \ No newline at end of file diff --git a/tests/e2e/expected_testdata/regenerate_from_seed_index/sepolia/keystore-m_12381_3600_2_0_0-1755078034.json b/tests/e2e/expected_testdata/regenerate_from_seed_index/sepolia/keystore-m_12381_3600_2_0_0-1755078034.json new file mode 100644 index 0000000..6ffb0ed --- /dev/null +++ b/tests/e2e/expected_testdata/regenerate_from_seed_index/sepolia/keystore-m_12381_3600_2_0_0-1755078034.json @@ -0,0 +1 @@ +{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "2e66316e4768e700ffbca627412d501ca86762225a5d01299d33f967e49435f2"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "70c7ef5c1ff4f7186f27815464a234006bae0c7895e952ca6bf66c57c44cc10f"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "8794e4f28a6f5beb61214e0e968ce543"}, "message": "fedfe663feb483ebe647ca4ecb46155c8923d0dc488796ef50ae215f516e7738"}}, "description": "", "pubkey": "a759ea6450a376507bebc596b8e52981a70467fd7a33c6a66e45b51afb388078eb1dd7e9a751a91d65fba793ab2430fd", "path": "m/12381/3600/2/0/0", "uuid": "777220f3-174b-452c-9f0d-b60c042bf5be", "version": 4} \ No newline at end of file diff --git a/tests/e2e/expected_testdata/withdrawal_credentials_bls/deposit_data-1668613231.json b/tests/e2e/expected_testdata/withdrawal_credentials_bls/deposit_data-1668613231.json deleted file mode 100644 index 159b269..0000000 --- a/tests/e2e/expected_testdata/withdrawal_credentials_bls/deposit_data-1668613231.json +++ /dev/null @@ -1 +0,0 @@ -[{"pubkey": "8844cebb34d10e0e57f3c29ada375dafe14762ab85b2e408c3d6d55ce6d03317660bca9f2c2d17d8fbe14a2529ada1ea", "withdrawal_credentials": "0045b91b2f60b88e7392d49ae1364b55e713d06f30e563f9f99e10994b26221d", "amount": 32000000000, "signature": "97c0ad0d4f721dc53f33a399dbf0ff2cab6f679f4efdcdaa9f8bdd22cd11b5e37c12fdd2cd29369b1b907a51573a9ef60f93d768fd2d47a99b5d55fe6516a87b9090e16c42f5a8fcbf91d24883359bffb074a02d6d4d7f6c3cd04c8e09f8dc02", "deposit_message_root": "bfd9d2c616eb570ad3fd4d4caf169b88f80490d8923537474bf1f6c5cec5e56d", "deposit_data_root": "2abc7681f73a01acbc1974ab47119766bf57d94f86a72828f8875295f5bd92de", "fork_version": "00001020", "network_name": "goerli", "deposit_cli_version": "2.7.0"}] \ No newline at end of file diff --git a/tests/e2e/expected_testdata/withdrawal_credentials_bls/hoodi/deposit_data-1755000050.json b/tests/e2e/expected_testdata/withdrawal_credentials_bls/hoodi/deposit_data-1755000050.json new file mode 100644 index 0000000..0e1424b --- /dev/null +++ b/tests/e2e/expected_testdata/withdrawal_credentials_bls/hoodi/deposit_data-1755000050.json @@ -0,0 +1,13 @@ +[ + { + "pubkey": "8844cebb34d10e0e57f3c29ada375dafe14762ab85b2e408c3d6d55ce6d03317660bca9f2c2d17d8fbe14a2529ada1ea", + "withdrawal_credentials": "0045b91b2f60b88e7392d49ae1364b55e713d06f30e563f9f99e10994b26221d", + "amount": 32000000000, + "signature": "b88af0eed6045e4b2f4d046fd1c5af732d991ca6857c79a0654cbc0c4c7fafc7d12d85c946ab850ec6976fbbbd692187175aa5fd2b34d49fe8f84326f39c93b614a64855c5ce947e1cb14569cf4b8409b951bde7741eaf6471c9706459b3e3fc", + "deposit_message_root": "bfd9d2c616eb570ad3fd4d4caf169b88f80490d8923537474bf1f6c5cec5e56d", + "deposit_data_root": "dd67dab573875d7de6db4dacf193b58e81ab3ef947cda94addb833a88d431087", + "fork_version": "10000910", + "network_name": "hoodi", + "deposit_cli_version": "1.2.2" + } +] diff --git a/tests/e2e/expected_testdata/withdrawal_credentials_bls/hoodi/keystore-m_12381_3600_0_0_0-1755000050.json b/tests/e2e/expected_testdata/withdrawal_credentials_bls/hoodi/keystore-m_12381_3600_0_0_0-1755000050.json new file mode 100644 index 0000000..cca497f --- /dev/null +++ b/tests/e2e/expected_testdata/withdrawal_credentials_bls/hoodi/keystore-m_12381_3600_0_0_0-1755000050.json @@ -0,0 +1,32 @@ +{ + "crypto": { + "kdf": { + "function": "scrypt", + "params": { + "dklen": 32, + "n": 262144, + "r": 8, + "p": 1, + "salt": "5deebd6cb6043e7e8c268681b667b44e863fa4d8158cfedabda4036739f88918" + }, + "message": "" + }, + "checksum": { + "function": "sha256", + "params": {}, + "message": "37b5eeab0f4722e32a68c399496baa252049bd08fdc8332acf129262d8ba4aae" + }, + "cipher": { + "function": "aes-128-ctr", + "params": { + "iv": "22c3240a38fb3b1f4e3baebf1f68d429" + }, + "message": "656c850f88577dc484bcc8a1ff570d8920c99071ebe2017f81fe786c7ca8ea95" + } + }, + "description": "", + "pubkey": "8844cebb34d10e0e57f3c29ada375dafe14762ab85b2e408c3d6d55ce6d03317660bca9f2c2d17d8fbe14a2529ada1ea", + "path": "m/12381/3600/0/0/0", + "uuid": "ff771a98-1e00-45f8-b3fb-ea7f5a86b8d6", + "version": 4 +} diff --git a/tests/e2e/expected_testdata/withdrawal_credentials_bls/keystore-m_12381_3600_0_0_0-1668613231.json b/tests/e2e/expected_testdata/withdrawal_credentials_bls/keystore-m_12381_3600_0_0_0-1668613231.json deleted file mode 100644 index 7d9fff5..0000000 --- a/tests/e2e/expected_testdata/withdrawal_credentials_bls/keystore-m_12381_3600_0_0_0-1668613231.json +++ /dev/null @@ -1 +0,0 @@ -{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "ac0c4fe8bd852495e6e5f9ce791ee7f5e4e2007d2dd905ce5752780734bddb50"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "4f70b70695216cd708bf11e7d2bb63dca013e8ef0f4e262f3ccaff931cfea141"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "7285787cab46ae39654024f208f1af54"}, "message": "eb1d75e5468845f8ffb234873bde5c86cb34fb09b58a88e22296a9d4ea8844c3"}}, "description": "", "pubkey": "8844cebb34d10e0e57f3c29ada375dafe14762ab85b2e408c3d6d55ce6d03317660bca9f2c2d17d8fbe14a2529ada1ea", "path": "m/12381/3600/0/0/0", "uuid": "ad79df23-326e-46c7-8e2d-88e498d571fd", "version": 4} \ No newline at end of file diff --git a/tests/e2e/expected_testdata/withdrawal_credentials_bls/sepolia/deposit_data-1755012899.json b/tests/e2e/expected_testdata/withdrawal_credentials_bls/sepolia/deposit_data-1755012899.json new file mode 100644 index 0000000..c89a9f5 --- /dev/null +++ b/tests/e2e/expected_testdata/withdrawal_credentials_bls/sepolia/deposit_data-1755012899.json @@ -0,0 +1,13 @@ +[ + { + "pubkey": "8844cebb34d10e0e57f3c29ada375dafe14762ab85b2e408c3d6d55ce6d03317660bca9f2c2d17d8fbe14a2529ada1ea", + "withdrawal_credentials": "0045b91b2f60b88e7392d49ae1364b55e713d06f30e563f9f99e10994b26221d", + "amount": 32000000000, + "signature": "8c4d00c6b7eb2a98bbc7dd73caca35f4bc39c233d673920764eb6a77c173c38e1e0987972aa31d3001ef15d513900d39058926828c93f754f6f8028bdcb60e4f71e2cb270c5b2c772b7aa5f6c67acfed4878c1c55b0bf9a44d34da29d0719fd4", + "deposit_message_root": "bfd9d2c616eb570ad3fd4d4caf169b88f80490d8923537474bf1f6c5cec5e56d", + "deposit_data_root": "dc2295c410a26e08be1bc4fcd50f7fadce11a29a91003a373e6d441b468860f5", + "fork_version": "90000069", + "network_name": "sepolia", + "deposit_cli_version": "1.2.2" + } +] diff --git a/tests/e2e/expected_testdata/withdrawal_credentials_bls/sepolia/keystore-m_12381_3600_0_0_0-1755012899.json b/tests/e2e/expected_testdata/withdrawal_credentials_bls/sepolia/keystore-m_12381_3600_0_0_0-1755012899.json new file mode 100644 index 0000000..8f278d4 --- /dev/null +++ b/tests/e2e/expected_testdata/withdrawal_credentials_bls/sepolia/keystore-m_12381_3600_0_0_0-1755012899.json @@ -0,0 +1,32 @@ +{ + "crypto": { + "kdf": { + "function": "scrypt", + "params": { + "dklen": 32, + "n": 262144, + "r": 8, + "p": 1, + "salt": "033b7681cc0f5b0e49a8a17eb958d4dfccfb4fb913d679108c140bd94a304480" + }, + "message": "" + }, + "checksum": { + "function": "sha256", + "params": {}, + "message": "77bdbb2d7ed1846273e9de2f984155850beb65882d498cc5b4f06d1b0b4c43bb" + }, + "cipher": { + "function": "aes-128-ctr", + "params": { + "iv": "f1e3567a65b75ada4d812d4acc2bda47" + }, + "message": "e798e707eaa817951baba479eb5a04895f7ca5b564983941c5062942200b5f99" + } + }, + "description": "", + "pubkey": "8844cebb34d10e0e57f3c29ada375dafe14762ab85b2e408c3d6d55ce6d03317660bca9f2c2d17d8fbe14a2529ada1ea", + "path": "m/12381/3600/0/0/0", + "uuid": "3d8af3a4-3ce7-449e-a79d-2375e465b2cd", + "version": 4 +} diff --git a/tests/e2e/expected_testdata/withdrawal_credentials_execution/deposit_data-1669709160.json b/tests/e2e/expected_testdata/withdrawal_credentials_execution/deposit_data-1669709160.json deleted file mode 100644 index 15c0e0f..0000000 --- a/tests/e2e/expected_testdata/withdrawal_credentials_execution/deposit_data-1669709160.json +++ /dev/null @@ -1 +0,0 @@ -[{"pubkey": "8f7c2bd57e3d314a38149c27b55d4d68620f7ca447f16d82f3a04e3b9ed100132b7b32c9d68b30024aaec7f5ed502b7c", "withdrawal_credentials": "01000000000000000000000071c7656ec7ab88b098defb751b7401b5f6d8976f", "amount": 32000000000, "signature": "855b6e27f78da24a3124927232d0e482a987c0f8199dc635559c36c26767c32e43e8785a398898f9779cf63acc31e7ec0ec81b2d4f162eec39af6fd4c2d2cab11a1e55c256ac42e4c6895d77c5e1ed28a002f128be6cf25f06ab82d43b852736", "deposit_message_root": "95b91817529cbefc8d9f7f0edc02b37622c84a0bad5c01fcccda1e09bb394572", "deposit_data_root": "5a90c1bd646f1ef4fff5b7a4a260c688b5353f09e6c732b21047665d7bde45a1", "fork_version": "00001020", "network_name": "goerli", "deposit_cli_version": "2.7.0"}] \ No newline at end of file diff --git a/tests/e2e/expected_testdata/withdrawal_credentials_execution/hoodi/deposit_data-1755073089.json b/tests/e2e/expected_testdata/withdrawal_credentials_execution/hoodi/deposit_data-1755073089.json new file mode 100644 index 0000000..353b663 --- /dev/null +++ b/tests/e2e/expected_testdata/withdrawal_credentials_execution/hoodi/deposit_data-1755073089.json @@ -0,0 +1 @@ +[{"pubkey": "8f7c2bd57e3d314a38149c27b55d4d68620f7ca447f16d82f3a04e3b9ed100132b7b32c9d68b30024aaec7f5ed502b7c", "withdrawal_credentials": "01000000000000000000000071c7656ec7ab88b098defb751b7401b5f6d8976f", "amount": 32000000000, "signature": "a52e3fa4eba9a8d742591df77cba3b04db37ae2cff3dbefef86d2d7be7c11486feb6e032b64d62de8b171ec9f4ccde5611f0c63234e9bbf385b088fa68b92067ca3cc79e5b3a345ea3bcd14d5e146890ebad6cd4dee0ad615ee2e89c53f1bdbf", "deposit_message_root": "95b91817529cbefc8d9f7f0edc02b37622c84a0bad5c01fcccda1e09bb394572", "deposit_data_root": "5b62594e3600264e0a1fb600a8ed0f9336be921e7242c3c60fb3d3218280d38b", "fork_version": "10000910", "network_name": "hoodi", "deposit_cli_version": "1.2.2"}] \ No newline at end of file diff --git a/tests/e2e/expected_testdata/withdrawal_credentials_execution/hoodi/keystore-m_12381_3600_0_0_0-1755073089.json b/tests/e2e/expected_testdata/withdrawal_credentials_execution/hoodi/keystore-m_12381_3600_0_0_0-1755073089.json new file mode 100644 index 0000000..b9e8b4c --- /dev/null +++ b/tests/e2e/expected_testdata/withdrawal_credentials_execution/hoodi/keystore-m_12381_3600_0_0_0-1755073089.json @@ -0,0 +1 @@ +{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "4b155c0f652dab732bd803b3191900672422ae8f9763ca65905f43cae66ea7f1"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "0a908f32eea90cc9eeb376851914fa11ee5380d2e5428f3a428d87f29c3c472b"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "d5b4cda08654808d27bf899ef85867dc"}, "message": "51d6193c6c2b086d4b155be8583ed1baad7a4b650b87fa52b1cecdf4e6e94461"}}, "description": "", "pubkey": "8f7c2bd57e3d314a38149c27b55d4d68620f7ca447f16d82f3a04e3b9ed100132b7b32c9d68b30024aaec7f5ed502b7c", "path": "m/12381/3600/0/0/0", "uuid": "ad43644b-7113-48bb-a2e8-55e69e302eba", "version": 4} \ No newline at end of file diff --git a/tests/e2e/expected_testdata/withdrawal_credentials_execution/keystore-m_12381_3600_0_0_0-1669709160.json b/tests/e2e/expected_testdata/withdrawal_credentials_execution/keystore-m_12381_3600_0_0_0-1669709160.json deleted file mode 100644 index b9608ce..0000000 --- a/tests/e2e/expected_testdata/withdrawal_credentials_execution/keystore-m_12381_3600_0_0_0-1669709160.json +++ /dev/null @@ -1 +0,0 @@ -{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "d1eea955d1a208907b6200ff57bb1e66c55b086b24a7a20c2ac93274e6e9ecf0"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "3eba73e2bb5a687c3b240827db8a3a984278ab4f7d4f5215892b0aaa5fa2e713"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "a093fc93c0e3fdf3b692562ee375fac2"}, "message": "8bf1c1da6c94ebbbd4bc6e8ac258cc109655ed66bfc9be1310b1ec06c46b4a1a"}}, "description": "", "pubkey": "8f7c2bd57e3d314a38149c27b55d4d68620f7ca447f16d82f3a04e3b9ed100132b7b32c9d68b30024aaec7f5ed502b7c", "path": "m/12381/3600/0/0/0", "uuid": "d2e7d25b-9e42-4006-858b-357509011de9", "version": 4} \ No newline at end of file diff --git a/tests/e2e/expected_testdata/withdrawal_credentials_execution/sepolia/deposit_data-1755072599.json b/tests/e2e/expected_testdata/withdrawal_credentials_execution/sepolia/deposit_data-1755072599.json new file mode 100644 index 0000000..8b13e7a --- /dev/null +++ b/tests/e2e/expected_testdata/withdrawal_credentials_execution/sepolia/deposit_data-1755072599.json @@ -0,0 +1,13 @@ +[ + { + "pubkey": "8f7c2bd57e3d314a38149c27b55d4d68620f7ca447f16d82f3a04e3b9ed100132b7b32c9d68b30024aaec7f5ed502b7c", + "withdrawal_credentials": "01000000000000000000000071c7656ec7ab88b098defb751b7401b5f6d8976f", + "amount": 32000000000, + "signature": "b1b8fe05cdd73003849d61c054f3189dc9a22c5539d6c50efad00157beb30971a38102890fadce10c6355ea023e8df341190e22838e0740a70958f988cbbc4d3ac3c00206b85fa52885b4f52ec92daf84f19432bd608cd8ffa61e78df57da273", + "deposit_message_root": "95b91817529cbefc8d9f7f0edc02b37622c84a0bad5c01fcccda1e09bb394572", + "deposit_data_root": "4bc8ecf76b2c2b3de49f18546f8c3c649e09d3db825acecce4b14a278c58cbf4", + "fork_version": "90000069", + "network_name": "sepolia", + "deposit_cli_version": "1.2.2" + } +] diff --git a/tests/e2e/expected_testdata/withdrawal_credentials_execution/sepolia/keystore-m_12381_3600_0_0_0-1755072599.json b/tests/e2e/expected_testdata/withdrawal_credentials_execution/sepolia/keystore-m_12381_3600_0_0_0-1755072599.json new file mode 100644 index 0000000..93b33bc --- /dev/null +++ b/tests/e2e/expected_testdata/withdrawal_credentials_execution/sepolia/keystore-m_12381_3600_0_0_0-1755072599.json @@ -0,0 +1,32 @@ +{ + "crypto": { + "kdf": { + "function": "scrypt", + "params": { + "dklen": 32, + "n": 262144, + "r": 8, + "p": 1, + "salt": "12e5d745a1dc22fc2f5ca76d3d360ab48a80004ccbb0d0e42d85e5c08869fa15" + }, + "message": "" + }, + "checksum": { + "function": "sha256", + "params": {}, + "message": "829d19670b1c5cb9dd398bfc80c9b153e505881cdde313877541e81685d7f2f0" + }, + "cipher": { + "function": "aes-128-ctr", + "params": { + "iv": "f67f15863aa76701240948a4621e16b7" + }, + "message": "794a93ccc80f22749ff615262ab1ec7540f29a5995ddcd6f12ad08b034a6b8dd" + } + }, + "description": "", + "pubkey": "8f7c2bd57e3d314a38149c27b55d4d68620f7ca447f16d82f3a04e3b9ed100132b7b32c9d68b30024aaec7f5ed502b7c", + "path": "m/12381/3600/0/0/0", + "uuid": "88dd9371-b044-4cba-a98f-8957c975e044", + "version": 4 +} From 38fe6f63da0e40276b56801518e6db2dda91fc68 Mon Sep 17 00:00:00 2001 From: Maria Varvaroi Date: Wed, 13 Aug 2025 10:56:25 +0100 Subject: [PATCH 2/2] Update test cases to cover sepolia and hoodi --- tests/e2e/existing_mnemonic.rs | 1345 ++++++++++++++++---------------- 1 file changed, 690 insertions(+), 655 deletions(-) diff --git a/tests/e2e/existing_mnemonic.rs b/tests/e2e/existing_mnemonic.rs index c5dc414..1a8316b 100644 --- a/tests/e2e/existing_mnemonic.rs +++ b/tests/e2e/existing_mnemonic.rs @@ -13,36 +13,6 @@ pub struct DepositDataJson { pub deposit_cli_version: String, } -impl DepositDataJson { - // Helper method to get the Sepolia signature for the specific public key - pub fn expected_sepolia_signature(&self) -> String { - // For test_deposit_data_keystore_mnemonic_as_env_var, test_keystore_kdf_pbkdf2, test_keystore_kdf_scrypt - if self - .pubkey - .contains("8844cebb34d10e0e57f3c29ada375dafe14762ab85b2e408c3d6d55ce6d03317") - { - return "8c4d00c6b7eb2a98bbc7dd73caca35f4bc39c233d673920764eb6a77c173c38e1e0987972aa31d3001ef15d513900d39058926828c93f754f6f8028bdcb60e4f71e2cb270c5b2c772b7aa5f6c67acfed4878c1c55b0bf9a44d34da29d0719fd4".to_string(); - } - - // For test_withdrawal_address_execution, test_withdrawal_credentials_execution - if self.pubkey.contains("ae9b608055594725fc1653e2c3e4a50dff2a30e7db0bb70d913c338de5bf8db8481cd28128ec7581fe87759683b94311") { - return "b1b8fe05cdd73003849d61c054f3189dc9a22c5539d6c50efad00157beb30971a38102890fadce10c6355ea023e8df341190e22838e0740a70958f988cbbc4d3ac3c00206b85fa52885b4f52ec92daf84f19432bd608cd8ffa61e78df57da273".to_string(); - } - - // For test_withdrawal_credentials_execution with different pubkey - if self.pubkey.contains("8f7c2bd57e3d314a38149c27b55d4d68620f7ca447f16d82f3a04e3b9ed100132b7b32c9d68b30024aaec7f5ed502b7c") { - return "b1b8fe05cdd73003849d61c054f3189dc9a22c5539d6c50efad00157beb30971a38102890fadce10c6355ea023e8df341190e22838e0740a70958f988cbbc4d3ac3c00206b85fa52885b4f52ec92daf84f19432bd608cd8ffa61e78df57da273".to_string(); - } - - // For test_withdrawal_credentials_bls - if self.pubkey.contains("8666389c3fe6ff0bca9adba81504f380b9e2c719419760d561836472fafe295cb50696524e19cba084e1d788d66c80d6") { - return "8c4d00c6b7eb2a98bbc7dd73caca35f4bc39c233d673920764eb6a77c173c38e1e0987972aa31d3001ef15d513900d39058926828c93f754f6f8028bdcb60e4f71e2cb270c5b2c772b7aa5f6c67acfed4878c1c55b0bf9a44d34da29d0719fd4".to_string(); - } - - // Default to the original signature if no match - self.signature.clone() - } -} use assert_cmd::prelude::*; use eth2_keystore::{ json_keystore::{Crypto, JsonKeystore}, @@ -54,7 +24,6 @@ use std::{ env, path::{Path, PathBuf}, process::Command, - str::FromStr, }; /* @@ -68,84 +37,107 @@ use std::{ */ #[test] #[serial_test::serial] + fn test_deposit_data_keystore_mnemonic_as_env_var() -> Result<(), Box> { - let chain = "sepolia"; - let expected_decryption_password = "testtest"; + let expected_decryption_password = "testtesttest"; let expected_mnemonic = "ski interest capable knee usual ugly duty exercise tattoo subway delay upper bid forget say"; std::env::set_var("MNEMONIC", expected_mnemonic); let num_validators = "1"; - // test directory - let test_dir = get_test_dir("withdrawal_credentials_bls"); - - // read expected files - let expected_keystore_json = - read_keystore_json(&test_dir, "keystore-m_12381_3600_0_0_0-1668613231.json"); - let expected_deposit_data = read_deposit_data_json(&test_dir, "deposit_data-1668613231.json"); - let expected_deposit_data_json = expected_deposit_data.get(0).unwrap(); - - // decrypt keystore with expected password to derive private key - let expected_private_key = decrypt_expected_keystore_file( - expected_decryption_password, - &expected_keystore_json.crypto, - ); - - // run eth-staking-smith - - let mut cmd = Command::cargo_bin("eth-staking-smith")?; - - cmd.arg("existing-mnemonic"); - cmd.arg("--chain"); - cmd.arg(chain); - cmd.arg("--keystore_password"); - cmd.arg(expected_decryption_password); - cmd.arg("--num_validators"); - cmd.arg(num_validators); - - cmd.assert().success(); - - // read generated output - - let output = &cmd.output()?.stdout; - let command_output = std::str::from_utf8(output)?; - let generated_validator_json: ValidatorExports = serde_json::from_str(command_output)?; - let generated_private_key = generated_validator_json - .private_keys - .get(0) - .expect("could not get generated private key"); - let generated_deposit_data = generated_validator_json - .deposit_data - .get(0) - .expect("could not get generated deposit data key"); - let keystore = generated_validator_json.keystores.get(0).unwrap(); - - // compare private keys - - assert_eq!(expected_private_key, generated_private_key.to_owned()); + let test_configs = vec![ + ( + "sepolia", + "keystore-m_12381_3600_0_0_0-1755012899.json", + "deposit_data-1755012899.json", + ), + ( + "hoodi", + "keystore-m_12381_3600_0_0_0-1755000050.json", + "deposit_data-1755000050.json", + ), + ]; + + for (chain, keystore_filename, deposit_data_filename) in test_configs.iter() { + // test directory for current chain + let test_dir = get_test_dir(&format!("withdrawal_credentials_bls/{}", chain)); + + // read expected files + let expected_keystore_json = read_keystore_json(&test_dir, keystore_filename); + let expected_deposit_data = read_deposit_data_json(&test_dir, deposit_data_filename); + let expected_deposit_data_json = expected_deposit_data.get(0).unwrap(); + + // decrypt keystore with expected password to derive private key + let expected_private_key = decrypt_expected_keystore_file( + expected_decryption_password, + &expected_keystore_json.crypto, + ); - // compare deposit data + // run eth-staking-smith + let mut cmd = Command::cargo_bin("eth-staking-smith")?; + + cmd.arg("existing-mnemonic"); + cmd.arg("--chain"); + cmd.arg(chain); + cmd.arg("--keystore_password"); + cmd.arg(expected_decryption_password); + cmd.arg("--num_validators"); + cmd.arg(num_validators); + + cmd.assert().success(); + + // read generated output + let output = &cmd.output()?.stdout; + let command_output = std::str::from_utf8(output)?; + let generated_validator_json: ValidatorExports = serde_json::from_str(command_output)?; + let generated_private_key = generated_validator_json + .private_keys + .get(0) + .expect("could not get generated private key"); + let generated_deposit_data = generated_validator_json + .deposit_data + .get(0) + .expect("could not get generated deposit data key"); + let keystore = generated_validator_json.keystores.get(0).unwrap(); + + // compare private keys + assert_eq!(expected_private_key, generated_private_key.to_owned()); + + // compare deposit data + assert_eq!( + expected_deposit_data_json.pubkey.to_string(), + generated_deposit_data.pubkey + ); + assert_eq!( + expected_deposit_data_json + .withdrawal_credentials + .to_string(), + generated_deposit_data.withdrawal_credentials + ); + assert_eq!( + expected_deposit_data_json.amount.to_string(), + generated_deposit_data.amount.to_string() + ); - assert_eq!( - expected_deposit_data_json.pubkey.to_string(), - generated_deposit_data.pubkey - ); - assert_eq!( - expected_deposit_data_json - .withdrawal_credentials - .to_string(), - generated_deposit_data.withdrawal_credentials - ); - assert_eq!( - expected_deposit_data_json.amount.to_string(), - generated_deposit_data.amount.to_string() - ); - assert_eq!( - expected_deposit_data_json.expected_sepolia_signature(), - generated_deposit_data.signature.to_string() - ); + // Handle chain-specific signature validation + match chain.as_ref() { + "sepolia" => { + assert_eq!( + expected_deposit_data_json.signature, + generated_deposit_data.signature.to_string() + ); + } + "hoodi" => { + assert_eq!( + expected_deposit_data_json.signature, + generated_deposit_data.signature.to_string() + ); + } + _ => panic!("Unknown chain: {}", chain), + } - // check that pbkdf2 was used if nothing else is specified - assert_eq!("pbkdf2", parse_kdf_function(keystore)); + // check that pbkdf2 was used if nothing else is specified + assert_eq!("pbkdf2", parse_kdf_function(keystore)); + } std::env::remove_var("MNEMONIC"); @@ -157,288 +149,304 @@ fn test_deposit_data_keystore_mnemonic_as_env_var() -> Result<(), Box Result<(), Box> { - let chain = "sepolia"; - let expected_decryption_password = "blablatest"; + let expected_decryption_password = "blablatesttest"; let expected_mnemonic = "window lottery throw arrange visit play gate open scare strategy sadness fame soul bronze soap"; let num_validators = "3"; let execution_withdrawal_credentials = "0x0000000000000000000000000000000000000001"; - // test directory - let test_dir = get_test_dir("multiple_validators"); - - // read expected files - let expected_deposit_data_json = - read_deposit_data_json(&test_dir, "deposit_data-1670231001.json"); - - let mut expected_keystore_jsons = vec![]; - let mut index = 0; - - for entry in std::fs::read_dir(&test_dir)? { - let filename = entry? - .file_name() - .to_str() - .expect("could not read filename") - .to_owned(); - if filename.starts_with(&format!("keystore-m_12381_3600_{}", index)) { - let keystore_path = test_dir.join(PathBuf::from_str(&filename)?); - let keystore_file = std::fs::read_to_string(test_dir.join(keystore_path))?; - let expected_keystore_json = serde_json::from_str::(&keystore_file)?; + let test_configs = vec![ + ( + "sepolia", + vec![ + "keystore-m_12381_3600_0_0_0-1755013393.json", + "keystore-m_12381_3600_1_0_0-1755013393.json", + "keystore-m_12381_3600_2_0_0-1755013393.json", + ], + "deposit_data-1755013393.json", + ), + ( + "hoodi", + vec![ + "keystore-m_12381_3600_0_0_0-1755071454.json", + "keystore-m_12381_3600_1_0_0-1755071454.json", + "keystore-m_12381_3600_2_0_0-1755071454.json", + ], + "deposit_data-1755071454.json", + ), + ]; + + for (chain, expected_keystore_files, deposit_data) in test_configs.iter() { + // test directory + let test_dir = get_test_dir(&format!("multiple_validators/{}", chain)); + // read expected files + let expected_deposit_data_json = read_deposit_data_json(&test_dir, deposit_data); + + let mut expected_keystore_jsons = vec![]; + for filename in expected_keystore_files.iter() { + let expected_keystore_json = read_keystore_json(&test_dir, filename); expected_keystore_jsons.push(expected_keystore_json); - index = index + 1; } - } - - // run eth-staking-smith - - let mut cmd = Command::cargo_bin("eth-staking-smith")?; + // run eth-staking-smith + let mut cmd = Command::cargo_bin("eth-staking-smith")?; + + cmd.arg("existing-mnemonic"); + cmd.arg("--chain"); + cmd.arg(chain); + cmd.arg("--keystore_password"); + cmd.arg(expected_decryption_password); + cmd.arg("--mnemonic"); + cmd.arg(expected_mnemonic); + cmd.arg("--num_validators"); + cmd.arg(num_validators); + cmd.arg("--withdrawal_credentials"); + cmd.arg(execution_withdrawal_credentials); + + cmd.assert().success(); + + // read generated output + let output = &cmd.output()?.stdout; + let command_output = std::str::from_utf8(output)?; + let generated_validator_json: ValidatorExports = + serde_json::from_str(command_output).expect("could not unmarshal command output"); + let generated_private_keys = generated_validator_json.private_keys; + let generated_deposit_data = generated_validator_json.deposit_data; + + // decrypt keystore with expected password to derive private key and compare private keys + for index in 0..expected_keystore_jsons.len() { + let expected_private_key_txt = eth2_keystore::decrypt( + expected_decryption_password.as_bytes(), + &expected_keystore_jsons[index].crypto, + ) + .expect("could not decrypt keystore"); + let expected_private_key = hex::encode(expected_private_key_txt.as_bytes()); + assert_eq!( + expected_private_key, + generated_private_keys[index].to_owned() + ); + } - cmd.arg("existing-mnemonic"); - cmd.arg("--chain"); - cmd.arg(chain); - cmd.arg("--keystore_password"); - cmd.arg(expected_decryption_password); - cmd.arg("--mnemonic"); - cmd.arg(expected_mnemonic); - cmd.arg("--num_validators"); - cmd.arg(num_validators); - cmd.arg("--withdrawal_credentials"); - cmd.arg(execution_withdrawal_credentials); + // compare deposit data entries + for index in 0..expected_deposit_data_json.len() { + let expected_deposit_data_json = &expected_deposit_data_json[index]; + + assert_eq!( + expected_deposit_data_json.pubkey.to_string(), + generated_deposit_data[index].pubkey + ); + assert_eq!( + expected_deposit_data_json + .withdrawal_credentials + .to_string(), + generated_deposit_data[index].withdrawal_credentials + ); + assert_eq!( + expected_deposit_data_json.amount.to_string(), + generated_deposit_data[index].amount.to_string() + ); + + assert_eq!( + expected_deposit_data_json.signature.to_string(), + generated_deposit_data[index].signature.to_string() + ); + } + } - cmd.assert().success(); + Ok(()) +} - // read generated output +/* + generate 1 validator overwriting withdrawal credentials with eth1 address +*/ +#[test] +fn test_withdrawal_address_execution() -> Result<(), Box> { + // let chain = "sepolia"; + let expected_decryption_password = "anothertesttest"; + let expected_mnemonic = "satisfy suit expire castle fluid must electric genuine aim clock such under basic rabbit method"; + let num_validators = "1"; + let execution_withdrawal_credentials = "0x71C7656EC7ab88b098defB751B7401B5f6d8976F"; - let output = &cmd.output()?.stdout; - let command_output = std::str::from_utf8(output)?; - let generated_validator_json: ValidatorExports = - serde_json::from_str(command_output).expect("could not unmarshal command output"); - let generated_private_keys = generated_validator_json.private_keys; - let generated_deposit_data = generated_validator_json.deposit_data; - - // decrypt keystore with expected password to derive private key and compare private keys - for index in 0..expected_keystore_jsons.len() { - let expected_private_key_txt = eth2_keystore::decrypt( - expected_decryption_password.as_bytes(), - &expected_keystore_jsons[index].crypto, - ) - .expect("could not decrypt keystore"); - let expected_private_key = hex::encode(expected_private_key_txt.as_bytes()); - assert_eq!( - expected_private_key, - generated_private_keys[index].to_owned() + let test_configs = vec![ + ( + "sepolia", + "keystore-m_12381_3600_0_0_0-1755072599.json", + "deposit_data-1755072599.json", + ), + ( + "hoodi", + "keystore-m_12381_3600_0_0_0-1755073089.json", + "deposit_data-1755073089.json", + ), + ]; + + for (chain, keystore, deposit) in test_configs.iter() { + // test directory for current chain + let test_dir = get_test_dir(&format!("withdrawal_credentials_execution/{}", chain)); + // read expected files + let expected_keystore_json = read_keystore_json(&test_dir, &keystore); + let expected_deposit_data = read_deposit_data_json(&test_dir, &deposit); + let expected_deposit_data_json = expected_deposit_data.get(0).unwrap(); + // decrypt keystore with expected password to derive private key + let expected_private_key = decrypt_expected_keystore_file( + expected_decryption_password, + &expected_keystore_json.crypto, ); - } - - // compare deposit data entries - for index in 0..expected_deposit_data_json.len() { - let expected_deposit_data_json = &expected_deposit_data_json[index]; + // run eth-staking-smith + + let mut cmd = Command::cargo_bin("eth-staking-smith")?; + + cmd.arg("existing-mnemonic"); + cmd.arg("--chain"); + cmd.arg(chain); + cmd.arg("--keystore_password"); + cmd.arg(expected_decryption_password); + cmd.arg("--mnemonic"); + cmd.arg(expected_mnemonic); + cmd.arg("--num_validators"); + cmd.arg(num_validators); + cmd.arg("--withdrawal_credentials"); + cmd.arg(execution_withdrawal_credentials); + + cmd.assert().success(); + // read generated output + + let output = &cmd.output()?.stdout; + let command_output = std::str::from_utf8(output)?; + let generated_validator_json: ValidatorExports = serde_json::from_str(command_output)?; + let generated_private_key = generated_validator_json + .private_keys + .get(0) + .expect("could not get generated private key"); + let generated_deposit_data = generated_validator_json + .deposit_data + .get(0) + .expect("could not get generated deposit data"); + + // compare private keys + + assert_eq!(expected_private_key, generated_private_key.to_owned()); + + // compare deposit data assert_eq!( expected_deposit_data_json.pubkey.to_string(), - generated_deposit_data[index].pubkey + generated_deposit_data.pubkey ); assert_eq!( expected_deposit_data_json .withdrawal_credentials .to_string(), - generated_deposit_data[index].withdrawal_credentials + generated_deposit_data.withdrawal_credentials ); assert_eq!( expected_deposit_data_json.amount.to_string(), - generated_deposit_data[index].amount.to_string() + generated_deposit_data.amount.to_string() ); - - // Check signatures using the generated Sepolia values - let expected_signature = match index { - 0 => "96648d873ec18ad1f0529315d8d311495be68b9939513fa6f0b35183e5b95fd1b2f346ad17cdebf4f5e75cdb9d478de10c15c3b6e7cb9aa260af09219ca48bbe0c694ef4b74844fb42defa437f3dabe8e23d10dcbcc4d342b72ad76ad9cfa570", - 1 => "a94ea5f2ab6dc4f1cae370dee6e07cbd9d8695ec1851a17674692d4070dc9b87c228cf9fbdbd2482c38787932afc02fe07d71dbe7cf446fdf404f42d661b5997a308bd3dcb4b23848929843701755c7bc255bcd7282a7b681bf30d709da0bf09", - 2 => "a7f9ff7d107174011695a8a90de3b875aa5b8c3e5d581b38c424307f9c98bc999ca4dcc125d7e9756c459189f1fce3e505959f903db0ae3cc52f62a6555d5eed455030c2020b6f81f4be99f6572ce5892aa07c37d19cc278f3462af9b0f6e6ad", - _ => panic!("Unexpected validator index") - }; - assert_eq!( - expected_signature, - generated_deposit_data[index].signature.to_string() + expected_deposit_data_json.signature, + generated_deposit_data.signature.to_string() ); } Ok(()) } -/* - generate 1 validator overwriting withdrawal credentials with eth1 address -*/ -#[test] -fn test_withdrawal_address_execution() -> Result<(), Box> { - let chain = "sepolia"; - let expected_decryption_password = "anothertest"; - let expected_mnemonic = "satisfy suit expire castle fluid must electric genuine aim clock such under basic rabbit method"; - let num_validators = "1"; - let execution_withdrawal_credentials = "0x71C7656EC7ab88b098defB751B7401B5f6d8976F"; - - // test directory - let test_dir = get_test_dir("withdrawal_credentials_execution"); - - // read expected files - let expected_keystore_json = - read_keystore_json(&test_dir, "keystore-m_12381_3600_0_0_0-1669709160.json"); - let expected_deposit_data = read_deposit_data_json(&test_dir, "deposit_data-1669709160.json"); - let expected_deposit_data_json = expected_deposit_data.get(0).unwrap(); - - // decrypt keystore with expected password to derive private key - let expected_private_key = decrypt_expected_keystore_file( - expected_decryption_password, - &expected_keystore_json.crypto, - ); - - // run eth-staking-smith - - let mut cmd = Command::cargo_bin("eth-staking-smith")?; - - cmd.arg("existing-mnemonic"); - cmd.arg("--chain"); - cmd.arg(chain); - cmd.arg("--keystore_password"); - cmd.arg(expected_decryption_password); - cmd.arg("--mnemonic"); - cmd.arg(expected_mnemonic); - cmd.arg("--num_validators"); - cmd.arg(num_validators); - cmd.arg("--withdrawal_credentials"); - cmd.arg(execution_withdrawal_credentials); - - cmd.assert().success(); - - // read generated output - - let output = &cmd.output()?.stdout; - let command_output = std::str::from_utf8(output)?; - let generated_validator_json: ValidatorExports = serde_json::from_str(command_output)?; - let generated_private_key = generated_validator_json - .private_keys - .get(0) - .expect("could not get generated private key"); - let generated_deposit_data = generated_validator_json - .deposit_data - .get(0) - .expect("could not get generated deposit data"); - - // compare private keys - - assert_eq!(expected_private_key, generated_private_key.to_owned()); - - // compare deposit data - - assert_eq!( - expected_deposit_data_json.pubkey.to_string(), - generated_deposit_data.pubkey - ); - assert_eq!( - expected_deposit_data_json - .withdrawal_credentials - .to_string(), - generated_deposit_data.withdrawal_credentials - ); - assert_eq!( - expected_deposit_data_json.amount.to_string(), - generated_deposit_data.amount.to_string() - ); - assert_eq!( - expected_deposit_data_json.expected_sepolia_signature(), - generated_deposit_data.signature.to_string() - ); - - Ok(()) -} - /* generate 1 validator by passing in an existing bls credentials - (to ensure correctness, we'll use the validator from testcase 1) + (to ensure correctness, we'll use the validator from testcase 1. + No need to generate a new one as the withdrawal_credential is derived from the mnemonic) */ #[test] fn test_withdrawal_credentials_bls() -> Result<(), Box> { - let chain = "sepolia"; - let expected_decryption_password = "testtest"; + let expected_decryption_password = "testtesttest"; let expected_mnemonic = "ski interest capable knee usual ugly duty exercise tattoo subway delay upper bid forget say"; let num_validators = "1"; let bls_withdrawal_credentials = "0x0045b91b2f60b88e7392d49ae1364b55e713d06f30e563f9f99e10994b26221d"; - // test directory - let test_dir = get_test_dir("withdrawal_credentials_bls"); - - // read expected files - let expected_keystore_json = - read_keystore_json(&test_dir, "keystore-m_12381_3600_0_0_0-1668613231.json"); - let expected_deposit_data = read_deposit_data_json(&test_dir, "deposit_data-1668613231.json"); - let expected_deposit_data_json = expected_deposit_data.get(0).unwrap(); - - // decrypt keystore with expected password to derive private key - let expected_private_key = decrypt_expected_keystore_file( - expected_decryption_password, - &expected_keystore_json.crypto, - ); - - // run eth-staking-smith - - let mut cmd = Command::cargo_bin("eth-staking-smith")?; - - cmd.arg("existing-mnemonic"); - cmd.arg("--chain"); - cmd.arg(chain); - cmd.arg("--keystore_password"); - cmd.arg(expected_decryption_password); - cmd.arg("--mnemonic"); - cmd.arg(expected_mnemonic); - cmd.arg("--num_validators"); - cmd.arg(num_validators); - cmd.arg("--withdrawal_credentials"); - cmd.arg(bls_withdrawal_credentials); - - cmd.assert().success(); - - // read generated output - - let output = &cmd - .output() - .expect("could not get output from command") - .stdout; - let command_output = std::str::from_utf8(output).expect("could not parse output into string"); - let generated_validator_json: ValidatorExports = - serde_json::from_str(command_output).expect("could not unmarshal command output"); - let generated_private_key = generated_validator_json - .private_keys - .get(0) - .expect("could not get generated private key"); - let generated_deposit_data = generated_validator_json - .deposit_data - .get(0) - .expect("could not get generated deposit data"); - - // compare private keys - - assert_eq!(expected_private_key, generated_private_key.to_owned()); - - // compare deposit data - - assert_eq!( - expected_deposit_data_json.pubkey.to_string(), - generated_deposit_data.pubkey - ); - assert_eq!( - expected_deposit_data_json - .withdrawal_credentials - .to_string(), - generated_deposit_data.withdrawal_credentials - ); - assert_eq!( - expected_deposit_data_json.amount.to_string(), - generated_deposit_data.amount.to_string() - ); - assert_eq!( - expected_deposit_data_json.expected_sepolia_signature(), - generated_deposit_data.signature.to_string() - ); + let test_config = vec![ + ( + "sepolia", + "keystore-m_12381_3600_0_0_0-1755012899.json", + "deposit_data-1755012899.json", + ), + ( + "hoodi", + "keystore-m_12381_3600_0_0_0-1755000050.json", + "deposit_data-1755000050.json", + ), + ]; + + for (chain, keystore, deposit) in test_config.iter() { + // test directory + let test_dir = get_test_dir(&format!("withdrawal_credentials_bls/{}", chain)); + // read expected files + let expected_keystore_json = read_keystore_json(&test_dir, &keystore); + let expected_deposit_data = read_deposit_data_json(&test_dir, &deposit); + let expected_deposit_data_json = expected_deposit_data.get(0).unwrap(); + + // decrypt keystore with expected password to derive private key + let expected_private_key = decrypt_expected_keystore_file( + expected_decryption_password, + &expected_keystore_json.crypto, + ); + // run eth-staking-smith + let mut cmd = Command::cargo_bin("eth-staking-smith")?; + + cmd.arg("existing-mnemonic"); + cmd.arg("--chain"); + cmd.arg(chain); + cmd.arg("--keystore_password"); + cmd.arg(expected_decryption_password); + cmd.arg("--mnemonic"); + cmd.arg(expected_mnemonic); + cmd.arg("--num_validators"); + cmd.arg(num_validators); + cmd.arg("--withdrawal_credentials"); + cmd.arg(bls_withdrawal_credentials); + + cmd.assert().success(); + + // read generated output + let output = &cmd + .output() + .expect("could not get output from command") + .stdout; + let command_output = + std::str::from_utf8(output).expect("could not parse output into string"); + let generated_validator_json: ValidatorExports = + serde_json::from_str(command_output).expect("could not unmarshal command output"); + let generated_private_key = generated_validator_json + .private_keys + .get(0) + .expect("could not get generated private key"); + let generated_deposit_data = generated_validator_json + .deposit_data + .get(0) + .expect("could not get generated deposit data"); + + // compare private keys + assert_eq!(expected_private_key, generated_private_key.to_owned()); + + // compare deposit data + assert_eq!( + expected_deposit_data_json.pubkey.to_string(), + generated_deposit_data.pubkey + ); + assert_eq!( + expected_deposit_data_json + .withdrawal_credentials + .to_string(), + generated_deposit_data.withdrawal_credentials + ); + assert_eq!( + expected_deposit_data_json.amount.to_string(), + generated_deposit_data.amount.to_string() + ); + assert_eq!( + expected_deposit_data_json.signature, + generated_deposit_data.signature.to_string() + ); + } Ok(()) } @@ -449,85 +457,95 @@ fn test_withdrawal_credentials_bls() -> Result<(), Box> { */ #[test] fn test_withdrawal_credentials_execution() -> Result<(), Box> { - let chain = "sepolia"; - let expected_decryption_password = "anothertest"; + let expected_decryption_password = "anothertesttest"; let expected_mnemonic = "satisfy suit expire castle fluid must electric genuine aim clock such under basic rabbit method"; let num_validators = "1"; let execution_withdrawal_credentials = "0x01000000000000000000000071c7656ec7ab88b098defb751b7401b5f6d8976f"; - // test directory - let test_dir = get_test_dir("withdrawal_credentials_execution"); - - // read expected files - let expected_keystore_json = - read_keystore_json(&test_dir, "keystore-m_12381_3600_0_0_0-1669709160.json"); - let expected_deposit_data = read_deposit_data_json(&test_dir, "deposit_data-1669709160.json"); - let expected_deposit_data_json = expected_deposit_data.get(0).unwrap(); - - // decrypt keystore with expected password to derive private key - let expected_private_key = decrypt_expected_keystore_file( - expected_decryption_password, - &expected_keystore_json.crypto, - ); - - // run eth-staking-smith - - let mut cmd = Command::cargo_bin("eth-staking-smith")?; - - cmd.arg("existing-mnemonic"); - cmd.arg("--chain"); - cmd.arg(chain); - cmd.arg("--keystore_password"); - cmd.arg(expected_decryption_password); - cmd.arg("--mnemonic"); - cmd.arg(expected_mnemonic); - cmd.arg("--num_validators"); - cmd.arg(num_validators); - cmd.arg("--withdrawal_credentials"); - cmd.arg(execution_withdrawal_credentials); - - cmd.assert().success(); - - // read generated output - - let output = &cmd.output()?.stdout; - let command_output = std::str::from_utf8(output)?; - let generated_validator_json: ValidatorExports = - serde_json::from_str(command_output).expect("could not unmarshal command output"); - let generated_private_key = generated_validator_json - .private_keys - .get(0) - .expect("could not get generated private key"); - let generated_deposit_data = generated_validator_json - .deposit_data - .get(0) - .expect("could not get generated deposit data"); - - // compare private keys - - assert_eq!(expected_private_key, generated_private_key.to_owned()); - - // compare deposit data + let test_configs = vec![ + ( + "sepolia", + "keystore-m_12381_3600_0_0_0-1755072599.json", + "deposit_data-1755072599.json", + ), + ( + "hoodi", + "keystore-m_12381_3600_0_0_0-1755073089.json", + "deposit_data-1755073089.json", + ), + ]; + + for (chain, keystore, deposit) in test_configs.iter() { + // test directory for current chain + let test_dir = get_test_dir(&format!("withdrawal_credentials_execution/{}", chain)); + // read expected files + let expected_keystore_json = read_keystore_json(&test_dir, &keystore); + let expected_deposit_data = read_deposit_data_json(&test_dir, &deposit); + let expected_deposit_data_json = expected_deposit_data.get(0).unwrap(); + + // decrypt keystore with expected password to derive private key + let expected_private_key = decrypt_expected_keystore_file( + expected_decryption_password, + &expected_keystore_json.crypto, + ); + // run eth-staking-smith + let mut cmd = Command::cargo_bin("eth-staking-smith")?; + + cmd.arg("existing-mnemonic"); + cmd.arg("--chain"); + cmd.arg(chain); + cmd.arg("--keystore_password"); + cmd.arg(expected_decryption_password); + cmd.arg("--mnemonic"); + cmd.arg(expected_mnemonic); + cmd.arg("--num_validators"); + cmd.arg(num_validators); + cmd.arg("--withdrawal_credentials"); + cmd.arg(execution_withdrawal_credentials); + + cmd.assert().success(); + + // read generated output + + let output = &cmd.output()?.stdout; + let command_output = std::str::from_utf8(output)?; + let generated_validator_json: ValidatorExports = + serde_json::from_str(command_output).expect("could not unmarshal command output"); + let generated_private_key = generated_validator_json + .private_keys + .get(0) + .expect("could not get generated private key"); + let generated_deposit_data = generated_validator_json + .deposit_data + .get(0) + .expect("could not get generated deposit data"); + + // compare private keys + + assert_eq!(expected_private_key, generated_private_key.to_owned()); + + // compare deposit data - assert_eq!( - expected_deposit_data_json.pubkey.to_string(), - generated_deposit_data.pubkey - ); - assert_eq!( - expected_deposit_data_json - .withdrawal_credentials - .to_string(), - generated_deposit_data.withdrawal_credentials - ); - assert_eq!( - expected_deposit_data_json.amount.to_string(), - generated_deposit_data.amount.to_string() - ); - assert_eq!( - expected_deposit_data_json.expected_sepolia_signature(), - generated_deposit_data.signature.to_string() - ); + assert_eq!( + expected_deposit_data_json.pubkey.to_string(), + generated_deposit_data.pubkey + ); + assert_eq!( + expected_deposit_data_json + .withdrawal_credentials + .to_string(), + generated_deposit_data.withdrawal_credentials + ); + assert_eq!( + expected_deposit_data_json.amount.to_string(), + generated_deposit_data.amount.to_string() + ); + assert_eq!( + expected_deposit_data_json.signature, + generated_deposit_data.signature.to_string() + ); + } Ok(()) } @@ -537,87 +555,96 @@ fn test_withdrawal_credentials_execution() -> Result<(), Box Result<(), Box> { - let chain = "sepolia"; - let expected_decryption_password = "testtest"; + let expected_decryption_password = "testtesttest"; let expected_mnemonic = "ski interest capable knee usual ugly duty exercise tattoo subway delay upper bid forget say"; let num_validators = "1"; let kdf = "pbkdf2"; - // test directory - let test_dir = get_test_dir("withdrawal_credentials_bls"); - - // read expected files - let expected_keystore_json = - read_keystore_json(&test_dir, "keystore-m_12381_3600_0_0_0-1668613231.json"); - let expected_deposit_data = read_deposit_data_json(&test_dir, "deposit_data-1668613231.json"); - let expected_deposit_data_json = expected_deposit_data.get(0).unwrap(); - - // decrypt keystore with expected password to derive private key - let expected_private_key = decrypt_expected_keystore_file( - expected_decryption_password, - &expected_keystore_json.crypto, - ); - - // run eth-staking-smith - - let mut cmd = Command::cargo_bin("eth-staking-smith")?; - - cmd.arg("existing-mnemonic"); - cmd.arg("--chain"); - cmd.arg(chain); - cmd.arg("--keystore_password"); - cmd.arg(expected_decryption_password); - cmd.arg("--mnemonic"); - cmd.arg(expected_mnemonic); - cmd.arg("--num_validators"); - cmd.arg(num_validators); - cmd.arg("--kdf"); - cmd.arg(kdf); - - cmd.assert().success(); - - // read generated output - - let output = &cmd.output()?.stdout; - let command_output = std::str::from_utf8(output)?; - let generated_validator_json: ValidatorExports = serde_json::from_str(command_output)?; - let generated_private_key = generated_validator_json - .private_keys - .get(0) - .expect("could not get generated private key"); - let generated_deposit_data = generated_validator_json - .deposit_data - .get(0) - .expect("could not get generated deposit data key"); - let keystore = generated_validator_json.keystores.get(0).unwrap(); - - // compare private keys - - assert_eq!(expected_private_key, generated_private_key.to_owned()); - - // compare deposit data + let test_config = vec![ + ( + "sepolia", + "keystore-m_12381_3600_0_0_0-1755012899.json", + "deposit_data-1755012899.json", + ), + ( + "hoodi", + "keystore-m_12381_3600_0_0_0-1755000050.json", + "deposit_data-1755000050.json", + ), + ]; + + for (chain, keystore, deposit) in test_config.iter() { + // test directory for current chain + let test_dir = get_test_dir(&format!("withdrawal_credentials_bls/{}", chain)); + // read expected files + let expected_keystore_json = read_keystore_json(&test_dir, &keystore); + let expected_deposit_data = read_deposit_data_json(&test_dir, &deposit); + let expected_deposit_data_json = expected_deposit_data.get(0).unwrap(); + + // decrypt keystore with expected password to derive private key + let expected_private_key = decrypt_expected_keystore_file( + expected_decryption_password, + &expected_keystore_json.crypto, + ); - assert_eq!( - expected_deposit_data_json.pubkey.to_string(), - generated_deposit_data.pubkey - ); - assert_eq!( - expected_deposit_data_json - .withdrawal_credentials - .to_string(), - generated_deposit_data.withdrawal_credentials - ); - assert_eq!( - expected_deposit_data_json.amount.to_string(), - generated_deposit_data.amount.to_string() - ); - assert_eq!( - expected_deposit_data_json.expected_sepolia_signature(), - generated_deposit_data.signature.to_string() - ); + // run eth-staking-smith + + let mut cmd = Command::cargo_bin("eth-staking-smith")?; + + cmd.arg("existing-mnemonic"); + cmd.arg("--chain"); + cmd.arg(chain); + cmd.arg("--keystore_password"); + cmd.arg(expected_decryption_password); + cmd.arg("--mnemonic"); + cmd.arg(expected_mnemonic); + cmd.arg("--num_validators"); + cmd.arg(num_validators); + cmd.arg("--kdf"); + cmd.arg(kdf); + + cmd.assert().success(); + + // read generated output + let output = &cmd.output()?.stdout; + let command_output = std::str::from_utf8(output)?; + let generated_validator_json: ValidatorExports = serde_json::from_str(command_output)?; + let generated_private_key = generated_validator_json + .private_keys + .get(0) + .expect("could not get generated private key"); + let generated_deposit_data = generated_validator_json + .deposit_data + .get(0) + .expect("could not get generated deposit data key"); + let keystore = generated_validator_json.keystores.get(0).unwrap(); + + // compare private keys + assert_eq!(expected_private_key, generated_private_key.to_owned()); + + // compare deposit data + assert_eq!( + expected_deposit_data_json.pubkey.to_string(), + generated_deposit_data.pubkey + ); + assert_eq!( + expected_deposit_data_json + .withdrawal_credentials + .to_string(), + generated_deposit_data.withdrawal_credentials + ); + assert_eq!( + expected_deposit_data_json.amount.to_string(), + generated_deposit_data.amount.to_string() + ); + assert_eq!( + expected_deposit_data_json.signature, + generated_deposit_data.signature.to_string() + ); - // check that specified kdf was used - assert_eq!("pbkdf2", parse_kdf_function(keystore)); + // check that specified kdf was used + assert_eq!("pbkdf2", parse_kdf_function(keystore)); + } Ok(()) } @@ -627,88 +654,99 @@ fn test_keystore_kdf_pbkdf2() -> Result<(), Box> { */ #[test] fn test_keystore_kdf_scrypt() -> Result<(), Box> { - let chain = "sepolia"; - let expected_decryption_password = "testtest"; + let expected_decryption_password = "testtesttest"; let expected_mnemonic = "ski interest capable knee usual ugly duty exercise tattoo subway delay upper bid forget say"; let num_validators = "1"; let kdf = "scrypt"; - // test directory - let test_dir = get_test_dir("withdrawal_credentials_bls"); - - // read expected files - let expected_keystore_json = - read_keystore_json(&test_dir, "keystore-m_12381_3600_0_0_0-1668613231.json"); - let expected_deposit_data = read_deposit_data_json(&test_dir, "deposit_data-1668613231.json"); - let expected_deposit_data_json = expected_deposit_data.get(0).unwrap(); - - // decrypt keystore with expected password to derive private key - let expected_private_key = decrypt_expected_keystore_file( - expected_decryption_password, - &expected_keystore_json.crypto, - ); + let test_config = vec![ + ( + "sepolia", + "keystore-m_12381_3600_0_0_0-1755012899.json", + "deposit_data-1755012899.json", + ), + ( + "hoodi", + "keystore-m_12381_3600_0_0_0-1755000050.json", + "deposit_data-1755000050.json", + ), + ]; + + for (chain, keystore, deposit) in test_config.iter() { + // test directory for current chain + let test_dir = get_test_dir(&format!("withdrawal_credentials_bls/{}", chain)); + // read expected files + let expected_keystore_json = read_keystore_json(&test_dir, &keystore); + let expected_deposit_data = read_deposit_data_json(&test_dir, &deposit); + let expected_deposit_data_json = expected_deposit_data.get(0).unwrap(); + + // decrypt keystore with expected password to derive private key + let expected_private_key = decrypt_expected_keystore_file( + expected_decryption_password, + &expected_keystore_json.crypto, + ); - // run eth-staking-smith + // run eth-staking-smith - let mut cmd = Command::cargo_bin("eth-staking-smith")?; - - cmd.arg("existing-mnemonic"); - cmd.arg("--chain"); - cmd.arg(chain); - cmd.arg("--keystore_password"); - cmd.arg(expected_decryption_password); - cmd.arg("--mnemonic"); - cmd.arg(expected_mnemonic); - cmd.arg("--num_validators"); - cmd.arg(num_validators); - cmd.arg("--kdf"); - cmd.arg(kdf); + let mut cmd = Command::cargo_bin("eth-staking-smith")?; - cmd.assert().success(); + cmd.arg("existing-mnemonic"); + cmd.arg("--chain"); + cmd.arg(chain); + cmd.arg("--keystore_password"); + cmd.arg(expected_decryption_password); + cmd.arg("--mnemonic"); + cmd.arg(expected_mnemonic); + cmd.arg("--num_validators"); + cmd.arg(num_validators); + cmd.arg("--kdf"); + cmd.arg(kdf); - // read generated output + cmd.assert().success(); - let output = &cmd.output()?.stdout; - let command_output = std::str::from_utf8(output)?; - let generated_validator_json: ValidatorExports = serde_json::from_str(command_output)?; - let generated_private_key = generated_validator_json - .private_keys - .get(0) - .expect("could not get generated private key"); - let generated_deposit_data = generated_validator_json - .deposit_data - .get(0) - .expect("could not get generated deposit data key"); - let keystore = generated_validator_json.keystores.get(0).unwrap(); + // read generated output - // compare private keys + let output = &cmd.output()?.stdout; + let command_output = std::str::from_utf8(output)?; + let generated_validator_json: ValidatorExports = serde_json::from_str(command_output)?; + let generated_private_key = generated_validator_json + .private_keys + .get(0) + .expect("could not get generated private key"); + let generated_deposit_data = generated_validator_json + .deposit_data + .get(0) + .expect("could not get generated deposit data key"); + let keystore = generated_validator_json.keystores.get(0).unwrap(); - assert_eq!(expected_private_key, generated_private_key.to_owned()); + // compare private keys - // compare deposit data + assert_eq!(expected_private_key, generated_private_key.to_owned()); - assert_eq!( - expected_deposit_data_json.pubkey.to_string(), - generated_deposit_data.pubkey - ); - assert_eq!( - expected_deposit_data_json - .withdrawal_credentials - .to_string(), - generated_deposit_data.withdrawal_credentials - ); - assert_eq!( - expected_deposit_data_json.amount.to_string(), - generated_deposit_data.amount.to_string() - ); - assert_eq!( - expected_deposit_data_json.expected_sepolia_signature(), - generated_deposit_data.signature.to_string() - ); + // compare deposit data - // check that correct kdf was used - assert_eq!("scrypt", parse_kdf_function(keystore)); + assert_eq!( + expected_deposit_data_json.pubkey.to_string(), + generated_deposit_data.pubkey + ); + assert_eq!( + expected_deposit_data_json + .withdrawal_credentials + .to_string(), + generated_deposit_data.withdrawal_credentials + ); + assert_eq!( + expected_deposit_data_json.amount.to_string(), + generated_deposit_data.amount.to_string() + ); + assert_eq!( + expected_deposit_data_json.signature, + generated_deposit_data.signature.to_string() + ); + // check that correct kdf was used + assert_eq!("scrypt", parse_kdf_function(keystore)); + } Ok(()) } @@ -935,111 +973,108 @@ fn get_test_dir(testcase: &str) -> PathBuf { */ #[test] fn test_regenerate_from_seed_index() -> Result<(), Box> { - let chain = "sepolia"; - let expected_decryption_password = "blablatest"; + let expected_decryption_password = "blablatesttest"; let expected_mnemonic = "window lottery throw arrange visit play gate open scare strategy sadness fame soul bronze soap"; let num_validators = "2"; let validator_start_index = "1"; let execution_withdrawal_credentials = "0x0000000000000000000000000000000000000001"; - // test directory - let test_dir = get_test_dir("regenerate_from_seed_index"); - - // read expected files - let expected_deposit_data_json = - read_deposit_data_json(&test_dir, "deposit_data-1670927040.json"); - - let mut expected_keystore_jsons = vec![]; - let mut index = 0; - - for entry in std::fs::read_dir(&test_dir)? { - let filename = entry? - .file_name() - .to_str() - .expect("could not read filename") - .to_owned(); - if filename.starts_with(&format!("keystore-m_12381_3600_{}", index)) { - let keystore_path = test_dir.join(PathBuf::from_str(&filename)?); - let keystore_file = std::fs::read_to_string(test_dir.join(keystore_path))?; - let expected_keystore_json = serde_json::from_str::(&keystore_file)?; + let test_config = vec![ + ( + "sepolia", + "deposit_data-1755078034.json", + vec![ + "keystore-m_12381_3600_1_0_0-1755078034.json", + "keystore-m_12381_3600_2_0_0-1755078034.json", + ], + ), + ( + "hoodi", + "deposit_data-1755078158.json", + vec![ + "keystore-m_12381_3600_1_0_0-1755078158.json", + "keystore-m_12381_3600_2_0_0-1755078158.json", + ], + ), + ]; + + for (chain, deposit, keystores) in test_config.iter() { + // test directory for current chain + let test_dir = get_test_dir(&format!("regenerate_from_seed_index/{}", chain)); + // read expected files + let expected_deposit_data_json = read_deposit_data_json(&test_dir, deposit); + + let mut expected_keystore_jsons = vec![]; + for filename in keystores.iter() { + let expected_keystore_json = read_keystore_json(&test_dir, filename); expected_keystore_jsons.push(expected_keystore_json); - index = index + 1; } - } - - // run eth-staking-smith - - let mut cmd = Command::cargo_bin("eth-staking-smith")?; - - cmd.arg("existing-mnemonic"); - cmd.arg("--chain"); - cmd.arg(chain); - cmd.arg("--keystore_password"); - cmd.arg(expected_decryption_password); - cmd.arg("--mnemonic"); - cmd.arg(expected_mnemonic); - cmd.arg("--num_validators"); - cmd.arg(num_validators); - cmd.arg("--validator_start_index"); - cmd.arg(validator_start_index); - cmd.arg("--withdrawal_credentials"); - cmd.arg(execution_withdrawal_credentials); - - cmd.assert().success(); - - // read generated output - - let output = &cmd.output()?.stdout; - let command_output = std::str::from_utf8(output)?; - let generated_validator_json: ValidatorExports = - serde_json::from_str(command_output).expect("could not unmarshal command output"); - let generated_private_keys = generated_validator_json.private_keys; - let generated_deposit_data = generated_validator_json.deposit_data; - - // decrypt keystore with expected password to derive private key and compare private keys - for index in 0..expected_keystore_jsons.len() { - let expected_private_key_txt = eth2_keystore::decrypt( - expected_decryption_password.as_bytes(), - &expected_keystore_jsons[index].crypto, - ) - .expect("could not decrypt keystore"); - let expected_private_key = hex::encode(expected_private_key_txt.as_bytes()); - assert_eq!( - expected_private_key, - generated_private_keys[index].to_owned() - ); - } - - // compare deposit data entries - for index in 0..expected_deposit_data_json.len() { - let expected_deposit_data_json = &expected_deposit_data_json[index]; - - assert_eq!( - expected_deposit_data_json.pubkey.to_string(), - generated_deposit_data[index].pubkey - ); - assert_eq!( - expected_deposit_data_json - .withdrawal_credentials - .to_string(), - generated_deposit_data[index].withdrawal_credentials - ); - assert_eq!( - expected_deposit_data_json.amount.to_string(), - generated_deposit_data[index].amount.to_string() - ); - - // Updated for Sepolia signatures, index 1 and 2 (validator_start_index is 1) - let expected_signature = if index == 0 { - "a94ea5f2ab6dc4f1cae370dee6e07cbd9d8695ec1851a17674692d4070dc9b87c228cf9fbdbd2482c38787932afc02fe07d71dbe7cf446fdf404f42d661b5997a308bd3dcb4b23848929843701755c7bc255bcd7282a7b681bf30d709da0bf09" - } else { - "a7f9ff7d107174011695a8a90de3b875aa5b8c3e5d581b38c424307f9c98bc999ca4dcc125d7e9756c459189f1fce3e505959f903db0ae3cc52f62a6555d5eed455030c2020b6f81f4be99f6572ce5892aa07c37d19cc278f3462af9b0f6e6ad" - }; + // run eth-staking-smith + + let mut cmd = Command::cargo_bin("eth-staking-smith")?; + + cmd.arg("existing-mnemonic"); + cmd.arg("--chain"); + cmd.arg(chain); + cmd.arg("--keystore_password"); + cmd.arg(expected_decryption_password); + cmd.arg("--mnemonic"); + cmd.arg(expected_mnemonic); + cmd.arg("--num_validators"); + cmd.arg(num_validators); + cmd.arg("--validator_start_index"); + cmd.arg(validator_start_index); + cmd.arg("--withdrawal_credentials"); + cmd.arg(execution_withdrawal_credentials); + + cmd.assert().success(); + + // read generated output + + let output = &cmd.output()?.stdout; + let command_output = std::str::from_utf8(output)?; + let generated_validator_json: ValidatorExports = + serde_json::from_str(command_output).expect("could not unmarshal command output"); + let generated_private_keys = generated_validator_json.private_keys; + let generated_deposit_data = generated_validator_json.deposit_data; + + // decrypt keystore with expected password to derive private key and compare private keys + for index in 0..expected_keystore_jsons.len() { + let expected_private_key_txt = eth2_keystore::decrypt( + expected_decryption_password.as_bytes(), + &expected_keystore_jsons[index].crypto, + ) + .expect("could not decrypt keystore"); + let expected_private_key = hex::encode(expected_private_key_txt.as_bytes()); + assert_eq!( + expected_private_key, + generated_private_keys[index].to_owned() + ); + } - assert_eq!( - expected_signature, - generated_deposit_data[index].signature.to_string() - ); + // compare deposit data entries + for index in 0..expected_deposit_data_json.len() { + let expected_deposit_data_json = &expected_deposit_data_json[index]; + + assert_eq!( + expected_deposit_data_json.pubkey.to_string(), + generated_deposit_data[index].pubkey + ); + assert_eq!( + expected_deposit_data_json + .withdrawal_credentials + .to_string(), + generated_deposit_data[index].withdrawal_credentials + ); + assert_eq!( + expected_deposit_data_json.amount.to_string(), + generated_deposit_data[index].amount.to_string() + ); + assert_eq!( + expected_deposit_data_json.signature, + generated_deposit_data[index].signature.to_string() + ); + } } Ok(())