multi: rename FailUnknownPaymentHash to FailIncorrectDetails
Align naming better with the lightning spec. Not the full name of the failure (FailIncorrectOrUnknownPaymentDetails) is used, because this would cause too many long lines in the code.
This commit is contained in:
parent
8681729561
commit
aabd68ebcd
@ -1216,7 +1216,7 @@ func (l *channelLink) processHodlEvent(hodlEvent invoices.HodlEvent,
|
|||||||
case invoices.CancelInvoiceUnknown:
|
case invoices.CancelInvoiceUnknown:
|
||||||
fallthrough
|
fallthrough
|
||||||
case invoices.CancelInvoiceCanceled:
|
case invoices.CancelInvoiceCanceled:
|
||||||
failure = lnwire.NewFailUnknownPaymentHash(
|
failure = lnwire.NewFailIncorrectDetails(
|
||||||
htlc.pd.Amount,
|
htlc.pd.Amount,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -2843,7 +2843,7 @@ func (l *channelLink) processExitHop(pd *lnwallet.PaymentDescriptor,
|
|||||||
"value: expected %v, got %v", pd.RHash,
|
"value: expected %v, got %v", pd.RHash,
|
||||||
pd.Amount, fwdInfo.AmountToForward)
|
pd.Amount, fwdInfo.AmountToForward)
|
||||||
|
|
||||||
failure := lnwire.NewFailUnknownPaymentHash(pd.Amount)
|
failure := lnwire.NewFailIncorrectDetails(pd.Amount)
|
||||||
l.sendHTLCError(pd.HtlcIndex, failure, obfuscator, pd.SourceRef)
|
l.sendHTLCError(pd.HtlcIndex, failure, obfuscator, pd.SourceRef)
|
||||||
|
|
||||||
return true, nil
|
return true, nil
|
||||||
@ -2878,7 +2878,7 @@ func (l *channelLink) processExitHop(pd *lnwallet.PaymentDescriptor,
|
|||||||
|
|
||||||
// Cancel htlc if we don't have an invoice for it.
|
// Cancel htlc if we don't have an invoice for it.
|
||||||
case channeldb.ErrInvoiceNotFound:
|
case channeldb.ErrInvoiceNotFound:
|
||||||
failure := lnwire.NewFailUnknownPaymentHash(pd.Amount)
|
failure := lnwire.NewFailIncorrectDetails(pd.Amount)
|
||||||
l.sendHTLCError(pd.HtlcIndex, failure, obfuscator, pd.SourceRef)
|
l.sendHTLCError(pd.HtlcIndex, failure, obfuscator, pd.SourceRef)
|
||||||
|
|
||||||
return true, nil
|
return true, nil
|
||||||
|
@ -623,7 +623,7 @@ func TestExitNodeAmountPayloadMismatch(t *testing.T) {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatalf("payment should have failed but didn't")
|
t.Fatalf("payment should have failed but didn't")
|
||||||
}
|
}
|
||||||
assertFailureCode(t, err, lnwire.CodeUnknownPaymentHash)
|
assertFailureCode(t, err, lnwire.CodeIncorrectOrUnknownPaymentDetails)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestLinkForwardTimelockPolicyMismatch tests that if a node is an
|
// TestLinkForwardTimelockPolicyMismatch tests that if a node is an
|
||||||
@ -1130,7 +1130,9 @@ func TestChannelLinkMultiHopUnknownPaymentHash(t *testing.T) {
|
|||||||
t.Fatalf("no result arrive")
|
t.Fatalf("no result arrive")
|
||||||
}
|
}
|
||||||
|
|
||||||
assertFailureCode(t, result.Error, lnwire.CodeUnknownPaymentHash)
|
assertFailureCode(
|
||||||
|
t, result.Error, lnwire.CodeIncorrectOrUnknownPaymentDetails,
|
||||||
|
)
|
||||||
|
|
||||||
// Wait for Alice to receive the revocation.
|
// Wait for Alice to receive the revocation.
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
@ -5668,7 +5670,7 @@ func TestChannelLinkCanceledInvoice(t *testing.T) {
|
|||||||
if !ok {
|
if !ok {
|
||||||
t.Fatalf("expected ForwardingError, but got %v", err)
|
t.Fatalf("expected ForwardingError, but got %v", err)
|
||||||
}
|
}
|
||||||
_, ok = fErr.FailureMessage.(*lnwire.FailUnknownPaymentHash)
|
_, ok = fErr.FailureMessage.(*lnwire.FailIncorrectDetails)
|
||||||
if !ok {
|
if !ok {
|
||||||
t.Fatalf("expected unknown payment hash, but got %v", err)
|
t.Fatalf("expected unknown payment hash, but got %v", err)
|
||||||
}
|
}
|
||||||
@ -5837,7 +5839,7 @@ func TestChannelLinkHoldInvoiceCancel(t *testing.T) {
|
|||||||
|
|
||||||
// Wait for payment to succeed.
|
// Wait for payment to succeed.
|
||||||
err = <-ctx.errChan
|
err = <-ctx.errChan
|
||||||
assertFailureCode(t, err, lnwire.CodeUnknownPaymentHash)
|
assertFailureCode(t, err, lnwire.CodeIncorrectOrUnknownPaymentDetails)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestChannelLinkHoldInvoiceRestart asserts hodl htlcs are held after blocks
|
// TestChannelLinkHoldInvoiceRestart asserts hodl htlcs are held after blocks
|
||||||
|
@ -1803,7 +1803,7 @@ func TestSwitchSendPayment(t *testing.T) {
|
|||||||
// the add htlc request with error and sent the htlc fail request
|
// the add htlc request with error and sent the htlc fail request
|
||||||
// back. This request should be forwarded back to alice channel link.
|
// back. This request should be forwarded back to alice channel link.
|
||||||
obfuscator := NewMockObfuscator()
|
obfuscator := NewMockObfuscator()
|
||||||
failure := lnwire.NewFailUnknownPaymentHash(update.Amount)
|
failure := lnwire.NewFailIncorrectDetails(update.Amount)
|
||||||
reason, err := obfuscator.EncryptFirstHop(failure)
|
reason, err := obfuscator.EncryptFirstHop(failure)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable obfuscate failure: %v", err)
|
t.Fatalf("unable obfuscate failure: %v", err)
|
||||||
@ -1824,8 +1824,9 @@ func TestSwitchSendPayment(t *testing.T) {
|
|||||||
|
|
||||||
select {
|
select {
|
||||||
case err := <-errChan:
|
case err := <-errChan:
|
||||||
assertFailureCode(t, err, lnwire.CodeUnknownPaymentHash)
|
assertFailureCode(
|
||||||
|
t, err, lnwire.CodeIncorrectOrUnknownPaymentDetails,
|
||||||
|
)
|
||||||
case <-time.After(time.Second):
|
case <-time.After(time.Second):
|
||||||
t.Fatal("err wasn't received")
|
t.Fatal("err wasn't received")
|
||||||
}
|
}
|
||||||
|
@ -81,28 +81,28 @@ const (
|
|||||||
//The numbers assigned in this enumeration match the failure codes as
|
//The numbers assigned in this enumeration match the failure codes as
|
||||||
//defined in BOLT #4. Because protobuf 3 requires enums to start with 0,
|
//defined in BOLT #4. Because protobuf 3 requires enums to start with 0,
|
||||||
//a RESERVED value is added.
|
//a RESERVED value is added.
|
||||||
Failure_RESERVED Failure_FailureCode = 0
|
Failure_RESERVED Failure_FailureCode = 0
|
||||||
Failure_UNKNOWN_PAYMENT_HASH Failure_FailureCode = 1
|
Failure_INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS Failure_FailureCode = 1
|
||||||
Failure_INCORRECT_PAYMENT_AMOUNT Failure_FailureCode = 2
|
Failure_INCORRECT_PAYMENT_AMOUNT Failure_FailureCode = 2
|
||||||
Failure_FINAL_INCORRECT_CLTV_EXPIRY Failure_FailureCode = 3
|
Failure_FINAL_INCORRECT_CLTV_EXPIRY Failure_FailureCode = 3
|
||||||
Failure_FINAL_INCORRECT_HTLC_AMOUNT Failure_FailureCode = 4
|
Failure_FINAL_INCORRECT_HTLC_AMOUNT Failure_FailureCode = 4
|
||||||
Failure_FINAL_EXPIRY_TOO_SOON Failure_FailureCode = 5
|
Failure_FINAL_EXPIRY_TOO_SOON Failure_FailureCode = 5
|
||||||
Failure_INVALID_REALM Failure_FailureCode = 6
|
Failure_INVALID_REALM Failure_FailureCode = 6
|
||||||
Failure_EXPIRY_TOO_SOON Failure_FailureCode = 7
|
Failure_EXPIRY_TOO_SOON Failure_FailureCode = 7
|
||||||
Failure_INVALID_ONION_VERSION Failure_FailureCode = 8
|
Failure_INVALID_ONION_VERSION Failure_FailureCode = 8
|
||||||
Failure_INVALID_ONION_HMAC Failure_FailureCode = 9
|
Failure_INVALID_ONION_HMAC Failure_FailureCode = 9
|
||||||
Failure_INVALID_ONION_KEY Failure_FailureCode = 10
|
Failure_INVALID_ONION_KEY Failure_FailureCode = 10
|
||||||
Failure_AMOUNT_BELOW_MINIMUM Failure_FailureCode = 11
|
Failure_AMOUNT_BELOW_MINIMUM Failure_FailureCode = 11
|
||||||
Failure_FEE_INSUFFICIENT Failure_FailureCode = 12
|
Failure_FEE_INSUFFICIENT Failure_FailureCode = 12
|
||||||
Failure_INCORRECT_CLTV_EXPIRY Failure_FailureCode = 13
|
Failure_INCORRECT_CLTV_EXPIRY Failure_FailureCode = 13
|
||||||
Failure_CHANNEL_DISABLED Failure_FailureCode = 14
|
Failure_CHANNEL_DISABLED Failure_FailureCode = 14
|
||||||
Failure_TEMPORARY_CHANNEL_FAILURE Failure_FailureCode = 15
|
Failure_TEMPORARY_CHANNEL_FAILURE Failure_FailureCode = 15
|
||||||
Failure_REQUIRED_NODE_FEATURE_MISSING Failure_FailureCode = 16
|
Failure_REQUIRED_NODE_FEATURE_MISSING Failure_FailureCode = 16
|
||||||
Failure_REQUIRED_CHANNEL_FEATURE_MISSING Failure_FailureCode = 17
|
Failure_REQUIRED_CHANNEL_FEATURE_MISSING Failure_FailureCode = 17
|
||||||
Failure_UNKNOWN_NEXT_PEER Failure_FailureCode = 18
|
Failure_UNKNOWN_NEXT_PEER Failure_FailureCode = 18
|
||||||
Failure_TEMPORARY_NODE_FAILURE Failure_FailureCode = 19
|
Failure_TEMPORARY_NODE_FAILURE Failure_FailureCode = 19
|
||||||
Failure_PERMANENT_NODE_FAILURE Failure_FailureCode = 20
|
Failure_PERMANENT_NODE_FAILURE Failure_FailureCode = 20
|
||||||
Failure_PERMANENT_CHANNEL_FAILURE Failure_FailureCode = 21
|
Failure_PERMANENT_CHANNEL_FAILURE Failure_FailureCode = 21
|
||||||
//*
|
//*
|
||||||
//The error source is known, but the failure itself couldn't be decoded.
|
//The error source is known, but the failure itself couldn't be decoded.
|
||||||
Failure_UNKNOWN_FAILURE Failure_FailureCode = 998
|
Failure_UNKNOWN_FAILURE Failure_FailureCode = 998
|
||||||
@ -114,7 +114,7 @@ const (
|
|||||||
|
|
||||||
var Failure_FailureCode_name = map[int32]string{
|
var Failure_FailureCode_name = map[int32]string{
|
||||||
0: "RESERVED",
|
0: "RESERVED",
|
||||||
1: "UNKNOWN_PAYMENT_HASH",
|
1: "INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS",
|
||||||
2: "INCORRECT_PAYMENT_AMOUNT",
|
2: "INCORRECT_PAYMENT_AMOUNT",
|
||||||
3: "FINAL_INCORRECT_CLTV_EXPIRY",
|
3: "FINAL_INCORRECT_CLTV_EXPIRY",
|
||||||
4: "FINAL_INCORRECT_HTLC_AMOUNT",
|
4: "FINAL_INCORRECT_HTLC_AMOUNT",
|
||||||
@ -140,30 +140,30 @@ var Failure_FailureCode_name = map[int32]string{
|
|||||||
}
|
}
|
||||||
|
|
||||||
var Failure_FailureCode_value = map[string]int32{
|
var Failure_FailureCode_value = map[string]int32{
|
||||||
"RESERVED": 0,
|
"RESERVED": 0,
|
||||||
"UNKNOWN_PAYMENT_HASH": 1,
|
"INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS": 1,
|
||||||
"INCORRECT_PAYMENT_AMOUNT": 2,
|
"INCORRECT_PAYMENT_AMOUNT": 2,
|
||||||
"FINAL_INCORRECT_CLTV_EXPIRY": 3,
|
"FINAL_INCORRECT_CLTV_EXPIRY": 3,
|
||||||
"FINAL_INCORRECT_HTLC_AMOUNT": 4,
|
"FINAL_INCORRECT_HTLC_AMOUNT": 4,
|
||||||
"FINAL_EXPIRY_TOO_SOON": 5,
|
"FINAL_EXPIRY_TOO_SOON": 5,
|
||||||
"INVALID_REALM": 6,
|
"INVALID_REALM": 6,
|
||||||
"EXPIRY_TOO_SOON": 7,
|
"EXPIRY_TOO_SOON": 7,
|
||||||
"INVALID_ONION_VERSION": 8,
|
"INVALID_ONION_VERSION": 8,
|
||||||
"INVALID_ONION_HMAC": 9,
|
"INVALID_ONION_HMAC": 9,
|
||||||
"INVALID_ONION_KEY": 10,
|
"INVALID_ONION_KEY": 10,
|
||||||
"AMOUNT_BELOW_MINIMUM": 11,
|
"AMOUNT_BELOW_MINIMUM": 11,
|
||||||
"FEE_INSUFFICIENT": 12,
|
"FEE_INSUFFICIENT": 12,
|
||||||
"INCORRECT_CLTV_EXPIRY": 13,
|
"INCORRECT_CLTV_EXPIRY": 13,
|
||||||
"CHANNEL_DISABLED": 14,
|
"CHANNEL_DISABLED": 14,
|
||||||
"TEMPORARY_CHANNEL_FAILURE": 15,
|
"TEMPORARY_CHANNEL_FAILURE": 15,
|
||||||
"REQUIRED_NODE_FEATURE_MISSING": 16,
|
"REQUIRED_NODE_FEATURE_MISSING": 16,
|
||||||
"REQUIRED_CHANNEL_FEATURE_MISSING": 17,
|
"REQUIRED_CHANNEL_FEATURE_MISSING": 17,
|
||||||
"UNKNOWN_NEXT_PEER": 18,
|
"UNKNOWN_NEXT_PEER": 18,
|
||||||
"TEMPORARY_NODE_FAILURE": 19,
|
"TEMPORARY_NODE_FAILURE": 19,
|
||||||
"PERMANENT_NODE_FAILURE": 20,
|
"PERMANENT_NODE_FAILURE": 20,
|
||||||
"PERMANENT_CHANNEL_FAILURE": 21,
|
"PERMANENT_CHANNEL_FAILURE": 21,
|
||||||
"UNKNOWN_FAILURE": 998,
|
"UNKNOWN_FAILURE": 998,
|
||||||
"UNREADABLE_FAILURE": 999,
|
"UNREADABLE_FAILURE": 999,
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x Failure_FailureCode) String() string {
|
func (x Failure_FailureCode) String() string {
|
||||||
@ -1178,111 +1178,111 @@ func init() {
|
|||||||
func init() { proto.RegisterFile("routerrpc/router.proto", fileDescriptor_7a0613f69d37b0a5) }
|
func init() { proto.RegisterFile("routerrpc/router.proto", fileDescriptor_7a0613f69d37b0a5) }
|
||||||
|
|
||||||
var fileDescriptor_7a0613f69d37b0a5 = []byte{
|
var fileDescriptor_7a0613f69d37b0a5 = []byte{
|
||||||
// 1659 bytes of a gzipped FileDescriptorProto
|
// 1663 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x57, 0x4f, 0x73, 0x22, 0xc7,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x57, 0x4f, 0x77, 0x22, 0xc7,
|
||||||
0x15, 0x37, 0x02, 0x84, 0x78, 0xfc, 0xd1, 0xa8, 0xa5, 0x95, 0x58, 0xb4, 0x5a, 0xcb, 0xe3, 0x64,
|
0x11, 0x37, 0x02, 0x84, 0x28, 0xfe, 0x8d, 0x5a, 0x5a, 0x89, 0x45, 0xab, 0xb5, 0x8c, 0x9d, 0xb5,
|
||||||
0xad, 0xda, 0x72, 0x24, 0x87, 0xd4, 0xba, 0x7c, 0x4a, 0x8a, 0x85, 0xc6, 0x8c, 0x17, 0x66, 0xe4,
|
0xde, 0x3e, 0x47, 0x72, 0xc8, 0x5b, 0x3f, 0x9f, 0x92, 0xc7, 0x42, 0x63, 0x8d, 0x17, 0x66, 0xe4,
|
||||||
0x06, 0xd6, 0xde, 0xe4, 0xd0, 0xd5, 0x62, 0x5a, 0x30, 0x25, 0x98, 0xc1, 0x33, 0x8d, 0xb3, 0xca,
|
0x06, 0xd6, 0xde, 0xe4, 0xd0, 0xaf, 0xc5, 0xb4, 0x60, 0x9e, 0x60, 0x06, 0xcf, 0x34, 0xce, 0x2a,
|
||||||
0x21, 0xb7, 0x54, 0xe5, 0x92, 0xcf, 0x92, 0x5c, 0x73, 0xc9, 0xc7, 0x49, 0xbe, 0x43, 0x4e, 0xa9,
|
0x87, 0xdc, 0x72, 0xcc, 0x3d, 0xdf, 0x22, 0xf9, 0x04, 0xb9, 0xe7, 0x8b, 0x24, 0xdf, 0x21, 0xa7,
|
||||||
0xee, 0x1e, 0x60, 0x40, 0x68, 0xb3, 0x27, 0x31, 0xbf, 0xdf, 0xaf, 0xdf, 0xeb, 0x7e, 0xaf, 0xdf,
|
0xbc, 0xee, 0x9e, 0x81, 0x01, 0xa1, 0xb5, 0x4f, 0x62, 0x7e, 0xbf, 0x5f, 0x57, 0x75, 0x57, 0x75,
|
||||||
0xeb, 0x27, 0x38, 0x0e, 0x83, 0xb9, 0xe0, 0x61, 0x38, 0x1b, 0x5e, 0xe9, 0x5f, 0x97, 0xb3, 0x30,
|
0x55, 0x97, 0xe0, 0x28, 0xf0, 0x17, 0x82, 0x07, 0xc1, 0x7c, 0x74, 0xa9, 0x7f, 0x5d, 0xcc, 0x03,
|
||||||
0x10, 0x01, 0xca, 0x2f, 0xf1, 0x6a, 0x3e, 0x9c, 0x0d, 0x35, 0x6a, 0xfe, 0x77, 0x07, 0x50, 0x8f,
|
0x5f, 0xf8, 0x28, 0xbf, 0xc4, 0x6b, 0xf9, 0x60, 0x3e, 0xd2, 0x68, 0xfd, 0x7f, 0x3b, 0x80, 0xfa,
|
||||||
0xfb, 0xee, 0x35, 0xbb, 0x9f, 0x72, 0x5f, 0x10, 0xfe, 0xd3, 0x9c, 0x47, 0x02, 0x21, 0xc8, 0xb8,
|
0xdc, 0x73, 0xae, 0xd9, 0xfd, 0x8c, 0x7b, 0x82, 0xf0, 0x1f, 0x17, 0x3c, 0x14, 0x08, 0x41, 0xc6,
|
||||||
0x3c, 0x12, 0x95, 0xd4, 0x79, 0xea, 0xa2, 0x48, 0xd4, 0x6f, 0x64, 0x40, 0x9a, 0x4d, 0x45, 0x65,
|
0xe1, 0xa1, 0xa8, 0xa6, 0xce, 0x52, 0xe7, 0x45, 0xa2, 0x7e, 0x23, 0x03, 0xd2, 0x6c, 0x26, 0xaa,
|
||||||
0xe7, 0x3c, 0x75, 0x91, 0x26, 0xf2, 0x27, 0xfa, 0x0c, 0x8a, 0x33, 0xbd, 0x8e, 0x8e, 0x59, 0x34,
|
0x3b, 0x67, 0xa9, 0xf3, 0x34, 0x91, 0x3f, 0xd1, 0x27, 0x50, 0x9c, 0xeb, 0x75, 0x74, 0xc2, 0xc2,
|
||||||
0xae, 0xa4, 0x95, 0xba, 0x10, 0x63, 0x6d, 0x16, 0x8d, 0xd1, 0x05, 0x18, 0xb7, 0x9e, 0xcf, 0x26,
|
0x49, 0x35, 0xad, 0xd4, 0x85, 0x08, 0xbb, 0x62, 0xe1, 0x04, 0x9d, 0x83, 0x71, 0xeb, 0x7a, 0x6c,
|
||||||
0x74, 0x38, 0x11, 0x3f, 0x53, 0x97, 0x4f, 0x04, 0xab, 0x64, 0xce, 0x53, 0x17, 0x59, 0x52, 0x56,
|
0x4a, 0x47, 0x53, 0xf1, 0x13, 0x75, 0xf8, 0x54, 0xb0, 0x6a, 0xe6, 0x2c, 0x75, 0x9e, 0x25, 0x65,
|
||||||
0x78, 0x63, 0x22, 0x7e, 0x6e, 0x4a, 0x14, 0x7d, 0x01, 0xfb, 0x0b, 0x63, 0xa1, 0xde, 0x45, 0x25,
|
0x85, 0xb7, 0xa6, 0xe2, 0xa7, 0xb6, 0x44, 0xd1, 0xe7, 0x50, 0x89, 0x8d, 0x05, 0x7a, 0x17, 0xd5,
|
||||||
0x7b, 0x9e, 0xba, 0xc8, 0x93, 0xf2, 0x6c, 0x7d, 0x6f, 0x5f, 0xc0, 0xbe, 0xf0, 0xa6, 0x3c, 0x98,
|
0xec, 0x59, 0xea, 0x3c, 0x4f, 0xca, 0xf3, 0xf5, 0xbd, 0x7d, 0x0e, 0x15, 0xe1, 0xce, 0xb8, 0xbf,
|
||||||
0x0b, 0x1a, 0xf1, 0x61, 0xe0, 0xbb, 0x51, 0x65, 0x57, 0x5b, 0x8c, 0xe1, 0x9e, 0x46, 0x91, 0x09,
|
0x10, 0x34, 0xe4, 0x23, 0xdf, 0x73, 0xc2, 0xea, 0xae, 0xb6, 0x18, 0xc1, 0x7d, 0x8d, 0xa2, 0x3a,
|
||||||
0xa5, 0x5b, 0xce, 0xe9, 0xc4, 0x9b, 0x7a, 0x82, 0x46, 0x4c, 0x54, 0x72, 0x6a, 0xeb, 0x85, 0x5b,
|
0x94, 0x6e, 0x39, 0xa7, 0x53, 0x77, 0xe6, 0x0a, 0x1a, 0x32, 0x51, 0xcd, 0xa9, 0xad, 0x17, 0x6e,
|
||||||
0xce, 0x3b, 0x12, 0xeb, 0x31, 0x21, 0xf7, 0x17, 0xcc, 0xc5, 0x28, 0xf0, 0xfc, 0x11, 0x1d, 0x8e,
|
0x39, 0xef, 0x4a, 0xac, 0xcf, 0x84, 0xdc, 0x9f, 0xbf, 0x10, 0x63, 0xdf, 0xf5, 0xc6, 0x74, 0x34,
|
||||||
0x99, 0x4f, 0x3d, 0xb7, 0xb2, 0x77, 0x9e, 0xba, 0xc8, 0x90, 0xf2, 0x02, 0x6f, 0x8c, 0x99, 0x6f,
|
0x61, 0x1e, 0x75, 0x9d, 0xea, 0xde, 0x59, 0xea, 0x3c, 0x43, 0xca, 0x31, 0xde, 0x9a, 0x30, 0xcf,
|
||||||
0xb9, 0xe8, 0x0c, 0x40, 0x9d, 0x41, 0x99, 0xab, 0xe4, 0x95, 0xc7, 0xbc, 0x44, 0x94, 0x2d, 0x54,
|
0x74, 0xd0, 0x29, 0x80, 0x3a, 0x83, 0x32, 0x57, 0xcd, 0x2b, 0x8f, 0x79, 0x89, 0x28, 0x5b, 0xa8,
|
||||||
0x83, 0x82, 0x0a, 0x30, 0x1d, 0x7b, 0xbe, 0x88, 0x2a, 0x70, 0x9e, 0xbe, 0x28, 0xd4, 0x8c, 0xcb,
|
0x01, 0x05, 0x15, 0x60, 0x3a, 0x71, 0x3d, 0x11, 0x56, 0xe1, 0x2c, 0x7d, 0x5e, 0x68, 0x18, 0x17,
|
||||||
0x89, 0x2f, 0x63, 0x4d, 0x24, 0xd3, 0xf6, 0x7c, 0x41, 0x92, 0x22, 0xf3, 0x1b, 0x38, 0xec, 0x87,
|
0x53, 0x4f, 0xc6, 0x9a, 0x48, 0xe6, 0xca, 0xf5, 0x04, 0x49, 0x8a, 0xea, 0x5f, 0xc3, 0xc1, 0x20,
|
||||||
0x6c, 0x78, 0xb7, 0x11, 0xfc, 0xcd, 0xb0, 0xa6, 0x1e, 0x84, 0xd5, 0xfc, 0x33, 0x94, 0xe2, 0x45,
|
0x60, 0xa3, 0xbb, 0x8d, 0xe0, 0x6f, 0x86, 0x35, 0xf5, 0x20, 0xac, 0xf5, 0xbf, 0x40, 0x29, 0x5a,
|
||||||
0x3d, 0xc1, 0xc4, 0x3c, 0x42, 0xbf, 0x82, 0x6c, 0x24, 0x98, 0xe0, 0x4a, 0x5c, 0xae, 0x9d, 0x5c,
|
0xd4, 0x17, 0x4c, 0x2c, 0x42, 0xf4, 0x6b, 0xc8, 0x86, 0x82, 0x09, 0xae, 0xc4, 0xe5, 0xc6, 0xf1,
|
||||||
0x2e, 0xb3, 0x7d, 0x99, 0x10, 0x72, 0xa2, 0x55, 0xa8, 0x0a, 0x7b, 0xb3, 0x90, 0x7b, 0x53, 0x36,
|
0xc5, 0x32, 0xdb, 0x17, 0x09, 0x21, 0x27, 0x5a, 0x85, 0x6a, 0xb0, 0x37, 0x0f, 0xb8, 0x3b, 0x63,
|
||||||
0xe2, 0x2a, 0xa1, 0x45, 0xb2, 0xfc, 0x46, 0x26, 0x64, 0xd5, 0x62, 0x95, 0xce, 0x42, 0xad, 0x98,
|
0x63, 0xae, 0x12, 0x5a, 0x24, 0xcb, 0x6f, 0x54, 0x87, 0xac, 0x5a, 0xac, 0xd2, 0x59, 0x68, 0x14,
|
||||||
0x3c, 0x03, 0xd1, 0x94, 0xf9, 0x5b, 0xd8, 0x57, 0xdf, 0x2d, 0xce, 0x3f, 0x74, 0x65, 0x4e, 0x20,
|
0x93, 0x67, 0x20, 0x9a, 0xaa, 0xff, 0x0e, 0x2a, 0xea, 0xbb, 0xc3, 0xf9, 0x87, 0xae, 0xcc, 0x31,
|
||||||
0xc7, 0xa6, 0x3a, 0xf6, 0xfa, 0xda, 0xec, 0xb2, 0xa9, 0x0c, 0xbb, 0xe9, 0x82, 0xb1, 0x5a, 0x1f,
|
0xe4, 0xd8, 0x4c, 0xc7, 0x5e, 0x5f, 0x9b, 0x5d, 0x36, 0x93, 0x61, 0xaf, 0x3b, 0x60, 0xac, 0xd6,
|
||||||
0xcd, 0x02, 0x3f, 0xe2, 0x32, 0x15, 0xd2, 0xb8, 0xcc, 0x84, 0x4c, 0xdb, 0x54, 0xae, 0x4a, 0xa9,
|
0x87, 0x73, 0xdf, 0x0b, 0xb9, 0x4c, 0x85, 0x34, 0x2e, 0x33, 0x21, 0xd3, 0x36, 0x93, 0xab, 0x52,
|
||||||
0x55, 0xe5, 0x18, 0x6f, 0x71, 0xde, 0x8d, 0x98, 0x40, 0x2f, 0xf4, 0x0d, 0xa0, 0x93, 0x60, 0x78,
|
0x6a, 0x55, 0x39, 0xc2, 0x3b, 0x9c, 0xf7, 0x42, 0x26, 0xd0, 0x0b, 0x7d, 0x03, 0xe8, 0xd4, 0x1f,
|
||||||
0x27, 0xef, 0x14, 0xbb, 0x8f, 0xcd, 0x97, 0x24, 0xdc, 0x09, 0x86, 0x77, 0x4d, 0x09, 0x9a, 0x7f,
|
0xdd, 0xc9, 0x3b, 0xc5, 0xee, 0x23, 0xf3, 0x25, 0x09, 0x77, 0xfd, 0xd1, 0x5d, 0x5b, 0x82, 0xf5,
|
||||||
0xd0, 0x77, 0xbb, 0x1f, 0xe8, 0xbd, 0x7f, 0x74, 0x78, 0x57, 0x21, 0xd8, 0x79, 0x3c, 0x04, 0x14,
|
0x3f, 0xea, 0xbb, 0x3d, 0xf0, 0xf5, 0xde, 0x7f, 0x71, 0x78, 0x57, 0x21, 0xd8, 0x79, 0x3c, 0x04,
|
||||||
0x0e, 0xd7, 0x8c, 0xc7, 0xa7, 0x48, 0x46, 0x36, 0xb5, 0x11, 0xd9, 0x2f, 0x21, 0x77, 0xcb, 0xbc,
|
0x14, 0x0e, 0xd6, 0x8c, 0x47, 0xa7, 0x48, 0x46, 0x36, 0xb5, 0x11, 0xd9, 0x2f, 0x20, 0x77, 0xcb,
|
||||||
0xc9, 0x3c, 0x5c, 0x18, 0x46, 0x89, 0x34, 0xb5, 0x34, 0x43, 0x16, 0x12, 0xf3, 0x9f, 0x39, 0xc8,
|
0xdc, 0xe9, 0x22, 0x88, 0x0d, 0xa3, 0x44, 0x9a, 0x3a, 0x9a, 0x21, 0xb1, 0xa4, 0xfe, 0xef, 0x1c,
|
||||||
0xc5, 0x20, 0xaa, 0x41, 0x66, 0x18, 0xb8, 0x8b, 0xec, 0x3e, 0x7f, 0xb8, 0x6c, 0xf1, 0xb7, 0x11,
|
0xe4, 0x22, 0x10, 0x35, 0x20, 0x33, 0xf2, 0x9d, 0x38, 0xbb, 0xcf, 0x1f, 0x2e, 0x8b, 0xff, 0xb6,
|
||||||
0xb8, 0x9c, 0x28, 0x2d, 0xfa, 0x1d, 0x94, 0xe5, 0x8d, 0xf6, 0xf9, 0x84, 0xce, 0x67, 0x2e, 0x5b,
|
0x7c, 0x87, 0x13, 0xa5, 0x45, 0xbf, 0x87, 0xb2, 0xbc, 0xd1, 0x1e, 0x9f, 0xd2, 0xc5, 0xdc, 0x61,
|
||||||
0x26, 0xb4, 0x92, 0x58, 0xdd, 0xd0, 0x82, 0x81, 0xe2, 0x49, 0x69, 0x98, 0xfc, 0x44, 0xa7, 0x90,
|
0xcb, 0x84, 0x56, 0x13, 0xab, 0x5b, 0x5a, 0x30, 0x54, 0x3c, 0x29, 0x8d, 0x92, 0x9f, 0xe8, 0x04,
|
||||||
0x1f, 0x8b, 0xc9, 0x50, 0x67, 0x22, 0xa3, 0x8a, 0x62, 0x4f, 0x02, 0x2a, 0x07, 0x26, 0x94, 0x02,
|
0xf2, 0x13, 0x31, 0x1d, 0xe9, 0x4c, 0x64, 0x54, 0x51, 0xec, 0x49, 0x40, 0xe5, 0xa0, 0x0e, 0x25,
|
||||||
0xdf, 0x0b, 0x7c, 0x1a, 0x8d, 0x19, 0xad, 0xbd, 0xfa, 0x5a, 0x15, 0x6b, 0x91, 0x14, 0x14, 0xd8,
|
0xdf, 0x73, 0x7d, 0x8f, 0x86, 0x13, 0x46, 0x1b, 0xaf, 0xbe, 0x52, 0xc5, 0x5a, 0x24, 0x05, 0x05,
|
||||||
0x1b, 0xb3, 0xda, 0xab, 0xaf, 0xd1, 0xa7, 0x50, 0x50, 0x25, 0xc3, 0xdf, 0xcf, 0xbc, 0xf0, 0x5e,
|
0xf6, 0x27, 0xac, 0xf1, 0xea, 0x2b, 0xf4, 0x31, 0x14, 0x54, 0xc9, 0xf0, 0xf7, 0x73, 0x37, 0xb8,
|
||||||
0x55, 0x69, 0x89, 0xa8, 0x2a, 0xc2, 0x0a, 0x41, 0x47, 0x90, 0xbd, 0x9d, 0xb0, 0x51, 0xa4, 0x2a,
|
0x57, 0x55, 0x5a, 0x22, 0xaa, 0x8a, 0xb0, 0x42, 0xd0, 0x21, 0x64, 0x6f, 0xa7, 0x6c, 0x1c, 0xaa,
|
||||||
0xb3, 0x44, 0xf4, 0x07, 0xfa, 0x0a, 0x8e, 0xe2, 0x18, 0xd0, 0x28, 0x98, 0x87, 0x43, 0x4e, 0x3d,
|
0xca, 0x2c, 0x11, 0xfd, 0x81, 0xbe, 0x84, 0xc3, 0x28, 0x06, 0x34, 0xf4, 0x17, 0xc1, 0x88, 0x53,
|
||||||
0xdf, 0xe5, 0xef, 0x55, 0x5d, 0x96, 0x08, 0x8a, 0xb9, 0x9e, 0xa2, 0x2c, 0xc9, 0x98, 0x7f, 0xcd,
|
0xd7, 0x73, 0xf8, 0x7b, 0x55, 0x97, 0x25, 0x82, 0x22, 0xae, 0xaf, 0x28, 0x53, 0x32, 0xf5, 0xbf,
|
||||||
0x42, 0x21, 0x11, 0x00, 0x54, 0x84, 0x3d, 0x82, 0x7b, 0x98, 0xbc, 0xc5, 0x4d, 0xe3, 0x13, 0x54,
|
0x67, 0xa1, 0x90, 0x08, 0x00, 0x2a, 0xc2, 0x1e, 0xc1, 0x7d, 0x4c, 0xde, 0xe2, 0xb6, 0xf1, 0x11,
|
||||||
0x81, 0xa3, 0x81, 0xfd, 0xc6, 0x76, 0x7e, 0xb0, 0xe9, 0x75, 0xfd, 0x5d, 0x17, 0xdb, 0x7d, 0xda,
|
0x3a, 0x87, 0xcf, 0x4c, 0xab, 0x65, 0x13, 0x82, 0x5b, 0x03, 0x6a, 0x13, 0x3a, 0xb4, 0xde, 0x58,
|
||||||
0xae, 0xf7, 0xda, 0x46, 0x0a, 0x3d, 0x83, 0x8a, 0x65, 0x37, 0x1c, 0x42, 0x70, 0xa3, 0xbf, 0xe4,
|
0xf6, 0xf7, 0x16, 0xbd, 0x6e, 0xbe, 0xeb, 0x61, 0x6b, 0x40, 0xdb, 0x78, 0xd0, 0x34, 0xbb, 0x7d,
|
||||||
0xea, 0x5d, 0x67, 0x60, 0xf7, 0x8d, 0x1d, 0xf4, 0x29, 0x9c, 0xb6, 0x2c, 0xbb, 0xde, 0xa1, 0x2b,
|
0x23, 0x85, 0x9e, 0x41, 0x75, 0xa5, 0x8c, 0xe9, 0x66, 0xcf, 0x1e, 0x5a, 0x03, 0x63, 0x07, 0x7d,
|
||||||
0x4d, 0xa3, 0xd3, 0x7f, 0x4b, 0xf1, 0x8f, 0xd7, 0x16, 0x79, 0x67, 0xa4, 0xb7, 0x09, 0xda, 0xfd,
|
0x0c, 0x27, 0x1d, 0xd3, 0x6a, 0x76, 0xe9, 0x4a, 0xd3, 0xea, 0x0e, 0xde, 0x52, 0xfc, 0xc3, 0xb5,
|
||||||
0x4e, 0x63, 0x61, 0x21, 0x83, 0x9e, 0xc2, 0x13, 0x2d, 0xd0, 0x4b, 0x68, 0xdf, 0x71, 0x68, 0xcf,
|
0x49, 0xde, 0x19, 0xe9, 0x6d, 0x82, 0xab, 0x41, 0xb7, 0x15, 0x5b, 0xc8, 0xa0, 0xa7, 0xf0, 0x44,
|
||||||
0x71, 0x6c, 0x23, 0x8b, 0x0e, 0xa0, 0x64, 0xd9, 0x6f, 0xeb, 0x1d, 0xab, 0x49, 0x09, 0xae, 0x77,
|
0x0b, 0xf4, 0x12, 0x3a, 0xb0, 0x6d, 0xda, 0xb7, 0x6d, 0xcb, 0xc8, 0xa2, 0x7d, 0x28, 0x99, 0xd6,
|
||||||
0xba, 0xc6, 0x2e, 0x3a, 0x84, 0xfd, 0x4d, 0x5d, 0x4e, 0x9a, 0x58, 0xe8, 0x1c, 0xdb, 0x72, 0x6c,
|
0xdb, 0x66, 0xd7, 0x6c, 0x53, 0x82, 0x9b, 0xdd, 0x9e, 0xb1, 0x8b, 0x0e, 0xa0, 0xb2, 0xa9, 0xcb,
|
||||||
0xfa, 0x16, 0x93, 0x9e, 0xe5, 0xd8, 0xc6, 0x1e, 0x3a, 0x06, 0xb4, 0x4e, 0xb5, 0xbb, 0xf5, 0x86,
|
0x49, 0x13, 0xb1, 0xce, 0xb6, 0x4c, 0xdb, 0xa2, 0x6f, 0x31, 0xe9, 0x9b, 0xb6, 0x65, 0xec, 0xa1,
|
||||||
0x91, 0x47, 0x4f, 0xe0, 0x60, 0x1d, 0x7f, 0x83, 0xdf, 0x19, 0x20, 0xc3, 0xa0, 0x37, 0x46, 0x5f,
|
0x23, 0x40, 0xeb, 0xd4, 0x55, 0xaf, 0xd9, 0x32, 0xf2, 0xe8, 0x09, 0xec, 0xaf, 0xe3, 0x6f, 0xf0,
|
||||||
0xe3, 0x8e, 0xf3, 0x03, 0xed, 0x5a, 0xb6, 0xd5, 0x1d, 0x74, 0x8d, 0x02, 0x3a, 0x02, 0xa3, 0x85,
|
0x3b, 0x03, 0x50, 0x15, 0x0e, 0xf5, 0xc6, 0xe8, 0x6b, 0xdc, 0xb5, 0xbf, 0xa7, 0x3d, 0xd3, 0x32,
|
||||||
0x31, 0xb5, 0xec, 0xde, 0xa0, 0xd5, 0xb2, 0x1a, 0x16, 0xb6, 0xfb, 0x46, 0x51, 0x7b, 0xde, 0x76,
|
0x7b, 0xc3, 0x9e, 0x51, 0x40, 0x87, 0x60, 0x74, 0x30, 0xa6, 0xa6, 0xd5, 0x1f, 0x76, 0x3a, 0x66,
|
||||||
0xf0, 0x92, 0x5c, 0xd0, 0x68, 0xd7, 0x6d, 0x1b, 0x77, 0x68, 0xd3, 0xea, 0xd5, 0x5f, 0x77, 0x70,
|
0xcb, 0xc4, 0xd6, 0xc0, 0x28, 0x6a, 0xcf, 0xdb, 0x0e, 0x5e, 0x92, 0x0b, 0x5a, 0x57, 0x4d, 0xcb,
|
||||||
0xd3, 0x28, 0xa3, 0x33, 0x78, 0xda, 0xc7, 0xdd, 0x6b, 0x87, 0xd4, 0xc9, 0x3b, 0xba, 0xe0, 0x5b,
|
0xc2, 0x5d, 0xda, 0x36, 0xfb, 0xcd, 0xd7, 0x5d, 0xdc, 0x36, 0xca, 0xe8, 0x14, 0x9e, 0x0e, 0x70,
|
||||||
0x75, 0xab, 0x33, 0x20, 0xd8, 0xd8, 0x47, 0x9f, 0xc1, 0x19, 0xc1, 0xdf, 0x0f, 0x2c, 0x82, 0x9b,
|
0xef, 0xda, 0x26, 0x4d, 0xf2, 0x8e, 0xc6, 0x7c, 0xa7, 0x69, 0x76, 0x87, 0x04, 0x1b, 0x15, 0xf4,
|
||||||
0xd4, 0x76, 0x9a, 0x98, 0xb6, 0x70, 0xbd, 0x3f, 0x20, 0x98, 0x76, 0xad, 0x5e, 0xcf, 0xb2, 0xbf,
|
0x09, 0x9c, 0x12, 0xfc, 0xdd, 0xd0, 0x24, 0xb8, 0x4d, 0x2d, 0xbb, 0x8d, 0x69, 0x07, 0x37, 0x07,
|
||||||
0x35, 0x0c, 0xf4, 0x0b, 0x38, 0x5f, 0x4a, 0x96, 0x06, 0x36, 0x54, 0x07, 0xf2, 0x7c, 0x8b, 0x7c,
|
0x43, 0x82, 0x69, 0xcf, 0xec, 0xf7, 0x4d, 0xeb, 0x1b, 0xc3, 0x40, 0x9f, 0xc1, 0xd9, 0x52, 0xb2,
|
||||||
0xda, 0xf8, 0xc7, 0x3e, 0xbd, 0xc6, 0x98, 0x18, 0x08, 0x55, 0xe1, 0x78, 0xe5, 0x5e, 0x3b, 0x88,
|
0x34, 0xb0, 0xa1, 0xda, 0x97, 0xe7, 0x8b, 0x53, 0x6a, 0xe1, 0x1f, 0x06, 0xf4, 0x1a, 0x63, 0x62,
|
||||||
0x7d, 0x1f, 0x4a, 0xee, 0x1a, 0x93, 0x6e, 0xdd, 0x96, 0x09, 0x5e, 0xe3, 0x8e, 0xe4, 0xb6, 0x57,
|
0x20, 0x54, 0x83, 0xa3, 0x95, 0x7b, 0xed, 0x20, 0xf2, 0x7d, 0x20, 0xb9, 0x6b, 0x4c, 0x7a, 0x4d,
|
||||||
0xdc, 0xe6, 0xb6, 0x9f, 0xa0, 0x23, 0xd8, 0x5f, 0x78, 0x5b, 0x80, 0xff, 0xce, 0xa1, 0x13, 0x40,
|
0x4b, 0x26, 0x78, 0x8d, 0x3b, 0x94, 0xdb, 0x5e, 0x71, 0x9b, 0xdb, 0x7e, 0x82, 0x0e, 0xa1, 0x12,
|
||||||
0x03, 0x9b, 0xe0, 0x7a, 0x53, 0x1e, 0x7e, 0x49, 0xfc, 0x27, 0xf7, 0x5d, 0x66, 0x6f, 0xc7, 0x48,
|
0x7b, 0x8b, 0xc1, 0xff, 0xe4, 0xd0, 0x31, 0xa0, 0xa1, 0x45, 0x70, 0xb3, 0x2d, 0x0f, 0xbf, 0x24,
|
||||||
0x9b, 0x7f, 0x4f, 0x43, 0x69, 0xad, 0xb6, 0xd0, 0x33, 0xc8, 0x47, 0xde, 0xc8, 0x67, 0x42, 0x56,
|
0xfe, 0x9b, 0xfb, 0x36, 0xb3, 0xb7, 0x63, 0xa4, 0xeb, 0xff, 0x48, 0x43, 0x69, 0xad, 0xd6, 0xd0,
|
||||||
0xbf, 0x6e, 0x0c, 0x2b, 0x40, 0x3d, 0x2e, 0x63, 0xe6, 0xf9, 0xba, 0x23, 0xe9, 0x8e, 0x9c, 0x57,
|
0x33, 0xc8, 0x87, 0xee, 0xd8, 0x63, 0x42, 0x76, 0x03, 0xdd, 0x28, 0x56, 0x80, 0x7a, 0x6c, 0x26,
|
||||||
0x88, 0xea, 0x47, 0x27, 0x90, 0x5b, 0x3c, 0x4e, 0x69, 0x55, 0x87, 0xbb, 0x43, 0xfd, 0x28, 0x3d,
|
0xcc, 0xf5, 0x74, 0x87, 0xd2, 0x1d, 0x3a, 0xaf, 0x10, 0xd5, 0x9f, 0x8e, 0x21, 0x17, 0x3f, 0x56,
|
||||||
0x83, 0xbc, 0x6c, 0x79, 0x91, 0x60, 0xd3, 0x99, 0x2a, 0xd1, 0x12, 0x59, 0x01, 0xe8, 0x73, 0x28,
|
0x69, 0x55, 0x97, 0xbb, 0x23, 0xfd, 0x48, 0x3d, 0x83, 0xbc, 0x6c, 0x81, 0xa1, 0x60, 0xb3, 0xb9,
|
||||||
0x4d, 0x79, 0x14, 0xb1, 0x11, 0xa7, 0xba, 0xcc, 0x40, 0x29, 0x8a, 0x31, 0xd8, 0x52, 0xd5, 0xf6,
|
0x2a, 0xd9, 0x12, 0x59, 0x01, 0xe8, 0x53, 0x28, 0xcd, 0x78, 0x18, 0xb2, 0x31, 0xa7, 0xba, 0xec,
|
||||||
0x39, 0x2c, 0xca, 0x3e, 0x16, 0x65, 0xb5, 0x28, 0x06, 0xb5, 0x68, 0xb3, 0xe3, 0x0a, 0x16, 0x57,
|
0x40, 0x29, 0x8a, 0x11, 0xd8, 0x51, 0xd5, 0xf7, 0x29, 0xc4, 0x6d, 0x20, 0x12, 0x65, 0xb5, 0x28,
|
||||||
0x73, 0xb2, 0xe3, 0x0a, 0x86, 0x5e, 0xc2, 0x81, 0x6e, 0x19, 0x9e, 0xef, 0x4d, 0xe7, 0x53, 0xdd,
|
0x02, 0xb5, 0x68, 0xb3, 0x03, 0x0b, 0x16, 0x55, 0x77, 0xb2, 0x03, 0x0b, 0x86, 0x5e, 0xc2, 0xbe,
|
||||||
0x3a, 0x72, 0x6a, 0xcb, 0xfb, 0xaa, 0x75, 0x68, 0x5c, 0x75, 0x90, 0xa7, 0xb0, 0x77, 0xc3, 0x22,
|
0x6e, 0x21, 0xae, 0xe7, 0xce, 0x16, 0x33, 0xdd, 0x4a, 0x72, 0x6a, 0xcb, 0x15, 0xd5, 0x4a, 0x34,
|
||||||
0x2e, 0x9b, 0x7d, 0x5c, 0xda, 0x39, 0xf9, 0xdd, 0xe2, 0x5c, 0x52, 0xf2, 0x09, 0x08, 0x65, 0xd3,
|
0xae, 0x3a, 0xca, 0x53, 0xd8, 0xbb, 0x61, 0x21, 0x97, 0xcd, 0x3f, 0x2a, 0xf5, 0x9c, 0xfc, 0xee,
|
||||||
0xca, 0x6b, 0xea, 0x96, 0x73, 0x22, 0xe3, 0xb8, 0xf4, 0xc0, 0xde, 0xaf, 0x3c, 0x14, 0x12, 0x1e,
|
0x70, 0x2e, 0x29, 0xf9, 0x24, 0x04, 0xb2, 0x89, 0xe5, 0x35, 0x75, 0xcb, 0x39, 0x91, 0x71, 0x5c,
|
||||||
0x34, 0xae, 0x3c, 0xbc, 0x84, 0x03, 0xfe, 0x5e, 0x84, 0x8c, 0x06, 0x33, 0xf6, 0xd3, 0x9c, 0x53,
|
0x7a, 0x60, 0xef, 0x57, 0x1e, 0x0a, 0x09, 0x0f, 0x1a, 0x57, 0x1e, 0x5e, 0xc2, 0x3e, 0x7f, 0x2f,
|
||||||
0x97, 0x09, 0x56, 0x29, 0xaa, 0xe0, 0xee, 0x2b, 0xc2, 0x51, 0x78, 0x93, 0x09, 0x66, 0x3e, 0x83,
|
0x02, 0x46, 0xfd, 0x39, 0xfb, 0x71, 0xc1, 0xa9, 0xc3, 0x04, 0xab, 0x16, 0x55, 0x70, 0x2b, 0x8a,
|
||||||
0x2a, 0xe1, 0x11, 0x17, 0x5d, 0x2f, 0x8a, 0xbc, 0xc0, 0x6f, 0x04, 0xbe, 0x08, 0x83, 0x49, 0xfc,
|
0xb0, 0x15, 0xde, 0x66, 0x82, 0xd5, 0x9f, 0x41, 0x8d, 0xf0, 0x90, 0x8b, 0x9e, 0x1b, 0x86, 0xae,
|
||||||
0x66, 0x98, 0x67, 0x70, 0xba, 0x95, 0xd5, 0x4d, 0x5f, 0x2e, 0xfe, 0x7e, 0xce, 0xc3, 0xfb, 0xed,
|
0xef, 0xb5, 0x7c, 0x4f, 0x04, 0xfe, 0x34, 0x7a, 0x43, 0xea, 0xa7, 0x70, 0xb2, 0x95, 0xd5, 0x8f,
|
||||||
0x8b, 0xdf, 0xc0, 0xe9, 0x56, 0x36, 0x7e, 0x31, 0xbe, 0x84, 0xac, 0x1f, 0xb8, 0x3c, 0xaa, 0xa4,
|
0x80, 0x5c, 0xfc, 0xdd, 0x82, 0x07, 0xf7, 0xdb, 0x17, 0xbf, 0x81, 0x93, 0xad, 0x6c, 0xf4, 0x82,
|
||||||
0xd4, 0xcc, 0x70, 0x9c, 0x68, 0xcf, 0x76, 0xe0, 0xf2, 0xb6, 0x17, 0x89, 0x20, 0xbc, 0x27, 0x5a,
|
0x7c, 0x01, 0x59, 0xcf, 0x77, 0x78, 0x58, 0x4d, 0xa9, 0x19, 0xe2, 0x28, 0xd1, 0xae, 0x2d, 0xdf,
|
||||||
0x64, 0xfe, 0x2b, 0x05, 0x85, 0x04, 0x8c, 0x8e, 0x61, 0x77, 0x36, 0xbf, 0xb9, 0xe3, 0xf7, 0xf1,
|
0xe1, 0x57, 0x6e, 0x28, 0xfc, 0xe0, 0x9e, 0x68, 0x51, 0xfd, 0x5f, 0x29, 0x28, 0x24, 0x60, 0x74,
|
||||||
0xa5, 0x8a, 0xbf, 0xd0, 0x0b, 0x28, 0x4f, 0x58, 0x24, 0xa8, 0xec, 0x96, 0x54, 0x26, 0x29, 0x7e,
|
0x04, 0xbb, 0xf3, 0xc5, 0xcd, 0x1d, 0xbf, 0x8f, 0x2e, 0x55, 0xf4, 0x85, 0x5e, 0x40, 0x79, 0xca,
|
||||||
0x22, 0x37, 0x50, 0xf4, 0x0d, 0x9c, 0x04, 0x62, 0xcc, 0x43, 0x3d, 0xfd, 0x44, 0xf3, 0xe1, 0x90,
|
0x42, 0x41, 0x65, 0xf7, 0xa4, 0x32, 0x49, 0xd1, 0x93, 0xb9, 0x81, 0xa2, 0xaf, 0xe1, 0xd8, 0x17,
|
||||||
0x47, 0x11, 0x9d, 0x85, 0xc1, 0x8d, 0xba, 0x6a, 0x3b, 0xe4, 0x31, 0x1a, 0xbd, 0x82, 0xbd, 0xf8,
|
0x13, 0x1e, 0xe8, 0x69, 0x28, 0x5c, 0x8c, 0x46, 0x3c, 0x0c, 0xe9, 0x3c, 0xf0, 0x6f, 0xd4, 0x55,
|
||||||
0x8e, 0x44, 0x95, 0x8c, 0xda, 0xfa, 0xd3, 0x87, 0x2f, 0xcb, 0x62, 0xf7, 0x4b, 0xa9, 0xf9, 0x8f,
|
0xdb, 0x21, 0x8f, 0xd1, 0xe8, 0x15, 0xec, 0x45, 0x77, 0x24, 0xac, 0x66, 0xd4, 0xd6, 0x9f, 0x3e,
|
||||||
0x14, 0x94, 0xd7, 0x49, 0xf4, 0x5c, 0xdd, 0x7e, 0x75, 0x05, 0x3d, 0x57, 0x9d, 0x23, 0x43, 0x12,
|
0x7c, 0x69, 0xe2, 0xdd, 0x2f, 0xa5, 0xf5, 0x7f, 0xa6, 0xa0, 0xbc, 0x4e, 0xa2, 0xe7, 0xea, 0xf6,
|
||||||
0xc8, 0x47, 0x9f, 0xa5, 0x06, 0x47, 0x53, 0xcf, 0xa7, 0x33, 0xee, 0xb3, 0x89, 0xf7, 0x27, 0x4e,
|
0xab, 0x2b, 0xe8, 0x3a, 0xea, 0x1c, 0x19, 0x92, 0x40, 0x7e, 0xf1, 0x59, 0x1a, 0x70, 0x38, 0x73,
|
||||||
0x17, 0xb3, 0x47, 0x5a, 0xa9, 0xb7, 0x72, 0xc8, 0x84, 0xe2, 0xda, 0xa1, 0x33, 0xea, 0xd0, 0x6b,
|
0x3d, 0x3a, 0xe7, 0x1e, 0x9b, 0xba, 0x7f, 0xe6, 0x34, 0x9e, 0x45, 0xd2, 0x4a, 0xbd, 0x95, 0x43,
|
||||||
0xd8, 0xcb, 0xbf, 0xa5, 0xa0, 0x98, 0x9c, 0xa2, 0x50, 0x09, 0xf2, 0x96, 0x4d, 0x5b, 0x1d, 0xeb,
|
0x75, 0x28, 0xae, 0x1d, 0x3a, 0xa3, 0x0e, 0xbd, 0x86, 0xbd, 0xfc, 0x5b, 0x0a, 0x8a, 0xc9, 0xa9,
|
||||||
0xdb, 0x76, 0xdf, 0xf8, 0x44, 0x7e, 0xf6, 0x06, 0x8d, 0x06, 0xc6, 0x4d, 0xdc, 0x34, 0x52, 0x08,
|
0x0a, 0x95, 0x20, 0x6f, 0x5a, 0xb4, 0xd3, 0x35, 0xbf, 0xb9, 0x1a, 0x18, 0x1f, 0xc9, 0xcf, 0xfe,
|
||||||
0x41, 0x59, 0x36, 0x04, 0xdc, 0xa4, 0x7d, 0xab, 0x8b, 0x9d, 0x81, 0x7c, 0x4b, 0x0e, 0x61, 0x3f,
|
0xb0, 0xd5, 0xc2, 0xb8, 0x8d, 0xdb, 0x46, 0x0a, 0x21, 0x28, 0xcb, 0x86, 0x80, 0xdb, 0x74, 0x60,
|
||||||
0xc6, 0x6c, 0x87, 0x12, 0x67, 0xd0, 0xc7, 0x46, 0x1a, 0x19, 0x50, 0x8c, 0x41, 0x4c, 0x88, 0x43,
|
0xf6, 0xb0, 0x3d, 0x94, 0x6f, 0xc9, 0x01, 0x54, 0x22, 0xcc, 0xb2, 0x29, 0xb1, 0x87, 0x03, 0x6c,
|
||||||
0x8c, 0x8c, 0x6c, 0x80, 0x31, 0xf2, 0xf0, 0x5d, 0x6a, 0xe2, 0x7e, 0xdd, 0xea, 0xf4, 0x8c, 0x6c,
|
0xa4, 0x91, 0x01, 0xc5, 0x08, 0xc4, 0x84, 0xd8, 0xc4, 0xc8, 0xc8, 0x06, 0x18, 0x21, 0x0f, 0xdf,
|
||||||
0xed, 0x2f, 0x19, 0xd8, 0x55, 0x53, 0x47, 0x88, 0xda, 0x50, 0x48, 0x8c, 0xef, 0xe8, 0x2c, 0x91,
|
0xa5, 0xf8, 0xd9, 0xca, 0x36, 0xfe, 0x9a, 0x81, 0x5d, 0x35, 0x85, 0x04, 0xe8, 0x0a, 0x0a, 0x89,
|
||||||
0x81, 0x87, 0x63, 0x7d, 0xb5, 0xb2, 0x7d, 0x2c, 0x9c, 0x47, 0x5f, 0xa5, 0xd0, 0x77, 0x50, 0x4c,
|
0x71, 0x1e, 0x9d, 0x26, 0x32, 0xf0, 0x70, 0xcc, 0xaf, 0x55, 0xb7, 0x8f, 0x89, 0x8b, 0xf0, 0xcb,
|
||||||
0x0e, 0xa3, 0x28, 0x39, 0x64, 0x6c, 0x99, 0x52, 0x3f, 0x68, 0xeb, 0x0d, 0x18, 0x38, 0x12, 0xde,
|
0x14, 0xfa, 0x16, 0x8a, 0xc9, 0xe1, 0x14, 0x25, 0x87, 0x8e, 0x2d, 0x53, 0xeb, 0x07, 0x6d, 0xbd,
|
||||||
0x54, 0x0e, 0x15, 0xf1, 0x98, 0x87, 0xaa, 0x09, 0xfd, 0xc6, 0xec, 0x58, 0x3d, 0xdd, 0xca, 0xc5,
|
0x01, 0x03, 0x87, 0xc2, 0x9d, 0xc9, 0x21, 0x23, 0x1a, 0xfb, 0x50, 0x2d, 0xa1, 0xdf, 0x98, 0x25,
|
||||||
0xf5, 0xd1, 0xd1, 0x47, 0x8c, 0x07, 0xad, 0x07, 0x47, 0x5c, 0x9f, 0xee, 0xaa, 0xcf, 0x1f, 0xa3,
|
0x6b, 0x27, 0x5b, 0xb9, 0xa8, 0x3e, 0xba, 0xfa, 0x88, 0xd1, 0xe0, 0xf5, 0xe0, 0x88, 0xeb, 0xd3,
|
||||||
0x63, 0x6b, 0x2e, 0x1c, 0x6e, 0xa9, 0x64, 0xf4, 0xcb, 0xe4, 0x0e, 0x1e, 0xed, 0x03, 0xd5, 0x17,
|
0x5e, 0xed, 0xf9, 0x63, 0x74, 0x64, 0xcd, 0x81, 0x83, 0x2d, 0x95, 0x8c, 0x7e, 0x95, 0xdc, 0xc1,
|
||||||
0xff, 0x4f, 0xb6, 0xf2, 0xb2, 0xa5, 0xe4, 0xd7, 0xbc, 0x3c, 0xde, 0x30, 0xd6, 0xbc, 0x7c, 0xa0,
|
0xa3, 0x7d, 0xa0, 0xf6, 0xe2, 0xe7, 0x64, 0x2b, 0x2f, 0x5b, 0x4a, 0x7e, 0xcd, 0xcb, 0xe3, 0x0d,
|
||||||
0x73, 0xbc, 0xfe, 0xf5, 0xef, 0xaf, 0x46, 0x9e, 0x18, 0xcf, 0x6f, 0x2e, 0x87, 0xc1, 0xf4, 0x6a,
|
0x63, 0xcd, 0xcb, 0x07, 0x3a, 0xc7, 0xeb, 0xdf, 0xfc, 0xe1, 0x72, 0xec, 0x8a, 0xc9, 0xe2, 0xe6,
|
||||||
0xe2, 0x8d, 0xc6, 0xc2, 0xf7, 0xfc, 0x91, 0xcf, 0xc5, 0x1f, 0x83, 0xf0, 0xee, 0x6a, 0xe2, 0xbb,
|
0x62, 0xe4, 0xcf, 0x2e, 0xa7, 0xee, 0x78, 0x22, 0x3c, 0xd7, 0x1b, 0x7b, 0x5c, 0xfc, 0xc9, 0x0f,
|
||||||
0x57, 0x6a, 0x70, 0xbd, 0x5a, 0x9a, 0xbb, 0xd9, 0x55, 0xff, 0xf6, 0xfd, 0xe6, 0x7f, 0x01, 0x00,
|
0xee, 0x2e, 0xa7, 0x9e, 0x73, 0xa9, 0x06, 0xd9, 0xcb, 0xa5, 0xb9, 0x9b, 0x5d, 0xf5, 0x6f, 0xe0,
|
||||||
0x00, 0xff, 0xff, 0xcc, 0x5a, 0xee, 0x77, 0x26, 0x0e, 0x00, 0x00,
|
0x6f, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x58, 0x80, 0x4d, 0xdb, 0x36, 0x0e, 0x00, 0x00,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
|
@ -173,7 +173,7 @@ message Failure {
|
|||||||
*/
|
*/
|
||||||
RESERVED = 0;
|
RESERVED = 0;
|
||||||
|
|
||||||
UNKNOWN_PAYMENT_HASH = 1;
|
INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS = 1;
|
||||||
INCORRECT_PAYMENT_AMOUNT = 2;
|
INCORRECT_PAYMENT_AMOUNT = 2;
|
||||||
FINAL_INCORRECT_CLTV_EXPIRY = 3;
|
FINAL_INCORRECT_CLTV_EXPIRY = 3;
|
||||||
FINAL_INCORRECT_HTLC_AMOUNT = 4;
|
FINAL_INCORRECT_HTLC_AMOUNT = 4;
|
||||||
|
@ -322,8 +322,8 @@ func marshallError(sendError error) (*Failure, error) {
|
|||||||
|
|
||||||
switch onionErr := fErr.FailureMessage.(type) {
|
switch onionErr := fErr.FailureMessage.(type) {
|
||||||
|
|
||||||
case *lnwire.FailUnknownPaymentHash:
|
case *lnwire.FailIncorrectDetails:
|
||||||
response.Code = Failure_UNKNOWN_PAYMENT_HASH
|
response.Code = Failure_INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS
|
||||||
|
|
||||||
case *lnwire.FailIncorrectPaymentAmount:
|
case *lnwire.FailIncorrectPaymentAmount:
|
||||||
response.Code = Failure_INCORRECT_PAYMENT_AMOUNT
|
response.Code = Failure_INCORRECT_PAYMENT_AMOUNT
|
||||||
|
@ -8664,7 +8664,7 @@ out:
|
|||||||
t.Fatalf("payment should have been rejected due to invalid " +
|
t.Fatalf("payment should have been rejected due to invalid " +
|
||||||
"payment hash")
|
"payment hash")
|
||||||
}
|
}
|
||||||
expectedErrorCode := lnwire.CodeUnknownPaymentHash.String()
|
expectedErrorCode := lnwire.CodeIncorrectOrUnknownPaymentDetails.String()
|
||||||
if !strings.Contains(resp.PaymentError, expectedErrorCode) {
|
if !strings.Contains(resp.PaymentError, expectedErrorCode) {
|
||||||
// TODO(roasbeef): make into proper gRPC error code
|
// TODO(roasbeef): make into proper gRPC error code
|
||||||
t.Fatalf("payment should have failed due to unknown payment hash, "+
|
t.Fatalf("payment should have failed due to unknown payment hash, "+
|
||||||
@ -8696,7 +8696,7 @@ out:
|
|||||||
t.Fatalf("payment should have been rejected due to wrong " +
|
t.Fatalf("payment should have been rejected due to wrong " +
|
||||||
"HTLC amount")
|
"HTLC amount")
|
||||||
}
|
}
|
||||||
expectedErrorCode = lnwire.CodeUnknownPaymentHash.String()
|
expectedErrorCode = lnwire.CodeIncorrectOrUnknownPaymentDetails.String()
|
||||||
if !strings.Contains(resp.PaymentError, expectedErrorCode) {
|
if !strings.Contains(resp.PaymentError, expectedErrorCode) {
|
||||||
t.Fatalf("payment should have failed due to wrong amount, "+
|
t.Fatalf("payment should have failed due to wrong amount, "+
|
||||||
"instead failed due to: %v", resp.PaymentError)
|
"instead failed due to: %v", resp.PaymentError)
|
||||||
|
@ -55,29 +55,29 @@ type FailCode uint16
|
|||||||
// The currently defined onion failure types within this current version of the
|
// The currently defined onion failure types within this current version of the
|
||||||
// Lightning protocol.
|
// Lightning protocol.
|
||||||
const (
|
const (
|
||||||
CodeNone FailCode = 0
|
CodeNone FailCode = 0
|
||||||
CodeInvalidRealm = FlagBadOnion | 1
|
CodeInvalidRealm = FlagBadOnion | 1
|
||||||
CodeTemporaryNodeFailure = FlagNode | 2
|
CodeTemporaryNodeFailure = FlagNode | 2
|
||||||
CodePermanentNodeFailure = FlagPerm | FlagNode | 2
|
CodePermanentNodeFailure = FlagPerm | FlagNode | 2
|
||||||
CodeRequiredNodeFeatureMissing = FlagPerm | FlagNode | 3
|
CodeRequiredNodeFeatureMissing = FlagPerm | FlagNode | 3
|
||||||
CodeInvalidOnionVersion = FlagBadOnion | FlagPerm | 4
|
CodeInvalidOnionVersion = FlagBadOnion | FlagPerm | 4
|
||||||
CodeInvalidOnionHmac = FlagBadOnion | FlagPerm | 5
|
CodeInvalidOnionHmac = FlagBadOnion | FlagPerm | 5
|
||||||
CodeInvalidOnionKey = FlagBadOnion | FlagPerm | 6
|
CodeInvalidOnionKey = FlagBadOnion | FlagPerm | 6
|
||||||
CodeTemporaryChannelFailure = FlagUpdate | 7
|
CodeTemporaryChannelFailure = FlagUpdate | 7
|
||||||
CodePermanentChannelFailure = FlagPerm | 8
|
CodePermanentChannelFailure = FlagPerm | 8
|
||||||
CodeRequiredChannelFeatureMissing = FlagPerm | 9
|
CodeRequiredChannelFeatureMissing = FlagPerm | 9
|
||||||
CodeUnknownNextPeer = FlagPerm | 10
|
CodeUnknownNextPeer = FlagPerm | 10
|
||||||
CodeAmountBelowMinimum = FlagUpdate | 11
|
CodeAmountBelowMinimum = FlagUpdate | 11
|
||||||
CodeFeeInsufficient = FlagUpdate | 12
|
CodeFeeInsufficient = FlagUpdate | 12
|
||||||
CodeIncorrectCltvExpiry = FlagUpdate | 13
|
CodeIncorrectCltvExpiry = FlagUpdate | 13
|
||||||
CodeExpiryTooSoon = FlagUpdate | 14
|
CodeExpiryTooSoon = FlagUpdate | 14
|
||||||
CodeChannelDisabled = FlagUpdate | 20
|
CodeChannelDisabled = FlagUpdate | 20
|
||||||
CodeUnknownPaymentHash = FlagPerm | 15
|
CodeIncorrectOrUnknownPaymentDetails = FlagPerm | 15
|
||||||
CodeIncorrectPaymentAmount = FlagPerm | 16
|
CodeIncorrectPaymentAmount = FlagPerm | 16
|
||||||
CodeFinalExpiryTooSoon FailCode = 17
|
CodeFinalExpiryTooSoon FailCode = 17
|
||||||
CodeFinalIncorrectCltvExpiry FailCode = 18
|
CodeFinalIncorrectCltvExpiry FailCode = 18
|
||||||
CodeFinalIncorrectHtlcAmount FailCode = 19
|
CodeFinalIncorrectHtlcAmount FailCode = 19
|
||||||
CodeExpiryTooFar FailCode = 21
|
CodeExpiryTooFar FailCode = 21
|
||||||
)
|
)
|
||||||
|
|
||||||
// String returns the string representation of the failure code.
|
// String returns the string representation of the failure code.
|
||||||
@ -134,8 +134,8 @@ func (c FailCode) String() string {
|
|||||||
case CodeChannelDisabled:
|
case CodeChannelDisabled:
|
||||||
return "ChannelDisabled"
|
return "ChannelDisabled"
|
||||||
|
|
||||||
case CodeUnknownPaymentHash:
|
case CodeIncorrectOrUnknownPaymentDetails:
|
||||||
return "UnknownPaymentHash"
|
return "IncorrectOrUnknownPaymentDetails"
|
||||||
|
|
||||||
case CodeFinalExpiryTooSoon:
|
case CodeFinalExpiryTooSoon:
|
||||||
return "FinalExpiryTooSoon"
|
return "FinalExpiryTooSoon"
|
||||||
@ -317,7 +317,7 @@ func (f *FailIncorrectPaymentAmount) Error() string {
|
|||||||
return f.Code().String()
|
return f.Code().String()
|
||||||
}
|
}
|
||||||
|
|
||||||
// FailUnknownPaymentHash is returned for two reasons:
|
// FailIncorrectDetails is returned for two reasons:
|
||||||
//
|
//
|
||||||
// 1) if the payment hash has already been paid, the final node MAY treat the
|
// 1) if the payment hash has already been paid, the final node MAY treat the
|
||||||
// payment hash as unknown, or may succeed in accepting the HTLC. If the
|
// payment hash as unknown, or may succeed in accepting the HTLC. If the
|
||||||
@ -330,42 +330,44 @@ func (f *FailIncorrectPaymentAmount) Error() string {
|
|||||||
// gross overpayment.
|
// gross overpayment.
|
||||||
//
|
//
|
||||||
// NOTE: May only be returned by the final node in the path.
|
// NOTE: May only be returned by the final node in the path.
|
||||||
type FailUnknownPaymentHash struct {
|
type FailIncorrectDetails struct {
|
||||||
// amount is the value of the extended HTLC.
|
// amount is the value of the extended HTLC.
|
||||||
amount MilliSatoshi
|
amount MilliSatoshi
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFailUnknownPaymentHash makes a new instance of the FailUnknownPaymentHash
|
// NewFailIncorrectDetails makes a new instance of the FailIncorrectDetails
|
||||||
// error bound to the specified HTLC amount.
|
// error bound to the specified HTLC amount.
|
||||||
func NewFailUnknownPaymentHash(amt MilliSatoshi) *FailUnknownPaymentHash {
|
func NewFailIncorrectDetails(amt MilliSatoshi) *FailIncorrectDetails {
|
||||||
return &FailUnknownPaymentHash{
|
return &FailIncorrectDetails{
|
||||||
amount: amt,
|
amount: amt,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Amount is the value of the extended HTLC.
|
// Amount is the value of the extended HTLC.
|
||||||
func (f *FailUnknownPaymentHash) Amount() MilliSatoshi {
|
func (f *FailIncorrectDetails) Amount() MilliSatoshi {
|
||||||
return f.amount
|
return f.amount
|
||||||
}
|
}
|
||||||
|
|
||||||
// Code returns the failure unique code.
|
// Code returns the failure unique code.
|
||||||
//
|
//
|
||||||
// NOTE: Part of the FailureMessage interface.
|
// NOTE: Part of the FailureMessage interface.
|
||||||
func (f *FailUnknownPaymentHash) Code() FailCode {
|
func (f *FailIncorrectDetails) Code() FailCode {
|
||||||
return CodeUnknownPaymentHash
|
return CodeIncorrectOrUnknownPaymentDetails
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns a human readable string describing the target FailureMessage.
|
// Returns a human readable string describing the target FailureMessage.
|
||||||
//
|
//
|
||||||
// NOTE: Implements the error interface.
|
// NOTE: Implements the error interface.
|
||||||
func (f *FailUnknownPaymentHash) Error() string {
|
func (f *FailIncorrectDetails) Error() string {
|
||||||
return fmt.Sprintf("UnknownPaymentHash(amt=%v)", f.amount)
|
return fmt.Sprintf(
|
||||||
|
"%v(amt=%v)", CodeIncorrectOrUnknownPaymentDetails, f.amount,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decode decodes the failure from bytes stream.
|
// Decode decodes the failure from bytes stream.
|
||||||
//
|
//
|
||||||
// NOTE: Part of the Serializable interface.
|
// NOTE: Part of the Serializable interface.
|
||||||
func (f *FailUnknownPaymentHash) Decode(r io.Reader, pver uint32) error {
|
func (f *FailIncorrectDetails) Decode(r io.Reader, pver uint32) error {
|
||||||
err := ReadElement(r, &f.amount)
|
err := ReadElement(r, &f.amount)
|
||||||
switch {
|
switch {
|
||||||
// This is an optional tack on that was added later in the protocol. As
|
// This is an optional tack on that was added later in the protocol. As
|
||||||
@ -385,7 +387,7 @@ func (f *FailUnknownPaymentHash) Decode(r io.Reader, pver uint32) error {
|
|||||||
// Encode writes the failure in bytes stream.
|
// Encode writes the failure in bytes stream.
|
||||||
//
|
//
|
||||||
// NOTE: Part of the Serializable interface.
|
// NOTE: Part of the Serializable interface.
|
||||||
func (f *FailUnknownPaymentHash) Encode(w io.Writer, pver uint32) error {
|
func (f *FailIncorrectDetails) Encode(w io.Writer, pver uint32) error {
|
||||||
return WriteElement(w, f.amount)
|
return WriteElement(w, f.amount)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1228,8 +1230,8 @@ func makeEmptyOnionError(code FailCode) (FailureMessage, error) {
|
|||||||
case CodeUnknownNextPeer:
|
case CodeUnknownNextPeer:
|
||||||
return &FailUnknownNextPeer{}, nil
|
return &FailUnknownNextPeer{}, nil
|
||||||
|
|
||||||
case CodeUnknownPaymentHash:
|
case CodeIncorrectOrUnknownPaymentDetails:
|
||||||
return &FailUnknownPaymentHash{}, nil
|
return &FailIncorrectDetails{}, nil
|
||||||
|
|
||||||
case CodeIncorrectPaymentAmount:
|
case CodeIncorrectPaymentAmount:
|
||||||
return &FailIncorrectPaymentAmount{}, nil
|
return &FailIncorrectPaymentAmount{}, nil
|
||||||
|
@ -36,7 +36,7 @@ var onionFailures = []FailureMessage{
|
|||||||
&FailIncorrectPaymentAmount{},
|
&FailIncorrectPaymentAmount{},
|
||||||
&FailFinalExpiryTooSoon{},
|
&FailFinalExpiryTooSoon{},
|
||||||
|
|
||||||
NewFailUnknownPaymentHash(99),
|
NewFailIncorrectDetails(99),
|
||||||
NewInvalidOnionVersion(testOnionHash),
|
NewInvalidOnionVersion(testOnionHash),
|
||||||
NewInvalidOnionHmac(testOnionHash),
|
NewInvalidOnionHmac(testOnionHash),
|
||||||
NewInvalidOnionKey(testOnionHash),
|
NewInvalidOnionKey(testOnionHash),
|
||||||
@ -168,16 +168,16 @@ func TestWriteOnionErrorChanUpdate(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestFailUnknownPaymentHashOptionalAmount tests that we're able to decode an
|
// TestFailIncorrectDetailsOptionalAmount tests that we're able to decode an
|
||||||
// UnknownPaymentHash error that doesn't have the optional amount. This ensures
|
// FailIncorrectDetails error that doesn't have the optional amount. This
|
||||||
// we're able to decode FailUnknownPaymentHash messages from older nodes.
|
// ensures we're able to decode FailIncorrectDetails messages from older nodes.
|
||||||
func TestFailUnknownPaymentHashOptionalAmount(t *testing.T) {
|
func TestFailIncorrectDetailsOptionalAmount(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
// Creation an error that is a non-pointer will allow us to skip the
|
// Creation an error that is a non-pointer will allow us to skip the
|
||||||
// type assertion for the Serializable interface. As a result, the
|
// type assertion for the Serializable interface. As a result, the
|
||||||
// amount body won't be written.
|
// amount body won't be written.
|
||||||
onionError := &FailUnknownPaymentHash{}
|
onionError := &FailIncorrectDetails{}
|
||||||
|
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
if err := EncodeFailure(&b, onionError, 0); err != nil {
|
if err := EncodeFailure(&b, onionError, 0); err != nil {
|
||||||
|
@ -527,7 +527,7 @@ func (m *MissionControl) applyPaymentResult(result *paymentResult) (
|
|||||||
// If the end destination didn't know the payment
|
// If the end destination didn't know the payment
|
||||||
// hash or we sent the wrong payment amount to the
|
// hash or we sent the wrong payment amount to the
|
||||||
// destination, then we'll terminate immediately.
|
// destination, then we'll terminate immediately.
|
||||||
case *lnwire.FailUnknownPaymentHash:
|
case *lnwire.FailIncorrectDetails:
|
||||||
// TODO(joostjager): Check onionErr.Amount() whether it matches
|
// TODO(joostjager): Check onionErr.Amount() whether it matches
|
||||||
// what we expect. (Will it ever not match, because if not
|
// what we expect. (Will it ever not match, because if not
|
||||||
// final_incorrect_htlc_amount would be returned?)
|
// final_incorrect_htlc_amount would be returned?)
|
||||||
|
@ -59,7 +59,7 @@ func TestMissionControlStore(t *testing.T) {
|
|||||||
|
|
||||||
result1 := paymentResult{
|
result1 := paymentResult{
|
||||||
route: &testRoute,
|
route: &testRoute,
|
||||||
failure: lnwire.NewFailUnknownPaymentHash(100),
|
failure: lnwire.NewFailIncorrectDetails(100),
|
||||||
failureSourceIdx: &failureSourceIdx,
|
failureSourceIdx: &failureSourceIdx,
|
||||||
id: 99,
|
id: 99,
|
||||||
timeReply: testTime,
|
timeReply: testTime,
|
||||||
|
Loading…
Reference in New Issue
Block a user