1
0
Fork 0
mirror of https://github.com/ACINQ/eclair.git synced 2025-03-12 19:01:39 +01:00

Add support for phoenix legacy migration messages

PhoenixAndroidLegacyMigrate is a message to signal migration readiness.
PhoenixAndroidLegacyMigrateResponse is the response confirming that the
peer acknowledges that this phoenix app is ready to migrate.
This commit is contained in:
dpad85 2022-03-24 16:38:06 +01:00
parent 11b2e27444
commit cad5b2a546
No known key found for this signature in database
GPG key ID: 574C8C6A1673E987
4 changed files with 27 additions and 0 deletions

View file

@ -154,6 +154,15 @@ class Peer(val nodeParams: NodeParams, remoteNodeId: PublicKey, watcher: ActorRe
d.peerConnection ! UnsetFCMToken
stay
case Event(s: SendPhoenixAndroidLegacyMigrate, d: ConnectedData) =>
d.peerConnection ! PhoenixAndroidLegacyMigrate(s.newNodeId)
stay
case Event(s: PhoenixAndroidLegacyMigrateResponse, d: ConnectedData) =>
d.peerConnection ! TransportHandler.ReadAck(s)
context.system.eventStream.publish(s)
stay
case Event(c: Peer.OpenChannel, d: ConnectedData) =>
if (c.fundingSatoshis >= Channel.MAX_FUNDING && !nodeParams.features.hasFeature(Wumbo)) {
sender ! Status.Failure(new RuntimeException(s"fundingSatoshis=${c.fundingSatoshis} is too big, you must enable large channels support in 'eclair.features' to use funding above ${Channel.MAX_FUNDING} (see eclair.conf)"))
@ -496,6 +505,7 @@ object Peer {
case class SendSwapInRequest(nodeId: PublicKey)
case class SendSetFCMToken(nodeId: PublicKey, token: String)
case class SendUnsetFCMToken(nodeId: PublicKey)
case class SendPhoenixAndroidLegacyMigrate(nodeId: PublicKey, newNodeId: PublicKey)
// @formatter:on
def makeChannelParams(nodeParams: NodeParams, defaultFinalScriptPubkey: ByteVector, localPaymentBasepoint: Option[PublicKey], isFunder: Boolean, fundingAmount: Satoshi): LocalParams = {

View file

@ -93,6 +93,12 @@ class Switchboard(nodeParams: NodeParams, watcher: ActorRef, relayer: ActorRef,
case None => log.error(s"could not discard fcm token to unknown peer=${f.nodeId}")
}
case d: Peer.SendPhoenixAndroidLegacyMigrate =>
getPeer(d.nodeId) match {
case Some(peer) => peer forward d
case None => sender ! Status.Failure(new RuntimeException("peer not found"))
}
case authenticated: PeerConnection.Authenticated =>
// if this is an incoming connection, we might not yet have created the peer
val peer = createOrGetPeer(authenticated.remoteNodeId, offlineChannels = Set.empty)

View file

@ -354,6 +354,12 @@ object LightningMessageCodecs {
val unsetFcmToken: Codec[UnsetFCMToken.type ] = provide(UnsetFCMToken)
val phoenixAndroidLegacyMigrateCodec: Codec[PhoenixAndroidLegacyMigrate] =
("newNodeId" | publicKey).as[PhoenixAndroidLegacyMigrate]
val phoenixAndroidLegacyMigrateResponseCodec: Codec[PhoenixAndroidLegacyMigrateResponse] =
("newNodeId" | publicKey).as[PhoenixAndroidLegacyMigrateResponse]
val lightningMessageCodec = discriminated[LightningMessage].by(uint16)
.typecase(16, initCodec)
.typecase(17, errorCodec)
@ -402,6 +408,8 @@ object LightningMessageCodecs {
.typecase(35017, setFcmTokenCodec)
.typecase(35019, unsetFcmToken)
.typecase(35025, phoenixAndroidLegacyMigrateCodec)
.typecase(35027, phoenixAndroidLegacyMigrateResponseCodec)
val meteredLightningMessageCodec = Codec[LightningMessage](
(msg: LightningMessage) => KamonExt.time(Metrics.EncodeDuration.withTag(Tags.MessageType, msg.getClass.getSimpleName))(lightningMessageCodec.encode(msg)),

View file

@ -375,3 +375,6 @@ case class SwapOutResponse(chainHash: ByteVector32,
case class SetFCMToken(token: String) extends LightningMessage
case object UnsetFCMToken extends LightningMessage
//
case class PhoenixAndroidLegacyMigrate(newNodeId: PublicKey) extends LightningMessage
case class PhoenixAndroidLegacyMigrateResponse(newNodeId: PublicKey) extends LightningMessage