github.com/stellar/stellar-etl@v1.0.1-0.20240312145900-4874b6bf2b89/cmd/export_account_signers.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 6 "github.com/sirupsen/logrus" 7 "github.com/spf13/cobra" 8 9 "github.com/stellar/stellar-etl/internal/input" 10 "github.com/stellar/stellar-etl/internal/transform" 11 "github.com/stellar/stellar-etl/internal/utils" 12 13 "github.com/stellar/go/xdr" 14 ) 15 16 var accountSignersCmd = &cobra.Command{ 17 Use: "export_signers", 18 Short: "Exports the account signers data.", 19 Long: `Exports historical account signers data from the genesis ledger to the provided end-ledger to an output file. 20 The command reads from the bucket list, which includes the full history of the Stellar ledger. As a result, it 21 should be used in an initial data dump. In order to get account information within a specified ledger range, see 22 the export_ledger_entry_changes command.`, 23 Run: func(cmd *cobra.Command, args []string) { 24 cmdLogger.SetLevel(logrus.InfoLevel) 25 endNum, strictExport, isTest, isFuture, extra := utils.MustCommonFlags(cmd.Flags(), cmdLogger) 26 cmdLogger.StrictExport = strictExport 27 env := utils.GetEnvironmentDetails(isTest, isFuture) 28 path := utils.MustBucketFlags(cmd.Flags(), cmdLogger) 29 cloudStorageBucket, cloudCredentials, cloudProvider := utils.MustCloudStorageFlags(cmd.Flags(), cmdLogger) 30 31 accounts, err := input.GetEntriesFromGenesis(endNum, xdr.LedgerEntryTypeAccount, env.ArchiveURLs) 32 if err != nil { 33 cmdLogger.Fatal("could not read accounts: ", err) 34 } 35 36 outFile := mustOutFile(path) 37 numFailures := 0 38 totalNumBytes := 0 39 numSigners := 0 40 var header xdr.LedgerHeaderHistoryEntry 41 for _, acc := range accounts { 42 if acc.AccountSignersChanged() { 43 transformed, err := transform.TransformSigners(acc, header) 44 if err != nil { 45 cmdLogger.LogError(fmt.Errorf("could not json transform account signer: %v", err)) 46 numFailures += 1 47 continue 48 } 49 50 for _, entry := range transformed { 51 numBytes, err := exportEntry(entry, outFile, extra) 52 if err != nil { 53 cmdLogger.LogError(fmt.Errorf("could not export entry: %v", err)) 54 numFailures += 1 55 continue 56 } 57 numSigners += 1 58 totalNumBytes += numBytes 59 } 60 } 61 } 62 63 outFile.Close() 64 cmdLogger.Info("Number of bytes written: ", totalNumBytes) 65 66 printTransformStats(numSigners, numFailures) 67 68 maybeUpload(cloudCredentials, cloudStorageBucket, cloudProvider, path) 69 }, 70 } 71 72 func init() { 73 rootCmd.AddCommand(accountSignersCmd) 74 utils.AddCommonFlags(accountSignersCmd.Flags()) 75 utils.AddBucketFlags("signers", accountSignersCmd.Flags()) 76 utils.AddCloudStorageFlags(accountSignersCmd.Flags()) 77 accountSignersCmd.MarkFlagRequired("end-ledger") 78 }