diff --git a/domain/txindex/model.go b/domain/txindex/model.go index 7ca5f8688..14f2c35d0 100644 --- a/domain/txindex/model.go +++ b/domain/txindex/model.go @@ -1,6 +1,8 @@ package txindex import ( + "encoding/hex" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" ) @@ -10,3 +12,24 @@ type TXAcceptanceChange struct { Added map[externalapi.DomainTransactionID]*externalapi.DomainHash Removed map[externalapi.DomainTransactionID]*externalapi.DomainHash } + +// ConvertDomainHashToString converts the given DomainHash to a string +func ConvertDomainHashToString(blockHash *externalapi.DomainHash) string { + return hex.EncodeToString(blockHash.ByteSlice()) +} + +// ConvertStringDomainHashToDomainHash converts the given string to a domainHash +func ConvertStringToDomainHash(stringDomainHash string) (*externalapi.DomainHash, error) { + return externalapi.NewDomainHashFromString(stringDomainHash) +} + +// ConvertDomainHashToString converts the given DomainHash to a string +func ConvertTXIDToString(txID *externalapi.DomainTransactionID) string { + return hex.EncodeToString(txID.ByteSlice()) +} + +// ConvertStringDomainHashToDomainHash converts the given string to a domainHash +func ConvertStringTXID(stringDomainTransactionID string) (*externalapi.DomainTransactionID, error) { + return externalapi.NewDomainTransactionIDFromString(stringDomainTransactionID) +} + diff --git a/domain/txindex/store.go b/domain/txindex/store.go index 2eea2a846..0c9c02a6e 100644 --- a/domain/txindex/store.go +++ b/domain/txindex/store.go @@ -60,13 +60,13 @@ func (tis *txIndexStore) deleteAll() error { } func (tis *txIndexStore) add(txID externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { - log.Tracef("Adding %s Txs from blockHash %s", txID.String(), blockHash.String()) + log.Tracef("Adding %s Txs from blockHash %s", txID.String(), ConvertDomainHashToString(blockHash)) delete(tis.toRemove, txID) //adding takes precedence tis.toAdd[txID] = blockHash } func (tis *txIndexStore) remove(txID externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { - log.Tracef("Removing %s Txs from blockHash %s", txID.String(), blockHash.String()) + log.Tracef("Removing %s Txs from blockHash %s", txID.String(), ConvertDomainHashToString(blockHash)) if _, found := tis.toAdd[txID]; !found { //adding takes precedence tis.toRemove[txID] = blockHash } diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 9d913403f..ac76028ed 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -98,6 +98,9 @@ func (ti *TXIndex) isSynced() (bool, error) { txIndexVirtualParents, err := ti.store.getVirtualParents() if err != nil { + if database.IsNotFoundError(err) { + return false, nil + } return false, err } @@ -179,7 +182,7 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { - if transactionAcceptanceData.IsAccepted { + if transactionAcceptanceData.IsAccepted && transactionAcceptanceData.Transaction.ID != nil { ti.store.add(*transactionAcceptanceData.Transaction.ID, addedChainBlock) } } @@ -210,7 +213,7 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { - if transactionAcceptanceData.IsAccepted { + if transactionAcceptanceData.IsAccepted && transactionAcceptanceData.Transaction.ID != nil{ ti.store.remove(*transactionAcceptanceData.Transaction.ID, removedChainBlock) } } diff --git a/testing/integration/setup_test.go b/testing/integration/setup_test.go index 4b2823484..bf22729b3 100644 --- a/testing/integration/setup_test.go +++ b/testing/integration/setup_test.go @@ -24,6 +24,7 @@ type appHarness struct { config *config.Config database database.Database utxoIndex bool + txIndex bool overrideDAGParams *dagconfig.Params } @@ -33,6 +34,7 @@ type harnessParams struct { miningAddress string miningAddressPrivateKey string utxoIndex bool + txIndex bool overrideDAGParams *dagconfig.Params protocolVersion uint32 } @@ -45,6 +47,7 @@ func setupHarness(t *testing.T, params *harnessParams) (harness *appHarness, tea miningAddress: params.miningAddress, miningAddressPrivateKey: params.miningAddressPrivateKey, utxoIndex: params.utxoIndex, + txIndex: params.txIndex, overrideDAGParams: params.overrideDAGParams, } @@ -100,6 +103,34 @@ func standardSetup(t *testing.T) (appHarness1, appHarness2, appHarness3 *appHarn return harnesses[0], harnesses[1], harnesses[2], teardown } +// standardSetupWithTxindex creates a standard setup of 3 appHarnesses, with txindexes. +func standardSetupWithTxindex(t *testing.T) (appHarness1, appHarness2, appHarness3 *appHarness, teardownFunc func()) { + harnesses, teardown := setupHarnesses(t, []*harnessParams{ + { + p2pAddress: p2pAddress1, + rpcAddress: rpcAddress1, + miningAddress: miningAddress1, + miningAddressPrivateKey: miningAddress1PrivateKey, + txIndex: true, + }, + { + p2pAddress: p2pAddress2, + rpcAddress: rpcAddress2, + miningAddress: miningAddress2, + miningAddressPrivateKey: miningAddress2PrivateKey, + txIndex: true, + }, { + p2pAddress: p2pAddress3, + rpcAddress: rpcAddress3, + miningAddress: miningAddress3, + miningAddressPrivateKey: miningAddress3PrivateKey, + + }, + }) + + return harnesses[0], harnesses[1], harnesses[2], teardown +} + func setRPCClient(t *testing.T, harness *appHarness) { var err error harness.rpcClient, err = newTestRPCClient(harness.rpcAddress)