diff --git a/ledger/alonzo/genesis.go b/ledger/alonzo/genesis.go index 2926fd0a..aeeba80f 100644 --- a/ledger/alonzo/genesis.go +++ b/ledger/alonzo/genesis.go @@ -14,6 +14,12 @@ package alonzo +import ( + "encoding/json" + "io" + "os" +) + type AlonzoGenesis struct { LovelacePerUtxoWord uint64 `json:"lovelacePerUTxOWord"` MaxValueSize int @@ -24,3 +30,22 @@ type AlonzoGenesis struct { MaxBlockExUnits map[string]int CostModels map[string]map[string]int } + +func NewAlonzoGenesisFromReader(r io.Reader) (AlonzoGenesis, error) { + var ret AlonzoGenesis + dec := json.NewDecoder(r) + dec.DisallowUnknownFields() + if err := dec.Decode(&ret); err != nil { + return ret, err + } + return ret, nil +} + +func NewAlonzoGenesisFromFile(path string) (AlonzoGenesis, error) { + f, err := os.Open(path) + if err != nil { + return AlonzoGenesis{}, err + } + defer f.Close() + return NewAlonzoGenesisFromReader(f) +} diff --git a/ledger/alonzo/genesis_test.go b/ledger/alonzo/genesis_test.go index a6bf8f19..f5cfe7f3 100644 --- a/ledger/alonzo/genesis_test.go +++ b/ledger/alonzo/genesis_test.go @@ -15,8 +15,8 @@ package alonzo_test import ( - "encoding/json" "reflect" + "strings" "testing" "github.com/blinklabs-io/gouroboros/ledger/alonzo" @@ -411,8 +411,8 @@ var expectedGenesisObj = alonzo.AlonzoGenesis{ } func TestGenesisFromJson(t *testing.T) { - var tmpGenesis alonzo.AlonzoGenesis - if err := json.Unmarshal([]byte(alonzoGenesisConfig), &tmpGenesis); err != nil { + tmpGenesis, err := alonzo.NewAlonzoGenesisFromReader(strings.NewReader(alonzoGenesisConfig)) + if err != nil { t.Fatalf("unexpected error: %s", err) } if !reflect.DeepEqual(tmpGenesis, expectedGenesisObj) { diff --git a/ledger/byron/genesis.go b/ledger/byron/genesis.go index 162f482f..627dd916 100644 --- a/ledger/byron/genesis.go +++ b/ledger/byron/genesis.go @@ -14,6 +14,12 @@ package byron +import ( + "encoding/json" + "io" + "os" +) + type ByronGenesis struct { AvvmDistr map[string]string BlockVersionData ByronGenesisBlockVersionData @@ -74,3 +80,22 @@ type ByronGenesisVssCert struct { SigningKey string VssKey string } + +func NewByronGenesisFromReader(r io.Reader) (ByronGenesis, error) { + var ret ByronGenesis + dec := json.NewDecoder(r) + dec.DisallowUnknownFields() + if err := dec.Decode(&ret); err != nil { + return ret, err + } + return ret, nil +} + +func NewByronGenesisFromFile(path string) (ByronGenesis, error) { + f, err := os.Open(path) + if err != nil { + return ByronGenesis{}, err + } + defer f.Close() + return NewByronGenesisFromReader(f) +} diff --git a/ledger/byron/genesis_test.go b/ledger/byron/genesis_test.go index 40733350..5af592ee 100644 --- a/ledger/byron/genesis_test.go +++ b/ledger/byron/genesis_test.go @@ -15,8 +15,8 @@ package byron_test import ( - "encoding/json" "reflect" + "strings" "testing" "github.com/blinklabs-io/gouroboros/ledger/byron" @@ -236,8 +236,8 @@ var expectedGenesisObj = byron.ByronGenesis{ } func TestGenesisFromJson(t *testing.T) { - var tmpGenesis byron.ByronGenesis - if err := json.Unmarshal([]byte(byronGenesisConfig), &tmpGenesis); err != nil { + tmpGenesis, err := byron.NewByronGenesisFromReader(strings.NewReader(byronGenesisConfig)) + if err != nil { t.Fatalf("unexpected error: %s", err) } if !reflect.DeepEqual(tmpGenesis, expectedGenesisObj) { diff --git a/ledger/conway/genesis.go b/ledger/conway/genesis.go index 23a03d73..41929fcc 100644 --- a/ledger/conway/genesis.go +++ b/ledger/conway/genesis.go @@ -14,6 +14,12 @@ package conway +import ( + "encoding/json" + "io" + "os" +) + type ConwayGenesis struct { PoolVotingThresholds ConwayGenesisPoolVotingThresholds DRepVotingThresholds ConwayGenesisDRepVotingThresholds @@ -64,3 +70,22 @@ type ConwayGenesisCommittee struct { Members map[string]int Threshold map[string]int } + +func NewConwayGenesisFromReader(r io.Reader) (ConwayGenesis, error) { + var ret ConwayGenesis + dec := json.NewDecoder(r) + dec.DisallowUnknownFields() + if err := dec.Decode(&ret); err != nil { + return ret, err + } + return ret, nil +} + +func NewConwayGenesisFromFile(path string) (ConwayGenesis, error) { + f, err := os.Open(path) + if err != nil { + return ConwayGenesis{}, err + } + defer f.Close() + return NewConwayGenesisFromReader(f) +} diff --git a/ledger/conway/genesis_test.go b/ledger/conway/genesis_test.go index 5484e3ad..a28f3770 100644 --- a/ledger/conway/genesis_test.go +++ b/ledger/conway/genesis_test.go @@ -15,8 +15,8 @@ package conway_test import ( - "encoding/json" "reflect" + "strings" "testing" "github.com/blinklabs-io/gouroboros/ledger/conway" @@ -383,8 +383,8 @@ var expectedGenesisObj = conway.ConwayGenesis{ } func TestGenesisFromJson(t *testing.T) { - var tmpGenesis conway.ConwayGenesis - if err := json.Unmarshal([]byte(conwayGenesisConfig), &tmpGenesis); err != nil { + tmpGenesis, err := conway.NewConwayGenesisFromReader(strings.NewReader(conwayGenesisConfig)) + if err != nil { t.Fatalf("unexpected error: %s", err) } if !reflect.DeepEqual(tmpGenesis, expectedGenesisObj) { diff --git a/ledger/shelley/genesis.go b/ledger/shelley/genesis.go index 7dd1ce5d..be61b320 100644 --- a/ledger/shelley/genesis.go +++ b/ledger/shelley/genesis.go @@ -14,7 +14,12 @@ package shelley -import "time" +import ( + "encoding/json" + "io" + "os" + "time" +) type ShelleyGenesis struct { SystemStart time.Time `json:"systemStart"` @@ -56,3 +61,22 @@ type ShelleyGenesisProtocolParams struct { MinUtxoValue uint `json:"minUTxOValue"` MinPoolCost uint } + +func NewShelleyGenesisFromReader(r io.Reader) (ShelleyGenesis, error) { + var ret ShelleyGenesis + dec := json.NewDecoder(r) + dec.DisallowUnknownFields() + if err := dec.Decode(&ret); err != nil { + return ret, err + } + return ret, nil +} + +func NewShelleyGenesisFromFile(path string) (ShelleyGenesis, error) { + f, err := os.Open(path) + if err != nil { + return ShelleyGenesis{}, err + } + defer f.Close() + return NewShelleyGenesisFromReader(f) +} diff --git a/ledger/shelley/genesis_test.go b/ledger/shelley/genesis_test.go index fbde082d..0f12f777 100644 --- a/ledger/shelley/genesis_test.go +++ b/ledger/shelley/genesis_test.go @@ -15,8 +15,8 @@ package shelley_test import ( - "encoding/json" "reflect" + "strings" "testing" "time" @@ -167,8 +167,8 @@ var expectedGenesisObj = shelley.ShelleyGenesis{ } func TestGenesisFromJson(t *testing.T) { - var tmpGenesis shelley.ShelleyGenesis - if err := json.Unmarshal([]byte(shelleyGenesisConfig), &tmpGenesis); err != nil { + tmpGenesis, err := shelley.NewShelleyGenesisFromReader(strings.NewReader(shelleyGenesisConfig)) + if err != nil { t.Fatalf("unexpected error: %s", err) } if !reflect.DeepEqual(tmpGenesis, expectedGenesisObj) {