Skip to content

Commit 32afc58

Browse files
author
Jenita
committed
feat: changes to support cost models while updating Alonzon protocols
Signed-off-by: Jenita <[email protected]>
1 parent 654b39e commit 32afc58

File tree

1 file changed

+33
-56
lines changed

1 file changed

+33
-56
lines changed

ledger/alonzo/pparams.go

Lines changed: 33 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ import (
2222

2323
"github.com/blinklabs-io/gouroboros/cbor"
2424
"github.com/blinklabs-io/gouroboros/ledger/common"
25-
"github.com/blinklabs-io/gouroboros/ledger/mary"
25+
26+
//"github.com/blinklabs-io/gouroboros/ledger/mary"
2627
cardano "github.com/utxorpc/go-codegen/utxorpc/v1alpha/cardano"
2728
)
2829

@@ -327,22 +328,37 @@ func (p *AlonzoProtocolParameters) Utxorpc() *cardano.PParams {
327328
return nil
328329
}
329330

330-
// Helper function to safely check rational number bounds
331-
safeRatCheck := func(rat *cbor.Rat) bool {
331+
// Helper function to safely convert rational numbers with bounds checking
332+
safeRatConvert := func(rat *cbor.Rat) *cardano.RationalNumber {
332333
if rat == nil || rat.Rat == nil {
333-
return false
334+
return nil
334335
}
335336
num := rat.Num().Int64()
336337
denom := rat.Denom().Int64()
337-
return num <= math.MaxInt32 && denom > 0 && denom <= math.MaxUint32
338-
}
339338

340-
// Validate all rational numbers
341-
if !safeRatCheck(p.A0) || !safeRatCheck(p.Rho) || !safeRatCheck(p.Tau) {
342-
return nil
339+
// Check bounds for int32 numerator and uint32 denominator
340+
if num < math.MinInt32 || num > math.MaxInt32 {
341+
return nil
342+
}
343+
if denom <= 0 || denom > math.MaxUint32 {
344+
return nil
345+
}
346+
347+
return &cardano.RationalNumber{
348+
Numerator: int32(num),
349+
Denominator: uint32(denom),
350+
}
343351
}
344-
if p.ExecutionCosts.MemPrice == nil || p.ExecutionCosts.StepPrice == nil ||
345-
!safeRatCheck(p.ExecutionCosts.MemPrice) || !safeRatCheck(p.ExecutionCosts.StepPrice) {
352+
353+
// Convert all rational numbers with safety checks
354+
a0 := safeRatConvert(p.A0)
355+
rho := safeRatConvert(p.Rho)
356+
tau := safeRatConvert(p.Tau)
357+
memPrice := safeRatConvert(p.ExecutionCosts.MemPrice)
358+
stepPrice := safeRatConvert(p.ExecutionCosts.StepPrice)
359+
360+
// Return nil if any conversion failed
361+
if a0 == nil || rho == nil || tau == nil || memPrice == nil || stepPrice == nil {
346362
return nil
347363
}
348364

@@ -391,19 +407,10 @@ func (p *AlonzoProtocolParameters) Utxorpc() *cardano.PParams {
391407
PoolDeposit: uint64(p.PoolDeposit),
392408
PoolRetirementEpochBound: uint64(p.MaxEpoch),
393409
DesiredNumberOfPools: uint64(p.NOpt),
394-
PoolInfluence: &cardano.RationalNumber{
395-
Numerator: int32(p.A0.Num().Int64()),
396-
Denominator: uint32(p.A0.Denom().Int64()),
397-
},
398-
MonetaryExpansion: &cardano.RationalNumber{
399-
Numerator: int32(p.Rho.Num().Int64()),
400-
Denominator: uint32(p.Rho.Denom().Int64()),
401-
},
402-
TreasuryExpansion: &cardano.RationalNumber{
403-
Numerator: int32(p.Tau.Num().Int64()),
404-
Denominator: uint32(p.Tau.Denom().Int64()),
405-
},
406-
MinPoolCost: p.MinPoolCost,
410+
PoolInfluence: a0,
411+
MonetaryExpansion: rho,
412+
TreasuryExpansion: tau,
413+
MinPoolCost: p.MinPoolCost,
407414
ProtocolVersion: &cardano.ProtocolVersion{
408415
Major: uint32(p.ProtocolMajor),
409416
Minor: uint32(p.ProtocolMinor),
@@ -413,14 +420,8 @@ func (p *AlonzoProtocolParameters) Utxorpc() *cardano.PParams {
413420
MaxCollateralInputs: uint64(p.MaxCollateralInputs),
414421
CostModels: costModels,
415422
Prices: &cardano.ExPrices{
416-
Memory: &cardano.RationalNumber{
417-
Numerator: int32(p.ExecutionCosts.MemPrice.Num().Int64()),
418-
Denominator: uint32(p.ExecutionCosts.MemPrice.Denom().Int64()),
419-
},
420-
Steps: &cardano.RationalNumber{
421-
Numerator: int32(p.ExecutionCosts.StepPrice.Num().Int64()),
422-
Denominator: uint32(p.ExecutionCosts.StepPrice.Denom().Int64()),
423-
},
423+
Memory: memPrice,
424+
Steps: stepPrice,
424425
},
425426
MaxExecutionUnitsPerTransaction: &cardano.ExUnits{
426427
Memory: p.MaxTxExUnits.Memory,
@@ -432,27 +433,3 @@ func (p *AlonzoProtocolParameters) Utxorpc() *cardano.PParams {
432433
},
433434
}
434435
}
435-
436-
func UpgradePParams(
437-
prevPParams mary.MaryProtocolParameters,
438-
) AlonzoProtocolParameters {
439-
return AlonzoProtocolParameters{
440-
MinFeeA: prevPParams.MinFeeA,
441-
MinFeeB: prevPParams.MinFeeB,
442-
MaxBlockBodySize: prevPParams.MaxBlockBodySize,
443-
MaxTxSize: prevPParams.MaxTxSize,
444-
MaxBlockHeaderSize: prevPParams.MaxBlockHeaderSize,
445-
KeyDeposit: prevPParams.KeyDeposit,
446-
PoolDeposit: prevPParams.PoolDeposit,
447-
MaxEpoch: prevPParams.MaxEpoch,
448-
NOpt: prevPParams.NOpt,
449-
A0: prevPParams.A0,
450-
Rho: prevPParams.Rho,
451-
Tau: prevPParams.Tau,
452-
Decentralization: prevPParams.Decentralization,
453-
ExtraEntropy: prevPParams.ExtraEntropy,
454-
ProtocolMajor: prevPParams.ProtocolMajor,
455-
ProtocolMinor: prevPParams.ProtocolMinor,
456-
MinUtxoValue: prevPParams.MinUtxoValue,
457-
}
458-
}

0 commit comments

Comments
 (0)