Skip to content

Commit 356f7f0

Browse files
committed
First version of statements cache - not complete
1 parent 095e9bf commit 356f7f0

File tree

95 files changed

+341
-200
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+341
-200
lines changed

src/apps/chifra/pkg/ledger/get_assets.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
)
88

99
func (r *Reconciler) GetAssets(txs []*types.Transaction) ([]*types.Name, bool, error) {
10-
ethTransfers, tokenTransfers, _, err := r.getTransfersInternal(txs)
10+
ethTransfers, tokenTransfers, _, err := r.getTransfersInternal(txs, false)
1111
if err != nil {
1212
return nil, false, err
1313
}

src/apps/chifra/pkg/ledger/get_statements.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,20 @@ import (
77
"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base"
88
"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger"
99
"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types"
10+
"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/walk"
1011
)
1112

1213
func (r *Reconciler) GetStatements(node *types.AppNode[types.Transaction]) ([]types.Statement, error) {
1314
trans := node.Data()
15+
statementGroup := &types.StatementGroup{
16+
Address: r.Opts.AccountFor,
17+
BlockNumber: trans.BlockNumber,
18+
TransactionIndex: trans.TransactionIndex,
19+
}
20+
if err := r.Connection.ReadFromCache(statementGroup); err == nil {
21+
return statementGroup.Statements, nil
22+
}
23+
1424
logger.TestLog(true, "")
1525
logger.TestLog(true, "------------------------------------")
1626
logger.TestLog(true, fmt.Sprintf("~~~ Entering: %d.%d ~~~", trans.BlockNumber, trans.TransactionIndex))
@@ -21,7 +31,7 @@ func (r *Reconciler) GetStatements(node *types.AppNode[types.Transaction]) ([]ty
2131

2232
// First Pass: Fetch unreconciled transfers
2333
logger.TestLog(true, "First pass: Fetching unreconciled transfers")
24-
ethTransfers, tokenTransfers, balances, err := r.getTransfersInternal([]*types.Transaction{trans})
34+
ethTransfers, tokenTransfers, balances, err := r.getTransfersInternal([]*types.Transaction{trans}, true)
2535
if err != nil {
2636
debugFail(1)
2737
logger.TestLog(true, "Error getting unreconciled transfers:", err)
@@ -162,6 +172,13 @@ func (r *Reconciler) GetStatements(node *types.AppNode[types.Transaction]) ([]ty
162172
logger.TestLog(true, fmt.Sprintf("~~~ Leaving: %d.%d ~~~", node.CurBlock(), node.CurTxId()))
163173
logger.TestLog(true, "------------------------------------", len(results), "statements generated.")
164174
logger.TestLog(true, "")
175+
176+
// we don't want to cache filtered results
177+
if !r.HasFilters() {
178+
statementGroup.Statements = results
179+
err = r.Connection.WriteToCache(statementGroup, walk.Cache_Statements, trans.Timestamp)
180+
return results, err
181+
}
165182
return results, nil
166183
}
167184

src/apps/chifra/pkg/ledger/get_transfers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88

99
// GetTransfers returns a statement from a given transaction
1010
func (r *Reconciler) GetTransfers(txs []*types.Transaction) ([]*types.Transfer, bool, error) {
11-
ethTransfers, tokenTransfers, _, err := r.getTransfersInternal(txs)
11+
ethTransfers, tokenTransfers, _, err := r.getTransfersInternal(txs, false)
1212
if err != nil {
1313
return nil, false, err
1414
}

src/apps/chifra/pkg/ledger/get_transfers_internal.go

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types"
66
)
77

8-
func (r *Reconciler) getTransfersInternal(txs []*types.Transaction) ([]*types.Transfer, []*types.Transfer, map[BalanceOptions]*base.Wei, error) {
8+
func (r *Reconciler) getTransfersInternal(txs []*types.Transaction, fetchBalances bool) ([]*types.Transfer, []*types.Transfer, map[BalanceOptions]*base.Wei, error) {
99
var allEthTransfers []*types.Transfer
1010
var allTokenTransfers []*types.Transfer
1111
balances := make(map[BalanceOptions]*base.Wei)
@@ -26,26 +26,28 @@ func (r *Reconciler) getTransfersInternal(txs []*types.Transaction) ([]*types.Tr
2626
allTokenTransfers = append(allTokenTransfers, xfer)
2727
}
2828

29-
// Get balance for current block number if not already present
30-
ahbKey := BalanceOptions{Asset: key.Asset, Holder: key.Holder, BlockNumber: bn}
31-
if _, exists := balances[ahbKey]; !exists {
32-
balance, err := r.Connection.GetBalanceAtToken(key.Asset, key.Holder, bn)
33-
if err != nil {
34-
return nil, nil, nil, err
35-
}
36-
balances[ahbKey] = balance
37-
}
38-
39-
// Get balance for previous block if bn > 0 and not already present
40-
if bn > 0 {
41-
prevBn := bn - 1
42-
prevAhbKey := BalanceOptions{Asset: key.Asset, Holder: key.Holder, BlockNumber: prevBn}
43-
if _, exists := balances[prevAhbKey]; !exists {
44-
balance, err := r.Connection.GetBalanceAtToken(key.Asset, key.Holder, prevBn)
29+
if fetchBalances {
30+
// Get balance for current block number if not already present
31+
ahbKey := BalanceOptions{Asset: key.Asset, Holder: key.Holder, BlockNumber: bn}
32+
if _, exists := balances[ahbKey]; !exists {
33+
balance, err := r.Connection.GetBalanceAtToken(key.Asset, key.Holder, bn)
4534
if err != nil {
4635
return nil, nil, nil, err
4736
}
48-
balances[prevAhbKey] = balance
37+
balances[ahbKey] = balance
38+
}
39+
40+
// Get balance for previous block if bn > 0 and not already present
41+
if bn > 0 {
42+
prevBn := bn - 1
43+
prevAhbKey := BalanceOptions{Asset: key.Asset, Holder: key.Holder, BlockNumber: prevBn}
44+
if _, exists := balances[prevAhbKey]; !exists {
45+
balance, err := r.Connection.GetBalanceAtToken(key.Asset, key.Holder, prevBn)
46+
if err != nil {
47+
return nil, nil, nil, err
48+
}
49+
balances[prevAhbKey] = balance
50+
}
4951
}
5052
}
5153
}

src/apps/chifra/pkg/ledger/get_unreconciled.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,7 @@ func (r *Reconciler) getUnreconciledTransfers(trans *types.Transaction) ([]*type
4646

4747
return ethTransfers, tokenTransfers, nil
4848
}
49+
50+
func (r *Reconciler) HasFilters() bool {
51+
return len(r.Opts.AssetFilters) > 0
52+
}

src/dev_tools/goMaker/types/types_structure.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,8 @@ func (s *Structure) CacheIdStr() string {
177177
return "\"%s-%s-%09d\", s.Address.Hex()[2:], s.Encoding[2:], s.BlockNumber"
178178
case "address,tx":
179179
return "\"%s-%09d-%05d\", s.Address.Hex()[2:], s.BlockNumber, s.TransactionIndex"
180+
case "statement":
181+
return "\"%s-%s-%09d-%05d\", s.Address.Hex()[2:], s.Address2.Hex()[2:], s.BlockNumber, s.TransactionIndex"
180182
case "block":
181183
return "\"%09d\", s.BlockNumber"
182184
case "tx":

0 commit comments

Comments
 (0)