From eba5915f8cfc136f4e82078ff1748a07cc222070 Mon Sep 17 00:00:00 2001 From: Pierre-Marie Padiou Date: Tue, 28 Mar 2017 14:05:52 +0200 Subject: [PATCH] Use chain getblockchaininfo.chain to infer the magic value (#45) * use chain getblockchaininfo.chain to infer the magic value, remove bitcoind.network conf parameter (closes #43) * minor: renamed socket->socketAddress, also rebased --- eclair-node/src/main/resources/application.conf | 1 - .../src/main/scala/fr/acinq/eclair/Boot.scala | 12 ++++++++---- .../acinq/eclair/blockchain/peer/PeerClient.scala | 13 +++---------- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/eclair-node/src/main/resources/application.conf b/eclair-node/src/main/resources/application.conf index ba4fa8aed..9291202c1 100644 --- a/eclair-node/src/main/resources/application.conf +++ b/eclair-node/src/main/resources/application.conf @@ -9,7 +9,6 @@ eclair { port = 8080 } bitcoind { - network = "regtest" host = "localhost" port = 18333 rpcport = 18332 diff --git a/eclair-node/src/main/scala/fr/acinq/eclair/Boot.scala b/eclair-node/src/main/scala/fr/acinq/eclair/Boot.scala index be54db052..0dae1d9a6 100644 --- a/eclair-node/src/main/scala/fr/acinq/eclair/Boot.scala +++ b/eclair-node/src/main/scala/fr/acinq/eclair/Boot.scala @@ -13,7 +13,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent import ch.qos.logback.classic.{Logger, LoggerContext} import ch.qos.logback.core.FileAppender import com.sun.javafx.application.LauncherImpl -import fr.acinq.bitcoin.{Base58Check, OP_CHECKSIG, OP_DUP, OP_EQUALVERIFY, OP_HASH160, OP_PUSHDATA, Script} +import fr.acinq.bitcoin.{Base58Check, Message, OP_CHECKSIG, OP_DUP, OP_EQUALVERIFY, OP_HASH160, OP_PUSHDATA, Script} import fr.acinq.eclair.api.Service import fr.acinq.eclair.blockchain.peer.PeerClient import fr.acinq.eclair.blockchain.rpc.BitcoinJsonRPCClient @@ -76,7 +76,12 @@ class Setup(datadir: String) extends Logging { implicit val formats = org.json4s.DefaultFormats implicit val ec = ExecutionContext.Implicits.global val (chain, blockCount, progress) = Await.result(bitcoin_client.client.invoke("getblockchaininfo").map(json => ((json \ "chain").extract[String], (json \ "blocks").extract[Long], (json \ "verificationprogress").extract[Double])), 10 seconds) - assert(chain == "test" || chain == "regtest" || chain == "segnet4", "you should be on testnet or regtest or segnet4") + logger.info(s"using chain=$chain") + val magic = chain match { + case "test" => Message.MagicTestnet3 + case "regtest" => Message.MagicTestNet + case _ => throw new RuntimeException("only regtest and testnet are supported for now") + } assert(progress > 0.99, "bitcoind should be synchronized") Globals.blockCount.set(blockCount) val defaultFeeratePerKw = config.getLong("default-feerate-perkw") @@ -95,8 +100,7 @@ class Setup(datadir: String) extends Logging { //val finalScriptPubKey = OP_0 :: OP_PUSHDATA(Base58Check.decode(finalAddress)._2) :: Nil val finalScriptPubKey = Script.write(OP_DUP :: OP_HASH160 :: OP_PUSHDATA(Base58Check.decode(finalAddress)._2) :: OP_EQUALVERIFY :: OP_CHECKSIG :: Nil) - - val peer = system.actorOf(SimpleSupervisor.props(PeerClient.props(config.getConfig("bitcoind")), "bitcoin-peer", SupervisorStrategy.Restart)) + val peer = system.actorOf(SimpleSupervisor.props(PeerClient.props(new InetSocketAddress(config.getString("bitcoind.host"), config.getInt("bitcoind.port")), magic), "bitcoin-peer", SupervisorStrategy.Restart)) val watcher = system.actorOf(SimpleSupervisor.props(PeerWatcher.props(nodeParams, bitcoin_client), "watcher", SupervisorStrategy.Resume)) val paymentHandler = system.actorOf(SimpleSupervisor.props(config.getString("payment-handler") match { case "local" => Props[LocalPaymentHandler] diff --git a/eclair-node/src/main/scala/fr/acinq/eclair/blockchain/peer/PeerClient.scala b/eclair-node/src/main/scala/fr/acinq/eclair/blockchain/peer/PeerClient.scala index cba190932..b8cc53fba 100644 --- a/eclair-node/src/main/scala/fr/acinq/eclair/blockchain/peer/PeerClient.scala +++ b/eclair-node/src/main/scala/fr/acinq/eclair/blockchain/peer/PeerClient.scala @@ -5,23 +5,16 @@ import java.net.InetSocketAddress import akka.actor._ import akka.io.Tcp.Connected import akka.pattern.{Backoff, BackoffSupervisor} -import com.typesafe.config.Config import fr.acinq.bitcoin._ import scala.compat.Platform import scala.concurrent.duration._ -class PeerClient(config: Config) extends Actor with ActorLogging { +class PeerClient(socketAddress: InetSocketAddress, magic: Long) extends Actor with ActorLogging { - val magic = config.getString("network") match { - case "mainnet" => Message.MagicMain - case "test" => Message.MagicTestnet3 - case "regtest" => Message.MagicTestNet - } - val peer = new InetSocketAddress(config.getString("host"), config.getInt("port")) val supervisor = BackoffSupervisor.props( Backoff.onStop( - Props(classOf[PeerHandler], peer, self), + Props(classOf[PeerHandler], socketAddress, self), childName = "peer-conn", minBackoff = 1 seconds, maxBackoff = 10 seconds, @@ -75,7 +68,7 @@ class PeerClient(config: Config) extends Actor with ActorLogging { } object PeerClient { - def props(config: Config) = Props(new PeerClient(config)) + def props(socketAddress: InetSocketAddress, magic: Long) = Props(new PeerClient(socketAddress, magic)) } object PeerClientTest extends App {