diff --git a/ledger/allegra.go b/ledger/allegra.go index e4d26e18..4fa06d8a 100644 --- a/ledger/allegra.go +++ b/ledger/allegra.go @@ -71,14 +71,13 @@ func (b *AllegraBlock) Era() Era { } func (b *AllegraBlock) Transactions() []Transaction { - ret := []Transaction{} + ret := make([]Transaction, len(b.TransactionBodies)) for idx := range b.TransactionBodies { - tmpTransaction := AllegraTransaction{ + ret[idx] = &AllegraTransaction{ Body: b.TransactionBodies[idx], WitnessSet: b.TransactionWitnessSets[idx], TxMetadata: b.TransactionMetadataSet[uint(idx)], } - ret = append(ret, &tmpTransaction) } return ret } diff --git a/ledger/alonzo.go b/ledger/alonzo.go index 1d3cf57c..1d79e9fe 100644 --- a/ledger/alonzo.go +++ b/ledger/alonzo.go @@ -73,22 +73,19 @@ func (b *AlonzoBlock) Era() Era { } func (b *AlonzoBlock) Transactions() []Transaction { - ret := []Transaction{} + invalidTxMap := make(map[uint]bool, len(b.InvalidTransactions)) + for _, invalidTxIdx := range b.InvalidTransactions { + invalidTxMap[invalidTxIdx] = true + } + + ret := make([]Transaction, len(b.TransactionBodies)) for idx := range b.TransactionBodies { - tmpTransaction := AlonzoTransaction{ + ret[idx] = &AlonzoTransaction{ Body: b.TransactionBodies[idx], WitnessSet: b.TransactionWitnessSets[idx], TxMetadata: b.TransactionMetadataSet[uint(idx)], + IsValid: !invalidTxMap[uint(idx)], } - isValid := true - for _, invalidTxIdx := range b.InvalidTransactions { - if invalidTxIdx == uint(idx) { - isValid = false - break - } - } - tmpTransaction.IsValid = isValid - ret = append(ret, &tmpTransaction) } return ret } diff --git a/ledger/babbage.go b/ledger/babbage.go index 6b10c5c0..0510c89a 100644 --- a/ledger/babbage.go +++ b/ledger/babbage.go @@ -73,22 +73,19 @@ func (b *BabbageBlock) Era() Era { } func (b *BabbageBlock) Transactions() []Transaction { - ret := []Transaction{} + invalidTxMap := make(map[uint]bool, len(b.InvalidTransactions)) + for _, invalidTxIdx := range b.InvalidTransactions { + invalidTxMap[invalidTxIdx] = true + } + + ret := make([]Transaction, len(b.TransactionBodies)) for idx := range b.TransactionBodies { - tmpTransaction := BabbageTransaction{ + ret[idx] = &BabbageTransaction{ Body: b.TransactionBodies[idx], WitnessSet: b.TransactionWitnessSets[idx], TxMetadata: b.TransactionMetadataSet[uint(idx)], + IsValid: !invalidTxMap[uint(idx)], } - isValid := true - for _, invalidTxIdx := range b.InvalidTransactions { - if invalidTxIdx == uint(idx) { - isValid = false - break - } - } - tmpTransaction.IsValid = isValid - ret = append(ret, &tmpTransaction) } return ret } diff --git a/ledger/babbage_test.go b/ledger/babbage_test.go new file mode 100644 index 00000000..615a009b --- /dev/null +++ b/ledger/babbage_test.go @@ -0,0 +1,64 @@ +package ledger + +import ( + "testing" +) + +func TestBabbageBlockTransactions(t *testing.T) { + b := &BabbageBlock{} + + t.Run("empty", func(t *testing.T) { + if lenTxs := len(b.Transactions()); lenTxs != 0 { + t.Fatalf("expected number of transactions is 0 but it was %d", lenTxs) + } + }) + + txsCount := 7 + b.TransactionBodies = make([]BabbageTransactionBody, txsCount) + b.TransactionWitnessSets = make([]BabbageTransactionWitnessSet, txsCount) + + for i := 0; i < txsCount; i++ { + b.TransactionBodies[i] = BabbageTransactionBody{ + TotalCollateral: 1 << i, + } + b.TransactionWitnessSets[i] = BabbageTransactionWitnessSet{ + AlonzoTransactionWitnessSet: AlonzoTransactionWitnessSet{ + ShelleyTransactionWitnessSet: ShelleyTransactionWitnessSet{ + VkeyWitnesses: []interface{}{ + append(make([]byte, 95), 1<