fix cases of nil pointers...

This commit is contained in:
D-Stacks 2022-06-24 13:26:16 +02:00
parent e059e880c7
commit b4754d4b23
4 changed files with 61 additions and 4 deletions

View File

@ -1,6 +1,8 @@
package txindex package txindex
import ( import (
"encoding/hex"
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
) )
@ -10,3 +12,24 @@ type TXAcceptanceChange struct {
Added map[externalapi.DomainTransactionID]*externalapi.DomainHash Added map[externalapi.DomainTransactionID]*externalapi.DomainHash
Removed 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)
}

View File

@ -60,13 +60,13 @@ func (tis *txIndexStore) deleteAll() error {
} }
func (tis *txIndexStore) add(txID externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { 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 delete(tis.toRemove, txID) //adding takes precedence
tis.toAdd[txID] = blockHash tis.toAdd[txID] = blockHash
} }
func (tis *txIndexStore) remove(txID externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { 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 if _, found := tis.toAdd[txID]; !found { //adding takes precedence
tis.toRemove[txID] = blockHash tis.toRemove[txID] = blockHash
} }

View File

@ -98,6 +98,9 @@ func (ti *TXIndex) isSynced() (bool, error) {
txIndexVirtualParents, err := ti.store.getVirtualParents() txIndexVirtualParents, err := ti.store.getVirtualParents()
if err != nil { if err != nil {
if database.IsNotFoundError(err) {
return false, nil
}
return false, err return false, err
} }
@ -179,7 +182,7 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai
chainBlockAcceptanceData := chainBlocksAcceptanceData[i] chainBlockAcceptanceData := chainBlocksAcceptanceData[i]
for _, blockAcceptanceData := range chainBlockAcceptanceData { for _, blockAcceptanceData := range chainBlockAcceptanceData {
for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData {
if transactionAcceptanceData.IsAccepted { if transactionAcceptanceData.IsAccepted && transactionAcceptanceData.Transaction.ID != nil {
ti.store.add(*transactionAcceptanceData.Transaction.ID, addedChainBlock) ti.store.add(*transactionAcceptanceData.Transaction.ID, addedChainBlock)
} }
} }
@ -210,7 +213,7 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC
chainBlockAcceptanceData := chainBlocksAcceptanceData[i] chainBlockAcceptanceData := chainBlocksAcceptanceData[i]
for _, blockAcceptanceData := range chainBlockAcceptanceData { for _, blockAcceptanceData := range chainBlockAcceptanceData {
for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData {
if transactionAcceptanceData.IsAccepted { if transactionAcceptanceData.IsAccepted && transactionAcceptanceData.Transaction.ID != nil{
ti.store.remove(*transactionAcceptanceData.Transaction.ID, removedChainBlock) ti.store.remove(*transactionAcceptanceData.Transaction.ID, removedChainBlock)
} }
} }

View File

@ -24,6 +24,7 @@ type appHarness struct {
config *config.Config config *config.Config
database database.Database database database.Database
utxoIndex bool utxoIndex bool
txIndex bool
overrideDAGParams *dagconfig.Params overrideDAGParams *dagconfig.Params
} }
@ -33,6 +34,7 @@ type harnessParams struct {
miningAddress string miningAddress string
miningAddressPrivateKey string miningAddressPrivateKey string
utxoIndex bool utxoIndex bool
txIndex bool
overrideDAGParams *dagconfig.Params overrideDAGParams *dagconfig.Params
protocolVersion uint32 protocolVersion uint32
} }
@ -45,6 +47,7 @@ func setupHarness(t *testing.T, params *harnessParams) (harness *appHarness, tea
miningAddress: params.miningAddress, miningAddress: params.miningAddress,
miningAddressPrivateKey: params.miningAddressPrivateKey, miningAddressPrivateKey: params.miningAddressPrivateKey,
utxoIndex: params.utxoIndex, utxoIndex: params.utxoIndex,
txIndex: params.txIndex,
overrideDAGParams: params.overrideDAGParams, overrideDAGParams: params.overrideDAGParams,
} }
@ -100,6 +103,34 @@ func standardSetup(t *testing.T) (appHarness1, appHarness2, appHarness3 *appHarn
return harnesses[0], harnesses[1], harnesses[2], teardown 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) { func setRPCClient(t *testing.T, harness *appHarness) {
var err error var err error
harness.rpcClient, err = newTestRPCClient(harness.rpcAddress) harness.rpcClient, err = newTestRPCClient(harness.rpcAddress)