Skip to content

Commit

Permalink
Refactoring: saving accounts
Browse files Browse the repository at this point in the history
  • Loading branch information
aopoltorzhicky committed Sep 25, 2023
1 parent f1211af commit 19384cc
Show file tree
Hide file tree
Showing 18 changed files with 155 additions and 56 deletions.
1 change: 1 addition & 0 deletions internal/parsers/contract/alpha.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ func (p *Alpha) Parse(ctx context.Context, operation *operation.Operation, store
}

store.AddContracts(&contract)
store.AddAccounts(&contract.Account, &contract.Delegate, &contract.Manager)
return nil
}

Expand Down
1 change: 1 addition & 0 deletions internal/parsers/contract/babylon.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ func (p *Babylon) Parse(ctx context.Context, operation *operation.Operation, sto
}

store.AddContracts(&contract)
store.AddAccounts(&contract.Account, &contract.Delegate, &contract.Manager)
return nil
}

Expand Down
1 change: 1 addition & 0 deletions internal/parsers/contract/hangzhou.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ func (p *Hangzhou) Parse(ctx context.Context, operation *operation.Operation, st
}

store.AddContracts(&contract)
store.AddAccounts(&contract.Account, &contract.Delegate, &contract.Manager)
return nil
}

Expand Down
1 change: 1 addition & 0 deletions internal/parsers/contract/jakarta.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ func (p *Jakarta) Parse(ctx context.Context, operation *operation.Operation, sto
}

store.AddContracts(&contract)
store.AddAccounts(&contract.Account, &contract.Delegate, &contract.Manager)
return nil
}

Expand Down
2 changes: 1 addition & 1 deletion internal/parsers/migrations/implicit.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ func (p *ImplicitParser) transaction(implicit noderpc.ImplicitOperationsResult,
Address: implicit.BalanceUpdates[i].Contract,
Level: head.Level,
}
store.AddAccounts(&tx.Destination)
break
}
}
Expand All @@ -141,6 +142,5 @@ func (p *ImplicitParser) transaction(implicit noderpc.ImplicitOperationsResult,
}

store.AddOperations(&tx)

return nil
}
6 changes: 5 additions & 1 deletion internal/parsers/operations/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,17 @@ func (p Event) Parse(ctx context.Context, data noderpc.Operation, store parsers.
Internal: true,
}

parseOperationResult(data, &event)
parseOperationResult(data, &event, store)

event.SetBurned(*p.protocol.Constants)

p.stackTrace.Add(event)

store.AddOperations(&event)
store.AddAccounts(
&event.Source,
&event.Initiator,
)

return nil
}
7 changes: 6 additions & 1 deletion internal/parsers/operations/origination.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ func (p Origination) Parse(ctx context.Context, data noderpc.Operation, store pa

p.fillInternal(&origination)

parseOperationResult(data, &origination)
parseOperationResult(data, &origination, store)

origination.SetBurned(*p.protocol.Constants)

Expand All @@ -73,6 +73,11 @@ func (p Origination) Parse(ctx context.Context, data noderpc.Operation, store pa
}

store.AddOperations(&origination)
store.AddAccounts(
&origination.Source,
&origination.Destination,
&origination.Delegate,
)

return nil
}
Expand Down
3 changes: 2 additions & 1 deletion internal/parsers/operations/register_global_constant.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,13 @@ func (p RegisterGlobalConstant) Parse(ctx context.Context, data noderpc.Operatio
Nonce: data.Nonce,
ContentIndex: p.contentIdx,
}
parseOperationResult(data, &registerGlobalConstant)
parseOperationResult(data, &registerGlobalConstant, store)
p.stackTrace.Add(registerGlobalConstant)

store.AddOperations(&registerGlobalConstant)
if registerGlobalConstant.IsApplied() {
store.AddGlobalConstants(NewGlobalConstant().Parse(data, registerGlobalConstant))
}
store.AddAccounts(&registerGlobalConstant.Source)
return nil
}
5 changes: 3 additions & 2 deletions internal/parsers/operations/result.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ import (
"github.com/baking-bad/bcdhub/internal/models/operation"
"github.com/baking-bad/bcdhub/internal/models/types"
"github.com/baking-bad/bcdhub/internal/noderpc"
"github.com/baking-bad/bcdhub/internal/parsers"
)

func parseOperationResult(data noderpc.Operation, tx *operation.Operation) {
func parseOperationResult(data noderpc.Operation, tx *operation.Operation, store parsers.Store) {
result := data.GetResult()
if result == nil {
return
Expand Down Expand Up @@ -55,6 +56,6 @@ func parseOperationResult(data noderpc.Operation, tx *operation.Operation) {
}

if tx.IsApplied() {
new(TicketUpdateParser).Parse(result, tx)
new(TicketUpdateParser).Parse(result, tx, store)
}
}
5 changes: 4 additions & 1 deletion internal/parsers/operations/result_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/baking-bad/bcdhub/internal/models/ticket"
"github.com/baking-bad/bcdhub/internal/models/types"
"github.com/baking-bad/bcdhub/internal/noderpc"
"github.com/baking-bad/bcdhub/internal/parsers"
"github.com/stretchr/testify/require"
)

Expand Down Expand Up @@ -55,8 +56,10 @@ func Test_parseOperationResult(t *testing.T) {
err := readJSONFile(tt.fileName, &op)
require.NoError(t, err)

store := parsers.NewTestStore()

var res operation.Operation
parseOperationResult(op, &res)
parseOperationResult(op, &res, store)
require.Equal(t, tt.want, res)
})
}
Expand Down
4 changes: 3 additions & 1 deletion internal/parsers/operations/sr_execute_outbox_message.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,11 @@ func (p SrExecuteOutboxMessage) Parse(ctx context.Context, data noderpc.Operatio
Type: types.NewAccountType(*data.Rollup),
Level: p.head.Level,
}
store.AddAccounts(&operation.Destination)
}
p.fillInternal(&operation)
operation.SetBurned(*p.protocol.Constants)
parseOperationResult(data, &operation)
parseOperationResult(data, &operation, store)
p.stackTrace.Add(operation)

if operation.IsApplied() {
Expand All @@ -73,6 +74,7 @@ func (p SrExecuteOutboxMessage) Parse(ctx context.Context, data noderpc.Operatio
}

store.AddOperations(&operation)
store.AddAccounts(&operation.Source)

return nil
}
Expand Down
5 changes: 4 additions & 1 deletion internal/parsers/operations/sr_originate.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ func (p SrOriginate) Parse(ctx context.Context, data noderpc.Operation, store pa

p.fillInternal(&operation)
operation.SetBurned(*p.protocol.Constants)
parseOperationResult(data, &operation)
parseOperationResult(data, &operation, store)
p.stackTrace.Add(operation)

store.AddOperations(&operation)
Expand All @@ -56,9 +56,12 @@ func (p SrOriginate) Parse(ctx context.Context, data noderpc.Operation, store pa
return err
}
store.AddSmartRollups(&smartRollup)
store.AddAccounts(&smartRollup.Address)
operation.Destination = smartRollup.Address
}

store.AddAccounts(&operation.Destination, &operation.Source)

return nil
}

Expand Down
15 changes: 9 additions & 6 deletions internal/parsers/operations/ticket_updates.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,34 +6,35 @@ import (
"github.com/baking-bad/bcdhub/internal/models/ticket"
"github.com/baking-bad/bcdhub/internal/models/types"
"github.com/baking-bad/bcdhub/internal/noderpc"
"github.com/baking-bad/bcdhub/internal/parsers"
"github.com/shopspring/decimal"
)

// TicketUpdateParser -
type TicketUpdateParser struct {
}

func (p *TicketUpdateParser) Parse(data *noderpc.OperationResult, operation *operation.Operation) {
func (p *TicketUpdateParser) Parse(data *noderpc.OperationResult, operation *operation.Operation, store parsers.Store) {
if data == nil {
return
}
operation.TickerUpdates = make([]*ticket.TicketUpdate, 0)
for i := range data.TicketUpdates {
tckt := p.toModel(data.TicketUpdates[i], operation)
tckt := p.toModel(data.TicketUpdates[i], operation, store)
operation.TickerUpdates = append(operation.TickerUpdates, tckt...)
}
for i := range data.TicketReceipt {
tckt := p.toModel(data.TicketReceipt[i], operation)
tckt := p.toModel(data.TicketReceipt[i], operation, store)
operation.TickerUpdates = append(operation.TickerUpdates, tckt...)
}

operation.TicketUpdatesCount = len(operation.TickerUpdates)
}

func (p *TicketUpdateParser) toModel(data noderpc.TicketUpdate, operation *operation.Operation) []*ticket.TicketUpdate {
func (p *TicketUpdateParser) toModel(data noderpc.TicketUpdate, operation *operation.Operation, store parsers.Store) []*ticket.TicketUpdate {
updates := make([]*ticket.TicketUpdate, 0)
for i := range data.Updates {
updates = append(updates, &ticket.TicketUpdate{
update := ticket.TicketUpdate{
Level: operation.Level,
Timestamp: operation.Timestamp,
Ticketer: account.Account{
Expand All @@ -49,7 +50,9 @@ func (p *TicketUpdateParser) toModel(data noderpc.TicketUpdate, operation *opera
Level: operation.Level,
},
Amount: decimal.RequireFromString(data.Updates[i].Amount),
})
}
updates = append(updates, &update)
store.AddAccounts(&update.Account, &update.Ticketer)
}
return updates
}
7 changes: 6 additions & 1 deletion internal/parsers/operations/transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,16 @@ func (p Transaction) Parse(ctx context.Context, data noderpc.Operation, store pa

p.fillInternal(&tx)

parseOperationResult(data, &tx)
parseOperationResult(data, &tx, store)

tx.SetBurned(*p.protocol.Constants)

store.AddOperations(&tx)
store.AddAccounts(
&tx.Source,
&tx.Delegate,
&tx.Destination,
)

switch tx.Destination.Type {
case modelsTypes.AccountTypeContract:
Expand Down
4 changes: 3 additions & 1 deletion internal/parsers/operations/transfer_ticket.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,16 @@ func (p TransferTicket) Parse(ctx context.Context, data noderpc.Operation, store
Type: types.NewAccountType(*data.Destination),
Level: p.head.Level,
}
store.AddAccounts(&transferTicket.Destination)
}

p.fillInternal(&transferTicket)
transferTicket.SetBurned(*p.protocol.Constants)
parseOperationResult(data, &transferTicket)
parseOperationResult(data, &transferTicket, store)
p.stackTrace.Add(transferTicket)

store.AddOperations(&transferTicket)
store.AddAccounts(&transferTicket.Source)

return nil
}
Expand Down
3 changes: 2 additions & 1 deletion internal/parsers/operations/tx_rollup_origination.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,14 @@ func (p TxRollupOrigination) Parse(ctx context.Context, data noderpc.Operation,

p.fillInternal(&txRollupOrigination)

parseOperationResult(data, &txRollupOrigination)
parseOperationResult(data, &txRollupOrigination, store)

txRollupOrigination.SetBurned(*p.protocol.Constants)

p.stackTrace.Add(txRollupOrigination)

store.AddOperations(&txRollupOrigination)
store.AddAccounts(&txRollupOrigination.Source)

return nil
}
Expand Down
13 changes: 13 additions & 0 deletions internal/parsers/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package parsers
import (
"context"

"github.com/baking-bad/bcdhub/internal/models/account"
"github.com/baking-bad/bcdhub/internal/models/bigmapdiff"
"github.com/baking-bad/bcdhub/internal/models/block"
"github.com/baking-bad/bcdhub/internal/models/contract"
Expand All @@ -21,6 +22,7 @@ type Store interface {
AddSmartRollups(rollups ...*smartrollup.SmartRollup)
ListContracts() []*contract.Contract
ListOperations() []*operation.Operation
AddAccounts(accounts ...*account.Account)
Save(ctx context.Context) error
SetBlock(block *block.Block)
}
Expand All @@ -34,6 +36,7 @@ type TestStore struct {
Operations []*operation.Operation
GlobalConstants []*contract.GlobalConstant
SmartRollups []*smartrollup.SmartRollup
Accounts map[string]*account.Account
}

// NewTestStore -
Expand All @@ -45,6 +48,7 @@ func NewTestStore() *TestStore {
Operations: make([]*operation.Operation, 0),
GlobalConstants: make([]*contract.GlobalConstant, 0),
SmartRollups: make([]*smartrollup.SmartRollup, 0),
Accounts: make(map[string]*account.Account),
}
}

Expand Down Expand Up @@ -88,6 +92,15 @@ func (store *TestStore) ListOperations() []*operation.Operation {
return store.Operations
}

// AddAccounts -
func (store *TestStore) AddAccounts(accounts ...*account.Account) {
for i := range accounts {
if _, ok := store.Accounts[accounts[i].Address]; !ok {
store.Accounts[accounts[i].Address] = accounts[i]
}
}
}

// Save -
func (store *TestStore) Save(ctx context.Context) error {
return nil
Expand Down
Loading

0 comments on commit 19384cc

Please sign in to comment.