diff --git a/bin/citrea/proptest-regressions/test_rpc.txt b/bin/citrea/proptest-regressions/test_rpc.txt index f173ae97a..b364f56eb 100644 --- a/bin/citrea/proptest-regressions/test_rpc.txt +++ b/bin/citrea/proptest-regressions/test_rpc.txt @@ -4,7 +4,7 @@ # # It is recommended to check this file in to source control so that # everyone who runs the test benefits from these saved cases. -cc fa833c45c93f2d7eb597197817751abefda66d7757b65b51e56e84290cdf428a # shrinks to (slots, tx_id_to_event_range, _total_num_batches) = ([SlotCommit { slot_data: MockBlock { header: MockBlockHeader { prev_hash: 0x0000000000000000000000000000000000000000000000000000000000000000, hash: 0x0000000000000000000000000000000000000000000000000000000000000000, txs_commitment: 0x0000000000000000000000000000000000000000000000000000000000000000, height: 0, time: Time { secs: 1717416655, nanos: 812540000 } }, validity_cond: MockValidityCond { is_valid: true }, blobs: [] }, batch_receipts: [BatchReceipt { batch_hash: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 28, 86, 147, 160, 149], tx_receipts: [TransactionReceipt { tx_hash: [99, 14, 54, 254, 184, 128, 195, 173, 140, 24, 47, 76, 103, 75, 11, 156, 202, 228, 151, 79, 149, 206, 98, 30, 119, 37, 238, 217, 221, 126, 40, 52], body_to_save: None, events: [Event { key: EventKey([159, 92, 2, 145, 33, 2, 162, 182, 241, 65, 16, 100, 72, 177, 96, 122, 219, 201, 156, 54, 186, 37, 54, 36, 237, 153, 122, 111, 195, 147, 221, 43, 155, 254, 19, 210, 20, 1, 183, 212, 206, 89, 247, 68, 192, 176, 96, 248, 225, 251, 183, 61, 148, 250, 46, 28, 225, 90, 97, 45, 195, 83, 138, 3, 207, 163, 36, 169, 56, 158, 224, 79, 100]), value: EventValue([108, 199, 54, 0, 161, 51, 127, 109, 167, 240, 119, 112, 8, 237, 31, 184, 224, 116, 83, 229]) }, Event { key: EventKey([77, 56, 243, 86, 71, 41, 57, 111, 92, 154, 118, 117, 60, 39, 159, 203, 206, 180, 221, 82, 110, 59, 72, 111, 254]), value: EventValue([130, 37, 130, 228, 127, 3, 254, 9, 18, 174, 85, 225, 18, 123, 248, 168, 45, 198, 197, 128, 152, 138, 114, 212, 148, 3, 114, 35, 16, 245, 201, 10, 104, 233, 26, 69, 208, 172, 179, 86, 198, 104, 167, 78, 27, 168, 122, 189, 189, 221, 194, 230, 102, 220, 24, 118, 222, 169, 131, 201, 254, 154, 180, 154, 52, 217, 130, 136, 156, 80, 237, 193, 255, 101, 248]) }, Event { key: EventKey([45, 169, 50, 255, 194, 252, 123, 99, 242, 237, 136, 254, 177, 105, 173, 36, 162, 46, 177, 183, 87, 114, 186, 68, 130, 42, 148, 44, 8, 158, 154, 25, 45, 40, 171, 105, 130, 75]), value: EventValue([16, 128, 146, 42, 57, 26, 205, 156, 215, 231, 136, 134, 11, 197, 91, 110, 183, 194, 36, 92, 109, 197, 158, 50, 117, 195, 140, 27, 149, 248, 239, 210, 208, 81, 31, 96, 250, 37, 175, 131, 254, 18, 244, 127, 207, 251, 115, 84, 238, 14, 72, 215, 47]) }, Event { key: EventKey([99, 147, 110, 204, 19, 87, 138, 60, 20, 204, 133, 19, 35, 184, 33, 18, 196, 215, 89, 251, 194, 212, 27, 57, 244, 28, 202, 20, 6, 80, 125, 155, 202, 140, 103, 46, 95, 49, 37, 48, 193, 110, 207, 154, 32, 211, 129, 22, 79, 48, 80, 167, 129, 221, 181, 66, 71, 112, 252, 16, 97, 89, 166, 106, 147, 42, 175, 30, 188, 20, 58, 183, 160, 2, 10, 96, 95, 248, 153, 200, 91, 138, 200, 37, 42, 231, 126, 203, 98, 147, 197, 107, 239, 74, 173, 150, 68, 252, 216]), value: EventValue([32, 17, 76, 117, 211, 243, 28, 184, 30, 153, 220, 37, 90, 157, 19, 158, 160, 38, 2, 91, 31, 197, 190, 138, 145, 123, 240, 124, 188, 67, 129, 163, 53, 163, 30, 62, 52, 80, 250, 188, 232, 10, 182, 8, 32, 164, 157, 217, 2, 6, 46, 174, 144, 200, 48, 149, 166, 161, 47, 49, 202, 28]) }], receipt: 1604905691 }, TransactionReceipt { tx_hash: [136, 143, 31, 158, 144, 0, 5, 214, 108, 236, 164, 14, 235, 192, 206, 34, 37, 248, 158, 131, 242, 122, 148, 70, 226, 196, 243, 191, 6, 240, 146, 54], body_to_save: Some([161, 81, 248, 62, 64]), events: [Event { key: EventKey([78, 104, 157, 192, 151, 32, 120, 94, 26, 35, 36, 190, 72, 239, 90, 203, 21, 116, 237, 165, 82, 155, 114, 115, 129, 216, 199, 108, 142, 45, 251, 66, 163, 92, 230, 156, 22, 155, 19, 14, 99, 131, 90, 9, 124, 161, 37, 162, 103, 127, 75, 228, 175, 43, 223, 252, 118, 49]), value: EventValue([51, 25, 126, 181, 37, 12, 4, 116, 245, 121, 122, 169, 234, 21, 145, 53, 92, 62, 21, 213, 55]) }, Event { key: EventKey([75, 225, 100, 26, 145, 70, 45, 82, 39, 177, 159, 119, 37, 118, 121, 96, 199, 163, 239, 168, 168, 77, 218, 77, 167, 166, 155, 239, 108, 236, 132, 134, 130, 14]), value: EventValue([174, 44, 82, 57, 87, 161, 245, 218, 99, 175, 52, 214, 87, 68, 151, 176, 66, 193, 177, 167, 21, 164]) }, Event { key: EventKey([208, 178]), value: EventValue([105, 58, 84, 103, 93, 206, 120, 99, 79, 94, 156, 209, 215, 115, 28, 27, 52, 215, 187, 255, 93, 195, 104, 209, 104, 65, 138, 84, 255, 33, 95, 105, 6, 21, 23, 238, 222, 250, 232, 88, 0, 29, 129, 13, 50, 40, 221, 252, 220, 22, 65, 246]) }, Event { key: EventKey([158, 202, 14, 24, 118, 176, 40]), value: EventValue([148, 41, 226, 62, 67, 145, 208, 239, 59, 128, 34, 87, 172, 3, 57, 26, 137, 126, 141, 116, 37, 93, 115, 42, 76, 25, 160, 149, 173, 118, 194, 216, 154, 76, 127, 27, 176, 135, 81, 124, 174, 233, 231, 11, 198, 214, 231, 146, 120, 239, 145, 148, 240, 67, 252, 248, 117, 94, 42, 30, 147, 154, 133, 30, 167, 153, 60, 18, 53, 206, 254, 113, 226, 23, 164, 57, 165, 166, 14, 71, 140, 64, 215]) }, Event { key: EventKey([239, 121, 46, 193, 171, 163, 42, 176, 208, 5, 23, 73, 215, 77, 91, 122, 250, 124, 251, 55]), value: EventValue([14, 86, 171, 42, 58, 53, 199, 159, 48, 76, 60, 75, 82, 143, 17, 160, 104, 34, 77, 140, 210, 242, 37, 160, 221, 165, 97, 123, 67, 118, 190, 235, 123, 26, 165, 226, 254, 80, 128, 150, 76, 91, 98, 36, 242, 244, 56, 183]) }], receipt: 716292249 }, TransactionReceipt { tx_hash: [189, 71, 52, 146, 233, 229, 0, 117, 17, 36, 54, 49, 33, 99, 242, 39, 104, 100, 139, 196, 166, 124, 20, 136, 143, 128, 16, 73, 80, 115, 170, 103], body_to_save: None, events: [Event { key: EventKey([107, 49, 191, 124, 208, 102, 154, 29, 0, 157, 200, 0, 235, 202, 88, 244, 6, 55, 187, 125, 179, 89, 112, 246, 93, 209, 228, 161, 221, 181, 95, 21, 84, 76, 236, 133, 242, 55, 105, 91, 108, 197, 254, 41, 99, 236, 205, 96, 2, 153, 30, 87, 51, 110, 245, 255, 143]), value: EventValue([143, 135, 142, 210, 26, 230, 33, 139, 128, 208, 165, 170, 112, 19]) }, Event { key: EventKey([219, 239, 119, 134, 195, 182, 132, 2, 45, 212, 169, 24, 204, 186, 51, 96, 224, 4, 165, 64, 149, 122, 154, 80, 84, 1, 172, 109, 25, 162, 103, 118]), value: EventValue([75, 89, 131, 17, 74, 87, 150, 131, 144, 242, 151, 223, 160, 55, 115, 229, 173, 141, 149, 164, 29, 208, 238, 95, 244, 160, 145, 110, 48, 29, 217, 63, 12, 176, 230, 236, 19, 122, 109, 250, 120, 154, 150, 233, 121, 97, 228, 93, 186, 95, 181, 231, 22, 37, 18, 51, 181, 29, 25, 157, 246, 151, 187, 51, 82, 27, 159, 154, 76, 207, 25, 226, 85, 202, 203, 1, 125, 1, 246, 126, 100, 89, 246, 231, 80, 179]) }, Event { key: EventKey([223, 112, 139, 245, 2, 242, 54, 238, 68]), value: EventValue([245, 58, 56, 182, 31, 243, 221, 95, 190, 129, 111, 179, 149, 38, 14, 105, 71, 235, 157, 244, 63, 237, 173, 29, 9, 114, 83, 177, 162, 0, 148, 38, 117, 236, 8, 144, 74, 150, 49, 80, 24, 10, 121, 116, 18, 187, 0]) }, Event { key: EventKey([87]), value: EventValue([211, 1, 42, 132]) }], receipt: 1471751824 }, TransactionReceipt { tx_hash: [152, 56, 101, 16, 19, 179, 147, 109, 67, 178, 226, 19, 86, 195, 25, 105, 231, 10, 3, 11, 238, 104, 52, 93, 185, 217, 138, 61, 252, 57, 246, 68], body_to_save: Some([96, 158, 135, 209, 208, 1, 110, 100, 143, 164, 69, 218, 109, 152, 61, 161, 151]), events: [Event { key: EventKey([5, 70, 116, 182, 34, 42, 110, 155, 143, 63, 232, 151, 222, 38, 108, 47, 30, 214, 132, 209, 150, 222, 203, 198, 189, 147, 153, 74, 188, 121, 118, 250, 65, 170, 31, 117, 14, 111, 60, 77, 105, 34, 169, 40, 104, 47, 70, 68, 82, 42, 153, 46, 66, 160, 27, 109, 147, 216, 199, 45, 155, 187, 175, 74, 25, 151, 195, 62, 94, 195, 176, 98, 126, 112, 117, 150, 77, 218, 183, 66, 206, 71, 151, 35, 60, 99, 154, 54, 48, 241, 92, 184, 6, 146]), value: EventValue([230, 161, 17, 1, 134, 248, 183, 254, 124, 67, 87, 26, 4, 183, 162, 137, 223, 103, 135, 201, 229, 244, 165, 14, 53, 154, 33, 89, 75, 33, 41, 102, 113, 16, 237, 218, 115, 207, 81, 8, 156, 36, 236, 223, 40, 58, 248, 88, 133, 20, 105, 122, 176, 111, 192, 60, 6, 141, 107, 78, 9, 207, 139, 71, 153, 135, 126, 191, 139, 173, 100, 103, 117, 200, 104, 131, 205, 102, 10, 25, 246, 126, 151, 233, 183, 22, 182, 115, 26, 120, 22, 30, 246]) }, Event { key: EventKey([174]), value: EventValue([124, 234, 155, 2, 152, 230, 1, 167, 158, 78, 126, 115, 45, 74, 84, 179, 3, 135, 9, 67, 184, 95, 209, 233, 236, 0, 222, 146, 114, 116, 9, 111, 141, 225, 194, 253, 220, 163, 80, 124, 54, 65, 162, 78, 10, 21, 154, 17, 191, 89, 27, 95, 236, 109, 128, 230, 38, 193, 13, 46, 177, 46, 174, 49, 150, 8, 202, 84, 184, 140, 27, 207, 6, 197, 7, 221, 240, 195, 44, 168, 158]) }, Event { key: EventKey([121, 152, 165, 86, 182, 133, 80, 58, 53, 14, 209, 167, 31, 248, 61, 96, 52, 41, 202, 76, 176, 34, 144, 118, 41, 81, 206, 185, 238, 76, 47, 166, 253, 177, 147, 224, 111, 122]), value: EventValue([199, 245, 34, 134, 74, 214]) }, Event { key: EventKey([179, 241, 28, 147, 64, 97, 136, 208, 33, 168, 230]), value: EventValue([18, 244, 31, 246, 138, 9, 98, 109, 149, 109, 234, 97, 48, 175, 181, 5, 130, 74, 15, 164, 226, 76, 51, 163, 44, 61, 207, 36, 0, 153, 188, 196, 251, 203, 254, 25, 202, 247, 177, 248, 18, 181, 123, 137, 57, 168, 50]) }, Event { key: EventKey([233, 223, 201, 221, 37, 3, 158, 221, 171, 103, 108, 14, 205, 205, 164, 152, 235, 250, 190, 94, 140, 25, 211, 156, 165, 39, 206, 102, 224, 90, 149, 216, 141, 28, 108, 222, 104, 45, 144, 116, 185, 40, 215, 138, 181, 229, 143, 198, 29, 55, 11, 67, 105, 133, 113, 98, 25, 133, 8, 176, 119, 40, 13, 236, 142, 175, 105, 242, 106, 115, 137, 132, 141, 179, 90, 97, 218, 93, 209, 73, 81, 37]), value: EventValue([146, 15, 14, 205, 130, 39, 87, 21, 141, 243, 92, 9, 229, 195, 7, 177, 141, 139, 108, 36, 192, 139, 210, 163, 227, 84, 15, 240, 243, 207, 119, 113, 91, 63, 50, 144, 84, 179, 169, 158, 238, 69, 235, 194, 219, 154, 179]) }, Event { key: EventKey([127]), value: EventValue([159, 189, 222, 201, 55, 223, 135, 67, 201, 17, 86, 86, 188, 168, 138, 197, 185, 152, 107, 133, 202, 183, 45, 208, 9, 24, 179, 58, 120, 149, 229, 6, 34, 45]) }, Event { key: EventKey([]), value: EventValue([54, 245, 160, 13, 203, 123, 95, 138, 81, 108, 84, 72, 40, 227, 20, 148, 224, 75, 212, 212, 79, 253, 253, 164, 22, 75, 255, 25, 235, 153, 251, 21, 188, 86, 179, 55, 33, 187, 161, 152, 44, 104, 3, 15, 102, 109, 22, 102, 69, 167, 18, 43, 59, 99, 190, 52, 26, 133, 131, 147, 94]) }], receipt: 792208976 }, TransactionReceipt { tx_hash: [91, 122, 152, 130, 74, 219, 153, 220, 105, 21, 98, 229, 161, 100, 30, 180, 21, 198, 89, 144, 109, 196, 210, 45, 134, 82, 176, 136, 79, 93, 20, 141], body_to_save: None, events: [Event { key: EventKey([206, 157, 12, 61, 102, 39, 146, 87, 251, 36, 103, 19, 249, 84, 125, 240, 31, 127, 192, 129, 246, 63, 66, 148, 44, 218, 173, 81, 54, 28, 93, 172, 40, 17, 91, 114, 6, 46, 50, 206, 161, 215, 179, 108, 9, 176, 12, 152, 14]), value: EventValue([123, 140, 79, 38, 121, 205, 217, 34, 126, 241, 24, 126, 70, 83, 213, 178, 84, 43, 183, 204, 124, 103, 89, 212, 185, 205, 123, 9, 142, 134, 175, 95, 46, 6, 115, 67, 166, 250, 205, 236, 130, 218, 110, 226, 226, 235, 183, 32, 217, 174, 206, 145, 101, 29, 75, 11, 100, 221, 25, 113, 230, 21, 163, 52, 32]) }, Event { key: EventKey([176, 39, 79, 237, 122, 100, 80, 30, 63, 192, 208, 126, 86, 176, 126, 170, 37, 183, 4, 88, 210, 49, 85, 50, 144, 81, 10, 214, 56, 26, 164, 49, 225, 188, 151, 154, 121, 84, 134, 245, 157, 67, 244, 153, 28, 203, 45, 63, 223, 221, 145, 129, 191, 59, 185, 5, 105, 225, 10, 104, 50, 243, 78, 187, 232, 7, 172, 147, 28, 21, 44, 85, 32, 17, 1, 229, 117, 145, 190, 87]), value: EventValue([41, 236, 79, 213, 226, 232, 91, 1, 165, 156, 162, 5, 21, 145, 171, 193, 235, 222, 39, 201, 1, 29, 155, 253, 18, 120]) }], receipt: 465131364 }, TransactionReceipt { tx_hash: [31, 91, 37, 128, 16, 54, 28, 115, 211, 88, 158, 169, 255, 181, 69, 157, 71, 182, 49, 250, 248, 151, 6, 1, 186, 191, 111, 148, 215, 199, 179, 100], body_to_save: None, events: [Event { key: EventKey([114, 77, 188, 180, 249, 47, 99, 167, 199, 10, 65, 28, 250, 201, 21, 131, 134, 53, 221, 68, 138, 95, 131, 52, 24, 55, 188, 246, 83, 48, 175, 189, 1, 226, 239, 165, 11, 170, 212, 228, 51, 142, 7, 183]), value: EventValue([]) }, Event { key: EventKey([137, 234, 174, 226, 146, 29, 40, 140, 7, 35, 37, 97, 192, 71, 50, 26, 35, 252, 48, 200, 154, 252, 88, 204, 240, 75, 156, 138, 156, 143, 225, 119, 63, 209, 7, 58, 21, 140, 37, 132, 92, 198, 201, 102, 57, 33, 201, 168, 129, 118, 130, 242, 245, 41, 46, 95, 140, 51, 76, 70, 114, 26, 17, 189, 11, 90, 113, 200, 57, 127, 2, 66, 99, 9, 59, 13, 91, 24, 169, 155, 116, 124, 147, 4, 126, 30, 26, 166, 247, 63, 56, 1, 223, 88, 246, 216]), value: EventValue([9, 194, 202, 196, 10, 153, 63, 105, 158, 54, 252, 26, 5, 21, 71, 87, 234, 55, 136, 23, 40, 36, 183, 42, 84, 19, 154, 62, 167]) }], receipt: 3429230760 }, TransactionReceipt { tx_hash: [254, 150, 162, 233, 246, 236, 176, 234, 66, 27, 136, 118, 134, 30, 247, 109, 57, 43, 238, 164, 55, 171, 69, 142, 205, 212, 176, 241, 249, 186, 77, 96], body_to_save: None, events: [Event { key: EventKey([103, 82, 28, 162, 156, 136, 155, 105, 4, 108, 52, 38, 15, 114, 29, 82, 200, 142, 241, 246, 144, 93, 220, 140, 58, 71, 207, 150, 81, 219, 105, 112, 61, 216, 40, 73, 73, 47, 6, 28, 6, 160, 127, 213, 192, 157, 183, 143, 48, 196, 148, 229, 201, 165, 232, 36, 204, 128, 113]), value: EventValue([161, 57, 240, 214, 213, 177, 14, 77, 18, 122, 173, 63, 252, 223, 43, 208, 111, 102, 236, 110, 150, 69, 43, 11, 155, 179, 151, 46, 49, 199, 141, 155, 63, 197, 20, 152, 81, 168, 21, 221, 53, 24, 34, 143, 107, 141, 141, 177, 253, 218, 214, 238, 200, 92, 178, 83, 234, 108, 143, 48, 66, 237, 143, 157, 110, 173, 23, 184, 138, 122, 187, 191, 58]) }, Event { key: EventKey([185, 83, 149, 201, 66, 128, 83, 132, 152, 13]), value: EventValue([113, 171, 68, 196, 156, 31, 145, 72, 143, 232, 247, 147, 92, 62, 59, 93, 117, 15, 189, 211, 60, 203, 230, 187, 14]) }, Event { key: EventKey([179, 138, 11, 1, 145, 22, 224, 169, 246, 187, 137, 196, 238, 153, 224, 137, 169, 248, 75, 0, 239, 41, 67, 78, 113, 71, 0, 129, 166, 66, 13, 123, 200, 206, 55, 184, 97, 46, 28, 206, 0, 237, 240, 157, 38, 202, 16, 106, 37, 107, 22, 130, 38, 207, 38, 84, 104, 76, 171, 240, 219, 58, 78, 246]), value: EventValue([209, 161, 95, 240, 187, 93, 128, 116, 40, 196, 66, 141, 143, 17, 125, 76, 240, 45, 60, 219, 207, 207, 253, 112, 92, 173, 210, 89, 18, 105, 57, 181, 98, 143, 177, 120, 190, 71, 211, 139, 126, 37, 55, 98, 50, 194, 2, 153, 14, 176, 123, 68, 126, 129, 81, 242, 142, 247, 194, 124, 47, 32, 43, 38, 58, 213, 105, 248, 71, 117]) }, Event { key: EventKey([136, 215, 23, 1, 32, 177, 130, 198, 149, 7, 156, 177, 233, 85, 29, 147, 106]), value: EventValue([232]) }, Event { key: EventKey([40, 51, 140, 89, 115, 230, 129, 124, 29, 193, 221, 196, 238, 87, 181, 154, 232, 181, 192, 236, 141, 85, 99, 142, 197, 36, 11, 54, 189, 94, 92, 143, 21, 166, 146, 254, 119, 239, 154, 146, 154, 11, 24, 124, 54, 251, 215, 188, 30, 15, 153, 44, 110, 55, 136, 26, 110, 87, 199, 166, 251, 54, 93, 164, 180, 8, 47, 76, 158, 234, 143, 190, 207, 143, 235, 55, 156, 113, 18, 218, 3, 99, 180, 18, 11, 208, 253, 24, 47, 27, 214, 155, 112, 180, 245, 135, 126]), value: EventValue([198, 136, 255, 16, 247, 196, 30, 65, 74, 231, 182, 58, 145, 93, 42, 21, 197, 8, 214, 133, 125, 113, 206, 143, 102, 186, 178, 161, 193, 108, 44, 137, 180, 175, 179, 97, 175, 171, 112, 241, 210, 221, 71]) }, Event { key: EventKey([218, 232, 56, 19, 6, 174, 145, 55, 120, 100, 199, 116, 77, 102, 24, 162, 239, 165, 228, 176, 90, 125, 250, 225, 64, 187, 19, 239, 102, 72, 169, 21, 211, 140, 37, 118, 58, 101, 186, 47, 137, 145, 242, 239, 254, 12, 117, 132, 175, 148, 0, 31, 202, 213, 102, 202, 132, 12, 207, 172, 36, 98, 200, 36, 48, 242, 213, 94, 105, 217, 97, 172, 80, 108, 165, 113, 220, 210, 246, 236, 240, 85, 149, 24, 211]), value: EventValue([43, 46, 132, 214, 107, 133, 207, 106, 235, 142, 202, 23, 47, 125, 229, 125, 119, 206, 151, 196, 39, 23, 149, 219, 225, 131, 243, 243, 156, 75, 202, 73, 6, 255, 107, 239, 217, 64, 14, 19, 96, 223, 74, 95, 52, 103, 9, 129, 38, 88, 201, 42, 71, 76]) }, Event { key: EventKey([156, 146, 84, 29, 24, 74, 100, 159, 188, 47, 20, 69, 70, 33, 162, 82, 152, 83, 77, 168, 169, 222, 245, 40, 48, 0]), value: EventValue([189, 2, 77, 115, 202, 157, 188, 38, 160, 67, 223, 0, 28, 130, 185, 249, 48, 38, 174, 118, 178, 170, 241, 156, 76, 112, 192, 144, 120, 152, 189, 199, 156, 38, 79, 31, 194, 91, 218, 187, 186, 110, 131, 236, 243, 123, 97, 207, 68, 225, 149, 4, 246]) }, Event { key: EventKey([6, 45, 111, 204, 203, 205, 112, 48, 132, 181, 0, 137, 90, 167, 154, 233, 60, 156, 25, 127, 212, 175, 231, 93, 53, 15, 162, 125, 82, 222, 192, 26, 27, 195, 13, 127, 127, 38, 233, 218, 253, 18, 255, 167, 57, 59, 202, 194, 73, 156, 117, 162, 174, 16, 46, 213, 50, 224, 218, 61, 49, 74, 250, 181, 253, 211, 74, 137, 29, 117, 186, 40, 235, 125, 115, 123, 244, 50, 9, 25, 109, 130, 98, 78, 63, 51, 92, 78, 120, 171, 133, 140, 238, 162, 177, 196, 56, 35, 4]), value: EventValue([207, 214, 195, 191, 92]) }, Event { key: EventKey([214, 126, 231, 89, 226, 12, 233, 20, 27, 116, 207, 93, 226, 11, 229, 90, 245, 192, 66, 200, 64, 128, 41, 187, 187, 69, 6]), value: EventValue([159, 10, 58, 214, 111, 155, 52, 29, 222, 10, 144, 181, 82, 5, 253, 165, 32, 37, 205, 149, 243, 47, 113, 211, 178, 4, 250, 115, 201, 35, 227, 45, 3, 54, 66, 199, 97, 222, 194, 2, 117, 48, 137, 199, 120, 85, 56, 206, 253, 64, 39, 212, 194, 56, 110, 106, 119, 0, 125, 182, 150, 29, 120, 18, 1, 189, 205, 34, 166, 99, 117, 247, 136, 63, 109, 52, 247, 255, 243, 247, 20, 159, 19, 156, 156, 172, 99, 172, 105, 133, 41, 226, 11]) }], receipt: 2108281183 }, TransactionReceipt { tx_hash: [136, 152, 1, 246, 133, 148, 78, 191, 20, 99, 229, 32, 109, 97, 49, 170, 133, 51, 234, 23, 79, 205, 182, 4, 237, 248, 55, 23, 230, 87, 53, 142], body_to_save: None, events: [Event { key: EventKey([215, 51, 244, 197, 178, 75, 11, 33, 32, 131, 136, 76, 56, 163, 238, 83, 83, 157, 15, 57, 34, 241, 98, 187, 41, 177, 82, 180, 182, 24, 14]), value: EventValue([102, 214, 114, 127, 191, 185, 242, 74, 31, 191, 103, 114, 92, 212, 146, 146, 175, 155, 148, 90, 25, 235, 102, 216, 90, 185, 161, 90, 107, 216, 63, 71, 73, 121, 129, 232, 120, 196, 211, 164, 16, 137, 201, 124, 178, 106, 183, 163, 31, 177, 42, 15, 194, 45, 253, 127, 200, 177, 174, 81, 77, 253, 72, 17, 96]) }, Event { key: EventKey([8, 203, 145, 249, 28, 237, 50, 137, 117, 177, 217, 164, 94, 123, 185, 202, 31, 98, 150, 228, 205, 252, 222, 98, 193, 208, 74, 237, 167, 134, 189, 135, 183, 207]), value: EventValue([142, 196, 236, 121, 216, 102, 175, 123, 48, 29, 209, 18, 157, 229, 161, 97, 179, 196, 196, 144, 200, 80, 196, 182, 208, 222, 52, 186, 234, 0, 127, 67, 41, 65, 143, 32, 8, 124, 232, 53, 68, 34, 149, 55, 82]) }, Event { key: EventKey([159, 156, 28, 233, 182, 182, 204, 128, 13, 145, 46, 150]), value: EventValue([196, 183, 213, 168, 125, 141, 250, 120, 104, 51, 125, 44, 234, 91, 157, 83, 15, 88, 191, 103, 127, 211, 48, 199, 95, 157, 158, 8, 194, 154, 225, 160, 193, 39, 166, 219, 69, 175, 143, 13, 35, 215, 135, 125, 122, 205, 237, 191, 60, 79]) }], receipt: 3985325273 }], phantom_data: PhantomData }], num_txs: 8, num_events: 36 }], {1: (1, 5), 5: (21, 23), 3: (10, 14), 6: (23, 25), 8: (34, 37), 4: (14, 21), 2: (5, 10), 7: (25, 34)}, 2), random_batch_num = 48 -cc 2e4460739ff01b5018dd6e58b68629afc18e5a0378a71e39d8af83cf95619246 # shrinks to (slots, _, total_num_batches) = ([SlotCommit { slot_data: MockBlock { header: MockBlockHeader { prev_hash: 0x0000000000000000000000000000000000000000000000000000000000000000, hash: 0x0000000000000000000000000000000000000000000000000000000000000000, txs_commitment: 0x0000000000000000000000000000000000000000000000000000000000000000, height: 0, time: Time { secs: 1717416663, nanos: 16884000 } }, validity_cond: MockValidityCond { is_valid: true }, blobs: [] }, batch_receipts: [BatchReceipt { batch_hash: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 242, 90, 51, 89, 240, 154, 150, 28], tx_receipts: [TransactionReceipt { tx_hash: [44, 36, 66, 154, 249, 193, 104, 136, 128, 232, 33, 214, 151, 114, 229, 191, 200, 168, 194, 254, 133, 255, 40, 169, 92, 49, 164, 190, 51, 121, 159, 88], body_to_save: None, events: [Event { key: EventKey([231, 73, 179, 20, 210, 27, 221, 65, 247, 104, 118, 133, 76, 131, 230, 107, 131, 63, 140, 110, 34, 72, 124, 38, 174, 151, 248, 182, 206, 67, 104, 42, 108, 114, 187, 11, 32, 11, 186, 224, 240, 93, 60, 159, 148, 210, 20, 250, 233, 76, 163, 248, 202, 56, 84, 198, 108, 74, 245, 200, 240, 28, 102, 50, 213, 163, 77, 110, 238, 204, 20, 47, 204, 177]), value: EventValue([233, 177, 36, 119, 252, 132, 188, 198, 221, 116, 102, 127, 151, 242, 79, 70, 6, 166, 193, 200, 199, 160, 96, 245, 255, 182, 92, 7, 10, 202, 200, 137, 61, 199, 42, 153, 21, 129, 94, 186, 27, 129, 72, 101, 60, 79, 31, 14, 174, 14, 167, 163, 124, 235, 177, 45, 169, 122, 120, 15, 174, 83, 65, 160, 219, 33]) }, Event { key: EventKey([70, 233, 157, 204, 19, 153, 154, 175, 102, 7, 28, 117, 14, 212, 175, 238, 31, 187, 47, 59, 246, 90, 50, 124, 97, 153, 172, 231, 163, 238, 87, 53, 149, 109, 216, 178, 31, 70, 202, 29, 102, 84, 18, 78, 120, 220, 198, 37, 121, 106, 64, 39, 210, 234, 74, 118, 179, 38, 235, 62, 11, 134, 99, 231, 35, 102, 229, 57]), value: EventValue([215, 254, 225, 169, 189, 95, 108, 76, 158, 152, 43, 214, 66, 82, 200, 189, 149, 147, 215, 236, 252, 133, 148, 89, 110, 91, 154, 132, 143, 89, 72, 183, 102, 227, 118, 141, 71, 145, 78, 133, 216, 135, 163, 112, 228, 211, 129, 224, 199, 206, 243, 155, 134, 235, 148, 65, 122, 73, 246, 26, 211, 243, 74, 74, 175, 227, 143, 4, 122, 59, 40, 178, 132, 208, 122, 161, 92, 54]) }, Event { key: EventKey([34, 248, 110, 120, 155, 102, 247, 123, 111, 132, 172, 167, 91, 231, 238, 35, 182, 76, 24, 155, 235, 211, 251, 245, 92, 160, 189, 105, 62, 136, 179, 131, 27, 227, 202, 168, 1, 246, 127, 49, 188, 28, 226, 212, 181, 159, 80, 117, 239, 211, 8, 203, 47, 180, 121, 189, 149, 210, 183, 108, 13, 136, 82, 254, 201, 222, 195, 225, 154, 96, 14, 224, 222, 30, 86, 73, 113, 47]), value: EventValue([160, 83, 20, 214, 149]) }, Event { key: EventKey([27, 213, 202, 232, 225, 47, 164, 113, 47, 199, 111, 223, 135, 238, 215, 168, 139, 7, 18, 182, 202, 233, 5, 156, 195, 35, 51, 174, 10, 60, 165, 235, 222, 74, 202, 181, 208, 86, 34, 40, 239, 190, 239, 226, 19, 76, 41, 33, 219, 254, 155, 191, 233, 178, 3, 52, 42, 132, 223, 179]), value: EventValue([51]) }], receipt: 3994070599 }, TransactionReceipt { tx_hash: [78, 88, 240, 142, 148, 216, 140, 167, 1, 151, 45, 97, 7, 205, 35, 98, 214, 170, 199, 41, 174, 185, 218, 57, 160, 98, 236, 123, 195, 165, 16, 50], body_to_save: None, events: [Event { key: EventKey([172, 50, 26, 219, 39, 140, 91, 125, 143, 213, 75, 204, 113, 10, 138, 205, 10, 135, 138, 176, 171, 199, 192, 142, 3, 56, 114, 171, 116, 190, 251, 129, 36, 226, 162, 189, 179, 199, 206, 213, 185, 125, 126, 172, 4, 225, 165, 122, 238, 23, 1, 81, 187, 120, 216, 222, 77, 42, 34, 137, 140, 39, 27, 82, 197, 239, 179, 155, 230, 81, 123, 152, 83, 134, 12, 242, 195, 26, 67, 167, 29, 59, 58, 52, 212, 85, 201, 73, 165, 236, 69, 88, 41, 233, 36, 164]), value: EventValue([44, 150, 117, 119, 205, 86, 119, 235, 24, 23, 71, 132, 236, 118, 192, 208, 239, 85, 32, 88, 59, 162, 225, 222, 105, 240, 72, 140, 177, 247, 91, 130, 221, 223, 118, 62, 235, 30, 65, 170, 110, 217, 139, 11, 96, 94, 23, 125]) }, Event { key: EventKey([147, 170, 104, 170, 96, 91, 16, 105, 20, 220, 101, 81, 242, 48, 154, 112, 110, 55, 213, 172, 50, 15, 189, 0, 181, 226, 190, 134, 188, 111, 105, 148, 181, 35, 212, 131, 59, 81, 136, 195, 247, 22, 7, 74, 107, 32, 164, 177, 228, 53, 26, 45, 147, 84, 148, 123, 252, 195, 1, 123, 75, 80, 147, 221, 229]), value: EventValue([77, 137, 189, 169, 54, 230, 198, 160, 170, 71, 233, 199, 72, 205, 169, 211, 152, 221, 131, 33, 230, 198, 109, 52, 34, 62, 18, 85, 203, 247, 228, 199, 30, 176, 68, 91, 186, 170, 93, 67, 61, 55, 97, 150, 11, 152, 216, 13, 253, 220, 181, 71, 211, 90, 177, 81, 103, 151, 194, 211, 241, 183, 9, 81, 155, 199, 35, 78, 255, 68, 173, 115]) }, Event { key: EventKey([222, 174, 218, 164]), value: EventValue([172, 39, 225]) }, Event { key: EventKey([95, 238, 237, 184, 103, 26, 2, 45, 15, 231]), value: EventValue([111, 190, 236, 219, 195, 149, 187, 34, 205, 13, 29, 88, 65, 129, 218, 176, 244, 18, 208, 35, 248, 140, 81, 237, 199, 65, 67, 69, 222, 236, 231, 95, 112, 232, 189, 41, 170, 61, 208, 97, 132, 186, 133, 149, 214, 191, 250, 96, 195, 78, 31, 70, 95, 30, 130, 47, 31, 249]) }, Event { key: EventKey([235, 16, 26, 96, 52, 125, 145, 4, 108, 124, 137, 94, 17, 222, 157, 54, 16, 205, 80, 183, 157, 225, 36, 201, 199, 173, 26, 175, 143, 56, 76, 118, 54, 220, 37, 175, 212, 104, 13, 99, 127, 228, 28, 176, 95, 32, 158, 165, 86, 13, 156, 175, 159, 73, 147, 0, 218, 209, 18, 150, 42, 29, 193, 232, 183, 116, 120, 185, 46, 58, 226, 114, 165, 10]), value: EventValue([163, 58, 135, 250, 163, 221, 172, 202, 49, 25, 210, 39, 199, 14, 39, 45, 27, 222, 48, 21, 3, 168, 52, 170, 127, 73, 173, 102, 163, 162, 161, 95, 167, 54, 4, 242, 13, 199, 179, 164, 173, 245, 123, 156, 217, 106, 11, 6, 101, 70, 76, 73, 60, 76, 24, 23, 106, 227, 233, 80, 173, 14, 134, 46, 16, 40, 19, 149, 252, 16, 253, 9]) }, Event { key: EventKey([99]), value: EventValue([249, 91, 78, 110, 140, 174, 165, 204, 27, 101, 164, 232, 208, 244, 23, 234, 140, 145, 157, 191, 32, 55, 235, 45, 120, 161, 63, 41, 23, 168, 160, 217, 131, 185, 114, 18, 110, 55, 30, 126, 240, 176, 227, 118, 132, 131, 4, 218, 77, 25, 243, 73, 226, 108, 55, 178, 15, 217, 166, 248, 193, 59, 35, 178, 209, 29, 65, 117, 193, 176, 198, 151, 39, 222, 241, 165, 229, 173, 188, 74, 214]) }], receipt: 2475854702 }, TransactionReceipt { tx_hash: [248, 176, 63, 254, 46, 27, 84, 91, 157, 76, 0, 76, 90, 208, 229, 193, 44, 193, 117, 167, 213, 134, 124, 188, 188, 65, 207, 161, 111, 16, 38, 108], body_to_save: None, events: [], receipt: 3392719712 }, TransactionReceipt { tx_hash: [153, 48, 55, 41, 19, 114, 85, 15, 180, 90, 133, 253, 243, 67, 197, 146, 244, 221, 237, 219, 203, 232, 254, 104, 98, 81, 92, 208, 51, 241, 10, 77], body_to_save: Some([52, 123, 51, 242, 244, 8, 203, 215, 58, 189, 88, 123, 152, 115, 104, 164, 35, 100, 227, 70, 97, 219, 245, 74, 37, 52, 66, 148, 9, 192, 76, 60, 144, 155, 32, 14, 53, 70, 87, 222, 232, 9, 225, 95, 50, 244, 32, 116, 43, 183, 108, 100, 190, 76, 209, 41, 110, 134, 3, 190, 128, 117, 162, 184, 236, 240, 113, 119, 162, 221, 158, 222, 164, 41, 131, 143, 127, 216, 10, 164, 194, 71, 174, 32, 50, 20, 133, 234, 134, 174, 24, 133, 53, 197, 143, 131, 86]), events: [Event { key: EventKey([211, 198, 183, 173, 171, 45, 18, 165, 235, 55, 158, 237, 158, 84, 218, 218, 65, 168, 86, 3, 155, 96, 158, 221, 113, 138, 97, 43, 225, 36, 45, 102, 60, 94, 244, 109, 133, 189, 199, 34, 121, 236, 213, 106, 201, 239, 160, 207, 15, 58, 103, 130, 194, 139, 243, 234, 118, 159, 243, 4, 144, 224, 67, 13]), value: EventValue([181, 22, 198, 132, 103, 252, 213, 99, 194, 36, 144, 22, 225, 140, 242, 173, 227, 46, 188, 236, 80, 252, 36, 250, 180, 189, 96, 1, 218, 39, 53, 162, 194, 95, 95, 220, 97, 67, 56]) }], receipt: 2874852529 }, TransactionReceipt { tx_hash: [81, 226, 62, 86, 165, 198, 15, 155, 141, 223, 48, 206, 58, 30, 254, 145, 250, 120, 58, 57, 128, 214, 1, 49, 115, 235, 37, 103, 53, 65, 224, 86], body_to_save: Some([107, 79, 8, 63, 12, 188, 166, 26, 122, 108, 152, 118, 195]), events: [Event { key: EventKey([45, 181, 84, 133, 70, 70, 196, 148, 105, 122, 31, 227, 170, 186, 121, 213, 141, 60, 150, 199, 209, 72, 164, 34, 209, 96, 155, 51, 212, 66, 72, 172, 22, 237, 48, 84, 233, 36, 154, 20, 135, 132, 16, 101, 199, 111, 127, 253, 47, 111, 164, 76, 229, 175, 44, 43, 234, 205, 170, 215, 142, 216, 218, 172, 249, 238, 93, 184, 64, 19, 150, 79, 23, 149, 38, 166, 23, 125, 189, 181, 215, 11, 232, 136, 222]), value: EventValue([74, 130, 154, 44, 192, 80, 61, 186, 49, 38, 153, 49, 181, 255, 203, 45, 201, 63, 229, 26, 51, 86, 222, 146, 39, 165, 230, 135, 48, 218, 42, 87, 219, 197, 180, 194, 225, 84, 200, 220, 166, 188, 181, 198, 168, 150, 204, 65, 199, 236, 233, 112, 61, 41, 128, 42, 225, 255, 102, 137, 54, 34, 13, 123, 234, 36, 185, 12, 61, 75, 128, 250, 219, 19, 200, 221, 180, 179, 207]) }, Event { key: EventKey([122, 136, 161, 63, 32, 214, 225, 61, 39, 79, 202, 201, 58, 195, 206, 240, 133, 128, 85, 41, 179, 23, 56, 227, 45, 69, 143, 127, 64, 180, 77, 0, 33, 46, 0, 87, 33, 70, 220, 190, 41, 217, 101]), value: EventValue([203, 156, 250, 128, 203, 138, 240, 102, 146, 233, 184, 147, 54, 116, 129, 171, 179, 18, 106, 14, 57, 204, 251, 106, 128, 25, 187, 11, 1, 138, 249, 156, 154, 36, 216, 193, 51, 226, 105, 136, 43, 31, 178, 147, 97, 18, 163, 35, 76, 176, 152]) }, Event { key: EventKey([247, 186, 92, 105, 239, 172, 37, 145, 92, 120, 178, 34, 59, 239, 59, 61, 120, 176, 108, 47, 7, 242, 185, 99, 32, 239, 64, 55, 230, 244, 127, 28, 182, 132, 175, 169, 139, 122, 79, 94, 228, 184, 118, 188, 134, 211, 58, 94, 113, 240, 0, 200, 144, 176, 150, 105, 216, 5, 130, 69, 128, 85, 131, 13, 134, 10, 3, 97, 239, 83, 140, 47, 66, 62, 179, 193, 186, 190, 165, 174, 179, 6, 74, 217, 74]), value: EventValue([54, 76, 21, 242, 217, 204, 110, 120, 79, 86, 112, 247, 178, 200, 59, 78, 68, 196, 21, 57, 44, 81, 144, 198, 251, 81, 53, 238, 68, 222, 102, 238, 177, 51, 49, 123, 202, 119, 168, 173, 79, 206, 36, 111, 42, 25, 130, 154, 95, 81, 57, 116, 145, 14, 51, 96, 132, 114, 28, 155, 58, 6, 57, 62, 6, 205, 225, 152, 111, 11, 206, 190, 150, 245, 96, 17, 143, 50, 76, 207, 197, 60, 118, 18, 207, 228, 235, 135, 37, 12, 125, 149, 205, 6]) }, Event { key: EventKey([6, 165, 7, 54, 215, 22, 141, 30, 3, 228, 32, 98, 109, 21, 244, 241, 53, 131, 214, 36, 158, 144, 141]), value: EventValue([177, 220, 234, 233, 189, 112, 253, 71, 110, 83, 100, 59, 240, 222, 57, 232, 34, 237, 186, 218, 209, 211, 71, 236, 78, 116, 64, 226, 79, 45, 92, 27, 49, 75, 97, 23, 67, 98, 141, 123, 109, 147, 238, 214, 112, 196, 244, 52, 209, 80, 199, 212, 154, 41, 198, 30, 155, 113, 199]) }, Event { key: EventKey([101, 112, 228, 18, 13, 214, 136, 112, 46, 14, 185, 128, 204, 4, 77, 111, 22, 54, 182, 245, 234, 188, 90, 193, 17, 203, 157, 17, 23, 50, 37, 112, 31, 86, 150, 129, 155, 208, 135, 21, 93, 21, 159, 178, 120, 33, 227, 150, 238, 39]), value: EventValue([164, 202, 184, 171, 200, 138, 224, 81, 89, 89, 135, 11, 131, 72, 231, 214, 25, 48, 252, 7, 75, 187, 181, 190, 232, 172, 129, 167]) }, Event { key: EventKey([158, 179, 239, 67, 236, 195, 117, 123, 19, 134, 87, 175, 98, 196, 30, 167, 250, 169, 31, 241]), value: EventValue([131, 178, 182, 101, 240, 187, 34, 218, 246, 245, 97, 81, 113, 231, 128, 42, 188, 79, 69, 63, 203, 92, 155, 143, 46, 238, 93, 16, 35, 14, 57, 250, 188, 46, 161, 203, 202, 143, 220, 243, 75, 187, 180, 160]) }, Event { key: EventKey([142, 171, 47, 254, 62, 166, 209, 167, 197, 120, 198, 202, 185, 157, 242, 174, 96, 32, 68, 182, 65, 45, 209, 36, 254, 157, 238, 18, 65, 222, 227, 146, 62, 25, 15, 227, 103, 218, 52, 36, 95, 157, 98, 220, 23, 114, 80, 35, 124, 42, 180, 2, 200, 155, 192, 121, 139, 120, 97, 154, 193, 163, 189, 107, 28, 138, 87, 237, 60, 92, 176, 121, 22, 213, 248, 83, 77, 77, 123, 4, 248, 178, 56, 169]), value: EventValue([114, 224, 181, 63, 40, 36, 151, 242]) }, Event { key: EventKey([46, 240, 186, 89, 58, 233, 3, 170, 107, 180, 108, 94, 149, 192, 27, 181, 41, 157, 203, 168, 103, 160, 177, 174, 20, 42, 157, 171, 209, 64, 55, 161, 47, 197, 99, 243, 197, 116, 41, 155, 3, 133, 209, 57, 188, 191, 139, 173, 158, 103, 162, 204, 229, 103, 161, 215, 154, 107, 124, 141]), value: EventValue([69, 62, 60, 226, 140, 81, 253, 87, 233, 197, 42, 247, 43, 20, 132, 247, 48, 30, 160, 189, 137, 40, 145, 29, 120, 32, 6, 131, 98, 63, 87, 172, 179, 41, 251, 174, 209, 116, 28, 176, 13, 210, 49, 103, 240, 148, 87, 103, 162, 156, 150, 29, 185, 3, 108, 64, 9, 95, 251, 16, 98, 145, 145, 192, 83, 25, 51, 180, 189, 221, 214, 77, 41, 144, 146, 177, 65, 222, 209, 139, 241, 37, 43, 46, 6, 195, 133, 235, 106, 40, 187, 68, 22, 68, 249, 64, 54]) }, Event { key: EventKey([173, 2, 121, 63, 239, 95, 185, 193, 158, 146, 177, 153, 183, 235, 18, 53, 117, 66, 28, 70, 127, 36, 149, 148, 151, 65, 152, 191, 194]), value: EventValue([38, 54, 137, 227, 220, 77, 46, 32, 43, 191, 93, 31, 208, 59, 240, 173, 226, 30, 187, 23, 88, 105, 176, 164, 95, 227, 133, 151, 111, 23, 227, 75, 36, 199, 27, 179, 116, 56]) }], receipt: 3560368799 }, TransactionReceipt { tx_hash: [147, 98, 63, 226, 43, 226, 170, 131, 83, 146, 78, 97, 25, 109, 90, 111, 168, 71, 10, 172, 230, 123, 121, 246, 91, 12, 69, 169, 132, 239, 194, 30], body_to_save: Some([184, 49, 75, 198, 147, 192, 10, 103, 4, 210, 23, 98, 159, 244, 252, 148, 48, 107, 102, 243, 120, 74, 20, 82, 80, 169, 124, 250, 15, 231, 252, 27, 233, 32, 235, 47, 252, 221, 180, 169, 33, 117, 158, 137, 210, 170, 172, 117, 85, 39, 254, 226, 66, 63, 81, 218, 95, 106, 174, 214, 146, 149, 120, 251, 215, 226, 81, 145, 149, 112, 246, 78, 53, 176, 140, 162, 250, 74, 71, 42, 63, 7, 176, 220, 119, 231]), events: [Event { key: EventKey([231, 75, 177, 227, 38]), value: EventValue([222, 187, 97, 188, 204, 222, 36, 97, 219, 34, 217, 25]) }, Event { key: EventKey([77, 165, 215, 223, 51, 3, 74, 245, 34, 226, 105, 226, 105, 26, 101, 210, 91, 166, 127, 88, 52, 22, 177, 76, 182, 63, 80, 133, 128, 150, 190, 72, 242, 70, 22, 118, 197, 68, 162, 37, 87, 121, 229, 157, 181, 114, 154, 136, 253, 20, 101, 112, 112, 216, 82, 123, 3, 105, 237, 62, 243]), value: EventValue([50, 118, 222, 182, 133, 183, 55, 34, 32, 109, 186, 25, 211, 213, 22, 38, 86, 225, 8, 90, 66, 25, 160, 119, 18, 70, 176, 195, 241, 161, 195, 188, 173, 48, 99, 44, 191, 101, 44, 99, 136, 190, 180, 37, 85, 92, 246, 135, 144, 120, 21, 74, 53, 239, 92, 65, 229, 195, 79, 72, 189, 122, 55, 186, 58, 212, 12, 102, 37, 117, 80, 213, 140]) }, Event { key: EventKey([2, 105, 62, 160, 175, 131, 56, 139, 201, 32, 38, 251, 238, 46, 92, 43, 134, 16, 186, 135, 31, 188, 43, 54, 92, 62, 96, 230, 83, 118, 141, 47, 88, 164, 29, 89, 73, 141, 155, 2, 158, 238, 176, 96, 15, 64, 12, 143, 69, 177, 123, 96, 67, 241, 90, 94, 78, 150, 141, 187, 13, 163, 90, 140, 118, 97, 168, 147, 94, 109, 244, 231, 154, 20, 110, 204, 101, 57, 106, 229, 218, 92, 255, 163, 246, 79, 154, 74, 138, 205]), value: EventValue([198, 206, 152, 137, 101]) }, Event { key: EventKey([112, 230, 192, 12, 29, 180, 220, 191, 210, 29, 69, 123, 40, 232, 187, 30, 239, 28, 168]), value: EventValue([189, 249, 37, 156, 145, 125, 193, 94, 24, 45, 128, 172, 14, 142, 133, 62, 39, 233, 172, 41, 182, 132, 4, 148, 67, 213, 234, 250, 83, 37, 169, 63, 243, 16, 3, 225, 163, 175, 107, 118, 17, 187, 85, 255, 34, 219, 145, 190, 68, 178, 17, 73, 149, 6, 229, 51, 180, 239, 146, 6, 4, 60, 57, 162, 98, 234, 212, 166, 214, 87, 41, 88, 135, 134, 191, 167, 205, 88, 39, 147, 70, 35, 124, 71, 127, 26, 156]) }, Event { key: EventKey([246, 161, 53, 164, 235, 121, 171, 62, 36, 255, 39, 104, 190, 14, 181, 188, 58, 144, 126, 148, 160, 142, 164, 118, 39, 98, 145, 17, 201, 186, 248, 8, 170, 3, 223, 138, 249, 60, 71, 185, 142, 140, 23, 143, 22, 255, 209, 180, 203, 17, 224, 144, 103, 100, 239, 177, 33, 166, 245, 129, 154, 88]), value: EventValue([102, 81, 18, 222, 49, 121, 138, 246, 95, 249, 243, 48, 3, 182, 110, 113, 196, 82, 214, 118, 248, 77, 243, 194, 211, 22, 253, 212, 90, 241, 141, 6, 202, 238, 240, 165, 68, 197, 129, 10, 254, 33, 56, 143, 0, 128, 203, 145, 36, 143, 212, 53, 239, 60, 235, 11, 193, 92, 254, 103, 41, 80, 95, 35, 73, 103, 104, 191, 164, 53, 192, 11, 38, 228, 137, 81, 179, 143, 55, 10, 173, 179, 233, 241, 128, 87, 182, 112, 101, 130, 70, 125, 234, 211, 199, 223, 164, 96]) }, Event { key: EventKey([51, 242, 134, 79, 209, 137, 131, 96, 141, 126, 26, 245, 59, 75, 149, 110, 160, 72, 52, 41, 187, 172, 243, 234, 226, 162, 96, 8, 43, 99, 72, 34, 98, 56, 198, 82, 185, 87, 19, 21, 66, 207, 200, 14, 75, 38, 93, 59, 95, 133, 24, 22, 136, 51, 244, 212, 47, 27, 76, 232, 26, 19, 89, 115, 122, 242, 211, 186, 74, 215, 5, 224, 229, 155, 244, 52, 97, 145, 18, 184, 191, 89, 106, 34, 190, 213, 73, 136, 171, 208, 120]), value: EventValue([26, 243, 229, 245, 246, 207, 46, 30, 215, 77, 245, 121, 1, 60, 101, 157, 196, 117, 109, 105, 233, 211, 164, 161, 107, 116, 244, 14, 148, 86, 136, 35, 183, 27, 113, 234, 214, 233, 6, 225, 153, 136, 174, 193, 233, 174, 112, 10, 15, 144, 87, 36, 21, 203, 232, 60, 99, 244, 171, 253, 157]) }, Event { key: EventKey([174, 201, 242, 211, 100, 68, 245, 157, 163, 14, 243, 165, 56, 85, 235, 61, 140, 41, 246, 63, 94, 172, 19, 57, 50, 152, 82, 177, 47, 112, 156, 144, 180, 220, 220, 18, 13, 193, 157, 133, 8, 135, 132, 133, 78, 84, 175, 120, 126, 40, 254, 145, 116, 186, 143, 102, 51, 24, 199, 50, 118, 170]), value: EventValue([93, 56, 20, 248, 121, 41, 104, 79, 28, 159, 80, 146, 236, 198, 3, 110, 62, 159, 93, 122, 69, 217, 202, 172, 100, 150, 120, 229, 102, 243, 58, 64, 131, 27, 55, 188, 22, 222, 255, 132, 249, 193, 152, 146, 15, 178, 153, 70, 58, 178, 192, 83, 210, 235, 189, 197, 146, 67, 139, 37, 165, 175, 93, 218, 11, 141, 231, 92, 187, 93, 137, 227, 46, 1, 4, 9, 2, 245, 65, 74, 89, 99, 211]) }, Event { key: EventKey([160, 175, 99, 181, 121, 86, 167, 128, 45, 192, 64, 211, 20, 26, 61, 137, 215, 199, 117, 125, 49, 59, 223, 196]), value: EventValue([160, 156, 226, 136, 62, 48, 230, 127, 122, 83, 152, 201, 166, 127, 17, 118, 207, 192, 151, 36, 203, 103, 59, 0, 176, 117, 245, 74, 164, 86, 57, 127, 224, 142, 117, 181, 145, 143, 169, 219, 180, 131, 196, 251, 37, 221, 193, 91, 151, 33, 72, 212, 57, 4, 112, 227, 8, 8, 30, 225, 113, 94, 11]) }], receipt: 3688871437 }, TransactionReceipt { tx_hash: [92, 39, 199, 144, 250, 205, 175, 77, 22, 246, 22, 163, 119, 80, 243, 239, 199, 161, 20, 198, 40, 91, 99, 251, 139, 3, 222, 120, 91, 31, 245, 231], body_to_save: Some([236, 235, 233, 43, 245, 123, 186, 35, 191, 61, 119, 54, 87, 178, 230, 83, 251, 77, 187, 13, 39, 92, 96, 3, 137, 109, 150, 45, 213, 163, 3, 48, 190, 133, 39, 209, 243, 22, 123, 22, 0, 101, 112, 194, 22, 100, 61, 1, 73, 190, 235, 114, 216, 55, 124, 155, 18, 248, 200, 25, 152, 3, 129, 153, 114, 7, 45, 214, 207, 41, 236, 10, 124, 250, 30, 32, 247, 211, 8, 102, 62, 243, 57, 154, 33, 192, 116, 244, 232, 143, 8, 180, 169, 36, 46]), events: [Event { key: EventKey([99, 213, 171, 67, 54, 14, 177, 37, 176, 115, 149, 179, 229, 185, 14, 32, 167, 30, 52, 184, 37, 200, 196, 149, 15, 239, 49, 95, 122, 252, 129, 14, 14, 87, 21, 144, 207, 198, 212, 128, 55, 198, 224, 66, 129, 115, 23, 177, 106, 193, 241, 47, 206, 43, 15, 47, 110, 143, 105, 81, 228, 86, 182, 223, 244, 204, 73, 207, 109, 22, 90, 139, 146, 152, 207]), value: EventValue([89, 137, 210, 1, 168, 42]) }, Event { key: EventKey([79, 108, 45, 147, 37, 116, 207, 49, 146, 158, 175, 45, 0, 210, 103, 200, 215, 147, 168, 171, 54, 225, 84, 13, 212, 86, 94, 165, 207, 152, 23, 90, 213, 64, 72, 69, 8, 236, 236, 36, 28, 154, 8, 156, 93, 174, 149, 190, 232, 214, 237, 212, 223, 134, 203, 80, 4, 224, 219, 90, 96, 84, 113, 197, 23, 123, 58, 216, 49, 139, 181, 249, 41, 1, 167, 17, 153, 48, 193, 219, 111, 167, 56, 138]), value: EventValue([245, 25, 211, 107, 142, 73, 119, 249, 99, 238, 126, 115, 32, 167]) }], receipt: 3185755994 }, TransactionReceipt { tx_hash: [125, 144, 55, 132, 47, 216, 37, 18, 25, 131, 32, 91, 167, 197, 46, 29, 155, 64, 201, 169, 184, 248, 177, 80, 126, 98, 246, 210, 232, 8, 118, 86], body_to_save: None, events: [Event { key: EventKey([98, 36, 221, 183, 188, 106, 88, 39, 119, 15, 238, 196, 205, 9, 129, 5, 136, 126, 136, 204, 138, 144, 169, 0, 153, 96, 180, 43, 167, 52, 146, 110, 249, 208, 143]), value: EventValue([14, 153, 16, 107, 248, 192, 195, 118, 220, 197, 149, 75, 247, 33, 142, 32, 29, 204, 208, 32, 34, 41, 178, 133, 249, 245, 41, 229, 246, 155, 159, 104, 142, 95, 202, 168, 160, 150, 230, 221, 20, 46, 213, 81, 241, 141, 246, 216, 99, 143, 205, 17, 254, 144, 109, 155, 98, 124, 229, 218, 136, 168, 202, 202, 111]) }, Event { key: EventKey([158, 132, 153, 18, 248, 235, 162, 117]), value: EventValue([55, 74, 127, 169, 14, 221, 154, 39, 86, 199, 194, 145, 190, 80, 158, 155, 40, 193, 1, 51, 243, 30, 2, 28, 136, 213, 34, 124, 201, 99, 38, 130, 220, 174, 65, 72, 195, 162, 213, 3, 6, 66, 71, 195]) }, Event { key: EventKey([140, 66, 156, 182, 219, 205, 30, 213, 238, 10, 152, 59, 115, 13, 40, 44, 229, 81, 35, 100, 166, 89, 235, 247, 189, 84, 46, 128, 6, 146, 16, 147, 57, 50, 235, 15, 81, 186, 93, 195, 28, 181, 45, 183, 197, 20, 171, 10, 162, 144, 9, 97, 174, 112, 110, 250]), value: EventValue([168, 102, 48, 3, 87, 132, 208, 207, 91, 64, 81]) }, Event { key: EventKey([49, 61, 106, 132, 25, 211, 108, 174, 143, 98, 42, 148, 171, 158, 226, 144, 75, 244, 145, 220, 174, 43, 164, 161, 98, 113, 95, 104, 118, 193, 67, 26, 249]), value: EventValue([71, 62, 84, 192, 164, 206, 186, 114, 227, 73, 31, 194, 209, 12, 131, 76, 191, 218, 174, 213, 177]) }, Event { key: EventKey([203, 34, 64, 162, 119, 16, 173, 183, 105, 143, 28, 47, 142, 86, 115, 105, 178, 249, 151, 4, 98, 229, 169, 174, 10, 218, 187, 216, 209, 203, 122, 49, 148, 45, 38, 16, 185, 230, 29, 171]), value: EventValue([94, 51, 40, 108, 88, 172, 131, 163, 221, 40, 48, 132, 163, 235, 110, 163, 253, 70, 169, 125, 216, 156, 125, 47, 46, 44, 85, 69, 177, 190, 193, 179, 154, 10, 212, 250, 115, 13, 215, 195, 121, 233, 230, 254, 233, 152, 14, 44, 196, 141, 206, 206, 254, 123, 108, 150, 190, 230, 239, 18, 134, 141, 120, 228, 15, 5, 3]) }, Event { key: EventKey([139, 182, 56]), value: EventValue([194, 61, 170, 57, 201, 43, 133, 65, 42, 98, 196, 216, 93, 197, 123, 59, 172, 247, 83, 45, 51, 232, 41, 51, 128, 252, 248, 13, 119, 103, 182, 234, 146, 131, 105, 117, 41, 255, 132, 5, 61, 176, 117, 56, 170, 99, 146, 206, 140, 132, 21, 63, 124, 120, 140, 188, 150, 84, 97, 181, 188, 247, 28, 88, 6, 119, 39, 49, 156, 52, 57, 29, 80, 249, 156, 65, 101, 107, 71, 242, 20, 148, 129, 212, 190, 205, 193, 103, 143]) }], receipt: 903951216 }], phantom_data: PhantomData }], num_txs: 8, num_events: 36 }], {2: (5, 11), 5: (12, 21), 1: (1, 5), 3: (11, 11), 4: (11, 12), 7: (29, 31), 8: (31, 37), 6: (21, 29)}, 2) -cc 9e811fea04e9412d17803f6337a9b3244093dae538c7d5aceae14cffcf44d6ec # shrinks to (slots, tx_id_to_event_range, _total_num_batches) = ([SlotCommit { slot_data: MockBlock { header: MockBlockHeader { prev_hash: 0x0000000000000000000000000000000000000000000000000000000000000000, hash: 0x0000000000000000000000000000000000000000000000000000000000000000, txs_commitment: 0x0000000000000000000000000000000000000000000000000000000000000000, height: 0, time: Time { secs: 1717416665, nanos: 134466000 } }, validity_cond: MockValidityCond { is_valid: true }, blobs: [] }, batch_receipts: [BatchReceipt { batch_hash: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 231, 237, 141, 158, 143, 153, 171, 163, 130, 133], tx_receipts: [], phantom_data: PhantomData }], num_txs: 0, num_events: 0 }], {}, 2), random_event_num = 6157 -cc ed91de7df57d5bc0b7c4c3e5c91d6bfc6b2cfa90057b8e45c815c51da97fcfd3 # shrinks to (slots, tx_id_to_event_range, _total_num_batches) = ([SlotCommit { slot_data: MockBlock { header: MockBlockHeader { prev_hash: 0x0000000000000000000000000000000000000000000000000000000000000000, hash: 0x0000000000000000000000000000000000000000000000000000000000000000, txs_commitment: 0x0000000000000000000000000000000000000000000000000000000000000000, height: 0, time: Time { secs: 1717416669, nanos: 407656000 } }, validity_cond: MockValidityCond { is_valid: true }, blobs: [] }, batch_receipts: [BatchReceipt { batch_hash: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 181, 61, 129, 95, 255, 59, 67], tx_receipts: [TransactionReceipt { tx_hash: [146, 111, 38, 100, 240, 205, 59, 31, 129, 245, 82, 102, 129, 69, 136, 174, 94, 77, 163, 183, 137, 94, 202, 226, 99, 7, 173, 40, 180, 205, 103, 229], body_to_save: Some([225, 155, 254, 122, 113, 8, 10, 55, 55, 1, 190, 196, 186, 51, 138, 32, 104, 187, 31, 233, 19, 30, 35, 66, 142, 25, 220, 44, 5, 135, 168, 64, 213, 132, 184, 135, 239, 30, 34, 71, 175, 205, 46, 84, 50, 142, 205, 151, 63, 1, 166, 225, 57, 65, 75, 210, 32, 3, 230, 158, 2, 80, 78, 151, 1, 14, 2, 100, 252, 38, 211, 79, 239, 251]), events: [Event { key: EventKey([208, 108, 202, 99, 19, 245, 126, 34, 34, 165, 146, 247, 111, 136, 61, 99, 220, 79]), value: EventValue([175, 20, 90, 152, 190, 126, 153, 101, 237, 193, 123, 43, 57, 254]) }, Event { key: EventKey([193, 182, 137, 52, 223, 82, 180, 166, 248, 250, 185, 251, 43, 79, 7, 194, 223, 146, 118, 212, 110, 54, 117, 37, 232, 79, 45, 206, 230, 26, 246, 103, 180, 78, 170, 116, 36, 132, 185, 248, 60, 147, 218, 240, 188, 128]), value: EventValue([215, 51, 247, 97, 97, 14, 66, 187, 228, 99, 6, 86, 182, 67, 187, 98, 113, 203, 45, 55, 4, 65, 156, 170, 152, 5, 194, 22, 228, 5, 214, 165, 114, 139, 176, 114, 156, 49, 49, 80, 153, 170, 101, 15, 247, 244, 85, 156, 96, 88, 37, 64, 119, 167, 132, 108, 17, 141, 50, 195, 67, 169, 200, 63, 145, 227]) }, Event { key: EventKey([158, 12, 228, 193, 30, 221, 31, 195, 29, 32, 128, 104, 117, 226, 63, 174, 183, 101, 183, 91, 143, 140, 173, 238, 169, 233, 211, 85, 178, 179, 26, 111, 214, 58, 224, 242, 204, 73, 77, 11, 133, 160, 120, 239, 134, 7, 10, 173, 111, 199, 189, 251, 106, 232, 233, 222, 152, 106, 6, 80, 107, 215, 207, 199, 177, 54, 208]), value: EventValue([144, 48, 224, 39, 135, 146, 238, 15, 78, 32, 248, 254, 88, 140, 238, 171, 34, 217, 225, 124]) }, Event { key: EventKey([184, 187, 71, 23, 88, 25, 212, 228, 130, 182, 230, 91]), value: EventValue([220, 69, 210, 74, 67, 167, 125, 53, 33, 15, 48, 224, 32, 242, 246, 138, 97, 87, 131, 88, 228, 110, 90, 143, 88, 129, 78, 212, 24, 106, 167, 225, 7, 244, 4, 182, 86, 102, 143, 143, 57, 58, 173, 61, 26, 180, 156, 250, 45, 221, 2, 75, 38, 54, 251, 249, 32, 24, 108, 244, 68, 1, 56, 80, 68, 252, 137, 119, 78, 132, 229, 74, 231, 52, 181, 243, 112, 188, 248, 253, 2, 93, 200, 167, 47, 1, 62, 70, 86, 130, 76]) }, Event { key: EventKey([121, 56, 229, 64, 37, 20, 168, 250, 25, 178, 200, 94, 97, 165, 86, 234, 74, 71, 194, 124, 213, 66, 88, 78, 180, 35, 62, 216, 68, 199, 15, 218, 137, 100, 208, 151, 39, 214, 251, 201, 95]), value: EventValue([35, 1, 62, 207, 195, 193, 81, 150, 178, 175, 252, 59, 54, 5, 208, 215, 18, 216, 231, 219, 83, 236, 27, 25, 205, 88, 63, 51]) }, Event { key: EventKey([99, 44, 206, 75, 51, 110, 104, 162, 142, 182, 48, 7, 0]), value: EventValue([0, 85, 148, 22, 40, 27, 117, 127, 232, 98, 178, 150, 182, 193, 114, 48, 172, 190, 50, 173, 11, 178, 88, 52, 13, 20, 126, 213, 228, 214, 63, 251, 43, 212, 230, 188, 93, 253, 73, 209, 175, 228, 24, 88, 190, 229, 195, 106, 225, 57, 170, 133, 247, 230, 176, 90, 189, 197, 226, 228, 15, 253, 55, 117, 190, 21, 21, 146, 62, 14, 144, 90, 135, 112]) }, Event { key: EventKey([171, 197, 233, 217, 167, 16, 151, 168, 210, 193, 108, 36, 41, 52, 200, 115, 216, 222, 230, 115, 11, 195, 80, 83, 126, 150, 164, 124, 36, 207, 136, 203, 153, 35, 80, 135, 171, 207, 201, 61, 230, 96, 27, 24, 179, 8, 9, 124, 118, 138, 94, 184, 178, 5, 173, 97, 227, 88, 80, 23, 18, 100, 84, 227, 14, 5, 111, 123, 154, 115, 35, 57, 45, 22, 188, 28, 10, 24, 233, 148, 210, 127]), value: EventValue([167, 140, 244, 222, 72, 75, 76, 9, 134, 98, 205, 230, 14, 116, 82, 5, 228, 44, 191, 96, 136, 88, 171, 102, 96, 87, 93, 248, 58, 194, 113, 130, 108, 64, 248, 124, 80, 27, 255, 214, 221, 4, 34, 134, 10, 201, 194, 159, 227, 77, 241, 45, 161, 21, 193, 134, 169, 58, 52, 94, 237, 38, 13, 66, 204, 90, 184, 19, 161, 190, 49, 175, 246, 191, 3, 135, 197, 227, 246, 79, 164, 189, 5, 58, 236, 251, 188, 8, 191, 47, 95, 41]) }, Event { key: EventKey([51, 172, 117, 222, 189, 247, 48, 110, 12, 96, 60, 169, 145, 190, 190, 9, 19, 52, 77, 127, 21, 202, 119, 40, 204, 221, 36, 105, 36, 38, 184, 23, 8, 204, 93, 224]), value: EventValue([209, 130, 148, 236, 132, 10, 59, 217, 77, 142, 12, 83, 13, 115, 254, 117, 184, 123, 90, 192, 241, 96, 233, 232, 115, 134, 202, 143, 60, 247, 50, 203, 232, 45, 140, 11, 119, 237, 85, 255, 189, 44, 154, 232, 19, 137, 204, 148, 251, 48, 69, 135, 152, 250, 138, 163, 253, 41, 188, 226, 71, 120, 171, 41, 107, 156, 222, 49, 153, 78, 87, 175, 70, 225, 34, 72, 220, 114, 215, 80, 105, 252]) }], receipt: 441835458 }, TransactionReceipt { tx_hash: [105, 185, 6, 6, 132, 154, 253, 211, 235, 227, 95, 65, 253, 140, 37, 95, 215, 130, 91, 7, 168, 75, 84, 233, 96, 73, 68, 77, 129, 58, 111, 222], body_to_save: Some([51, 192, 30, 91, 249, 114, 201, 143, 34, 209, 51, 71, 54, 79, 202, 58, 209, 121, 57, 13, 241, 32, 194, 182, 35, 195, 25, 236, 120, 137, 65, 86, 190, 238, 211, 64, 118, 205, 219, 220, 18, 251, 250, 107, 231, 216, 38, 224, 202, 147, 129, 157, 41]), events: [], receipt: 132985537 }, TransactionReceipt { tx_hash: [17, 188, 122, 32, 45, 63, 220, 18, 115, 175, 125, 97, 107, 134, 199, 6, 127, 30, 117, 160, 118, 78, 120, 91, 98, 42, 177, 23, 163, 70, 128, 82], body_to_save: Some([158, 14, 128, 181, 26, 171, 170, 138, 94, 112, 52, 6, 235, 118, 63, 133, 152, 190, 175, 197, 135, 248, 145, 114, 124, 140, 205, 17, 27, 223]), events: [Event { key: EventKey([151, 21, 112, 176, 246, 169, 118, 115, 162, 127, 179, 150, 144, 156, 246, 210, 217, 141, 209, 7, 141, 243, 231, 2, 132, 219, 142, 2, 118, 70, 47, 64, 26, 56, 212, 39, 157, 205, 106, 131, 66, 98, 193, 94, 177, 184, 161, 217, 164, 247, 26, 35, 116, 41, 12, 239, 126, 4, 252, 55, 8, 230, 120, 248, 153, 40, 22, 206]), value: EventValue([182, 31, 191, 240, 76, 182, 87, 130, 88, 14, 1, 58, 193, 6, 204, 105, 233, 30, 230, 80, 195, 95, 182, 17, 119, 88, 131, 96, 15, 50, 169, 47, 216, 156, 253, 125, 24, 197, 128, 105, 228, 251, 42, 168, 148, 49, 40, 190, 108, 144, 129, 78, 212, 201, 159, 194, 116, 229, 204, 18, 19, 243, 155, 106, 214, 120, 20, 202, 224, 215, 88, 192, 231, 59, 23, 142, 212, 137, 43, 236, 5, 185, 122, 38, 201, 81, 211, 96, 148, 239, 53, 8, 173]) }, Event { key: EventKey([169, 156, 57, 23, 186, 71, 124, 116, 225, 84, 87, 247, 81, 35, 26, 122, 153, 252, 8, 106, 47, 175, 107, 70, 196, 187, 6, 54, 225, 208, 169, 96, 237, 146, 57, 1, 4, 48, 35, 18, 17, 174, 248, 83, 13, 193, 65, 225, 26, 106, 89, 0, 209, 106, 182, 172, 56, 177, 150, 185, 93, 76, 191, 49, 76, 253, 87, 37, 31, 188, 124, 85, 180, 110, 246, 167, 146, 70, 221, 66, 230, 34, 192, 85, 132, 243, 242, 245]), value: EventValue([84, 21, 164, 120, 32, 84, 19, 251, 175, 179, 44, 104, 241, 196, 228, 94, 131, 24, 83, 197, 218, 142, 27, 11, 147, 108, 100, 130, 189, 230, 255, 105, 78, 217, 54, 238, 139, 23, 86, 218, 123, 140, 136, 10, 171, 39, 224, 67, 61, 14, 93, 36, 33, 187, 51, 69, 82, 133, 60, 208, 11, 93, 169, 65, 239, 168, 217, 117, 214, 94, 105, 201, 247, 246, 33, 125, 52, 179]) }, Event { key: EventKey([221, 220, 41, 128, 226, 147, 163, 85, 202, 19, 35, 175, 35, 232, 28, 17, 184, 88, 108, 45, 8, 109, 246, 255, 57, 188, 134, 163, 154, 205, 141, 10, 65, 195, 184, 6, 123, 103, 66, 53, 86, 84, 25, 249, 149, 153]), value: EventValue([245, 74, 211, 254, 96, 46, 33, 175, 193, 47, 171, 125, 136, 42, 202, 147, 193, 41, 244, 127, 39, 93, 203, 175, 196, 242, 125, 194, 242, 208, 110, 39, 161, 224, 78, 233, 126, 167, 65, 214, 27, 192, 196, 177, 135, 101, 188]) }, Event { key: EventKey([123, 168, 121, 82, 179, 118, 217, 205, 227, 72, 199, 11, 0, 214, 0, 245, 34, 234, 61, 64, 133, 121, 181, 76, 15, 183, 108, 169, 72, 9, 195, 192, 82, 174, 116, 247, 106, 215, 144, 10, 4, 119, 237, 49, 160, 13, 121, 176, 146, 36, 160, 222, 134, 112, 199, 26, 233, 151, 50, 84, 189, 241, 119, 208, 124, 13, 230, 171, 51, 156, 60, 30, 172, 233, 191, 139, 197, 2, 90, 238, 39, 242, 102, 139, 38, 39, 64, 181]), value: EventValue([146, 193, 158, 113, 159, 88, 226, 101, 66, 115, 65, 15, 173, 239, 225, 7, 118, 192, 70, 179, 195, 117, 9, 0, 118, 4, 55, 50, 56, 128, 54, 65, 135, 181, 97, 29, 47, 79, 12, 251, 188, 14, 183, 204, 118, 33, 27, 101, 130, 39, 116, 2, 148, 85, 45, 99, 70, 186, 39, 158, 251, 168, 209, 249, 124, 12, 251, 248, 67, 78, 201, 1, 83]) }, Event { key: EventKey([234, 227, 61, 38, 204, 7, 154, 6, 164, 103, 248, 253]), value: EventValue([62, 0, 110, 143, 53, 87, 31, 118, 54, 43, 64, 224, 36, 32, 147, 63, 88, 108, 197, 225, 144, 244, 109, 130, 151, 55, 0, 60, 117, 120, 177, 200, 185, 118, 120, 140, 216, 155]) }, Event { key: EventKey([203, 255, 143, 185, 57, 132, 160, 145, 88, 69, 174, 51, 244, 242, 0, 34, 35, 205, 176, 114, 191, 144, 139, 1, 232, 144, 30, 199, 102, 178, 126, 239, 156, 122, 233, 2, 124, 23, 107, 140, 251, 72, 215, 216, 23, 6, 37, 125, 106, 24, 135, 26, 141, 236, 206, 9, 101, 213, 75, 243, 87, 202, 87, 218, 230, 115, 48, 206, 144, 213, 217, 122, 239, 60, 241, 231, 234, 32, 193, 140, 159, 67, 89, 16, 3, 17, 42, 100, 225, 201, 207]), value: EventValue([108, 7, 212, 117, 113, 38, 190, 63, 237, 118, 121, 207, 243, 92, 80, 42, 180, 117, 48, 86, 160, 228, 118, 136, 138, 132, 251, 158, 119, 66, 213, 241, 21, 119, 209, 80, 56, 68, 235, 16, 29, 40, 228, 68, 219, 85, 24, 24, 60, 232, 29, 59, 167, 16, 36, 180, 191, 144, 42, 101, 156, 68, 1, 85, 158, 110, 34, 55, 212]) }, Event { key: EventKey([102, 202, 185, 166, 183, 106, 252, 106, 216, 57, 30, 204, 7, 194, 63, 75, 96, 117, 72, 16, 249, 123, 121, 58, 78, 37, 69, 77, 44, 42, 188, 103, 139, 109, 181, 12, 48, 18, 232, 106, 153, 49, 59, 90]), value: EventValue([43, 30, 242, 241]) }], receipt: 1098056261 }, TransactionReceipt { tx_hash: [178, 81, 243, 206, 207, 2, 79, 143, 11, 163, 54, 87, 252, 156, 2, 75, 220, 113, 26, 253, 181, 45, 36, 25, 231, 83, 190, 78, 5, 199, 159, 234], body_to_save: Some([196, 52, 117, 36, 112, 59, 121, 250, 52, 135, 106, 78, 34, 34, 215, 184, 138, 70, 248, 234, 218, 141, 68, 162, 223, 188, 119, 103, 78, 203, 182, 101, 199, 111, 122, 179, 114, 232, 34, 45, 104, 92, 4, 125, 246, 138, 165, 135, 19, 235, 16, 162, 114, 156, 64, 123, 181, 113, 134, 231, 98, 96, 144, 44, 48, 22, 1, 173, 246, 237, 250, 151, 253, 10, 103, 193, 135, 122, 108, 50, 46, 60, 193, 74, 26, 245]), events: [Event { key: EventKey([2, 114, 198, 25, 233, 205]), value: EventValue([75, 12, 129, 62, 173, 83, 121, 223, 144, 101, 88, 195, 254, 116, 179, 78, 167, 248, 249, 223, 41, 167, 203, 102, 127, 141, 87, 68, 234, 213, 152, 181, 150, 203, 146, 81, 47, 199, 188, 187, 53, 100, 107, 154, 221, 53, 123, 121]) }, Event { key: EventKey([33, 249, 175, 1, 168, 43, 190, 101, 161, 45, 112, 27, 252, 233, 19]), value: EventValue([72, 17, 162, 124, 66, 116, 165, 27, 188, 207, 251, 214, 140, 128, 247, 239, 114, 50, 218, 213]) }, Event { key: EventKey([122, 214, 54, 170, 153, 172, 217, 150, 41, 243, 48, 172, 1, 166, 136, 224, 12, 195, 107, 176, 175, 172, 225, 192, 141, 2, 91, 171, 60, 154, 233, 12, 21, 179, 170, 0, 223, 6, 212, 86, 154, 40, 112, 151, 19, 98, 24, 142, 168, 146, 131, 75, 31, 80, 177, 212, 173, 103, 169, 219, 150, 190]), value: EventValue([238, 27, 100, 212, 230, 234, 59, 61, 114, 190, 142, 31, 6, 175, 116, 13, 126, 28, 251, 104, 20, 86]) }, Event { key: EventKey([146, 33, 9, 89, 118, 42, 86, 215, 215, 169, 48, 235, 231, 52, 109, 22, 229, 57, 164, 28, 216, 35, 188, 229, 14, 104, 69, 19, 29, 49, 47, 34, 79, 148, 181, 159, 159, 82, 20, 58, 234, 79, 191, 133, 107, 11, 183, 182, 219, 22, 77, 196, 240, 112, 73, 66, 142, 69, 208, 130, 121, 10, 135, 166, 10, 135, 180]), value: EventValue([77, 21, 132, 250, 130, 241, 9, 183, 32, 85, 216, 31, 152, 192, 78, 2, 206, 111, 122, 19, 241, 201, 229, 241, 3, 240, 161, 213, 82, 141, 181, 93, 129, 105, 195, 208, 121, 252, 46, 57, 222, 208, 80, 98, 198, 231, 123, 84, 141, 49, 192, 98, 78, 194, 79, 216, 55, 143, 162, 187, 120, 118, 54, 74, 42, 16, 87, 109, 123, 172, 149, 52, 227, 6, 134, 120, 99]) }, Event { key: EventKey([152, 152, 249, 26, 134, 49, 33, 178, 99, 80, 57, 67, 9, 60, 1, 184, 237, 57, 44, 173, 45, 85, 250, 210, 121, 241, 143, 8, 207, 87, 75, 191, 11, 171, 38, 9, 194, 73, 14, 175, 151, 96, 97, 164, 91, 160, 139, 95, 239, 77, 217, 176, 149, 218, 54, 80, 88, 128, 203, 217, 165, 46, 242, 159, 162, 212, 7, 217, 64, 99, 111, 106, 143, 239, 35, 22, 153, 137, 197, 249, 22, 70, 43, 11, 184, 172, 122, 190, 189, 139, 193, 170, 149]), value: EventValue([83, 16, 72, 208, 31, 81, 225, 74, 138, 43, 53, 210, 244, 10, 156, 234, 205, 217, 126, 189, 162, 103, 48, 36, 191, 126, 60, 35, 207, 180, 97, 94, 223, 109, 14, 82, 64, 155, 77, 5, 239, 241, 110, 105, 254, 206, 205, 214, 168, 146, 77, 140, 60, 116, 153, 216, 185, 125, 48, 173, 134, 183, 122, 39, 50, 35, 254, 120, 140, 152, 157, 102, 44, 39, 160, 74, 22, 2, 27, 71, 208]) }, Event { key: EventKey([133, 250, 49, 208, 78, 172, 136, 145, 219, 62, 162, 225, 57, 14, 71, 133, 102, 77, 101, 110, 186, 19, 205, 232, 39, 13, 85, 182, 144, 24, 203, 161, 179, 215, 68, 189, 161, 239, 191, 81, 0, 191, 24, 78, 252, 253, 123, 41, 202, 108, 250, 24, 103, 55, 12, 188, 213, 195, 160, 70, 169, 241, 157, 190, 80, 66, 131, 81, 223, 8, 227, 65, 206, 188, 41, 168, 27, 211, 135, 0, 58, 248, 73, 103, 206, 200, 84, 48]), value: EventValue([12, 49, 75, 79, 69, 237, 142, 161, 211, 152, 230, 173, 69, 165, 218, 6, 134, 212, 93, 125, 227, 18, 94, 92, 5, 159, 236, 186, 112, 18, 83, 201, 165, 209, 154, 192, 199, 156, 37, 89, 161, 126, 1, 4, 211, 121, 243, 159, 238, 170, 174, 175, 174, 44, 82, 35, 48, 145, 221, 8, 38, 80, 53, 118, 90, 42, 210, 66, 129, 133, 98, 34, 216, 209, 153, 10, 165, 180, 51, 44, 92, 199, 116, 54, 194, 83, 240, 81, 150]) }, Event { key: EventKey([221, 2, 12, 87, 148, 122, 36, 195, 218, 107, 7, 110, 103, 13, 21, 164, 142, 148, 84, 73, 213, 239, 13, 194, 12, 154, 110, 128, 197, 255, 182, 221, 33, 42, 248, 167, 146, 119, 207, 189, 138, 209, 56, 21, 184, 248]), value: EventValue([134, 251, 233, 217, 12, 184, 55, 128, 57, 35, 69, 139, 45, 73, 112, 25, 119, 173, 8, 109, 84, 216, 99, 25, 41, 223, 88, 254, 139, 167, 33, 99, 54, 5, 5, 192, 151, 159, 186, 6, 132, 148, 73, 96, 136, 197, 217, 174, 165, 118, 12, 74, 245, 77, 86, 132, 43, 50, 200, 205, 110, 62, 160, 146, 184, 193, 141, 30, 217, 174, 184, 193, 220, 78, 21, 218, 144, 245, 253]) }, Event { key: EventKey([139, 242, 28, 4, 240, 212, 14, 64, 239, 153, 81, 124, 179, 217, 52, 61, 43, 172, 72, 194, 63, 27, 93, 253, 75, 212, 126, 225, 68, 104, 233, 91, 190, 108, 206, 33, 188, 214, 217, 143, 29, 209, 69, 112, 230, 159, 37, 69, 207, 106, 12, 72, 65, 145, 64, 158, 34, 249, 188, 191, 35, 82, 41, 94, 244]), value: EventValue([216, 39, 244, 193, 46, 162, 46, 3, 185, 198, 46, 38, 96, 90, 63, 128, 218, 200, 76, 184, 9, 195, 233, 35, 227, 17, 93]) }, Event { key: EventKey([143, 61, 3, 186, 150, 17, 197, 209, 42, 128, 215, 82, 232, 154, 202, 87, 26, 30, 244, 162, 72, 111, 153, 35, 114, 41, 31, 130, 211, 239, 33, 64, 11, 99, 206, 182, 45, 206, 168, 76, 242, 209, 181, 5, 36, 27, 181, 131, 49, 36, 169, 89, 184, 16, 104, 221, 46, 211, 177, 62, 181, 113, 76]), value: EventValue([59, 84, 169, 35, 233, 7, 201, 238, 133, 81, 95, 132, 25, 240, 140, 149, 24, 150, 180, 123, 62, 32, 51, 144, 31, 32, 244, 178, 14, 242, 74, 68, 65, 49, 15, 189, 111, 106, 74, 127, 198, 102, 121, 143, 128, 208, 155, 249, 144, 28, 207, 145, 164, 3, 225, 247, 76, 65, 190, 244, 123, 150, 192, 169, 34, 149, 59, 165, 250, 236, 227, 146, 103, 35, 46, 141, 183, 95, 86, 38, 221, 142, 157, 254]) }], receipt: 3077868880 }], phantom_data: PhantomData }], num_txs: 4, num_events: 24 }], {3: (9, 16), 4: (16, 25), 2: (9, 9), 1: (1, 9)}, 2), random_tx_num = 257 +cc fa833c45c93f2d7eb597197817751abefda66d7757b65b51e56e84290cdf428a # shrinks to (slots, tx_id_to_event_range, _total_num_batches) = ([SlotCommit { slot_data: MockBlock { header: MockBlockHeader { prev_hash: 0x0000000000000000000000000000000000000000000000000000000000000000, hash: 0x0000000000000000000000000000000000000000000000000000000000000000, txs_commitment: 0x0000000000000000000000000000000000000000000000000000000000000000, height: 0, time: Time { secs: 1717416655, nanos: 812540000 } }, blobs: [] }, batch_receipts: [BatchReceipt { batch_hash: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 28, 86, 147, 160, 149], tx_receipts: [TransactionReceipt { tx_hash: [99, 14, 54, 254, 184, 128, 195, 173, 140, 24, 47, 76, 103, 75, 11, 156, 202, 228, 151, 79, 149, 206, 98, 30, 119, 37, 238, 217, 221, 126, 40, 52], body_to_save: None, events: [Event { key: EventKey([159, 92, 2, 145, 33, 2, 162, 182, 241, 65, 16, 100, 72, 177, 96, 122, 219, 201, 156, 54, 186, 37, 54, 36, 237, 153, 122, 111, 195, 147, 221, 43, 155, 254, 19, 210, 20, 1, 183, 212, 206, 89, 247, 68, 192, 176, 96, 248, 225, 251, 183, 61, 148, 250, 46, 28, 225, 90, 97, 45, 195, 83, 138, 3, 207, 163, 36, 169, 56, 158, 224, 79, 100]), value: EventValue([108, 199, 54, 0, 161, 51, 127, 109, 167, 240, 119, 112, 8, 237, 31, 184, 224, 116, 83, 229]) }, Event { key: EventKey([77, 56, 243, 86, 71, 41, 57, 111, 92, 154, 118, 117, 60, 39, 159, 203, 206, 180, 221, 82, 110, 59, 72, 111, 254]), value: EventValue([130, 37, 130, 228, 127, 3, 254, 9, 18, 174, 85, 225, 18, 123, 248, 168, 45, 198, 197, 128, 152, 138, 114, 212, 148, 3, 114, 35, 16, 245, 201, 10, 104, 233, 26, 69, 208, 172, 179, 86, 198, 104, 167, 78, 27, 168, 122, 189, 189, 221, 194, 230, 102, 220, 24, 118, 222, 169, 131, 201, 254, 154, 180, 154, 52, 217, 130, 136, 156, 80, 237, 193, 255, 101, 248]) }, Event { key: EventKey([45, 169, 50, 255, 194, 252, 123, 99, 242, 237, 136, 254, 177, 105, 173, 36, 162, 46, 177, 183, 87, 114, 186, 68, 130, 42, 148, 44, 8, 158, 154, 25, 45, 40, 171, 105, 130, 75]), value: EventValue([16, 128, 146, 42, 57, 26, 205, 156, 215, 231, 136, 134, 11, 197, 91, 110, 183, 194, 36, 92, 109, 197, 158, 50, 117, 195, 140, 27, 149, 248, 239, 210, 208, 81, 31, 96, 250, 37, 175, 131, 254, 18, 244, 127, 207, 251, 115, 84, 238, 14, 72, 215, 47]) }, Event { key: EventKey([99, 147, 110, 204, 19, 87, 138, 60, 20, 204, 133, 19, 35, 184, 33, 18, 196, 215, 89, 251, 194, 212, 27, 57, 244, 28, 202, 20, 6, 80, 125, 155, 202, 140, 103, 46, 95, 49, 37, 48, 193, 110, 207, 154, 32, 211, 129, 22, 79, 48, 80, 167, 129, 221, 181, 66, 71, 112, 252, 16, 97, 89, 166, 106, 147, 42, 175, 30, 188, 20, 58, 183, 160, 2, 10, 96, 95, 248, 153, 200, 91, 138, 200, 37, 42, 231, 126, 203, 98, 147, 197, 107, 239, 74, 173, 150, 68, 252, 216]), value: EventValue([32, 17, 76, 117, 211, 243, 28, 184, 30, 153, 220, 37, 90, 157, 19, 158, 160, 38, 2, 91, 31, 197, 190, 138, 145, 123, 240, 124, 188, 67, 129, 163, 53, 163, 30, 62, 52, 80, 250, 188, 232, 10, 182, 8, 32, 164, 157, 217, 2, 6, 46, 174, 144, 200, 48, 149, 166, 161, 47, 49, 202, 28]) }], receipt: 1604905691 }, TransactionReceipt { tx_hash: [136, 143, 31, 158, 144, 0, 5, 214, 108, 236, 164, 14, 235, 192, 206, 34, 37, 248, 158, 131, 242, 122, 148, 70, 226, 196, 243, 191, 6, 240, 146, 54], body_to_save: Some([161, 81, 248, 62, 64]), events: [Event { key: EventKey([78, 104, 157, 192, 151, 32, 120, 94, 26, 35, 36, 190, 72, 239, 90, 203, 21, 116, 237, 165, 82, 155, 114, 115, 129, 216, 199, 108, 142, 45, 251, 66, 163, 92, 230, 156, 22, 155, 19, 14, 99, 131, 90, 9, 124, 161, 37, 162, 103, 127, 75, 228, 175, 43, 223, 252, 118, 49]), value: EventValue([51, 25, 126, 181, 37, 12, 4, 116, 245, 121, 122, 169, 234, 21, 145, 53, 92, 62, 21, 213, 55]) }, Event { key: EventKey([75, 225, 100, 26, 145, 70, 45, 82, 39, 177, 159, 119, 37, 118, 121, 96, 199, 163, 239, 168, 168, 77, 218, 77, 167, 166, 155, 239, 108, 236, 132, 134, 130, 14]), value: EventValue([174, 44, 82, 57, 87, 161, 245, 218, 99, 175, 52, 214, 87, 68, 151, 176, 66, 193, 177, 167, 21, 164]) }, Event { key: EventKey([208, 178]), value: EventValue([105, 58, 84, 103, 93, 206, 120, 99, 79, 94, 156, 209, 215, 115, 28, 27, 52, 215, 187, 255, 93, 195, 104, 209, 104, 65, 138, 84, 255, 33, 95, 105, 6, 21, 23, 238, 222, 250, 232, 88, 0, 29, 129, 13, 50, 40, 221, 252, 220, 22, 65, 246]) }, Event { key: EventKey([158, 202, 14, 24, 118, 176, 40]), value: EventValue([148, 41, 226, 62, 67, 145, 208, 239, 59, 128, 34, 87, 172, 3, 57, 26, 137, 126, 141, 116, 37, 93, 115, 42, 76, 25, 160, 149, 173, 118, 194, 216, 154, 76, 127, 27, 176, 135, 81, 124, 174, 233, 231, 11, 198, 214, 231, 146, 120, 239, 145, 148, 240, 67, 252, 248, 117, 94, 42, 30, 147, 154, 133, 30, 167, 153, 60, 18, 53, 206, 254, 113, 226, 23, 164, 57, 165, 166, 14, 71, 140, 64, 215]) }, Event { key: EventKey([239, 121, 46, 193, 171, 163, 42, 176, 208, 5, 23, 73, 215, 77, 91, 122, 250, 124, 251, 55]), value: EventValue([14, 86, 171, 42, 58, 53, 199, 159, 48, 76, 60, 75, 82, 143, 17, 160, 104, 34, 77, 140, 210, 242, 37, 160, 221, 165, 97, 123, 67, 118, 190, 235, 123, 26, 165, 226, 254, 80, 128, 150, 76, 91, 98, 36, 242, 244, 56, 183]) }], receipt: 716292249 }, TransactionReceipt { tx_hash: [189, 71, 52, 146, 233, 229, 0, 117, 17, 36, 54, 49, 33, 99, 242, 39, 104, 100, 139, 196, 166, 124, 20, 136, 143, 128, 16, 73, 80, 115, 170, 103], body_to_save: None, events: [Event { key: EventKey([107, 49, 191, 124, 208, 102, 154, 29, 0, 157, 200, 0, 235, 202, 88, 244, 6, 55, 187, 125, 179, 89, 112, 246, 93, 209, 228, 161, 221, 181, 95, 21, 84, 76, 236, 133, 242, 55, 105, 91, 108, 197, 254, 41, 99, 236, 205, 96, 2, 153, 30, 87, 51, 110, 245, 255, 143]), value: EventValue([143, 135, 142, 210, 26, 230, 33, 139, 128, 208, 165, 170, 112, 19]) }, Event { key: EventKey([219, 239, 119, 134, 195, 182, 132, 2, 45, 212, 169, 24, 204, 186, 51, 96, 224, 4, 165, 64, 149, 122, 154, 80, 84, 1, 172, 109, 25, 162, 103, 118]), value: EventValue([75, 89, 131, 17, 74, 87, 150, 131, 144, 242, 151, 223, 160, 55, 115, 229, 173, 141, 149, 164, 29, 208, 238, 95, 244, 160, 145, 110, 48, 29, 217, 63, 12, 176, 230, 236, 19, 122, 109, 250, 120, 154, 150, 233, 121, 97, 228, 93, 186, 95, 181, 231, 22, 37, 18, 51, 181, 29, 25, 157, 246, 151, 187, 51, 82, 27, 159, 154, 76, 207, 25, 226, 85, 202, 203, 1, 125, 1, 246, 126, 100, 89, 246, 231, 80, 179]) }, Event { key: EventKey([223, 112, 139, 245, 2, 242, 54, 238, 68]), value: EventValue([245, 58, 56, 182, 31, 243, 221, 95, 190, 129, 111, 179, 149, 38, 14, 105, 71, 235, 157, 244, 63, 237, 173, 29, 9, 114, 83, 177, 162, 0, 148, 38, 117, 236, 8, 144, 74, 150, 49, 80, 24, 10, 121, 116, 18, 187, 0]) }, Event { key: EventKey([87]), value: EventValue([211, 1, 42, 132]) }], receipt: 1471751824 }, TransactionReceipt { tx_hash: [152, 56, 101, 16, 19, 179, 147, 109, 67, 178, 226, 19, 86, 195, 25, 105, 231, 10, 3, 11, 238, 104, 52, 93, 185, 217, 138, 61, 252, 57, 246, 68], body_to_save: Some([96, 158, 135, 209, 208, 1, 110, 100, 143, 164, 69, 218, 109, 152, 61, 161, 151]), events: [Event { key: EventKey([5, 70, 116, 182, 34, 42, 110, 155, 143, 63, 232, 151, 222, 38, 108, 47, 30, 214, 132, 209, 150, 222, 203, 198, 189, 147, 153, 74, 188, 121, 118, 250, 65, 170, 31, 117, 14, 111, 60, 77, 105, 34, 169, 40, 104, 47, 70, 68, 82, 42, 153, 46, 66, 160, 27, 109, 147, 216, 199, 45, 155, 187, 175, 74, 25, 151, 195, 62, 94, 195, 176, 98, 126, 112, 117, 150, 77, 218, 183, 66, 206, 71, 151, 35, 60, 99, 154, 54, 48, 241, 92, 184, 6, 146]), value: EventValue([230, 161, 17, 1, 134, 248, 183, 254, 124, 67, 87, 26, 4, 183, 162, 137, 223, 103, 135, 201, 229, 244, 165, 14, 53, 154, 33, 89, 75, 33, 41, 102, 113, 16, 237, 218, 115, 207, 81, 8, 156, 36, 236, 223, 40, 58, 248, 88, 133, 20, 105, 122, 176, 111, 192, 60, 6, 141, 107, 78, 9, 207, 139, 71, 153, 135, 126, 191, 139, 173, 100, 103, 117, 200, 104, 131, 205, 102, 10, 25, 246, 126, 151, 233, 183, 22, 182, 115, 26, 120, 22, 30, 246]) }, Event { key: EventKey([174]), value: EventValue([124, 234, 155, 2, 152, 230, 1, 167, 158, 78, 126, 115, 45, 74, 84, 179, 3, 135, 9, 67, 184, 95, 209, 233, 236, 0, 222, 146, 114, 116, 9, 111, 141, 225, 194, 253, 220, 163, 80, 124, 54, 65, 162, 78, 10, 21, 154, 17, 191, 89, 27, 95, 236, 109, 128, 230, 38, 193, 13, 46, 177, 46, 174, 49, 150, 8, 202, 84, 184, 140, 27, 207, 6, 197, 7, 221, 240, 195, 44, 168, 158]) }, Event { key: EventKey([121, 152, 165, 86, 182, 133, 80, 58, 53, 14, 209, 167, 31, 248, 61, 96, 52, 41, 202, 76, 176, 34, 144, 118, 41, 81, 206, 185, 238, 76, 47, 166, 253, 177, 147, 224, 111, 122]), value: EventValue([199, 245, 34, 134, 74, 214]) }, Event { key: EventKey([179, 241, 28, 147, 64, 97, 136, 208, 33, 168, 230]), value: EventValue([18, 244, 31, 246, 138, 9, 98, 109, 149, 109, 234, 97, 48, 175, 181, 5, 130, 74, 15, 164, 226, 76, 51, 163, 44, 61, 207, 36, 0, 153, 188, 196, 251, 203, 254, 25, 202, 247, 177, 248, 18, 181, 123, 137, 57, 168, 50]) }, Event { key: EventKey([233, 223, 201, 221, 37, 3, 158, 221, 171, 103, 108, 14, 205, 205, 164, 152, 235, 250, 190, 94, 140, 25, 211, 156, 165, 39, 206, 102, 224, 90, 149, 216, 141, 28, 108, 222, 104, 45, 144, 116, 185, 40, 215, 138, 181, 229, 143, 198, 29, 55, 11, 67, 105, 133, 113, 98, 25, 133, 8, 176, 119, 40, 13, 236, 142, 175, 105, 242, 106, 115, 137, 132, 141, 179, 90, 97, 218, 93, 209, 73, 81, 37]), value: EventValue([146, 15, 14, 205, 130, 39, 87, 21, 141, 243, 92, 9, 229, 195, 7, 177, 141, 139, 108, 36, 192, 139, 210, 163, 227, 84, 15, 240, 243, 207, 119, 113, 91, 63, 50, 144, 84, 179, 169, 158, 238, 69, 235, 194, 219, 154, 179]) }, Event { key: EventKey([127]), value: EventValue([159, 189, 222, 201, 55, 223, 135, 67, 201, 17, 86, 86, 188, 168, 138, 197, 185, 152, 107, 133, 202, 183, 45, 208, 9, 24, 179, 58, 120, 149, 229, 6, 34, 45]) }, Event { key: EventKey([]), value: EventValue([54, 245, 160, 13, 203, 123, 95, 138, 81, 108, 84, 72, 40, 227, 20, 148, 224, 75, 212, 212, 79, 253, 253, 164, 22, 75, 255, 25, 235, 153, 251, 21, 188, 86, 179, 55, 33, 187, 161, 152, 44, 104, 3, 15, 102, 109, 22, 102, 69, 167, 18, 43, 59, 99, 190, 52, 26, 133, 131, 147, 94]) }], receipt: 792208976 }, TransactionReceipt { tx_hash: [91, 122, 152, 130, 74, 219, 153, 220, 105, 21, 98, 229, 161, 100, 30, 180, 21, 198, 89, 144, 109, 196, 210, 45, 134, 82, 176, 136, 79, 93, 20, 141], body_to_save: None, events: [Event { key: EventKey([206, 157, 12, 61, 102, 39, 146, 87, 251, 36, 103, 19, 249, 84, 125, 240, 31, 127, 192, 129, 246, 63, 66, 148, 44, 218, 173, 81, 54, 28, 93, 172, 40, 17, 91, 114, 6, 46, 50, 206, 161, 215, 179, 108, 9, 176, 12, 152, 14]), value: EventValue([123, 140, 79, 38, 121, 205, 217, 34, 126, 241, 24, 126, 70, 83, 213, 178, 84, 43, 183, 204, 124, 103, 89, 212, 185, 205, 123, 9, 142, 134, 175, 95, 46, 6, 115, 67, 166, 250, 205, 236, 130, 218, 110, 226, 226, 235, 183, 32, 217, 174, 206, 145, 101, 29, 75, 11, 100, 221, 25, 113, 230, 21, 163, 52, 32]) }, Event { key: EventKey([176, 39, 79, 237, 122, 100, 80, 30, 63, 192, 208, 126, 86, 176, 126, 170, 37, 183, 4, 88, 210, 49, 85, 50, 144, 81, 10, 214, 56, 26, 164, 49, 225, 188, 151, 154, 121, 84, 134, 245, 157, 67, 244, 153, 28, 203, 45, 63, 223, 221, 145, 129, 191, 59, 185, 5, 105, 225, 10, 104, 50, 243, 78, 187, 232, 7, 172, 147, 28, 21, 44, 85, 32, 17, 1, 229, 117, 145, 190, 87]), value: EventValue([41, 236, 79, 213, 226, 232, 91, 1, 165, 156, 162, 5, 21, 145, 171, 193, 235, 222, 39, 201, 1, 29, 155, 253, 18, 120]) }], receipt: 465131364 }, TransactionReceipt { tx_hash: [31, 91, 37, 128, 16, 54, 28, 115, 211, 88, 158, 169, 255, 181, 69, 157, 71, 182, 49, 250, 248, 151, 6, 1, 186, 191, 111, 148, 215, 199, 179, 100], body_to_save: None, events: [Event { key: EventKey([114, 77, 188, 180, 249, 47, 99, 167, 199, 10, 65, 28, 250, 201, 21, 131, 134, 53, 221, 68, 138, 95, 131, 52, 24, 55, 188, 246, 83, 48, 175, 189, 1, 226, 239, 165, 11, 170, 212, 228, 51, 142, 7, 183]), value: EventValue([]) }, Event { key: EventKey([137, 234, 174, 226, 146, 29, 40, 140, 7, 35, 37, 97, 192, 71, 50, 26, 35, 252, 48, 200, 154, 252, 88, 204, 240, 75, 156, 138, 156, 143, 225, 119, 63, 209, 7, 58, 21, 140, 37, 132, 92, 198, 201, 102, 57, 33, 201, 168, 129, 118, 130, 242, 245, 41, 46, 95, 140, 51, 76, 70, 114, 26, 17, 189, 11, 90, 113, 200, 57, 127, 2, 66, 99, 9, 59, 13, 91, 24, 169, 155, 116, 124, 147, 4, 126, 30, 26, 166, 247, 63, 56, 1, 223, 88, 246, 216]), value: EventValue([9, 194, 202, 196, 10, 153, 63, 105, 158, 54, 252, 26, 5, 21, 71, 87, 234, 55, 136, 23, 40, 36, 183, 42, 84, 19, 154, 62, 167]) }], receipt: 3429230760 }, TransactionReceipt { tx_hash: [254, 150, 162, 233, 246, 236, 176, 234, 66, 27, 136, 118, 134, 30, 247, 109, 57, 43, 238, 164, 55, 171, 69, 142, 205, 212, 176, 241, 249, 186, 77, 96], body_to_save: None, events: [Event { key: EventKey([103, 82, 28, 162, 156, 136, 155, 105, 4, 108, 52, 38, 15, 114, 29, 82, 200, 142, 241, 246, 144, 93, 220, 140, 58, 71, 207, 150, 81, 219, 105, 112, 61, 216, 40, 73, 73, 47, 6, 28, 6, 160, 127, 213, 192, 157, 183, 143, 48, 196, 148, 229, 201, 165, 232, 36, 204, 128, 113]), value: EventValue([161, 57, 240, 214, 213, 177, 14, 77, 18, 122, 173, 63, 252, 223, 43, 208, 111, 102, 236, 110, 150, 69, 43, 11, 155, 179, 151, 46, 49, 199, 141, 155, 63, 197, 20, 152, 81, 168, 21, 221, 53, 24, 34, 143, 107, 141, 141, 177, 253, 218, 214, 238, 200, 92, 178, 83, 234, 108, 143, 48, 66, 237, 143, 157, 110, 173, 23, 184, 138, 122, 187, 191, 58]) }, Event { key: EventKey([185, 83, 149, 201, 66, 128, 83, 132, 152, 13]), value: EventValue([113, 171, 68, 196, 156, 31, 145, 72, 143, 232, 247, 147, 92, 62, 59, 93, 117, 15, 189, 211, 60, 203, 230, 187, 14]) }, Event { key: EventKey([179, 138, 11, 1, 145, 22, 224, 169, 246, 187, 137, 196, 238, 153, 224, 137, 169, 248, 75, 0, 239, 41, 67, 78, 113, 71, 0, 129, 166, 66, 13, 123, 200, 206, 55, 184, 97, 46, 28, 206, 0, 237, 240, 157, 38, 202, 16, 106, 37, 107, 22, 130, 38, 207, 38, 84, 104, 76, 171, 240, 219, 58, 78, 246]), value: EventValue([209, 161, 95, 240, 187, 93, 128, 116, 40, 196, 66, 141, 143, 17, 125, 76, 240, 45, 60, 219, 207, 207, 253, 112, 92, 173, 210, 89, 18, 105, 57, 181, 98, 143, 177, 120, 190, 71, 211, 139, 126, 37, 55, 98, 50, 194, 2, 153, 14, 176, 123, 68, 126, 129, 81, 242, 142, 247, 194, 124, 47, 32, 43, 38, 58, 213, 105, 248, 71, 117]) }, Event { key: EventKey([136, 215, 23, 1, 32, 177, 130, 198, 149, 7, 156, 177, 233, 85, 29, 147, 106]), value: EventValue([232]) }, Event { key: EventKey([40, 51, 140, 89, 115, 230, 129, 124, 29, 193, 221, 196, 238, 87, 181, 154, 232, 181, 192, 236, 141, 85, 99, 142, 197, 36, 11, 54, 189, 94, 92, 143, 21, 166, 146, 254, 119, 239, 154, 146, 154, 11, 24, 124, 54, 251, 215, 188, 30, 15, 153, 44, 110, 55, 136, 26, 110, 87, 199, 166, 251, 54, 93, 164, 180, 8, 47, 76, 158, 234, 143, 190, 207, 143, 235, 55, 156, 113, 18, 218, 3, 99, 180, 18, 11, 208, 253, 24, 47, 27, 214, 155, 112, 180, 245, 135, 126]), value: EventValue([198, 136, 255, 16, 247, 196, 30, 65, 74, 231, 182, 58, 145, 93, 42, 21, 197, 8, 214, 133, 125, 113, 206, 143, 102, 186, 178, 161, 193, 108, 44, 137, 180, 175, 179, 97, 175, 171, 112, 241, 210, 221, 71]) }, Event { key: EventKey([218, 232, 56, 19, 6, 174, 145, 55, 120, 100, 199, 116, 77, 102, 24, 162, 239, 165, 228, 176, 90, 125, 250, 225, 64, 187, 19, 239, 102, 72, 169, 21, 211, 140, 37, 118, 58, 101, 186, 47, 137, 145, 242, 239, 254, 12, 117, 132, 175, 148, 0, 31, 202, 213, 102, 202, 132, 12, 207, 172, 36, 98, 200, 36, 48, 242, 213, 94, 105, 217, 97, 172, 80, 108, 165, 113, 220, 210, 246, 236, 240, 85, 149, 24, 211]), value: EventValue([43, 46, 132, 214, 107, 133, 207, 106, 235, 142, 202, 23, 47, 125, 229, 125, 119, 206, 151, 196, 39, 23, 149, 219, 225, 131, 243, 243, 156, 75, 202, 73, 6, 255, 107, 239, 217, 64, 14, 19, 96, 223, 74, 95, 52, 103, 9, 129, 38, 88, 201, 42, 71, 76]) }, Event { key: EventKey([156, 146, 84, 29, 24, 74, 100, 159, 188, 47, 20, 69, 70, 33, 162, 82, 152, 83, 77, 168, 169, 222, 245, 40, 48, 0]), value: EventValue([189, 2, 77, 115, 202, 157, 188, 38, 160, 67, 223, 0, 28, 130, 185, 249, 48, 38, 174, 118, 178, 170, 241, 156, 76, 112, 192, 144, 120, 152, 189, 199, 156, 38, 79, 31, 194, 91, 218, 187, 186, 110, 131, 236, 243, 123, 97, 207, 68, 225, 149, 4, 246]) }, Event { key: EventKey([6, 45, 111, 204, 203, 205, 112, 48, 132, 181, 0, 137, 90, 167, 154, 233, 60, 156, 25, 127, 212, 175, 231, 93, 53, 15, 162, 125, 82, 222, 192, 26, 27, 195, 13, 127, 127, 38, 233, 218, 253, 18, 255, 167, 57, 59, 202, 194, 73, 156, 117, 162, 174, 16, 46, 213, 50, 224, 218, 61, 49, 74, 250, 181, 253, 211, 74, 137, 29, 117, 186, 40, 235, 125, 115, 123, 244, 50, 9, 25, 109, 130, 98, 78, 63, 51, 92, 78, 120, 171, 133, 140, 238, 162, 177, 196, 56, 35, 4]), value: EventValue([207, 214, 195, 191, 92]) }, Event { key: EventKey([214, 126, 231, 89, 226, 12, 233, 20, 27, 116, 207, 93, 226, 11, 229, 90, 245, 192, 66, 200, 64, 128, 41, 187, 187, 69, 6]), value: EventValue([159, 10, 58, 214, 111, 155, 52, 29, 222, 10, 144, 181, 82, 5, 253, 165, 32, 37, 205, 149, 243, 47, 113, 211, 178, 4, 250, 115, 201, 35, 227, 45, 3, 54, 66, 199, 97, 222, 194, 2, 117, 48, 137, 199, 120, 85, 56, 206, 253, 64, 39, 212, 194, 56, 110, 106, 119, 0, 125, 182, 150, 29, 120, 18, 1, 189, 205, 34, 166, 99, 117, 247, 136, 63, 109, 52, 247, 255, 243, 247, 20, 159, 19, 156, 156, 172, 99, 172, 105, 133, 41, 226, 11]) }], receipt: 2108281183 }, TransactionReceipt { tx_hash: [136, 152, 1, 246, 133, 148, 78, 191, 20, 99, 229, 32, 109, 97, 49, 170, 133, 51, 234, 23, 79, 205, 182, 4, 237, 248, 55, 23, 230, 87, 53, 142], body_to_save: None, events: [Event { key: EventKey([215, 51, 244, 197, 178, 75, 11, 33, 32, 131, 136, 76, 56, 163, 238, 83, 83, 157, 15, 57, 34, 241, 98, 187, 41, 177, 82, 180, 182, 24, 14]), value: EventValue([102, 214, 114, 127, 191, 185, 242, 74, 31, 191, 103, 114, 92, 212, 146, 146, 175, 155, 148, 90, 25, 235, 102, 216, 90, 185, 161, 90, 107, 216, 63, 71, 73, 121, 129, 232, 120, 196, 211, 164, 16, 137, 201, 124, 178, 106, 183, 163, 31, 177, 42, 15, 194, 45, 253, 127, 200, 177, 174, 81, 77, 253, 72, 17, 96]) }, Event { key: EventKey([8, 203, 145, 249, 28, 237, 50, 137, 117, 177, 217, 164, 94, 123, 185, 202, 31, 98, 150, 228, 205, 252, 222, 98, 193, 208, 74, 237, 167, 134, 189, 135, 183, 207]), value: EventValue([142, 196, 236, 121, 216, 102, 175, 123, 48, 29, 209, 18, 157, 229, 161, 97, 179, 196, 196, 144, 200, 80, 196, 182, 208, 222, 52, 186, 234, 0, 127, 67, 41, 65, 143, 32, 8, 124, 232, 53, 68, 34, 149, 55, 82]) }, Event { key: EventKey([159, 156, 28, 233, 182, 182, 204, 128, 13, 145, 46, 150]), value: EventValue([196, 183, 213, 168, 125, 141, 250, 120, 104, 51, 125, 44, 234, 91, 157, 83, 15, 88, 191, 103, 127, 211, 48, 199, 95, 157, 158, 8, 194, 154, 225, 160, 193, 39, 166, 219, 69, 175, 143, 13, 35, 215, 135, 125, 122, 205, 237, 191, 60, 79]) }], receipt: 3985325273 }], phantom_data: PhantomData }], num_txs: 8, num_events: 36 }], {1: (1, 5), 5: (21, 23), 3: (10, 14), 6: (23, 25), 8: (34, 37), 4: (14, 21), 2: (5, 10), 7: (25, 34)}, 2), random_batch_num = 48 +cc 2e4460739ff01b5018dd6e58b68629afc18e5a0378a71e39d8af83cf95619246 # shrinks to (slots, _, total_num_batches) = ([SlotCommit { slot_data: MockBlock { header: MockBlockHeader { prev_hash: 0x0000000000000000000000000000000000000000000000000000000000000000, hash: 0x0000000000000000000000000000000000000000000000000000000000000000, txs_commitment: 0x0000000000000000000000000000000000000000000000000000000000000000, height: 0, time: Time { secs: 1717416663, nanos: 16884000 } }, blobs: [] }, batch_receipts: [BatchReceipt { batch_hash: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 242, 90, 51, 89, 240, 154, 150, 28], tx_receipts: [TransactionReceipt { tx_hash: [44, 36, 66, 154, 249, 193, 104, 136, 128, 232, 33, 214, 151, 114, 229, 191, 200, 168, 194, 254, 133, 255, 40, 169, 92, 49, 164, 190, 51, 121, 159, 88], body_to_save: None, events: [Event { key: EventKey([231, 73, 179, 20, 210, 27, 221, 65, 247, 104, 118, 133, 76, 131, 230, 107, 131, 63, 140, 110, 34, 72, 124, 38, 174, 151, 248, 182, 206, 67, 104, 42, 108, 114, 187, 11, 32, 11, 186, 224, 240, 93, 60, 159, 148, 210, 20, 250, 233, 76, 163, 248, 202, 56, 84, 198, 108, 74, 245, 200, 240, 28, 102, 50, 213, 163, 77, 110, 238, 204, 20, 47, 204, 177]), value: EventValue([233, 177, 36, 119, 252, 132, 188, 198, 221, 116, 102, 127, 151, 242, 79, 70, 6, 166, 193, 200, 199, 160, 96, 245, 255, 182, 92, 7, 10, 202, 200, 137, 61, 199, 42, 153, 21, 129, 94, 186, 27, 129, 72, 101, 60, 79, 31, 14, 174, 14, 167, 163, 124, 235, 177, 45, 169, 122, 120, 15, 174, 83, 65, 160, 219, 33]) }, Event { key: EventKey([70, 233, 157, 204, 19, 153, 154, 175, 102, 7, 28, 117, 14, 212, 175, 238, 31, 187, 47, 59, 246, 90, 50, 124, 97, 153, 172, 231, 163, 238, 87, 53, 149, 109, 216, 178, 31, 70, 202, 29, 102, 84, 18, 78, 120, 220, 198, 37, 121, 106, 64, 39, 210, 234, 74, 118, 179, 38, 235, 62, 11, 134, 99, 231, 35, 102, 229, 57]), value: EventValue([215, 254, 225, 169, 189, 95, 108, 76, 158, 152, 43, 214, 66, 82, 200, 189, 149, 147, 215, 236, 252, 133, 148, 89, 110, 91, 154, 132, 143, 89, 72, 183, 102, 227, 118, 141, 71, 145, 78, 133, 216, 135, 163, 112, 228, 211, 129, 224, 199, 206, 243, 155, 134, 235, 148, 65, 122, 73, 246, 26, 211, 243, 74, 74, 175, 227, 143, 4, 122, 59, 40, 178, 132, 208, 122, 161, 92, 54]) }, Event { key: EventKey([34, 248, 110, 120, 155, 102, 247, 123, 111, 132, 172, 167, 91, 231, 238, 35, 182, 76, 24, 155, 235, 211, 251, 245, 92, 160, 189, 105, 62, 136, 179, 131, 27, 227, 202, 168, 1, 246, 127, 49, 188, 28, 226, 212, 181, 159, 80, 117, 239, 211, 8, 203, 47, 180, 121, 189, 149, 210, 183, 108, 13, 136, 82, 254, 201, 222, 195, 225, 154, 96, 14, 224, 222, 30, 86, 73, 113, 47]), value: EventValue([160, 83, 20, 214, 149]) }, Event { key: EventKey([27, 213, 202, 232, 225, 47, 164, 113, 47, 199, 111, 223, 135, 238, 215, 168, 139, 7, 18, 182, 202, 233, 5, 156, 195, 35, 51, 174, 10, 60, 165, 235, 222, 74, 202, 181, 208, 86, 34, 40, 239, 190, 239, 226, 19, 76, 41, 33, 219, 254, 155, 191, 233, 178, 3, 52, 42, 132, 223, 179]), value: EventValue([51]) }], receipt: 3994070599 }, TransactionReceipt { tx_hash: [78, 88, 240, 142, 148, 216, 140, 167, 1, 151, 45, 97, 7, 205, 35, 98, 214, 170, 199, 41, 174, 185, 218, 57, 160, 98, 236, 123, 195, 165, 16, 50], body_to_save: None, events: [Event { key: EventKey([172, 50, 26, 219, 39, 140, 91, 125, 143, 213, 75, 204, 113, 10, 138, 205, 10, 135, 138, 176, 171, 199, 192, 142, 3, 56, 114, 171, 116, 190, 251, 129, 36, 226, 162, 189, 179, 199, 206, 213, 185, 125, 126, 172, 4, 225, 165, 122, 238, 23, 1, 81, 187, 120, 216, 222, 77, 42, 34, 137, 140, 39, 27, 82, 197, 239, 179, 155, 230, 81, 123, 152, 83, 134, 12, 242, 195, 26, 67, 167, 29, 59, 58, 52, 212, 85, 201, 73, 165, 236, 69, 88, 41, 233, 36, 164]), value: EventValue([44, 150, 117, 119, 205, 86, 119, 235, 24, 23, 71, 132, 236, 118, 192, 208, 239, 85, 32, 88, 59, 162, 225, 222, 105, 240, 72, 140, 177, 247, 91, 130, 221, 223, 118, 62, 235, 30, 65, 170, 110, 217, 139, 11, 96, 94, 23, 125]) }, Event { key: EventKey([147, 170, 104, 170, 96, 91, 16, 105, 20, 220, 101, 81, 242, 48, 154, 112, 110, 55, 213, 172, 50, 15, 189, 0, 181, 226, 190, 134, 188, 111, 105, 148, 181, 35, 212, 131, 59, 81, 136, 195, 247, 22, 7, 74, 107, 32, 164, 177, 228, 53, 26, 45, 147, 84, 148, 123, 252, 195, 1, 123, 75, 80, 147, 221, 229]), value: EventValue([77, 137, 189, 169, 54, 230, 198, 160, 170, 71, 233, 199, 72, 205, 169, 211, 152, 221, 131, 33, 230, 198, 109, 52, 34, 62, 18, 85, 203, 247, 228, 199, 30, 176, 68, 91, 186, 170, 93, 67, 61, 55, 97, 150, 11, 152, 216, 13, 253, 220, 181, 71, 211, 90, 177, 81, 103, 151, 194, 211, 241, 183, 9, 81, 155, 199, 35, 78, 255, 68, 173, 115]) }, Event { key: EventKey([222, 174, 218, 164]), value: EventValue([172, 39, 225]) }, Event { key: EventKey([95, 238, 237, 184, 103, 26, 2, 45, 15, 231]), value: EventValue([111, 190, 236, 219, 195, 149, 187, 34, 205, 13, 29, 88, 65, 129, 218, 176, 244, 18, 208, 35, 248, 140, 81, 237, 199, 65, 67, 69, 222, 236, 231, 95, 112, 232, 189, 41, 170, 61, 208, 97, 132, 186, 133, 149, 214, 191, 250, 96, 195, 78, 31, 70, 95, 30, 130, 47, 31, 249]) }, Event { key: EventKey([235, 16, 26, 96, 52, 125, 145, 4, 108, 124, 137, 94, 17, 222, 157, 54, 16, 205, 80, 183, 157, 225, 36, 201, 199, 173, 26, 175, 143, 56, 76, 118, 54, 220, 37, 175, 212, 104, 13, 99, 127, 228, 28, 176, 95, 32, 158, 165, 86, 13, 156, 175, 159, 73, 147, 0, 218, 209, 18, 150, 42, 29, 193, 232, 183, 116, 120, 185, 46, 58, 226, 114, 165, 10]), value: EventValue([163, 58, 135, 250, 163, 221, 172, 202, 49, 25, 210, 39, 199, 14, 39, 45, 27, 222, 48, 21, 3, 168, 52, 170, 127, 73, 173, 102, 163, 162, 161, 95, 167, 54, 4, 242, 13, 199, 179, 164, 173, 245, 123, 156, 217, 106, 11, 6, 101, 70, 76, 73, 60, 76, 24, 23, 106, 227, 233, 80, 173, 14, 134, 46, 16, 40, 19, 149, 252, 16, 253, 9]) }, Event { key: EventKey([99]), value: EventValue([249, 91, 78, 110, 140, 174, 165, 204, 27, 101, 164, 232, 208, 244, 23, 234, 140, 145, 157, 191, 32, 55, 235, 45, 120, 161, 63, 41, 23, 168, 160, 217, 131, 185, 114, 18, 110, 55, 30, 126, 240, 176, 227, 118, 132, 131, 4, 218, 77, 25, 243, 73, 226, 108, 55, 178, 15, 217, 166, 248, 193, 59, 35, 178, 209, 29, 65, 117, 193, 176, 198, 151, 39, 222, 241, 165, 229, 173, 188, 74, 214]) }], receipt: 2475854702 }, TransactionReceipt { tx_hash: [248, 176, 63, 254, 46, 27, 84, 91, 157, 76, 0, 76, 90, 208, 229, 193, 44, 193, 117, 167, 213, 134, 124, 188, 188, 65, 207, 161, 111, 16, 38, 108], body_to_save: None, events: [], receipt: 3392719712 }, TransactionReceipt { tx_hash: [153, 48, 55, 41, 19, 114, 85, 15, 180, 90, 133, 253, 243, 67, 197, 146, 244, 221, 237, 219, 203, 232, 254, 104, 98, 81, 92, 208, 51, 241, 10, 77], body_to_save: Some([52, 123, 51, 242, 244, 8, 203, 215, 58, 189, 88, 123, 152, 115, 104, 164, 35, 100, 227, 70, 97, 219, 245, 74, 37, 52, 66, 148, 9, 192, 76, 60, 144, 155, 32, 14, 53, 70, 87, 222, 232, 9, 225, 95, 50, 244, 32, 116, 43, 183, 108, 100, 190, 76, 209, 41, 110, 134, 3, 190, 128, 117, 162, 184, 236, 240, 113, 119, 162, 221, 158, 222, 164, 41, 131, 143, 127, 216, 10, 164, 194, 71, 174, 32, 50, 20, 133, 234, 134, 174, 24, 133, 53, 197, 143, 131, 86]), events: [Event { key: EventKey([211, 198, 183, 173, 171, 45, 18, 165, 235, 55, 158, 237, 158, 84, 218, 218, 65, 168, 86, 3, 155, 96, 158, 221, 113, 138, 97, 43, 225, 36, 45, 102, 60, 94, 244, 109, 133, 189, 199, 34, 121, 236, 213, 106, 201, 239, 160, 207, 15, 58, 103, 130, 194, 139, 243, 234, 118, 159, 243, 4, 144, 224, 67, 13]), value: EventValue([181, 22, 198, 132, 103, 252, 213, 99, 194, 36, 144, 22, 225, 140, 242, 173, 227, 46, 188, 236, 80, 252, 36, 250, 180, 189, 96, 1, 218, 39, 53, 162, 194, 95, 95, 220, 97, 67, 56]) }], receipt: 2874852529 }, TransactionReceipt { tx_hash: [81, 226, 62, 86, 165, 198, 15, 155, 141, 223, 48, 206, 58, 30, 254, 145, 250, 120, 58, 57, 128, 214, 1, 49, 115, 235, 37, 103, 53, 65, 224, 86], body_to_save: Some([107, 79, 8, 63, 12, 188, 166, 26, 122, 108, 152, 118, 195]), events: [Event { key: EventKey([45, 181, 84, 133, 70, 70, 196, 148, 105, 122, 31, 227, 170, 186, 121, 213, 141, 60, 150, 199, 209, 72, 164, 34, 209, 96, 155, 51, 212, 66, 72, 172, 22, 237, 48, 84, 233, 36, 154, 20, 135, 132, 16, 101, 199, 111, 127, 253, 47, 111, 164, 76, 229, 175, 44, 43, 234, 205, 170, 215, 142, 216, 218, 172, 249, 238, 93, 184, 64, 19, 150, 79, 23, 149, 38, 166, 23, 125, 189, 181, 215, 11, 232, 136, 222]), value: EventValue([74, 130, 154, 44, 192, 80, 61, 186, 49, 38, 153, 49, 181, 255, 203, 45, 201, 63, 229, 26, 51, 86, 222, 146, 39, 165, 230, 135, 48, 218, 42, 87, 219, 197, 180, 194, 225, 84, 200, 220, 166, 188, 181, 198, 168, 150, 204, 65, 199, 236, 233, 112, 61, 41, 128, 42, 225, 255, 102, 137, 54, 34, 13, 123, 234, 36, 185, 12, 61, 75, 128, 250, 219, 19, 200, 221, 180, 179, 207]) }, Event { key: EventKey([122, 136, 161, 63, 32, 214, 225, 61, 39, 79, 202, 201, 58, 195, 206, 240, 133, 128, 85, 41, 179, 23, 56, 227, 45, 69, 143, 127, 64, 180, 77, 0, 33, 46, 0, 87, 33, 70, 220, 190, 41, 217, 101]), value: EventValue([203, 156, 250, 128, 203, 138, 240, 102, 146, 233, 184, 147, 54, 116, 129, 171, 179, 18, 106, 14, 57, 204, 251, 106, 128, 25, 187, 11, 1, 138, 249, 156, 154, 36, 216, 193, 51, 226, 105, 136, 43, 31, 178, 147, 97, 18, 163, 35, 76, 176, 152]) }, Event { key: EventKey([247, 186, 92, 105, 239, 172, 37, 145, 92, 120, 178, 34, 59, 239, 59, 61, 120, 176, 108, 47, 7, 242, 185, 99, 32, 239, 64, 55, 230, 244, 127, 28, 182, 132, 175, 169, 139, 122, 79, 94, 228, 184, 118, 188, 134, 211, 58, 94, 113, 240, 0, 200, 144, 176, 150, 105, 216, 5, 130, 69, 128, 85, 131, 13, 134, 10, 3, 97, 239, 83, 140, 47, 66, 62, 179, 193, 186, 190, 165, 174, 179, 6, 74, 217, 74]), value: EventValue([54, 76, 21, 242, 217, 204, 110, 120, 79, 86, 112, 247, 178, 200, 59, 78, 68, 196, 21, 57, 44, 81, 144, 198, 251, 81, 53, 238, 68, 222, 102, 238, 177, 51, 49, 123, 202, 119, 168, 173, 79, 206, 36, 111, 42, 25, 130, 154, 95, 81, 57, 116, 145, 14, 51, 96, 132, 114, 28, 155, 58, 6, 57, 62, 6, 205, 225, 152, 111, 11, 206, 190, 150, 245, 96, 17, 143, 50, 76, 207, 197, 60, 118, 18, 207, 228, 235, 135, 37, 12, 125, 149, 205, 6]) }, Event { key: EventKey([6, 165, 7, 54, 215, 22, 141, 30, 3, 228, 32, 98, 109, 21, 244, 241, 53, 131, 214, 36, 158, 144, 141]), value: EventValue([177, 220, 234, 233, 189, 112, 253, 71, 110, 83, 100, 59, 240, 222, 57, 232, 34, 237, 186, 218, 209, 211, 71, 236, 78, 116, 64, 226, 79, 45, 92, 27, 49, 75, 97, 23, 67, 98, 141, 123, 109, 147, 238, 214, 112, 196, 244, 52, 209, 80, 199, 212, 154, 41, 198, 30, 155, 113, 199]) }, Event { key: EventKey([101, 112, 228, 18, 13, 214, 136, 112, 46, 14, 185, 128, 204, 4, 77, 111, 22, 54, 182, 245, 234, 188, 90, 193, 17, 203, 157, 17, 23, 50, 37, 112, 31, 86, 150, 129, 155, 208, 135, 21, 93, 21, 159, 178, 120, 33, 227, 150, 238, 39]), value: EventValue([164, 202, 184, 171, 200, 138, 224, 81, 89, 89, 135, 11, 131, 72, 231, 214, 25, 48, 252, 7, 75, 187, 181, 190, 232, 172, 129, 167]) }, Event { key: EventKey([158, 179, 239, 67, 236, 195, 117, 123, 19, 134, 87, 175, 98, 196, 30, 167, 250, 169, 31, 241]), value: EventValue([131, 178, 182, 101, 240, 187, 34, 218, 246, 245, 97, 81, 113, 231, 128, 42, 188, 79, 69, 63, 203, 92, 155, 143, 46, 238, 93, 16, 35, 14, 57, 250, 188, 46, 161, 203, 202, 143, 220, 243, 75, 187, 180, 160]) }, Event { key: EventKey([142, 171, 47, 254, 62, 166, 209, 167, 197, 120, 198, 202, 185, 157, 242, 174, 96, 32, 68, 182, 65, 45, 209, 36, 254, 157, 238, 18, 65, 222, 227, 146, 62, 25, 15, 227, 103, 218, 52, 36, 95, 157, 98, 220, 23, 114, 80, 35, 124, 42, 180, 2, 200, 155, 192, 121, 139, 120, 97, 154, 193, 163, 189, 107, 28, 138, 87, 237, 60, 92, 176, 121, 22, 213, 248, 83, 77, 77, 123, 4, 248, 178, 56, 169]), value: EventValue([114, 224, 181, 63, 40, 36, 151, 242]) }, Event { key: EventKey([46, 240, 186, 89, 58, 233, 3, 170, 107, 180, 108, 94, 149, 192, 27, 181, 41, 157, 203, 168, 103, 160, 177, 174, 20, 42, 157, 171, 209, 64, 55, 161, 47, 197, 99, 243, 197, 116, 41, 155, 3, 133, 209, 57, 188, 191, 139, 173, 158, 103, 162, 204, 229, 103, 161, 215, 154, 107, 124, 141]), value: EventValue([69, 62, 60, 226, 140, 81, 253, 87, 233, 197, 42, 247, 43, 20, 132, 247, 48, 30, 160, 189, 137, 40, 145, 29, 120, 32, 6, 131, 98, 63, 87, 172, 179, 41, 251, 174, 209, 116, 28, 176, 13, 210, 49, 103, 240, 148, 87, 103, 162, 156, 150, 29, 185, 3, 108, 64, 9, 95, 251, 16, 98, 145, 145, 192, 83, 25, 51, 180, 189, 221, 214, 77, 41, 144, 146, 177, 65, 222, 209, 139, 241, 37, 43, 46, 6, 195, 133, 235, 106, 40, 187, 68, 22, 68, 249, 64, 54]) }, Event { key: EventKey([173, 2, 121, 63, 239, 95, 185, 193, 158, 146, 177, 153, 183, 235, 18, 53, 117, 66, 28, 70, 127, 36, 149, 148, 151, 65, 152, 191, 194]), value: EventValue([38, 54, 137, 227, 220, 77, 46, 32, 43, 191, 93, 31, 208, 59, 240, 173, 226, 30, 187, 23, 88, 105, 176, 164, 95, 227, 133, 151, 111, 23, 227, 75, 36, 199, 27, 179, 116, 56]) }], receipt: 3560368799 }, TransactionReceipt { tx_hash: [147, 98, 63, 226, 43, 226, 170, 131, 83, 146, 78, 97, 25, 109, 90, 111, 168, 71, 10, 172, 230, 123, 121, 246, 91, 12, 69, 169, 132, 239, 194, 30], body_to_save: Some([184, 49, 75, 198, 147, 192, 10, 103, 4, 210, 23, 98, 159, 244, 252, 148, 48, 107, 102, 243, 120, 74, 20, 82, 80, 169, 124, 250, 15, 231, 252, 27, 233, 32, 235, 47, 252, 221, 180, 169, 33, 117, 158, 137, 210, 170, 172, 117, 85, 39, 254, 226, 66, 63, 81, 218, 95, 106, 174, 214, 146, 149, 120, 251, 215, 226, 81, 145, 149, 112, 246, 78, 53, 176, 140, 162, 250, 74, 71, 42, 63, 7, 176, 220, 119, 231]), events: [Event { key: EventKey([231, 75, 177, 227, 38]), value: EventValue([222, 187, 97, 188, 204, 222, 36, 97, 219, 34, 217, 25]) }, Event { key: EventKey([77, 165, 215, 223, 51, 3, 74, 245, 34, 226, 105, 226, 105, 26, 101, 210, 91, 166, 127, 88, 52, 22, 177, 76, 182, 63, 80, 133, 128, 150, 190, 72, 242, 70, 22, 118, 197, 68, 162, 37, 87, 121, 229, 157, 181, 114, 154, 136, 253, 20, 101, 112, 112, 216, 82, 123, 3, 105, 237, 62, 243]), value: EventValue([50, 118, 222, 182, 133, 183, 55, 34, 32, 109, 186, 25, 211, 213, 22, 38, 86, 225, 8, 90, 66, 25, 160, 119, 18, 70, 176, 195, 241, 161, 195, 188, 173, 48, 99, 44, 191, 101, 44, 99, 136, 190, 180, 37, 85, 92, 246, 135, 144, 120, 21, 74, 53, 239, 92, 65, 229, 195, 79, 72, 189, 122, 55, 186, 58, 212, 12, 102, 37, 117, 80, 213, 140]) }, Event { key: EventKey([2, 105, 62, 160, 175, 131, 56, 139, 201, 32, 38, 251, 238, 46, 92, 43, 134, 16, 186, 135, 31, 188, 43, 54, 92, 62, 96, 230, 83, 118, 141, 47, 88, 164, 29, 89, 73, 141, 155, 2, 158, 238, 176, 96, 15, 64, 12, 143, 69, 177, 123, 96, 67, 241, 90, 94, 78, 150, 141, 187, 13, 163, 90, 140, 118, 97, 168, 147, 94, 109, 244, 231, 154, 20, 110, 204, 101, 57, 106, 229, 218, 92, 255, 163, 246, 79, 154, 74, 138, 205]), value: EventValue([198, 206, 152, 137, 101]) }, Event { key: EventKey([112, 230, 192, 12, 29, 180, 220, 191, 210, 29, 69, 123, 40, 232, 187, 30, 239, 28, 168]), value: EventValue([189, 249, 37, 156, 145, 125, 193, 94, 24, 45, 128, 172, 14, 142, 133, 62, 39, 233, 172, 41, 182, 132, 4, 148, 67, 213, 234, 250, 83, 37, 169, 63, 243, 16, 3, 225, 163, 175, 107, 118, 17, 187, 85, 255, 34, 219, 145, 190, 68, 178, 17, 73, 149, 6, 229, 51, 180, 239, 146, 6, 4, 60, 57, 162, 98, 234, 212, 166, 214, 87, 41, 88, 135, 134, 191, 167, 205, 88, 39, 147, 70, 35, 124, 71, 127, 26, 156]) }, Event { key: EventKey([246, 161, 53, 164, 235, 121, 171, 62, 36, 255, 39, 104, 190, 14, 181, 188, 58, 144, 126, 148, 160, 142, 164, 118, 39, 98, 145, 17, 201, 186, 248, 8, 170, 3, 223, 138, 249, 60, 71, 185, 142, 140, 23, 143, 22, 255, 209, 180, 203, 17, 224, 144, 103, 100, 239, 177, 33, 166, 245, 129, 154, 88]), value: EventValue([102, 81, 18, 222, 49, 121, 138, 246, 95, 249, 243, 48, 3, 182, 110, 113, 196, 82, 214, 118, 248, 77, 243, 194, 211, 22, 253, 212, 90, 241, 141, 6, 202, 238, 240, 165, 68, 197, 129, 10, 254, 33, 56, 143, 0, 128, 203, 145, 36, 143, 212, 53, 239, 60, 235, 11, 193, 92, 254, 103, 41, 80, 95, 35, 73, 103, 104, 191, 164, 53, 192, 11, 38, 228, 137, 81, 179, 143, 55, 10, 173, 179, 233, 241, 128, 87, 182, 112, 101, 130, 70, 125, 234, 211, 199, 223, 164, 96]) }, Event { key: EventKey([51, 242, 134, 79, 209, 137, 131, 96, 141, 126, 26, 245, 59, 75, 149, 110, 160, 72, 52, 41, 187, 172, 243, 234, 226, 162, 96, 8, 43, 99, 72, 34, 98, 56, 198, 82, 185, 87, 19, 21, 66, 207, 200, 14, 75, 38, 93, 59, 95, 133, 24, 22, 136, 51, 244, 212, 47, 27, 76, 232, 26, 19, 89, 115, 122, 242, 211, 186, 74, 215, 5, 224, 229, 155, 244, 52, 97, 145, 18, 184, 191, 89, 106, 34, 190, 213, 73, 136, 171, 208, 120]), value: EventValue([26, 243, 229, 245, 246, 207, 46, 30, 215, 77, 245, 121, 1, 60, 101, 157, 196, 117, 109, 105, 233, 211, 164, 161, 107, 116, 244, 14, 148, 86, 136, 35, 183, 27, 113, 234, 214, 233, 6, 225, 153, 136, 174, 193, 233, 174, 112, 10, 15, 144, 87, 36, 21, 203, 232, 60, 99, 244, 171, 253, 157]) }, Event { key: EventKey([174, 201, 242, 211, 100, 68, 245, 157, 163, 14, 243, 165, 56, 85, 235, 61, 140, 41, 246, 63, 94, 172, 19, 57, 50, 152, 82, 177, 47, 112, 156, 144, 180, 220, 220, 18, 13, 193, 157, 133, 8, 135, 132, 133, 78, 84, 175, 120, 126, 40, 254, 145, 116, 186, 143, 102, 51, 24, 199, 50, 118, 170]), value: EventValue([93, 56, 20, 248, 121, 41, 104, 79, 28, 159, 80, 146, 236, 198, 3, 110, 62, 159, 93, 122, 69, 217, 202, 172, 100, 150, 120, 229, 102, 243, 58, 64, 131, 27, 55, 188, 22, 222, 255, 132, 249, 193, 152, 146, 15, 178, 153, 70, 58, 178, 192, 83, 210, 235, 189, 197, 146, 67, 139, 37, 165, 175, 93, 218, 11, 141, 231, 92, 187, 93, 137, 227, 46, 1, 4, 9, 2, 245, 65, 74, 89, 99, 211]) }, Event { key: EventKey([160, 175, 99, 181, 121, 86, 167, 128, 45, 192, 64, 211, 20, 26, 61, 137, 215, 199, 117, 125, 49, 59, 223, 196]), value: EventValue([160, 156, 226, 136, 62, 48, 230, 127, 122, 83, 152, 201, 166, 127, 17, 118, 207, 192, 151, 36, 203, 103, 59, 0, 176, 117, 245, 74, 164, 86, 57, 127, 224, 142, 117, 181, 145, 143, 169, 219, 180, 131, 196, 251, 37, 221, 193, 91, 151, 33, 72, 212, 57, 4, 112, 227, 8, 8, 30, 225, 113, 94, 11]) }], receipt: 3688871437 }, TransactionReceipt { tx_hash: [92, 39, 199, 144, 250, 205, 175, 77, 22, 246, 22, 163, 119, 80, 243, 239, 199, 161, 20, 198, 40, 91, 99, 251, 139, 3, 222, 120, 91, 31, 245, 231], body_to_save: Some([236, 235, 233, 43, 245, 123, 186, 35, 191, 61, 119, 54, 87, 178, 230, 83, 251, 77, 187, 13, 39, 92, 96, 3, 137, 109, 150, 45, 213, 163, 3, 48, 190, 133, 39, 209, 243, 22, 123, 22, 0, 101, 112, 194, 22, 100, 61, 1, 73, 190, 235, 114, 216, 55, 124, 155, 18, 248, 200, 25, 152, 3, 129, 153, 114, 7, 45, 214, 207, 41, 236, 10, 124, 250, 30, 32, 247, 211, 8, 102, 62, 243, 57, 154, 33, 192, 116, 244, 232, 143, 8, 180, 169, 36, 46]), events: [Event { key: EventKey([99, 213, 171, 67, 54, 14, 177, 37, 176, 115, 149, 179, 229, 185, 14, 32, 167, 30, 52, 184, 37, 200, 196, 149, 15, 239, 49, 95, 122, 252, 129, 14, 14, 87, 21, 144, 207, 198, 212, 128, 55, 198, 224, 66, 129, 115, 23, 177, 106, 193, 241, 47, 206, 43, 15, 47, 110, 143, 105, 81, 228, 86, 182, 223, 244, 204, 73, 207, 109, 22, 90, 139, 146, 152, 207]), value: EventValue([89, 137, 210, 1, 168, 42]) }, Event { key: EventKey([79, 108, 45, 147, 37, 116, 207, 49, 146, 158, 175, 45, 0, 210, 103, 200, 215, 147, 168, 171, 54, 225, 84, 13, 212, 86, 94, 165, 207, 152, 23, 90, 213, 64, 72, 69, 8, 236, 236, 36, 28, 154, 8, 156, 93, 174, 149, 190, 232, 214, 237, 212, 223, 134, 203, 80, 4, 224, 219, 90, 96, 84, 113, 197, 23, 123, 58, 216, 49, 139, 181, 249, 41, 1, 167, 17, 153, 48, 193, 219, 111, 167, 56, 138]), value: EventValue([245, 25, 211, 107, 142, 73, 119, 249, 99, 238, 126, 115, 32, 167]) }], receipt: 3185755994 }, TransactionReceipt { tx_hash: [125, 144, 55, 132, 47, 216, 37, 18, 25, 131, 32, 91, 167, 197, 46, 29, 155, 64, 201, 169, 184, 248, 177, 80, 126, 98, 246, 210, 232, 8, 118, 86], body_to_save: None, events: [Event { key: EventKey([98, 36, 221, 183, 188, 106, 88, 39, 119, 15, 238, 196, 205, 9, 129, 5, 136, 126, 136, 204, 138, 144, 169, 0, 153, 96, 180, 43, 167, 52, 146, 110, 249, 208, 143]), value: EventValue([14, 153, 16, 107, 248, 192, 195, 118, 220, 197, 149, 75, 247, 33, 142, 32, 29, 204, 208, 32, 34, 41, 178, 133, 249, 245, 41, 229, 246, 155, 159, 104, 142, 95, 202, 168, 160, 150, 230, 221, 20, 46, 213, 81, 241, 141, 246, 216, 99, 143, 205, 17, 254, 144, 109, 155, 98, 124, 229, 218, 136, 168, 202, 202, 111]) }, Event { key: EventKey([158, 132, 153, 18, 248, 235, 162, 117]), value: EventValue([55, 74, 127, 169, 14, 221, 154, 39, 86, 199, 194, 145, 190, 80, 158, 155, 40, 193, 1, 51, 243, 30, 2, 28, 136, 213, 34, 124, 201, 99, 38, 130, 220, 174, 65, 72, 195, 162, 213, 3, 6, 66, 71, 195]) }, Event { key: EventKey([140, 66, 156, 182, 219, 205, 30, 213, 238, 10, 152, 59, 115, 13, 40, 44, 229, 81, 35, 100, 166, 89, 235, 247, 189, 84, 46, 128, 6, 146, 16, 147, 57, 50, 235, 15, 81, 186, 93, 195, 28, 181, 45, 183, 197, 20, 171, 10, 162, 144, 9, 97, 174, 112, 110, 250]), value: EventValue([168, 102, 48, 3, 87, 132, 208, 207, 91, 64, 81]) }, Event { key: EventKey([49, 61, 106, 132, 25, 211, 108, 174, 143, 98, 42, 148, 171, 158, 226, 144, 75, 244, 145, 220, 174, 43, 164, 161, 98, 113, 95, 104, 118, 193, 67, 26, 249]), value: EventValue([71, 62, 84, 192, 164, 206, 186, 114, 227, 73, 31, 194, 209, 12, 131, 76, 191, 218, 174, 213, 177]) }, Event { key: EventKey([203, 34, 64, 162, 119, 16, 173, 183, 105, 143, 28, 47, 142, 86, 115, 105, 178, 249, 151, 4, 98, 229, 169, 174, 10, 218, 187, 216, 209, 203, 122, 49, 148, 45, 38, 16, 185, 230, 29, 171]), value: EventValue([94, 51, 40, 108, 88, 172, 131, 163, 221, 40, 48, 132, 163, 235, 110, 163, 253, 70, 169, 125, 216, 156, 125, 47, 46, 44, 85, 69, 177, 190, 193, 179, 154, 10, 212, 250, 115, 13, 215, 195, 121, 233, 230, 254, 233, 152, 14, 44, 196, 141, 206, 206, 254, 123, 108, 150, 190, 230, 239, 18, 134, 141, 120, 228, 15, 5, 3]) }, Event { key: EventKey([139, 182, 56]), value: EventValue([194, 61, 170, 57, 201, 43, 133, 65, 42, 98, 196, 216, 93, 197, 123, 59, 172, 247, 83, 45, 51, 232, 41, 51, 128, 252, 248, 13, 119, 103, 182, 234, 146, 131, 105, 117, 41, 255, 132, 5, 61, 176, 117, 56, 170, 99, 146, 206, 140, 132, 21, 63, 124, 120, 140, 188, 150, 84, 97, 181, 188, 247, 28, 88, 6, 119, 39, 49, 156, 52, 57, 29, 80, 249, 156, 65, 101, 107, 71, 242, 20, 148, 129, 212, 190, 205, 193, 103, 143]) }], receipt: 903951216 }], phantom_data: PhantomData }], num_txs: 8, num_events: 36 }], {2: (5, 11), 5: (12, 21), 1: (1, 5), 3: (11, 11), 4: (11, 12), 7: (29, 31), 8: (31, 37), 6: (21, 29)}, 2) +cc 9e811fea04e9412d17803f6337a9b3244093dae538c7d5aceae14cffcf44d6ec # shrinks to (slots, tx_id_to_event_range, _total_num_batches) = ([SlotCommit { slot_data: MockBlock { header: MockBlockHeader { prev_hash: 0x0000000000000000000000000000000000000000000000000000000000000000, hash: 0x0000000000000000000000000000000000000000000000000000000000000000, txs_commitment: 0x0000000000000000000000000000000000000000000000000000000000000000, height: 0, time: Time { secs: 1717416665, nanos: 134466000 } }, blobs: [] }, batch_receipts: [BatchReceipt { batch_hash: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 231, 237, 141, 158, 143, 153, 171, 163, 130, 133], tx_receipts: [], phantom_data: PhantomData }], num_txs: 0, num_events: 0 }], {}, 2), random_event_num = 6157 +cc ed91de7df57d5bc0b7c4c3e5c91d6bfc6b2cfa90057b8e45c815c51da97fcfd3 # shrinks to (slots, tx_id_to_event_range, _total_num_batches) = ([SlotCommit { slot_data: MockBlock { header: MockBlockHeader { prev_hash: 0x0000000000000000000000000000000000000000000000000000000000000000, hash: 0x0000000000000000000000000000000000000000000000000000000000000000, txs_commitment: 0x0000000000000000000000000000000000000000000000000000000000000000, height: 0, time: Time { secs: 1717416669, nanos: 407656000 } } , blobs: [] }, batch_receipts: [BatchReceipt { batch_hash: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 181, 61, 129, 95, 255, 59, 67], tx_receipts: [TransactionReceipt { tx_hash: [146, 111, 38, 100, 240, 205, 59, 31, 129, 245, 82, 102, 129, 69, 136, 174, 94, 77, 163, 183, 137, 94, 202, 226, 99, 7, 173, 40, 180, 205, 103, 229], body_to_save: Some([225, 155, 254, 122, 113, 8, 10, 55, 55, 1, 190, 196, 186, 51, 138, 32, 104, 187, 31, 233, 19, 30, 35, 66, 142, 25, 220, 44, 5, 135, 168, 64, 213, 132, 184, 135, 239, 30, 34, 71, 175, 205, 46, 84, 50, 142, 205, 151, 63, 1, 166, 225, 57, 65, 75, 210, 32, 3, 230, 158, 2, 80, 78, 151, 1, 14, 2, 100, 252, 38, 211, 79, 239, 251]), events: [Event { key: EventKey([208, 108, 202, 99, 19, 245, 126, 34, 34, 165, 146, 247, 111, 136, 61, 99, 220, 79]), value: EventValue([175, 20, 90, 152, 190, 126, 153, 101, 237, 193, 123, 43, 57, 254]) }, Event { key: EventKey([193, 182, 137, 52, 223, 82, 180, 166, 248, 250, 185, 251, 43, 79, 7, 194, 223, 146, 118, 212, 110, 54, 117, 37, 232, 79, 45, 206, 230, 26, 246, 103, 180, 78, 170, 116, 36, 132, 185, 248, 60, 147, 218, 240, 188, 128]), value: EventValue([215, 51, 247, 97, 97, 14, 66, 187, 228, 99, 6, 86, 182, 67, 187, 98, 113, 203, 45, 55, 4, 65, 156, 170, 152, 5, 194, 22, 228, 5, 214, 165, 114, 139, 176, 114, 156, 49, 49, 80, 153, 170, 101, 15, 247, 244, 85, 156, 96, 88, 37, 64, 119, 167, 132, 108, 17, 141, 50, 195, 67, 169, 200, 63, 145, 227]) }, Event { key: EventKey([158, 12, 228, 193, 30, 221, 31, 195, 29, 32, 128, 104, 117, 226, 63, 174, 183, 101, 183, 91, 143, 140, 173, 238, 169, 233, 211, 85, 178, 179, 26, 111, 214, 58, 224, 242, 204, 73, 77, 11, 133, 160, 120, 239, 134, 7, 10, 173, 111, 199, 189, 251, 106, 232, 233, 222, 152, 106, 6, 80, 107, 215, 207, 199, 177, 54, 208]), value: EventValue([144, 48, 224, 39, 135, 146, 238, 15, 78, 32, 248, 254, 88, 140, 238, 171, 34, 217, 225, 124]) }, Event { key: EventKey([184, 187, 71, 23, 88, 25, 212, 228, 130, 182, 230, 91]), value: EventValue([220, 69, 210, 74, 67, 167, 125, 53, 33, 15, 48, 224, 32, 242, 246, 138, 97, 87, 131, 88, 228, 110, 90, 143, 88, 129, 78, 212, 24, 106, 167, 225, 7, 244, 4, 182, 86, 102, 143, 143, 57, 58, 173, 61, 26, 180, 156, 250, 45, 221, 2, 75, 38, 54, 251, 249, 32, 24, 108, 244, 68, 1, 56, 80, 68, 252, 137, 119, 78, 132, 229, 74, 231, 52, 181, 243, 112, 188, 248, 253, 2, 93, 200, 167, 47, 1, 62, 70, 86, 130, 76]) }, Event { key: EventKey([121, 56, 229, 64, 37, 20, 168, 250, 25, 178, 200, 94, 97, 165, 86, 234, 74, 71, 194, 124, 213, 66, 88, 78, 180, 35, 62, 216, 68, 199, 15, 218, 137, 100, 208, 151, 39, 214, 251, 201, 95]), value: EventValue([35, 1, 62, 207, 195, 193, 81, 150, 178, 175, 252, 59, 54, 5, 208, 215, 18, 216, 231, 219, 83, 236, 27, 25, 205, 88, 63, 51]) }, Event { key: EventKey([99, 44, 206, 75, 51, 110, 104, 162, 142, 182, 48, 7, 0]), value: EventValue([0, 85, 148, 22, 40, 27, 117, 127, 232, 98, 178, 150, 182, 193, 114, 48, 172, 190, 50, 173, 11, 178, 88, 52, 13, 20, 126, 213, 228, 214, 63, 251, 43, 212, 230, 188, 93, 253, 73, 209, 175, 228, 24, 88, 190, 229, 195, 106, 225, 57, 170, 133, 247, 230, 176, 90, 189, 197, 226, 228, 15, 253, 55, 117, 190, 21, 21, 146, 62, 14, 144, 90, 135, 112]) }, Event { key: EventKey([171, 197, 233, 217, 167, 16, 151, 168, 210, 193, 108, 36, 41, 52, 200, 115, 216, 222, 230, 115, 11, 195, 80, 83, 126, 150, 164, 124, 36, 207, 136, 203, 153, 35, 80, 135, 171, 207, 201, 61, 230, 96, 27, 24, 179, 8, 9, 124, 118, 138, 94, 184, 178, 5, 173, 97, 227, 88, 80, 23, 18, 100, 84, 227, 14, 5, 111, 123, 154, 115, 35, 57, 45, 22, 188, 28, 10, 24, 233, 148, 210, 127]), value: EventValue([167, 140, 244, 222, 72, 75, 76, 9, 134, 98, 205, 230, 14, 116, 82, 5, 228, 44, 191, 96, 136, 88, 171, 102, 96, 87, 93, 248, 58, 194, 113, 130, 108, 64, 248, 124, 80, 27, 255, 214, 221, 4, 34, 134, 10, 201, 194, 159, 227, 77, 241, 45, 161, 21, 193, 134, 169, 58, 52, 94, 237, 38, 13, 66, 204, 90, 184, 19, 161, 190, 49, 175, 246, 191, 3, 135, 197, 227, 246, 79, 164, 189, 5, 58, 236, 251, 188, 8, 191, 47, 95, 41]) }, Event { key: EventKey([51, 172, 117, 222, 189, 247, 48, 110, 12, 96, 60, 169, 145, 190, 190, 9, 19, 52, 77, 127, 21, 202, 119, 40, 204, 221, 36, 105, 36, 38, 184, 23, 8, 204, 93, 224]), value: EventValue([209, 130, 148, 236, 132, 10, 59, 217, 77, 142, 12, 83, 13, 115, 254, 117, 184, 123, 90, 192, 241, 96, 233, 232, 115, 134, 202, 143, 60, 247, 50, 203, 232, 45, 140, 11, 119, 237, 85, 255, 189, 44, 154, 232, 19, 137, 204, 148, 251, 48, 69, 135, 152, 250, 138, 163, 253, 41, 188, 226, 71, 120, 171, 41, 107, 156, 222, 49, 153, 78, 87, 175, 70, 225, 34, 72, 220, 114, 215, 80, 105, 252]) }], receipt: 441835458 }, TransactionReceipt { tx_hash: [105, 185, 6, 6, 132, 154, 253, 211, 235, 227, 95, 65, 253, 140, 37, 95, 215, 130, 91, 7, 168, 75, 84, 233, 96, 73, 68, 77, 129, 58, 111, 222], body_to_save: Some([51, 192, 30, 91, 249, 114, 201, 143, 34, 209, 51, 71, 54, 79, 202, 58, 209, 121, 57, 13, 241, 32, 194, 182, 35, 195, 25, 236, 120, 137, 65, 86, 190, 238, 211, 64, 118, 205, 219, 220, 18, 251, 250, 107, 231, 216, 38, 224, 202, 147, 129, 157, 41]), events: [], receipt: 132985537 }, TransactionReceipt { tx_hash: [17, 188, 122, 32, 45, 63, 220, 18, 115, 175, 125, 97, 107, 134, 199, 6, 127, 30, 117, 160, 118, 78, 120, 91, 98, 42, 177, 23, 163, 70, 128, 82], body_to_save: Some([158, 14, 128, 181, 26, 171, 170, 138, 94, 112, 52, 6, 235, 118, 63, 133, 152, 190, 175, 197, 135, 248, 145, 114, 124, 140, 205, 17, 27, 223]), events: [Event { key: EventKey([151, 21, 112, 176, 246, 169, 118, 115, 162, 127, 179, 150, 144, 156, 246, 210, 217, 141, 209, 7, 141, 243, 231, 2, 132, 219, 142, 2, 118, 70, 47, 64, 26, 56, 212, 39, 157, 205, 106, 131, 66, 98, 193, 94, 177, 184, 161, 217, 164, 247, 26, 35, 116, 41, 12, 239, 126, 4, 252, 55, 8, 230, 120, 248, 153, 40, 22, 206]), value: EventValue([182, 31, 191, 240, 76, 182, 87, 130, 88, 14, 1, 58, 193, 6, 204, 105, 233, 30, 230, 80, 195, 95, 182, 17, 119, 88, 131, 96, 15, 50, 169, 47, 216, 156, 253, 125, 24, 197, 128, 105, 228, 251, 42, 168, 148, 49, 40, 190, 108, 144, 129, 78, 212, 201, 159, 194, 116, 229, 204, 18, 19, 243, 155, 106, 214, 120, 20, 202, 224, 215, 88, 192, 231, 59, 23, 142, 212, 137, 43, 236, 5, 185, 122, 38, 201, 81, 211, 96, 148, 239, 53, 8, 173]) }, Event { key: EventKey([169, 156, 57, 23, 186, 71, 124, 116, 225, 84, 87, 247, 81, 35, 26, 122, 153, 252, 8, 106, 47, 175, 107, 70, 196, 187, 6, 54, 225, 208, 169, 96, 237, 146, 57, 1, 4, 48, 35, 18, 17, 174, 248, 83, 13, 193, 65, 225, 26, 106, 89, 0, 209, 106, 182, 172, 56, 177, 150, 185, 93, 76, 191, 49, 76, 253, 87, 37, 31, 188, 124, 85, 180, 110, 246, 167, 146, 70, 221, 66, 230, 34, 192, 85, 132, 243, 242, 245]), value: EventValue([84, 21, 164, 120, 32, 84, 19, 251, 175, 179, 44, 104, 241, 196, 228, 94, 131, 24, 83, 197, 218, 142, 27, 11, 147, 108, 100, 130, 189, 230, 255, 105, 78, 217, 54, 238, 139, 23, 86, 218, 123, 140, 136, 10, 171, 39, 224, 67, 61, 14, 93, 36, 33, 187, 51, 69, 82, 133, 60, 208, 11, 93, 169, 65, 239, 168, 217, 117, 214, 94, 105, 201, 247, 246, 33, 125, 52, 179]) }, Event { key: EventKey([221, 220, 41, 128, 226, 147, 163, 85, 202, 19, 35, 175, 35, 232, 28, 17, 184, 88, 108, 45, 8, 109, 246, 255, 57, 188, 134, 163, 154, 205, 141, 10, 65, 195, 184, 6, 123, 103, 66, 53, 86, 84, 25, 249, 149, 153]), value: EventValue([245, 74, 211, 254, 96, 46, 33, 175, 193, 47, 171, 125, 136, 42, 202, 147, 193, 41, 244, 127, 39, 93, 203, 175, 196, 242, 125, 194, 242, 208, 110, 39, 161, 224, 78, 233, 126, 167, 65, 214, 27, 192, 196, 177, 135, 101, 188]) }, Event { key: EventKey([123, 168, 121, 82, 179, 118, 217, 205, 227, 72, 199, 11, 0, 214, 0, 245, 34, 234, 61, 64, 133, 121, 181, 76, 15, 183, 108, 169, 72, 9, 195, 192, 82, 174, 116, 247, 106, 215, 144, 10, 4, 119, 237, 49, 160, 13, 121, 176, 146, 36, 160, 222, 134, 112, 199, 26, 233, 151, 50, 84, 189, 241, 119, 208, 124, 13, 230, 171, 51, 156, 60, 30, 172, 233, 191, 139, 197, 2, 90, 238, 39, 242, 102, 139, 38, 39, 64, 181]), value: EventValue([146, 193, 158, 113, 159, 88, 226, 101, 66, 115, 65, 15, 173, 239, 225, 7, 118, 192, 70, 179, 195, 117, 9, 0, 118, 4, 55, 50, 56, 128, 54, 65, 135, 181, 97, 29, 47, 79, 12, 251, 188, 14, 183, 204, 118, 33, 27, 101, 130, 39, 116, 2, 148, 85, 45, 99, 70, 186, 39, 158, 251, 168, 209, 249, 124, 12, 251, 248, 67, 78, 201, 1, 83]) }, Event { key: EventKey([234, 227, 61, 38, 204, 7, 154, 6, 164, 103, 248, 253]), value: EventValue([62, 0, 110, 143, 53, 87, 31, 118, 54, 43, 64, 224, 36, 32, 147, 63, 88, 108, 197, 225, 144, 244, 109, 130, 151, 55, 0, 60, 117, 120, 177, 200, 185, 118, 120, 140, 216, 155]) }, Event { key: EventKey([203, 255, 143, 185, 57, 132, 160, 145, 88, 69, 174, 51, 244, 242, 0, 34, 35, 205, 176, 114, 191, 144, 139, 1, 232, 144, 30, 199, 102, 178, 126, 239, 156, 122, 233, 2, 124, 23, 107, 140, 251, 72, 215, 216, 23, 6, 37, 125, 106, 24, 135, 26, 141, 236, 206, 9, 101, 213, 75, 243, 87, 202, 87, 218, 230, 115, 48, 206, 144, 213, 217, 122, 239, 60, 241, 231, 234, 32, 193, 140, 159, 67, 89, 16, 3, 17, 42, 100, 225, 201, 207]), value: EventValue([108, 7, 212, 117, 113, 38, 190, 63, 237, 118, 121, 207, 243, 92, 80, 42, 180, 117, 48, 86, 160, 228, 118, 136, 138, 132, 251, 158, 119, 66, 213, 241, 21, 119, 209, 80, 56, 68, 235, 16, 29, 40, 228, 68, 219, 85, 24, 24, 60, 232, 29, 59, 167, 16, 36, 180, 191, 144, 42, 101, 156, 68, 1, 85, 158, 110, 34, 55, 212]) }, Event { key: EventKey([102, 202, 185, 166, 183, 106, 252, 106, 216, 57, 30, 204, 7, 194, 63, 75, 96, 117, 72, 16, 249, 123, 121, 58, 78, 37, 69, 77, 44, 42, 188, 103, 139, 109, 181, 12, 48, 18, 232, 106, 153, 49, 59, 90]), value: EventValue([43, 30, 242, 241]) }], receipt: 1098056261 }, TransactionReceipt { tx_hash: [178, 81, 243, 206, 207, 2, 79, 143, 11, 163, 54, 87, 252, 156, 2, 75, 220, 113, 26, 253, 181, 45, 36, 25, 231, 83, 190, 78, 5, 199, 159, 234], body_to_save: Some([196, 52, 117, 36, 112, 59, 121, 250, 52, 135, 106, 78, 34, 34, 215, 184, 138, 70, 248, 234, 218, 141, 68, 162, 223, 188, 119, 103, 78, 203, 182, 101, 199, 111, 122, 179, 114, 232, 34, 45, 104, 92, 4, 125, 246, 138, 165, 135, 19, 235, 16, 162, 114, 156, 64, 123, 181, 113, 134, 231, 98, 96, 144, 44, 48, 22, 1, 173, 246, 237, 250, 151, 253, 10, 103, 193, 135, 122, 108, 50, 46, 60, 193, 74, 26, 245]), events: [Event { key: EventKey([2, 114, 198, 25, 233, 205]), value: EventValue([75, 12, 129, 62, 173, 83, 121, 223, 144, 101, 88, 195, 254, 116, 179, 78, 167, 248, 249, 223, 41, 167, 203, 102, 127, 141, 87, 68, 234, 213, 152, 181, 150, 203, 146, 81, 47, 199, 188, 187, 53, 100, 107, 154, 221, 53, 123, 121]) }, Event { key: EventKey([33, 249, 175, 1, 168, 43, 190, 101, 161, 45, 112, 27, 252, 233, 19]), value: EventValue([72, 17, 162, 124, 66, 116, 165, 27, 188, 207, 251, 214, 140, 128, 247, 239, 114, 50, 218, 213]) }, Event { key: EventKey([122, 214, 54, 170, 153, 172, 217, 150, 41, 243, 48, 172, 1, 166, 136, 224, 12, 195, 107, 176, 175, 172, 225, 192, 141, 2, 91, 171, 60, 154, 233, 12, 21, 179, 170, 0, 223, 6, 212, 86, 154, 40, 112, 151, 19, 98, 24, 142, 168, 146, 131, 75, 31, 80, 177, 212, 173, 103, 169, 219, 150, 190]), value: EventValue([238, 27, 100, 212, 230, 234, 59, 61, 114, 190, 142, 31, 6, 175, 116, 13, 126, 28, 251, 104, 20, 86]) }, Event { key: EventKey([146, 33, 9, 89, 118, 42, 86, 215, 215, 169, 48, 235, 231, 52, 109, 22, 229, 57, 164, 28, 216, 35, 188, 229, 14, 104, 69, 19, 29, 49, 47, 34, 79, 148, 181, 159, 159, 82, 20, 58, 234, 79, 191, 133, 107, 11, 183, 182, 219, 22, 77, 196, 240, 112, 73, 66, 142, 69, 208, 130, 121, 10, 135, 166, 10, 135, 180]), value: EventValue([77, 21, 132, 250, 130, 241, 9, 183, 32, 85, 216, 31, 152, 192, 78, 2, 206, 111, 122, 19, 241, 201, 229, 241, 3, 240, 161, 213, 82, 141, 181, 93, 129, 105, 195, 208, 121, 252, 46, 57, 222, 208, 80, 98, 198, 231, 123, 84, 141, 49, 192, 98, 78, 194, 79, 216, 55, 143, 162, 187, 120, 118, 54, 74, 42, 16, 87, 109, 123, 172, 149, 52, 227, 6, 134, 120, 99]) }, Event { key: EventKey([152, 152, 249, 26, 134, 49, 33, 178, 99, 80, 57, 67, 9, 60, 1, 184, 237, 57, 44, 173, 45, 85, 250, 210, 121, 241, 143, 8, 207, 87, 75, 191, 11, 171, 38, 9, 194, 73, 14, 175, 151, 96, 97, 164, 91, 160, 139, 95, 239, 77, 217, 176, 149, 218, 54, 80, 88, 128, 203, 217, 165, 46, 242, 159, 162, 212, 7, 217, 64, 99, 111, 106, 143, 239, 35, 22, 153, 137, 197, 249, 22, 70, 43, 11, 184, 172, 122, 190, 189, 139, 193, 170, 149]), value: EventValue([83, 16, 72, 208, 31, 81, 225, 74, 138, 43, 53, 210, 244, 10, 156, 234, 205, 217, 126, 189, 162, 103, 48, 36, 191, 126, 60, 35, 207, 180, 97, 94, 223, 109, 14, 82, 64, 155, 77, 5, 239, 241, 110, 105, 254, 206, 205, 214, 168, 146, 77, 140, 60, 116, 153, 216, 185, 125, 48, 173, 134, 183, 122, 39, 50, 35, 254, 120, 140, 152, 157, 102, 44, 39, 160, 74, 22, 2, 27, 71, 208]) }, Event { key: EventKey([133, 250, 49, 208, 78, 172, 136, 145, 219, 62, 162, 225, 57, 14, 71, 133, 102, 77, 101, 110, 186, 19, 205, 232, 39, 13, 85, 182, 144, 24, 203, 161, 179, 215, 68, 189, 161, 239, 191, 81, 0, 191, 24, 78, 252, 253, 123, 41, 202, 108, 250, 24, 103, 55, 12, 188, 213, 195, 160, 70, 169, 241, 157, 190, 80, 66, 131, 81, 223, 8, 227, 65, 206, 188, 41, 168, 27, 211, 135, 0, 58, 248, 73, 103, 206, 200, 84, 48]), value: EventValue([12, 49, 75, 79, 69, 237, 142, 161, 211, 152, 230, 173, 69, 165, 218, 6, 134, 212, 93, 125, 227, 18, 94, 92, 5, 159, 236, 186, 112, 18, 83, 201, 165, 209, 154, 192, 199, 156, 37, 89, 161, 126, 1, 4, 211, 121, 243, 159, 238, 170, 174, 175, 174, 44, 82, 35, 48, 145, 221, 8, 38, 80, 53, 118, 90, 42, 210, 66, 129, 133, 98, 34, 216, 209, 153, 10, 165, 180, 51, 44, 92, 199, 116, 54, 194, 83, 240, 81, 150]) }, Event { key: EventKey([221, 2, 12, 87, 148, 122, 36, 195, 218, 107, 7, 110, 103, 13, 21, 164, 142, 148, 84, 73, 213, 239, 13, 194, 12, 154, 110, 128, 197, 255, 182, 221, 33, 42, 248, 167, 146, 119, 207, 189, 138, 209, 56, 21, 184, 248]), value: EventValue([134, 251, 233, 217, 12, 184, 55, 128, 57, 35, 69, 139, 45, 73, 112, 25, 119, 173, 8, 109, 84, 216, 99, 25, 41, 223, 88, 254, 139, 167, 33, 99, 54, 5, 5, 192, 151, 159, 186, 6, 132, 148, 73, 96, 136, 197, 217, 174, 165, 118, 12, 74, 245, 77, 86, 132, 43, 50, 200, 205, 110, 62, 160, 146, 184, 193, 141, 30, 217, 174, 184, 193, 220, 78, 21, 218, 144, 245, 253]) }, Event { key: EventKey([139, 242, 28, 4, 240, 212, 14, 64, 239, 153, 81, 124, 179, 217, 52, 61, 43, 172, 72, 194, 63, 27, 93, 253, 75, 212, 126, 225, 68, 104, 233, 91, 190, 108, 206, 33, 188, 214, 217, 143, 29, 209, 69, 112, 230, 159, 37, 69, 207, 106, 12, 72, 65, 145, 64, 158, 34, 249, 188, 191, 35, 82, 41, 94, 244]), value: EventValue([216, 39, 244, 193, 46, 162, 46, 3, 185, 198, 46, 38, 96, 90, 63, 128, 218, 200, 76, 184, 9, 195, 233, 35, 227, 17, 93]) }, Event { key: EventKey([143, 61, 3, 186, 150, 17, 197, 209, 42, 128, 215, 82, 232, 154, 202, 87, 26, 30, 244, 162, 72, 111, 153, 35, 114, 41, 31, 130, 211, 239, 33, 64, 11, 99, 206, 182, 45, 206, 168, 76, 242, 209, 181, 5, 36, 27, 181, 131, 49, 36, 169, 89, 184, 16, 104, 221, 46, 211, 177, 62, 181, 113, 76]), value: EventValue([59, 84, 169, 35, 233, 7, 201, 238, 133, 81, 95, 132, 25, 240, 140, 149, 24, 150, 180, 123, 62, 32, 51, 144, 31, 32, 244, 178, 14, 242, 74, 68, 65, 49, 15, 189, 111, 106, 74, 127, 198, 102, 121, 143, 128, 208, 155, 249, 144, 28, 207, 145, 164, 3, 225, 247, 76, 65, 190, 244, 123, 150, 192, 169, 34, 149, 59, 165, 250, 236, 227, 146, 103, 35, 46, 141, 183, 95, 86, 38, 221, 142, 157, 254]) }], receipt: 3077868880 }], phantom_data: PhantomData }], num_txs: 4, num_events: 24 }], {3: (9, 16), 4: (16, 25), 2: (9, 9), 1: (1, 9)}, 2), random_tx_num = 257 diff --git a/crates/batch-prover/src/proving.rs b/crates/batch-prover/src/proving.rs index bffbb1938..09b0d4b9b 100644 --- a/crates/batch-prover/src/proving.rs +++ b/crates/batch-prover/src/proving.rs @@ -292,9 +292,9 @@ where for (tx_id, proof) in txs_and_proofs { let tx_id_u8 = tx_id.into(); - // l1_height => (tx_id, proof, transition_data) + // l1_height => (tx_id, proof, circuit_output) // save proof along with tx id to db, should be queryable by slot number or slot hash - let transition_data = Vm::extract_output::< + let circuit_output = Vm::extract_output::< ::Spec, BatchProofCircuitOutput<::Spec, StateRoot>, >(&proof) @@ -303,27 +303,26 @@ where info!("Verifying proof!"); let last_active_spec_id = - fork_from_block_number(FORKS.to_vec(), transition_data.last_l2_height).spec_id; + fork_from_block_number(FORKS.to_vec(), circuit_output.last_l2_height).spec_id; let code_commitment = code_commitments_by_spec .get(&last_active_spec_id) .expect("Proof public input must contain valid spec id"); Vm::verify(proof.as_slice(), code_commitment) .map_err(|err| anyhow!("Failed to verify proof: {:?}. Skipping it...", err))?; - debug!("transition data: {:?}", transition_data); + debug!("circuit output: {:?}", circuit_output); - let slot_hash = transition_data.da_slot_hash.into(); + let slot_hash = circuit_output.da_slot_hash.into(); let stored_batch_proof_output = StoredBatchProofOutput { - initial_state_root: transition_data.initial_state_root.as_ref().to_vec(), - final_state_root: transition_data.final_state_root.as_ref().to_vec(), - state_diff: transition_data.state_diff, + initial_state_root: circuit_output.initial_state_root.as_ref().to_vec(), + final_state_root: circuit_output.final_state_root.as_ref().to_vec(), + state_diff: circuit_output.state_diff, da_slot_hash: slot_hash, - sequencer_commitments_range: transition_data.sequencer_commitments_range, - sequencer_public_key: transition_data.sequencer_public_key, - sequencer_da_public_key: transition_data.sequencer_da_public_key, - preproven_commitments: transition_data.preproven_commitments, - validity_condition: borsh::to_vec(&transition_data.validity_condition).unwrap(), + sequencer_commitments_range: circuit_output.sequencer_commitments_range, + sequencer_public_key: circuit_output.sequencer_public_key, + sequencer_da_public_key: circuit_output.sequencer_da_public_key, + preproven_commitments: circuit_output.preproven_commitments, }; let l1_height = ledger_db .get_l1_height_of_l1_hash(slot_hash)? diff --git a/crates/batch-prover/src/runner.rs b/crates/batch-prover/src/runner.rs index 9bcb4550e..044e89f1e 100644 --- a/crates/batch-prover/src/runner.rs +++ b/crates/batch-prover/src/runner.rs @@ -44,8 +44,7 @@ where Da: DaService, Sm: HierarchicalStorageManager, Vm: ZkvmHost, - Stf: StateTransitionFunction::ValidityCondition> - + StfBlueprintTrait, + Stf: StateTransitionFunction + StfBlueprintTrait, Ps: ProverService, DB: BatchProverLedgerOps + Clone, @@ -81,7 +80,6 @@ where Stf: StateTransitionFunction< Vm, Da::Spec, - Condition = ::ValidityCondition, PreState = Sm::NativeStorage, ChangeSet = Sm::NativeChangeSet, > + StfBlueprintTrait, @@ -398,7 +396,6 @@ where Default::default(), Default::default(), current_l1_block.header(), - ¤t_l1_block.validity_condition(), &mut signed_soft_confirmation, )?; let txs_bodies = signed_soft_confirmation.txs().to_owned(); diff --git a/crates/batch-prover/tests/prover_tests.rs b/crates/batch-prover/tests/prover_tests.rs index 91fbe3640..7733a56af 100644 --- a/crates/batch-prover/tests/prover_tests.rs +++ b/crates/batch-prover/tests/prover_tests.rs @@ -4,9 +4,7 @@ use std::sync::Arc; use prover_services::{ParallelProverService, ProofGenMode}; use sov_db::ledger_db::LedgerDB; use sov_db::rocks_db_config::RocksdbConfig; -use sov_mock_da::{ - MockAddress, MockBlockHeader, MockDaService, MockDaSpec, MockHash, MockValidityCond, -}; +use sov_mock_da::{MockAddress, MockBlockHeader, MockDaService, MockDaSpec, MockHash}; use sov_mock_zkvm::MockZkvm; use sov_rollup_interface::da::Time; use sov_rollup_interface::zk::BatchProofCircuitInput; @@ -75,13 +73,12 @@ async fn test_parallel_proving_and_submit() { } struct TestProver { - prover_service: - ParallelProverService, MockStf>, - vm: MockZkvm, + prover_service: ParallelProverService, + vm: MockZkvm, } fn make_new_prover(thread_pool_size: usize, da_service: Arc) -> TestProver { - let vm = MockZkvm::new(MockValidityCond::default()); + let vm = MockZkvm::new(); let proof_mode = ProofGenMode::Execute; let tmpdir = tempfile::tempdir().unwrap(); diff --git a/crates/bitcoin-da/src/spec/block.rs b/crates/bitcoin-da/src/spec/block.rs index 12164be31..8e3c3e6c2 100644 --- a/crates/bitcoin-da/src/spec/block.rs +++ b/crates/bitcoin-da/src/spec/block.rs @@ -4,7 +4,6 @@ use sov_rollup_interface::services::da::SlotData; use super::header::HeaderWrapper; use super::transaction::TransactionWrapper; -use crate::verifier::ChainValidityCondition; // BitcoinBlock is a wrapper around Block to remove unnecessary fields and implement SlotData #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] @@ -15,7 +14,6 @@ pub struct BitcoinBlock { impl SlotData for BitcoinBlock { type BlockHeader = HeaderWrapper; - type Cond = ChainValidityCondition; fn hash(&self) -> [u8; 32] { self.header.hash().to_byte_array() @@ -24,11 +22,4 @@ impl SlotData for BitcoinBlock { fn header(&self) -> &Self::BlockHeader { &self.header } - - fn validity_condition(&self) -> Self::Cond { - ChainValidityCondition { - prev_hash: self.header.prev_hash().to_byte_array(), - block_hash: self.hash(), - } - } } diff --git a/crates/bitcoin-da/src/spec/mod.rs b/crates/bitcoin-da/src/spec/mod.rs index bdb04cef3..e00a700a3 100644 --- a/crates/bitcoin-da/src/spec/mod.rs +++ b/crates/bitcoin-da/src/spec/mod.rs @@ -8,7 +8,6 @@ use self::block_hash::BlockHashWrapper; use self::header::HeaderWrapper; use self::proof::InclusionMultiProof; use self::transaction::TransactionWrapper; -use crate::verifier::ChainValidityCondition; pub mod address; pub mod blob; @@ -43,6 +42,4 @@ impl DaSpec for BitcoinSpec { type InclusionMultiProof = InclusionMultiProof; type CompletenessProof = Vec; - - type ValidityCondition = ChainValidityCondition; } diff --git a/crates/bitcoin-da/src/verifier.rs b/crates/bitcoin-da/src/verifier.rs index 308904cfa..ea39bb7e2 100644 --- a/crates/bitcoin-da/src/verifier.rs +++ b/crates/bitcoin-da/src/verifier.rs @@ -1,16 +1,12 @@ use std::collections::BTreeSet; use bitcoin::hashes::Hash; -use borsh::{BorshDeserialize, BorshSerialize}; use citrea_primitives::compression::decompress_blob; use crypto_bigint::{Encoding, U256}; -use serde::{Deserialize, Serialize}; use sov_rollup_interface::da::{ BlockHeaderTrait, CountedBufReader, DaNamespace, DaSpec, DaVerifier, UpdatedDaState, }; -use sov_rollup_interface::digest::Digest; -use sov_rollup_interface::zk::{LightClientCircuitOutput, ValidityCondition}; -use thiserror::Error; +use sov_rollup_interface::zk::LightClientCircuitOutput; use crate::helpers::parsers::{ parse_batch_proof_transaction, parse_light_client_transaction, ParsedBatchProofTransaction, @@ -62,39 +58,6 @@ pub enum ValidationError { InvalidTimestamp, } -#[derive( - Debug, - Clone, - Copy, - PartialEq, - Eq, - Serialize, - Deserialize, - Hash, - BorshDeserialize, - BorshSerialize, -)] -/// A validity condition expressing that a chain of DA layer blocks is contiguous and canonical -pub struct ChainValidityCondition { - pub prev_hash: [u8; 32], - pub block_hash: [u8; 32], -} -#[derive(Error, Debug)] -pub enum ValidityConditionError { - #[error("conditions for validity can only be combined if the blocks are consecutive")] - BlocksNotConsecutive, -} - -impl ValidityCondition for ChainValidityCondition { - type Error = ValidityConditionError; - fn combine(&self, rhs: Self) -> Result { - if self.block_hash != rhs.prev_hash { - return Err(ValidityConditionError::BlocksNotConsecutive); - } - Ok(rhs) - } -} - impl DaVerifier for BitcoinVerifier { type Spec = BitcoinSpec; @@ -115,7 +78,7 @@ impl DaVerifier for BitcoinVerifier { inclusion_proof: ::InclusionMultiProof, completeness_proof: ::CompletenessProof, namespace: DaNamespace, - ) -> Result<::ValidityCondition, Self::Error> { + ) -> Result<(), Self::Error> { // create hash set of blobs let mut blobs_iter = blobs.iter(); @@ -283,10 +246,7 @@ impl DaVerifier for BitcoinVerifier { return Err(ValidationError::IncorrectInclusionProof); } - Ok(ChainValidityCondition { - prev_hash: block_header.prev_hash().to_byte_array(), - block_hash: block_header.block_hash().to_byte_array(), - }) + Ok(()) } fn verify_header_chain( @@ -530,7 +490,7 @@ mod tests { use crate::spec::proof::InclusionMultiProof; use crate::spec::transaction::TransactionWrapper; use crate::spec::RollupParams; - use crate::verifier::{ChainValidityCondition, ValidationError, WITNESS_COMMITMENT_PREFIX}; + use crate::verifier::{ValidationError, WITNESS_COMMITMENT_PREFIX}; #[test] fn correct() { @@ -626,10 +586,7 @@ mod tests { completeness_proof, DaNamespace::ToBatchProver, ), - Ok(ChainValidityCondition { - prev_hash: _, - block_hash: _ - }) + Ok(()), )); } diff --git a/crates/citrea-stf/src/hooks_impl.rs b/crates/citrea-stf/src/hooks_impl.rs index c8cfc8f6c..935425a39 100644 --- a/crates/citrea-stf/src/hooks_impl.rs +++ b/crates/citrea-stf/src/hooks_impl.rs @@ -116,7 +116,6 @@ impl SlotHooks for Runtime { fn begin_slot_hook( &self, _slot_header: &Da::BlockHeader, - _validity_condition: &Da::ValidityCondition, _pre_state_root: &<::Storage as Storage>::Root, _working_set: &mut sov_modules_api::WorkingSet, ) { diff --git a/crates/citrea-stf/src/verifier.rs b/crates/citrea-stf/src/verifier.rs index 4787091e5..6baf2555b 100644 --- a/crates/citrea-stf/src/verifier.rs +++ b/crates/citrea-stf/src/verifier.rs @@ -45,7 +45,7 @@ where panic!("Invalid hash of DA block header of commitments"); } - let validity_condition = self.da_verifier.verify_transactions( + self.da_verifier.verify_transactions( &data.da_block_header_of_commitments, &data.da_data, data.inclusion_proof, @@ -83,7 +83,6 @@ where data.sequencer_commitments_range, data.state_transition_witnesses, data.da_block_headers_of_soft_confirmations, - &validity_condition, data.soft_confirmations, data.preproven_commitments.clone(), FORKS.to_vec(), @@ -101,7 +100,6 @@ where final_state_root, prev_soft_confirmation_hash: data.prev_soft_confirmation_hash, final_soft_confirmation_hash, - validity_condition, // TODO: not sure about what to do with this yet state_diff, da_slot_hash: data.da_block_header_of_commitments.hash(), sequencer_public_key: data.sequencer_public_key, diff --git a/crates/fullnode/src/da_block_handler.rs b/crates/fullnode/src/da_block_handler.rs index 4927a8624..fbd8bd973 100644 --- a/crates/fullnode/src/da_block_handler.rs +++ b/crates/fullnode/src/da_block_handler.rs @@ -329,7 +329,6 @@ where sequencer_public_key: batch_proof_output.sequencer_public_key, sequencer_da_public_key: batch_proof_output.sequencer_da_public_key, preproven_commitments: batch_proof_output.preproven_commitments.clone(), - validity_condition: borsh::to_vec(&batch_proof_output.validity_condition).unwrap(), }; let l1_hash = batch_proof_output.da_slot_hash.into(); diff --git a/crates/fullnode/src/runner.rs b/crates/fullnode/src/runner.rs index 95a8a2b9e..5d0d70a43 100644 --- a/crates/fullnode/src/runner.rs +++ b/crates/fullnode/src/runner.rs @@ -43,8 +43,7 @@ where Da: DaService, Vm: ZkvmHost + Zkvm, Sm: HierarchicalStorageManager, - Stf: StateTransitionFunction::ValidityCondition> - + StfBlueprintTrait, + Stf: StateTransitionFunction + StfBlueprintTrait, C: Context, DB: NodeLedgerOps + Clone, { @@ -80,7 +79,6 @@ where Stf: StateTransitionFunction< Vm, Da::Spec, - Condition = ::ValidityCondition, PreState = Sm::NativeStorage, ChangeSet = Sm::NativeChangeSet, > + StfBlueprintTrait, @@ -258,7 +256,6 @@ where Default::default(), Default::default(), current_l1_block.header(), - ¤t_l1_block.validity_condition(), &mut signed_soft_confirmation, )?; diff --git a/crates/fullnode/tests/hash_stf.rs b/crates/fullnode/tests/hash_stf.rs index 2895cebfa..c63c49612 100644 --- a/crates/fullnode/tests/hash_stf.rs +++ b/crates/fullnode/tests/hash_stf.rs @@ -1,7 +1,5 @@ use sha2::Digest; -use sov_mock_da::{ - MockAddress, MockBlob, MockBlock, MockBlockHeader, MockDaSpec, MockValidityCond, -}; +use sov_mock_da::{MockAddress, MockBlob, MockBlock, MockBlockHeader, MockDaSpec}; use sov_mock_zkvm::MockZkvm; use sov_modules_api::hooks::{HookSoftConfirmationInfo, SoftConfirmationError}; use sov_modules_api::Context; @@ -14,21 +12,17 @@ use sov_rollup_interface::stf::{ ApplySequencerCommitmentsOutput, SlotResult, SoftConfirmationReceipt, SoftConfirmationResult, StateTransitionFunction, }; -use sov_rollup_interface::zk::{ValidityCondition, Zkvm}; +use sov_rollup_interface::zk::Zkvm; use sov_state::storage::{NativeStorage, StorageKey, StorageValue}; use sov_state::{ArrayWitness, OrderedReadsAndWrites, Prefix, ProverStorage, Storage}; pub type Q = SnapshotManager; #[derive(Default, Clone)] -pub struct HashStf { - phantom_data: std::marker::PhantomData, -} +pub struct HashStf; -impl HashStf { +impl HashStf { pub fn new() -> Self { - Self { - phantom_data: std::marker::PhantomData, - } + Self {} } fn hash_key() -> StorageKey { @@ -43,7 +37,7 @@ impl HashStf { ) -> ([u8; 32], ProverStorage) { let result = hasher.finalize(); - let hash_key = HashStf::::hash_key(); + let hash_key = HashStf::hash_key(); let hash_value = StorageValue::from(result.as_slice().to_vec()); let ordered_reads_writes = OrderedReadsAndWrites { @@ -71,9 +65,7 @@ impl HashStf { } } -impl StfBlueprintTrait - for HashStf -{ +impl StfBlueprintTrait for HashStf { fn begin_soft_confirmation( &mut self, _sequencer_public_key: &[u8], @@ -139,9 +131,7 @@ impl StfBlueprintTrai } } -impl StateTransitionFunction - for HashStf -{ +impl StateTransitionFunction for HashStf { type StateRoot = [u8; 32]; type GenesisParams = Vec; type PreState = ProverStorage; @@ -149,7 +139,6 @@ impl StateTransitionFunction StateTransitionFunction::save_from_hasher(hasher, genesis_state, &mut ArrayWitness::default()) + HashStf::save_from_hasher(hasher, genesis_state, &mut ArrayWitness::default()) } fn apply_slot<'a, I>( @@ -169,7 +158,6 @@ impl StateTransitionFunction SlotResult< Self::StateRoot, @@ -187,7 +175,7 @@ impl StateTransitionFunction::hash_key(); + let hash_key = HashStf::hash_key(); let existing_cache = storage.get(&hash_key, None, &mut witness).unwrap(); tracing::debug!( "HashStf provided_state_root={:?}, saved={:?}", @@ -201,8 +189,7 @@ impl StateTransitionFunction::save_from_hasher(hasher, storage, &mut witness); + let (state_root, storage) = HashStf::save_from_hasher(hasher, storage, &mut witness); SlotResult { state_root, @@ -223,7 +210,6 @@ impl StateTransitionFunction::BlockHeader, - _validity_condition: &::ValidityCondition, _soft_confirmation: &mut sov_modules_api::SignedSoftConfirmation, ) -> Result< SoftConfirmationResult< @@ -249,7 +235,6 @@ impl StateTransitionFunction>, _slot_headers: std::collections::VecDeque::BlockHeader>>, - _validity_condition: &::ValidityCondition, _soft_confirmations: std::collections::VecDeque< Vec, >, @@ -290,7 +275,7 @@ fn compare_output() { let block = MockBlock { header: MockBlockHeader::from_height((idx + 1) as u64), - validity_cond: MockValidityCond::default(), + is_valid: true, blobs, }; blocks.push(block); @@ -317,13 +302,14 @@ pub fn get_result_from_blocks( let storage = new_orphan_storage(tmpdir.path()).unwrap(); - let stf = HashStf::::new(); + let stf = HashStf::new(); - let (genesis_state_root, mut storage) = - as StateTransitionFunction< - MockZkvm, - MockDaSpec, - >>::init_chain(&stf, storage, genesis_params.to_vec()); + let (genesis_state_root, mut storage) = >::init_chain( + &stf, storage, genesis_params.to_vec() + ); let mut state_root = genesis_state_root; @@ -332,17 +318,15 @@ pub fn get_result_from_blocks( for block in blocks { let mut blobs = block.blobs.clone(); - let result = as StateTransitionFunction< - MockZkvm, - MockDaSpec, - >>::apply_slot::<&mut Vec>( + let result = >::apply_slot::< + &mut Vec, + >( &stf, SpecId::Genesis, &state_root, storage, ArrayWitness::default(), &block.header, - &block.validity_cond, &mut blobs, ); diff --git a/crates/fullnode/tests/runner_initialization_tests.rs b/crates/fullnode/tests/runner_initialization_tests.rs index b122ab646..ff398c42b 100644 --- a/crates/fullnode/tests/runner_initialization_tests.rs +++ b/crates/fullnode/tests/runner_initialization_tests.rs @@ -5,7 +5,7 @@ use citrea_common::{FullNodeConfig, RollupPublicKeys, RpcConfig, RunnerConfig, S use citrea_fullnode::CitreaFullnode; use sov_db::ledger_db::LedgerDB; use sov_db::rocks_db_config::RocksdbConfig; -use sov_mock_da::{MockAddress, MockDaConfig, MockDaService, MockDaSpec, MockValidityCond}; +use sov_mock_da::{MockAddress, MockDaConfig, MockDaService, MockDaSpec}; use sov_mock_zkvm::{MockCodeCommitment, MockZkvm}; use sov_prover_storage_manager::ProverStorageManager; use sov_rollup_interface::fork::{Fork, ForkManager}; @@ -16,8 +16,7 @@ mod hash_stf; use hash_stf::HashStf; use tokio::sync::broadcast; -type MockInitVariant = - InitVariant, MockZkvm, MockDaSpec>; +type MockInitVariant = InitVariant; type StorageManager = ProverStorageManager; @@ -46,10 +45,10 @@ fn initialize_runner( storage_path: &std::path::Path, init_variant: MockInitVariant, ) -> CitreaFullnode< - HashStf, + HashStf, StorageManager, MockDaService, - MockZkvm, + MockZkvm, sov_modules_api::default_context::DefaultContext, LedgerDB, > { @@ -102,7 +101,7 @@ fn initialize_runner( let ledger_db = LedgerDB::with_config(&RocksdbConfig::new(rollup_storage_path.as_path(), None)).unwrap(); - let stf = HashStf::::new(); + let stf = HashStf::new(); let storage_config = sov_state::config::Config { path: rollup_storage_path.to_path_buf(), diff --git a/crates/light-client-prover/src/circuit.rs b/crates/light-client-prover/src/circuit.rs index 82b17a1e3..f720e2182 100644 --- a/crates/light-client-prover/src/circuit.rs +++ b/crates/light-client-prover/src/circuit.rs @@ -40,7 +40,7 @@ pub fn run_circuit( .expect("Failed to verify DA header chain"); // Verify data from da - let _validity_condition = da_verifier + da_verifier .verify_transactions( &input.da_block_header, input.da_data.as_slice(), diff --git a/crates/sequencer/src/runner.rs b/crates/sequencer/src/runner.rs index 32c98afac..5388f0520 100644 --- a/crates/sequencer/src/runner.rs +++ b/crates/sequencer/src/runner.rs @@ -69,8 +69,7 @@ where Da: DaService, Sm: HierarchicalStorageManager, Vm: ZkvmHost, - Stf: StateTransitionFunction::ValidityCondition> - + StfBlueprintTrait, + Stf: StateTransitionFunction + StfBlueprintTrait, DB: SequencerLedgerOps + Send + Clone + 'static, { da_service: Arc, @@ -109,7 +108,6 @@ where Stf: StateTransitionFunction< Vm, Da::Spec, - Condition = ::ValidityCondition, PreState = Sm::NativeStorage, ChangeSet = Sm::NativeChangeSet, > + StfBlueprintTrait, diff --git a/crates/sovereign-sdk/adapters/mock-da/src/db_connector.rs b/crates/sovereign-sdk/adapters/mock-da/src/db_connector.rs index e4f38ab16..c6703d4ce 100644 --- a/crates/sovereign-sdk/adapters/mock-da/src/db_connector.rs +++ b/crates/sovereign-sdk/adapters/mock-da/src/db_connector.rs @@ -3,7 +3,7 @@ use std::path::Path; use rusqlite::{params, Connection}; use tracing::debug; -use crate::{MockBlock, MockBlockHeader, MockHash, MockValidityCond}; +use crate::{MockBlock, MockBlockHeader, MockHash}; pub(crate) struct DbConnector { // thread-safe sqlite connection @@ -50,7 +50,7 @@ impl DbConnector { block.header.height, serde_json::to_string(&block.header.time) .expect("DbConnector: Failed to serialize time"), - block.validity_cond.is_valid, + block.is_valid, serde_json::to_string(&block.blobs) .expect("DbConnector: Failed to serialize blobs"), ], @@ -134,9 +134,7 @@ impl DbConnector { time: serde_json::from_str(row.get::<_, String>(4).unwrap().as_str()).unwrap(), bits: 0, }, - validity_cond: MockValidityCond { - is_valid: row.get(5).unwrap(), - }, + is_valid: row.get(5).unwrap(), blobs: serde_json::from_str(row.get::<_, String>(6).unwrap().as_str()).unwrap(), } } @@ -145,12 +143,12 @@ impl DbConnector { #[cfg(test)] mod tests { use crate::db_connector::DbConnector; - use crate::{MockAddress, MockBlob, MockBlock, MockBlockHeader, MockValidityCond}; + use crate::{MockAddress, MockBlob, MockBlock, MockBlockHeader}; fn get_test_block(at_height: u64) -> MockBlock { MockBlock { header: MockBlockHeader::from_height(at_height), - validity_cond: MockValidityCond { is_valid: true }, + is_valid: true, blobs: vec![ MockBlob::new(vec![2; 44], MockAddress::new([1; 32]), [2; 32]), MockBlob::new(vec![3; 12], MockAddress::new([2; 32]), [5; 32]), diff --git a/crates/sovereign-sdk/adapters/mock-da/src/lib.rs b/crates/sovereign-sdk/adapters/mock-da/src/lib.rs index 27cb90111..fc3779f24 100644 --- a/crates/sovereign-sdk/adapters/mock-da/src/lib.rs +++ b/crates/sovereign-sdk/adapters/mock-da/src/lib.rs @@ -6,12 +6,10 @@ mod db_connector; #[cfg(feature = "native")] mod service; mod types; -mod validity_condition; /// Contains DaSpec and DaVerifier pub mod verifier; #[cfg(feature = "native")] pub use service::*; pub use types::*; -pub use validity_condition::*; pub use verifier::MockDaSpec; diff --git a/crates/sovereign-sdk/adapters/mock-da/src/service.rs b/crates/sovereign-sdk/adapters/mock-da/src/service.rs index 27a21d235..2f58e1ee1 100644 --- a/crates/sovereign-sdk/adapters/mock-da/src/service.rs +++ b/crates/sovereign-sdk/adapters/mock-da/src/service.rs @@ -234,7 +234,7 @@ impl MockDaService { }; let block = MockBlock { header, - validity_cond: Default::default(), + is_valid: true, blobs: vec![blob], }; diff --git a/crates/sovereign-sdk/adapters/mock-da/src/types/mod.rs b/crates/sovereign-sdk/adapters/mock-da/src/types/mod.rs index c774f89c4..c3a95a8ee 100644 --- a/crates/sovereign-sdk/adapters/mock-da/src/types/mod.rs +++ b/crates/sovereign-sdk/adapters/mock-da/src/types/mod.rs @@ -11,8 +11,6 @@ use sov_rollup_interface::da::{BlockHashTrait, BlockHeaderTrait, CountedBufReade use sov_rollup_interface::services::da::SlotData; use sov_rollup_interface::Bytes; -use crate::validity_condition::MockValidityCond; - /// A mock hash digest. #[derive( Clone, @@ -217,15 +215,14 @@ impl MockBlob { pub struct MockBlock { /// The header of this block. pub header: MockBlockHeader, - /// Validity condition - pub validity_cond: MockValidityCond, + /// Whether the MockBlock is considered valid + pub is_valid: bool, /// Blobs pub blobs: Vec, } impl SlotData for MockBlock { type BlockHeader = MockBlockHeader; - type Cond = MockValidityCond; fn hash(&self) -> [u8; 32] { self.header.hash.0 @@ -234,10 +231,6 @@ impl SlotData for MockBlock { fn header(&self) -> &Self::BlockHeader { &self.header } - - fn validity_condition(&self) -> MockValidityCond { - self.validity_cond - } } impl MockBlock { diff --git a/crates/sovereign-sdk/adapters/mock-da/src/validity_condition.rs b/crates/sovereign-sdk/adapters/mock-da/src/validity_condition.rs deleted file mode 100644 index 02e4e5619..000000000 --- a/crates/sovereign-sdk/adapters/mock-da/src/validity_condition.rs +++ /dev/null @@ -1,65 +0,0 @@ -use core::marker::PhantomData; - -use anyhow::Error; -use borsh::{BorshDeserialize, BorshSerialize}; -use serde::{Deserialize, Serialize}; -use sha2::Digest; -use sov_rollup_interface::zk::{ValidityCondition, ValidityConditionChecker}; - -/// A trivial test validity condition structure that only contains a boolean -#[derive( - Debug, BorshDeserialize, BorshSerialize, Serialize, Deserialize, PartialEq, Clone, Copy, Eq, -)] -pub struct MockValidityCond { - /// The associated validity condition field. If it is true, the validity condition is verified - pub is_valid: bool, -} - -// Validity conditions should usually be valid -impl Default for MockValidityCond { - fn default() -> Self { - Self { is_valid: true } - } -} - -impl ValidityCondition for MockValidityCond { - type Error = Error; - fn combine(&self, rhs: Self) -> Result { - Ok(MockValidityCond { - is_valid: self.is_valid & rhs.is_valid, - }) - } -} - -#[derive(BorshDeserialize, BorshSerialize, Debug)] -/// A mock validity condition checker that always evaluate to cond -pub struct MockValidityCondChecker { - phantom: PhantomData, -} - -impl ValidityConditionChecker for MockValidityCondChecker { - type Error = Error; - - fn check(&mut self, condition: &MockValidityCond) -> Result<(), Self::Error> { - if condition.is_valid { - Ok(()) - } else { - Err(anyhow::format_err!("Invalid mock validity condition")) - } - } -} - -impl MockValidityCondChecker { - /// Creates new test validity condition - pub fn new() -> Self { - Self { - phantom: Default::default(), - } - } -} - -impl Default for MockValidityCondChecker { - fn default() -> Self { - Self::new() - } -} diff --git a/crates/sovereign-sdk/adapters/mock-da/src/verifier.rs b/crates/sovereign-sdk/adapters/mock-da/src/verifier.rs index 0771891cc..fc3922994 100644 --- a/crates/sovereign-sdk/adapters/mock-da/src/verifier.rs +++ b/crates/sovereign-sdk/adapters/mock-da/src/verifier.rs @@ -2,7 +2,7 @@ use borsh::{BorshDeserialize, BorshSerialize}; use serde::{Deserialize, Serialize}; use sov_rollup_interface::da::{BlobReaderTrait, DaNamespace, DaSpec, DaVerifier, UpdatedDaState}; -use crate::{MockAddress, MockBlob, MockBlockHeader, MockDaVerifier, MockHash, MockValidityCond}; +use crate::{MockAddress, MockBlob, MockBlockHeader, MockDaVerifier, MockHash}; impl BlobReaderTrait for MockBlob { type Address = MockAddress; @@ -39,7 +39,6 @@ impl DaSpec for MockDaSpec { type BlockHeader = MockBlockHeader; type BlobTransaction = MockBlob; type Address = MockAddress; - type ValidityCondition = MockValidityCond; type InclusionMultiProof = [u8; 32]; type CompletenessProof = (); type ChainParams = (); @@ -61,8 +60,8 @@ impl DaVerifier for MockDaVerifier { _inclusion_proof: ::InclusionMultiProof, _completeness_proof: ::CompletenessProof, _namespace: DaNamespace, - ) -> Result<::ValidityCondition, Self::Error> { - Ok(Default::default()) + ) -> Result<(), Self::Error> { + Ok(()) } fn verify_header_chain( diff --git a/crates/sovereign-sdk/adapters/mock-zkvm/src/lib.rs b/crates/sovereign-sdk/adapters/mock-zkvm/src/lib.rs index 9b6e2928c..5ff6793ef 100644 --- a/crates/sovereign-sdk/adapters/mock-zkvm/src/lib.rs +++ b/crates/sovereign-sdk/adapters/mock-zkvm/src/lib.rs @@ -8,7 +8,7 @@ use std::sync::{Arc, Condvar, Mutex}; use anyhow::ensure; use borsh::{BorshDeserialize, BorshSerialize}; use serde::{Deserialize, Serialize}; -use sov_rollup_interface::zk::{Matches, Proof, ValidityCondition}; +use sov_rollup_interface::zk::{Matches, Proof}; /// A mock commitment to a particular zkVM program. #[derive(Debug, Clone, PartialEq, Eq, BorshDeserialize, BorshSerialize, Serialize, Deserialize)] @@ -113,19 +113,25 @@ impl Notifier { /// A mock implementing the zkVM trait. #[derive(Clone)] -pub struct MockZkvm { +pub struct MockZkvm { worker_thread_notifier: Notifier, committed_data: VecDeque>, - validity_condition: ValidityCond, + is_valid: bool, } -impl MockZkvm { +impl Default for MockZkvm { + fn default() -> Self { + Self::new() + } +} + +impl MockZkvm { /// Creates a new MockZkvm - pub fn new(validity_condition: ValidityCond) -> Self { + pub fn new() -> Self { Self { worker_thread_notifier: Default::default(), committed_data: Default::default(), - validity_condition, + is_valid: Default::default(), } } @@ -136,7 +142,7 @@ impl MockZkvm { } } -impl sov_rollup_interface::zk::Zkvm for MockZkvm { +impl sov_rollup_interface::zk::Zkvm for MockZkvm { type CodeCommitment = MockCodeCommitment; type Error = anyhow::Error; @@ -167,15 +173,13 @@ impl sov_rollup_interface::zk::Zkvm for MockZkv } } -impl sov_rollup_interface::zk::ZkvmHost - for MockZkvm -{ +impl sov_rollup_interface::zk::ZkvmHost for MockZkvm { type Guest = MockZkGuest; fn add_hint(&mut self, item: Vec) { let proof_info = ProofInfo { hint: item, - validity_condition: self.validity_condition, + is_valid: self.is_valid, }; let data = borsh::to_vec(&proof_info).unwrap(); @@ -198,7 +202,7 @@ impl sov_rollup_interface::zk::ZkvmHost fn extract_output( proof: &Proof, ) -> Result { - let data: ProofInfo = bincode::deserialize(proof)?; + let data: ProofInfo = bincode::deserialize(proof)?; T::try_from_slice(&data.hint).map_err(Into::into) } @@ -246,9 +250,9 @@ impl sov_rollup_interface::zk::ZkvmGuest for MockZkGuest { } #[derive(Debug, BorshDeserialize, BorshSerialize, Serialize, Deserialize)] -struct ProofInfo { +struct ProofInfo { hint: Vec, - validity_condition: ValidityCond, + is_valid: bool, } #[test] diff --git a/crates/sovereign-sdk/full-node/db/sov-db/src/ledger_db/mod.rs b/crates/sovereign-sdk/full-node/db/sov-db/src/ledger_db/mod.rs index f2d2d9855..cd28da4b4 100644 --- a/crates/sovereign-sdk/full-node/db/sov-db/src/ledger_db/mod.rs +++ b/crates/sovereign-sdk/full-node/db/sov-db/src/ledger_db/mod.rs @@ -18,8 +18,8 @@ use crate::schema::tables::{ BatchByNumber, CommitmentsByNumber, ExecutedMigrations, L2GenesisStateRoot, L2RangeByL1Height, L2Witness, LastPrunedBlock, LastSequencerCommitmentSent, LastStateDiff, LightClientProofBySlotNumber, MempoolTxs, PendingProvingSessions, - PendingSequencerCommitmentL2Range, ProofsBySlotNumber, ProverLastScannedSlot, ProverStateDiffs, - SlotByHash, SlotByNumber, SoftConfirmationByHash, SoftConfirmationByNumber, + PendingSequencerCommitmentL2Range, ProofsBySlotNumberV2, ProverLastScannedSlot, + ProverStateDiffs, SlotByHash, SlotByNumber, SoftConfirmationByHash, SoftConfirmationByNumber, SoftConfirmationStatus, VerifiedBatchProofsBySlotNumber, LEDGER_TABLES, }; use crate::schema::types::{ @@ -564,16 +564,18 @@ impl BatchProverLedgerOps for LedgerDB { proof, proof_output, }; - let proofs = self.db.get::(&SlotNumber(l1_height))?; + let proofs = self + .db + .get::(&SlotNumber(l1_height))?; match proofs { Some(mut proofs) => { proofs.push(data_to_store); self.db - .put::(&SlotNumber(l1_height), &proofs) + .put::(&SlotNumber(l1_height), &proofs) } None => self .db - .put::(&SlotNumber(l1_height), &vec![data_to_store]), + .put::(&SlotNumber(l1_height), &vec![data_to_store]), } } @@ -582,7 +584,7 @@ impl BatchProverLedgerOps for LedgerDB { &self, l1_height: u64, ) -> anyhow::Result>> { - self.db.get::(&SlotNumber(l1_height)) + self.db.get::(&SlotNumber(l1_height)) } /// Set the witness by L2 height diff --git a/crates/sovereign-sdk/full-node/db/sov-db/src/ledger_db/rpc.rs b/crates/sovereign-sdk/full-node/db/sov-db/src/ledger_db/rpc.rs index 8bed46129..3a669d248 100644 --- a/crates/sovereign-sdk/full-node/db/sov-db/src/ledger_db/rpc.rs +++ b/crates/sovereign-sdk/full-node/db/sov-db/src/ledger_db/rpc.rs @@ -6,8 +6,8 @@ use sov_rollup_interface::rpc::{ }; use crate::schema::tables::{ - CommitmentsByNumber, ProofsBySlotNumber, SlotByHash, SoftConfirmationByHash, - SoftConfirmationByNumber, SoftConfirmationStatus, VerifiedBatchProofsBySlotNumber, + CommitmentsByNumber, SlotByHash, SoftConfirmationByHash, SoftConfirmationByNumber, + SoftConfirmationStatus, VerifiedBatchProofsBySlotNumber, }; use crate::schema::types::{BatchNumber, SlotNumber}; @@ -16,7 +16,7 @@ const MAX_BATCHES_PER_REQUEST: u64 = 20; /// The maximum number of soft confirmations that can be requested in a single RPC range query const MAX_SOFT_CONFIRMATIONS_PER_REQUEST: u64 = 20; -use super::{L2GenesisStateRoot, LedgerDB, SharedLedgerOps}; +use super::{L2GenesisStateRoot, LedgerDB, ProofsBySlotNumberV2, SharedLedgerOps}; impl LedgerRpcProvider for LedgerDB { fn get_soft_confirmation( @@ -150,7 +150,7 @@ impl LedgerRpcProvider for LedgerDB { &self, height: u64, ) -> Result>, anyhow::Error> { - match self.db.get::(&SlotNumber(height))? { + match self.db.get::(&SlotNumber(height))? { Some(stored_proofs) => Ok(Some( stored_proofs .into_iter() diff --git a/crates/sovereign-sdk/full-node/db/sov-db/src/schema/tables.rs b/crates/sovereign-sdk/full-node/db/sov-db/src/schema/tables.rs index e516f7114..634d2ddb1 100644 --- a/crates/sovereign-sdk/full-node/db/sov-db/src/schema/tables.rs +++ b/crates/sovereign-sdk/full-node/db/sov-db/src/schema/tables.rs @@ -36,8 +36,8 @@ use sov_schema_db::{CodecError, SeekKeyEncoder}; use super::types::{ AccessoryKey, AccessoryStateValue, BatchNumber, DbHash, JmtValue, L2HeightRange, SlotNumber, - StateKey, StoredBatch, StoredBatchProof, StoredLightClientProof, StoredSlot, - StoredSoftConfirmation, StoredVerifiedProof, + StateKey, StoredBatch, StoredBatchProof, StoredBatchProofV1, StoredLightClientProof, + StoredSlot, StoredSoftConfirmation, StoredVerifiedProof, }; /// A list of all tables used by the StateDB. These tables store rollup state - meaning @@ -68,6 +68,7 @@ pub const LEDGER_TABLES: &[&str] = &[ SoftConfirmationStatus::table_name(), CommitmentsByNumber::table_name(), ProofsBySlotNumber::table_name(), + ProofsBySlotNumberV2::table_name(), VerifiedBatchProofsBySlotNumber::table_name(), MempoolTxs::table_name(), PendingProvingSessions::table_name(), @@ -313,9 +314,14 @@ define_table_with_default_codec!( (LightClientProofBySlotNumber) SlotNumber => StoredLightClientProof ); +define_table_with_default_codec!( + /// Old version of ProofsBySlotNumber + (ProofsBySlotNumber) SlotNumber => Vec +); + define_table_with_default_codec!( /// Proof data on L1 slot - (ProofsBySlotNumber) SlotNumber => Vec + (ProofsBySlotNumberV2) SlotNumber => Vec ); define_table_with_default_codec!( diff --git a/crates/sovereign-sdk/full-node/db/sov-db/src/schema/types.rs b/crates/sovereign-sdk/full-node/db/sov-db/src/schema/types.rs index 7b0dacf17..b57d79cbe 100644 --- a/crates/sovereign-sdk/full-node/db/sov-db/src/schema/types.rs +++ b/crates/sovereign-sdk/full-node/db/sov-db/src/schema/types.rs @@ -110,6 +110,40 @@ pub struct StoredLightClientProof { pub light_client_proof_output: StoredLightClientProofOutput, } +/// Old version of StoredBatchProofOutput +#[derive(Debug, PartialEq, BorshDeserialize, BorshSerialize, Clone)] +pub struct StoredBatchProofOutputV1 { + /// The state of the rollup before the transition + pub initial_state_root: Vec, + /// The state of the rollup after the transition + pub final_state_root: Vec, + /// State diff of L2 blocks in the processed sequencer commitments. + pub state_diff: CumulativeStateDiff, + /// The DA slot hash that the sequencer commitments causing this state transition were found in. + pub da_slot_hash: [u8; 32], + /// The range of sequencer commitments in the DA slot that were processed. + /// The range is inclusive. + pub sequencer_commitments_range: (u32, u32), + /// Sequencer public key. + pub sequencer_public_key: Vec, + /// Sequencer DA public key. + pub sequencer_da_public_key: Vec, + /// Pre-proven commitments L2 ranges which also exist in the current L1 `da_data`. + pub preproven_commitments: Vec, + /// Validity condition. Removed in the newer version. + pub validity_condition: Vec, +} +/// Old version of StoredBatchProof +#[derive(Debug, PartialEq, BorshDeserialize, BorshSerialize)] +pub struct StoredBatchProofV1 { + /// Tx id + pub l1_tx_id: [u8; 32], + /// Proof + pub proof: Proof, + /// Output + pub proof_output: StoredBatchProofOutputV1, +} + /// The on-disk format for a proof. Stores the tx id of the proof sent to da, proof data and state transition #[derive(Debug, PartialEq, BorshDeserialize, BorshSerialize)] pub struct StoredBatchProof { @@ -169,10 +203,6 @@ pub struct StoredBatchProofOutput { pub sequencer_da_public_key: Vec, /// Pre-proven commitments L2 ranges which also exist in the current L1 `da_data`. pub preproven_commitments: Vec, - /// An additional validity condition for the state transition which needs - /// to be checked outside of the zkVM circuit. This typically corresponds to - /// some claim about the DA layer history, such as (X) is a valid block on the DA layer - pub validity_condition: Vec, } impl From for BatchProofOutputRpcResponse { @@ -184,7 +214,6 @@ impl From for BatchProofOutputRpcResponse { da_slot_hash: value.da_slot_hash, sequencer_da_public_key: value.sequencer_da_public_key, sequencer_public_key: value.sequencer_public_key, - validity_condition: value.validity_condition, sequencer_commitments_range: value.sequencer_commitments_range, preproven_commitments: value.preproven_commitments, } diff --git a/crates/sovereign-sdk/full-node/sov-stf-runner/src/mock/mod.rs b/crates/sovereign-sdk/full-node/sov-stf-runner/src/mock/mod.rs index bef179f78..17079fd72 100644 --- a/crates/sovereign-sdk/full-node/sov-stf-runner/src/mock/mod.rs +++ b/crates/sovereign-sdk/full-node/sov-stf-runner/src/mock/mod.rs @@ -8,17 +8,13 @@ use sov_rollup_interface::stf::{ ApplySequencerCommitmentsOutput, BatchReceipt, SlotResult, SoftConfirmationResult, StateTransitionFunction, }; -use sov_rollup_interface::zk::{ValidityCondition, Zkvm}; +use sov_rollup_interface::zk::Zkvm; /// A mock implementation of the [`StateTransitionFunction`] #[derive(PartialEq, Debug, Clone, Eq, serde::Serialize, serde::Deserialize, Default)] -pub struct MockStf { - phantom_data: PhantomData, -} +pub struct MockStf; -impl StateTransitionFunction - for MockStf -{ +impl StateTransitionFunction for MockStf { type StateRoot = [u8; 0]; type GenesisParams = (); type PreState = (); @@ -26,7 +22,6 @@ impl StateTransitionFunction StateTransitionFunction SlotResult< Self::StateRoot, @@ -79,7 +73,6 @@ impl StateTransitionFunction::BlockHeader, - _validity_condition: &::ValidityCondition, _soft_confirmation: &mut sov_modules_api::SignedSoftConfirmation, ) -> Result< SoftConfirmationResult< @@ -105,7 +98,6 @@ impl StateTransitionFunction>, _slot_headers: std::collections::VecDeque::BlockHeader>>, - _validity_condition: &::ValidityCondition, _soft_confirmations: std::collections::VecDeque< Vec, >, diff --git a/crates/sovereign-sdk/module-system/sov-modules-api/src/hooks.rs b/crates/sovereign-sdk/module-system/sov-modules-api/src/hooks.rs index 465aefde8..2752d4d67 100644 --- a/crates/sovereign-sdk/module-system/sov-modules-api/src/hooks.rs +++ b/crates/sovereign-sdk/module-system/sov-modules-api/src/hooks.rs @@ -181,7 +181,6 @@ pub trait SlotHooks { fn begin_slot_hook( &self, slot_header: &Da::BlockHeader, - validity_condition: &Da::ValidityCondition, pre_state_root: &<::Storage as Storage>::Root, working_set: &mut WorkingSet, ); diff --git a/crates/sovereign-sdk/module-system/sov-modules-api/src/lib.rs b/crates/sovereign-sdk/module-system/sov-modules-api/src/lib.rs index cac2038a7..21874d142 100644 --- a/crates/sovereign-sdk/module-system/sov-modules-api/src/lib.rs +++ b/crates/sovereign-sdk/module-system/sov-modules-api/src/lib.rs @@ -195,9 +195,7 @@ pub use sov_rollup_interface::soft_confirmation::{ SignedSoftConfirmation, UnsignedSoftConfirmation, }; pub use sov_rollup_interface::stf::{Event, StateDiff}; -pub use sov_rollup_interface::zk::{ - BatchProofCircuitOutput, ValidityCondition, ValidityConditionChecker, Zkvm, -}; +pub use sov_rollup_interface::zk::{BatchProofCircuitOutput, Zkvm}; pub use sov_rollup_interface::{digest, BasicAddress, RollupAddress}; pub mod prelude { diff --git a/crates/sovereign-sdk/module-system/sov-modules-core/src/runtime/capabilities.rs b/crates/sovereign-sdk/module-system/sov-modules-core/src/runtime/capabilities.rs index dbec54c95..8d2971bca 100644 --- a/crates/sovereign-sdk/module-system/sov-modules-core/src/runtime/capabilities.rs +++ b/crates/sovereign-sdk/module-system/sov-modules-core/src/runtime/capabilities.rs @@ -41,7 +41,6 @@ pub trait KernelSlotHooks: Kernel { fn begin_slot_hook( &self, slot_header: &Da::BlockHeader, - validity_condition: &Da::ValidityCondition, pre_state_root: &<::Storage as Storage>::Root, working_set: &mut WorkingSet, ); diff --git a/crates/sovereign-sdk/module-system/sov-modules-stf-blueprint/src/lib.rs b/crates/sovereign-sdk/module-system/sov-modules-stf-blueprint/src/lib.rs index 1a86eabd6..dde3a3407 100644 --- a/crates/sovereign-sdk/module-system/sov-modules-stf-blueprint/src/lib.rs +++ b/crates/sovereign-sdk/module-system/sov-modules-stf-blueprint/src/lib.rs @@ -404,8 +404,6 @@ where type Witness = <::Storage as Storage>::Witness; - type Condition = Da::ValidityCondition; - fn init_chain( &self, pre_state: Self::PreState, @@ -447,7 +445,6 @@ where _pre_state: Self::PreState, _witness: Self::Witness, _slot_header: &Da::BlockHeader, - _validity_condition: &Da::ValidityCondition, _blobs: I, ) -> SlotResult< Self::StateRoot, @@ -473,7 +470,6 @@ where // the header hash does not need to be verified here because the full // nodes construct the header on their own slot_header: &::BlockHeader, - _validity_condition: &::ValidityCondition, soft_confirmation: &mut SignedSoftConfirmation, ) -> Result< SoftConfirmationResult< @@ -552,7 +548,6 @@ where sequencer_commitments_range: (u32, u32), witnesses: std::collections::VecDeque>, slot_headers: std::collections::VecDeque::BlockHeader>>, - validity_condition: &::ValidityCondition, soft_confirmations: std::collections::VecDeque>, mut preproven_commitment_indicies: Vec, forks: Vec, @@ -804,7 +799,6 @@ where state_witness, offchain_witness, &da_block_header, - validity_condition, &mut soft_confirmation, ) // TODO: this can be just ignoring the failing seq. com. diff --git a/crates/sovereign-sdk/rollup-interface/src/node/rpc/mod.rs b/crates/sovereign-sdk/rollup-interface/src/node/rpc/mod.rs index 50ce1a876..f5fcaeb2d 100644 --- a/crates/sovereign-sdk/rollup-interface/src/node/rpc/mod.rs +++ b/crates/sovereign-sdk/rollup-interface/src/node/rpc/mod.rs @@ -272,11 +272,6 @@ pub struct BatchProofOutputRpcResponse { pub sequencer_da_public_key: Vec, /// Pre-proven commitments L2 ranges which also exist in the current L1 `da_data`. pub preproven_commitments: Vec, - /// An additional validity condition for the state transition which needs - /// to be checked outside of the zkVM circuit. This typically corresponds to - /// some claim about the DA layer history, such as (X) is a valid block on the DA layer - #[serde(with = "hex::serde")] - pub validity_condition: Vec, } /// Custom serialization for BTreeMap diff --git a/crates/sovereign-sdk/rollup-interface/src/node/services/da.rs b/crates/sovereign-sdk/rollup-interface/src/node/services/da.rs index 3cdc2b6f3..c995fbd8c 100644 --- a/crates/sovereign-sdk/rollup-interface/src/node/services/da.rs +++ b/crates/sovereign-sdk/rollup-interface/src/node/services/da.rs @@ -12,7 +12,6 @@ use crate::da::BlockHeaderTrait; use crate::da::{DaData, DaNamespace, DaSpec, DaVerifier, SequencerCommitment}; #[cfg(feature = "native")] use crate::zk::Proof; -use crate::zk::ValidityCondition; /// This type represents a queued request to send_transaction #[cfg(feature = "native")] @@ -38,10 +37,7 @@ pub trait DaService: Send + Sync + 'static { type Verifier: DaVerifier; /// A DA layer block, possibly excluding some irrelevant information. - type FilteredBlock: SlotData< - BlockHeader = ::BlockHeader, - Cond = ::ValidityCondition, - >; + type FilteredBlock: SlotData::BlockHeader>; /// Type that allow to consume [`futures::Stream`] of BlockHeaders. type HeaderStream: futures::Stream< @@ -147,13 +143,8 @@ pub trait SlotData: /// fields like `data_root` are stored in decoded form in the `CelestiaHeader` struct. type BlockHeader: BlockHeaderTrait; - /// The validity condition associated with the slot data. - type Cond: ValidityCondition; - /// The canonical hash of the DA layer block. fn hash(&self) -> [u8; 32]; /// The header of the DA layer block. fn header(&self) -> &Self::BlockHeader; - /// Get the validity condition set associated with the slot - fn validity_condition(&self) -> Self::Cond; } diff --git a/crates/sovereign-sdk/rollup-interface/src/state_machine/da.rs b/crates/sovereign-sdk/rollup-interface/src/state_machine/da.rs index e5b7d1d11..d6869071e 100644 --- a/crates/sovereign-sdk/rollup-interface/src/state_machine/da.rs +++ b/crates/sovereign-sdk/rollup-interface/src/state_machine/da.rs @@ -7,7 +7,7 @@ use borsh::{BorshDeserialize, BorshSerialize}; use serde::de::DeserializeOwned; use serde::{Deserialize, Serialize}; -use crate::zk::{LightClientCircuitOutput, Proof, ValidityCondition}; +use crate::zk::{LightClientCircuitOutput, Proof}; use crate::BasicAddress; /// Commitments made to the DA layer from the sequencer. @@ -108,9 +108,6 @@ pub trait DaSpec: /// The type used to represent addresses on the DA layer. type Address: BasicAddress + Send + Sync; - /// Any conditions imposed by the DA layer which need to be checked outside of the SNARK - type ValidityCondition: ValidityCondition + Send + Sync; - /// A proof that each tx in a set of blob transactions is included in a given block. type InclusionMultiProof: BorshDeserialize + BorshSerialize @@ -162,7 +159,7 @@ pub trait DaVerifier: Send + Sync { inclusion_proof: ::InclusionMultiProof, completeness_proof: ::CompletenessProof, namespace: DaNamespace, - ) -> Result<::ValidityCondition, Self::Error>; + ) -> Result<(), Self::Error>; /// Verify that the block header is valid for the given previous light client proof output fn verify_header_chain( diff --git a/crates/sovereign-sdk/rollup-interface/src/state_machine/stf.rs b/crates/sovereign-sdk/rollup-interface/src/state_machine/stf.rs index cf775dc06..4d3af6e32 100644 --- a/crates/sovereign-sdk/rollup-interface/src/state_machine/stf.rs +++ b/crates/sovereign-sdk/rollup-interface/src/state_machine/stf.rs @@ -20,7 +20,7 @@ use crate::da::DaSpec; use crate::fork::Fork; use crate::soft_confirmation::SignedSoftConfirmation; use crate::spec::SpecId; -use crate::zk::{CumulativeStateDiff, ValidityCondition, Zkvm}; +use crate::zk::{CumulativeStateDiff, Zkvm}; #[cfg(any(all(test, feature = "sha2"), feature = "fuzzing"))] pub mod fuzzing; @@ -212,9 +212,6 @@ pub trait StateTransitionFunction { + Sync + 'static; - /// The validity condition that must be verified outside of the Vm - type Condition: ValidityCondition; - /// Perform one-time initialization for the genesis block and /// returns the resulting root hash and changeset. /// If the init chain fails we panic. @@ -246,7 +243,6 @@ pub trait StateTransitionFunction { pre_state: Self::PreState, witness: Self::Witness, slot_header: &Da::BlockHeader, - validity_condition: &Da::ValidityCondition, blobs: I, ) -> SlotResult< Self::StateRoot, @@ -280,7 +276,6 @@ pub trait StateTransitionFunction { state_witness: Self::Witness, offchain_witness: Self::Witness, slot_header: &Da::BlockHeader, - validity_condition: &Da::ValidityCondition, soft_confirmation: &mut SignedSoftConfirmation, ) -> Result< SoftConfirmationResult< @@ -309,7 +304,6 @@ pub trait StateTransitionFunction { sequencer_commitments_range: (u32, u32), witnesses: VecDeque>, slot_headers: VecDeque>, - validity_condition: &Da::ValidityCondition, soft_confirmations: VecDeque>, preproven_commitment_indicies: Vec, forks: Vec, diff --git a/crates/sovereign-sdk/rollup-interface/src/state_machine/zk/mod.rs b/crates/sovereign-sdk/rollup-interface/src/state_machine/zk/mod.rs index 667415ff4..0c45c2d8f 100644 --- a/crates/sovereign-sdk/rollup-interface/src/state_machine/zk/mod.rs +++ b/crates/sovereign-sdk/rollup-interface/src/state_machine/zk/mod.rs @@ -15,7 +15,6 @@ use core::convert::Into; use core::fmt::Debug; use borsh::{BorshDeserialize, BorshSerialize}; -use digest::Digest; use serde::de::DeserializeOwned; use serde::{Deserialize, Serialize}; @@ -101,27 +100,6 @@ pub trait ZkvmGuest: Zkvm + Send + Sync { fn commit(&self, item: &T); } -/// This trait is implemented on the struct/enum which expresses the validity condition -pub trait ValidityCondition: - Serialize - + DeserializeOwned - + BorshDeserialize - + BorshSerialize - + Debug - + Clone - + Copy - + PartialEq - + Send - + Sync - + Eq -{ - /// The error type returned when two [`ValidityCondition`]s cannot be combined. - type Error: Into; - /// Combine two conditions into one (typically run inside a recursive proof). - /// Returns an error if the two conditions cannot be combined - fn combine(&self, rhs: Self) -> Result; -} - /// State diff produced by the Zk proof pub type CumulativeStateDiff = BTreeMap, Option>>; @@ -151,26 +129,12 @@ pub struct BatchProofCircuitOutput { pub sequencer_public_key: Vec, /// Sequencer DA public key. pub sequencer_da_public_key: Vec, - /// An additional validity condition for the state transition which needs - /// to be checked outside of the zkVM circuit. This typically corresponds to - /// some claim about the DA layer history, such as (X) is a valid block on the DA layer - pub validity_condition: Da::ValidityCondition, /// The last processed l2 height in the processed sequencer commitments. pub last_l2_height: u64, /// Pre-proven commitments L2 ranges which also exist in the current L1 `da_data`. pub preproven_commitments: Vec, } -/// This trait expresses that a type can check a validity condition. -pub trait ValidityConditionChecker: - BorshDeserialize + BorshSerialize + Debug -{ - /// The error type returned when a [`ValidityCondition`] is invalid. - type Error: Into; - /// Check a validity condition - fn check(&mut self, condition: &Condition) -> Result<(), Self::Error>; -} - /// A trait expressing that two items of a type are (potentially fuzzy) matches. /// We need a custom trait instead of relying on [`PartialEq`] because we allow fuzzy matches. pub trait Matches {