Skip to content

Commit

Permalink
a little optimization for Transactions() []Transaction methods
Browse files Browse the repository at this point in the history
  • Loading branch information
igorcrevar committed Mar 11, 2024
1 parent 8dc0b05 commit eb9d9e2
Show file tree
Hide file tree
Showing 7 changed files with 94 additions and 42 deletions.
5 changes: 2 additions & 3 deletions ledger/allegra.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
19 changes: 8 additions & 11 deletions ledger/alonzo.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
19 changes: 8 additions & 11 deletions ledger/babbage.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
64 changes: 64 additions & 0 deletions ledger/babbage_test.go
Original file line number Diff line number Diff line change
@@ -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<<i),
},
},
},
}
}

t.Run("no invalid", func(t *testing.T) {
txs := b.Transactions()

if lenTxs := len(txs); lenTxs != txsCount {
t.Fatalf("expected number of transactions is %d but it was %d", txsCount, lenTxs)
}

for i, tx := range txs {
if btx := tx.(*BabbageTransaction); !btx.IsValid {
t.Fatalf("expected transaction number %d IsValid is %v but is was %v", i, true, btx.IsValid)
}
}
})

t.Run("with invalid", func(t *testing.T) {
b.InvalidTransactions = []uint{2, 4, 5}
txs := b.Transactions()

if lenTxs := len(txs); lenTxs != txsCount {
t.Fatalf("expected number of transactions is %d but it was %d", txsCount, lenTxs)
}

for i, tx := range txs {
expected := i != 2 && i != 4 && i != 5
if btx := tx.(*BabbageTransaction); btx.IsValid != expected {
t.Fatalf("expected transaction number %d IsValid is %v but is was %v", i, expected, btx.IsValid)
}
}
})
}
19 changes: 8 additions & 11 deletions ledger/conway.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,22 +72,19 @@ func (b *ConwayBlock) Era() Era {
}

func (b *ConwayBlock) 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 := ConwayTransaction{
ret[idx] = &ConwayTransaction{
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
}
Expand Down
5 changes: 2 additions & 3 deletions ledger/mary.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,13 @@ func (b *MaryBlock) Era() Era {
}

func (b *MaryBlock) Transactions() []Transaction {
ret := []Transaction{}
ret := make([]Transaction, len(b.TransactionBodies))
for idx := range b.TransactionBodies {
tmpTransaction := MaryTransaction{
ret[idx] = &MaryTransaction{
Body: b.TransactionBodies[idx],
WitnessSet: b.TransactionWitnessSets[idx],
TxMetadata: b.TransactionMetadataSet[uint(idx)],
}
ret = append(ret, &tmpTransaction)
}
return ret
}
Expand Down
5 changes: 2 additions & 3 deletions ledger/shelley.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,13 @@ func (b *ShelleyBlock) Era() Era {
}

func (b *ShelleyBlock) Transactions() []Transaction {
ret := []Transaction{}
ret := make([]Transaction, len(b.TransactionBodies))
for idx := range b.TransactionBodies {
tmpTransaction := ShelleyTransaction{
ret[idx] = &ShelleyTransaction{
Body: b.TransactionBodies[idx],
WitnessSet: b.TransactionWitnessSets[idx],
TxMetadata: b.TransactionMetadataSet[uint(idx)],
}
ret = append(ret, &tmpTransaction)
}
return ret
}
Expand Down

0 comments on commit eb9d9e2

Please sign in to comment.