core-lightning/common
Rusty Russell daba3e7deb common/gossmap: helper to map the gossip store.
I went overboard on optimization.  I am so sorry:
1. Squeezed channel min/max into 16 bits.
2. Uses mmap and leaves node_ids in the file.
3. Uses offsets instead of pointers where possible.
4. Uses custom free-list to allocate inside arrays.
5. Ignores our autogenerated marshalling code in favor of direct derefs.
6. Carefully aligns everything so we use minimal ram.

The result is that the current gossip_store:
 - load time (-O3 -flto laptop): 40msec
 - load time (-g laptop i.e. DEVELOPER=0): 60msec
 - load time (-O0 laptop i.e. DEVELOPER=1): 110msec
 - Total memory: 2.6MB:
   - 1.5MB for the array of channels
   - 512k for the channel htable to map scid -> channel.
   - 320k for the node htable to map nodeid -> node.
   - 192k for the array of channels inside each node
   - 94k for the array of nodes

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2020-08-28 10:56:50 +09:30
..
test common/gossmap: helper to map the gossip store. 2020-08-28 10:56:50 +09:30
addr.c addr: handle P2SH/P2PKH in scriptpubkey encoding 2019-11-13 03:31:20 +00:00
addr.h common: use tabs everywhere. 2020-02-05 14:19:12 +01:00
amount.c amount: add amount_msat_scale, amount_msat_ratio, amount_{msat,sat}_div 2020-08-06 09:36:47 +09:30
amount.h amount: add amount_msat_scale, amount_msat_ratio, amount_{msat,sat}_div 2020-08-06 09:36:47 +09:30
base32.c Remove tal_len, use tal_count() or tal_bytelen(). 2018-07-30 11:31:17 +02:00
base32.h common/base32: make this a simple tal-wrapper around ccan/base32. 2018-05-10 02:28:44 +00:00
base64.c Init commit to be able to create a tor static service on the fly. 2019-12-03 23:35:18 +01:00
base64.h Init commit to be able to create a tor static service on the fly. 2019-12-03 23:35:18 +01:00
bech32.c bech32: fix overflow bug. 2018-11-02 05:58:01 +00:00
bech32.h Use expected LIGHTNING_DIR_FILE_H define 2018-03-25 23:54:21 +00:00
bech32_util.c Remove tal_len, use tal_count() or tal_bytelen(). 2018-07-30 11:31:17 +02:00
bech32_util.h common: Moving some bech32 related utilities to bech32_util 2018-04-25 12:34:55 +02:00
bigsize.c wire: update to latest version of the spec. 2020-06-23 18:49:15 +02:00
bigsize.h wire: move remaining bitcoin functions out to bitcoin/ files. 2020-05-18 14:51:12 +02:00
bip32.c wire: move remaining bitcoin functions out to bitcoin/ files. 2020-05-18 14:51:12 +02:00
bip32.h wire: move remaining bitcoin functions out to bitcoin/ files. 2020-05-18 14:51:12 +02:00
blinding.c common: add blinding helpers. 2020-04-04 16:08:49 +10:30
blinding.h common: add blinding helpers. 2020-04-04 16:08:49 +10:30
bolt11.c hsmd: convert to new wire generation style. 2020-08-25 12:53:13 +09:30
bolt11.h cleanup: make 'u8 *features' and 'struct feature_set *fset' more explicit. 2020-04-03 13:13:21 +10:30
channel_config.c struct channel_config: use amount_sat / amount_msat. 2019-02-21 08:01:37 +00:00
channel_config.h bolt: update to BOLT spec changes (extract format + type specifications) 2019-07-16 06:10:58 +00:00
channel_id.c common/channel_id: move channel_id into its own file. 2020-05-18 14:51:12 +02:00
channel_id.h common/channel_id: move channel_id into its own file. 2020-05-18 14:51:12 +02:00
close_tx.c tx-psbt: pass in the witness script (if known) when adding an input 2020-06-11 13:13:13 +02:00
close_tx.h tx-psbt: pass in the witness script (if known) when adding an input 2020-06-11 13:13:13 +02:00
closing_fee.h closingd: configurable closing fee negotiation step 2020-04-07 13:52:48 +09:30
coin_mvt.c coins: use the chain's BIP173 name instead of a 'unit of account' 2020-05-12 15:46:58 +09:30
coin_mvt.h common/channel_id: move channel_id into its own file. 2020-05-18 14:51:12 +02:00
configdir.c config: limit depth on includes. 2019-11-23 22:42:34 +00:00
configdir.h config: explicitly disallow nonsensical options. 2019-11-23 22:42:34 +00:00
crypto_state.c crypto_state: move to its own file. 2017-10-20 18:31:32 +02:00
crypto_state.h crypto_state: move to its own file. 2017-10-20 18:31:32 +02:00
crypto_sync.c common: allow subdaemons to specify the node_id in status messages. 2019-11-18 04:50:22 +00:00
crypto_sync.h common/per_per_state: generalize lightningd/peer_comm Part 1 2019-06-04 01:29:39 +00:00
cryptomsg.c transition from status_trace() to status_debug 2019-09-10 02:02:51 +00:00
cryptomsg.h common/cryptomsg: remove unused async routines. 2018-09-28 04:14:28 +00:00
daemon.c setup: create a common setup which will handle the wally-context 2020-05-19 13:35:42 +09:30
daemon.h Add missing extern qualifiers for gcc 10 2020-02-02 12:59:17 +10:30
daemon_conn.c status: suppress status_trace/status_debug messages if queue too long. 2019-05-03 11:42:48 +02:00
daemon_conn.h status: suppress status_trace/status_debug messages if queue too long. 2019-05-03 11:42:48 +02:00
decode_array.c gossipd: hand (any) timestamps through to callback for query_channel_range. 2019-10-10 21:48:52 -05:00
decode_array.h wire: update to latest version of the spec. 2020-06-23 18:49:15 +02:00
derive_basepoints.c developer: add --dev-force-channel-secrets. 2019-07-17 12:55:37 -05:00
derive_basepoints.h developer: add --dev-force-channel-secrets. 2019-07-17 12:55:37 -05:00
dev_disconnect.c dev_disconnect: make it more reliable. 2019-10-10 21:48:52 -05:00
dev_disconnect.h Add DEVELOPER flag, set by default. 2017-10-26 12:53:09 +02:00
ecdh.h common: generalize ecdh function. 2020-04-04 16:08:49 +10:30
ecdh_hsmd.c hsmd: convert to new wire generation style. 2020-08-25 12:53:13 +09:30
ecdh_hsmd.h common: generalize ecdh function. 2020-04-04 16:08:49 +10:30
errcode.h Use dedicated type for error codes 2020-01-31 06:02:47 +00:00
features.c doc: update BOLT now option_anchor_outputs is merged. 2020-08-24 20:55:47 +09:30
features.h doc: update BOLT now option_anchor_outputs is merged. 2020-08-24 20:55:47 +09:30
fee_states.c wire: move remaining bitcoin functions out to bitcoin/ files. 2020-05-18 14:51:12 +02:00
fee_states.h df: rename 'funder' to 'opener' 2020-05-04 10:22:26 +09:30
funding_tx.c psbt: move witness script storage into the psbt 2020-05-21 18:45:07 +09:30
funding_tx.h tx: Add chainparams to struct bitcoin_tx as context 2019-07-31 23:22:54 +00:00
gossip_constants.h gossipd: prune channels unless *both* peers have refreshed. 2020-08-24 20:55:47 +09:30
gossip_rcvd_filter.c common/gossip_rcvd_filter: avoid DoS. 2019-09-06 14:35:01 +02:00
gossip_rcvd_filter.h common/gossip_rcvd_filter: cache for received gossip. 2019-09-06 14:35:01 +02:00
gossip_store.c BOLT: update to latest version. 2020-03-31 13:36:02 +02:00
gossip_store.h channeld: tell gossipd what the features are for our local channels. 2020-05-07 08:44:58 +09:30
gossmap.c common/gossmap: helper to map the gossip store. 2020-08-28 10:56:50 +09:30
gossmap.h common/gossmap: helper to map the gossip store. 2020-08-28 10:56:50 +09:30
hash_u5.c common: use tabs everywhere. 2020-02-05 14:19:12 +01:00
hash_u5.h common: use tabs everywhere. 2020-02-05 14:19:12 +01:00
hmac.c common: new file hmac for hmac calculation. 2020-03-25 14:26:28 +10:30
hmac.h common: new file hmac for hmac calculation. 2020-03-25 14:26:28 +10:30
htlc.h Remove unused functions not covered by unit tests 2018-03-28 11:22:05 +02:00
htlc_state.c common: absorb remaining files from daemon/ 2017-08-29 17:54:14 +02:00
htlc_state.h Fix a-vs-an typos 2018-02-08 22:49:34 +01:00
htlc_trim.c channeld, openingd: take into account option_anchor_outputs for fees. 2020-08-14 11:51:14 +09:30
htlc_trim.h channeld, openingd: take into account option_anchor_outputs for fees. 2020-08-14 11:51:14 +09:30
htlc_tx.c doc: update BOLT now option_anchor_outputs is merged. 2020-08-24 20:55:47 +09:30
htlc_tx.h doc: update BOLT now option_anchor_outputs is merged. 2020-08-24 20:55:47 +09:30
htlc_wire.c channeld: support HTLCs with blinding (EXPERIMENTAL_FEATURES) 2020-04-14 12:51:18 +09:30
htlc_wire.h channeld: support HTLCs with blinding (EXPERIMENTAL_FEATURES) 2020-04-14 12:51:18 +09:30
initial_channel.c option_anchor_outputs: wire into all the subdaemons. 2020-08-14 11:51:14 +09:30
initial_channel.h option_anchor_outputs: wire into all the subdaemons. 2020-08-14 11:51:14 +09:30
initial_commit_tx.c doc: update BOLT now option_anchor_outputs is merged. 2020-08-24 20:55:47 +09:30
initial_commit_tx.h doc: update BOLT now option_anchor_outputs is merged. 2020-08-24 20:55:47 +09:30
io_lock.c common/io_lock: add helper to query if lock is taken. 2018-10-19 22:02:11 +00:00
io_lock.h common: use tabs everywhere. 2020-02-05 14:19:12 +01:00
json.c common: make json_parse_input API retry friendly. 2020-08-21 09:52:33 +09:30
json.h common: make json_parse_input API retry friendly. 2020-08-21 09:52:33 +09:30
json_command.h Use dedicated type for error codes 2020-01-31 06:02:47 +00:00
json_helpers.c json: add "json-to-psbt" helper 2020-08-25 12:34:56 +09:30
json_helpers.h json: add "json-to-psbt" helper 2020-08-25 12:34:56 +09:30
json_stream.c common/json_stream.c: Implement a json_add_jsonstr to add already-JSON strings to json_stream objects. 2020-04-09 14:09:23 +09:30
json_stream.h common/json_stream.c: Implement a json_add_jsonstr to add already-JSON strings to json_stream objects. 2020-04-09 14:09:23 +09:30
json_tok.c common: hoist param_bitcoin_address where plugins can use it. 2020-08-11 08:39:24 +09:30
json_tok.h common: hoist param_bitcoin_address where plugins can use it. 2020-08-11 08:39:24 +09:30
jsonrpc_errors.h lightningd/invoice.c: Improve programmatic error reporting for delinvoice. 2020-07-31 23:57:32 +00:00
key_derive.c doc: update BOLT now option_anchor_outputs is merged. 2020-08-24 20:55:47 +09:30
key_derive.h headers: fix up header idempotent lines. 2017-08-29 17:54:14 +02:00
keyset.c doc: update BOLT now option_anchor_outputs is merged. 2020-08-24 20:55:47 +09:30
keyset.h derive_keyset: don't rotate key for remote iff option_static_remotekey. 2019-09-10 16:18:25 -05:00
Makefile common/gossmap: helper to map the gossip store. 2020-08-28 10:56:50 +09:30
memleak.c Add missing extern qualifiers for gcc 10 2020-02-02 12:59:17 +10:30
memleak.h Add missing extern qualifiers for gcc 10 2020-02-02 12:59:17 +10:30
msg_queue.c common: tal_dup_talarr() helper. 2020-02-27 14:16:16 +10:30
msg_queue.h status: suppress status_trace/status_debug messages if queue too long. 2019-05-03 11:42:48 +02:00
node_id.c wire: move remaining bitcoin functions out to bitcoin/ files. 2020-05-18 14:51:12 +02:00
node_id.h wire: move remaining bitcoin functions out to bitcoin/ files. 2020-05-18 14:51:12 +02:00
onion.c amount: cleanup usage. 2020-08-27 18:16:28 +02:00
onion.h common/onion: add blinding and enctlv encoding. 2020-04-14 12:51:18 +09:30
onionreply.c wire: move towire/fromwire_short_channel_id out to bitcoin/short_channel_id.c 2020-05-18 14:51:12 +02:00
onionreply.h common: add struct onionreply 2020-01-23 16:17:42 +10:30
overflows.h The overflow check mul_overflows_s64(int64_t, int64_t) overflows and triggers UB :-) Remove it 2018-03-27 23:18:48 +00:00
param.c common: tal_dup_talarr() helper. 2020-02-27 14:16:16 +10:30
param.h common: use tabs everywhere. 2020-02-05 14:19:12 +01:00
peer_billboard.c common: convert to new wire generation style. 2020-08-25 12:53:13 +09:30
peer_billboard.h common: peer_billboard() helper for updating the billboard. 2018-02-23 18:02:00 +01:00
peer_failed.c common: convert to new wire generation style. 2020-08-25 12:53:13 +09:30
peer_failed.h channeld: treat all incoming errors as "soft", so we retry. 2019-12-13 16:36:18 +01:00
peer_status_wire.csv common/channel_id: move channel_id into its own file. 2020-05-18 14:51:12 +02:00
penalty_base.c amount: use initializers everywhere. 2020-08-06 09:36:47 +09:30
penalty_base.h watchtower: Add a struct containing the penalty base information 2020-05-07 15:05:39 +09:30
per_peer_state.c Move gossip_constants.h into common/ 2019-09-25 04:01:56 +00:00
per_peer_state.h developer: consolidiate gossip timing options into one --dev-fast-gossip. 2019-09-20 06:55:00 +00:00
permute_tx.c psbt: remove input_amounts from bitcoin tx 2020-06-11 13:13:13 +02:00
permute_tx.h tx: Change permute_{inputs,outputs} to sort both old and new txs 2019-04-08 00:00:00 +00:00
ping.c transition from status_trace() to status_debug 2019-09-10 02:02:51 +00:00
ping.h pong: embed version string into ping replies if DEVELOPER=1. 2018-02-22 12:24:26 +01:00
psbt_open.c bugfix: save max_witness_len as big-endian 2020-08-25 12:34:56 +09:30
psbt_open.h psbt-common: shared psbt utilities 2020-08-18 11:08:44 +09:30
pseudorand.c common: expose pseudorand_double 2019-04-16 21:22:13 +00:00
pseudorand.h common: expose pseudorand_double 2019-04-16 21:22:13 +00:00
random_select.c common/random_select: central place for reservoir sampling. 2020-08-28 10:56:50 +09:30
random_select.h common/random_select: central place for reservoir sampling. 2020-08-28 10:56:50 +09:30
read_peer_msg.c gossipd: convert wire to new scheme. 2020-08-25 12:53:13 +09:30
read_peer_msg.h channeld: treat all incoming errors as "soft", so we retry. 2019-12-13 16:36:18 +01:00
setup.c setup: create a common setup which will handle the wally-context 2020-05-19 13:35:42 +09:30
setup.h setup: create a common setup which will handle the wally-context 2020-05-19 13:35:42 +09:30
socket_close.c closingd: Ensure proper closing of TCP socket. 2018-05-09 04:43:21 +00:00
socket_close.h closingd: Ensure proper closing of TCP socket. 2018-05-09 04:43:21 +00:00
sphinx.c doc: update bolt version 2020-08-24 20:55:47 +09:30
sphinx.h wire: move remaining bitcoin functions out to bitcoin/ files. 2020-05-18 14:51:12 +02:00
status.c common: convert to new wire generation style. 2020-08-25 12:53:13 +09:30
status.h common: allow subdaemons to specify the node_id in status messages. 2019-11-18 04:50:22 +00:00
status_levels.h status: separate types for peer failure vs "impossible" failures. 2018-02-08 19:07:12 +01:00
status_wire.c status: generate messages rather than marshal/unmarshal manually. 2018-02-08 19:07:12 +01:00
status_wire.csv wire: move remaining bitcoin functions out to bitcoin/ files. 2020-05-18 14:51:12 +02:00
status_wire.h status: generate messages rather than marshal/unmarshal manually. 2018-02-08 19:07:12 +01:00
subdaemon.c common: allow subdaemons to specify the node_id in status messages. 2019-11-18 04:50:22 +00:00
subdaemon.h common: reduce header differences for DEVELOPER vs non-DEVELOPER. 2019-09-06 14:35:01 +02:00
timeout.c utils: remove tal_tmpctx altogether, use global. 2018-03-16 00:16:10 +00:00
timeout.h headers: fix up header idempotent lines. 2017-08-29 17:54:14 +02:00
type_to_string.c type_to_string: return const char *. 2019-02-21 00:44:57 +00:00
type_to_string.h wally-tx: add type-to-string for a wally-tx 2020-07-13 11:37:24 +09:30
utils.c common/utils.c: Correctly handle NULL taken pointer in tal_dup_talarr. 2020-06-23 12:48:20 +09:30
utils.h utils: add marker for functions which take ownership of pointers. 2020-04-16 09:40:39 +09:30
utxo.c utxo: keep flag to recognize to-remote option_anchor_outputs closes. 2020-08-14 11:51:14 +09:30
utxo.h utxo: keep flag to recognize to-remote option_anchor_outputs closes. 2020-08-14 11:51:14 +09:30
version.c Makefile: Remove gen_version.h from ALL_GEN_HEADERS. 2020-08-07 10:41:37 +09:30
version.h Onboarding: Make log output texts friendlier to new users 2018-01-29 03:22:27 +00:00
wallet.c wallet: Rip out the txtypes type in favor of enum wallet_tx_type 2019-06-08 02:58:27 +00:00
wallet.h wallet: Add transaction annotation type 2019-10-07 20:03:24 -05:00
wallet_tx.c wallet: allow to withdraw with unconfirmed utxos 2020-04-01 22:58:18 -05:00
wallet_tx.h fundchannel: Add a new 'utxo' parameter 2019-06-11 23:24:07 +00:00
wire_error.c Remove tal_len, use tal_count() or tal_bytelen(). 2018-07-30 11:31:17 +02:00
wire_error.h common: fix up BOLT 1 references. 2018-06-18 12:31:09 +02:00
wireaddr.c common: use tabs everywhere. 2020-02-05 14:19:12 +01:00
wireaddr.h common/wireaddr: don't include lightningd/lightningd. 2020-02-27 14:16:16 +10:30
withdraw_tx.c withdraw: refactor change output handling 2020-06-23 14:49:32 +02:00
withdraw_tx.h withdraw: refactor change output handling 2020-06-23 14:49:32 +02:00