#ifndef LIGHTNING_PLUGINS_LIBPLUGIN_PAY_H #define LIGHTNING_PLUGINS_LIBPLUGIN_PAY_H #include "config.h" #include enum route_hop_style { ROUTE_HOP_LEGACY = 1, ROUTE_HOP_TLV = 2, }; struct route_hop { struct short_channel_id channel_id; int direction; struct node_id nodeid; struct amount_msat amount; u32 delay; struct pubkey *blinding; enum route_hop_style style; }; /* A parsed version of the possible outcomes that a sendpay / payment may * result in. */ struct payment_result { }; /* Relevant information about a local channel so we can exclude them early. */ struct channel_status { }; /* Each payment goes through a number of steps that are always processed in * the same order, and some modifiers are called with the payment, and the * modifier's data before and after certain steps, allowing customization. The * following enum represents the normal workflow of processing a payment, and * is used by `payment_continue` to re-enter the state machine from a * modifier. The values are powers of two in order to make aggregating of * subtree states in the root easy. */ enum payment_step { PAYMENT_STEP_INITIALIZED = 1, /* We just called getroute and got a resulting route, allow modifiers * to amend the route. */ PAYMENT_STEP_GOT_ROUTE = 2, /* We just computed the onion payload, allow modifiers to amend, * before constructing the onion packet. */ PAYMENT_STEP_ONION_PAYLOAD = 4, /* The following states mean that the current payment failed, but a * child payment is still running, and we can't say yet whether the * overall payment will fail or succeed. */ PAYMENT_STEP_SPLIT = 8, PAYMENT_STEP_RETRY = 16, /* The payment state-machine has terminated, these are the final * states that a payment can be in. */ PAYMENT_STEP_FAILED = 32, PAYMENT_STEP_SUCCESS = 64, }; struct payment { /* Real destination we want to route to */ struct node_id *destination; /* Payment hash extracted from the invoice if any. */ struct sha256 *payment_hash; u32 partid; /* Destination we should ask `getroute` for. This might differ from * the above destination if we use rendez-vous routing of blinded * paths to amend the route later in a mixin. */ struct node_id *getroute_destination; /* Target amount to be delivered at the destination */ struct amount_msat amount; /* tal_arr of route_hops we decoded from the `getroute` call. Exposed * here so it can be amended by mixins. */ struct route_hop *route; struct channel_status *peer_channels; /* The blockheight at which the payment attempt was * started. */ u32 start_block; struct timeabs start_time, end_time; struct timeabs deadline; struct amount_msat extra_budget; struct short_channel_id *exclusions; }; #endif /* LIGHTNING_PLUGINS_LIBPLUGIN_PAY_H */