Skip to content

Commit

Permalink
chore(lib/genesis): less dependencies on other packages (#2795)
Browse files Browse the repository at this point in the history
- Remove all utils/test helping global variables from `lib/genesis` and inline them where needed
- Duplicate test-only code helping functions where they are needed in `helpers_test.go` and unexport them
- Change test helping functions to return genesis, trie and block header as values instead of pointers
- Move lib/genesis's `NewGenesisBlockFromTrie` function as `lib/trie`  `Trie` method `GenesisBlock()`
- Move lib/genesis's `NewTrieFromGenesis` function to `lib/runtime/wasmer` since it will need in #2774 to use wasmer functions
- Move key constants from `lib/runtime/constants.go` to `lib/genesis/constants.go`
  • Loading branch information
qdm12 authored Sep 20, 2022
1 parent d6549e7 commit 1e38c35
Show file tree
Hide file tree
Showing 39 changed files with 812 additions and 380 deletions.
14 changes: 8 additions & 6 deletions dot/build_spec_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,15 +167,17 @@ func TestBuildFromDB(t *testing.T) {
}

func TestBuildFromGenesis(t *testing.T) {
genesisFields := genesis.Fields{
Raw: map[string]map[string]string{},
Runtime: map[string]map[string]interface{}{
"System": {
"code": "mocktestcode",
rawGenesis := genesis.Genesis{
Name: "test",
Genesis: genesis.Fields{
Runtime: map[string]map[string]interface{}{
"System": {
"code": "mocktestcode",
},
},
},
}
testGenesisPath := genesis.CreateTestGenesisJSONFile(t, genesisFields)
testGenesisPath := writeGenesisToTestJSON(t, rawGenesis)

type args struct {
path string
Expand Down
37 changes: 32 additions & 5 deletions dot/core/helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"testing"

"github.com/ChainSafe/gossamer/dot/state"
"github.com/ChainSafe/gossamer/dot/types"
"github.com/ChainSafe/gossamer/internal/log"
"github.com/ChainSafe/gossamer/lib/common"
"github.com/ChainSafe/gossamer/lib/crypto/sr25519"
Expand All @@ -16,6 +17,7 @@ import (
"github.com/ChainSafe/gossamer/lib/runtime"
rtstorage "github.com/ChainSafe/gossamer/lib/runtime/storage"
"github.com/ChainSafe/gossamer/lib/runtime/wasmer"
"github.com/ChainSafe/gossamer/lib/trie"
"github.com/ChainSafe/gossamer/lib/utils"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/require"
Expand Down Expand Up @@ -45,7 +47,7 @@ func NewTestService(t *testing.T, cfg *Config) *Service {
var stateSrvc *state.Service
testDatadirPath := t.TempDir()

gen, genTrie, genHeader := genesis.NewTestGenesisWithTrieAndHeader(t)
gen, genesisTrie, genesisHeader := newTestGenesisWithTrieAndHeader(t)

if cfg.BlockState == nil || cfg.StorageState == nil ||
cfg.TransactionState == nil || cfg.EpochState == nil ||
Expand All @@ -62,7 +64,7 @@ func NewTestService(t *testing.T, cfg *Config) *Service {
stateSrvc = state.NewService(config)
stateSrvc.UseMemDB()

err := stateSrvc.Initialise(gen, genHeader, genTrie)
err := stateSrvc.Initialise(&gen, &genesisHeader, &genesisTrie)
require.NoError(t, err)

err = stateSrvc.Start()
Expand Down Expand Up @@ -92,7 +94,7 @@ func NewTestService(t *testing.T, cfg *Config) *Service {
if cfg.Runtime == nil {
var rtCfg wasmer.Config

rtCfg.Storage = rtstorage.NewTrieState(genTrie)
rtCfg.Storage = rtstorage.NewTrieState(&genesisTrie)

var err error
rtCfg.CodeHash, err = cfg.StorageState.LoadCodeHash(nil)
Expand Down Expand Up @@ -135,6 +137,31 @@ func NewTestService(t *testing.T, cfg *Config) *Service {
return s
}

func newTestGenesisWithTrieAndHeader(t *testing.T) (
gen genesis.Genesis, genesisTrie trie.Trie, genesisHeader types.Header) {
t.Helper()

genesisPath := utils.GetGssmrV3SubstrateGenesisRawPathTest(t)
genPtr, err := genesis.NewGenesisFromJSONRaw(genesisPath)
require.NoError(t, err)
gen = *genPtr

genesisTrie, err = wasmer.NewTrieFromGenesis(gen)
require.NoError(t, err)

parentHash := common.NewHash([]byte{0})
stateRoot := genesisTrie.MustHash()
extrinsicRoot := trie.EmptyHash
const number = 0
digest := types.NewDigest()
genesisHeaderPtr, err := types.NewHeader(parentHash,
stateRoot, extrinsicRoot, number, digest)
require.NoError(t, err)
genesisHeader = *genesisHeaderPtr

return gen, genesisTrie, genesisHeader
}

func getGssmrRuntimeCode(t *testing.T) (code []byte) {
t.Helper()

Expand All @@ -144,10 +171,10 @@ func getGssmrRuntimeCode(t *testing.T) (code []byte) {
gssmrGenesis, err := genesis.NewGenesisFromJSONRaw(path)
require.NoError(t, err)

trie, err := genesis.NewTrieFromGenesis(gssmrGenesis)
genesisTrie, err := wasmer.NewTrieFromGenesis(*gssmrGenesis)
require.NoError(t, err)

trieState := rtstorage.NewTrieState(trie)
trieState := rtstorage.NewTrieState(&genesisTrie)

return trieState.LoadCode()
}
Expand Down
6 changes: 3 additions & 3 deletions dot/core/service_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,10 @@ func generateTestValidRemarkTxns(t *testing.T, pubKey []byte, accInfo types.Acco
gen, err := genesis.NewGenesisFromJSONRaw(projectRootPath)
require.NoError(t, err)

genTrie, err := genesis.NewTrieFromGenesis(gen)
genesisTrie, err := wasmer.NewTrieFromGenesis(*gen)
require.NoError(t, err)

genState := rtstorage.NewTrieState(genTrie)
genState := rtstorage.NewTrieState(&genesisTrie)

nodeStorage := runtime.NodeStorage{
BaseDB: runtime.NewInMemoryDB(t),
Expand All @@ -82,7 +82,7 @@ func generateTestValidRemarkTxns(t *testing.T, pubKey []byte, accInfo types.Acco

genesisHeader := &types.Header{
Number: 0,
StateRoot: genTrie.MustHash(),
StateRoot: genesisTrie.MustHash(),
}

// Hash of encrypted centrifuge extrinsic
Expand Down
5 changes: 2 additions & 3 deletions dot/digest/digest_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import (
"github.com/ChainSafe/gossamer/lib/common"
"github.com/ChainSafe/gossamer/lib/crypto/ed25519"
"github.com/ChainSafe/gossamer/lib/crypto/sr25519"
"github.com/ChainSafe/gossamer/lib/genesis"
"github.com/ChainSafe/gossamer/lib/keystore"
"github.com/ChainSafe/gossamer/pkg/scale"
"github.com/golang/mock/gomock"
Expand All @@ -40,8 +39,8 @@ func newTestHandler(t *testing.T) (*Handler, *state.Service) {
stateSrvc := state.NewService(config)
stateSrvc.UseMemDB()

gen, genTrie, genHeader := genesis.NewTestGenesisWithTrieAndHeader(t)
err := stateSrvc.Initialise(gen, genHeader, genTrie)
gen, genesisTrie, genesisHeader := newTestGenesisWithTrieAndHeader(t)
err := stateSrvc.Initialise(&gen, &genesisHeader, &genesisTrie)
require.NoError(t, err)

err = stateSrvc.SetupBase()
Expand Down
41 changes: 41 additions & 0 deletions dot/digest/helpers_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Copyright 2022 ChainSafe Systems (ON)
// SPDX-License-Identifier: LGPL-3.0-only

package digest

import (
"testing"

"github.com/ChainSafe/gossamer/dot/types"
"github.com/ChainSafe/gossamer/lib/common"
"github.com/ChainSafe/gossamer/lib/genesis"
"github.com/ChainSafe/gossamer/lib/runtime/wasmer"
"github.com/ChainSafe/gossamer/lib/trie"
"github.com/ChainSafe/gossamer/lib/utils"
"github.com/stretchr/testify/require"
)

func newTestGenesisWithTrieAndHeader(t *testing.T) (
gen genesis.Genesis, genesisTrie trie.Trie, genesisHeader types.Header) {
t.Helper()

genesisPath := utils.GetGssmrV3SubstrateGenesisRawPathTest(t)
genesisPtr, err := genesis.NewGenesisFromJSONRaw(genesisPath)
require.NoError(t, err)
gen = *genesisPtr

genesisTrie, err = wasmer.NewTrieFromGenesis(gen)
require.NoError(t, err)

parentHash := common.NewHash([]byte{0})
stateRoot := genesisTrie.MustHash()
extrinsicRoot := trie.EmptyHash
const number = 0
digest := types.NewDigest()
genesisHeaderPtr, err := types.NewHeader(parentHash,
stateRoot, extrinsicRoot, number, digest)
require.NoError(t, err)
genesisHeader = *genesisHeaderPtr

return gen, genesisTrie, genesisHeader
}
55 changes: 55 additions & 0 deletions dot/helpers_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// Copyright 2022 ChainSafe Systems (ON)
// SPDX-License-Identifier: LGPL-3.0-only

package dot

import (
"encoding/json"
"os"
"path/filepath"
"testing"

"github.com/ChainSafe/gossamer/dot/types"
"github.com/ChainSafe/gossamer/lib/common"
"github.com/ChainSafe/gossamer/lib/genesis"
"github.com/ChainSafe/gossamer/lib/runtime/wasmer"
"github.com/ChainSafe/gossamer/lib/trie"
"github.com/ChainSafe/gossamer/lib/utils"
"github.com/stretchr/testify/require"
)

func writeGenesisToTestJSON(t *testing.T, genesis genesis.Genesis) (filename string) {
t.Helper()

jsonData, err := json.Marshal(genesis)
require.NoError(t, err)
filename = filepath.Join(t.TempDir(), "genesis-test")
err = os.WriteFile(filename, jsonData, os.ModePerm)
require.NoError(t, err)
return filename
}

func newTestGenesisWithTrieAndHeader(t *testing.T) (
gen genesis.Genesis, genesisTrie trie.Trie, genesisHeader types.Header) {
t.Helper()

genesisPath := utils.GetGssmrV3SubstrateGenesisRawPathTest(t)
genPtr, err := genesis.NewGenesisFromJSONRaw(genesisPath)
require.NoError(t, err)
gen = *genPtr

genesisTrie, err = wasmer.NewTrieFromGenesis(gen)
require.NoError(t, err)

parentHash := common.NewHash([]byte{0})
stateRoot := genesisTrie.MustHash()
extrinsicRoot := trie.EmptyHash
const number = 0
digest := types.NewDigest()
genesisHeaderPtr, err := types.NewHeader(parentHash,
stateRoot, extrinsicRoot, number, digest)
require.NoError(t, err)
genesisHeader = *genesisHeaderPtr

return gen, genesisTrie, genesisHeader
}
7 changes: 4 additions & 3 deletions dot/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import (
"github.com/ChainSafe/gossamer/lib/grandpa"
"github.com/ChainSafe/gossamer/lib/keystore"
"github.com/ChainSafe/gossamer/lib/runtime"
"github.com/ChainSafe/gossamer/lib/runtime/wasmer"
"github.com/ChainSafe/gossamer/lib/services"
"github.com/ChainSafe/gossamer/lib/utils"
)
Expand Down Expand Up @@ -144,13 +145,13 @@ func (*nodeBuilder) initNode(cfg *Config) error {
}

// create trie from genesis
t, err := genesis.NewTrieFromGenesis(gen)
t, err := wasmer.NewTrieFromGenesis(*gen)
if err != nil {
return fmt.Errorf("failed to create trie from genesis: %w", err)
}

// create genesis block from trie
header, err := genesis.NewGenesisBlockFromTrie(t)
header, err := t.GenesisBlock()
if err != nil {
return fmt.Errorf("failed to create genesis block from trie: %w", err)
}
Expand All @@ -175,7 +176,7 @@ func (*nodeBuilder) initNode(cfg *Config) error {
stateSrvc := state.NewService(config)

// initialise state service with genesis data, block, and trie
err = stateSrvc.Initialise(gen, header, t)
err = stateSrvc.Initialise(gen, &header, &t)
if err != nil {
return fmt.Errorf("failed to initialise state service: %s", err)
}
Expand Down
6 changes: 3 additions & 3 deletions dot/node_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,17 +166,17 @@ func TestNewNode(t *testing.T) {
return nil, fmt.Errorf("failed to load genesis from file: %w", err)
}
// create trie from genesis
trie, err := genesis.NewTrieFromGenesis(gen)
trie, err := wasmer.NewTrieFromGenesis(*gen)
if err != nil {
return nil, fmt.Errorf("failed to create trie from genesis: %w", err)
}
// create genesis block from trie
header, err := genesis.NewGenesisBlockFromTrie(trie)
header, err := trie.GenesisBlock()
if err != nil {
return nil, fmt.Errorf("failed to create genesis block from trie: %w", err)
}
stateSrvc.Telemetry = mockTelemetryClient
err = stateSrvc.Initialise(gen, header, trie)
err = stateSrvc.Initialise(gen, &header, &trie)
if err != nil {
return nil, fmt.Errorf("failed to initialise state service: %s", err)
}
Expand Down
41 changes: 41 additions & 0 deletions dot/rpc/helpers_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Copyright 2022 ChainSafe Systems (ON)
// SPDX-License-Identifier: LGPL-3.0-only

package rpc

import (
"testing"

"github.com/ChainSafe/gossamer/dot/types"
"github.com/ChainSafe/gossamer/lib/common"
"github.com/ChainSafe/gossamer/lib/genesis"
"github.com/ChainSafe/gossamer/lib/runtime/wasmer"
"github.com/ChainSafe/gossamer/lib/trie"
"github.com/ChainSafe/gossamer/lib/utils"
"github.com/stretchr/testify/require"
)

func newTestGenesisWithTrieAndHeader(t *testing.T) (
gen genesis.Genesis, genesisTrie trie.Trie, genesisHeader types.Header) {
t.Helper()

genesisPath := utils.GetGssmrV3SubstrateGenesisRawPathTest(t)
genesisPtr, err := genesis.NewGenesisFromJSONRaw(genesisPath)
require.NoError(t, err)
gen = *genesisPtr

genesisTrie, err = wasmer.NewTrieFromGenesis(gen)
require.NoError(t, err)

parentHash := common.NewHash([]byte{0})
stateRoot := genesisTrie.MustHash()
extrinsicRoot := trie.EmptyHash
const number = 0
digest := types.NewDigest()
genesisHeaderPtr, err := types.NewHeader(parentHash,
stateRoot, extrinsicRoot, number, digest)
require.NoError(t, err)
genesisHeader = *genesisHeaderPtr

return gen, genesisTrie, genesisHeader
}
7 changes: 3 additions & 4 deletions dot/rpc/http_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import (
"github.com/ChainSafe/gossamer/internal/log"
"github.com/ChainSafe/gossamer/lib/common"
"github.com/ChainSafe/gossamer/lib/crypto/sr25519"
"github.com/ChainSafe/gossamer/lib/genesis"
"github.com/ChainSafe/gossamer/lib/keystore"
"github.com/ChainSafe/gossamer/lib/runtime"
"github.com/ChainSafe/gossamer/lib/runtime/wasmer"
Expand Down Expand Up @@ -365,7 +364,7 @@ func newCoreServiceTest(t *testing.T) *core.Service {

testDatadirPath := t.TempDir()

gen, genTrie, genHeader := genesis.NewTestGenesisWithTrieAndHeader(t)
gen, genesisTrie, genesisHeader := newTestGenesisWithTrieAndHeader(t)

ctrl := gomock.NewController(t)
telemetryMock := NewMockClient(ctrl)
Expand All @@ -380,7 +379,7 @@ func newCoreServiceTest(t *testing.T) *core.Service {
stateSrvc := state.NewService(config)
stateSrvc.UseMemDB()

err := stateSrvc.Initialise(gen, genHeader, genTrie)
err := stateSrvc.Initialise(&gen, &genesisHeader, &genesisTrie)
require.NoError(t, err)

err = stateSrvc.SetupBase()
Expand All @@ -407,7 +406,7 @@ func newCoreServiceTest(t *testing.T) *core.Service {

var rtCfg wasmer.Config

rtCfg.Storage = rtstorage.NewTrieState(genTrie)
rtCfg.Storage = rtstorage.NewTrieState(&genesisTrie)

rtCfg.CodeHash, err = cfg.StorageState.LoadCodeHash(nil)
require.NoError(t, err)
Expand Down
Loading

0 comments on commit 1e38c35

Please sign in to comment.