mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-11-24 06:25:55 +00:00
Export acceptance data to archival
This commit is contained in:
parent
c12731d4d4
commit
9efaa52d9f
@ -1,8 +1,20 @@
|
||||
package appmessage
|
||||
|
||||
type AcceptedTxEntry struct {
|
||||
TransactionID string
|
||||
IndexWithinBlock uint32
|
||||
}
|
||||
|
||||
type MergesetBlockAcceptanceData struct {
|
||||
BlockHash string
|
||||
AcceptedTxs []*AcceptedTxEntry
|
||||
}
|
||||
|
||||
type ArchivalBlock struct {
|
||||
Block *RPCBlock
|
||||
Child string
|
||||
AcceptanceData []*MergesetBlockAcceptanceData
|
||||
SelectedParent string
|
||||
}
|
||||
|
||||
// AddArchivalBlocksRequestMessage represents a request to add archival blocks
|
||||
|
||||
@ -94,6 +94,10 @@ func mainImpl(cfg *configFlags) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if int(root.PPIndex-1) >= len(ppHeaders) {
|
||||
continue
|
||||
}
|
||||
|
||||
nextPP := ppHeaders[root.PPIndex-1]
|
||||
|
||||
blockToChild := make(map[externalapi.DomainHash]externalapi.DomainHash)
|
||||
@ -140,6 +144,37 @@ func mainImpl(cfg *configFlags) error {
|
||||
archivalBlock.Child = child.String()
|
||||
}
|
||||
|
||||
acceptanceData, err := tc.AcceptanceDataStore().Get(tc.DatabaseContext(), model.NewStagingArea(), hash)
|
||||
isNotFoundErr := database.IsNotFoundError(err)
|
||||
if !isNotFoundErr && err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if blockGHOSTDAGData.SelectedParent() != model.VirtualGenesisBlockHash && !isNotFoundErr && len(acceptanceData) > 0 {
|
||||
acceptanceDataRPC := make([]*appmessage.MergesetBlockAcceptanceData, 0, len(acceptanceData))
|
||||
for _, data := range acceptanceData {
|
||||
acceptedTxs := make([]*appmessage.AcceptedTxEntry, 0, len(data.TransactionAcceptanceData))
|
||||
for i, tx := range data.TransactionAcceptanceData {
|
||||
if !tx.IsAccepted {
|
||||
continue
|
||||
}
|
||||
|
||||
acceptedTxs = append(acceptedTxs, &appmessage.AcceptedTxEntry{
|
||||
TransactionID: consensushashing.TransactionID(tx.Transaction).String(),
|
||||
IndexWithinBlock: uint32(i),
|
||||
})
|
||||
}
|
||||
|
||||
acceptanceDataRPC = append(acceptanceDataRPC, &appmessage.MergesetBlockAcceptanceData{
|
||||
BlockHash: data.BlockHash.String(),
|
||||
AcceptedTxs: acceptedTxs,
|
||||
})
|
||||
}
|
||||
|
||||
archivalBlock.AcceptanceData = acceptanceDataRPC
|
||||
archivalBlock.SelectedParent = blockGHOSTDAGData.SelectedParent().String()
|
||||
}
|
||||
|
||||
chunk = append(chunk, archivalBlock)
|
||||
|
||||
if len(chunk) == 1 {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -902,9 +902,22 @@ message GetPruningWindowRootsResponseMessage {
|
||||
RPCError error = 1000;
|
||||
}
|
||||
|
||||
message AcceptedTxEntry{
|
||||
string transactionId = 1;
|
||||
uint32 index_within_block = 2;
|
||||
}
|
||||
|
||||
|
||||
message MergesetBlockAcceptanceData{
|
||||
string blockHash = 1;
|
||||
repeated AcceptedTxEntry acceptedTxs = 3;
|
||||
}
|
||||
|
||||
message ArchivalBlock{
|
||||
string child = 1;
|
||||
RpcBlock block = 2;
|
||||
repeated MergesetBlockAcceptanceData acceptanceData = 3;
|
||||
string selectedParent = 4;
|
||||
}
|
||||
|
||||
message AddArchivalBlocksRequestMessage { repeated ArchivalBlock blocks = 1; }
|
||||
|
||||
@ -6,6 +6,7 @@ import (
|
||||
)
|
||||
|
||||
func (x *KaspadMessage_AddArchivalBlocksRequest) toAppMessage() (appmessage.Message, error) {
|
||||
panic("we need to implement acceptance data conversion")
|
||||
if x == nil {
|
||||
return nil, errors.Wrapf(errorNil, "KaspadMessage_AddArchivalBlocksRequest is nil")
|
||||
}
|
||||
@ -33,6 +34,7 @@ func (x *KaspadMessage_AddArchivalBlocksRequest) fromAppMessage(message *appmess
|
||||
for i, block := range message.Blocks {
|
||||
protoBlock := &ArchivalBlock{
|
||||
Child: block.Child,
|
||||
SelectedParent: block.SelectedParent,
|
||||
}
|
||||
|
||||
if block.Block != nil {
|
||||
@ -42,6 +44,12 @@ func (x *KaspadMessage_AddArchivalBlocksRequest) fromAppMessage(message *appmess
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
protoBlock.AcceptanceData = make([]*MergesetBlockAcceptanceData, len(block.AcceptanceData))
|
||||
for j, acceptanceData := range block.AcceptanceData {
|
||||
protoBlock.AcceptanceData[j] = &MergesetBlockAcceptanceData{}
|
||||
protoBlock.AcceptanceData[j].fromAppMessage(acceptanceData)
|
||||
}
|
||||
blocks[i] = protoBlock
|
||||
}
|
||||
|
||||
@ -51,6 +59,23 @@ func (x *KaspadMessage_AddArchivalBlocksRequest) fromAppMessage(message *appmess
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *MergesetBlockAcceptanceData) fromAppMessage(message *appmessage.MergesetBlockAcceptanceData) error {
|
||||
if message == nil {
|
||||
return errors.Wrapf(errorNil, "MergesetBlockAcceptanceData is nil")
|
||||
}
|
||||
|
||||
x.BlockHash = message.BlockHash
|
||||
x.AcceptedTxs = make([]*AcceptedTxEntry, len(message.AcceptedTxs))
|
||||
for i, tx := range message.AcceptedTxs {
|
||||
x.AcceptedTxs[i] = &AcceptedTxEntry{
|
||||
TransactionId: tx.TransactionID,
|
||||
IndexWithinBlock: tx.IndexWithinBlock,
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *KaspadMessage_AddArchivalBlocksResponse) toAppMessage() (appmessage.Message, error) {
|
||||
if x == nil {
|
||||
return nil, errors.Wrapf(errorNil, "KaspadMessage_AddArchivalBlocksResponse is nil")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user