Skip to content

Commit 8dc925c

Browse files
authored
fix: store redeemers in legacy format when needed (#1079)
This retains data ordering when the original on-chain data was ordered Fixes #1070 Signed-off-by: Aurora Gaffney <[email protected]>
1 parent a5e30a0 commit 8dc925c

File tree

1 file changed

+10
-17
lines changed

1 file changed

+10
-17
lines changed

ledger/conway/conway.go

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -167,27 +167,14 @@ type ConwayRedeemerValue struct {
167167
}
168168

169169
type ConwayRedeemers struct {
170-
Redeemers map[ConwayRedeemerKey]ConwayRedeemerValue
171-
legacy bool
170+
Redeemers map[ConwayRedeemerKey]ConwayRedeemerValue
171+
legacyRedeemers alonzo.AlonzoRedeemers
172+
legacy bool
172173
}
173174

174175
func (r *ConwayRedeemers) UnmarshalCBOR(cborData []byte) error {
175176
// Try to parse as legacy redeemer first
176-
var tmpRedeemers []alonzo.AlonzoRedeemer
177-
if _, err := cbor.Decode(cborData, &tmpRedeemers); err == nil {
178-
// Copy data from legacy redeemer type
179-
r.Redeemers = make(map[ConwayRedeemerKey]ConwayRedeemerValue)
180-
for _, redeemer := range tmpRedeemers {
181-
tmpKey := ConwayRedeemerKey{
182-
Tag: redeemer.Tag,
183-
Index: redeemer.Index,
184-
}
185-
tmpVal := ConwayRedeemerValue{
186-
Data: redeemer.Data,
187-
ExUnits: redeemer.ExUnits,
188-
}
189-
r.Redeemers[tmpKey] = tmpVal
190-
}
177+
if _, err := cbor.Decode(cborData, &(r.legacyRedeemers)); err == nil {
191178
r.legacy = true
192179
} else {
193180
_, err := cbor.Decode(cborData, &(r.Redeemers))
@@ -197,6 +184,9 @@ func (r *ConwayRedeemers) UnmarshalCBOR(cborData []byte) error {
197184
}
198185

199186
func (r ConwayRedeemers) Indexes(tag common.RedeemerTag) []uint {
187+
if r.legacy {
188+
return r.legacyRedeemers.Indexes(tag)
189+
}
200190
ret := []uint{}
201191
for key := range r.Redeemers {
202192
if key.Tag == tag {
@@ -210,6 +200,9 @@ func (r ConwayRedeemers) Value(
210200
index uint,
211201
tag common.RedeemerTag,
212202
) (cbor.LazyValue, common.ExUnits) {
203+
if r.legacy {
204+
return r.legacyRedeemers.Value(index, tag)
205+
}
213206
redeemer, ok := r.Redeemers[ConwayRedeemerKey{
214207
Tag: tag,
215208
Index: uint32(index), // #nosec G115

0 commit comments

Comments
 (0)