Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions app/appmessage/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,10 @@ const (
CmdGetFeeEstimateResponseMessage
CmdSubmitTransactionReplacementRequestMessage
CmdSubmitTransactionReplacementResponseMessage
CmdGetPruningWindowRootsRequestMessage
CmdGetPruningWindowRootsResponseMessage
CmdAddArchivalBlocksRequestMessage
CmdAddArchivalBlocksResponseMessage
)

// ProtocolMessageCommandToString maps all MessageCommands to their string representation
Expand Down Expand Up @@ -308,6 +312,10 @@ var RPCMessageCommandToString = map[MessageCommand]string{
CmdGetFeeEstimateResponseMessage: "GetFeeEstimateResponse",
CmdSubmitTransactionReplacementRequestMessage: "SubmitTransactionReplacementRequest",
CmdSubmitTransactionReplacementResponseMessage: "SubmitTransactionReplacementResponse",
CmdGetPruningWindowRootsRequestMessage: "GetPruningWindowRootsRequestMessage",
CmdGetPruningWindowRootsResponseMessage: "GetPruningWindowRootsResponseMessage",
CmdAddArchivalBlocksRequestMessage: "AddArchivalBlocksRequestMessage",
CmdAddArchivalBlocksResponseMessage: "AddArchivalBlocksResponseMessage",
}

// Message is an interface that describes a kaspa message. A type that
Expand Down
54 changes: 54 additions & 0 deletions app/appmessage/rpc_add_archival_blocks.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package appmessage

type AcceptedTxEntry struct {
TransactionID string
IndexWithinBlock uint32
}

type MergesetBlockAcceptanceData struct {
BlockHash string
AcceptedTxs []*AcceptedTxEntry
}

type ArchivalBlock struct {
Block *RPCBlock
Child string
AcceptanceData []*MergesetBlockAcceptanceData
SelectedParent string
}

// AddArchivalBlocksRequestMessage represents a request to add archival blocks
type AddArchivalBlocksRequestMessage struct {
baseMessage
Blocks []*ArchivalBlock
}

// Command returns the protocol command string for the message
func (msg *AddArchivalBlocksRequestMessage) Command() MessageCommand {
return CmdAddArchivalBlocksRequestMessage
}

// NewAddArchivalBlocksRequestMessage returns a instance of the message
func NewAddArchivalBlocksRequestMessage(blocks []*ArchivalBlock) *AddArchivalBlocksRequestMessage {
return &AddArchivalBlocksRequestMessage{
Blocks: blocks,
}
}

// AddArchivalBlocksResponseMessage represents a response to the AddArchivalBlocks request
type AddArchivalBlocksResponseMessage struct {
baseMessage
Error *RPCError
}

// Command returns the protocol command string for the message
func (msg *AddArchivalBlocksResponseMessage) Command() MessageCommand {
return CmdAddArchivalBlocksResponseMessage
}

// NewAddArchivalBlocksResponseMessage returns a instance of the message
func NewAddArchivalBlocksResponseMessage(err *RPCError) *AddArchivalBlocksResponseMessage {
return &AddArchivalBlocksResponseMessage{
Error: err,
}
}
30 changes: 30 additions & 0 deletions app/appmessage/rpc_get_pruning_window_roots.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package appmessage

// GetPruningWindowRootsRequestMessage is an appmessage corresponding to
// its respective RPC message
type GetPruningWindowRootsRequestMessage struct {
baseMessage
}

// Command returns the protocol command string for the message
func (msg *GetPruningWindowRootsRequestMessage) Command() MessageCommand {
return CmdGetPruningWindowRootsRequestMessage
}

type PruningWindowRoots struct {
PPRoots []string
PPIndex uint64
}

// GetPruningWindowRootsResponseMessage is an appmessage corresponding to
// its respective RPC message
type GetPruningWindowRootsResponseMessage struct {
baseMessage
Roots []*PruningWindowRoots
Error *RPCError
}

// Command returns the protocol command string for the message
func (msg *GetPruningWindowRootsResponseMessage) Command() MessageCommand {
return CmdGetPruningWindowRootsResponseMessage
}
76 changes: 76 additions & 0 deletions cmd/archiveexport/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package main

import (
"fmt"
"os"
"path/filepath"
"strconv"
"strings"

"github.com/kaspanet/kaspad/infrastructure/config"

"github.com/kaspanet/kaspad/util"
"github.com/pkg/errors"

"github.com/jessevdk/go-flags"
"github.com/kaspanet/kaspad/version"
)

const (
defaultLogFilename = "archiveexport.log"
defaultErrLogFilename = "archiveexport_err.log"
)

var (
// Default configuration options
defaultAppDir = util.AppDir("archiveexport", false)
defaultLogFile = filepath.Join(defaultAppDir, defaultLogFilename)
defaultErrLogFile = filepath.Join(defaultAppDir, defaultErrLogFilename)
defaultRPCServer = "localhost"
defaultDataDir = filepath.Join(config.DefaultAppDir)
)

type configFlags struct {
ShowVersion bool `short:"V" long:"version" description:"Display version information and exit"`
RPCServer string `short:"s" long:"rpcserver" description:"RPC server to connect to"`
Profile string `long:"profile" description:"Enable HTTP profiling on given port -- NOTE port must be between 1024 and 65536"`
AppDir string `short:"b" long:"appdir" description:"Node datadir"`
config.NetworkFlags
}

func parseConfig() (*configFlags, error) {
cfg := &configFlags{
RPCServer: defaultRPCServer,
AppDir: defaultDataDir,
}
parser := flags.NewParser(cfg, flags.PrintErrors|flags.HelpFlag)
_, err := parser.Parse()

// Show the version and exit if the version flag was specified.
if cfg.ShowVersion {
appName := filepath.Base(os.Args[0])
appName = strings.TrimSuffix(appName, filepath.Ext(appName))
fmt.Println(appName, "version", version.Version())
os.Exit(0)
}

if err != nil {
return nil, err
}

err = cfg.ResolveNetwork(parser)
if err != nil {
return nil, err
}

if cfg.Profile != "" {
profilePort, err := strconv.Atoi(cfg.Profile)
if err != nil || profilePort < 1024 || profilePort > 65535 {
return nil, errors.New("The profile port must be between 1024 and 65535")
}
}

initLog(defaultLogFile, defaultErrLogFile)

return cfg, nil
}
39 changes: 39 additions & 0 deletions cmd/archiveexport/log.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package main

import (
"fmt"
"github.com/kaspanet/kaspad/infrastructure/logger"
"github.com/kaspanet/kaspad/util/panics"
"os"
)

var (
backendLog = logger.NewBackend()
log = backendLog.Logger("ARCH")
spawn = panics.GoroutineWrapperFunc(log)
)

func initLog(logFile, errLogFile string) {
log.SetLevel(logger.LevelDebug)
err := backendLog.AddLogFile(logFile, logger.LevelTrace)
if err != nil {
fmt.Fprintf(os.Stderr, "Error adding log file %s as log rotator for level %s: %s", logFile, logger.LevelTrace, err)
os.Exit(1)
}
err = backendLog.AddLogFile(errLogFile, logger.LevelWarn)
if err != nil {
fmt.Fprintf(os.Stderr, "Error adding log file %s as log rotator for level %s: %s", errLogFile, logger.LevelWarn, err)
os.Exit(1)
}
err = backendLog.AddLogWriter(os.Stdout, logger.LevelInfo)
if err != nil {
fmt.Fprintf(os.Stderr, "Error adding stdout to the loggerfor level %s: %s", logger.LevelWarn, err)
os.Exit(1)
}
err = backendLog.Run()
if err != nil {
fmt.Fprintf(os.Stderr, "Error starting the logger: %s ", err)
os.Exit(1)
}

}
Loading
Loading