|
|
|
#ifndef LIGHTNING_FUNDING_H
|
|
|
|
#define LIGHTNING_FUNDING_H
|
|
|
|
#include <ccan/tal/tal.h>
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
|
|
|
#include "lightning.pb-c.h"
|
|
|
|
|
|
|
|
struct channel_oneside {
|
|
|
|
/* Payment and fee is in millisatoshi. */
|
|
|
|
uint32_t pay_msat, fee_msat;
|
|
|
|
/* Use tal_count to get the number */
|
|
|
|
UpdateAddHtlc **htlcs;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct channel_state {
|
|
|
|
struct channel_oneside a, b;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* initial_funding: Given A, B, and anchor, what is initial state?
|
|
|
|
* @ctx: tal context to allocate return value from.
|
|
|
|
* @a: A's openchannel offer
|
|
|
|
* @b: B's openchannel offer
|
|
|
|
* @anchor: The anchor offer (A or B)
|
|
|
|
* @fee: amount to pay in fees (in satoshi).
|
|
|
|
*
|
|
|
|
* Returns state, or NULL if malformed.
|
|
|
|
*/
|
|
|
|
struct channel_state *initial_funding(const tal_t *ctx,
|
|
|
|
const OpenChannel *a,
|
|
|
|
const OpenChannel *b,
|
|
|
|
const OpenAnchor *anchor,
|
|
|
|
uint64_t fee);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* funding_delta: With this change, what's the new state?
|
|
|
|
* @a: A's openchannel offer
|
|
|
|
* @b: B's openchannel offer
|
|
|
|
* @anchor: The anchor offer (A or B)
|
|
|
|
* @delta_a: How many millisatoshi A changes (-ve => A pay B, +ve => B pays A)
|
|
|
|
* @htlc: Millisatoshi A is putting into a HTLC (-ve if htlc is cancelled)
|
|
|
|
* @a_side: channel a's state to update.
|
|
|
|
* @b_side: channel b's state to update.
|
|
|
|
*/
|
|
|
|
bool funding_delta(const OpenChannel *a,
|
|
|
|
const OpenChannel *b,
|
|
|
|
const OpenAnchor *anchor,
|
|
|
|
int64_t delta_a,
|
|
|
|
int64_t htlc,
|
|
|
|
struct channel_oneside *a_side,
|
|
|
|
struct channel_oneside *b_side);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* commit_fee: Fee amount for commit tx.
|
|
|
|
* @a: A's openchannel offer
|
|
|
|
* @b: B's openchannel offer
|
|
|
|
*/
|
|
|
|
uint64_t commit_fee(const OpenChannel *a, const OpenChannel *b);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* invert_cstate: Get the other side's state.
|
|
|
|
* @cstate: the state to invert.
|
|
|
|
*/
|
|
|
|
void invert_cstate(struct channel_state *cstate);
|
|
|
|
|
|
|
|
#endif /* LIGHTNING_FUNDING_H */
|