Skip to content

Commit cb6c052

Browse files
authored
perf: a little optimization for Transactions() methods (#527)
1 parent dee4863 commit cb6c052

File tree

7 files changed

+94
-42
lines changed

7 files changed

+94
-42
lines changed

ledger/allegra.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,13 @@ func (b *AllegraBlock) Era() Era {
7171
}
7272

7373
func (b *AllegraBlock) Transactions() []Transaction {
74-
ret := []Transaction{}
74+
ret := make([]Transaction, len(b.TransactionBodies))
7575
for idx := range b.TransactionBodies {
76-
tmpTransaction := AllegraTransaction{
76+
ret[idx] = &AllegraTransaction{
7777
Body: b.TransactionBodies[idx],
7878
WitnessSet: b.TransactionWitnessSets[idx],
7979
TxMetadata: b.TransactionMetadataSet[uint(idx)],
8080
}
81-
ret = append(ret, &tmpTransaction)
8281
}
8382
return ret
8483
}

ledger/alonzo.go

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -73,22 +73,19 @@ func (b *AlonzoBlock) Era() Era {
7373
}
7474

7575
func (b *AlonzoBlock) Transactions() []Transaction {
76-
ret := []Transaction{}
76+
invalidTxMap := make(map[uint]bool, len(b.InvalidTransactions))
77+
for _, invalidTxIdx := range b.InvalidTransactions {
78+
invalidTxMap[invalidTxIdx] = true
79+
}
80+
81+
ret := make([]Transaction, len(b.TransactionBodies))
7782
for idx := range b.TransactionBodies {
78-
tmpTransaction := AlonzoTransaction{
83+
ret[idx] = &AlonzoTransaction{
7984
Body: b.TransactionBodies[idx],
8085
WitnessSet: b.TransactionWitnessSets[idx],
8186
TxMetadata: b.TransactionMetadataSet[uint(idx)],
87+
IsValid: !invalidTxMap[uint(idx)],
8288
}
83-
isValid := true
84-
for _, invalidTxIdx := range b.InvalidTransactions {
85-
if invalidTxIdx == uint(idx) {
86-
isValid = false
87-
break
88-
}
89-
}
90-
tmpTransaction.IsValid = isValid
91-
ret = append(ret, &tmpTransaction)
9289
}
9390
return ret
9491
}

ledger/babbage.go

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -73,22 +73,19 @@ func (b *BabbageBlock) Era() Era {
7373
}
7474

7575
func (b *BabbageBlock) Transactions() []Transaction {
76-
ret := []Transaction{}
76+
invalidTxMap := make(map[uint]bool, len(b.InvalidTransactions))
77+
for _, invalidTxIdx := range b.InvalidTransactions {
78+
invalidTxMap[invalidTxIdx] = true
79+
}
80+
81+
ret := make([]Transaction, len(b.TransactionBodies))
7782
for idx := range b.TransactionBodies {
78-
tmpTransaction := BabbageTransaction{
83+
ret[idx] = &BabbageTransaction{
7984
Body: b.TransactionBodies[idx],
8085
WitnessSet: b.TransactionWitnessSets[idx],
8186
TxMetadata: b.TransactionMetadataSet[uint(idx)],
87+
IsValid: !invalidTxMap[uint(idx)],
8288
}
83-
isValid := true
84-
for _, invalidTxIdx := range b.InvalidTransactions {
85-
if invalidTxIdx == uint(idx) {
86-
isValid = false
87-
break
88-
}
89-
}
90-
tmpTransaction.IsValid = isValid
91-
ret = append(ret, &tmpTransaction)
9289
}
9390
return ret
9491
}

ledger/babbage_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package ledger
2+
3+
import (
4+
"testing"
5+
)
6+
7+
func TestBabbageBlockTransactions(t *testing.T) {
8+
b := &BabbageBlock{}
9+
10+
t.Run("empty", func(t *testing.T) {
11+
if lenTxs := len(b.Transactions()); lenTxs != 0 {
12+
t.Fatalf("expected number of transactions is 0 but it was %d", lenTxs)
13+
}
14+
})
15+
16+
txsCount := 7
17+
b.TransactionBodies = make([]BabbageTransactionBody, txsCount)
18+
b.TransactionWitnessSets = make([]BabbageTransactionWitnessSet, txsCount)
19+
20+
for i := 0; i < txsCount; i++ {
21+
b.TransactionBodies[i] = BabbageTransactionBody{
22+
TotalCollateral: 1 << i,
23+
}
24+
b.TransactionWitnessSets[i] = BabbageTransactionWitnessSet{
25+
AlonzoTransactionWitnessSet: AlonzoTransactionWitnessSet{
26+
ShelleyTransactionWitnessSet: ShelleyTransactionWitnessSet{
27+
VkeyWitnesses: []interface{}{
28+
append(make([]byte, 95), 1<<i),
29+
},
30+
},
31+
},
32+
}
33+
}
34+
35+
t.Run("no invalid", func(t *testing.T) {
36+
txs := b.Transactions()
37+
38+
if lenTxs := len(txs); lenTxs != txsCount {
39+
t.Fatalf("expected number of transactions is %d but it was %d", txsCount, lenTxs)
40+
}
41+
42+
for i, tx := range txs {
43+
if btx := tx.(*BabbageTransaction); !btx.IsValid {
44+
t.Fatalf("expected transaction number %d IsValid is %v but is was %v", i, true, btx.IsValid)
45+
}
46+
}
47+
})
48+
49+
t.Run("with invalid", func(t *testing.T) {
50+
b.InvalidTransactions = []uint{2, 4, 5}
51+
txs := b.Transactions()
52+
53+
if lenTxs := len(txs); lenTxs != txsCount {
54+
t.Fatalf("expected number of transactions is %d but it was %d", txsCount, lenTxs)
55+
}
56+
57+
for i, tx := range txs {
58+
expected := i != 2 && i != 4 && i != 5
59+
if btx := tx.(*BabbageTransaction); btx.IsValid != expected {
60+
t.Fatalf("expected transaction number %d IsValid is %v but is was %v", i, expected, btx.IsValid)
61+
}
62+
}
63+
})
64+
}

ledger/conway.go

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -72,22 +72,19 @@ func (b *ConwayBlock) Era() Era {
7272
}
7373

7474
func (b *ConwayBlock) Transactions() []Transaction {
75-
ret := []Transaction{}
75+
invalidTxMap := make(map[uint]bool, len(b.InvalidTransactions))
76+
for _, invalidTxIdx := range b.InvalidTransactions {
77+
invalidTxMap[invalidTxIdx] = true
78+
}
79+
80+
ret := make([]Transaction, len(b.TransactionBodies))
7681
for idx := range b.TransactionBodies {
77-
tmpTransaction := ConwayTransaction{
82+
ret[idx] = &ConwayTransaction{
7883
Body: b.TransactionBodies[idx],
7984
WitnessSet: b.TransactionWitnessSets[idx],
8085
TxMetadata: b.TransactionMetadataSet[uint(idx)],
86+
IsValid: !invalidTxMap[uint(idx)],
8187
}
82-
isValid := true
83-
for _, invalidTxIdx := range b.InvalidTransactions {
84-
if invalidTxIdx == uint(idx) {
85-
isValid = false
86-
break
87-
}
88-
}
89-
tmpTransaction.IsValid = isValid
90-
ret = append(ret, &tmpTransaction)
9188
}
9289
return ret
9390
}

ledger/mary.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,13 @@ func (b *MaryBlock) Era() Era {
7272
}
7373

7474
func (b *MaryBlock) Transactions() []Transaction {
75-
ret := []Transaction{}
75+
ret := make([]Transaction, len(b.TransactionBodies))
7676
for idx := range b.TransactionBodies {
77-
tmpTransaction := MaryTransaction{
77+
ret[idx] = &MaryTransaction{
7878
Body: b.TransactionBodies[idx],
7979
WitnessSet: b.TransactionWitnessSets[idx],
8080
TxMetadata: b.TransactionMetadataSet[uint(idx)],
8181
}
82-
ret = append(ret, &tmpTransaction)
8382
}
8483
return ret
8584
}

ledger/shelley.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,13 @@ func (b *ShelleyBlock) Era() Era {
7171
}
7272

7373
func (b *ShelleyBlock) Transactions() []Transaction {
74-
ret := []Transaction{}
74+
ret := make([]Transaction, len(b.TransactionBodies))
7575
for idx := range b.TransactionBodies {
76-
tmpTransaction := ShelleyTransaction{
76+
ret[idx] = &ShelleyTransaction{
7777
Body: b.TransactionBodies[idx],
7878
WitnessSet: b.TransactionWitnessSets[idx],
7979
TxMetadata: b.TransactionMetadataSet[uint(idx)],
8080
}
81-
ret = append(ret, &tmpTransaction)
8281
}
8382
return ret
8483
}

0 commit comments

Comments
 (0)