forked from ElementsProject/lightning
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinitial_channel.h
162 lines (135 loc) · 5.23 KB
/
initial_channel.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/* This represents a channel with no HTLCs: all that's required for openingd. */
#ifndef LIGHTNING_COMMON_INITIAL_CHANNEL_H
#define LIGHTNING_COMMON_INITIAL_CHANNEL_H
#include "config.h"
#include <bitcoin/tx.h>
#include <common/channel_config.h>
#include <common/channel_id.h>
#include <common/derive_basepoints.h>
#include <common/htlc.h>
struct signature;
struct added_htlc;
struct failed_htlc;
struct fulfilled_htlc;
/* View from each side */
struct channel_view {
/* How much is owed to each side (includes pending changes) */
struct amount_msat owed[NUM_SIDES];
};
struct channel {
/* The id for this channel */
struct channel_id cid;
/* Funding txid and output. */
struct bitcoin_outpoint funding;
/* Keys used to spend funding tx. */
struct pubkey funding_pubkey[NUM_SIDES];
/* satoshis in from commitment tx */
struct amount_sat funding_sats;
/* confirmations needed for locking funding */
u32 minimum_depth;
/* Who is paying fees. */
enum side opener;
/* Limits and settings on this channel. */
struct channel_config config[NUM_SIDES];
/* Basepoints for deriving keys. */
struct basepoints basepoints[NUM_SIDES];
/* Mask for obscuring the encoding of the commitment number. */
u64 commitment_number_obscurer;
/* All live HTLCs for this channel */
struct htlc_map *htlcs;
/* Fee changes, some which may be in transit */
struct fee_states *fee_states;
/* Blockheight changes, some which may be in transit
* (option_will_fund)*/
struct height_states *blockheight_states;
/* What it looks like to each side. */
struct channel_view view[NUM_SIDES];
/* Features which apply to this channel. */
struct channel_type *type;
/* Are we using big channels? */
bool option_wumbo;
/* When the lease expires for the funds in this channel */
u32 lease_expiry;
};
/**
* new_initial_channel: Given initial fees and funding, what is initial state?
* @ctx: tal context to allocate return value from.
* @cid: The channel's id.
* @funding: The commitment transaction id/outnum
* @minimum_depth: The minimum confirmations needed for funding transaction.
* @height_states: The blockheight update states.
* @lease_expiry: Block the lease expires.
* @funding_sats: The commitment transaction amount.
* @local_msatoshi: The amount for the local side (remainder goes to remote)
* @fee_states: The fee update states.
* @local: local channel configuration
* @remote: remote channel configuration
* @local_basepoints: local basepoints.
* @remote_basepoints: remote basepoints.
* @local_fundingkey: local funding key
* @remote_fundingkey: remote funding key
* @type: type for this channel
* @option_wumbo: has peer currently negotiated wumbo?
* @opener: which side initiated it.
*
* Returns channel, or NULL if malformed.
*/
struct channel *new_initial_channel(const tal_t *ctx,
const struct channel_id *cid,
const struct bitcoin_outpoint *funding,
u32 minimum_depth,
const struct height_states *height_states TAKES,
u32 lease_expiry,
struct amount_sat funding_sats,
struct amount_msat local_msatoshi,
const struct fee_states *fee_states TAKES,
const struct channel_config *local,
const struct channel_config *remote,
const struct basepoints *local_basepoints,
const struct basepoints *remote_basepoints,
const struct pubkey *local_funding_pubkey,
const struct pubkey *remote_funding_pubkey,
const struct channel_type *type TAKES,
bool option_wumbo,
enum side opener);
/**
* initial_channel_tx: Get the current commitment tx for the *empty* channel.
* @ctx: tal context to allocate return value from.
* @wscript: wscripts for the commitment tx.
* @channel: The channel to evaluate
* @per_commitment_point: Per-commitment point to determine keys
* @side: which side to get the commitment transaction for
* @direct_outputs: If non-NULL, fill with pointers to the direct (non-HTLC) outputs (or NULL if none).
* @err_reason: When NULL is returned, this will point to a human readable reason.
*
* Returns the unsigned initial commitment transaction for @side, or NULL
* if the channel size was insufficient to cover fees or reserves.
*/
struct bitcoin_tx *initial_channel_tx(const tal_t *ctx,
const u8 **wscript,
const struct channel *channel,
const struct pubkey *per_commitment_point,
enum side side,
struct wally_tx_output *direct_outputs[NUM_SIDES],
char** err_reason);
/**
* channel_feerate: Get fee rate for this side of channel.
* @channel: The channel
* @side: the side
*/
u32 channel_feerate(const struct channel *channel, enum side side);
/**
* channel_blockheight: Get blockheight for this side of channel.
* @channel: The channel
* @side: the side
*/
u32 channel_blockheight(const struct channel *channel, enum side side);
/* What can we upgrade to? (Returns NULL if none). */
struct channel_type *channel_upgradable_type(const tal_t *ctx,
const struct channel *channel);
/* What channel type do we want? */
struct channel_type *channel_desired_type(const tal_t *ctx,
const struct channel *channel);
/* Convenience for querying channel->type */
bool channel_has(const struct channel *channel, int feature);
#endif /* LIGHTNING_COMMON_INITIAL_CHANNEL_H */