From ce6489146f263b6a5d3e19ec6e494fccaae83e5c Mon Sep 17 00:00:00 2001 From: Nikita Zinkevich Date: Wed, 14 Aug 2024 15:53:53 +0300 Subject: [PATCH] [#6] Add caching from multiple environments --- internal/chain/chain.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/internal/chain/chain.go b/internal/chain/chain.go index 8294b03..2fe76fa 100644 --- a/internal/chain/chain.go +++ b/internal/chain/chain.go @@ -7,7 +7,6 @@ import ( "fmt" "os" "path" - "strconv" "git.frostfs.info/TrueCloudLab/monza/internal/bytecode" "github.com/nspcc-dev/neo-go/pkg/core/block" @@ -47,7 +46,12 @@ func Open(ctx context.Context, dir, endpoint string, rewrite bool) (*Chain, erro return nil, fmt.Errorf("rpc get version: %w", err) } - dbPath := path.Join(dir, strconv.Itoa(int(v.Protocol.Network))+".db") + validationBlock, err := getValidationBlock(cli) + if err != nil { + return nil, fmt.Errorf("error get validation block: %w", err) + } + + dbPath := path.Join(dir, validationBlock.Hash().StringLE()+".db") if rewrite { _ = os.Remove(dbPath) // ignore error if file does not exist, etc. } @@ -60,6 +64,18 @@ func Open(ctx context.Context, dir, endpoint string, rewrite bool) (*Chain, erro return &Chain{db, v.Protocol.StateRootInHeader, cli}, nil } +func getValidationBlock(cli *rpcclient.Client) (*block.Block, error) { + // not 0, because it always has the same hash + const validationBlockIndex = 1 + var err error + validBlock, err := cli.GetBlockByIndex(validationBlockIndex) + if err != nil { + return nil, fmt.Errorf("error sending request for block: %w", err) + } + + return validBlock, nil +} + func (d *Chain) Block(i uint32) (res *block.Block, err error) { cached, err := d.block(i) if err != nil {