diff --git a/ledger/allegra/pparams.go b/ledger/allegra/pparams.go index 74312005..ed2290bd 100644 --- a/ledger/allegra/pparams.go +++ b/ledger/allegra/pparams.go @@ -42,3 +42,9 @@ func (u *AllegraProtocolParameterUpdate) UnmarshalCBOR(data []byte) error { func (p *AllegraProtocolParameters) Utxorpc() *cardano.PParams { return p.ShelleyProtocolParameters.Utxorpc() } + +func UpgradePParams(prevPParams shelley.ShelleyProtocolParameters) AllegraProtocolParameters { + return AllegraProtocolParameters{ + ShelleyProtocolParameters: prevPParams, + } +} diff --git a/ledger/alonzo/pparams.go b/ledger/alonzo/pparams.go index d70a1fe9..963234ed 100644 --- a/ledger/alonzo/pparams.go +++ b/ledger/alonzo/pparams.go @@ -73,8 +73,7 @@ func (p *AlonzoProtocolParameters) UpdateFromGenesis(genesis *AlonzoGenesis) { if genesis == nil { return } - // XXX: do we need to convert this? - p.AdaPerUtxoByte = genesis.LovelacePerUtxoWord + p.AdaPerUtxoByte = genesis.LovelacePerUtxoWord / 8 p.MaxValueSize = genesis.MaxValueSize p.CollateralPercentage = genesis.CollateralPercentage p.MaxCollateralInputs = genesis.MaxCollateralInputs @@ -170,3 +169,9 @@ func (p *AlonzoProtocolParameters) Utxorpc() *cardano.PParams { }, } } + +func UpgradePParams(prevPParams mary.MaryProtocolParameters) AlonzoProtocolParameters { + return AlonzoProtocolParameters{ + MaryProtocolParameters: prevPParams, + } +} diff --git a/ledger/alonzo/pparams_test.go b/ledger/alonzo/pparams_test.go index ddc8d1c6..9b446c05 100644 --- a/ledger/alonzo/pparams_test.go +++ b/ledger/alonzo/pparams_test.go @@ -160,7 +160,7 @@ func TestAlonzoProtocolParamsUpdateFromGenesis(t *testing.T) { }, }, }, - AdaPerUtxoByte: 34482, + AdaPerUtxoByte: 34482 / 8, }, }, } @@ -205,7 +205,7 @@ func TestAlonzoUtxorpc(t *testing.T) { }, }, }, - AdaPerUtxoByte: 44, + AdaPerUtxoByte: 44 / 8, MinPoolCost: 340000000, MaxValueSize: 1024, CollateralPercentage: 150, @@ -230,7 +230,7 @@ func TestAlonzoUtxorpc(t *testing.T) { } expectedUtxorpc := &cardano.PParams{ - CoinsPerUtxoByte: 44, + CoinsPerUtxoByte: 44 / 8, MaxTxSize: 16384, MinFeeCoefficient: 500, MinFeeConstant: 2, diff --git a/ledger/babbage/pparams.go b/ledger/babbage/pparams.go index 431be1c9..3319718b 100644 --- a/ledger/babbage/pparams.go +++ b/ledger/babbage/pparams.go @@ -16,6 +16,7 @@ package babbage import ( "github.com/blinklabs-io/gouroboros/cbor" + "github.com/blinklabs-io/gouroboros/ledger/alonzo" "github.com/blinklabs-io/gouroboros/ledger/common" "github.com/utxorpc/go-codegen/utxorpc/v1alpha/cardano" ) @@ -207,3 +208,32 @@ func (p *BabbageProtocolParameters) Utxorpc() *cardano.PParams { }, } } + +func UpgradePParams(prevPParams alonzo.AlonzoProtocolParameters) BabbageProtocolParameters { + ret := BabbageProtocolParameters{ + MinFeeA: prevPParams.MinFeeA, + MinFeeB: prevPParams.MinFeeB, + MaxBlockBodySize: prevPParams.MaxBlockBodySize, + MaxTxSize: prevPParams.MaxTxSize, + MaxBlockHeaderSize: prevPParams.MaxBlockHeaderSize, + KeyDeposit: prevPParams.KeyDeposit, + PoolDeposit: prevPParams.PoolDeposit, + MaxEpoch: prevPParams.MaxEpoch, + NOpt: prevPParams.NOpt, + A0: prevPParams.A0, + Rho: prevPParams.Rho, + Tau: prevPParams.Tau, + ProtocolMajor: prevPParams.ProtocolMajor, + ProtocolMinor: prevPParams.ProtocolMinor, + MinPoolCost: prevPParams.MinPoolCost, + AdaPerUtxoByte: prevPParams.AdaPerUtxoByte, + CostModels: prevPParams.CostModels, + ExecutionCosts: prevPParams.ExecutionCosts, + MaxTxExUnits: prevPParams.MaxTxExUnits, + MaxBlockExUnits: prevPParams.MaxBlockExUnits, + MaxValueSize: prevPParams.MaxValueSize, + CollateralPercentage: prevPParams.CollateralPercentage, + MaxCollateralInputs: prevPParams.MaxCollateralInputs, + } + return ret +} diff --git a/ledger/conway/pparams.go b/ledger/conway/pparams.go index 9cb9b9a9..fca11b66 100644 --- a/ledger/conway/pparams.go +++ b/ledger/conway/pparams.go @@ -344,3 +344,34 @@ type DRepVotingThresholds struct { PpGovGroup cbor.Rat TreasuryWithdrawal cbor.Rat } + +func UpgradePParams(prevPParams babbage.BabbageProtocolParameters) ConwayProtocolParameters { + ret := ConwayProtocolParameters{ + MinFeeA: prevPParams.MinFeeA, + MinFeeB: prevPParams.MinFeeB, + MaxBlockBodySize: prevPParams.MaxBlockBodySize, + MaxTxSize: prevPParams.MaxTxSize, + MaxBlockHeaderSize: prevPParams.MaxBlockHeaderSize, + KeyDeposit: prevPParams.KeyDeposit, + PoolDeposit: prevPParams.PoolDeposit, + MaxEpoch: prevPParams.MaxEpoch, + NOpt: prevPParams.NOpt, + A0: prevPParams.A0, + Rho: prevPParams.Rho, + Tau: prevPParams.Tau, + ProtocolVersion: common.ProtocolParametersProtocolVersion{ + Major: prevPParams.ProtocolMajor, + Minor: prevPParams.ProtocolMinor, + }, + MinPoolCost: prevPParams.MinPoolCost, + AdaPerUtxoByte: prevPParams.AdaPerUtxoByte, + CostModels: prevPParams.CostModels, + ExecutionCosts: prevPParams.ExecutionCosts, + MaxTxExUnits: prevPParams.MaxTxExUnits, + MaxBlockExUnits: prevPParams.MaxBlockExUnits, + MaxValueSize: prevPParams.MaxValueSize, + CollateralPercentage: prevPParams.CollateralPercentage, + MaxCollateralInputs: prevPParams.MaxCollateralInputs, + } + return ret +} diff --git a/ledger/mary/pparams.go b/ledger/mary/pparams.go index bfd26ae1..b1a8a322 100644 --- a/ledger/mary/pparams.go +++ b/ledger/mary/pparams.go @@ -42,3 +42,9 @@ func (u *MaryProtocolParameterUpdate) UnmarshalCBOR(data []byte) error { func (p *MaryProtocolParameters) Utxorpc() *cardano.PParams { return p.AllegraProtocolParameters.Utxorpc() } + +func UpgradePParams(prevPParams allegra.AllegraProtocolParameters) MaryProtocolParameters { + return MaryProtocolParameters{ + AllegraProtocolParameters: prevPParams, + } +} diff --git a/ledger/shelley/pparams.go b/ledger/shelley/pparams.go index 12111ee7..9453968c 100644 --- a/ledger/shelley/pparams.go +++ b/ledger/shelley/pparams.go @@ -187,3 +187,8 @@ func (p *ShelleyProtocolParameters) Utxorpc() *cardano.PParams { }, } } + +func UpgradePParams(prevPParams any) ShelleyProtocolParameters { + // No upgrade from Byron + return ShelleyProtocolParameters{} +}