mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-11-26 15:35:55 +00:00
fix cases of nil pointers...
This commit is contained in:
parent
e059e880c7
commit
b4754d4b23
@ -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)
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user