Entschuldigen Sie die dumme Frage, aber ich bin nicht sehr gut im Lightning-Netzwerk ... Also habe ich zwei Daemons: c-lightning
und LND
.
Kanäle aus dem c-lightning
kommt so 505580:1917:1
; Kanäle aus dem LND
kommt so 556369376388317185
;
Ist es möglich, sie auf ein einziges Format zu bringen? Zum Beispiel c-lightning
in eine einfache Ganzzahl konvertieren, LND
um dieselben Kanäle von beiden Daemons zu finden?
Die Spezifikation des short_channel_id
beschreibt das Format wie folgt:
Dies
short_channel_id
ist die eindeutige Beschreibung der Finanzierungstransaktion. Es ist wie folgt aufgebaut:
- die höchstwertigen 3 Bytes: geben die Blockhöhe an
- die nächsten 3 Bytes: geben den Transaktionsindex innerhalb des Blocks an
- die niederwertigsten 2 Bytes: geben den Ausgangsindex an, der an den Kanal gezahlt wird.
Um zwischen den beiden Formaten zu konvertieren, können Sie daher die folgenden Python-Snippets verwenden:
def lnd_to_cl_scid(s):
block = s >> 40
tx = s >> 16 & 0xFFFFFF
output = s & 0xFFFF
return (block, tx, output)
def cl_to_lnd_scid(s):
s = [int(i) for i in s.split(':')]
return (s[0] << 40) | (s[1] << 16) | s[2]
Der Grund, warum wir (c-lightning) das gepunktete Format verwenden, ist, dass es uns ermöglicht, die Finanzierungs-TX nachzuschlagen, ohne eine Konvertierung durchführen zu müssen (und es ist normalerweise kürzer als die u64
Darstellung) .
// NewShortChanIDFromInt returns a new ShortChannelID which is the decoded
// version of the compact channel ID encoded within the uint64. The format of
// the compact channel ID is as follows: 3 bytes for the block height, 3 bytes
// for the transaction index, and 2 bytes for the output index.
func NewShortChanIDFromInt(chanID uint64) ShortChannelID {
return ShortChannelID{
BlockHeight: uint32(chanID >> 40),
TxIndex: uint32(chanID>>16) & 0xFFFFFF,
TxPosition: uint16(chanID),
}
}
// ToUint64 converts the ShortChannelID into a compact format encoded within a
// uint64 (8 bytes).
func (c ShortChannelID) ToUint64() uint64 {
// TODO(roasbeef): explicit error on overflow?
return ((uint64(c.BlockHeight) << 40) | (uint64(c.TxIndex) << 16) |
(uint64(c.TxPosition)))
}
René Pickhardt
x
als Trennzeichen verwendet werden,:
während der Doppelpunkt gut lesbar war, sind die kurzen Kanal-IDs, die x als Trennzeichen verwenden, doppelklickbar.