Perdón por la pregunta tonta, pero no soy muy bueno en Lightning Network... Así que tengo dos demonios: c-lightning
y LND
.
Canales de la c-lightning
viene así 505580:1917:1
; Canales de la LND
viene así 556369376388317185
;
¿Es posible llevarlos a un solo formato? Por ejemplo , ¿ c-lightning
convertir a un número entero simple LND
para encontrar los mismos canales de ambos demonios?
La especificación de short_channel_id
describe el formato de la siguiente manera:
es la
short_channel_id
descripción única de la transacción de financiación. Se construye de la siguiente manera:
- los 3 bytes más significativos: indicando la altura del bloque
- los siguientes 3 bytes: indicando el índice de transacción dentro del bloque
- los 2 bytes menos significativos: indica el índice de salida que paga al canal.
Por lo tanto, para convertir entre los dos formatos, puede usar los siguientes fragmentos de Python:
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]
La razón por la que (c-lightning) usamos el formato punteado es porque nos permite buscar el TX de financiamiento sin tener que hacer una conversión (y generalmente es más corto que la u64
representación)
// 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
como separador en lugar de:
, mientras que los dos puntos eran muy legibles, se puede hacer doble clic en los identificadores de canales cortos que usan x como separador.