2019-01-15 04:54:27 +01:00
|
|
|
/* More specialized (bitcoin, lightning-specific) JSON helpers. */
|
|
|
|
#ifndef LIGHTNING_COMMON_JSON_HELPERS_H
|
|
|
|
#define LIGHTNING_COMMON_JSON_HELPERS_H
|
|
|
|
#include "config.h"
|
2019-06-05 07:28:53 +02:00
|
|
|
#include <bitcoin/tx.h>
|
2019-01-15 04:54:27 +01:00
|
|
|
#include <common/json.h>
|
2019-09-30 18:31:27 +02:00
|
|
|
#include <wire/wire.h>
|
2019-01-15 04:54:27 +01:00
|
|
|
|
2019-02-21 01:46:57 +01:00
|
|
|
struct amount_msat;
|
|
|
|
struct amount_sat;
|
2019-01-15 04:54:27 +01:00
|
|
|
struct pubkey;
|
common/node_id: new type.
Node ids are pubkeys, but we only use them as pubkeys for routing and checking
gossip messages. So we're packing and unpacking them constantly, and wasting
some space and time.
This introduces a new type, explicitly the SEC1 compressed encoding
(33 bytes). We ensure its validity when we load from the db, or get it
from JSON. We still use 'struct pubkey' for peer messages, which checks
validity.
Results from 5 runs, min-max(mean +/- stddev):
store_load_msec,vsz_kb,store_rewrite_sec,listnodes_sec,listchannels_sec,routing_sec,peer_write_all_sec
39475-39572(39518+/-36),2880732,41.150000-41.390000(41.298+/-0.085),2.260000-2.550000(2.336+/-0.11),44.390000-65.150000(58.648+/-7.5),32.740000-33.020000(32.89+/-0.093),44.130000-45.090000(44.566+/-0.32)
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2019-04-08 08:34:06 +02:00
|
|
|
struct node_id;
|
2019-01-15 04:54:27 +01:00
|
|
|
struct short_channel_id;
|
|
|
|
|
|
|
|
/* Extract a pubkey from this */
|
|
|
|
bool json_to_pubkey(const char *buffer, const jsmntok_t *tok,
|
|
|
|
struct pubkey *pubkey);
|
|
|
|
|
common/node_id: new type.
Node ids are pubkeys, but we only use them as pubkeys for routing and checking
gossip messages. So we're packing and unpacking them constantly, and wasting
some space and time.
This introduces a new type, explicitly the SEC1 compressed encoding
(33 bytes). We ensure its validity when we load from the db, or get it
from JSON. We still use 'struct pubkey' for peer messages, which checks
validity.
Results from 5 runs, min-max(mean +/- stddev):
store_load_msec,vsz_kb,store_rewrite_sec,listnodes_sec,listchannels_sec,routing_sec,peer_write_all_sec
39475-39572(39518+/-36),2880732,41.150000-41.390000(41.298+/-0.085),2.260000-2.550000(2.336+/-0.11),44.390000-65.150000(58.648+/-7.5),32.740000-33.020000(32.89+/-0.093),44.130000-45.090000(44.566+/-0.32)
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2019-04-08 08:34:06 +02:00
|
|
|
/* Extract node_id from this: makes sure *id is valid! */
|
|
|
|
bool json_to_node_id(const char *buffer, const jsmntok_t *tok,
|
|
|
|
struct node_id *id);
|
|
|
|
|
2019-01-15 04:54:27 +01:00
|
|
|
/* Extract satoshis from this (may be a string, or a decimal number literal) */
|
|
|
|
bool json_to_bitcoin_amount(const char *buffer, const jsmntok_t *tok,
|
|
|
|
uint64_t *satoshi);
|
|
|
|
|
|
|
|
/* Extract a short_channel_id from this */
|
|
|
|
bool json_to_short_channel_id(const char *buffer, const jsmntok_t *tok,
|
2019-09-06 08:41:41 +02:00
|
|
|
struct short_channel_id *scid);
|
2019-01-15 04:54:27 +01:00
|
|
|
|
2019-02-21 01:46:57 +01:00
|
|
|
/* Extract a satoshis amount from this */
|
|
|
|
bool json_to_sat(const char *buffer, const jsmntok_t *tok,
|
|
|
|
struct amount_sat *sat);
|
|
|
|
|
2019-08-15 19:41:23 +02:00
|
|
|
/* Extract a satoshis amount from this */
|
|
|
|
/* If the string is "all", set amonut as AMOUNT_SAT(-1ULL). */
|
|
|
|
bool json_to_sat_or_all(const char *buffer, const jsmntok_t *tok,
|
|
|
|
struct amount_sat *sat);
|
|
|
|
|
2019-02-21 01:46:57 +01:00
|
|
|
/* Extract a millisatoshis amount from this */
|
|
|
|
bool json_to_msat(const char *buffer, const jsmntok_t *tok,
|
|
|
|
struct amount_msat *msat);
|
|
|
|
|
2019-06-05 07:28:53 +02:00
|
|
|
/* Extract a bitcoin txid from this */
|
|
|
|
bool json_to_txid(const char *buffer, const jsmntok_t *tok,
|
|
|
|
struct bitcoin_txid *txid);
|
2019-06-11 10:55:45 +02:00
|
|
|
|
2019-09-30 18:31:27 +02:00
|
|
|
/* Extract a channel id from this */
|
|
|
|
bool json_to_channel_id(const char *buffer, const jsmntok_t *tok,
|
|
|
|
struct channel_id *cid);
|
|
|
|
|
2019-06-11 10:55:45 +02:00
|
|
|
/* Split a json token into 2 tokens given a splitting character */
|
|
|
|
bool split_tok(const char *buffer, const jsmntok_t *tok,
|
|
|
|
char split,
|
|
|
|
jsmntok_t *a,
|
|
|
|
jsmntok_t *b);
|
2019-01-15 04:54:27 +01:00
|
|
|
#endif /* LIGHTNING_COMMON_JSON_HELPERS_H */
|