miners.go raw
1 // +build !nominers
2
3 package launchers
4
5 import (
6 "fmt"
7 "net/rpc"
8 "os"
9
10 "github.com/p9c/p9/pkg/log"
11 "github.com/p9c/p9/cmd/kopach"
12 "github.com/p9c/p9/cmd/kopach/worker"
13 "github.com/p9c/p9/pod/state"
14
15 "github.com/p9c/p9/pkg/interrupt"
16
17 "github.com/p9c/p9/pkg/chaincfg"
18 "github.com/p9c/p9/pkg/fork"
19 )
20
21 // Kopach runs the kopach miner
22 func Kopach(ifc interface{}) (e error) {
23 var cx *state.State
24 var ok bool
25 if cx, ok = ifc.(*state.State); !ok {
26 return fmt.Errorf("cannot run without a state")
27 }
28 // log.AppColorizer = color.Bit24(255, 128, 128, false).Sprint
29 // log.App = "kopach"
30 I.Ln("starting up kopach standalone miner for parallelcoin")
31 D.Ln(os.Args)
32 // podconfig.Configure(cx, true)
33 if cx.ActiveNet.Name == chaincfg.TestNet3Params.Name {
34 fork.IsTestnet = true
35 }
36 defer cx.KillAll.Q()
37 e = kopach.Run(cx)
38 <-interrupt.HandlersDone
39 D.Ln("kopach main finished")
40 return
41 }
42
43 func Worker(ifc interface{}) (e error) {
44 var cx *state.State
45 var ok bool
46 if cx, ok = ifc.(*state.State); !ok {
47 return fmt.Errorf("cannot run without a state")
48 }
49 // I.Ln(cx.Config.ExtraArgs)
50 if len(cx.Config.ExtraArgs) > 1 {
51 if os.Args[3] == chaincfg.TestNet3Params.Name {
52 fork.IsTestnet = true
53 }
54 }
55 if len(os.Args) > 2 {
56 log.SetLogLevel(os.Args[4])
57 }
58 D.Ln("miner worker starting")
59 w, conn := worker.New(cx.Config.ExtraArgs[0], cx.KillAll,
60 uint64(cx.Config.UUID.V()))
61 e = rpc.Register(w)
62 if e != nil {
63 D.Ln(e)
64 return e
65 }
66 D.Ln("starting up worker IPC")
67 rpc.ServeConn(conn)
68 D.Ln("stopping worker IPC")
69 D.Ln("finished")
70 return nil
71 }
72