Fixtures.hs (4594B)
1 {-# LANGUAGE OverloadedStrings #-} 2 3 -- | 4 -- Module: Fixtures 5 -- Copyright: (c) 2025 Jared Tobin 6 -- License: MIT 7 -- Maintainer: Jared Tobin <jared@ppad.tech> 8 -- 9 -- Benchmark inputs: real mainnet gossip, a signed node_announcement, and 10 -- large gossip query replies. 11 12 module Fixtures ( 13 Fixtures(..) 14 , fixtures 15 ) where 16 17 import qualified Data.ByteString as BS 18 import qualified Data.ByteString.Base16 as B16 19 import qualified Lightning.Protocol.BOLT1 as BOLT1 20 import Lightning.Protocol.BOLT7 21 22 data Fixtures = Fixtures 23 { f_ann_bytes :: !BS.ByteString 24 , f_ann :: !ChannelAnnouncement 25 , f_upd_bytes :: !BS.ByteString 26 , f_upd :: !ChannelUpdate 27 , f_upd_key :: !BOLT1.Point 28 , f_node_bytes :: !BS.ByteString 29 , f_node :: !NodeAnnouncement 30 , f_qsci_bytes :: !BS.ByteString 31 , f_qsci :: !QueryShortChannelIds 32 , f_rcr_bytes :: !BS.ByteString 33 , f_rcr :: !ReplyChannelRange 34 } 35 36 -- | The fixtures, or 'Nothing' if one fails to build. 37 fixtures :: Maybe Fixtures 38 fixtures = do 39 ann_bytes <- B16.decode ann_hex 40 ann <- right (decode_channel_announcement ann_bytes) 41 upd_bytes <- B16.decode upd_hex 42 upd <- right (decode_channel_update upd_bytes) 43 node_bytes <- B16.decode node_hex 44 node <- right (decode_node_announcement node_bytes) 45 ch <- BOLT1.chain_hash (BS.replicate 32 0x6f) 46 let ids = [ BOLT1.ShortChannelId (0x0cf88400000000 + 0x10000 * i) 47 | i <- [1 .. 1000] ] 48 qsci = QueryShortChannelIds ch ids 49 (Just (map (\i -> QueryFlags (i `mod` 32)) [1 .. 1000])) 50 BOLT1.empty_tlv_stream 51 rcr = ReplyChannelRange ch 850000 10000 True ids 52 (Just [ ChannelUpdateTimestamps (1776493010 + i) (1776493020 + i) 53 | i <- [1 .. 1000] ]) 54 (Just [ ChannelUpdateChecksums (0x1da953bd + i) (0xf0a89fda + i) 55 | i <- [1 .. 1000] ]) 56 BOLT1.empty_tlv_stream 57 qsci_bytes <- right (encode_query_short_channel_ids qsci) 58 rcr_bytes <- right (encode_reply_channel_range rcr) 59 pure Fixtures 60 { f_ann_bytes = ann_bytes 61 , f_ann = ann 62 , f_upd_bytes = upd_bytes 63 , f_upd = upd 64 , f_upd_key = ca_node_id_1 ann 65 , f_node_bytes = node_bytes 66 , f_node = node 67 , f_qsci_bytes = qsci_bytes 68 , f_qsci = qsci 69 , f_rcr_bytes = rcr_bytes 70 , f_rcr = rcr 71 } 72 where 73 right :: Either e a -> Maybe a 74 right = either (const Nothing) Just 75 76 -- channel_announcement for 850052x2992x1 77 ann_hex :: BS.ByteString 78 ann_hex = mconcat 79 [ "3c256c270126d2c52ab5464fa959d627e9baec8c76bd2b81d34b47c4efb03290" 80 , "40126ea7a0f8d31420976dc28ff684dc63f62620fa10dbac4fe3d417ca5690c1" 81 , "b7fe1de61f5dd2b8368886d6c98f625c9110198e57c14fac93d4eff34e19ce5f" 82 , "5dc6fef4501e8105c8f9b82d6d0b348f5840864445b071ae7a741b5eb92d2ec0" 83 , "ab85681e4e1e85144bbbd8757c14cee92468d2c5ac84345cb28931b6fed5e339" 84 , "00ed9dd363db630f31248cfa933a3667cbf87bb78a48a442e81c652686355365" 85 , "ff33164c7588f0a753d50c4d52dd4a81c611fa47b4e950dfc9e3379a12ef7834" 86 , "781c0900b90f56a5a49893446d03c8d283c3c093e3c8c682ff6cb40d70d9eebc" 87 , "00006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000" 88 , "00000cf884000bb0000102bb5e47ee26aca1654ce092d9d06eac15d953210c73" 89 , "7f2220e2d7e54c4f108677030b828fd1e42549fbc2f1d0960ec3663362c41777" 90 , "d3d87fe1b8e1d4bf063abcaa02bc3f260955062a4f427704edef1864c76d6777" 91 , "fe81bed43a5f6297dda1c7ca9203523e164f4f9fbdea978c6570d56b13ca8338" 92 , "430e6794ff74cf6aa0dbda71dd2d" 93 ] 94 95 -- a channel_update for it from node_id_1, with an inbound-fee extension 96 upd_hex :: BS.ByteString 97 upd_hex = mconcat 98 [ "1c3f0859cb3f4494919c3dcc80d22bbf1e25e378bd95f071530833c2371c33d7" 99 , "0766012ebef1cd79b299a54d0d29bea2ef6feca1d6cfa188864c95d7eea7e9a4" 100 , "6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000" 101 , "0cf884000bb000016a0a1c760100006400000000000003e80000000000001388" 102 , "00000000b1069a80fdd9030800000000ffffffed" 103 ] 104 105 -- a node_announcement with one address descriptor of each type 106 node_hex :: BS.ByteString 107 node_hex = mconcat 108 [ "edbd2df19aee2f072d9665e2d9a2807fbcd4be6876f6863955ea11870e411e66" 109 , "063a31dcef14f1983524f87e108ee556b3a6646c873cd4bbcc07512c8f5e8f6a" 110 , "000908000000000002aaa26553f1000324653eac434488002cc06bbfb7f10fe1" 111 , "8991e35f9fe4302dbea6d2353dc0ab1c314159707061642d626f6c7437000000" 112 , "000000000000000000000000000000000000000063017f000001260702000000" 113 , "00000000000000000000000001260703aaaaaaaaaaaaaaaaaaaaaaaa04bbbbbb" 114 , "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" 115 , "2607050e6c6e2e6578616d706c652e636f6d2607060102036503657874" 116 ]