core-lightning/bitcoin/short_channel_id.c
Christian Decker d7224e2178 gossip: Added short_channel_id_to_uint for uintmap index
Signed-off-by: Christian Decker <decker.christian@gmail.com>
2018-02-05 18:28:39 +00:00

41 lines
1.0 KiB
C

#include <bitcoin/short_channel_id.h>
#include <ccan/tal/str/str.h>
#include <stdio.h>
#include <string.h>
bool short_channel_id_from_str(const char *str, size_t strlen,
struct short_channel_id *dst)
{
u32 blocknum, txnum;
u16 outnum;
int matches;
char buf[strlen + 1];
memcpy(buf, str, strlen);
buf[strlen] = 0;
matches = sscanf(buf, "%u:%u:%hu", &blocknum, &txnum, &outnum);
dst->blocknum = blocknum;
dst->txnum = txnum;
dst->outnum = outnum;
return matches == 3;
}
char *short_channel_id_to_str(const tal_t *ctx, const struct short_channel_id *scid)
{
return tal_fmt(ctx, "%d:%d:%d", scid->blocknum, scid->txnum, scid->outnum);
}
bool short_channel_id_eq(const struct short_channel_id *a,
const struct short_channel_id *b)
{
return a->blocknum == b->blocknum && a->txnum == b->txnum &&
a->outnum == b->outnum;
}
u64 short_channel_id_to_uint(const struct short_channel_id *scid)
{
return ((u64)scid->blocknum & 0xFFFFFF) << 40 |
((u64)scid->txnum & 0xFFFFFF) << 16 | (scid->outnum & 0xFFFF);
}