Skip to content

Commit

Permalink
Merge pull request #44 from kaspa-live/kaspad-v0.12.2
Browse files Browse the repository at this point in the history
Align to kaspad v0.12.2
  • Loading branch information
tiram88 authored Jun 20, 2022
2 parents ebc7253 + 1ed802c commit 5f2e715
Show file tree
Hide file tree
Showing 9 changed files with 166 additions and 97 deletions.
2 changes: 1 addition & 1 deletion processing/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ require (
github.com/go-pg/pg/v10 v10.10.6
github.com/golang-migrate/migrate/v4 v4.14.1
github.com/jessevdk/go-flags v1.4.0
github.com/kaspanet/kaspad v0.12.1
github.com/kaspanet/kaspad v0.12.2
github.com/pkg/errors v0.9.1
golang.org/x/exp v0.0.0-20220414153411-bcd21879b8fd
)
Expand Down
26 changes: 25 additions & 1 deletion processing/infrastructure/logging/logging.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ package logging

import (
"fmt"
"github.com/kaspanet/kaspad/infrastructure/logger"
"os"
"time"

"github.com/kaspanet/kaspad/infrastructure/logger"
)

var (
Expand Down Expand Up @@ -36,3 +38,25 @@ func UpdateLogLevels() {
func Logger() *logger.Logger {
return log
}

func LogErrorAndExit(errorLog string, logParameters ...interface{}) {
// If LoadConfig failed, the logger backend may not have been run yet
if !log.Backend().IsRunning() {
logger.InitLogStdout(logger.LevelInfo)
UpdateLogLevels()
}

log.Errorf(errorLog, logParameters...)

exitHandlerDone := make(chan struct{})
go func() {
log.Backend().Close()
close(exitHandlerDone)
}()
select {
case <-time.After(1 * time.Second):
case <-exitHandlerDone:
}

os.Exit(1)
}
20 changes: 10 additions & 10 deletions processing/kaspad/domain/consensus/consensus.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,29 +38,29 @@ type Consensus struct {
onVirtualResolvedListener OnVirtualResolvedListener
}

func (c *Consensus) ValidateAndInsertBlock(block *externalapi.DomainBlock, shouldValidateAgainstUTXO bool) (*externalapi.VirtualChangeSet, error) {
blockInsertionResult, err := c.kaspadConsensus.ValidateAndInsertBlock(block, shouldValidateAgainstUTXO)
func (c *Consensus) ValidateAndInsertBlock(block *externalapi.DomainBlock, shouldValidateAgainstUTXO bool) error {
err := c.kaspadConsensus.ValidateAndInsertBlock(block, shouldValidateAgainstUTXO)
if err != nil {
return nil, err
return err
}
if c.onBlockAddedListener != nil {
c.onBlockAddedListener(block, blockInsertionResult)
c.onBlockAddedListener(block)
}
return blockInsertionResult, nil
return nil
}

func (c *Consensus) ResolveVirtual() (*externalapi.VirtualChangeSet, bool, error) {
virtualChangeSet, isCompletelyResolved, err := c.kaspadConsensus.ResolveVirtual()
func (c *Consensus) ResolveVirtual() (bool, error) {
isCompletelyResolved, err := c.kaspadConsensus.ResolveVirtual()
if err != nil {
return nil, false, err
return false, err
}
if c.onVirtualResolvedListener != nil {
c.onVirtualResolvedListener()
}
return virtualChangeSet, isCompletelyResolved, nil
return isCompletelyResolved, nil
}

type OnBlockAddedListener func(*externalapi.DomainBlock, *externalapi.VirtualChangeSet)
type OnBlockAddedListener func(*externalapi.DomainBlock)
type OnVirtualResolvedListener func()

func (c *Consensus) SetOnBlockAddedListener(listener OnBlockAddedListener) {
Expand Down
14 changes: 9 additions & 5 deletions processing/kaspad/domain/consensus/override.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,6 @@ func (c *Consensus) GetBlockInfo(blockHash *externalapi.DomainHash) (*externalap
return c.kaspadConsensus.GetBlockInfo(blockHash)
}

func (c *Consensus) GetBlockAcceptanceData(blockHash *externalapi.DomainHash) (externalapi.AcceptanceData, error) {
return c.kaspadConsensus.GetBlockAcceptanceData(blockHash)
}

func (c *Consensus) GetHashesBetween(lowHash, highHash *externalapi.DomainHash, maxBlueScoreDifference uint64) (
[]*externalapi.DomainHash, *externalapi.DomainHash, error) {

Expand Down Expand Up @@ -110,6 +106,14 @@ func (c *Consensus) GetBlockRelations(blockHash *externalapi.DomainHash) (
return c.kaspadConsensus.GetBlockRelations(blockHash)
}

func (s *Consensus) GetBlockAcceptanceData(blockHash *externalapi.DomainHash) (externalapi.AcceptanceData, error) {
return s.kaspadConsensus.GetBlockAcceptanceData(blockHash)
}

func (s *Consensus) GetBlocksAcceptanceData(blockHashes []*externalapi.DomainHash) ([]externalapi.AcceptanceData, error) {
return s.kaspadConsensus.GetBlocksAcceptanceData(blockHashes)
}

func (c *Consensus) GetBlockEvenIfHeaderOnly(blockHash *externalapi.DomainHash) (*externalapi.DomainBlock, error) {
return c.kaspadConsensus.GetBlockEvenIfHeaderOnly(blockHash)
}
Expand Down Expand Up @@ -142,7 +146,7 @@ func (c *Consensus) PopulateMass(transaction *externalapi.DomainTransaction) {
c.kaspadConsensus.PopulateMass(transaction)
}

func (c *Consensus) ValidateAndInsertBlockWithTrustedData(block *externalapi.BlockWithTrustedData, validateUTXO bool) (*externalapi.VirtualChangeSet, error) {
func (c *Consensus) ValidateAndInsertBlockWithTrustedData(block *externalapi.BlockWithTrustedData, validateUTXO bool) error {
return c.kaspadConsensus.ValidateAndInsertBlockWithTrustedData(block, validateUTXO)
}

Expand Down
21 changes: 11 additions & 10 deletions processing/kaspad/domain/domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,24 +42,25 @@ func New(dagParams *dagconfig.Params, databaseContext database.Database) (*Domai
EnableSanityCheckPruningUTXOSet: false,
}

// for now, we do not use `virtualChangeChan` in the consensus object, nor in the domain
//consensusEventsChan := make(chan externalapi.consensusEventsChan, 100e3)
consensusEventsChan := make(chan externalapi.ConsensusEvent, 100e3)

// warning, the 2nd returned parameter (shouldMigrate) from consensusPackage.New is ignored for now
// I don't know how to handle it
consensus, _, err := consensusPackage.New(consensusConfig, databaseContext, activePrefix, nil)
consensusInstance, _, err := consensusPackage.New(consensusConfig, databaseContext, activePrefix, consensusEventsChan)
if err != nil {
return nil, err
}

miningManager := mining_manager.New()
return &Domain{
consensus: consensus,
domainInstance := &Domain{
consensus: consensusInstance,
miningManager: miningManager,

databaseContext: databaseContext,
consensusConfig: consensusConfig,
consensusEventsChan: nil, // consensusEventsChan,
}, nil
databaseContext: databaseContext,
consensusConfig: consensusConfig,
consensusEventsChan: consensusEventsChan,
}
return domainInstance, nil
}

type Domain struct {
Expand All @@ -73,7 +74,7 @@ type Domain struct {

onBlockAddedListener consensusPackage.OnBlockAddedListener
onConsensusResetListener OnConsensusResetListener
consensusEventsChan chan externalapi.ConsensusEvent
consensusEventsChan chan externalapi.ConsensusEvent
}

// Implementing the interface
Expand Down
8 changes: 8 additions & 0 deletions processing/kaspad/domain/mining_manager/mining_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ func (mm *miningManager) RevalidateHighPriorityTransactions() (validTransactions
return nil, nil
}

func (mm *miningManager) GetOrphanTransaction(transactionID *externalapi.DomainTransactionID) (*externalapi.DomainTransaction, bool) {
panic("unimplemented")
}

func (mm *miningManager) AllOrphanTransactions() []*externalapi.DomainTransaction {
panic("unimplemented")
}

func (mm *miningManager) TransactionCount() int {
return 0
}
Expand Down
64 changes: 21 additions & 43 deletions processing/main.go
Original file line number Diff line number Diff line change
@@ -1,85 +1,63 @@
package main

import (
"os"
"time"

databasePackage "github.com/kaspa-live/kaspa-graph-inspector/processing/database"
configPackage "github.com/kaspa-live/kaspa-graph-inspector/processing/infrastructure/config"
"github.com/kaspa-live/kaspa-graph-inspector/processing/infrastructure/logging"
kaspadPackage "github.com/kaspa-live/kaspa-graph-inspector/processing/kaspad"
processingPackage "github.com/kaspa-live/kaspa-graph-inspector/processing/processing"
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
"github.com/kaspanet/kaspad/infrastructure/logger"
)

var log = logging.Logger()

func main() {
config, err := configPackage.LoadConfig()
if err != nil {
logErrorAndExit("Could not parse command line arguments.\n%s", err)
logging.LogErrorAndExit("Could not parse command line arguments.\n%s", err)
}

database, err := databasePackage.Connect(config.DatabaseConnectionString)
if err != nil {
logErrorAndExit("Could not connect to database %s: %s", config.DatabaseConnectionString, err)
logging.LogErrorAndExit("Could not connect to database %s: %s", config.DatabaseConnectionString, err)
}
defer database.Close()

kaspad, err := kaspadPackage.New(config)
if err != nil {
logErrorAndExit("Could not create kaspad: %s", err)
logging.LogErrorAndExit("Could not create kaspad: %s", err)
}
processing, err := processingPackage.NewProcessing(config, database, kaspad)
if err != nil {
logErrorAndExit("Could not initialize processing: %s", err)
logging.LogErrorAndExit("Could not initialize processing: %s", err)
}
kaspad.SetOnBlockAddedListener(func(block *externalapi.DomainBlock,
blockInsertionResult *externalapi.VirtualChangeSet) {
err := processing.ProcessBlock(block, blockInsertionResult)
if err != nil {
logErrorAndExit("Could not process block: %s", err)
}
})

// This is no longer useful since kaspad v0.12.2
// that introduce a consensus event channel.
// See processing.initConsensusEventsHandler.

// kaspad.SetOnBlockAddedListener(func(block *externalapi.DomainBlock) {
// blockHash := consensushashing.BlockHash(block)
// blockInfo, err := kaspad.Domain().Consensus().GetBlockInfo(blockHash)
// if err != nil {
// logging.LogErrorAndExit("Consensus ValidateAndInsertBlock listener could not get block info for block %s: %s", blockHash, err)
// }
// logging.Logger().Debugf("Consensus ValidateAndInsertBlock listener gets block %s with status %s", blockHash, blockInfo.BlockStatus.String())
// })

kaspad.SetOnVirtualResolvedListener(func() {
err := processing.ResyncVirtualSelectedParentChain()
if err != nil {
logErrorAndExit("Could not resync the virtual selected parent chain: %s", err)
logging.LogErrorAndExit("Could not resync the virtual selected parent chain: %s", err)
}
})
kaspad.SetOnConsensusResetListener(func() {
err := processing.ResyncDatabase()
if err != nil {
logErrorAndExit("Could not resync database: %s", err)
logging.LogErrorAndExit("Could not resync database: %s", err)
}
})
err = kaspad.Start()
if err != nil {
logErrorAndExit("Could not start kaspad: %s", err)
logging.LogErrorAndExit("Could not start kaspad: %s", err)
}

<-make(chan struct{})
}

func logErrorAndExit(errorLog string, logParameters ...interface{}) {
// If LoadConfig failed, the logger backend may not have been run yet
if !log.Backend().IsRunning() {
logger.InitLogStdout(logger.LevelInfo)
logging.UpdateLogLevels()
}

log.Errorf(errorLog, logParameters...)

exitHandlerDone := make(chan struct{})
go func() {
log.Backend().Close()
close(exitHandlerDone)
}()
select {
case <-time.After(1 * time.Second):
case <-exitHandlerDone:
}

os.Exit(1)
}
6 changes: 6 additions & 0 deletions processing/processing/batch/batch.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@ package batch
import (
"github.com/go-pg/pg/v10"
databasePackage "github.com/kaspa-live/kaspa-graph-inspector/processing/database"
"github.com/kaspa-live/kaspa-graph-inspector/processing/infrastructure/logging"
kaspadPackage "github.com/kaspa-live/kaspa-graph-inspector/processing/kaspad"
"github.com/kaspanet/kaspad/domain/consensus/database"
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
"github.com/pkg/errors"
)

var log = logging.Logger()

type Batch struct {
database *databasePackage.Database
kaspad *kaspadPackage.Kaspad
Expand Down Expand Up @@ -125,9 +128,12 @@ func (b *Batch) CollectDirectDependencies(databaseTransaction *pg.Tx, hash *exte
// to include it in the batch
if !errors.Is(err, database.ErrNotFound) {
return err
} else {
log.Warnf("Parent %s for block %s not found by kaspad domain consensus; the missing dependency is ignored", parentHash, hash)
}
} else {
b.Add(parentHash, parentBlock)
log.Warnf("Parent %s for block %s found by kaspad domain consensus; the missing dependency is registered for processing", parentHash, hash)
}
}
}
Expand Down
Loading

0 comments on commit 5f2e715

Please sign in to comment.