mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-03-26 01:33:02 +01:00
v0.18.0-beta.1
-----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEYKH6faW/8Ivcu+eQO71Z6ZsoAwYFAmZeF/kACgkQO71Z6Zso AwaO9A//QPFidiC9OkGM282ztYyXgXv7HkwMKkMI9xHmOu3KFVATcUmbkhWyA8xP hACuySVnTvHRm/cscu8z3LZoH8f66lCloFGl/uixO9U6sIMHcYfui4QfDcDAMS2n +xQrfRHzAzVKelLaAD0xYavGTVw7Nsvbhg3no9wvmvqXn8gOmdhsfat0e0R9Mc2V Uaua1X3vfnRN1frNqbkWjNui2kPnmNhQ1ul8qOxirziDiMPZNqNTbqva+aNAt05e ik1DAVlaLOGi2YTSVj5yVgTQXiE8V3NppsN9qT8QE5+D8sjstSXoo6v8+Jc/qrRP 8TyuTOSxVqcQR8LZyDUcr1/lWbDCPfy8icOYJJM4mgBXrMOIaa6veS97vUAQUrjk ODG6IU6VM6vfu+6POlhV0PGBzq316ygQOLdemuuS5PZMylUj7MoDkGmcQ8NC3ddw V3oMwswFi2dCk6yS9+4v23plN9QoPlzQPC6ovfm1R4E0qrQztbKTqKByVRAscxFg tdbDdKVkIeh0LyiRZ45lxOkXTUAxQgtxaUUPfNlfNYeFiHpg/AxedYXRvE0ZSfqJ oRwBMrEvv3DxDdb+rr0d8plSuk9M0X+sxTrBEbkyzm/rrrq0LRCsC8w2u0zoc0N7 bVNsrWkR5QU0LzNgzbzbPB1bkW87BLT6YZ+SZ5+fsfZ/IGvw/6w= =s6RK -----END PGP SIGNATURE----- -----BEGIN OPENTIMESTAMPS GIT TIMESTAMP----- AQHwIHnpKQLJ2wejid7OynHym3mJfnPD6x2ngoPtcqt31tFRCP/wEGYhd2J+XYzn 0EilLz1yGbwI8CAY/DIynHSPUmqlO6qMxSqWfsvLRxNnReNShTS+BbYDDgjwIJgP P9q9hYD//PPxTeeIP9XBS5NtZxbqXf7f/TMgya3jCPEEZl4X/vAIu0CtWafqxQEA g9/jDS75DI4uLWh0dHBzOi8vYWxpY2UuYnRjLmNhbGVuZGFyLm9wZW50aW1lc3Rh bXBzLm9yZ//wEHd3Q+vKQ/cRn8JvoPhmz2UI8SBtKVSPW3RHK2u3C6HV/cvwihPd Z33eNrgxYO5NXZ0l6AjxBGZeF/7wCNshzz/jyd5VAIPf4w0u+QyOKShodHRwczov L2Zpbm5leS5jYWxlbmRhci5ldGVybml0eXdhbGwuY29t//AQwA/Rlc87hPsa0gcO cAwUDgjxBGZeF/3wCPO6kLgOowodAIPf4w0u+QyOIyJodHRwczovL2J0Yy5jYWxl bmRhci5jYXRhbGxheHkuY29t8BDmmTRycV+Etw5lYf2ljYcuCPEEZl4X/vAI75Fv Mxq3Qb0Ag9/jDS75DI4sK2h0dHBzOi8vYm9iLmJ0Yy5jYWxlbmRhci5vcGVudGlt ZXN0YW1wcy5vcmc= -----END OPENTIMESTAMPS GIT TIMESTAMP----- gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE9Pxw8HMQAoQk78IKjkJWWT8XdyAFAmZ8ctMACgkQjkJWWT8X dyD8PhAAzp53ZCfKRQoN3yBlFpfoqIiD3zQlrSE8gpNGjdP7nptxw+4w48283Hdn ZS17qHcFTdUgNYH+WMnX912IC+gG4BovGmjIW/jPt/phNLXGe7Hm+Zy6orRCkY6C OzZFwmKZNZ/KQ6W0JGdCWD+KMQarXRmHIsQLB06RAZn3885bfRomcZVLOoMpe73h va4XTHY6W0JRqAVmuyVGUU/w6gQ3PQTynJ45AxpD0FMrJyQnoJQAzzC8+5L+riwr L/t38/vRez0SuCkgiKak6h11X96SnV+7u0Mzh4iIBtyokq/XzEDtAn5pZRcNOCa/ LvMPHg8saOifIVjopu4fesUvT00QmSpzQ0gS5bHke1YHcjMLpKsVl04GXINE+uWn FJ6DVOkz2ARvZhHakqeEhLNyTlagNhU64XNwGizhpKOS/Y63EOUMHgrb5hRzZdMr +8HO+e3x5VHmCjojKpkDzZCeBH4D8pMuUDSI51Jc4fMPF/i7cfESQfWNv3fGw04G xWwYxzBSTfjXXIfjDSfYuKaHdAu+cImNTD6fu7jHcFtt9vT0u7GU9Fz0BTiqQnwY uLJY7wUMH82H2o61ebqO+poRq+UsklmEebJrlOkj8YJW/GukrOm2rlZvSf9fOwWK nBVMw7HKRW3O8lwvTvTMREnT/ezKQx5Cp5ohvUSc7/Rzgp7Pz2s= =5oZg -----END PGP SIGNATURE----- Merge tag 'v0.18.0-beta.1' into 0-19-staging v0.18.0-beta.1
This commit is contained in:
commit
e8fddd3935
@ -47,7 +47,7 @@ const (
|
||||
|
||||
// AppPreRelease MUST only contain characters from semanticAlphabet per
|
||||
// the semantic versioning spec.
|
||||
AppPreRelease = "beta.rc3"
|
||||
AppPreRelease = "beta"
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
142
fn/result.go
Normal file
142
fn/result.go
Normal file
@ -0,0 +1,142 @@
|
||||
package fn
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// Result represents a value that can either be a success (T) or an error.
|
||||
type Result[T any] struct {
|
||||
Either[T, error]
|
||||
}
|
||||
|
||||
// Ok creates a new Result with a success value.
|
||||
func Ok[T any](val T) Result[T] {
|
||||
return Result[T]{Either: NewLeft[T, error](val)}
|
||||
}
|
||||
|
||||
// Err creates a new Result with an error.
|
||||
func Err[T any](err error) Result[T] {
|
||||
return Result[T]{Either: NewRight[T, error](err)}
|
||||
}
|
||||
|
||||
// Errf creates a new Result with a new formatted error string.
|
||||
func Errf[T any](errString string, args ...any) Result[T] {
|
||||
return Result[T]{
|
||||
Either: NewRight[T, error](fmt.Errorf(errString, args...)),
|
||||
}
|
||||
}
|
||||
|
||||
// Unpack extracts the value or error from the Result.
|
||||
func (r Result[T]) Unpack() (T, error) {
|
||||
var zero T
|
||||
return r.left.UnwrapOr(zero), r.right.UnwrapOr(nil)
|
||||
}
|
||||
|
||||
// IsOk returns true if the Result is a success value.
|
||||
func (r Result[T]) IsOk() bool {
|
||||
return r.IsLeft()
|
||||
}
|
||||
|
||||
// IsErr returns true if the Result is an error.
|
||||
func (r Result[T]) IsErr() bool {
|
||||
return r.IsRight()
|
||||
}
|
||||
|
||||
// Map applies a function to the success value if it exists.
|
||||
func (r Result[T]) Map(f func(T) T) Result[T] {
|
||||
if r.IsOk() {
|
||||
return Ok(f(r.left.some))
|
||||
}
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
// MapErr applies a function to the error value if it exists.
|
||||
func (r Result[T]) MapErr(f func(error) error) Result[T] {
|
||||
if r.IsErr() {
|
||||
return Err[T](f(r.right.some))
|
||||
}
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
// Option returns the success value as an Option.
|
||||
func (r Result[T]) Option() Option[T] {
|
||||
return r.left
|
||||
}
|
||||
|
||||
// WhenResult executes the given function if the Result is a success.
|
||||
func (r Result[T]) WhenResult(f func(T)) {
|
||||
r.left.WhenSome(func(t T) {
|
||||
f(t)
|
||||
})
|
||||
}
|
||||
|
||||
// WhenErr executes the given function if the Result is an error.
|
||||
func (r Result[T]) WhenErr(f func(error)) {
|
||||
r.right.WhenSome(func(e error) {
|
||||
f(e)
|
||||
})
|
||||
}
|
||||
|
||||
// UnwrapOr returns the success value or a default value if it's an error.
|
||||
func (r Result[T]) UnwrapOr(defaultValue T) T {
|
||||
return r.left.UnwrapOr(defaultValue)
|
||||
}
|
||||
|
||||
// UnwrapOrElse returns the success value or computes a value from a function
|
||||
// if it's an error.
|
||||
func (r Result[T]) UnwrapOrElse(f func() T) T {
|
||||
return r.left.UnwrapOrFunc(f)
|
||||
}
|
||||
|
||||
// UnwrapOrFail returns the success value or fails the test if it's an error.
|
||||
func (r Result[T]) UnwrapOrFail(t *testing.T) T {
|
||||
t.Helper()
|
||||
|
||||
return r.left.UnwrapOrFail(t)
|
||||
}
|
||||
|
||||
// FlatMap applies a function that returns a Result to the success value if it
|
||||
// exists.
|
||||
func (r Result[T]) FlatMap(f func(T) Result[T]) Result[T] {
|
||||
if r.IsOk() {
|
||||
return f(r.left.some)
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
// AndThen is an alias for FlatMap. This along with OrElse can be used to
|
||||
// Railway Oriented Programming (ROP) by chaining successive computational
|
||||
// operations from a single result type.
|
||||
func (r Result[T]) AndThen(f func(T) Result[T]) Result[T] {
|
||||
return r.FlatMap(f)
|
||||
}
|
||||
|
||||
// OrElse returns the original Result if it is a success, otherwise it returns
|
||||
// the provided alternative Result. This along with AndThen can be used to
|
||||
// Railway Oriented Programming (ROP).
|
||||
func (r Result[T]) OrElse(f func() Result[T]) Result[T] {
|
||||
if r.IsOk() {
|
||||
return r
|
||||
}
|
||||
|
||||
return f()
|
||||
}
|
||||
|
||||
// FlatMap applies a function that returns a Result[B] to the success value if
|
||||
// it exists.
|
||||
func FlatMap[A, B any](r Result[A], f func(A) Result[B]) Result[B] {
|
||||
if r.IsOk() {
|
||||
return f(r.left.some)
|
||||
}
|
||||
|
||||
return Err[B](r.right.some)
|
||||
}
|
||||
|
||||
// AndThen is an alias for FlatMap. This along with OrElse can be used to
|
||||
// Railway Oriented Programming (ROP).
|
||||
func AndThen[A, B any](r Result[A], f func(A) Result[B]) Result[B] {
|
||||
return FlatMap(r, f)
|
||||
}
|
14
scripts/keys/proofofkeags.asc
Normal file
14
scripts/keys/proofofkeags.asc
Normal file
@ -0,0 +1,14 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mDMEZlZ1MRYJKwYBBAHaRw8BAQdAZsa54hBDrjAnuj56IGJYcIszHvasEPFVvcO9
|
||||
3WBUS3q0L0tlYWdhbiBNY0NsZWxsYW5kIDxrZWFnYW4ubWNjbGVsbGFuZEBnbWFp
|
||||
bC5jb20+iJkEExYKAEEWIQRSlaR3/8gGTXBXsZH6fmXJUfEkOQUCZlZ1MQIbAwUJ
|
||||
BaOagAULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRD6fmXJUfEkOU1fAQDW
|
||||
wdx8AF8QdITRvY299R6Y9348N4EIa9mq6bYeh+d0HwD7BPEkKquPNncuUmqJ8EAe
|
||||
uGOQX0xs+0YyynMIHulnnQi4OARmVnUxEgorBgEEAZdVAQUBAQdAOvF6kho3KmjN
|
||||
OQQX/bxng+Tgy4hz34BJojWJdSpn/gYDAQgHiH4EGBYKACYWIQRSlaR3/8gGTXBX
|
||||
sZH6fmXJUfEkOQUCZlZ1MQIbDAUJBaOagAAKCRD6fmXJUfEkOaVeAP4rJD+kvC0D
|
||||
jffwmx9w0L6Grb4KPX1FTm7UBq7JSZExHgEAn27BOcf4lDoRZRa27K6jjTNd96Nk
|
||||
2MU5hr1pnbZNfQQ=
|
||||
=3tMW
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
@ -33,6 +33,7 @@ KEYS+=("4DC235556B18694E08518DBB671103D881A5F0E4 sputn1ck")
|
||||
KEYS+=("187F6ADD93AE3B0CF335AA6AB984570980684DCC ViktorTigerstrom")
|
||||
KEYS+=("E85497D2DBA0EB9ADB0024279BCD95C4FF296868 yyforyongyu")
|
||||
KEYS+=("32F7EA1E7A0339F7D37164B9F82D456EA023C9BF hieblmi")
|
||||
KEYS+=("5295A477FFC8064D7057B191FA7E65C951F12439 proofofkeags")
|
||||
|
||||
TEMP_DIR=$(mktemp -d /tmp/lnd-sig-verification-XXXXXX)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user