github.com/koko1123/flow-go-1@v0.29.6/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/koko1123/flow-go-1/ledger" 10 "github.com/koko1123/flow-go-1/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 chain flow.Chain 28 getBeforeMigrationSCFunc GetStateCommitmentFunc 29 } 30 31 func NewExportReporter( 32 logger zerolog.Logger, 33 chain flow.Chain, 34 getBeforeMigrationSCFunc GetStateCommitmentFunc, 35 ) *ExportReporter { 36 return &ExportReporter{ 37 logger: logger, 38 chain: chain, 39 getBeforeMigrationSCFunc: getBeforeMigrationSCFunc, 40 } 41 } 42 43 func (e *ExportReporter) Name() string { 44 return "ExportReporter" 45 } 46 47 func (e *ExportReporter) Report(payload []ledger.Payload, commit ledger.State) error { 48 report := ExportReport{ 49 EpochCounter: 0, // it will be overwritten by external automation, and this field will be removed later. 50 PreviousStateCommitment: e.getBeforeMigrationSCFunc(), 51 CurrentStateCommitment: flow.StateCommitment(commit), 52 ReportSucceeded: true, 53 } 54 file, _ := json.MarshalIndent(report, "", " ") 55 e.logger. 56 Info(). 57 Str("ExportReport", string(file)). 58 Msg("Ledger Export has finished") 59 _ = os.WriteFile("export_report.json", file, 0644) 60 return nil 61 }