mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-02-21 22:31:48 +01:00
protobuf: remove
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
2013906798
commit
8088e5cadb
15 changed files with 10 additions and 4956 deletions
38
INSTALL.md
38
INSTALL.md
|
@ -2,8 +2,6 @@ Library Requirements
|
|||
--------------------
|
||||
|
||||
You will need several development libraries:
|
||||
* libprotoc: the Google protocol buffer v2 library, 2.6.0 or above.
|
||||
* protobuf-c: version 1.1.0 or above.
|
||||
* libsqlite3: for database support.
|
||||
* libgmp: for secp256k1
|
||||
|
||||
|
@ -15,12 +13,12 @@ For actually doing development and running the tests, you will also need:
|
|||
You will also need a version of bitcoind with segregated witness support,
|
||||
such as the 0.13 or above.
|
||||
|
||||
To Build on Ubuntu 16.04
|
||||
To Build on Ubuntu 15.10 or above
|
||||
---------------------
|
||||
|
||||
Get dependencies:
|
||||
```
|
||||
sudo apt-get install -y autoconf build-essential git libtool libprotobuf-c-dev libgmp-dev libsqlite3-dev python3 net-tools
|
||||
sudo apt-get install -y autoconf build-essential git libtool libgmp-dev libsqlite3-dev python3 net-tools
|
||||
```
|
||||
|
||||
If you don't have Bitcoin installed locally you'll need to install that as well:
|
||||
|
@ -56,35 +54,3 @@ bitcoind &
|
|||
```
|
||||
**Note**: You may need to include `testnet=1` in `bitcoin.conf`
|
||||
|
||||
To Build on Ubuntu 15.10
|
||||
------------------------
|
||||
Build protobuf-c dependency (>= 1.1.0):
|
||||
```
|
||||
sudo apt-get install libprotoc-dev
|
||||
git clone https://github.com/protobuf-c/protobuf-c.git
|
||||
cd protobuf-c
|
||||
./autogen.sh
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
cd ../
|
||||
```
|
||||
|
||||
Clone lightning:
|
||||
```
|
||||
git clone https://github.com/ElementsProject/lightning.git
|
||||
cd lighting
|
||||
```
|
||||
|
||||
Build lightning:
|
||||
```
|
||||
make
|
||||
```
|
||||
|
||||
Running lightning:
|
||||
```
|
||||
bitcoind
|
||||
export LD_LIBRARY_PATH=/usr/local/lib
|
||||
./lightningd/lightningd
|
||||
./daemon/lightning-cli help
|
||||
```
|
||||
|
|
28
Makefile
28
Makefile
|
@ -1,9 +1,6 @@
|
|||
#! /usr/bin/make
|
||||
NAME=Bitcoin Savings & Trust Daily Interest II
|
||||
|
||||
# Needs to have oneof support: Ubuntu vivid's is too old :(
|
||||
PROTOCC:=protoc-c
|
||||
|
||||
# We use our own internal ccan copy.
|
||||
CCANDIR := ccan
|
||||
|
||||
|
@ -60,12 +57,6 @@ CORE_TX_SRC := \
|
|||
|
||||
CORE_TX_OBJS := $(CORE_TX_SRC:.c=.o)
|
||||
|
||||
CORE_PROTOBUF_SRC := \
|
||||
lightning.pb-c.c \
|
||||
protobuf_convert.c
|
||||
|
||||
CORE_PROTOBUF_OBJS := $(CORE_PROTOBUF_SRC:.c=.o)
|
||||
|
||||
CCAN_OBJS := \
|
||||
ccan-asort.o \
|
||||
ccan-autodata.o \
|
||||
|
@ -189,13 +180,11 @@ CORE_TX_HEADERS := close_tx.h \
|
|||
CORE_HEADERS := \
|
||||
opt_bits.h \
|
||||
overflows.h \
|
||||
protobuf_convert.h \
|
||||
type_to_string.h \
|
||||
utils.h \
|
||||
version.h
|
||||
|
||||
GEN_HEADERS := gen_version.h \
|
||||
lightning.pb-c.h
|
||||
GEN_HEADERS := gen_version.h
|
||||
|
||||
LIBSODIUM_HEADERS := libsodium/src/libsodium/include/sodium.h
|
||||
LIBWALLY_HEADERS := libwally-core/include/wally_bip32.h \
|
||||
|
@ -214,7 +203,7 @@ CWARNFLAGS := -Werror -Wall -Wundef -Wmissing-prototypes -Wmissing-declarations
|
|||
CDEBUGFLAGS := -std=gnu11 -g -fstack-protector
|
||||
CFLAGS := $(CWARNFLAGS) $(CDEBUGFLAGS) -I $(CCANDIR) -I libwally-core/src/secp256k1/include/ -I libwally-core/include/ -I libsodium/src/libsodium/include/ -I . $(FEATURES) $(COVFLAGS) -DSHACHAIN_BITS=48
|
||||
|
||||
LDLIBS := -lprotobuf-c -lgmp -lsqlite3 $(COVFLAGS)
|
||||
LDLIBS := -lgmp -lsqlite3 $(COVFLAGS)
|
||||
$(PROGRAMS): CFLAGS+=-I.
|
||||
|
||||
default: $(PROGRAMS) doc-all
|
||||
|
@ -232,7 +221,7 @@ CHANGED_FROM_GIT = [ x"`git log $@ | head -n1`" != x"`git log $< | head -n1`" -o
|
|||
$(CCAN_OBJS) $(CCAN_SHACHAIN48_OBJ) $(CDUMP_OBJS) $(HELPER_OBJS) $(BITCOIN_OBJS) $(TEST_PROGRAMS:=.o) ccan/ccan/cdump/tools/cdump-enumstr.o: $(CCAN_HEADERS)
|
||||
|
||||
# Except for CCAN, everything depends on bitcoin/ and core headers.
|
||||
$(HELPER_OBJS) $(CORE_OBJS) $(CORE_TX_OBJS) $(CORE_PROTOBUF_OBJS) $(BITCOIN_OBJS) $(LIBBASE58_OBJS) $(WIRE_OBJS) $(WALLET_LIB_OBJS) $(TEST_PROGRAMS:=.o): $(BITCOIN_HEADERS) $(CORE_HEADERS) $(CCAN_HEADERS) $(GEN_HEADERS) $(LIBBASE58_HEADERS) $(LIBSODIUM_HEADERS) $(LIBWALLY_HEADERS)
|
||||
$(HELPER_OBJS) $(CORE_OBJS) $(CORE_TX_OBJS) $(BITCOIN_OBJS) $(LIBBASE58_OBJS) $(WIRE_OBJS) $(WALLET_LIB_OBJS) $(TEST_PROGRAMS:=.o): $(BITCOIN_HEADERS) $(CORE_HEADERS) $(CCAN_HEADERS) $(GEN_HEADERS) $(LIBBASE58_HEADERS) $(LIBSODIUM_HEADERS) $(LIBWALLY_HEADERS)
|
||||
|
||||
test-protocol: test/test_protocol
|
||||
set -e; TMP=`mktemp`; for f in test/commits/*.script; do if ! $(VALGRIND) test/test_protocol < $$f > $$TMP; then echo "test/test_protocol < $$f FAILED" >&2; exit 1; fi; diff -u $$TMP $$f.expected; done; rm $$TMP
|
||||
|
@ -255,7 +244,7 @@ check-hdr-include-order/%: %
|
|||
# Make sure Makefile includes all headers.
|
||||
check-makefile:
|
||||
@if [ "`echo bitcoin/*.h`" != "$(BITCOIN_HEADERS)" ]; then echo BITCOIN_HEADERS incorrect; exit 1; fi
|
||||
@if [ x"`ls *.h | grep -v ^gen_ | fgrep -v lightning.pb-c.h`" != x"`echo $(CORE_HEADERS) $(CORE_TX_HEADERS) | tr ' ' '\n' | LC_ALL=C sort`" ]; then echo CORE_HEADERS incorrect; exit 1; fi
|
||||
@if [ x"`ls *.h | grep -v ^gen_`" != x"`echo $(CORE_HEADERS) $(CORE_TX_HEADERS) | tr ' ' '\n' | LC_ALL=C sort`" ]; then echo CORE_HEADERS incorrect; exit 1; fi
|
||||
@if [ x"$(CCANDIR)/config.h `find $(CCANDIR)/ccan -name '*.h' | grep -v /test/ | LC_ALL=C sort | tr '\n' ' '`" != x"$(CCAN_HEADERS) " ]; then echo CCAN_HEADERS incorrect; exit 1; fi
|
||||
|
||||
# Any mention of BOLT# must be followed by an exact quote, modulo whitepace.
|
||||
|
@ -265,7 +254,7 @@ bolt-check/%: % bolt-precheck tools/check-bolt
|
|||
bolt-precheck:
|
||||
@rm -rf .tmp.lightningrfc; if [ ! -d $(BOLTDIR) ]; then echo Not checking BOLT references: BOLTDIR $(BOLTDIR) does not exist >&2; exit 0; fi; set -e; if [ -n "$(BOLTVERSION)" ]; then git clone -q -b $(BOLTVERSION) $(BOLTDIR) .tmp.lightningrfc; else cp -a $(BOLTDIR) .tmp.lightningrfc; fi
|
||||
|
||||
check-source-bolt: $(CORE_SRC:%=bolt-check/%) $(CORE_TX_SRC:%=bolt-check/%) $(CORE_PROTOBUF_SRC:%=bolt-check/%) $(CORE_HEADERS:%=bolt-check/%) $(TEST_PROGRAMS:%=bolt-check/%.c)
|
||||
check-source-bolt: $(CORE_SRC:%=bolt-check/%) $(CORE_TX_SRC:%=bolt-check/%) $(CORE_HEADERS:%=bolt-check/%) $(TEST_PROGRAMS:%=bolt-check/%.c)
|
||||
|
||||
tools/check-bolt: tools/check-bolt.o $(CCAN_OBJS)
|
||||
|
||||
|
@ -274,12 +263,11 @@ tools/check-bolt.o: $(CCAN_HEADERS)
|
|||
check-whitespace/%: %
|
||||
@if grep -Hn '[ ]$$' $<; then echo Extraneous whitespace found >&2; exit 1; fi
|
||||
|
||||
check-whitespace: check-whitespace/Makefile check-whitespace/tools/check-bolt.c $(CORE_SRC:%=check-whitespace/%) $(CORE_TX_SRC:%=check-whitespace/%) $(CORE_PROTOBUF_SRC:%=check-whitespace/%) $(CORE_HEADERS:%=check-whitespace/%)
|
||||
check-whitespace: check-whitespace/Makefile check-whitespace/tools/check-bolt.c $(CORE_SRC:%=check-whitespace/%) $(CORE_TX_SRC:%=check-whitespace/%) $(CORE_HEADERS:%=check-whitespace/%)
|
||||
|
||||
check-source: check-makefile check-source-bolt check-whitespace \
|
||||
$(CORE_SRC:%=check-src-include-order/%) \
|
||||
$(CORE_TX_SRC:%=check-src-include-order/%) \
|
||||
$(CORE_PROTOBUF_SRC:%=check-src-include-order/%) \
|
||||
$(BITCOIN_SRC:%=check-src-include-order/%) \
|
||||
$(CORE_HEADERS:%=check-hdr-include-order/%) \
|
||||
$(CORE_TX_HEADERS:%=check-hdr-include-order/%) \
|
||||
|
@ -320,9 +308,6 @@ libsecp256k1.% libwallycore.%: libwally-core/src/secp256k1/libsecp256k1.la libwa
|
|||
libwally-core/src/libwallycore.% libwally-core/src/secp256k1/libsecp256k1.%: $(LIBWALLY_HEADERS) $(LIBSECP_HEADERS)
|
||||
cd libwally-core && ./tools/autogen.sh && ./configure CC="$(CC)" --enable-static=yes --enable-shared=no --libdir=`pwd`/.. && $(MAKE)
|
||||
|
||||
lightning.pb-c.c lightning.pb-c.h: lightning.proto
|
||||
@if $(CHANGED_FROM_GIT); then echo $(PROTOCC) lightning.proto --c_out=.; $(PROTOCC) lightning.proto --c_out=.; else touch $@; fi
|
||||
|
||||
$(TEST_PROGRAMS): % : %.o $(BITCOIN_OBJS) $(LIBBASE58_OBJS) $(WIRE_OBJS) $(CCAN_OBJS) lightningd/sphinx.o utils.o version.o libwallycore.a libsecp256k1.a libsodium.a
|
||||
|
||||
ccan/config.h: ccan/tools/configurator/configurator
|
||||
|
@ -363,7 +348,6 @@ distclean: clean
|
|||
maintainer-clean: distclean
|
||||
@echo 'This command is intended for maintainers to use; it'
|
||||
@echo 'deletes files that may need special tools to rebuild.'
|
||||
$(RM) lightning.pb-c.c lightning.pb-c.h
|
||||
|
||||
clean: daemon-clean wire-clean
|
||||
$(MAKE) -C secp256k1/ clean || true
|
||||
|
|
|
@ -23,7 +23,7 @@ Please refer to the [installation documentation](INSTALL.md) for detailed instru
|
|||
For the impatient here's the gist of it for Ubuntu and Debian:
|
||||
|
||||
```
|
||||
sudo apt-get install -y autoconf git build-essential libtool libprotobuf-c-dev libgmp-dev libsqlite3-dev python python3
|
||||
sudo apt-get install -y autoconf git build-essential libtool libgmp-dev libsqlite3-dev python python3
|
||||
git clone https://github.com/ElementsProject/lightning.git
|
||||
cd lightning
|
||||
make
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#include "bitcoin/tx.h"
|
||||
#include "close_tx.h"
|
||||
#include "permute_tx.h"
|
||||
#include "protobuf_convert.h"
|
||||
#include <assert.h>
|
||||
|
||||
struct bitcoin_tx *create_close_tx(const tal_t *ctx,
|
||||
const u8 *our_script,
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#ifndef LIGHTNING_CLOSE_TX_H
|
||||
#define LIGHTNING_CLOSE_TX_H
|
||||
#include "config.h"
|
||||
#include "lightning.pb-c.h"
|
||||
#include <ccan/short_types/short_types.h>
|
||||
#include <ccan/tal/tal.h>
|
||||
|
||||
|
|
|
@ -59,7 +59,6 @@ DAEMON_HEADERS := \
|
|||
daemon/netaddr.h \
|
||||
daemon/opt_time.h \
|
||||
daemon/options.h \
|
||||
daemon/packets.h \
|
||||
daemon/pseudorand.h \
|
||||
daemon/routing.h \
|
||||
daemon/timeout.h \
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
#ifndef LIGHTNING_DAEMON_PACKETS_H
|
||||
#define LIGHTNING_DAEMON_PACKETS_H
|
||||
#include "config.h"
|
||||
#include "lightning.pb-c.h"
|
||||
|
||||
struct commit_info;
|
||||
struct htlc;
|
||||
struct peer;
|
||||
struct preimage;
|
||||
struct sha256;
|
||||
|
||||
/* Send various kinds of packets */
|
||||
void queue_pkt_open(struct peer *peer, bool offer_anchor);
|
||||
void queue_pkt_anchor(struct peer *peer);
|
||||
void queue_pkt_open_commit_sig(struct peer *peer);
|
||||
void queue_pkt_open_complete(struct peer *peer);
|
||||
void queue_pkt_htlc_add(struct peer *peer, struct htlc *htlc);
|
||||
void queue_pkt_htlc_fulfill(struct peer *peer, struct htlc *htlc);
|
||||
void queue_pkt_htlc_fail(struct peer *peer, struct htlc *htlc);
|
||||
void queue_pkt_feechange(struct peer *peer, u64 feerate);
|
||||
void queue_pkt_commit(struct peer *peer, const secp256k1_ecdsa_signature *sig);
|
||||
void queue_pkt_revocation(struct peer *peer,
|
||||
const struct sha256 *preimage,
|
||||
const struct sha256 *next_hash);
|
||||
void queue_pkt_close_shutdown(struct peer *peer);
|
||||
void queue_pkt_close_signature(struct peer *peer);
|
||||
void queue_pkt_nested(struct peer *peer, int type, const u8 *nested_pkt);
|
||||
|
||||
Pkt *pkt_err(struct peer *peer, const char *msg, ...);
|
||||
Pkt *pkt_init(struct peer *peer, u64 ack);
|
||||
void queue_pkt_err(struct peer *peer, Pkt *err);
|
||||
Pkt *pkt_err_unexpected(struct peer *peer, const Pkt *pkt);
|
||||
|
||||
/* Process various packets: return an error packet on failure. */
|
||||
Pkt *accept_pkt_open(struct peer *peer, const Pkt *pkt,
|
||||
struct sha256 *revocation_hash,
|
||||
struct sha256 *next_revocation_hash);
|
||||
|
||||
Pkt *accept_pkt_anchor(struct peer *peer, const Pkt *pkt);
|
||||
|
||||
Pkt *accept_pkt_open_commit_sig(struct peer *peer, const Pkt *pkt,
|
||||
secp256k1_ecdsa_signature *sig);
|
||||
|
||||
Pkt *accept_pkt_open_complete(struct peer *peer, const Pkt *pkt);
|
||||
|
||||
Pkt *accept_pkt_htlc_add(struct peer *peer, const Pkt *pkt, struct htlc **h);
|
||||
|
||||
Pkt *accept_pkt_htlc_fail(struct peer *peer, const Pkt *pkt, struct htlc **h,
|
||||
u8 **fail);
|
||||
|
||||
Pkt *accept_pkt_htlc_fulfill(struct peer *peer, const Pkt *pkt, struct htlc **h,
|
||||
struct preimage *r);
|
||||
|
||||
Pkt *accept_pkt_update_fee(struct peer *peer, const Pkt *pkt, u64 *feerate);
|
||||
|
||||
Pkt *accept_pkt_update_accept(struct peer *peer, const Pkt *pkt);
|
||||
|
||||
Pkt *accept_pkt_commit(struct peer *peer, const Pkt *pkt,
|
||||
secp256k1_ecdsa_signature *sig);
|
||||
|
||||
Pkt *accept_pkt_revocation(struct peer *peer, const Pkt *pkt);
|
||||
|
||||
Pkt *accept_pkt_close_shutdown(struct peer *peer, const Pkt *pkt);
|
||||
|
||||
#endif /* LIGHTNING_DAEMON_PACKETS_H */
|
|
@ -1,7 +1,6 @@
|
|||
#include "lightningd.h"
|
||||
#include "log.h"
|
||||
#include "overflows.h"
|
||||
#include "packets.h"
|
||||
#include "pseudorand.h"
|
||||
#include "routing.h"
|
||||
#include "wire/gen_peer_wire.h"
|
||||
|
|
3016
lightning.pb-c.c
3016
lightning.pb-c.c
File diff suppressed because it is too large
Load diff
1290
lightning.pb-c.h
1290
lightning.pb-c.h
File diff suppressed because it is too large
Load diff
262
lightning.proto
262
lightning.proto
|
@ -1,262 +0,0 @@
|
|||
syntax = "proto2";
|
||||
|
||||
// The outer layer handles encryption, authentication and message
|
||||
// boundaries.
|
||||
|
||||
//
|
||||
// Helper Types
|
||||
//
|
||||
|
||||
// Protobufs don't have fixed-length fields, so these are a hack.
|
||||
message sha256_hash {
|
||||
required fixed64 a = 1;
|
||||
required fixed64 b = 2;
|
||||
required fixed64 c = 3;
|
||||
required fixed64 d = 4;
|
||||
}
|
||||
|
||||
message preimage {
|
||||
required fixed64 a = 1;
|
||||
required fixed64 b = 2;
|
||||
required fixed64 c = 3;
|
||||
required fixed64 d = 4;
|
||||
}
|
||||
|
||||
message signature {
|
||||
required fixed64 r1 = 1;
|
||||
required fixed64 r2 = 2;
|
||||
required fixed64 r3 = 3;
|
||||
required fixed64 r4 = 4;
|
||||
required fixed64 s1 = 5;
|
||||
required fixed64 s2 = 6;
|
||||
required fixed64 s3 = 7;
|
||||
required fixed64 s4 = 8;
|
||||
}
|
||||
|
||||
message locktime {
|
||||
oneof locktime {
|
||||
uint32 seconds = 1;
|
||||
uint32 blocks = 2;
|
||||
}
|
||||
}
|
||||
|
||||
// Pubkey for commitment transaction input.
|
||||
message bitcoin_pubkey {
|
||||
// Must be 33 bytes.
|
||||
required bytes key = 1;
|
||||
}
|
||||
|
||||
// How much a node charges (or pays!) for sending.
|
||||
message funding {
|
||||
// Base amount (in satoshi).
|
||||
optional int64 fixed = 1 [ default = 0 ];
|
||||
// This is charge per millionth of a satoshi.
|
||||
optional int32 per_micro_satoshi = 2 [ default = 0 ];
|
||||
}
|
||||
|
||||
//
|
||||
// Packet Types
|
||||
//
|
||||
|
||||
// Set channel params.
|
||||
message authenticate {
|
||||
// Which node this is.
|
||||
required bitcoin_pubkey node_id = 1;
|
||||
// Signature of your session key. */
|
||||
required signature session_sig = 2;
|
||||
};
|
||||
|
||||
// We're authenticated. Here's what we've received already.
|
||||
message init {
|
||||
// How many update_commit and update_revocation messages already received
|
||||
required uint64 ack = 1;
|
||||
// What features do we support (odd) and require (even)
|
||||
optional bytes features = 2;
|
||||
};
|
||||
|
||||
// Set channel params.
|
||||
message open_channel {
|
||||
// Relative locktime for outputs going to us.
|
||||
required locktime delay = 1;
|
||||
// Hash for revoking first commitment transaction.
|
||||
required sha256_hash revocation_hash = 2;
|
||||
// Hash for revoking second commitment transaction.
|
||||
required sha256_hash next_revocation_hash = 8;
|
||||
// Pubkey for anchor to pay into commitment tx.
|
||||
required bitcoin_pubkey commit_key = 3;
|
||||
// How to pay money to us from commit_tx.
|
||||
required bitcoin_pubkey final_key = 4;
|
||||
|
||||
enum anchor_offer {
|
||||
// I will create the anchor
|
||||
WILL_CREATE_ANCHOR = 1;
|
||||
// I won't create the anchor
|
||||
WONT_CREATE_ANCHOR = 2;
|
||||
}
|
||||
required anchor_offer anch = 5;
|
||||
|
||||
// How far must anchor be buried before we consider channel live?
|
||||
optional uint32 min_depth = 6 [ default = 0 ];
|
||||
|
||||
// How much fee would I like on commitment tx?
|
||||
required uint64 initial_fee_rate = 7;
|
||||
}
|
||||
|
||||
// Whoever is supplying anchor sends this.
|
||||
message open_anchor {
|
||||
// Transaction ID of anchor.
|
||||
required sha256_hash txid = 1;
|
||||
// Which output is going to the 2 of 2.
|
||||
required uint32 output_index = 2;
|
||||
// Amount of anchor output.
|
||||
required uint64 amount = 3;
|
||||
}
|
||||
|
||||
// Reply: signature for your initial commitment tx
|
||||
message open_commit_sig {
|
||||
required signature sig = 1;
|
||||
}
|
||||
|
||||
// Indicates we've seen anchor reach min-depth.
|
||||
message open_complete {
|
||||
// Block it went into.
|
||||
optional sha256_hash blockid = 1;
|
||||
// FIXME: add a merkle proof plus block headers here?
|
||||
}
|
||||
|
||||
message route_step {
|
||||
// Where to next?
|
||||
oneof next {
|
||||
// Actually, this is the last one
|
||||
bool end = 1;
|
||||
// Next lightning node.
|
||||
bitcoin_pubkey bitcoin = 2;
|
||||
// Other realms go here...
|
||||
}
|
||||
|
||||
// How much to forward (difference is fee)
|
||||
required uint32 amount = 4;
|
||||
};
|
||||
|
||||
message route {
|
||||
repeated route_step steps = 1;
|
||||
};
|
||||
|
||||
message routing {
|
||||
required bytes info = 1;
|
||||
}
|
||||
|
||||
// Start a new commitment tx to add an HTLC me -> you.
|
||||
message update_add_htlc {
|
||||
// Unique identifier for this HTLC.
|
||||
required uint64 id = 1;
|
||||
// Amount for htlc (millisatoshi)
|
||||
required uint32 amount_msat = 2;
|
||||
// Hash for HTLC R value.
|
||||
required sha256_hash r_hash = 3;
|
||||
// Time at which HTLC expires (absolute)
|
||||
required locktime expiry = 4;
|
||||
// Onion-wrapped routing information.
|
||||
required routing route = 5;
|
||||
}
|
||||
|
||||
// Complete your HTLC: I have the R value, pay me!
|
||||
message update_fulfill_htlc {
|
||||
// Which HTLC
|
||||
required uint64 id = 1;
|
||||
// HTLC payment_preimage.
|
||||
required preimage r = 2;
|
||||
}
|
||||
|
||||
// This is encrypted in fail_reason.
|
||||
message fail_info {
|
||||
required bitcoin_pubkey id = 1;
|
||||
required uint32 error_code = 2;
|
||||
optional string reason = 3;
|
||||
}
|
||||
|
||||
message fail_reason {
|
||||
required bytes info = 1;
|
||||
}
|
||||
|
||||
message update_fail_htlc {
|
||||
// Which HTLC
|
||||
required uint64 id = 1;
|
||||
// Reason for failure (for relay to initial node)
|
||||
required fail_reason reason = 2;
|
||||
}
|
||||
|
||||
// Fee rate change proposal
|
||||
message update_fee {
|
||||
required uint32 fee_rate = 1;
|
||||
}
|
||||
|
||||
// Commit all the staged changes.
|
||||
message update_commit {
|
||||
// Signature for your new commitment tx (if any outputs are HTLCs or to you)
|
||||
optional signature sig = 1;
|
||||
}
|
||||
|
||||
// Complete the update.
|
||||
message update_revocation {
|
||||
// Hash preimage which revokes old commitment tx.
|
||||
required sha256_hash revocation_preimage = 1;
|
||||
// Revocation hash for my next commit transaction
|
||||
required sha256_hash next_revocation_hash = 2;
|
||||
}
|
||||
|
||||
// Start clearing out the channel HTLCs so we can close it
|
||||
message close_shutdown {
|
||||
// Output script for mutual close tx.
|
||||
required bytes scriptPubkey = 1;
|
||||
}
|
||||
|
||||
message close_signature {
|
||||
// Fee in satoshis.
|
||||
required uint64 close_fee = 1;
|
||||
// Signature on the close transaction.
|
||||
required signature sig = 2;
|
||||
}
|
||||
|
||||
// This means we're going to hang up; it's to help diagnose only!
|
||||
message error {
|
||||
optional string problem = 1;
|
||||
}
|
||||
|
||||
// Nested message to transport standard protocol messages through the legacy transport
|
||||
message nested_pkt {
|
||||
required uint32 type = 1;
|
||||
required bytes inner_pkt = 2;
|
||||
}
|
||||
|
||||
// This is the union which defines all of them
|
||||
message pkt {
|
||||
oneof pkt {
|
||||
// Start of connection
|
||||
authenticate auth = 50;
|
||||
init init = 51;
|
||||
|
||||
// Opening
|
||||
open_channel open = 20;
|
||||
open_anchor open_anchor = 21;
|
||||
open_commit_sig open_commit_sig = 22;
|
||||
open_complete open_complete = 23;
|
||||
// Updating (most common)
|
||||
update_add_htlc update_add_htlc = 2;
|
||||
update_fulfill_htlc update_fulfill_htlc = 3;
|
||||
update_fail_htlc update_fail_htlc = 4;
|
||||
update_fee update_fee = 5;
|
||||
update_commit update_commit = 6;
|
||||
update_revocation update_revocation = 7;
|
||||
|
||||
// Closing
|
||||
close_shutdown close_shutdown = 30;
|
||||
close_signature close_signature = 31;
|
||||
|
||||
// Unexpected issue.
|
||||
error error = 40;
|
||||
|
||||
// Shim to upgrade to new packet format
|
||||
nested_pkt nested = 128;
|
||||
}
|
||||
}
|
|
@ -88,14 +88,6 @@ bool db_remove_invoice(struct lightningd_state *dstate,
|
|||
return true;
|
||||
}
|
||||
|
||||
#include <daemon/packets.h>
|
||||
void queue_pkt_nested(struct peer *peer,
|
||||
int type,
|
||||
const u8 *nested_pkt)
|
||||
{
|
||||
FIXME_IMPLEMENT();
|
||||
}
|
||||
|
||||
static struct lightningd *new_lightningd(const tal_t *ctx)
|
||||
{
|
||||
struct lightningd *ld = tal(ctx, struct lightningd);
|
||||
|
|
|
@ -1,206 +0,0 @@
|
|||
#include "bitcoin/locktime.h"
|
||||
#include "bitcoin/preimage.h"
|
||||
#include "bitcoin/pubkey.h"
|
||||
#include "bitcoin/signature.h"
|
||||
#include "protobuf_convert.h"
|
||||
#include "type_to_string.h"
|
||||
#include "utils.h"
|
||||
#include <ccan/crypto/sha256/sha256.h>
|
||||
|
||||
Signature *signature_to_proto(const tal_t *ctx, const secp256k1_ecdsa_signature *sig)
|
||||
{
|
||||
u8 compact[64];
|
||||
Signature *pb = tal(ctx, Signature);
|
||||
signature__init(pb);
|
||||
|
||||
assert(sig_valid(sig));
|
||||
|
||||
secp256k1_ecdsa_signature_serialize_compact(secp256k1_ctx,
|
||||
compact, sig);
|
||||
|
||||
/* Kill me now... */
|
||||
memcpy(&pb->r1, compact, 8);
|
||||
memcpy(&pb->r2, compact + 8, 8);
|
||||
memcpy(&pb->r3, compact + 16, 8);
|
||||
memcpy(&pb->r4, compact + 24, 8);
|
||||
memcpy(&pb->s1, compact + 32, 8);
|
||||
memcpy(&pb->s2, compact + 40, 8);
|
||||
memcpy(&pb->s3, compact + 48, 8);
|
||||
memcpy(&pb->s4, compact + 56, 8);
|
||||
|
||||
return pb;
|
||||
}
|
||||
|
||||
bool proto_to_signature(const Signature *pb, secp256k1_ecdsa_signature *sig)
|
||||
{
|
||||
u8 compact[64];
|
||||
|
||||
/* Kill me again. */
|
||||
memcpy(compact, &pb->r1, 8);
|
||||
memcpy(compact + 8, &pb->r2, 8);
|
||||
memcpy(compact + 16, &pb->r3, 8);
|
||||
memcpy(compact + 24, &pb->r4, 8);
|
||||
memcpy(compact + 32, &pb->s1, 8);
|
||||
memcpy(compact + 40, &pb->s2, 8);
|
||||
memcpy(compact + 48, &pb->s3, 8);
|
||||
memcpy(compact + 56, &pb->s4, 8);
|
||||
|
||||
if (secp256k1_ecdsa_signature_parse_compact(secp256k1_ctx,
|
||||
sig, compact)
|
||||
!= 1)
|
||||
return false;
|
||||
|
||||
return sig_valid(sig);
|
||||
}
|
||||
|
||||
BitcoinPubkey *pubkey_to_proto(const tal_t *ctx, const struct pubkey *key)
|
||||
{
|
||||
BitcoinPubkey *p = tal(ctx, BitcoinPubkey);
|
||||
|
||||
bitcoin_pubkey__init(p);
|
||||
p->key.len = PUBKEY_DER_LEN;
|
||||
p->key.data = tal_arr(p, u8, p->key.len);
|
||||
|
||||
pubkey_to_der(p->key.data, key);
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
bool proto_to_pubkey(const BitcoinPubkey *pb, struct pubkey *key)
|
||||
{
|
||||
return pubkey_from_der(pb->key.data, pb->key.len, key);
|
||||
}
|
||||
|
||||
Sha256Hash *sha256_to_proto(const tal_t *ctx, const struct sha256 *hash)
|
||||
{
|
||||
Sha256Hash *h = tal(ctx, Sha256Hash);
|
||||
sha256_hash__init(h);
|
||||
|
||||
/* Kill me now... */
|
||||
memcpy(&h->a, hash->u.u8, 8);
|
||||
memcpy(&h->b, hash->u.u8 + 8, 8);
|
||||
memcpy(&h->c, hash->u.u8 + 16, 8);
|
||||
memcpy(&h->d, hash->u.u8 + 24, 8);
|
||||
return h;
|
||||
}
|
||||
|
||||
void proto_to_sha256(const Sha256Hash *pb, struct sha256 *hash)
|
||||
{
|
||||
/* Kill me again. */
|
||||
memcpy(hash->u.u8, &pb->a, 8);
|
||||
memcpy(hash->u.u8 + 8, &pb->b, 8);
|
||||
memcpy(hash->u.u8 + 16, &pb->c, 8);
|
||||
memcpy(hash->u.u8 + 24, &pb->d, 8);
|
||||
}
|
||||
|
||||
Preimage *preimage_to_proto(const tal_t *ctx, const struct preimage *r)
|
||||
{
|
||||
Preimage *pb = tal(ctx, Preimage);
|
||||
preimage__init(pb);
|
||||
|
||||
/* Kill me now... */
|
||||
memcpy(&pb->a, r->r, 8);
|
||||
memcpy(&pb->b, r->r + 8, 8);
|
||||
memcpy(&pb->c, r->r + 16, 8);
|
||||
memcpy(&pb->d, r->r + 24, 8);
|
||||
return pb;
|
||||
}
|
||||
|
||||
void proto_to_preimage(const Preimage *pb, struct preimage *r)
|
||||
{
|
||||
/* Kill me again. */
|
||||
memcpy(r->r, &pb->a, 8);
|
||||
memcpy(r->r + 8, &pb->b, 8);
|
||||
memcpy(r->r + 16, &pb->c, 8);
|
||||
memcpy(r->r + 24, &pb->d, 8);
|
||||
}
|
||||
|
||||
|
||||
bool proto_to_rel_locktime(const Locktime *l, struct rel_locktime *locktime)
|
||||
{
|
||||
switch (l->locktime_case) {
|
||||
case LOCKTIME__LOCKTIME_SECONDS:
|
||||
return seconds_to_rel_locktime(l->seconds, locktime);
|
||||
case LOCKTIME__LOCKTIME_BLOCKS:
|
||||
return blocks_to_rel_locktime(l->blocks, locktime);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool proto_to_abs_locktime(const Locktime *l, struct abs_locktime *locktime)
|
||||
{
|
||||
switch (l->locktime_case) {
|
||||
case LOCKTIME__LOCKTIME_SECONDS:
|
||||
return seconds_to_abs_locktime(l->seconds, locktime);
|
||||
case LOCKTIME__LOCKTIME_BLOCKS:
|
||||
return blocks_to_abs_locktime(l->blocks, locktime);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Locktime *rel_locktime_to_proto(const tal_t *ctx,
|
||||
const struct rel_locktime *locktime)
|
||||
{
|
||||
Locktime *l = tal(ctx, Locktime);
|
||||
locktime__init(l);
|
||||
|
||||
if (rel_locktime_is_seconds(locktime)) {
|
||||
l->locktime_case = LOCKTIME__LOCKTIME_SECONDS;
|
||||
l->seconds = rel_locktime_to_seconds(locktime);
|
||||
} else {
|
||||
l->locktime_case = LOCKTIME__LOCKTIME_BLOCKS;
|
||||
l->blocks = rel_locktime_to_blocks(locktime);
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
Locktime *abs_locktime_to_proto(const tal_t *ctx,
|
||||
const struct abs_locktime *locktime)
|
||||
{
|
||||
Locktime *l = tal(ctx, Locktime);
|
||||
locktime__init(l);
|
||||
|
||||
if (abs_locktime_is_seconds(locktime)) {
|
||||
l->locktime_case = LOCKTIME__LOCKTIME_SECONDS;
|
||||
l->seconds = abs_locktime_to_seconds(locktime);
|
||||
} else {
|
||||
l->locktime_case = LOCKTIME__LOCKTIME_BLOCKS;
|
||||
l->blocks = abs_locktime_to_blocks(locktime);
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
static void *proto_tal_alloc(void *allocator_data, size_t size)
|
||||
{
|
||||
return tal_arr(allocator_data, char, size);
|
||||
}
|
||||
|
||||
static void proto_tal_free(void *allocator_data, void *pointer)
|
||||
{
|
||||
tal_free(pointer);
|
||||
}
|
||||
|
||||
/* Get allocator so decoded protobuf will be tal off it. */
|
||||
struct ProtobufCAllocator *make_prototal(const tal_t *ctx)
|
||||
{
|
||||
struct ProtobufCAllocator *prototal;
|
||||
|
||||
prototal = tal(ctx, struct ProtobufCAllocator);
|
||||
prototal->alloc = proto_tal_alloc;
|
||||
prototal->free = proto_tal_free;
|
||||
prototal->allocator_data = tal(prototal, char);
|
||||
|
||||
return prototal;
|
||||
}
|
||||
|
||||
/* Now steal object off of allocator (and free prototal) */
|
||||
void steal_from_prototal(const tal_t *ctx, struct ProtobufCAllocator *prototal,
|
||||
const void *pb)
|
||||
{
|
||||
tal_steal(ctx, pb);
|
||||
tal_steal(pb, prototal->allocator_data);
|
||||
tal_free(prototal);
|
||||
}
|
||||
REGISTER_TYPE_TO_HEXSTR(preimage);
|
|
@ -1,45 +0,0 @@
|
|||
#ifndef LIGHTNING_PROTOBUF_CONVERT_H
|
||||
#define LIGHTNING_PROTOBUF_CONVERT_H
|
||||
#include "config.h"
|
||||
#include "lightning.pb-c.h"
|
||||
#include <ccan/tal/tal.h>
|
||||
#include <secp256k1.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
/* Convert to-from protobuf to internal representation. */
|
||||
Signature *signature_to_proto(const tal_t *ctx,
|
||||
const secp256k1_ecdsa_signature *sig);
|
||||
bool proto_to_signature(const Signature *pb,
|
||||
secp256k1_ecdsa_signature *sig);
|
||||
|
||||
/* Convert to-from protobuf to internal representation. */
|
||||
struct pubkey;
|
||||
BitcoinPubkey *pubkey_to_proto(const tal_t *ctx,
|
||||
const struct pubkey *key);
|
||||
bool proto_to_pubkey(const BitcoinPubkey *pb, struct pubkey *key);
|
||||
|
||||
/* Useful helper for allocating & populating a protobuf Sha256Hash */
|
||||
struct sha256;
|
||||
Sha256Hash *sha256_to_proto(const tal_t *ctx, const struct sha256 *hash);
|
||||
void proto_to_sha256(const Sha256Hash *pb, struct sha256 *hash);
|
||||
|
||||
struct preimage;
|
||||
Preimage *preimage_to_proto(const tal_t *ctx, const struct preimage *r);
|
||||
void proto_to_preimage(const Preimage *pb, struct preimage *r);
|
||||
|
||||
struct rel_locktime;
|
||||
struct abs_locktime;
|
||||
bool proto_to_rel_locktime(const Locktime *l, struct rel_locktime *locktime);
|
||||
bool proto_to_abs_locktime(const Locktime *l, struct abs_locktime *locktime);
|
||||
Locktime *rel_locktime_to_proto(const tal_t *ctx,
|
||||
const struct rel_locktime *locktime);
|
||||
Locktime *abs_locktime_to_proto(const tal_t *ctx,
|
||||
const struct abs_locktime *locktime);
|
||||
|
||||
/* Get allocator so decoded protobuf will be tal off it. */
|
||||
struct ProtobufCAllocator *make_prototal(const tal_t *ctx);
|
||||
/* Now steal object off of allocator (and free prototal) */
|
||||
void steal_from_prototal(const tal_t *ctx, struct ProtobufCAllocator *prototal,
|
||||
const void *pb);
|
||||
|
||||
#endif /* LIGHTNING_PROTOBUF_CONVERT_H */
|
|
@ -2,7 +2,6 @@
|
|||
#include "bitcoin/pubkey.h"
|
||||
#include "bitcoin/tx.h"
|
||||
#include "daemon/htlc.h"
|
||||
#include "protobuf_convert.h"
|
||||
#include "type_to_string.h"
|
||||
#include "utils.h"
|
||||
#include <ccan/tal/str/str.h>
|
||||
|
|
Loading…
Add table
Reference in a new issue