@@ -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