github.com/stellar/stellar-etl@v1.0.1-0.20240312145900-4874b6bf2b89/internal/transform/ttl.go (about)

     1  package transform
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/stellar/go/ingest"
     7  	"github.com/stellar/go/xdr"
     8  	"github.com/stellar/stellar-etl/internal/utils"
     9  )
    10  
    11  // TransformTtl converts an ttl ledger change entry into a form suitable for BigQuery
    12  func TransformTtl(ledgerChange ingest.Change, header xdr.LedgerHeaderHistoryEntry) (TtlOutput, error) {
    13  	ledgerEntry, changeType, outputDeleted, err := utils.ExtractEntryFromChange(ledgerChange)
    14  	if err != nil {
    15  		return TtlOutput{}, err
    16  	}
    17  
    18  	ttl, ok := ledgerEntry.Data.GetTtl()
    19  	if !ok {
    20  		return TtlOutput{}, fmt.Errorf("Could not extract ttl from ledger entry; actual type is %s", ledgerEntry.Data.Type)
    21  	}
    22  
    23  	// LedgerEntryChange must contain a ttl change to be parsed, otherwise skip
    24  	if ledgerEntry.Data.Type != xdr.LedgerEntryTypeTtl {
    25  		return TtlOutput{}, nil
    26  	}
    27  
    28  	keyHash := ttl.KeyHash.HexString()
    29  	liveUntilLedgerSeq := ttl.LiveUntilLedgerSeq
    30  
    31  	closedAt, err := utils.TimePointToUTCTimeStamp(header.Header.ScpValue.CloseTime)
    32  	if err != nil {
    33  		return TtlOutput{}, err
    34  	}
    35  
    36  	ledgerSequence := header.Header.LedgerSeq
    37  
    38  	transformedPool := TtlOutput{
    39  		KeyHash:            keyHash,
    40  		LiveUntilLedgerSeq: uint32(liveUntilLedgerSeq),
    41  		LastModifiedLedger: uint32(ledgerEntry.LastModifiedLedgerSeq),
    42  		LedgerEntryChange:  uint32(changeType),
    43  		Deleted:            outputDeleted,
    44  		ClosedAt:           closedAt,
    45  		LedgerSequence:     uint32(ledgerSequence),
    46  	}
    47  
    48  	return transformedPool, nil
    49  }