mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-21 22:36:42 +00:00

* [NOD-510] Change coinbase flags to kaspad. * [NOD-510] Removed superfluous spaces after periods in comments. * [NOD-510] Rename btcd -> kaspad in the root folder. * [NOD-510] Rename BtcEncode -> KaspaEncode and BtcDecode -> KaspaDecode. * [NOD-510] Rename BtcEncode -> KaspaEncode and BtcDecode -> KaspaDecode. * [NOD-510] Continue renaming btcd -> kaspad. * [NOD-510] Rename btcjson -> kaspajson. * [NOD-510] Rename file names inside kaspajson. * [NOD-510] Rename kaspajson -> jsonrpc. * [NOD-510] Finish renaming in addrmgr. * [NOD-510] Rename package btcec to ecc. * [NOD-510] Finish renaming stuff in blockdag. * [NOD-510] Rename stuff in cmd. * [NOD-510] Rename stuff in config. * [NOD-510] Rename stuff in connmgr. * [NOD-510] Rename stuff in dagconfig. * [NOD-510] Rename stuff in database. * [NOD-510] Rename stuff in docker. * [NOD-510] Rename stuff in integration. * [NOD-510] Rename jsonrpc to rpcmodel. * [NOD-510] Rename stuff in limits. * [NOD-510] Rename stuff in logger. * [NOD-510] Rename stuff in mempool. * [NOD-510] Rename stuff in mining. * [NOD-510] Rename stuff in netsync. * [NOD-510] Rename stuff in peer. * [NOD-510] Rename stuff in release. * [NOD-510] Rename stuff in rpcclient. * [NOD-510] Rename stuff in server. * [NOD-510] Rename stuff in signal. * [NOD-510] Rename stuff in txscript. * [NOD-510] Rename stuff in util. * [NOD-510] Rename stuff in wire. * [NOD-510] Fix failing tests. * [NOD-510] Fix merge errors. * [NOD-510] Fix go vet errors. * [NOD-510] Remove merged file that's no longer relevant. * [NOD-510] Add a comment above Op0. * [NOD-510] Fix some comments referencing Bitcoin Core. * [NOD-510] Fix some more comments referencing Bitcoin Core. * [NOD-510] Fix bitcoin -> kaspa. * [NOD-510] Fix more bitcoin -> kaspa. * [NOD-510] Fix comments, remove DisconnectBlock in addrindex. * [NOD-510] Rename KSPD to KASD. * [NOD-510] Fix comments and user agent.
88 lines
2.6 KiB
Go
88 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"github.com/kaspanet/kaspad/blockdag"
|
|
"github.com/kaspanet/kaspad/rpcclient"
|
|
"github.com/kaspanet/kaspad/rpcmodel"
|
|
"github.com/kaspanet/kaspad/util/subnetworkid"
|
|
"github.com/pkg/errors"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
getSubnetworkRetryDelay = 5 * time.Second
|
|
maxGetSubnetworkRetries = 12
|
|
)
|
|
|
|
func main() {
|
|
cfg, err := parseConfig()
|
|
if err != nil {
|
|
panic(errors.Errorf("error parsing command-line arguments: %s", err))
|
|
}
|
|
|
|
privateKey, addrPubKeyHash, err := decodeKeys(cfg)
|
|
if err != nil {
|
|
panic(errors.Errorf("error decoding public key: %s", err))
|
|
}
|
|
|
|
client, err := connect(cfg)
|
|
if err != nil {
|
|
panic(errors.Errorf("could not connect to RPC server: %s", err))
|
|
}
|
|
log.Infof("Connected to server %s", cfg.RPCServer)
|
|
|
|
fundingOutpoint, fundingTx, err := findUnspentTXO(cfg, client, addrPubKeyHash)
|
|
if err != nil {
|
|
panic(errors.Errorf("error finding unspent transactions: %s", err))
|
|
}
|
|
if fundingOutpoint == nil || fundingTx == nil {
|
|
panic(errors.Errorf("could not find any unspent transactions this for key"))
|
|
}
|
|
log.Infof("Found transaction to spend: %s:%d", fundingOutpoint.TxID, fundingOutpoint.Index)
|
|
|
|
registryTx, err := buildSubnetworkRegistryTx(cfg, fundingOutpoint, fundingTx, privateKey)
|
|
if err != nil {
|
|
panic(errors.Errorf("error building subnetwork registry tx: %s", err))
|
|
}
|
|
|
|
_, err = client.SendRawTransaction(registryTx, true)
|
|
if err != nil {
|
|
panic(errors.Errorf("failed sending subnetwork registry tx: %s", err))
|
|
}
|
|
log.Infof("Successfully sent subnetwork registry transaction")
|
|
|
|
subnetworkID, err := blockdag.TxToSubnetworkID(registryTx)
|
|
if err != nil {
|
|
panic(errors.Errorf("could not build subnetwork ID: %s", err))
|
|
}
|
|
|
|
err = waitForSubnetworkToBecomeAccepted(client, subnetworkID)
|
|
if err != nil {
|
|
panic(errors.Errorf("error waiting for subnetwork to become accepted: %s", err))
|
|
}
|
|
log.Infof("Subnetwork '%s' was successfully registered.", subnetworkID)
|
|
}
|
|
|
|
func waitForSubnetworkToBecomeAccepted(client *rpcclient.Client, subnetworkID *subnetworkid.SubnetworkID) error {
|
|
retries := 0
|
|
for {
|
|
_, err := client.GetSubnetwork(subnetworkID.String())
|
|
if err != nil {
|
|
if rpcError, ok := err.(*rpcmodel.RPCError); ok && rpcError.Code == rpcmodel.ErrRPCSubnetworkNotFound {
|
|
log.Infof("Subnetwork not found")
|
|
|
|
retries++
|
|
if retries == maxGetSubnetworkRetries {
|
|
return errors.Errorf("failed to get subnetwork %d times: %s", maxGetSubnetworkRetries, err)
|
|
}
|
|
|
|
log.Infof("Waiting %d seconds...", int(getSubnetworkRetryDelay.Seconds()))
|
|
<-time.After(getSubnetworkRetryDelay)
|
|
continue
|
|
}
|
|
return errors.Errorf("failed getting subnetwork: %s", err)
|
|
}
|
|
return nil
|
|
}
|
|
}
|