Files
nutshell/cashu/lightning/lnd_grpc/protos/router_pb2.pyi
lollerfirst d388508521 Mint: Talk to LND via gRPC (#595)
* protos + lnd_grpc.py + __init__ +  status method

* `create_invoice`

* `pay_invoice`, `pay_partial_invoice` and router pb2

* `get_invoice_status`

* channel keep-alive options

* Update lnd_grpc.py

* `get_payment_status` + make format

* `get_payment_quote` and `paid_invoices_stream`. This was suspiciously easy...

* download_and_build script modified to fix the imports on generated code

* pyproject with new dependencies

* update poetry.lock

* fixed errors in `pay_partial_invoice`

* update .env.example

* make format

* enable regtest

* update .env.example

* suggested fixes

* suggested changes pt.2

* Update cashu/core/settings.py

Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>

---------

Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>
2024-07-29 17:16:40 +02:00

1573 lines
63 KiB
Python

"""
@generated by mypy-protobuf. Do not edit manually!
isort:skip_file
"""
import builtins
import collections.abc
import sys
import typing
import google.protobuf.descriptor
import google.protobuf.internal.containers
import google.protobuf.internal.enum_type_wrapper
import google.protobuf.message
import cashu.lightning.lnd_grpc.protos.lightning_pb2
if sys.version_info >= (3, 10):
import typing as typing_extensions
else:
import typing_extensions
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
class _FailureDetail:
ValueType = typing.NewType("ValueType", builtins.int)
V: typing_extensions.TypeAlias = ValueType
class _FailureDetailEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_FailureDetail.ValueType], builtins.type):
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
UNKNOWN: _FailureDetail.ValueType # 0
NO_DETAIL: _FailureDetail.ValueType # 1
ONION_DECODE: _FailureDetail.ValueType # 2
LINK_NOT_ELIGIBLE: _FailureDetail.ValueType # 3
ON_CHAIN_TIMEOUT: _FailureDetail.ValueType # 4
HTLC_EXCEEDS_MAX: _FailureDetail.ValueType # 5
INSUFFICIENT_BALANCE: _FailureDetail.ValueType # 6
INCOMPLETE_FORWARD: _FailureDetail.ValueType # 7
HTLC_ADD_FAILED: _FailureDetail.ValueType # 8
FORWARDS_DISABLED: _FailureDetail.ValueType # 9
INVOICE_CANCELED: _FailureDetail.ValueType # 10
INVOICE_UNDERPAID: _FailureDetail.ValueType # 11
INVOICE_EXPIRY_TOO_SOON: _FailureDetail.ValueType # 12
INVOICE_NOT_OPEN: _FailureDetail.ValueType # 13
MPP_INVOICE_TIMEOUT: _FailureDetail.ValueType # 14
ADDRESS_MISMATCH: _FailureDetail.ValueType # 15
SET_TOTAL_MISMATCH: _FailureDetail.ValueType # 16
SET_TOTAL_TOO_LOW: _FailureDetail.ValueType # 17
SET_OVERPAID: _FailureDetail.ValueType # 18
UNKNOWN_INVOICE: _FailureDetail.ValueType # 19
INVALID_KEYSEND: _FailureDetail.ValueType # 20
MPP_IN_PROGRESS: _FailureDetail.ValueType # 21
CIRCULAR_ROUTE: _FailureDetail.ValueType # 22
class FailureDetail(_FailureDetail, metaclass=_FailureDetailEnumTypeWrapper): ...
UNKNOWN: FailureDetail.ValueType # 0
NO_DETAIL: FailureDetail.ValueType # 1
ONION_DECODE: FailureDetail.ValueType # 2
LINK_NOT_ELIGIBLE: FailureDetail.ValueType # 3
ON_CHAIN_TIMEOUT: FailureDetail.ValueType # 4
HTLC_EXCEEDS_MAX: FailureDetail.ValueType # 5
INSUFFICIENT_BALANCE: FailureDetail.ValueType # 6
INCOMPLETE_FORWARD: FailureDetail.ValueType # 7
HTLC_ADD_FAILED: FailureDetail.ValueType # 8
FORWARDS_DISABLED: FailureDetail.ValueType # 9
INVOICE_CANCELED: FailureDetail.ValueType # 10
INVOICE_UNDERPAID: FailureDetail.ValueType # 11
INVOICE_EXPIRY_TOO_SOON: FailureDetail.ValueType # 12
INVOICE_NOT_OPEN: FailureDetail.ValueType # 13
MPP_INVOICE_TIMEOUT: FailureDetail.ValueType # 14
ADDRESS_MISMATCH: FailureDetail.ValueType # 15
SET_TOTAL_MISMATCH: FailureDetail.ValueType # 16
SET_TOTAL_TOO_LOW: FailureDetail.ValueType # 17
SET_OVERPAID: FailureDetail.ValueType # 18
UNKNOWN_INVOICE: FailureDetail.ValueType # 19
INVALID_KEYSEND: FailureDetail.ValueType # 20
MPP_IN_PROGRESS: FailureDetail.ValueType # 21
CIRCULAR_ROUTE: FailureDetail.ValueType # 22
global___FailureDetail = FailureDetail
class _PaymentState:
ValueType = typing.NewType("ValueType", builtins.int)
V: typing_extensions.TypeAlias = ValueType
class _PaymentStateEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_PaymentState.ValueType], builtins.type):
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
IN_FLIGHT: _PaymentState.ValueType # 0
"""
Payment is still in flight.
"""
SUCCEEDED: _PaymentState.ValueType # 1
"""
Payment completed successfully.
"""
FAILED_TIMEOUT: _PaymentState.ValueType # 2
"""
There are more routes to try, but the payment timeout was exceeded.
"""
FAILED_NO_ROUTE: _PaymentState.ValueType # 3
"""
All possible routes were tried and failed permanently. Or were no
routes to the destination at all.
"""
FAILED_ERROR: _PaymentState.ValueType # 4
"""
A non-recoverable error has occurred.
"""
FAILED_INCORRECT_PAYMENT_DETAILS: _PaymentState.ValueType # 5
"""
Payment details incorrect (unknown hash, invalid amt or
invalid final cltv delta)
"""
FAILED_INSUFFICIENT_BALANCE: _PaymentState.ValueType # 6
"""
Insufficient local balance.
"""
class PaymentState(_PaymentState, metaclass=_PaymentStateEnumTypeWrapper): ...
IN_FLIGHT: PaymentState.ValueType # 0
"""
Payment is still in flight.
"""
SUCCEEDED: PaymentState.ValueType # 1
"""
Payment completed successfully.
"""
FAILED_TIMEOUT: PaymentState.ValueType # 2
"""
There are more routes to try, but the payment timeout was exceeded.
"""
FAILED_NO_ROUTE: PaymentState.ValueType # 3
"""
All possible routes were tried and failed permanently. Or were no
routes to the destination at all.
"""
FAILED_ERROR: PaymentState.ValueType # 4
"""
A non-recoverable error has occurred.
"""
FAILED_INCORRECT_PAYMENT_DETAILS: PaymentState.ValueType # 5
"""
Payment details incorrect (unknown hash, invalid amt or
invalid final cltv delta)
"""
FAILED_INSUFFICIENT_BALANCE: PaymentState.ValueType # 6
"""
Insufficient local balance.
"""
global___PaymentState = PaymentState
class _ResolveHoldForwardAction:
ValueType = typing.NewType("ValueType", builtins.int)
V: typing_extensions.TypeAlias = ValueType
class _ResolveHoldForwardActionEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ResolveHoldForwardAction.ValueType], builtins.type):
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
SETTLE: _ResolveHoldForwardAction.ValueType # 0
FAIL: _ResolveHoldForwardAction.ValueType # 1
RESUME: _ResolveHoldForwardAction.ValueType # 2
class ResolveHoldForwardAction(_ResolveHoldForwardAction, metaclass=_ResolveHoldForwardActionEnumTypeWrapper): ...
SETTLE: ResolveHoldForwardAction.ValueType # 0
FAIL: ResolveHoldForwardAction.ValueType # 1
RESUME: ResolveHoldForwardAction.ValueType # 2
global___ResolveHoldForwardAction = ResolveHoldForwardAction
class _ChanStatusAction:
ValueType = typing.NewType("ValueType", builtins.int)
V: typing_extensions.TypeAlias = ValueType
class _ChanStatusActionEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ChanStatusAction.ValueType], builtins.type):
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
ENABLE: _ChanStatusAction.ValueType # 0
DISABLE: _ChanStatusAction.ValueType # 1
AUTO: _ChanStatusAction.ValueType # 2
class ChanStatusAction(_ChanStatusAction, metaclass=_ChanStatusActionEnumTypeWrapper): ...
ENABLE: ChanStatusAction.ValueType # 0
DISABLE: ChanStatusAction.ValueType # 1
AUTO: ChanStatusAction.ValueType # 2
global___ChanStatusAction = ChanStatusAction
@typing.final
class SendPaymentRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
@typing.final
class DestCustomRecordsEntry(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
KEY_FIELD_NUMBER: builtins.int
VALUE_FIELD_NUMBER: builtins.int
key: builtins.int
value: builtins.bytes
def __init__(
self,
*,
key: builtins.int = ...,
value: builtins.bytes = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ...
DEST_FIELD_NUMBER: builtins.int
AMT_FIELD_NUMBER: builtins.int
PAYMENT_HASH_FIELD_NUMBER: builtins.int
FINAL_CLTV_DELTA_FIELD_NUMBER: builtins.int
PAYMENT_REQUEST_FIELD_NUMBER: builtins.int
TIMEOUT_SECONDS_FIELD_NUMBER: builtins.int
FEE_LIMIT_SAT_FIELD_NUMBER: builtins.int
OUTGOING_CHAN_ID_FIELD_NUMBER: builtins.int
CLTV_LIMIT_FIELD_NUMBER: builtins.int
ROUTE_HINTS_FIELD_NUMBER: builtins.int
DEST_CUSTOM_RECORDS_FIELD_NUMBER: builtins.int
AMT_MSAT_FIELD_NUMBER: builtins.int
FEE_LIMIT_MSAT_FIELD_NUMBER: builtins.int
LAST_HOP_PUBKEY_FIELD_NUMBER: builtins.int
ALLOW_SELF_PAYMENT_FIELD_NUMBER: builtins.int
DEST_FEATURES_FIELD_NUMBER: builtins.int
MAX_PARTS_FIELD_NUMBER: builtins.int
NO_INFLIGHT_UPDATES_FIELD_NUMBER: builtins.int
OUTGOING_CHAN_IDS_FIELD_NUMBER: builtins.int
PAYMENT_ADDR_FIELD_NUMBER: builtins.int
MAX_SHARD_SIZE_MSAT_FIELD_NUMBER: builtins.int
AMP_FIELD_NUMBER: builtins.int
TIME_PREF_FIELD_NUMBER: builtins.int
CANCELABLE_FIELD_NUMBER: builtins.int
dest: builtins.bytes
"""The identity pubkey of the payment recipient"""
amt: builtins.int
"""
Number of satoshis to send.
The fields amt and amt_msat are mutually exclusive.
"""
payment_hash: builtins.bytes
"""The hash to use within the payment's HTLC"""
final_cltv_delta: builtins.int
"""
The CLTV delta from the current height that should be used to set the
timelock for the final hop.
"""
payment_request: builtins.str
"""
A bare-bones invoice for a payment within the Lightning Network. With the
details of the invoice, the sender has all the data necessary to send a
payment to the recipient. The amount in the payment request may be zero. In
that case it is required to set the amt field as well. If no payment request
is specified, the following fields are required: dest, amt and payment_hash.
"""
timeout_seconds: builtins.int
"""
An upper limit on the amount of time we should spend when attempting to
fulfill the payment. This is expressed in seconds. If we cannot make a
successful payment within this time frame, an error will be returned.
This field must be non-zero.
"""
fee_limit_sat: builtins.int
"""
The maximum number of satoshis that will be paid as a fee of the payment.
If this field is left to the default value of 0, only zero-fee routes will
be considered. This usually means single hop routes connecting directly to
the destination. To send the payment without a fee limit, use max int here.
The fields fee_limit_sat and fee_limit_msat are mutually exclusive.
"""
outgoing_chan_id: builtins.int
"""
Deprecated, use outgoing_chan_ids. The channel id of the channel that must
be taken to the first hop. If zero, any channel may be used (unless
outgoing_chan_ids are set).
"""
cltv_limit: builtins.int
"""
An optional maximum total time lock for the route. This should not
exceed lnd's `--max-cltv-expiry` setting. If zero, then the value of
`--max-cltv-expiry` is enforced.
"""
amt_msat: builtins.int
"""
Number of millisatoshis to send.
The fields amt and amt_msat are mutually exclusive.
"""
fee_limit_msat: builtins.int
"""
The maximum number of millisatoshis that will be paid as a fee of the
payment. If this field is left to the default value of 0, only zero-fee
routes will be considered. This usually means single hop routes connecting
directly to the destination. To send the payment without a fee limit, use
max int here.
The fields fee_limit_sat and fee_limit_msat are mutually exclusive.
"""
last_hop_pubkey: builtins.bytes
"""
The pubkey of the last hop of the route. If empty, any hop may be used.
"""
allow_self_payment: builtins.bool
"""If set, circular payments to self are permitted."""
max_parts: builtins.int
"""
The maximum number of partial payments that may be use to complete the full
amount.
"""
no_inflight_updates: builtins.bool
"""
If set, only the final payment update is streamed back. Intermediate updates
that show which htlcs are still in flight are suppressed.
"""
payment_addr: builtins.bytes
"""
An optional payment addr to be included within the last hop of the route.
This is also called payment secret in specifications (e.g. BOLT 11).
"""
max_shard_size_msat: builtins.int
"""
The largest payment split that should be attempted when making a payment if
splitting is necessary. Setting this value will effectively cause lnd to
split more aggressively, vs only when it thinks it needs to. Note that this
value is in milli-satoshis.
"""
amp: builtins.bool
"""
If set, an AMP-payment will be attempted.
"""
time_pref: builtins.float
"""
The time preference for this payment. Set to -1 to optimize for fees
only, to 1 to optimize for reliability only or a value inbetween for a mix.
"""
cancelable: builtins.bool
"""
If set, the payment loop can be interrupted by manually canceling the
payment context, even before the payment timeout is reached. Note that the
payment may still succeed after cancellation, as in-flight attempts can
still settle afterwards. Canceling will only prevent further attempts from
being sent.
"""
@property
def route_hints(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[cashu.lightning.lnd_grpc.protos.lightning_pb2.RouteHint]:
"""
Optional route hints to reach the destination through private channels.
"""
@property
def dest_custom_records(self) -> google.protobuf.internal.containers.ScalarMap[builtins.int, builtins.bytes]:
"""
An optional field that can be used to pass an arbitrary set of TLV records
to a peer which understands the new records. This can be used to pass
application specific data during the payment attempt. Record types are
required to be in the custom range >= 65536. When using REST, the values
must be encoded as base64.
"""
@property
def dest_features(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[cashu.lightning.lnd_grpc.protos.lightning_pb2.FeatureBit.ValueType]:
"""
Features assumed to be supported by the final node. All transitive feature
dependencies must also be set properly. For a given feature bit pair, either
optional or remote may be set, but not both. If this field is nil or empty,
the router will try to load destination features from the graph as a
fallback.
"""
@property
def outgoing_chan_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
"""
The channel ids of the channels are allowed for the first hop. If empty,
any channel may be used.
"""
def __init__(
self,
*,
dest: builtins.bytes = ...,
amt: builtins.int = ...,
payment_hash: builtins.bytes = ...,
final_cltv_delta: builtins.int = ...,
payment_request: builtins.str = ...,
timeout_seconds: builtins.int = ...,
fee_limit_sat: builtins.int = ...,
outgoing_chan_id: builtins.int = ...,
cltv_limit: builtins.int = ...,
route_hints: collections.abc.Iterable[cashu.lightning.lnd_grpc.protos.lightning_pb2.RouteHint] | None = ...,
dest_custom_records: collections.abc.Mapping[builtins.int, builtins.bytes] | None = ...,
amt_msat: builtins.int = ...,
fee_limit_msat: builtins.int = ...,
last_hop_pubkey: builtins.bytes = ...,
allow_self_payment: builtins.bool = ...,
dest_features: collections.abc.Iterable[cashu.lightning.lnd_grpc.protos.lightning_pb2.FeatureBit.ValueType] | None = ...,
max_parts: builtins.int = ...,
no_inflight_updates: builtins.bool = ...,
outgoing_chan_ids: collections.abc.Iterable[builtins.int] | None = ...,
payment_addr: builtins.bytes = ...,
max_shard_size_msat: builtins.int = ...,
amp: builtins.bool = ...,
time_pref: builtins.float = ...,
cancelable: builtins.bool = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["allow_self_payment", b"allow_self_payment", "amp", b"amp", "amt", b"amt", "amt_msat", b"amt_msat", "cancelable", b"cancelable", "cltv_limit", b"cltv_limit", "dest", b"dest", "dest_custom_records", b"dest_custom_records", "dest_features", b"dest_features", "fee_limit_msat", b"fee_limit_msat", "fee_limit_sat", b"fee_limit_sat", "final_cltv_delta", b"final_cltv_delta", "last_hop_pubkey", b"last_hop_pubkey", "max_parts", b"max_parts", "max_shard_size_msat", b"max_shard_size_msat", "no_inflight_updates", b"no_inflight_updates", "outgoing_chan_id", b"outgoing_chan_id", "outgoing_chan_ids", b"outgoing_chan_ids", "payment_addr", b"payment_addr", "payment_hash", b"payment_hash", "payment_request", b"payment_request", "route_hints", b"route_hints", "time_pref", b"time_pref", "timeout_seconds", b"timeout_seconds"]) -> None: ...
global___SendPaymentRequest = SendPaymentRequest
@typing.final
class TrackPaymentRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
PAYMENT_HASH_FIELD_NUMBER: builtins.int
NO_INFLIGHT_UPDATES_FIELD_NUMBER: builtins.int
payment_hash: builtins.bytes
"""The hash of the payment to look up."""
no_inflight_updates: builtins.bool
"""
If set, only the final payment update is streamed back. Intermediate updates
that show which htlcs are still in flight are suppressed.
"""
def __init__(
self,
*,
payment_hash: builtins.bytes = ...,
no_inflight_updates: builtins.bool = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["no_inflight_updates", b"no_inflight_updates", "payment_hash", b"payment_hash"]) -> None: ...
global___TrackPaymentRequest = TrackPaymentRequest
@typing.final
class TrackPaymentsRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
NO_INFLIGHT_UPDATES_FIELD_NUMBER: builtins.int
no_inflight_updates: builtins.bool
"""
If set, only the final payment updates are streamed back. Intermediate
updates that show which htlcs are still in flight are suppressed.
"""
def __init__(
self,
*,
no_inflight_updates: builtins.bool = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["no_inflight_updates", b"no_inflight_updates"]) -> None: ...
global___TrackPaymentsRequest = TrackPaymentsRequest
@typing.final
class RouteFeeRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
DEST_FIELD_NUMBER: builtins.int
AMT_SAT_FIELD_NUMBER: builtins.int
PAYMENT_REQUEST_FIELD_NUMBER: builtins.int
TIMEOUT_FIELD_NUMBER: builtins.int
dest: builtins.bytes
"""
The destination one wishes to obtain a routing fee quote to. If set, this
parameter requires the amt_sat parameter also to be set. This parameter
combination triggers a graph based routing fee estimation as opposed to a
payment probe based estimate in case a payment request is provided. The
graph based estimation is an algorithm that is executed on the in memory
graph. Hence its runtime is significantly shorter than a payment probe
estimation that sends out actual payments to the network.
"""
amt_sat: builtins.int
"""
The amount one wishes to send to the target destination. It is only to be
used in combination with the dest parameter.
"""
payment_request: builtins.str
"""
A payment request of the target node that the route fee request is intended
for. Its parameters are input to probe payments that estimate routing fees.
The timeout parameter can be specified to set a maximum time on the probing
attempt. Cannot be used in combination with dest and amt_sat.
"""
timeout: builtins.int
"""
A user preference of how long a probe payment should maximally be allowed to
take, denoted in seconds. The probing payment loop is aborted if this
timeout is reached. Note that the probing process itself can take longer
than the timeout if the HTLC becomes delayed or stuck. Canceling the context
of this call will not cancel the payment loop, the duration is only
controlled by the timeout parameter.
"""
def __init__(
self,
*,
dest: builtins.bytes = ...,
amt_sat: builtins.int = ...,
payment_request: builtins.str = ...,
timeout: builtins.int = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["amt_sat", b"amt_sat", "dest", b"dest", "payment_request", b"payment_request", "timeout", b"timeout"]) -> None: ...
global___RouteFeeRequest = RouteFeeRequest
@typing.final
class RouteFeeResponse(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
ROUTING_FEE_MSAT_FIELD_NUMBER: builtins.int
TIME_LOCK_DELAY_FIELD_NUMBER: builtins.int
FAILURE_REASON_FIELD_NUMBER: builtins.int
routing_fee_msat: builtins.int
"""
A lower bound of the estimated fee to the target destination within the
network, expressed in milli-satoshis.
"""
time_lock_delay: builtins.int
"""
An estimate of the worst case time delay that can occur. Note that callers
will still need to factor in the final CLTV delta of the last hop into this
value.
"""
failure_reason: cashu.lightning.lnd_grpc.protos.lightning_pb2.PaymentFailureReason.ValueType
"""
An indication whether a probing payment succeeded or whether and why it
failed. FAILURE_REASON_NONE indicates success.
"""
def __init__(
self,
*,
routing_fee_msat: builtins.int = ...,
time_lock_delay: builtins.int = ...,
failure_reason: cashu.lightning.lnd_grpc.protos.lightning_pb2.PaymentFailureReason.ValueType = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["failure_reason", b"failure_reason", "routing_fee_msat", b"routing_fee_msat", "time_lock_delay", b"time_lock_delay"]) -> None: ...
global___RouteFeeResponse = RouteFeeResponse
@typing.final
class SendToRouteRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
PAYMENT_HASH_FIELD_NUMBER: builtins.int
ROUTE_FIELD_NUMBER: builtins.int
SKIP_TEMP_ERR_FIELD_NUMBER: builtins.int
payment_hash: builtins.bytes
"""The payment hash to use for the HTLC."""
skip_temp_err: builtins.bool
"""
Whether the payment should be marked as failed when a temporary error is
returned from the given route. Set it to true so the payment won't be
failed unless a terminal error is occurred, such as payment timeout, no
routes, incorrect payment details, or insufficient funds.
"""
@property
def route(self) -> cashu.lightning.lnd_grpc.protos.lightning_pb2.Route:
"""Route that should be used to attempt to complete the payment."""
def __init__(
self,
*,
payment_hash: builtins.bytes = ...,
route: cashu.lightning.lnd_grpc.protos.lightning_pb2.Route | None = ...,
skip_temp_err: builtins.bool = ...,
) -> None: ...
def HasField(self, field_name: typing.Literal["route", b"route"]) -> builtins.bool: ...
def ClearField(self, field_name: typing.Literal["payment_hash", b"payment_hash", "route", b"route", "skip_temp_err", b"skip_temp_err"]) -> None: ...
global___SendToRouteRequest = SendToRouteRequest
@typing.final
class SendToRouteResponse(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
PREIMAGE_FIELD_NUMBER: builtins.int
FAILURE_FIELD_NUMBER: builtins.int
preimage: builtins.bytes
"""The preimage obtained by making the payment."""
@property
def failure(self) -> cashu.lightning.lnd_grpc.protos.lightning_pb2.Failure:
"""The failure message in case the payment failed."""
def __init__(
self,
*,
preimage: builtins.bytes = ...,
failure: cashu.lightning.lnd_grpc.protos.lightning_pb2.Failure | None = ...,
) -> None: ...
def HasField(self, field_name: typing.Literal["failure", b"failure"]) -> builtins.bool: ...
def ClearField(self, field_name: typing.Literal["failure", b"failure", "preimage", b"preimage"]) -> None: ...
global___SendToRouteResponse = SendToRouteResponse
@typing.final
class ResetMissionControlRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
def __init__(
self,
) -> None: ...
global___ResetMissionControlRequest = ResetMissionControlRequest
@typing.final
class ResetMissionControlResponse(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
def __init__(
self,
) -> None: ...
global___ResetMissionControlResponse = ResetMissionControlResponse
@typing.final
class QueryMissionControlRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
def __init__(
self,
) -> None: ...
global___QueryMissionControlRequest = QueryMissionControlRequest
@typing.final
class QueryMissionControlResponse(google.protobuf.message.Message):
"""QueryMissionControlResponse contains mission control state."""
DESCRIPTOR: google.protobuf.descriptor.Descriptor
PAIRS_FIELD_NUMBER: builtins.int
@property
def pairs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___PairHistory]:
"""Node pair-level mission control state."""
def __init__(
self,
*,
pairs: collections.abc.Iterable[global___PairHistory] | None = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["pairs", b"pairs"]) -> None: ...
global___QueryMissionControlResponse = QueryMissionControlResponse
@typing.final
class XImportMissionControlRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
PAIRS_FIELD_NUMBER: builtins.int
FORCE_FIELD_NUMBER: builtins.int
force: builtins.bool
"""Whether to force override MC pair history. Note that even with force
override the failure pair is imported before the success pair and both
still clamp existing failure/success amounts.
"""
@property
def pairs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___PairHistory]:
"""Node pair-level mission control state to be imported."""
def __init__(
self,
*,
pairs: collections.abc.Iterable[global___PairHistory] | None = ...,
force: builtins.bool = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["force", b"force", "pairs", b"pairs"]) -> None: ...
global___XImportMissionControlRequest = XImportMissionControlRequest
@typing.final
class XImportMissionControlResponse(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
def __init__(
self,
) -> None: ...
global___XImportMissionControlResponse = XImportMissionControlResponse
@typing.final
class PairHistory(google.protobuf.message.Message):
"""PairHistory contains the mission control state for a particular node pair."""
DESCRIPTOR: google.protobuf.descriptor.Descriptor
NODE_FROM_FIELD_NUMBER: builtins.int
NODE_TO_FIELD_NUMBER: builtins.int
HISTORY_FIELD_NUMBER: builtins.int
node_from: builtins.bytes
"""The source node pubkey of the pair."""
node_to: builtins.bytes
"""The destination node pubkey of the pair."""
@property
def history(self) -> global___PairData: ...
def __init__(
self,
*,
node_from: builtins.bytes = ...,
node_to: builtins.bytes = ...,
history: global___PairData | None = ...,
) -> None: ...
def HasField(self, field_name: typing.Literal["history", b"history"]) -> builtins.bool: ...
def ClearField(self, field_name: typing.Literal["history", b"history", "node_from", b"node_from", "node_to", b"node_to"]) -> None: ...
global___PairHistory = PairHistory
@typing.final
class PairData(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
FAIL_TIME_FIELD_NUMBER: builtins.int
FAIL_AMT_SAT_FIELD_NUMBER: builtins.int
FAIL_AMT_MSAT_FIELD_NUMBER: builtins.int
SUCCESS_TIME_FIELD_NUMBER: builtins.int
SUCCESS_AMT_SAT_FIELD_NUMBER: builtins.int
SUCCESS_AMT_MSAT_FIELD_NUMBER: builtins.int
fail_time: builtins.int
"""Time of last failure."""
fail_amt_sat: builtins.int
"""
Lowest amount that failed to forward rounded to whole sats. This may be
set to zero if the failure is independent of amount.
"""
fail_amt_msat: builtins.int
"""
Lowest amount that failed to forward in millisats. This may be
set to zero if the failure is independent of amount.
"""
success_time: builtins.int
"""Time of last success."""
success_amt_sat: builtins.int
"""Highest amount that we could successfully forward rounded to whole sats."""
success_amt_msat: builtins.int
"""Highest amount that we could successfully forward in millisats."""
def __init__(
self,
*,
fail_time: builtins.int = ...,
fail_amt_sat: builtins.int = ...,
fail_amt_msat: builtins.int = ...,
success_time: builtins.int = ...,
success_amt_sat: builtins.int = ...,
success_amt_msat: builtins.int = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["fail_amt_msat", b"fail_amt_msat", "fail_amt_sat", b"fail_amt_sat", "fail_time", b"fail_time", "success_amt_msat", b"success_amt_msat", "success_amt_sat", b"success_amt_sat", "success_time", b"success_time"]) -> None: ...
global___PairData = PairData
@typing.final
class GetMissionControlConfigRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
def __init__(
self,
) -> None: ...
global___GetMissionControlConfigRequest = GetMissionControlConfigRequest
@typing.final
class GetMissionControlConfigResponse(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
CONFIG_FIELD_NUMBER: builtins.int
@property
def config(self) -> global___MissionControlConfig:
"""
Mission control's currently active config.
"""
def __init__(
self,
*,
config: global___MissionControlConfig | None = ...,
) -> None: ...
def HasField(self, field_name: typing.Literal["config", b"config"]) -> builtins.bool: ...
def ClearField(self, field_name: typing.Literal["config", b"config"]) -> None: ...
global___GetMissionControlConfigResponse = GetMissionControlConfigResponse
@typing.final
class SetMissionControlConfigRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
CONFIG_FIELD_NUMBER: builtins.int
@property
def config(self) -> global___MissionControlConfig:
"""
The config to set for mission control. Note that all values *must* be set,
because the full config will be applied.
"""
def __init__(
self,
*,
config: global___MissionControlConfig | None = ...,
) -> None: ...
def HasField(self, field_name: typing.Literal["config", b"config"]) -> builtins.bool: ...
def ClearField(self, field_name: typing.Literal["config", b"config"]) -> None: ...
global___SetMissionControlConfigRequest = SetMissionControlConfigRequest
@typing.final
class SetMissionControlConfigResponse(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
def __init__(
self,
) -> None: ...
global___SetMissionControlConfigResponse = SetMissionControlConfigResponse
@typing.final
class MissionControlConfig(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
class _ProbabilityModel:
ValueType = typing.NewType("ValueType", builtins.int)
V: typing_extensions.TypeAlias = ValueType
class _ProbabilityModelEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[MissionControlConfig._ProbabilityModel.ValueType], builtins.type): # noqa: F821
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
APRIORI: MissionControlConfig._ProbabilityModel.ValueType # 0
BIMODAL: MissionControlConfig._ProbabilityModel.ValueType # 1
class ProbabilityModel(_ProbabilityModel, metaclass=_ProbabilityModelEnumTypeWrapper): ...
APRIORI: MissionControlConfig.ProbabilityModel.ValueType # 0
BIMODAL: MissionControlConfig.ProbabilityModel.ValueType # 1
HALF_LIFE_SECONDS_FIELD_NUMBER: builtins.int
HOP_PROBABILITY_FIELD_NUMBER: builtins.int
WEIGHT_FIELD_NUMBER: builtins.int
MAXIMUM_PAYMENT_RESULTS_FIELD_NUMBER: builtins.int
MINIMUM_FAILURE_RELAX_INTERVAL_FIELD_NUMBER: builtins.int
MODEL_FIELD_NUMBER: builtins.int
APRIORI_FIELD_NUMBER: builtins.int
BIMODAL_FIELD_NUMBER: builtins.int
half_life_seconds: builtins.int
"""
Deprecated, use AprioriParameters. The amount of time mission control will
take to restore a penalized node or channel back to 50% success probability,
expressed in seconds. Setting this value to a higher value will penalize
failures for longer, making mission control less likely to route through
nodes and channels that we have previously recorded failures for.
"""
hop_probability: builtins.float
"""
Deprecated, use AprioriParameters. The probability of success mission
control should assign to hop in a route where it has no other information
available. Higher values will make mission control more willing to try hops
that we have no information about, lower values will discourage trying these
hops.
"""
weight: builtins.float
"""
Deprecated, use AprioriParameters. The importance that mission control
should place on historical results, expressed as a value in [0;1]. Setting
this value to 1 will ignore all historical payments and just use the hop
probability to assess the probability of success for each hop. A zero value
ignores hop probability completely and relies entirely on historical
results, unless none are available.
"""
maximum_payment_results: builtins.int
"""
The maximum number of payment results that mission control will store.
"""
minimum_failure_relax_interval: builtins.int
"""
The minimum time that must have passed since the previously recorded failure
before we raise the failure amount.
"""
model: global___MissionControlConfig.ProbabilityModel.ValueType
"""
ProbabilityModel defines which probability estimator should be used in
pathfinding. Note that the bimodal estimator is experimental.
"""
@property
def apriori(self) -> global___AprioriParameters: ...
@property
def bimodal(self) -> global___BimodalParameters: ...
def __init__(
self,
*,
half_life_seconds: builtins.int = ...,
hop_probability: builtins.float = ...,
weight: builtins.float = ...,
maximum_payment_results: builtins.int = ...,
minimum_failure_relax_interval: builtins.int = ...,
model: global___MissionControlConfig.ProbabilityModel.ValueType = ...,
apriori: global___AprioriParameters | None = ...,
bimodal: global___BimodalParameters | None = ...,
) -> None: ...
def HasField(self, field_name: typing.Literal["EstimatorConfig", b"EstimatorConfig", "apriori", b"apriori", "bimodal", b"bimodal"]) -> builtins.bool: ...
def ClearField(self, field_name: typing.Literal["EstimatorConfig", b"EstimatorConfig", "apriori", b"apriori", "bimodal", b"bimodal", "half_life_seconds", b"half_life_seconds", "hop_probability", b"hop_probability", "maximum_payment_results", b"maximum_payment_results", "minimum_failure_relax_interval", b"minimum_failure_relax_interval", "model", b"model", "weight", b"weight"]) -> None: ...
def WhichOneof(self, oneof_group: typing.Literal["EstimatorConfig", b"EstimatorConfig"]) -> typing.Literal["apriori", "bimodal"] | None: ...
global___MissionControlConfig = MissionControlConfig
@typing.final
class BimodalParameters(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
NODE_WEIGHT_FIELD_NUMBER: builtins.int
SCALE_MSAT_FIELD_NUMBER: builtins.int
DECAY_TIME_FIELD_NUMBER: builtins.int
node_weight: builtins.float
"""
NodeWeight defines how strongly other previous forwardings on channels of a
router should be taken into account when computing a channel's probability
to route. The allowed values are in the range [0, 1], where a value of 0
means that only direct information about a channel is taken into account.
"""
scale_msat: builtins.int
"""
ScaleMsat describes the scale over which channels statistically have some
liquidity left. The value determines how quickly the bimodal distribution
drops off from the edges of a channel. A larger value (compared to typical
channel capacities) means that the drop off is slow and that channel
balances are distributed more uniformly. A small value leads to the
assumption of very unbalanced channels.
"""
decay_time: builtins.int
"""
DecayTime describes the information decay of knowledge about previous
successes and failures in channels. The smaller the decay time, the quicker
we forget about past forwardings.
"""
def __init__(
self,
*,
node_weight: builtins.float = ...,
scale_msat: builtins.int = ...,
decay_time: builtins.int = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["decay_time", b"decay_time", "node_weight", b"node_weight", "scale_msat", b"scale_msat"]) -> None: ...
global___BimodalParameters = BimodalParameters
@typing.final
class AprioriParameters(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
HALF_LIFE_SECONDS_FIELD_NUMBER: builtins.int
HOP_PROBABILITY_FIELD_NUMBER: builtins.int
WEIGHT_FIELD_NUMBER: builtins.int
CAPACITY_FRACTION_FIELD_NUMBER: builtins.int
half_life_seconds: builtins.int
"""
The amount of time mission control will take to restore a penalized node
or channel back to 50% success probability, expressed in seconds. Setting
this value to a higher value will penalize failures for longer, making
mission control less likely to route through nodes and channels that we
have previously recorded failures for.
"""
hop_probability: builtins.float
"""
The probability of success mission control should assign to hop in a route
where it has no other information available. Higher values will make mission
control more willing to try hops that we have no information about, lower
values will discourage trying these hops.
"""
weight: builtins.float
"""
The importance that mission control should place on historical results,
expressed as a value in [0;1]. Setting this value to 1 will ignore all
historical payments and just use the hop probability to assess the
probability of success for each hop. A zero value ignores hop probability
completely and relies entirely on historical results, unless none are
available.
"""
capacity_fraction: builtins.float
"""
The fraction of a channel's capacity that we consider to have liquidity. For
amounts that come close to or exceed the fraction, an additional penalty is
applied. A value of 1.0 disables the capacity factor. Allowed values are in
[0.75, 1.0].
"""
def __init__(
self,
*,
half_life_seconds: builtins.int = ...,
hop_probability: builtins.float = ...,
weight: builtins.float = ...,
capacity_fraction: builtins.float = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["capacity_fraction", b"capacity_fraction", "half_life_seconds", b"half_life_seconds", "hop_probability", b"hop_probability", "weight", b"weight"]) -> None: ...
global___AprioriParameters = AprioriParameters
@typing.final
class QueryProbabilityRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
FROM_NODE_FIELD_NUMBER: builtins.int
TO_NODE_FIELD_NUMBER: builtins.int
AMT_MSAT_FIELD_NUMBER: builtins.int
from_node: builtins.bytes
"""The source node pubkey of the pair."""
to_node: builtins.bytes
"""The destination node pubkey of the pair."""
amt_msat: builtins.int
"""The amount for which to calculate a probability."""
def __init__(
self,
*,
from_node: builtins.bytes = ...,
to_node: builtins.bytes = ...,
amt_msat: builtins.int = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["amt_msat", b"amt_msat", "from_node", b"from_node", "to_node", b"to_node"]) -> None: ...
global___QueryProbabilityRequest = QueryProbabilityRequest
@typing.final
class QueryProbabilityResponse(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
PROBABILITY_FIELD_NUMBER: builtins.int
HISTORY_FIELD_NUMBER: builtins.int
probability: builtins.float
"""The success probability for the requested pair."""
@property
def history(self) -> global___PairData:
"""The historical data for the requested pair."""
def __init__(
self,
*,
probability: builtins.float = ...,
history: global___PairData | None = ...,
) -> None: ...
def HasField(self, field_name: typing.Literal["history", b"history"]) -> builtins.bool: ...
def ClearField(self, field_name: typing.Literal["history", b"history", "probability", b"probability"]) -> None: ...
global___QueryProbabilityResponse = QueryProbabilityResponse
@typing.final
class BuildRouteRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
AMT_MSAT_FIELD_NUMBER: builtins.int
FINAL_CLTV_DELTA_FIELD_NUMBER: builtins.int
OUTGOING_CHAN_ID_FIELD_NUMBER: builtins.int
HOP_PUBKEYS_FIELD_NUMBER: builtins.int
PAYMENT_ADDR_FIELD_NUMBER: builtins.int
amt_msat: builtins.int
"""
The amount to send expressed in msat. If set to zero, the minimum routable
amount is used.
"""
final_cltv_delta: builtins.int
"""
CLTV delta from the current height that should be used for the timelock
of the final hop
"""
outgoing_chan_id: builtins.int
"""
The channel id of the channel that must be taken to the first hop. If zero,
any channel may be used.
"""
payment_addr: builtins.bytes
"""
An optional payment addr to be included within the last hop of the route.
This is also called payment secret in specifications (e.g. BOLT 11).
"""
@property
def hop_pubkeys(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.bytes]:
"""
A list of hops that defines the route. This does not include the source hop
pubkey.
"""
def __init__(
self,
*,
amt_msat: builtins.int = ...,
final_cltv_delta: builtins.int = ...,
outgoing_chan_id: builtins.int = ...,
hop_pubkeys: collections.abc.Iterable[builtins.bytes] | None = ...,
payment_addr: builtins.bytes = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["amt_msat", b"amt_msat", "final_cltv_delta", b"final_cltv_delta", "hop_pubkeys", b"hop_pubkeys", "outgoing_chan_id", b"outgoing_chan_id", "payment_addr", b"payment_addr"]) -> None: ...
global___BuildRouteRequest = BuildRouteRequest
@typing.final
class BuildRouteResponse(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
ROUTE_FIELD_NUMBER: builtins.int
@property
def route(self) -> cashu.lightning.lnd_grpc.protos.lightning_pb2.Route:
"""
Fully specified route that can be used to execute the payment.
"""
def __init__(
self,
*,
route: cashu.lightning.lnd_grpc.protos.lightning_pb2.Route | None = ...,
) -> None: ...
def HasField(self, field_name: typing.Literal["route", b"route"]) -> builtins.bool: ...
def ClearField(self, field_name: typing.Literal["route", b"route"]) -> None: ...
global___BuildRouteResponse = BuildRouteResponse
@typing.final
class SubscribeHtlcEventsRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
def __init__(
self,
) -> None: ...
global___SubscribeHtlcEventsRequest = SubscribeHtlcEventsRequest
@typing.final
class HtlcEvent(google.protobuf.message.Message):
"""
HtlcEvent contains the htlc event that was processed. These are served on a
best-effort basis; events are not persisted, delivery is not guaranteed
(in the event of a crash in the switch, forward events may be lost) and
some events may be replayed upon restart. Events consumed from this package
should be de-duplicated by the htlc's unique combination of incoming and
outgoing channel id and htlc id. [EXPERIMENTAL]
"""
DESCRIPTOR: google.protobuf.descriptor.Descriptor
class _EventType:
ValueType = typing.NewType("ValueType", builtins.int)
V: typing_extensions.TypeAlias = ValueType
class _EventTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[HtlcEvent._EventType.ValueType], builtins.type): # noqa: F821
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
UNKNOWN: HtlcEvent._EventType.ValueType # 0
SEND: HtlcEvent._EventType.ValueType # 1
RECEIVE: HtlcEvent._EventType.ValueType # 2
FORWARD: HtlcEvent._EventType.ValueType # 3
class EventType(_EventType, metaclass=_EventTypeEnumTypeWrapper): ...
UNKNOWN: HtlcEvent.EventType.ValueType # 0
SEND: HtlcEvent.EventType.ValueType # 1
RECEIVE: HtlcEvent.EventType.ValueType # 2
FORWARD: HtlcEvent.EventType.ValueType # 3
INCOMING_CHANNEL_ID_FIELD_NUMBER: builtins.int
OUTGOING_CHANNEL_ID_FIELD_NUMBER: builtins.int
INCOMING_HTLC_ID_FIELD_NUMBER: builtins.int
OUTGOING_HTLC_ID_FIELD_NUMBER: builtins.int
TIMESTAMP_NS_FIELD_NUMBER: builtins.int
EVENT_TYPE_FIELD_NUMBER: builtins.int
FORWARD_EVENT_FIELD_NUMBER: builtins.int
FORWARD_FAIL_EVENT_FIELD_NUMBER: builtins.int
SETTLE_EVENT_FIELD_NUMBER: builtins.int
LINK_FAIL_EVENT_FIELD_NUMBER: builtins.int
SUBSCRIBED_EVENT_FIELD_NUMBER: builtins.int
FINAL_HTLC_EVENT_FIELD_NUMBER: builtins.int
incoming_channel_id: builtins.int
"""
The short channel id that the incoming htlc arrived at our node on. This
value is zero for sends.
"""
outgoing_channel_id: builtins.int
"""
The short channel id that the outgoing htlc left our node on. This value
is zero for receives.
"""
incoming_htlc_id: builtins.int
"""
Incoming id is the index of the incoming htlc in the incoming channel.
This value is zero for sends.
"""
outgoing_htlc_id: builtins.int
"""
Outgoing id is the index of the outgoing htlc in the outgoing channel.
This value is zero for receives.
"""
timestamp_ns: builtins.int
"""
The time in unix nanoseconds that the event occurred.
"""
event_type: global___HtlcEvent.EventType.ValueType
"""
The event type indicates whether the htlc was part of a send, receive or
forward.
"""
@property
def forward_event(self) -> global___ForwardEvent: ...
@property
def forward_fail_event(self) -> global___ForwardFailEvent: ...
@property
def settle_event(self) -> global___SettleEvent: ...
@property
def link_fail_event(self) -> global___LinkFailEvent: ...
@property
def subscribed_event(self) -> global___SubscribedEvent: ...
@property
def final_htlc_event(self) -> global___FinalHtlcEvent: ...
def __init__(
self,
*,
incoming_channel_id: builtins.int = ...,
outgoing_channel_id: builtins.int = ...,
incoming_htlc_id: builtins.int = ...,
outgoing_htlc_id: builtins.int = ...,
timestamp_ns: builtins.int = ...,
event_type: global___HtlcEvent.EventType.ValueType = ...,
forward_event: global___ForwardEvent | None = ...,
forward_fail_event: global___ForwardFailEvent | None = ...,
settle_event: global___SettleEvent | None = ...,
link_fail_event: global___LinkFailEvent | None = ...,
subscribed_event: global___SubscribedEvent | None = ...,
final_htlc_event: global___FinalHtlcEvent | None = ...,
) -> None: ...
def HasField(self, field_name: typing.Literal["event", b"event", "final_htlc_event", b"final_htlc_event", "forward_event", b"forward_event", "forward_fail_event", b"forward_fail_event", "link_fail_event", b"link_fail_event", "settle_event", b"settle_event", "subscribed_event", b"subscribed_event"]) -> builtins.bool: ...
def ClearField(self, field_name: typing.Literal["event", b"event", "event_type", b"event_type", "final_htlc_event", b"final_htlc_event", "forward_event", b"forward_event", "forward_fail_event", b"forward_fail_event", "incoming_channel_id", b"incoming_channel_id", "incoming_htlc_id", b"incoming_htlc_id", "link_fail_event", b"link_fail_event", "outgoing_channel_id", b"outgoing_channel_id", "outgoing_htlc_id", b"outgoing_htlc_id", "settle_event", b"settle_event", "subscribed_event", b"subscribed_event", "timestamp_ns", b"timestamp_ns"]) -> None: ...
def WhichOneof(self, oneof_group: typing.Literal["event", b"event"]) -> typing.Literal["forward_event", "forward_fail_event", "settle_event", "link_fail_event", "subscribed_event", "final_htlc_event"] | None: ...
global___HtlcEvent = HtlcEvent
@typing.final
class HtlcInfo(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
INCOMING_TIMELOCK_FIELD_NUMBER: builtins.int
OUTGOING_TIMELOCK_FIELD_NUMBER: builtins.int
INCOMING_AMT_MSAT_FIELD_NUMBER: builtins.int
OUTGOING_AMT_MSAT_FIELD_NUMBER: builtins.int
incoming_timelock: builtins.int
"""The timelock on the incoming htlc."""
outgoing_timelock: builtins.int
"""The timelock on the outgoing htlc."""
incoming_amt_msat: builtins.int
"""The amount of the incoming htlc."""
outgoing_amt_msat: builtins.int
"""The amount of the outgoing htlc."""
def __init__(
self,
*,
incoming_timelock: builtins.int = ...,
outgoing_timelock: builtins.int = ...,
incoming_amt_msat: builtins.int = ...,
outgoing_amt_msat: builtins.int = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["incoming_amt_msat", b"incoming_amt_msat", "incoming_timelock", b"incoming_timelock", "outgoing_amt_msat", b"outgoing_amt_msat", "outgoing_timelock", b"outgoing_timelock"]) -> None: ...
global___HtlcInfo = HtlcInfo
@typing.final
class ForwardEvent(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
INFO_FIELD_NUMBER: builtins.int
@property
def info(self) -> global___HtlcInfo:
"""Info contains details about the htlc that was forwarded."""
def __init__(
self,
*,
info: global___HtlcInfo | None = ...,
) -> None: ...
def HasField(self, field_name: typing.Literal["info", b"info"]) -> builtins.bool: ...
def ClearField(self, field_name: typing.Literal["info", b"info"]) -> None: ...
global___ForwardEvent = ForwardEvent
@typing.final
class ForwardFailEvent(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
def __init__(
self,
) -> None: ...
global___ForwardFailEvent = ForwardFailEvent
@typing.final
class SettleEvent(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
PREIMAGE_FIELD_NUMBER: builtins.int
preimage: builtins.bytes
"""The revealed preimage."""
def __init__(
self,
*,
preimage: builtins.bytes = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["preimage", b"preimage"]) -> None: ...
global___SettleEvent = SettleEvent
@typing.final
class FinalHtlcEvent(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
SETTLED_FIELD_NUMBER: builtins.int
OFFCHAIN_FIELD_NUMBER: builtins.int
settled: builtins.bool
offchain: builtins.bool
def __init__(
self,
*,
settled: builtins.bool = ...,
offchain: builtins.bool = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["offchain", b"offchain", "settled", b"settled"]) -> None: ...
global___FinalHtlcEvent = FinalHtlcEvent
@typing.final
class SubscribedEvent(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
def __init__(
self,
) -> None: ...
global___SubscribedEvent = SubscribedEvent
@typing.final
class LinkFailEvent(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
INFO_FIELD_NUMBER: builtins.int
WIRE_FAILURE_FIELD_NUMBER: builtins.int
FAILURE_DETAIL_FIELD_NUMBER: builtins.int
FAILURE_STRING_FIELD_NUMBER: builtins.int
wire_failure: cashu.lightning.lnd_grpc.protos.lightning_pb2.Failure.FailureCode.ValueType
"""FailureCode is the BOLT error code for the failure."""
failure_detail: global___FailureDetail.ValueType
"""
FailureDetail provides additional information about the reason for the
failure. This detail enriches the information provided by the wire message
and may be 'no detail' if the wire message requires no additional metadata.
"""
failure_string: builtins.str
"""A string representation of the link failure."""
@property
def info(self) -> global___HtlcInfo:
"""Info contains details about the htlc that we failed."""
def __init__(
self,
*,
info: global___HtlcInfo | None = ...,
wire_failure: cashu.lightning.lnd_grpc.protos.lightning_pb2.Failure.FailureCode.ValueType = ...,
failure_detail: global___FailureDetail.ValueType = ...,
failure_string: builtins.str = ...,
) -> None: ...
def HasField(self, field_name: typing.Literal["info", b"info"]) -> builtins.bool: ...
def ClearField(self, field_name: typing.Literal["failure_detail", b"failure_detail", "failure_string", b"failure_string", "info", b"info", "wire_failure", b"wire_failure"]) -> None: ...
global___LinkFailEvent = LinkFailEvent
@typing.final
class PaymentStatus(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
STATE_FIELD_NUMBER: builtins.int
PREIMAGE_FIELD_NUMBER: builtins.int
HTLCS_FIELD_NUMBER: builtins.int
state: global___PaymentState.ValueType
"""Current state the payment is in."""
preimage: builtins.bytes
"""
The pre-image of the payment when state is SUCCEEDED.
"""
@property
def htlcs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[cashu.lightning.lnd_grpc.protos.lightning_pb2.HTLCAttempt]:
"""
The HTLCs made in attempt to settle the payment [EXPERIMENTAL].
"""
def __init__(
self,
*,
state: global___PaymentState.ValueType = ...,
preimage: builtins.bytes = ...,
htlcs: collections.abc.Iterable[cashu.lightning.lnd_grpc.protos.lightning_pb2.HTLCAttempt] | None = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["htlcs", b"htlcs", "preimage", b"preimage", "state", b"state"]) -> None: ...
global___PaymentStatus = PaymentStatus
@typing.final
class CircuitKey(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
CHAN_ID_FIELD_NUMBER: builtins.int
HTLC_ID_FIELD_NUMBER: builtins.int
chan_id: builtins.int
"""/ The id of the channel that the is part of this circuit."""
htlc_id: builtins.int
"""/ The index of the incoming htlc in the incoming channel."""
def __init__(
self,
*,
chan_id: builtins.int = ...,
htlc_id: builtins.int = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["chan_id", b"chan_id", "htlc_id", b"htlc_id"]) -> None: ...
global___CircuitKey = CircuitKey
@typing.final
class ForwardHtlcInterceptRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
@typing.final
class CustomRecordsEntry(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
KEY_FIELD_NUMBER: builtins.int
VALUE_FIELD_NUMBER: builtins.int
key: builtins.int
value: builtins.bytes
def __init__(
self,
*,
key: builtins.int = ...,
value: builtins.bytes = ...,
) -> None: ...
def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ...
INCOMING_CIRCUIT_KEY_FIELD_NUMBER: builtins.int
INCOMING_AMOUNT_MSAT_FIELD_NUMBER: builtins.int
INCOMING_EXPIRY_FIELD_NUMBER: builtins.int
PAYMENT_HASH_FIELD_NUMBER: builtins.int
OUTGOING_REQUESTED_CHAN_ID_FIELD_NUMBER: builtins.int
OUTGOING_AMOUNT_MSAT_FIELD_NUMBER: builtins.int
OUTGOING_EXPIRY_FIELD_NUMBER: builtins.int
CUSTOM_RECORDS_FIELD_NUMBER: builtins.int
ONION_BLOB_FIELD_NUMBER: builtins.int
AUTO_FAIL_HEIGHT_FIELD_NUMBER: builtins.int
incoming_amount_msat: builtins.int
"""The incoming htlc amount."""
incoming_expiry: builtins.int
"""The incoming htlc expiry."""
payment_hash: builtins.bytes
"""
The htlc payment hash. This value is not guaranteed to be unique per
request.
"""
outgoing_requested_chan_id: builtins.int
"""The requested outgoing channel id for this forwarded htlc. Because of
non-strict forwarding, this isn't necessarily the channel over which the
packet will be forwarded eventually. A different channel to the same peer
may be selected as well.
"""
outgoing_amount_msat: builtins.int
"""The outgoing htlc amount."""
outgoing_expiry: builtins.int
"""The outgoing htlc expiry."""
onion_blob: builtins.bytes
"""The onion blob for the next hop"""
auto_fail_height: builtins.int
"""The block height at which this htlc will be auto-failed to prevent the
channel from force-closing.
"""
@property
def incoming_circuit_key(self) -> global___CircuitKey:
"""
The key of this forwarded htlc. It defines the incoming channel id and
the index in this channel.
"""
@property
def custom_records(self) -> google.protobuf.internal.containers.ScalarMap[builtins.int, builtins.bytes]:
"""Any custom records that were present in the payload."""
def __init__(
self,
*,
incoming_circuit_key: global___CircuitKey | None = ...,
incoming_amount_msat: builtins.int = ...,
incoming_expiry: builtins.int = ...,
payment_hash: builtins.bytes = ...,
outgoing_requested_chan_id: builtins.int = ...,
outgoing_amount_msat: builtins.int = ...,
outgoing_expiry: builtins.int = ...,
custom_records: collections.abc.Mapping[builtins.int, builtins.bytes] | None = ...,
onion_blob: builtins.bytes = ...,
auto_fail_height: builtins.int = ...,
) -> None: ...
def HasField(self, field_name: typing.Literal["incoming_circuit_key", b"incoming_circuit_key"]) -> builtins.bool: ...
def ClearField(self, field_name: typing.Literal["auto_fail_height", b"auto_fail_height", "custom_records", b"custom_records", "incoming_amount_msat", b"incoming_amount_msat", "incoming_circuit_key", b"incoming_circuit_key", "incoming_expiry", b"incoming_expiry", "onion_blob", b"onion_blob", "outgoing_amount_msat", b"outgoing_amount_msat", "outgoing_expiry", b"outgoing_expiry", "outgoing_requested_chan_id", b"outgoing_requested_chan_id", "payment_hash", b"payment_hash"]) -> None: ...
global___ForwardHtlcInterceptRequest = ForwardHtlcInterceptRequest
@typing.final
class ForwardHtlcInterceptResponse(google.protobuf.message.Message):
"""*
ForwardHtlcInterceptResponse enables the caller to resolve a previously hold
forward. The caller can choose either to:
- `Resume`: Execute the default behavior (usually forward).
- `Reject`: Fail the htlc backwards.
- `Settle`: Settle this htlc with a given preimage.
"""
DESCRIPTOR: google.protobuf.descriptor.Descriptor
INCOMING_CIRCUIT_KEY_FIELD_NUMBER: builtins.int
ACTION_FIELD_NUMBER: builtins.int
PREIMAGE_FIELD_NUMBER: builtins.int
FAILURE_MESSAGE_FIELD_NUMBER: builtins.int
FAILURE_CODE_FIELD_NUMBER: builtins.int
action: global___ResolveHoldForwardAction.ValueType
"""The resolve action for this intercepted htlc."""
preimage: builtins.bytes
"""The preimage in case the resolve action is Settle."""
failure_message: builtins.bytes
"""Encrypted failure message in case the resolve action is Fail.
If failure_message is specified, the failure_code field must be set
to zero.
"""
failure_code: cashu.lightning.lnd_grpc.protos.lightning_pb2.Failure.FailureCode.ValueType
"""Return the specified failure code in case the resolve action is Fail. The
message data fields are populated automatically.
If a non-zero failure_code is specified, failure_message must not be set.
For backwards-compatibility reasons, TEMPORARY_CHANNEL_FAILURE is the
default value for this field.
"""
@property
def incoming_circuit_key(self) -> global___CircuitKey:
"""*
The key of this forwarded htlc. It defines the incoming channel id and
the index in this channel.
"""
def __init__(
self,
*,
incoming_circuit_key: global___CircuitKey | None = ...,
action: global___ResolveHoldForwardAction.ValueType = ...,
preimage: builtins.bytes = ...,
failure_message: builtins.bytes = ...,
failure_code: cashu.lightning.lnd_grpc.protos.lightning_pb2.Failure.FailureCode.ValueType = ...,
) -> None: ...
def HasField(self, field_name: typing.Literal["incoming_circuit_key", b"incoming_circuit_key"]) -> builtins.bool: ...
def ClearField(self, field_name: typing.Literal["action", b"action", "failure_code", b"failure_code", "failure_message", b"failure_message", "incoming_circuit_key", b"incoming_circuit_key", "preimage", b"preimage"]) -> None: ...
global___ForwardHtlcInterceptResponse = ForwardHtlcInterceptResponse
@typing.final
class UpdateChanStatusRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
CHAN_POINT_FIELD_NUMBER: builtins.int
ACTION_FIELD_NUMBER: builtins.int
action: global___ChanStatusAction.ValueType
@property
def chan_point(self) -> cashu.lightning.lnd_grpc.protos.lightning_pb2.ChannelPoint: ...
def __init__(
self,
*,
chan_point: cashu.lightning.lnd_grpc.protos.lightning_pb2.ChannelPoint | None = ...,
action: global___ChanStatusAction.ValueType = ...,
) -> None: ...
def HasField(self, field_name: typing.Literal["chan_point", b"chan_point"]) -> builtins.bool: ...
def ClearField(self, field_name: typing.Literal["action", b"action", "chan_point", b"chan_point"]) -> None: ...
global___UpdateChanStatusRequest = UpdateChanStatusRequest
@typing.final
class UpdateChanStatusResponse(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
def __init__(
self,
) -> None: ...
global___UpdateChanStatusResponse = UpdateChanStatusResponse