@@ -17,6 +17,9 @@ package conway
1717import  (
1818	"errors" 
1919	"fmt" 
20+ 	"iter" 
21+ 	"maps" 
22+ 	"slices" 
2023
2124	"github.com/blinklabs-io/gouroboros/cbor" 
2225	"github.com/blinklabs-io/gouroboros/ledger/alonzo" 
@@ -154,20 +157,8 @@ func (h *ConwayBlockHeader) Era() common.Era {
154157	return  EraConway 
155158}
156159
157- type  ConwayRedeemerKey  struct  {
158- 	cbor.StructAsArray 
159- 	Tag    common.RedeemerTag 
160- 	Index  uint32 
161- }
162- 
163- type  ConwayRedeemerValue  struct  {
164- 	cbor.StructAsArray 
165- 	Data     cbor.LazyValue 
166- 	ExUnits  common.ExUnits 
167- }
168- 
169160type  ConwayRedeemers  struct  {
170- 	Redeemers        map [ConwayRedeemerKey ] ConwayRedeemerValue 
161+ 	Redeemers        map [common. RedeemerKey ]common. RedeemerValue 
171162	legacyRedeemers  alonzo.AlonzoRedeemers 
172163	legacy           bool 
173164}
@@ -190,6 +181,32 @@ func (r *ConwayRedeemers) MarshalCBOR() ([]byte, error) {
190181	return  cbor .Encode (r .Redeemers )
191182}
192183
184+ func  (r  ConwayRedeemers ) Iter () iter.Seq2 [common.RedeemerKey , common.RedeemerValue ] {
185+ 	return  func (yield  func (common.RedeemerKey , common.RedeemerValue ) bool ) {
186+ 		// Sort redeemers 
187+ 		sorted  :=  slices .Collect (maps .Keys (r .Redeemers ))
188+ 		slices .SortFunc (
189+ 			sorted ,
190+ 			func (a , b  common.RedeemerKey ) int  {
191+ 				if  a .Tag  <  b .Tag  ||  (a .Tag  ==  b .Tag  &&  a .Index  <  b .Index ) {
192+ 					return  - 1 
193+ 				}
194+ 				if  a .Tag  >  b .Tag  ||  (a .Tag  ==  b .Tag  &&  a .Index  >  b .Index ) {
195+ 					return  1 
196+ 				}
197+ 				return  0 
198+ 			},
199+ 		)
200+ 		// Yield keys 
201+ 		for  _ , redeemerKey  :=  range  sorted  {
202+ 			tmpVal  :=  r .Redeemers [redeemerKey ]
203+ 			if  ! yield (redeemerKey , tmpVal ) {
204+ 				return 
205+ 			}
206+ 		}
207+ 	}
208+ }
209+ 
193210func  (r  ConwayRedeemers ) Indexes (tag  common.RedeemerTag ) []uint  {
194211	if  r .legacy  {
195212		return  r .legacyRedeemers .Indexes (tag )
@@ -206,18 +223,18 @@ func (r ConwayRedeemers) Indexes(tag common.RedeemerTag) []uint {
206223func  (r  ConwayRedeemers ) Value (
207224	index  uint ,
208225	tag  common.RedeemerTag ,
209- ) (cbor. LazyValue ,  common.ExUnits )  {
226+ ) common.RedeemerValue  {
210227	if  r .legacy  {
211228		return  r .legacyRedeemers .Value (index , tag )
212229	}
213- 	redeemer , ok  :=  r .Redeemers [ConwayRedeemerKey {
230+ 	redeemerVal , ok  :=  r .Redeemers [common. RedeemerKey {
214231		Tag :   tag ,
215232		Index : uint32 (index ), // #nosec G115 
216233	}]
217234	if  ok  {
218- 		return  redeemer . Data ,  redeemer . ExUnits 
235+ 		return  redeemerVal 
219236	}
220- 	return  cbor. LazyValue {},  common.ExUnits {}
237+ 	return  common.RedeemerValue {}
221238}
222239
223240type  ConwayTransactionWitnessSet  struct  {
0 commit comments