mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-23 17:14:22 +01:00
peer: Add channel to peer and save upon opening a channel
Add the channel to the peer on the two open paths (fundee and funder) and store it into the database. Currently fails when opening a channel to a known peer after loading from DB because we attempt to insert a new peer with the same node_id. Will fix later.
This commit is contained in:
committed by
Rusty Russell
parent
17173a6322
commit
406d52042b
@@ -524,7 +524,8 @@ void add_peer(struct lightningd *ld, u64 unique_id,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Fresh peer. */
|
/* Fresh peer. */
|
||||||
peer = tal(ld, struct peer);
|
/* Need to memset since storing will access all fields */
|
||||||
|
peer = talz(ld, struct peer);
|
||||||
peer->ld = ld;
|
peer->ld = ld;
|
||||||
peer->error = NULL;
|
peer->error = NULL;
|
||||||
peer->unique_id = unique_id;
|
peer->unique_id = unique_id;
|
||||||
@@ -1920,6 +1921,37 @@ static void channel_config(struct lightningd *ld,
|
|||||||
ours->channel_reserve_satoshis = 0;
|
ours->channel_reserve_satoshis = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* peer_channel_new -- Instantiate a new channel for the given peer and save it
|
||||||
|
*
|
||||||
|
* We are about to open a channel with the peer, either due to a
|
||||||
|
* nongossip message from remote, or because we initiated an
|
||||||
|
* open. This creates the `struct wallet_channel` for the peer and
|
||||||
|
* stores it in the database.
|
||||||
|
*
|
||||||
|
* @w: the wallet to store the information in
|
||||||
|
* @peer: the peer we are opening a channel to
|
||||||
|
*
|
||||||
|
* This currently overwrites peer->channel, so can only be used if we
|
||||||
|
* allow a single channel per peer.
|
||||||
|
*/
|
||||||
|
static struct wallet_channel *peer_channel_new(struct wallet *w,
|
||||||
|
struct peer *peer)
|
||||||
|
{
|
||||||
|
struct wallet_channel *wc = tal(peer, struct wallet_channel);
|
||||||
|
wc->peer = peer;
|
||||||
|
|
||||||
|
/* TODO(cdecker) See if we already stored this peer in the DB and load if yes */
|
||||||
|
wc->peer_id = 0;
|
||||||
|
wc->id = 0;
|
||||||
|
|
||||||
|
if (!wallet_channel_save(w, wc)) {
|
||||||
|
fatal("Unable to save channel to database: %s", w->db->err);
|
||||||
|
}
|
||||||
|
|
||||||
|
return wc;
|
||||||
|
}
|
||||||
|
|
||||||
/* Peer has spontaneously exited from gossip due to msg */
|
/* Peer has spontaneously exited from gossip due to msg */
|
||||||
void peer_fundee_open(struct peer *peer, const u8 *from_peer,
|
void peer_fundee_open(struct peer *peer, const u8 *from_peer,
|
||||||
const struct crypto_state *cs,
|
const struct crypto_state *cs,
|
||||||
@@ -1987,6 +2019,7 @@ void peer_fundee_open(struct peer *peer, const u8 *from_peer,
|
|||||||
peer_fail_permanent_str(peer, "Unacceptably long open_channel");
|
peer_fail_permanent_str(peer, "Unacceptably long open_channel");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
peer->channel = peer_channel_new(ld->wallet, peer);
|
||||||
subd_req(peer, peer->owner, take(msg), -1, 2,
|
subd_req(peer, peer->owner, take(msg), -1, 2,
|
||||||
opening_fundee_finished, peer);
|
opening_fundee_finished, peer);
|
||||||
}
|
}
|
||||||
@@ -2030,6 +2063,8 @@ static bool gossip_peer_released(struct subd *gossip,
|
|||||||
}
|
}
|
||||||
fc->peer->owner = opening;
|
fc->peer->owner = opening;
|
||||||
|
|
||||||
|
fc->peer->channel = peer_channel_new(ld->wallet, fc->peer);
|
||||||
|
|
||||||
/* We will fund channel */
|
/* We will fund channel */
|
||||||
fc->peer->funder = LOCAL;
|
fc->peer->funder = LOCAL;
|
||||||
channel_config(ld, &fc->peer->our_config,
|
channel_config(ld, &fc->peer->our_config,
|
||||||
|
|||||||
@@ -98,6 +98,8 @@ struct peer {
|
|||||||
|
|
||||||
/* FIXME: Just leave this in the db. */
|
/* FIXME: Just leave this in the db. */
|
||||||
struct htlc_stub *htlcs;
|
struct htlc_stub *htlcs;
|
||||||
|
|
||||||
|
struct wallet_channel *channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline bool peer_can_add_htlc(const struct peer *peer)
|
static inline bool peer_can_add_htlc(const struct peer *peer)
|
||||||
|
|||||||
Reference in New Issue
Block a user