#ifndef LIGHTNING_DAEMON_FEECHANGE_H #define LIGHTNING_DAEMON_FEECHANGE_H #include "config.h" #include "channel.h" #include "feechange_state.h" struct peer; struct feechange { /* What's the status */ enum feechange_state state; /* The rate. */ u64 fee_rate; }; static inline enum side feechange_side(enum feechange_state state) { if (state <= SENT_FEECHANGE_ACK_REVOCATION) { return LOCAL; } else { assert(state < FEECHANGE_STATE_INVALID); return REMOTE; } } void feechange_changestate(struct peer *peer, struct feechange *feechange, enum feechange_state oldstate, enum feechange_state newstate, bool db_commit); struct feechange *new_feechange(struct peer *peer, u64 fee_rate, enum feechange_state state); const char *feechange_state_name(enum feechange_state s); enum feechange_state feechange_state_from_name(const char *name); /* HTLC-add-style bitflags for each feechange state */ int feechange_state_flags(enum feechange_state state); static inline bool feechange_has(const struct feechange *f, int flag) { return feechange_state_flags(f->state) & flag; } static inline bool feechange_is_dead(const struct feechange *feechange) { return feechange->state == SENT_FEECHANGE_ACK_REVOCATION || feechange->state == RCVD_FEECHANGE_ACK_REVOCATION; } #endif /* LIGHTNING_DAEMON_FEECHANGE_H */