Skip to content

Commit 7f6422c

Browse files
author
Hareem Adderley
committed
fix: improve redeemer handling for compatibility and remove canonical True on cost_models_bytes
1 parent 304375c commit 7f6422c

File tree

1 file changed

+5
-13
lines changed

1 file changed

+5
-13
lines changed

pycardano/utils.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -249,16 +249,16 @@ def script_data_hash(
249249
Returns:
250250
ScriptDataHash: Plutus script data hash
251251
"""
252-
# Handle empty redeemers case - should be encoded as an empty RedeemerMap (A0 in hex)
253-
if not redeemers:
252+
if redeemers is None:
254253
redeemers = RedeemerMap()
255254
cost_models = {}
255+
elif len(redeemers) == 0:
256+
cost_models = {}
256257
elif not cost_models:
257258
cost_models = COST_MODELS
258259

259260
redeemer_bytes = cbor2.dumps(redeemers, default=default_encoder)
260261

261-
# Handle datums - if no datums, use empty bytestring
262262
if datums:
263263
if not isinstance(datums, NonEmptyOrderedSet):
264264
# If datums is not a NonEmptyOrderedSet, handle it as a list
@@ -270,19 +270,11 @@ def script_data_hash(
270270
else:
271271
datum_bytes = b""
272272

273-
# Encode cost models - must use definite length encoding
274-
cost_models_bytes = cbor2.dumps(
275-
cost_models,
276-
default=default_encoder,
277-
canonical=True, # Ensures definite length encoding and canonical map keys
278-
)
279-
280-
# Concatenate in order: redeemers || datums || language views
281-
data = redeemer_bytes + datum_bytes + cost_models_bytes
273+
cost_models_bytes = cbor2.dumps(cost_models, default=default_encoder)
282274

283275
return ScriptDataHash(
284276
blake2b(
285-
data,
277+
redeemer_bytes + datum_bytes + cost_models_bytes,
286278
SCRIPT_DATA_HASH_SIZE,
287279
encoder=RawEncoder,
288280
)

0 commit comments

Comments
 (0)