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 }