File tree Expand file tree Collapse file tree 6 files changed +97
-10
lines changed
Expand file tree Collapse file tree 6 files changed +97
-10
lines changed Original file line number Diff line number Diff line change @@ -76,6 +76,27 @@ func (b *AllegraBlock) UnmarshalCBOR(cborData []byte) error {
7676 return nil
7777}
7878
79+ func (b * AllegraBlock ) MarshalCBOR () ([]byte , error ) {
80+ if b .Cbor () != nil {
81+ return b .Cbor (), nil
82+ }
83+ // Ensure nil slices encode as empty arrays, not CBOR null
84+ txBodies := b .TransactionBodies
85+ if txBodies == nil {
86+ txBodies = []AllegraTransactionBody {}
87+ }
88+ txWitnesses := b .TransactionWitnessSets
89+ if txWitnesses == nil {
90+ txWitnesses = []shelley.ShelleyTransactionWitnessSet {}
91+ }
92+ return cbor .Encode ([]any {
93+ b .BlockHeader ,
94+ txBodies ,
95+ txWitnesses ,
96+ b .TransactionMetadataSet ,
97+ })
98+ }
99+
79100func (AllegraBlock ) Type () int {
80101 return BlockTypeAllegra
81102}
Original file line number Diff line number Diff line change @@ -102,6 +102,16 @@ func (b *AlonzoBlock) MarshalCBOR() ([]byte, error) {
102102 InvalidTransactions cbor.IndefLengthList
103103 }
104104
105+ // Ensure nil slices encode as empty arrays, not CBOR null
106+ txBodies := b .TransactionBodies
107+ if txBodies == nil {
108+ txBodies = []AlonzoTransactionBody {}
109+ }
110+ txWitnesses := b .TransactionWitnessSets
111+ if txWitnesses == nil {
112+ txWitnesses = []AlonzoTransactionWitnessSet {}
113+ }
114+
105115 // Convert InvalidTransactions to IndefLengthList
106116 var invalidTx cbor.IndefLengthList
107117 if b .InvalidTransactions != nil {
@@ -113,8 +123,8 @@ func (b *AlonzoBlock) MarshalCBOR() ([]byte, error) {
113123
114124 temp := tmpBlock {
115125 BlockHeader : b .BlockHeader ,
116- TransactionBodies : b . TransactionBodies ,
117- TransactionWitnessSets : b . TransactionWitnessSets ,
126+ TransactionBodies : txBodies ,
127+ TransactionWitnessSets : txWitnesses ,
118128 TransactionMetadataSet : b .TransactionMetadataSet ,
119129 InvalidTransactions : invalidTx ,
120130 }
Original file line number Diff line number Diff line change @@ -138,16 +138,27 @@ func (b *BabbageBlock) MarshalCBOR() ([]byte, error) {
138138 return b .Cbor (), nil
139139 }
140140
141- // Ensure InvalidTransactions is encoded as empty array if nil
141+ // Ensure nil slices are encoded as empty CBOR arrays (0x80)
142+ // rather than CBOR null (0xF6). The Cardano CDDL requires
143+ // arrays for transaction_bodies, transaction_witness_sets,
144+ // and invalid_transactions.
145+ txBodies := b .TransactionBodies
146+ if txBodies == nil {
147+ txBodies = []BabbageTransactionBody {}
148+ }
149+ txWitnesses := b .TransactionWitnessSets
150+ if txWitnesses == nil {
151+ txWitnesses = []BabbageTransactionWitnessSet {}
152+ }
142153 invalidTxs := b .InvalidTransactions
143154 if invalidTxs == nil {
144155 invalidTxs = []uint {}
145156 }
146157
147158 return cbor .Encode ([]any {
148159 b .BlockHeader ,
149- b . TransactionBodies ,
150- b . TransactionWitnessSets ,
160+ txBodies ,
161+ txWitnesses ,
151162 b .TransactionMetadataSet ,
152163 invalidTxs ,
153164 })
Original file line number Diff line number Diff line change @@ -139,16 +139,27 @@ func (b *ConwayBlock) MarshalCBOR() ([]byte, error) {
139139 return b .Cbor (), nil
140140 }
141141
142- // Ensure InvalidTransactions is encoded as empty array if nil
142+ // Ensure nil slices are encoded as empty CBOR arrays (0x80)
143+ // rather than CBOR null (0xF6). The Cardano CDDL requires
144+ // arrays for transaction_bodies, transaction_witness_sets,
145+ // and invalid_transactions.
146+ txBodies := b .TransactionBodies
147+ if txBodies == nil {
148+ txBodies = []ConwayTransactionBody {}
149+ }
150+ txWitnesses := b .TransactionWitnessSets
151+ if txWitnesses == nil {
152+ txWitnesses = []ConwayTransactionWitnessSet {}
153+ }
143154 invalidTxs := b .InvalidTransactions
144155 if invalidTxs == nil {
145156 invalidTxs = []uint {}
146157 }
147158
148159 return cbor .Encode ([]any {
149160 b .BlockHeader ,
150- b . TransactionBodies ,
151- b . TransactionWitnessSets ,
161+ txBodies ,
162+ txWitnesses ,
152163 b .TransactionMetadataSet ,
153164 invalidTxs ,
154165 })
Original file line number Diff line number Diff line change @@ -85,8 +85,21 @@ func (b *MaryBlock) MarshalCBOR() ([]byte, error) {
8585 if b .Cbor () != nil {
8686 return b .Cbor (), nil
8787 }
88- // Otherwise, encode generically
89- return cbor .EncodeGeneric (b )
88+ // Ensure nil slices encode as empty arrays, not CBOR null
89+ txBodies := b .TransactionBodies
90+ if txBodies == nil {
91+ txBodies = []MaryTransactionBody {}
92+ }
93+ txWitnesses := b .TransactionWitnessSets
94+ if txWitnesses == nil {
95+ txWitnesses = []shelley.ShelleyTransactionWitnessSet {}
96+ }
97+ return cbor .Encode ([]any {
98+ b .BlockHeader ,
99+ txBodies ,
100+ txWitnesses ,
101+ b .TransactionMetadataSet ,
102+ })
90103}
91104
92105func (MaryBlock ) Type () int {
Original file line number Diff line number Diff line change @@ -83,6 +83,27 @@ func (b *ShelleyBlock) UnmarshalCBOR(cborData []byte) error {
8383 return nil
8484}
8585
86+ func (b * ShelleyBlock ) MarshalCBOR () ([]byte , error ) {
87+ if b .Cbor () != nil {
88+ return b .Cbor (), nil
89+ }
90+ // Ensure nil slices encode as empty arrays, not CBOR null
91+ txBodies := b .TransactionBodies
92+ if txBodies == nil {
93+ txBodies = []ShelleyTransactionBody {}
94+ }
95+ txWitnesses := b .TransactionWitnessSets
96+ if txWitnesses == nil {
97+ txWitnesses = []ShelleyTransactionWitnessSet {}
98+ }
99+ return cbor .Encode ([]any {
100+ b .BlockHeader ,
101+ txBodies ,
102+ txWitnesses ,
103+ b .TransactionMetadataSet ,
104+ })
105+ }
106+
86107func (ShelleyBlock ) Type () int {
87108 return BlockTypeShelley
88109}
You can’t perform that action at this time.
0 commit comments