mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-22 08:34:20 +01:00
htlc: move htlc structure into channeld.
Other places require the flags and states, but the structure is only needed in channeld, and even then we can remove several fields. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
committed by
Christian Decker
parent
d1378fe1a5
commit
3c22aaa213
@@ -47,47 +47,9 @@ enum side {
|
|||||||
#define HTLC_LOCAL_F_OWNER HTLC_FLAG(LOCAL,HTLC_F_OWNER)
|
#define HTLC_LOCAL_F_OWNER HTLC_FLAG(LOCAL,HTLC_F_OWNER)
|
||||||
#define HTLC_LOCAL_F_WAS_COMMITTED HTLC_FLAG(LOCAL,HTLC_F_WAS_COMMITTED)
|
#define HTLC_LOCAL_F_WAS_COMMITTED HTLC_FLAG(LOCAL,HTLC_F_WAS_COMMITTED)
|
||||||
|
|
||||||
struct htlc {
|
|
||||||
/* Useful for debugging, and decoding via ->src. */
|
|
||||||
struct peer *peer;
|
|
||||||
/* Block number where we abort if it's still live (LOCAL only) */
|
|
||||||
u32 deadline;
|
|
||||||
/* What's the status. */
|
|
||||||
enum htlc_state state;
|
|
||||||
/* The unique ID for this peer and this direction (LOCAL or REMOTE) */
|
|
||||||
u64 id;
|
|
||||||
/* The amount in millisatoshi. */
|
|
||||||
u64 msatoshi;
|
|
||||||
/* When the HTLC can no longer be redeemed. */
|
|
||||||
struct abs_locktime expiry;
|
|
||||||
/* The hash of the preimage which can redeem this HTLC */
|
|
||||||
struct sha256 rhash;
|
|
||||||
/* The preimage which hashes to rhash (if known) */
|
|
||||||
struct preimage *r;
|
|
||||||
|
|
||||||
/* FIXME: We could union these together: */
|
|
||||||
/* Routing information sent with this HTLC. */
|
|
||||||
const u8 *routing;
|
|
||||||
/* Previous HTLC (if any) which made us offer this (LOCAL only) */
|
|
||||||
struct htlc *src;
|
|
||||||
const u8 *fail;
|
|
||||||
/* FIXME: actually an enum onion_type */
|
|
||||||
u8 malformed;
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *htlc_state_name(enum htlc_state s);
|
const char *htlc_state_name(enum htlc_state s);
|
||||||
enum htlc_state htlc_state_from_name(const char *name);
|
|
||||||
void htlc_changestate(struct htlc *h,
|
|
||||||
enum htlc_state oldstate,
|
|
||||||
enum htlc_state newstate,
|
|
||||||
bool db_commit);
|
|
||||||
int htlc_state_flags(enum htlc_state state);
|
int htlc_state_flags(enum htlc_state state);
|
||||||
|
|
||||||
static inline bool htlc_has(const struct htlc *h, int flag)
|
|
||||||
{
|
|
||||||
return htlc_state_flags(h->state) & flag;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline enum side htlc_state_owner(enum htlc_state state)
|
static inline enum side htlc_state_owner(enum htlc_state state)
|
||||||
{
|
{
|
||||||
if (state < RCVD_ADD_HTLC) {
|
if (state < RCVD_ADD_HTLC) {
|
||||||
@@ -103,56 +65,6 @@ static inline enum side htlc_state_owner(enum htlc_state state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline enum side htlc_owner(const struct htlc *h)
|
|
||||||
{
|
|
||||||
return htlc_state_owner(h->state);
|
|
||||||
}
|
|
||||||
|
|
||||||
void htlc_undostate(struct htlc *h,
|
|
||||||
enum htlc_state oldstate, enum htlc_state newstate);
|
|
||||||
|
|
||||||
/* htlc_map: ID -> htlc mapping. */
|
|
||||||
static inline u64 htlc_key(const struct htlc *h)
|
|
||||||
{
|
|
||||||
return h->id;
|
|
||||||
}
|
|
||||||
static inline bool htlc_cmp(const struct htlc *h, u64 id)
|
|
||||||
{
|
|
||||||
return h->id == id;
|
|
||||||
}
|
|
||||||
static inline size_t htlc_hash(u64 id)
|
|
||||||
{
|
|
||||||
return siphash24(siphash_seed(), &id, sizeof(id));
|
|
||||||
}
|
|
||||||
HTABLE_DEFINE_TYPE(struct htlc, htlc_key, htlc_hash, htlc_cmp, htlc_map);
|
|
||||||
|
|
||||||
static inline struct htlc *htlc_get(struct htlc_map *htlcs, u64 id, enum side owner)
|
|
||||||
{
|
|
||||||
struct htlc *h;
|
|
||||||
struct htlc_map_iter it;
|
|
||||||
|
|
||||||
for (h = htlc_map_getfirst(htlcs, id, &it);
|
|
||||||
h;
|
|
||||||
h = htlc_map_getnext(htlcs, id, &it)) {
|
|
||||||
if (h->id == id && htlc_has(h, HTLC_FLAG(owner,HTLC_F_OWNER)))
|
|
||||||
return h;
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline size_t htlc_map_count(const struct htlc_map *htlcs)
|
|
||||||
{
|
|
||||||
return htlcs->raw.elems;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FIXME: Move these out of the hash! */
|
|
||||||
static inline bool htlc_is_dead(const struct htlc *htlc)
|
|
||||||
{
|
|
||||||
return htlc->state == RCVD_REMOVE_ACK_REVOCATION
|
|
||||||
|| htlc->state == SENT_REMOVE_ACK_REVOCATION;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline const char *side_to_str(enum side side)
|
static inline const char *side_to_str(enum side side)
|
||||||
{
|
{
|
||||||
switch (side) {
|
switch (side) {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include <ccan/short_types/short_types.h>
|
#include <ccan/short_types/short_types.h>
|
||||||
#include <ccan/tal/tal.h>
|
#include <ccan/tal/tal.h>
|
||||||
#include <daemon/htlc.h>
|
#include <daemon/htlc.h>
|
||||||
|
#include <lightningd/channel/channeld_htlc.h>
|
||||||
#include <lightningd/channel_config.h>
|
#include <lightningd/channel_config.h>
|
||||||
#include <lightningd/derive_basepoints.h>
|
#include <lightningd/derive_basepoints.h>
|
||||||
#include <lightningd/sphinx.h>
|
#include <lightningd/sphinx.h>
|
||||||
|
|||||||
@@ -12,17 +12,18 @@ lightningd/channel-all: lightningd/lightningd_channel
|
|||||||
LIGHTNINGD_CHANNEL_HEADERS_GEN := \
|
LIGHTNINGD_CHANNEL_HEADERS_GEN := \
|
||||||
lightningd/channel/gen_channel_wire.h
|
lightningd/channel/gen_channel_wire.h
|
||||||
|
|
||||||
LIGHTNINGD_CHANNEL_HEADERS_NOGEN :=
|
LIGHTNINGD_CHANNEL_HEADERS_NOGEN := \
|
||||||
|
lightningd/channel/channeld_htlc.h
|
||||||
|
|
||||||
LIGHTNINGD_CHANNEL_HEADERS := $(LIGHTNINGD_CHANNEL_HEADERS_GEN) $(LIGHTNINGD_CHANNEL_HEADERS_NOGEN)
|
LIGHTNINGD_CHANNEL_HEADERS := $(LIGHTNINGD_CHANNEL_HEADERS_GEN) $(LIGHTNINGD_CHANNEL_HEADERS_NOGEN)
|
||||||
|
|
||||||
LIGHTNINGD_CHANNEL_SRC := lightningd/channel/channel.c \
|
LIGHTNINGD_CHANNEL_SRC := lightningd/channel/channel.c \
|
||||||
$(LIGHTNINGD_CHANNEL_HEADERS:.h=.c)
|
$(LIGHTNINGD_CHANNEL_HEADERS_GEN:.h=.c)
|
||||||
LIGHTNINGD_CHANNEL_OBJS := $(LIGHTNINGD_CHANNEL_SRC:.c=.o)
|
LIGHTNINGD_CHANNEL_OBJS := $(LIGHTNINGD_CHANNEL_SRC:.c=.o)
|
||||||
|
|
||||||
# Control daemon uses this:
|
# Control daemon uses this:
|
||||||
LIGHTNINGD_CHANNEL_CONTROL_HEADERS := $(LIGHTNINGD_CHANNEL_HEADERS)
|
LIGHTNINGD_CHANNEL_CONTROL_HEADERS := $(LIGHTNINGD_CHANNEL_HEADERS_GEN)
|
||||||
LIGHTNINGD_CHANNEL_CONTROL_SRC := $(LIGHTNINGD_CHANNEL_HEADERS:.h=.c)
|
LIGHTNINGD_CHANNEL_CONTROL_SRC := $(LIGHTNINGD_CHANNEL_HEADERS_GEN:.h=.c)
|
||||||
LIGHTNINGD_CHANNEL_CONTROL_OBJS := $(LIGHTNINGD_CHANNEL_CONTROL_SRC:.c=.o)
|
LIGHTNINGD_CHANNEL_CONTROL_OBJS := $(LIGHTNINGD_CHANNEL_CONTROL_SRC:.c=.o)
|
||||||
|
|
||||||
LIGHTNINGD_CHANNEL_GEN_SRC := $(filter lightningd/channel/gen_%, $(LIGHTNINGD_CHANNEL_SRC) $(LIGHTNINGD_CHANNEL_CONTROL_SRC))
|
LIGHTNINGD_CHANNEL_GEN_SRC := $(filter lightningd/channel/gen_%, $(LIGHTNINGD_CHANNEL_SRC) $(LIGHTNINGD_CHANNEL_CONTROL_SRC))
|
||||||
|
|||||||
78
lightningd/channel/channeld_htlc.h
Normal file
78
lightningd/channel/channeld_htlc.h
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
#ifndef LIGHTNINGD_CHANNELD_HTLC_H
|
||||||
|
#define LIGHTNINGD_CHANNELD_HTLC_H
|
||||||
|
#include "config.h"
|
||||||
|
#include <ccan/short_types/short_types.h>
|
||||||
|
#include <wire/gen_onion_wire.h>
|
||||||
|
|
||||||
|
struct htlc {
|
||||||
|
/* What's the status. */
|
||||||
|
enum htlc_state state;
|
||||||
|
/* The unique ID for this peer and this direction (LOCAL or REMOTE) */
|
||||||
|
u64 id;
|
||||||
|
/* The amount in millisatoshi. */
|
||||||
|
u64 msatoshi;
|
||||||
|
/* When the HTLC can no longer be redeemed. */
|
||||||
|
struct abs_locktime expiry;
|
||||||
|
/* The hash of the preimage which can redeem this HTLC */
|
||||||
|
struct sha256 rhash;
|
||||||
|
/* The preimage which hashes to rhash (if known) */
|
||||||
|
struct preimage *r;
|
||||||
|
|
||||||
|
/* FIXME: We could union these together: */
|
||||||
|
/* Routing information sent with this HTLC. */
|
||||||
|
const u8 *routing;
|
||||||
|
const u8 *fail;
|
||||||
|
enum onion_type malformed;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline bool htlc_has(const struct htlc *h, int flag)
|
||||||
|
{
|
||||||
|
return htlc_state_flags(h->state) & flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline enum side htlc_owner(const struct htlc *h)
|
||||||
|
{
|
||||||
|
return htlc_state_owner(h->state);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* htlc_map: ID -> htlc mapping. */
|
||||||
|
static inline u64 htlc_key(const struct htlc *h)
|
||||||
|
{
|
||||||
|
return h->id;
|
||||||
|
}
|
||||||
|
static inline bool htlc_cmp(const struct htlc *h, u64 id)
|
||||||
|
{
|
||||||
|
return h->id == id;
|
||||||
|
}
|
||||||
|
static inline size_t htlc_hash(u64 id)
|
||||||
|
{
|
||||||
|
return siphash24(siphash_seed(), &id, sizeof(id));
|
||||||
|
}
|
||||||
|
HTABLE_DEFINE_TYPE(struct htlc, htlc_key, htlc_hash, htlc_cmp, htlc_map);
|
||||||
|
|
||||||
|
static inline struct htlc *htlc_get(struct htlc_map *htlcs, u64 id, enum side owner)
|
||||||
|
{
|
||||||
|
struct htlc *h;
|
||||||
|
struct htlc_map_iter it;
|
||||||
|
|
||||||
|
for (h = htlc_map_getfirst(htlcs, id, &it);
|
||||||
|
h;
|
||||||
|
h = htlc_map_getnext(htlcs, id, &it)) {
|
||||||
|
if (h->id == id && htlc_has(h, HTLC_FLAG(owner,HTLC_F_OWNER)))
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline size_t htlc_map_count(const struct htlc_map *htlcs)
|
||||||
|
{
|
||||||
|
return htlcs->raw.elems;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FIXME: Move these out of the hash! */
|
||||||
|
static inline bool htlc_is_dead(const struct htlc *htlc)
|
||||||
|
{
|
||||||
|
return htlc->state == RCVD_REMOVE_ACK_REVOCATION
|
||||||
|
|| htlc->state == SENT_REMOVE_ACK_REVOCATION;
|
||||||
|
}
|
||||||
|
#endif /* LIGHTNINGD_CHANNELD_HTLC_H */
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include <bitcoin/pubkey.h>
|
#include <bitcoin/pubkey.h>
|
||||||
#include <daemon/htlc.h>
|
#include <daemon/htlc.h>
|
||||||
|
#include <lightningd/channel/channeld_htlc.h>
|
||||||
|
|
||||||
struct keyset;
|
struct keyset;
|
||||||
struct sha256_double;
|
struct sha256_double;
|
||||||
|
|||||||
Reference in New Issue
Block a user