diff --git a/app/appmessage/message.go b/app/appmessage/message.go index 2b2c934c7..27a27d2fc 100644 --- a/app/appmessage/message.go +++ b/app/appmessage/message.go @@ -165,7 +165,6 @@ const ( CmdGetCoinSupplyResponseMessage CmdGetAcceptingBlockHashOfTxRequestMessage CmdGetAcceptingBlockHashOfTxResponseMessage - CmdGetAcceptingBlockHashesOfTxsRequestMessage CmdGetAcceptingBlockHashesOfTxsResponseMessage CmdGetAcceptingBlockOfTxRequestMessage diff --git a/app/appmessage/rpc_get_accepting_block_of_tx.go b/app/appmessage/rpc_get_accepting_block_of_tx.go index 97bb39c10..47f404acb 100644 --- a/app/appmessage/rpc_get_accepting_block_of_tx.go +++ b/app/appmessage/rpc_get_accepting_block_of_tx.go @@ -10,13 +10,14 @@ type GetAcceptingBlockOfTxRequestMessage struct { // Command returns the protocol command string for the message func (msg *GetAcceptingBlockOfTxRequestMessage) Command() MessageCommand { - return CmdGetAcceptingBlockHashOfTxRequestMessage + return CmdGetAcceptingBlockOfTxRequestMessage } // NewGetAcceptingBlockOfTxRequest returns a instance of the message -func NewGetAcceptingBlockOfTxRequest(txID string) *GetAcceptingBlockOfTxRequestMessage { +func NewGetAcceptingBlockOfTxRequest(txID string, includeTransactions bool) *GetAcceptingBlockOfTxRequestMessage { return &GetAcceptingBlockOfTxRequestMessage{ TxID: txID, + IncludeTransactions: includeTransactions, } } diff --git a/app/appmessage/rpc_get_accepting_blocks_of_txs.go b/app/appmessage/rpc_get_accepting_blocks_of_txs.go index 480677b03..5fa3f0558 100644 --- a/app/appmessage/rpc_get_accepting_blocks_of_txs.go +++ b/app/appmessage/rpc_get_accepting_blocks_of_txs.go @@ -21,9 +21,10 @@ func (msg *GetAcceptingBlocksOfTxsRequestMessage) Command() MessageCommand { } // NewGetAcceptingBlocksOfTxsRequest returns a instance of the message -func NewGetAcceptingBlocksOfTxsRequest(txIDs []string) *GetAcceptingBlocksOfTxsRequestMessage { +func NewGetAcceptingBlocksOfTxsRequest(txIDs []string, includeTransactions bool) *GetAcceptingBlocksOfTxsRequestMessage { return &GetAcceptingBlocksOfTxsRequestMessage{ TxIDs: txIDs, + IncludeTransactions: includeTransactions, } } diff --git a/app/rpc/rpc.go b/app/rpc/rpc.go index 71acd8b6b..3a0f0ce7b 100644 --- a/app/rpc/rpc.go +++ b/app/rpc/rpc.go @@ -52,6 +52,15 @@ var handlers = map[appmessage.MessageCommand]handler{ appmessage.CmdGetCoinSupplyRequestMessage: rpchandlers.HandleGetCoinSupply, appmessage.CmdGetMempoolEntriesByAddressesRequestMessage: rpchandlers.HandleGetMempoolEntriesByAddresses, appmessage.CmdGetAcceptingBlockHashOfTxRequestMessage: rpchandlers.HandleGetAcceptingBlockHashOfTx, + appmessage.CmdGetAcceptingBlockHashesOfTxsRequestMessage: rpchandlers.HandleGetAcceptingBlockHashesOfTxs, + appmessage.CmdGetAcceptingBlockOfTxRequestMessage: rpchandlers.HandleGetAcceptingBlockOfTx, + appmessage.CmdGetAcceptingBlocksOfTxsRequestMessage: rpchandlers.HandleGetAcceptingBlocksOfTxs, + appmessage.CmdGetIncludingBlockHashOfTxRequestMessage: rpchandlers.HandleGetIncludingBlockHashOfTx, + appmessage.CmdGetTxRequestMessage: rpchandlers.HandleGetTx, + appmessage.CmdGetTxsRequestMessage: rpchandlers.HandleGetTxs, + appmessage.CmdGetTxConfirmationsRequestMessage: rpchandlers.HandleGetTxConfirmations, + appmessage.CmdGetTxsConfirmationsRequestMessage: rpchandlers.HandleGetTxsConfirmations, + } func (m *Manager) routerInitializer(router *router.Router, netConnection *netadapter.NetConnection) { diff --git a/app/rpc/rpchandlers/get_accepting_block_of_tx.go b/app/rpc/rpchandlers/get_accepting_block_of_tx.go index 69fcee351..577c1ebb8 100644 --- a/app/rpc/rpchandlers/get_accepting_block_of_tx.go +++ b/app/rpc/rpchandlers/get_accepting_block_of_tx.go @@ -18,9 +18,9 @@ func HandleGetAcceptingBlockOfTx(context *rpccontext.Context, _ *router.Router, return errorMessage, nil } - getAcceptingBlockHashOfTxRequest := request.(*appmessage.GetAcceptingBlockOfTxRequestMessage) + getAcceptingBlockOfTxRequest := request.(*appmessage.GetAcceptingBlockOfTxRequestMessage) - domainTxID, err := externalapi.NewDomainTransactionIDFromString(getAcceptingBlockHashOfTxRequest.TxID) + domainTxID, err := externalapi.NewDomainTransactionIDFromString(getAcceptingBlockOfTxRequest.TxID) if err != nil { rpcError := &appmessage.RPCError{} if !errors.As(err, &rpcError) { @@ -48,7 +48,7 @@ func HandleGetAcceptingBlockOfTx(context *rpccontext.Context, _ *router.Router, } rpcAcceptingBlock := appmessage.DomainBlockToRPCBlock(acceptingBlock) - err = context.PopulateBlockWithVerboseData(rpcAcceptingBlock, acceptingBlock.Header, acceptingBlock, getAcceptingBlockHashOfTxRequest.IncludeTransactions) + err = context.PopulateBlockWithVerboseData(rpcAcceptingBlock, acceptingBlock.Header, acceptingBlock, getAcceptingBlockOfTxRequest.IncludeTransactions) if err != nil { if errors.Is(err, rpccontext.ErrBuildBlockVerboseDataInvalidBlock) { errorMessage := &appmessage.GetAcceptingBlockOfTxResponseMessage{} diff --git a/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go b/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go index 5aeba7d29..02bd41baf 100644 --- a/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go +++ b/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go @@ -10,8 +10,8 @@ import ( "github.com/pkg/errors" ) -// HandleGetAcceptingBlocksOfTx handles the respectively named RPC command -func HandleGetAcceptingBlocksOfTx(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { +// HandleGetAcceptingBlocksOfTxs handles the respectively named RPC command +func HandleGetAcceptingBlocksOfTxs(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { var err error if !context.Config.TXIndex { diff --git a/app/rpc/rpchandlers/get_txs_confirmations.go b/app/rpc/rpchandlers/get_txs_confirmations.go index 314c57eb4..33f94922d 100644 --- a/app/rpc/rpchandlers/get_txs_confirmations.go +++ b/app/rpc/rpchandlers/get_txs_confirmations.go @@ -2,6 +2,7 @@ package rpchandlers import ( "errors" + "fmt" "github.com/kaspanet/kaspad/app/appmessage" "github.com/kaspanet/kaspad/app/rpc/rpccontext" @@ -54,6 +55,9 @@ func HandleGetTxsConfirmations(context *rpccontext.Context, _ *router.Router, re i++ } + fmt.Println(txIDConfirmationPairs[0].Confirmations) + fmt.Println(txIDConfirmationPairs[1].Confirmations) + response := appmessage.NewGetTxsConfirmationsResponse(txIDConfirmationPairs) return response, nil diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 15f61b394..02f887cc9 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -34,7 +34,7 @@ func New(domain domain.Domain, database database.Database) (*TXIndex, error) { return nil, err } - if !isSynced { + if !isSynced || true { err := txIndex.Reset() if err != nil { @@ -187,7 +187,7 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai if err != nil { return err } - for i, addedChainBlock := range chainBlocksChunk { + for i := range chainBlocksChunk { chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { @@ -195,7 +195,7 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai if transactionAcceptanceData.IsAccepted { ti.store.add( *consensushashing.TransactionID(transactionAcceptanceData.Transaction), - addedChainBlock, + blockAcceptanceData.BlockHash, ) } } @@ -222,7 +222,7 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC if err != nil { return err } - for i, removedChainBlock := range chainBlocksChunk { + for i := range chainBlocksChunk { chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { log.Tracef("TX index Removing: %d transactions", len(blockAcceptanceData.TransactionAcceptanceData)) @@ -230,7 +230,7 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC if transactionAcceptanceData.IsAccepted { ti.store.remove( *consensushashing.TransactionID(transactionAcceptanceData.Transaction), - removedChainBlock, + blockAcceptanceData.BlockHash, ) } } @@ -350,12 +350,9 @@ func (ti *TXIndex) GetTX(txID *externalapi.DomainTransactionID) ( return nil, false, err } - var transaction *externalapi.DomainTransaction - - for _, tx := range acceptingBlock.Transactions { - if consensushashing.TransactionID(tx).Equal(txID) { - transaction = tx - return transaction, true, nil + for i := range acceptingBlock.Transactions { + if consensushashing.TransactionID(acceptingBlock.Transactions[i]).Equal(txID) { + return acceptingBlock.Transactions[i].Clone(), true, nil } } diff --git a/infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go b/infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go index 4153ae0ce..a202e34cf 100644 --- a/infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go +++ b/infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go @@ -3,8 +3,8 @@ package rpcclient import "github.com/kaspanet/kaspad/app/appmessage" // GetAcceptingBlockOfTx sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetAcceptingBlockOfTx(txID string) (*appmessage.GetAcceptingBlockOfTxResponseMessage, error) { - err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlockOfTxRequest(txID)) +func (c *RPCClient) GetAcceptingBlockOfTx(txID string, includeTransactions bool) (*appmessage.GetAcceptingBlockOfTxResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlockOfTxRequest(txID, includeTransactions)) if err != nil { return nil, err } diff --git a/infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go b/infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go index 70390b9e3..577764d60 100644 --- a/infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go +++ b/infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go @@ -2,8 +2,8 @@ package rpcclient import "github.com/kaspanet/kaspad/app/appmessage" -// GetAcceptingBlockHashOfTxs sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetAcceptingBlockHashOfTxs(txID string) (*appmessage.GetAcceptingBlockHashOfTxResponseMessage, error) { +// GetAcceptingBlockHashOfTx sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetAcceptingBlockHashOfTx(txID string) (*appmessage.GetAcceptingBlockHashOfTxResponseMessage, error) { err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlockHashOfTxRequest(txID)) if err != nil { return nil, err diff --git a/infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go b/infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go index 5d3d74734..a7f8b1a1e 100644 --- a/infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go +++ b/infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go @@ -3,8 +3,8 @@ package rpcclient import "github.com/kaspanet/kaspad/app/appmessage" // GetAcceptingBlocksTxs sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetAcceptingBlocksTxs(txIDs []string) (*appmessage.GetAcceptingBlocksOfTxsResponseMessage, error) { - err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlocksOfTxsRequest(txIDs)) +func (c *RPCClient) GetAcceptingBlocksTxs(txIDs []string, includeTransactions bool) (*appmessage.GetAcceptingBlocksOfTxsResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlocksOfTxsRequest(txIDs, includeTransactions)) if err != nil { return nil, err }