Skip to content

Commit b75fedb

Browse files
authored
refactor: use int64 for ExUnits (#1156)
This allows us to store negative values, such as for budget overruns. This also matches the implementation in plutigo Fixes #1155 Signed-off-by: Aurora Gaffney <[email protected]>
1 parent 3924228 commit b75fedb

File tree

8 files changed

+25
-25
lines changed

8 files changed

+25
-25
lines changed

ledger/alonzo/pparams.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,12 @@ func (p *AlonzoProtocolParameters) UpdateFromGenesis(
165165
p.CollateralPercentage = genesis.CollateralPercentage
166166
p.MaxCollateralInputs = genesis.MaxCollateralInputs
167167
p.MaxTxExUnits = common.ExUnits{
168-
Memory: uint64(genesis.MaxTxExUnits.Mem),
169-
Steps: uint64(genesis.MaxTxExUnits.Steps),
168+
Memory: int64(genesis.MaxTxExUnits.Mem), // nolint:gosec
169+
Steps: int64(genesis.MaxTxExUnits.Steps), // nolint:gosec
170170
}
171171
p.MaxBlockExUnits = common.ExUnits{
172-
Memory: uint64(genesis.MaxBlockExUnits.Mem),
173-
Steps: uint64(genesis.MaxBlockExUnits.Steps),
172+
Memory: int64(genesis.MaxBlockExUnits.Mem), // nolint:gosec
173+
Steps: int64(genesis.MaxBlockExUnits.Steps), // nolint:gosec
174174
}
175175

176176
if genesis.ExecutionPrices.Mem != nil &&
@@ -347,12 +347,12 @@ func (p *AlonzoProtocolParameters) Utxorpc() (*cardano.PParams, error) {
347347
},
348348
},
349349
MaxExecutionUnitsPerTransaction: &cardano.ExUnits{
350-
Memory: p.MaxTxExUnits.Memory,
351-
Steps: p.MaxTxExUnits.Steps,
350+
Memory: uint64(p.MaxTxExUnits.Memory),
351+
Steps: uint64(p.MaxTxExUnits.Steps),
352352
},
353353
MaxExecutionUnitsPerBlock: &cardano.ExUnits{
354-
Memory: p.MaxBlockExUnits.Memory,
355-
Steps: p.MaxBlockExUnits.Steps,
354+
Memory: uint64(p.MaxBlockExUnits.Memory),
355+
Steps: uint64(p.MaxBlockExUnits.Steps),
356356
},
357357
}, nil
358358
}

ledger/alonzo/rules.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func UtxoValidateExUnitsTooBigUtxo(
9191
if !ok {
9292
return errors.New("transaction is not expected type")
9393
}
94-
var totalSteps, totalMemory uint64
94+
var totalSteps, totalMemory int64
9595
for _, redeemer := range tmpTx.WitnessSet.WsRedeemers {
9696
totalSteps += redeemer.ExUnits.Steps
9797
totalMemory += redeemer.ExUnits.Memory

ledger/babbage/pparams.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -236,12 +236,12 @@ func (p *BabbageProtocolParameters) Utxorpc() (*cardano.PParams, error) {
236236
},
237237
},
238238
MaxExecutionUnitsPerTransaction: &cardano.ExUnits{
239-
Memory: p.MaxTxExUnits.Memory,
240-
Steps: p.MaxTxExUnits.Steps,
239+
Memory: uint64(p.MaxTxExUnits.Memory),
240+
Steps: uint64(p.MaxTxExUnits.Steps),
241241
},
242242
MaxExecutionUnitsPerBlock: &cardano.ExUnits{
243-
Memory: p.MaxBlockExUnits.Memory,
244-
Steps: p.MaxBlockExUnits.Steps,
243+
Memory: uint64(p.MaxBlockExUnits.Memory),
244+
Steps: uint64(p.MaxBlockExUnits.Steps),
245245
},
246246
}, nil
247247
}

ledger/babbage/rules.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ func UtxoValidateExUnitsTooBigUtxo(
416416
if !ok {
417417
return errors.New("transaction is not expected type")
418418
}
419-
var totalSteps, totalMemory uint64
419+
var totalSteps, totalMemory int64
420420
for _, redeemer := range tmpTx.WitnessSet.WsRedeemers {
421421
totalSteps += redeemer.ExUnits.Steps
422422
totalMemory += redeemer.ExUnits.Memory

ledger/common/common.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,8 +436,8 @@ func (i IssuerVkey) PoolId() string {
436436
// ExUnits represents the steps and memory usage for script execution
437437
type ExUnits struct {
438438
cbor.StructAsArray
439-
Memory uint64
440-
Steps uint64
439+
Memory int64
440+
Steps int64
441441
}
442442

443443
// GenesisRat is a convenience type for cbor.Rat

ledger/common/script.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,8 @@ func (s PlutusV3Script) Evaluate(scriptContext data.PlutusData, budget ExUnits)
146146
machineBudget := cek.DefaultExBudget
147147
if budget.Steps > 0 || budget.Memory > 0 {
148148
machineBudget = cek.ExBudget{
149-
Cpu: int64(budget.Steps), // nolint: gosec
150-
Mem: int64(budget.Memory), // nolint: gosec
149+
Cpu: budget.Steps,
150+
Mem: budget.Memory,
151151
}
152152
}
153153
// Decode raw script as bytestring to get actual script bytes
@@ -178,8 +178,8 @@ func (s PlutusV3Script) Evaluate(scriptContext data.PlutusData, budget ExUnits)
178178
return usedExUnits, fmt.Errorf("execute script: %w", err)
179179
}
180180
consumedBudget := machineBudget.Sub(&machine.ExBudget)
181-
usedExUnits.Memory = uint64(consumedBudget.Mem) // nolint:gosec
182-
usedExUnits.Steps = uint64(consumedBudget.Cpu) // nolint:gosec
181+
usedExUnits.Memory = consumedBudget.Mem
182+
usedExUnits.Steps = consumedBudget.Cpu
183183
return usedExUnits, nil
184184
}
185185

ledger/conway/pparams.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,12 @@ func (p *ConwayProtocolParameters) Utxorpc() (*cardano.PParams, error) {
132132
},
133133
},
134134
MaxExecutionUnitsPerTransaction: &cardano.ExUnits{
135-
Memory: p.MaxTxExUnits.Memory,
136-
Steps: p.MaxTxExUnits.Steps,
135+
Memory: uint64(p.MaxTxExUnits.Memory),
136+
Steps: uint64(p.MaxTxExUnits.Steps),
137137
},
138138
MaxExecutionUnitsPerBlock: &cardano.ExUnits{
139-
Memory: p.MaxBlockExUnits.Memory,
140-
Steps: p.MaxBlockExUnits.Steps,
139+
Memory: uint64(p.MaxBlockExUnits.Memory),
140+
Steps: uint64(p.MaxBlockExUnits.Steps),
141141
},
142142
}, nil
143143
}

ledger/conway/rules.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ func UtxoValidateExUnitsTooBigUtxo(
426426
if !ok {
427427
return errors.New("transaction is not expected type")
428428
}
429-
var totalSteps, totalMemory uint64
429+
var totalSteps, totalMemory int64
430430
for _, redeemer := range tmpTx.WitnessSet.WsRedeemers.Redeemers {
431431
totalSteps += redeemer.ExUnits.Steps
432432
totalMemory += redeemer.ExUnits.Memory

0 commit comments

Comments
 (0)