kaspad/cmd/txgen/main.go
Ori Newman b7b41f1a94 [NOD-159] Wrap all goroutines to handle panics (#290)
* [NOD-159] Wrap all goroutines to handle panics

* [NOD-159] Fix gofmt errors

* [NOD-159] Add comment to HandlePanic

* [NOD-159] Merge panics and gowrapper packages

* [NOD-159] Added missing initialization
2019-05-07 16:13:06 +03:00

78 lines
1.9 KiB
Go

package main
import (
"fmt"
"sync/atomic"
"github.com/daglabs/btcd/btcec"
"github.com/daglabs/btcd/dagconfig"
"github.com/daglabs/btcd/rpcclient"
"github.com/daglabs/btcd/signal"
"github.com/daglabs/btcd/util"
"github.com/daglabs/btcd/util/base58"
"github.com/daglabs/btcd/util/panics"
)
var (
isRunning int32
activeNetParams *dagconfig.Params = &dagconfig.DevNetParams
p2pkhAddress util.Address
privateKey *btcec.PrivateKey
)
// privateKeyToP2pkhAddress generates p2pkh address from private key.
func privateKeyToP2pkhAddress(key *btcec.PrivateKey, net *dagconfig.Params) (util.Address, error) {
serializedKey := key.PubKey().SerializeCompressed()
pubKeyAddr, err := util.NewAddressPubKey(serializedKey, net.Prefix)
if err != nil {
return nil, err
}
return pubKeyAddr.AddressPubKeyHash(), nil
}
func main() {
defer panics.HandlePanic(log)
cfg, err := parseConfig()
if err != nil {
panic(fmt.Errorf("Error parsing command-line arguments: %s", err))
}
privateKeyBytes := base58.Decode(cfg.PrivateKey)
privateKey, _ = btcec.PrivKeyFromBytes(btcec.S256(), privateKeyBytes)
p2pkhAddress, err = privateKeyToP2pkhAddress(privateKey, activeNetParams)
if err != nil {
panic(fmt.Errorf("Failed to get P2PKH address from private key: %s", err))
}
log.Infof("P2PKH address for private key: %s\n", p2pkhAddress)
addressList, err := getAddressList(cfg)
if err != nil {
panic(fmt.Errorf("Couldn't load address list: %s", err))
}
clients, err := connectToServers(cfg, addressList)
if err != nil {
panic(fmt.Errorf("Error connecting to servers: %s", err))
}
defer disconnect(clients)
atomic.StoreInt32(&isRunning, 1)
go txLoop(clients)
interrupt := signal.InterruptListener()
<-interrupt
atomic.StoreInt32(&isRunning, 0)
}
func disconnect(clients []*rpcclient.Client) {
log.Infof("Disconnecting clients")
for _, client := range clients {
client.Disconnect()
}
}