1
0
Fork 0
mirror of https://github.com/ACINQ/eclair.git synced 2025-02-23 06:35:11 +01:00

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
This commit is contained in:
Pierre-Marie Padiou 2017-03-28 14:05:52 +02:00 committed by Fabrice Drouin
parent 16d3960f75
commit eba5915f8c
3 changed files with 11 additions and 15 deletions

View file

@ -9,7 +9,6 @@ eclair {
port = 8080
}
bitcoind {
network = "regtest"
host = "localhost"
port = 18333
rpcport = 18332

View file

@ -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]

View file

@ -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 {