Svarog 047a2c16c4 [NOD-70] Added mining simluator (#228)
* [NOD-70] Added GetBlockTemplate method to rpcclient

* [NOD-70] Basic infrastructure for mining simulator

* [NOD-70] Fix txFees in NewBlockTempalte: include value for fee transaction + don't set fee for coinbase = -totalFees.

* [NOD-70] Added capabilities parameter to Client.GetBlockTemplate call

* [NOD-70] Dirty version of mining simulator complete

* [NOD-70] cleaned up mining simulator

* [NOD-70] Added dockerfile to mining simulator

* [NOD-70] Updated base config path of mining simulator to mining_simulator

* [NOD-70] Remove error return from msgblock.AddTransaction - it never returns one

* [NOD-70] Renamed r -> random

* [NOD-70] Move paths initialization of mining simulator to main

* [NOD-70] Cleaned up mining simulator dockerfile

* [NOD-70] Add '--' to tini argument
2019-03-26 16:37:44 +02:00

70 lines
1.2 KiB
Go

package main
import (
"fmt"
"log"
"os/user"
"path"
"runtime/debug"
"sync/atomic"
"github.com/daglabs/btcd/rpcclient"
)
var isRunning int32
func main() {
defer handlePanic()
err := initPaths()
if err != nil {
panic(fmt.Errorf("Error initializing paths: %s", err))
}
addressList, err := getAddressList()
if err != nil {
panic(fmt.Errorf("Couldn't load address list: %s", err))
}
clients, err := connectToServers(addressList)
if err != nil {
panic(fmt.Errorf("Error connecting to servers: %s", err))
}
defer disconnect(clients)
atomic.StoreInt32(&isRunning, 1)
err = mineLoop(clients)
if err != nil {
panic(fmt.Errorf("Error in main loop: %s", err))
}
}
func initPaths() error {
usr, err := user.Current()
if err != nil {
return fmt.Errorf("Error getting current user: %s", err)
}
basePath := ".btcd/mining_simulator"
certificatePath = path.Join(usr.HomeDir, basePath, "rpc.cert")
addressListPath = path.Join(usr.HomeDir, basePath, "addresses")
return nil
}
func disconnect(clients []*rpcclient.Client) {
for _, client := range clients {
client.Disconnect()
}
}
func handlePanic() {
err := recover()
if err != nil {
log.Printf("Fatal error: %s", err)
log.Printf("Stack trace: %s", debug.Stack())
}
}