onchaind: basic daemon.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
4ba1599494
commit
1b2fb18944
|
@ -4,7 +4,7 @@
|
|||
lightningd-wrongdir:
|
||||
$(MAKE) -C .. lightningd-all
|
||||
|
||||
LIGHTNINGD_BINS := lightningd/lightningd lightningd/lightningd_hsm lightningd/lightningd_handshake lightningd/lightningd_gossip lightningd/lightningd_opening lightningd/lightningd_channel lightningd/lightningd_closing
|
||||
LIGHTNINGD_BINS := lightningd/lightningd lightningd/lightningd_hsm lightningd/lightningd_handshake lightningd/lightningd_gossip lightningd/lightningd_opening lightningd/lightningd_channel lightningd/lightningd_closing lightningd/lightningd_onchain
|
||||
|
||||
lightningd-all: $(LIGHTNINGD_BINS)
|
||||
|
||||
|
@ -103,8 +103,7 @@ LIGHTNINGD_HEADERS_NOGEN = \
|
|||
$(CORE_HEADERS) \
|
||||
$(CORE_TX_HEADERS) \
|
||||
$(DAEMON_HEADERS) \
|
||||
$(WALLET_LIB_HEADERS) \
|
||||
lightningd/onchain/onchain_wire.h
|
||||
$(WALLET_LIB_HEADERS)
|
||||
|
||||
# Generated headers
|
||||
LIGHTNINGD_HEADERS_GEN = \
|
||||
|
@ -130,6 +129,7 @@ include lightningd/gossip/Makefile
|
|||
include lightningd/opening/Makefile
|
||||
include lightningd/channel/Makefile
|
||||
include lightningd/closing/Makefile
|
||||
include lightningd/onchain/Makefile
|
||||
|
||||
$(LIGHTNINGD_OBJS) $(LIGHTNINGD_LIB_OBJS): $(LIGHTNINGD_HEADERS)
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef LIGHTNING_LIGHTNINGD_DERIVE_BASEPOINTS_H
|
||||
#define LIGHTNING_LIGHTNINGD_DERIVE_BASEPOINTS_H
|
||||
#include "config.h"
|
||||
#include <assert.h>
|
||||
#include <bitcoin/privkey.h>
|
||||
#include <bitcoin/pubkey.h>
|
||||
#include <ccan/build_assert/build_assert.h>
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
#! /usr/bin/make
|
||||
|
||||
# Designed to be run one level up
|
||||
lightningd/onchain-wrongdir:
|
||||
$(MAKE) -C ../.. lightningd/onchain-all
|
||||
|
||||
default: lightningd/onchain-all
|
||||
|
||||
lightningd/onchain-all: lightningd/lightningd_onchain
|
||||
|
||||
lightningd/onchain/gen_onchain_types_names.h: lightningd/onchain/onchain_types.h ccan/ccan/cdump/tools/cdump-enumstr
|
||||
ccan/ccan/cdump/tools/cdump-enumstr lightningd/onchain/onchain_types.h > $@
|
||||
|
||||
# lightningd/onchain needs these:
|
||||
LIGHTNINGD_ONCHAIN_HEADERS_GEN := \
|
||||
lightningd/onchain/gen_onchain_wire.h \
|
||||
lightningd/onchain/gen_onchain_types_names.h
|
||||
|
||||
LIGHTNINGD_ONCHAIN_HEADERS_NOGEN := \
|
||||
lightningd/onchain/onchain_types.h \
|
||||
lightningd/onchain/onchain_wire.h
|
||||
|
||||
LIGHTNINGD_ONCHAIN_HEADERS := $(LIGHTNINGD_ONCHAIN_HEADERS_GEN) $(LIGHTNINGD_ONCHAIN_HEADERS_NOGEN)
|
||||
|
||||
LIGHTNINGD_ONCHAIN_SRC := lightningd/onchain/onchain.c \
|
||||
lightningd/onchain/gen_onchain_wire.c \
|
||||
lightningd/onchain/onchain_wire.c
|
||||
|
||||
LIGHTNINGD_ONCHAIN_OBJS := $(LIGHTNINGD_ONCHAIN_SRC:.c=.o)
|
||||
|
||||
# Control daemon uses this:
|
||||
LIGHTNINGD_ONCHAIN_CONTROL_HEADERS := \
|
||||
lightningd/onchain/gen_onchain_wire.h \
|
||||
lightningd/onchain/onchain_wire.h
|
||||
LIGHTNINGD_ONCHAIN_CONTROL_SRC := $(LIGHTNINGD_ONCHAIN_CONTROL_HEADERS:.h=.c)
|
||||
LIGHTNINGD_ONCHAIN_CONTROL_OBJS := $(LIGHTNINGD_ONCHAIN_CONTROL_SRC:.c=.o)
|
||||
|
||||
LIGHTNINGD_ONCHAIN_GEN_SRC := $(filter lightningd/onchain/gen_%, $(LIGHTNINGD_ONCHAIN_SRC) $(LIGHTNINGD_ONCHAIN_CONTROL_SRC))
|
||||
|
||||
LIGHTNINGD_ONCHAIN_SRC_NOGEN := $(filter-out lightningd/onchain/gen_%, $(LIGHTNINGD_ONCHAIN_SRC))
|
||||
|
||||
# Add to headers which any object might need.
|
||||
LIGHTNINGD_HEADERS_GEN += $(LIGHTNINGD_ONCHAIN_HEADERS_GEN)
|
||||
LIGHTNINGD_HEADERS_NOGEN += $(LIGHTNINGD_ONCHAIN_HEADERS_NOGEN)
|
||||
|
||||
$(LIGHTNINGD_ONCHAIN_OBJS): $(LIGHTNINGD_HEADERS)
|
||||
|
||||
lightningd/onchain/gen_onchain_wire.h: $(WIRE_GEN) lightningd/onchain/onchain_wire.csv
|
||||
$(WIRE_GEN) --header $@ onchain_wire_type < lightningd/onchain/onchain_wire.csv > $@
|
||||
|
||||
lightningd/onchain/gen_onchain_wire.c: $(WIRE_GEN) lightningd/onchain/onchain_wire.csv
|
||||
$(WIRE_GEN) ${@:.c=.h} onchain_wire_type < lightningd/onchain/onchain_wire.csv > $@
|
||||
|
||||
LIGHTNINGD_ONCHAIN_OBJS := $(LIGHTNINGD_ONCHAIN_SRC:.c=.o) $(LIGHTNINGD_ONCHAIN_GEN_SRC:.c=.o)
|
||||
|
||||
lightningd/lightningd_onchain: $(LIGHTNINGD_OLD_LIB_OBJS) $(LIGHTNINGD_LIB_OBJS) $(LIGHTNINGD_ONCHAIN_OBJS) $(WIRE_ONION_OBJS) $(CORE_OBJS) $(CORE_TX_OBJS) $(WIRE_OBJS) $(BITCOIN_OBJS) $(CCAN_OBJS) $(CCAN_SHACHAIN48_OBJ) $(LIGHTNINGD_HSM_CLIENT_OBJS) $(LIBBASE58_OBJS) libsecp256k1.a libsodium.a libwallycore.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS)
|
||||
|
||||
check-source: $(LIGHTNINGD_ONCHAIN_SRC_NOGEN:%=check-src-include-order/%)
|
||||
check-source-bolt: $(LIGHTNINGD_ONCHAIN_SRC:%=bolt-check/%) $(LIGHTNINGD_ONCHAIN_HEADERS:%=bolt-check/%)
|
||||
|
||||
check-whitespace: $(LIGHTNINGD_ONCHAIN_SRC_NOGEN:%=check-whitespace/%) $(LIGHTNINGD_ONCHAIN_HEADERS_NOGEN:%=check-whitespace/%)
|
||||
|
||||
clean: lightningd/onchain-clean
|
||||
|
||||
lightningd/onchain-clean:
|
||||
$(RM) $(LIGHTNINGD_ONCHAIN_OBJS) gen_*
|
||||
|
||||
-include lightningd/onchain/test/Makefile
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,54 @@
|
|||
#ifndef LIGHTNING_LIGHTNINGD_ONCHAIN_TYPES_H
|
||||
#define LIGHTNING_LIGHTNINGD_ONCHAIN_TYPES_H
|
||||
#include "config.h"
|
||||
|
||||
/* Different transactions we care about. */
|
||||
enum tx_type {
|
||||
/* The initial 2 of 2 funding transaction */
|
||||
FUNDING_TRANSACTION,
|
||||
|
||||
/* A mutual close: spends funding */
|
||||
MUTUAL_CLOSE,
|
||||
|
||||
/* Their unilateral: spends funding */
|
||||
THEIR_UNILATERAL,
|
||||
|
||||
/* Our unilateral: spends funding */
|
||||
OUR_UNILATERAL,
|
||||
|
||||
/* The 2 different types of HTLC transaction, each way */
|
||||
THEIR_HTLC_TIMEOUT_TO_THEM,
|
||||
THEIR_HTLC_FULFILL_TO_US,
|
||||
OUR_HTLC_TIMEOUT_TO_US,
|
||||
OUR_HTLC_FULFILL_TO_THEM,
|
||||
|
||||
/* When we spend the to-us output (after cltv_expiry) */
|
||||
OUR_UNILATERAL_TO_US_RETURN_TO_WALLET,
|
||||
|
||||
/* Special type for marking outputs as resolved by self. */
|
||||
SELF,
|
||||
|
||||
/* Shouldn't happen. */
|
||||
UNKNOWN_TXTYPE
|
||||
};
|
||||
|
||||
/* Different output types. */
|
||||
enum output_type {
|
||||
/* FUNDING_TRANSACTION */
|
||||
FUNDING_OUTPUT,
|
||||
|
||||
/* THEIR_UNILATERAL */
|
||||
OUTPUT_TO_US,
|
||||
DELAYED_OUTPUT_TO_THEM,
|
||||
|
||||
/* OUR_UNILATERAL */
|
||||
DELAYED_OUTPUT_TO_US,
|
||||
OUTPUT_TO_THEM,
|
||||
|
||||
/* HTLC outputs: their offers and our offers */
|
||||
THEIR_HTLC,
|
||||
OUR_HTLC,
|
||||
};
|
||||
|
||||
|
||||
#endif /* LIGHTNING_LIGHTNINGD_ONCHAIN_TYPES_H */
|
|
@ -0,0 +1,74 @@
|
|||
# Shouldn't happen
|
||||
onchain_bad_command,0x8000
|
||||
onchain_internal_error,0x8003
|
||||
onchain_crypto_failed,0x8004
|
||||
|
||||
#include <lightningd/htlc_wire.h>
|
||||
# Begin! Here's the onchain tx which spends funding tx, followed by all HTLCs.
|
||||
onchain_init,1
|
||||
onchain_init,,seed,struct privkey
|
||||
onchain_init,,shachain,struct shachain
|
||||
onchain_init,,funding_amount_satoshi,u64
|
||||
# Remote per commit point for committed tx.
|
||||
onchain_init,,old_remote_per_commitment_point,struct pubkey
|
||||
# Remote per commit point for current tx (needed if we haven't got revoke_and_ack yet).
|
||||
onchain_init,,remote_per_commitment_point,struct pubkey
|
||||
onchain_init,,local_to_self_delay,u32
|
||||
onchain_init,,remote_to_self_delay,u32
|
||||
onchain_init,,feerate_per_kw,u64
|
||||
onchain_init,,local_dust_limit_satoshi,u64
|
||||
onchain_init,,remote_revocation_basepoint,struct pubkey
|
||||
# Gives an easy way to tell if it's our unilateral close or theirs...
|
||||
onchain_init,,our_broadcast_txid,struct sha256_double
|
||||
onchain_init,,local_scriptpubkey_len,u16
|
||||
onchain_init,,local_scriptpubkey,local_scriptpubkey_len*u8
|
||||
onchain_init,,remote_scriptpubkey_len,u16
|
||||
onchain_init,,remote_scriptpubkey,remote_scriptpubkey_len*u8
|
||||
onchain_init,,ourwallet_pubkey,struct pubkey
|
||||
# We need these two for commit number obscurer
|
||||
onchain_init,,funder,enum side
|
||||
onchain_init,,remote_payment_basepoint,struct pubkey
|
||||
onchain_init,,remote_delayed_payment_basepoint,struct pubkey
|
||||
onchain_init,,tx,struct bitcoin_tx
|
||||
onchain_init,,tx_blockheight,u32
|
||||
onchain_init,,num_htlc_sigs,u16
|
||||
onchain_init,,htlc_signature,num_htlc_sigs*secp256k1_ecdsa_signature
|
||||
onchain_init,,num_htlcs,u64
|
||||
|
||||
#include <lightningd/onchain/onchain_wire.h>
|
||||
# This is all the HTLCs: one per message
|
||||
onchain_htlc,2
|
||||
onchain_htlc,,htlc,struct htlc_stub
|
||||
|
||||
# This sets what the state is, depending on tx.
|
||||
onchain_init_reply,101
|
||||
onchain_init_reply,,state,u8
|
||||
|
||||
# onchaind->master: Send out a tx.
|
||||
onchain_broadcast_tx,3
|
||||
onchain_broadcast_tx,,tx,struct bitcoin_tx
|
||||
|
||||
# master->onchaind: Notifier that an output has been spent by input_num of tx.
|
||||
onchain_spent,4
|
||||
onchain_spent,,tx,struct bitcoin_tx
|
||||
onchain_spent,,input_num,u32
|
||||
onchain_spent,,blockheight,u32
|
||||
|
||||
# master->onchaind: We will receive more than one of these, as depth changes.
|
||||
onchain_depth,5
|
||||
onchain_depth,,txid,struct sha256_double
|
||||
onchain_depth,,depth,u32
|
||||
|
||||
# onchaind->master: We don't want to watch this tx, or its outputs
|
||||
onchain_unwatch_tx,6
|
||||
onchain_unwatch_tx,,txid,struct sha256_double
|
||||
onchain_unwatch_tx,,num_outputs,u32
|
||||
|
||||
# master->onchaind: We know HTLC preimage
|
||||
onchain_known_preimage,7
|
||||
onchain_known_preimage,,preimage,struct preimage
|
||||
|
||||
# onchaind->master: We discovered HTLC preimage
|
||||
onchain_extracted_preimage,8
|
||||
onchain_extracted_preimage,,preimage,struct preimage
|
||||
|
|
Loading…
Reference in New Issue