mirror of
https://github.com/aljazceru/lightning.git
synced 2026-01-02 05:44:20 +01:00
lightningd: implement gossip_get_txout/gossip_get_txout_reply.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
committed by
Christian Decker
parent
2b1eb6a677
commit
e22dd5ad71
@@ -1601,6 +1601,9 @@ static struct io_plan *recv_req(struct io_conn *conn, struct daemon_conn *master
|
||||
case WIRE_GOSSIP_GETPEERS_REQUEST:
|
||||
return get_peers(conn, daemon, master->msg_in);
|
||||
|
||||
case WIRE_GOSSIP_GET_TXOUT_REPLY:
|
||||
/* FIXME */
|
||||
|
||||
/* We send these, we don't receive them */
|
||||
case WIRE_GOSSIPCTL_RELEASE_PEER_REPLY:
|
||||
case WIRE_GOSSIPCTL_RELEASE_PEER_REPLYFAIL:
|
||||
@@ -1616,6 +1619,7 @@ static struct io_plan *recv_req(struct io_conn *conn, struct daemon_conn *master
|
||||
case WIRE_GOSSIP_GET_UPDATE_REPLY:
|
||||
case WIRE_GOSSIP_SEND_GOSSIP:
|
||||
case WIRE_GOSSIP_LOCAL_ADD_CHANNEL:
|
||||
case WIRE_GOSSIP_GET_TXOUT:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -157,3 +157,14 @@ gossip_local_add_channel,,cltv_expiry_delta,u16
|
||||
gossip_local_add_channel,,htlc_minimum_msat,u64
|
||||
gossip_local_add_channel,,fee_base_msat,u32
|
||||
gossip_local_add_channel,,fee_proportional_millionths,u32
|
||||
|
||||
# Gossipd->master get this tx output please.
|
||||
gossip_get_txout,3018
|
||||
gossip_get_txout,,short_channel_id,struct short_channel_id
|
||||
|
||||
# master->gossipd here is the output, or empty if none.
|
||||
gossip_get_txout_reply,3118
|
||||
gossip_get_txout_reply,,short_channel_id,struct short_channel_id
|
||||
gossip_get_txout_reply,,len,u16
|
||||
gossip_get_txout_reply,,outscript,len*u8
|
||||
|
||||
|
||||
|
@@ -1,3 +1,5 @@
|
||||
#include "bitcoind.h"
|
||||
#include "chaintopology.h"
|
||||
#include "gossip_control.h"
|
||||
#include "lightningd.h"
|
||||
#include "peer_control.h"
|
||||
@@ -53,6 +55,31 @@ static void peer_nongossip(struct subd *gossip, const u8 *msg,
|
||||
peer_fd, gossip_fd, in_pkt);
|
||||
}
|
||||
|
||||
static void got_txout(struct bitcoind *bitcoind,
|
||||
const struct bitcoin_tx_output *output,
|
||||
struct short_channel_id *scid)
|
||||
{
|
||||
/* output will be NULL if it wasn't found */
|
||||
subd_send_msg(bitcoind->ld->gossip,
|
||||
towire_gossip_get_txout_reply(scid, scid, output->script));
|
||||
tal_free(scid);
|
||||
}
|
||||
|
||||
static void get_txout(struct subd *gossip, const u8 *msg)
|
||||
{
|
||||
struct short_channel_id *scid = tal(gossip, struct short_channel_id);
|
||||
|
||||
if (!fromwire_gossip_get_txout(msg, NULL, scid))
|
||||
fatal("Gossip gave bad GOSSIP_GET_TXOUT message %s",
|
||||
tal_hex(msg, msg));
|
||||
|
||||
/* FIXME: Block less than 6 deep? */
|
||||
|
||||
bitcoind_getoutput(gossip->ld->topology->bitcoind,
|
||||
scid->blocknum, scid->txnum, scid->outnum,
|
||||
got_txout, scid);
|
||||
}
|
||||
|
||||
static unsigned gossip_msg(struct subd *gossip, const u8 *msg, const int *fds)
|
||||
{
|
||||
enum gossip_wire_type t = fromwire_peektype(msg);
|
||||
@@ -72,6 +99,7 @@ static unsigned gossip_msg(struct subd *gossip, const u8 *msg, const int *fds)
|
||||
case WIRE_GOSSIPCTL_PEER_ADDRHINT:
|
||||
case WIRE_GOSSIP_GET_UPDATE:
|
||||
case WIRE_GOSSIP_SEND_GOSSIP:
|
||||
case WIRE_GOSSIP_GET_TXOUT_REPLY:
|
||||
/* This is a reply, so never gets through to here. */
|
||||
case WIRE_GOSSIP_GET_UPDATE_REPLY:
|
||||
case WIRE_GOSSIP_GETNODES_REPLY:
|
||||
@@ -97,6 +125,9 @@ static unsigned gossip_msg(struct subd *gossip, const u8 *msg, const int *fds)
|
||||
return 2;
|
||||
peer_nongossip(gossip, msg, fds[0], fds[1]);
|
||||
break;
|
||||
case WIRE_GOSSIP_GET_TXOUT:
|
||||
get_txout(gossip, msg);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user