github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/cmd/util/ledger/reporters/export_reporter.go (about) 1 package reporters 2 3 import ( 4 "encoding/json" 5 "os" 6 7 "github.com/rs/zerolog" 8 9 "github.com/onflow/flow-go/ledger" 10 "github.com/onflow/flow-go/model/flow" 11 ) 12 13 var _ ledger.Reporter = &ExportReporter{} 14 15 type GetStateCommitmentFunc func() flow.StateCommitment 16 17 type ExportReport struct { 18 EpochCounter uint64 19 PreviousStateCommitment flow.StateCommitment 20 CurrentStateCommitment flow.StateCommitment 21 ReportSucceeded bool 22 } 23 24 // ExportReporter writes data that can be leveraged outside of extraction 25 type ExportReporter struct { 26 logger zerolog.Logger 27 getBeforeMigrationSCFunc GetStateCommitmentFunc 28 } 29 30 func NewExportReporter( 31 logger zerolog.Logger, 32 getBeforeMigrationSCFunc GetStateCommitmentFunc, 33 ) *ExportReporter { 34 return &ExportReporter{ 35 logger: logger, 36 getBeforeMigrationSCFunc: getBeforeMigrationSCFunc, 37 } 38 } 39 40 func (e *ExportReporter) Name() string { 41 return "ExportReporter" 42 } 43 44 func (e *ExportReporter) Report(payload []ledger.Payload, commit ledger.State) error { 45 report := ExportReport{ 46 EpochCounter: 0, // it will be overwritten by external automation, and this field will be removed later. 47 PreviousStateCommitment: e.getBeforeMigrationSCFunc(), 48 CurrentStateCommitment: flow.StateCommitment(commit), 49 ReportSucceeded: true, 50 } 51 file, _ := json.MarshalIndent(report, "", " ") 52 e.logger. 53 Info(). 54 Str("ExportReport", string(file)). 55 Msg("Ledger Export has finished") 56 _ = os.WriteFile("export_report.json", file, 0644) 57 return nil 58 }