mirror of
https://github.com/ZmnSCPxj/clboss.git
synced 2026-08-13 12:33:20 +02:00
The track-record pass orders open proposals keepers, no-record, underperformers. The no-record tier carries no earnings evidence, so order it by a capability prior: nodes whose node_announcement advertises splicing (BOLT 9 option_splice, bits 62/63) come first, since their channels can later be resized without a close and reopen. Keepers and underperformers keep their earnings-based order, and nothing moves across a tier boundary. New Ln::feature_bit tests a bit in a BOLT 9 hex bitfield (bit 0 is the least-significant bit of the last byte), with a unit test. Spliceability is looked up per candidate via listnodes; an RPC failure or absent features field counts as not spliceable, so the lookup cannot block channel creation. The Track records report marks spliceable no-record nodes with an (S) suffix.
39 lines
1.1 KiB
C++
39 lines
1.1 KiB
C++
#undef NDEBUG
|
|
#include"Ln/FeatureBit.hpp"
|
|
#include<assert.h>
|
|
|
|
int main() {
|
|
using Ln::feature_bit;
|
|
|
|
/* Bit 0 is the least-significant bit of the last byte. */
|
|
assert( feature_bit("01", 0));
|
|
assert(!feature_bit("01", 1));
|
|
assert( feature_bit("02", 1));
|
|
assert(!feature_bit("02", 0));
|
|
|
|
/* Bits beyond the field are unset. */
|
|
assert(!feature_bit("01", 8));
|
|
assert(!feature_bit("", 0));
|
|
|
|
/* Multi-byte: bit 8 is the least-significant bit of the
|
|
* second-to-last byte. */
|
|
assert( feature_bit("0100", 8));
|
|
assert(!feature_bit("0100", 0));
|
|
|
|
/* option_splice bits 62/63 need an 8-byte field; bit 62 is
|
|
* 0x40 of the leading byte, bit 63 is 0x80. */
|
|
assert( feature_bit("4000000000000000", 62));
|
|
assert(!feature_bit("4000000000000000", 63));
|
|
assert( feature_bit("8000000000000000", 63));
|
|
assert(!feature_bit("8000000000000000", 62));
|
|
|
|
/* Longer fields keep bit positions anchored at the tail. */
|
|
assert( feature_bit("00004000000000000000", 62));
|
|
assert( feature_bit("888a4000000000000000", 62));
|
|
|
|
/* Malformed hex is just "no features". */
|
|
assert(!feature_bit("xyz", 0));
|
|
assert(!feature_bit("0", 0));
|
|
|
|
return 0;
|
|
}
|