diff --git a/devtools/Makefile b/devtools/Makefile index 6ef29c40f..3ffa81a19 100644 --- a/devtools/Makefile +++ b/devtools/Makefile @@ -8,6 +8,7 @@ DEVTOOLS_COMMON_OBJS := \ common/bech32.o \ common/bech32_util.o \ common/bolt11.o \ + common/decode_short_channel_ids.o \ common/hash_u5.o \ common/type_to_string.o \ common/utils.o \ diff --git a/devtools/decodemsg.c b/devtools/decodemsg.c index 551fad93d..5e5c94d20 100644 --- a/devtools/decodemsg.c +++ b/devtools/decodemsg.c @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/devtools/print_wire.c b/devtools/print_wire.c index a57081b8b..650d765bd 100644 --- a/devtools/print_wire.c +++ b/devtools/print_wire.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -100,6 +101,46 @@ static void printwire_addresses(const u8 **cursor, size_t *plen, size_t len) printf(" ]\n"); } +static void printwire_encoded_short_ids(const u8 **cursor, size_t *plen, size_t len) +{ + struct short_channel_id *scids; + u8 *arr = tal_arr(tmpctx, u8, len); + + fromwire_u8_array(cursor, plen, arr, len); + if (!*cursor) + return; + + printf("["); + scids = decode_short_ids(tmpctx, arr); + if (scids) { + switch (arr[0]) { + case SHORTIDS_UNCOMPRESSED: + printf(" (UNCOMPRESSED)"); + break; + case SHORTIDS_ZLIB: + printf(" (ZLIB)"); + break; + default: + abort(); + } + for (size_t i = 0; i < tal_count(scids); i++) + printf(" %s", + short_channel_id_to_str(tmpctx, &scids[i])); + } else { + /* If it was unknown, that's different from corrupt */ + if (len == 0 + || arr[0] == SHORTIDS_UNCOMPRESSED + || arr[0] == SHORTIDS_ZLIB) { + printf(" **CORRUPT**"); + return; + } else { + printf(" UNKNOWN:"); + print_hexstring(cursor, plen, len); + } + } + printf(" ]\n"); +} + void printwire_u8_array(const char *fieldname, const u8 **cursor, size_t *plen, size_t len) { if (streq(fieldname, "node_announcement.alias")) { @@ -110,6 +151,10 @@ void printwire_u8_array(const char *fieldname, const u8 **cursor, size_t *plen, printwire_addresses(cursor, plen, len); return; } + if (strends(fieldname, ".encoded_short_ids")) { + printwire_encoded_short_ids(cursor, plen, len); + return; + } printf("["); if (!print_hexstring(cursor, plen, len))