Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pay: Share channel_hints across payments and plugins #7487

Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion common/json_parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#include <bitcoin/privkey.h>
#include <bitcoin/psbt.h>
#include <bitcoin/pubkey.h>
#include <bitcoin/short_channel_id.h>
#include <bitcoin/tx.h>
#include <ccan/json_escape/json_escape.h>
#include <ccan/mem/mem.h>
Expand Down Expand Up @@ -574,6 +573,25 @@ bool json_to_short_channel_id(const char *buffer, const jsmntok_t *tok,
tok->end - tok->start, scid));
}

bool json_to_short_channel_id_dir(const char *buffer, const jsmntok_t *tok,
struct short_channel_id_dir *scidd)
{
jsmntok_t scidtok, numtok;
u32 dir;

if (!split_tok(buffer, tok, '/', &scidtok, &numtok))
return false;

if (!json_to_short_channel_id(buffer, &scidtok, &scidd->scid))
return false;

if (!json_to_u32(buffer, &numtok, &dir) || (dir > 1))
return false;

scidd->dir = dir;
return true;
}

bool json_to_txid(const char *buffer, const jsmntok_t *tok,
struct bitcoin_txid *txid)
{
Expand Down
5 changes: 5 additions & 0 deletions common/json_parse.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#ifndef LIGHTNING_COMMON_JSON_PARSE_H
#define LIGHTNING_COMMON_JSON_PARSE_H
#include "config.h"
#include <bitcoin/short_channel_id.h>
#include <ccan/crypto/sha256/sha256.h>
#include <common/coin_mvt.h>
#include <common/errcode.h>
Expand Down Expand Up @@ -110,6 +111,10 @@ bool json_to_outpoint(const char *buffer, const jsmntok_t *tok,
bool json_to_channel_id(const char *buffer, const jsmntok_t *tok,
struct channel_id *cid);

/* Extract a channel id + dir from this */
bool json_to_short_channel_id_dir(const char *buffer, const jsmntok_t *tok,
struct short_channel_id_dir *scidd);

/* Extract a coin movement 'tag' from this */
bool json_to_coin_mvt_tag(const char *buffer, const jsmntok_t *tok,
enum mvt_tag *tag);
Expand Down
11 changes: 10 additions & 1 deletion common/json_stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
#include <bitcoin/preimage.h>
#include <bitcoin/privkey.h>
#include <bitcoin/psbt.h>
#include <bitcoin/short_channel_id.h>
#include <bitcoin/signature.h>
#include <bitcoin/tx.h>
#include <ccan/io/io.h>
Expand Down Expand Up @@ -485,6 +484,16 @@ void json_add_short_channel_id(struct json_stream *response,
short_channel_id_outnum(scid));
}

void json_add_short_channel_id_dir(struct json_stream *response,
const char *fieldname,
struct short_channel_id_dir scidd)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

scidd is a complex type, so unlike scids it should be passed as "const struct short_channel_id_dir *". This also means the definition doesn't need to be in the header...

{
json_add_str_fmt(response, fieldname, "%dx%dx%d/%d",
short_channel_id_blocknum(scidd.scid),
short_channel_id_txnum(scidd.scid),
short_channel_id_outnum(scidd.scid), scidd.dir);
}

static void json_add_address_fields(struct json_stream *response,
const struct wireaddr *addr,
const char *typefield)
Expand Down
6 changes: 6 additions & 0 deletions common/json_stream.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#define LIGHTNING_COMMON_JSON_STREAM_H
#include "config.h"

#include <bitcoin/short_channel_id.h>
#define JSMN_STRICT 1
# include <external/jsmn/jsmn.h>

Expand Down Expand Up @@ -313,6 +314,11 @@ void json_add_short_channel_id(struct json_stream *response,
const char *fieldname,
struct short_channel_id id);

/* '"fieldname" : "1234:5:6/1"' */
void json_add_short_channel_id_dir(struct json_stream *response,
const char *fieldname,
struct short_channel_id_dir idd);

/* JSON serialize a network address for a node */
void json_add_address(struct json_stream *response, const char *fieldname,
const struct wireaddr *addr);
Expand Down
19 changes: 0 additions & 19 deletions plugins/offers_offer.c
Original file line number Diff line number Diff line change
Expand Up @@ -350,25 +350,6 @@ static struct command_result *currency_done(struct command *cmd,
return maybe_add_path(cmd, offinfo);
}

static bool json_to_short_channel_id_dir(const char *buffer, const jsmntok_t *tok,
struct short_channel_id_dir *scidd)
{
jsmntok_t scidtok, numtok;
u32 dir;

if (!split_tok(buffer, tok, '/', &scidtok, &numtok))
return false;

if (!json_to_short_channel_id(buffer, &scidtok, &scidd->scid))
return false;

if (!json_to_u32(buffer, &numtok, &dir) || (dir > 1))
return false;

scidd->dir = dir;
return true;
}

static bool json_to_sciddir_or_pubkey(const char *buffer, const jsmntok_t *tok,
struct sciddir_or_pubkey *sciddir_or_pubkey)
{
Expand Down