Skip to content

Commit

Permalink
Address comments and fix failing tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
arijitAD committed Aug 11, 2021
1 parent 937d16c commit 57c9d37
Show file tree
Hide file tree
Showing 11 changed files with 86 additions and 107 deletions.
1 change: 0 additions & 1 deletion chain/dev/genesis-spec.json

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions chain/gssmr/genesis-spec.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion cmd/gossamer/import_runtime.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func createGenesisWithRuntime(fp string) (string, error) {
return "", err
}

genesis.Genesis.Runtime["system"]["code"] = fmt.Sprintf("0x%x", runtime)
genesis.Genesis.Runtime["System"]["code"] = fmt.Sprintf("0x%x", runtime)
bz, err := json.MarshalIndent(genesis, "", "\t")
if err != nil {
return "", err
Expand Down
2 changes: 1 addition & 1 deletion cmd/gossamer/import_runtime_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,5 @@ func TestCreateGenesisWithRuntime(t *testing.T) {
g := new(genesis.Genesis)
err = json.Unmarshal([]byte(out), g)
require.NoError(t, err)
require.Equal(t, testHex, g.Genesis.Runtime["system"]["code"].(string))
require.Equal(t, testHex, g.Genesis.Runtime["System"]["code"].(string))
}
4 changes: 4 additions & 0 deletions dot/import_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (

"github.com/ChainSafe/gossamer/dot/types"
"github.com/ChainSafe/gossamer/lib/common"
"github.com/ChainSafe/gossamer/lib/utils"

"github.com/stretchr/testify/require"
)
Expand Down Expand Up @@ -99,6 +100,9 @@ func TestImportState(t *testing.T) {

genFile := NewTestGenesisRawFile(t, cfg)
require.NotNil(t, genFile)

defer utils.RemoveTestDir(t)

cfg.Init.Genesis = genFile.Name()

cfg.Global.BasePath = basepath
Expand Down
5 changes: 3 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module github.com/ChainSafe/gossamer

require (
github.com/BurntSushi/toml v0.4.1 // indirect
github.com/ChainSafe/chaindb v0.1.5-0.20210608140454-9606fe8c3985
github.com/ChainSafe/go-schnorrkel v0.0.0-20210318173838-ccb5cd955283
github.com/ChainSafe/log15 v1.0.0
Expand Down Expand Up @@ -49,9 +50,9 @@ require (
github.com/wasmerio/go-ext-wasm v0.3.2-0.20200326095750-0a32be6068ec
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 // indirect
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069 // indirect
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1
golang.org/x/tools v0.1.4 // indirect
golang.org/x/tools v0.1.5 // indirect
google.golang.org/appengine v1.6.6 // indirect
google.golang.org/protobuf v1.26.0-rc.1
honnef.co/go/tools v0.2.0 // indirect
Expand Down
11 changes: 6 additions & 5 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,9 @@ github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxB
github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw=
github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/ChainSafe/chaindb v0.1.5-0.20210608140454-9606fe8c3985 h1:jyFsOjzTMoRwNvmW/OORZpffmItkoLvsbxB8koHX4ns=
github.com/ChainSafe/chaindb v0.1.5-0.20210608140454-9606fe8c3985/go.mod h1:P01m9E6xj6Mps1rtf7SurEX9oOcy1jYEyccZQAEw9+4=
Expand Down Expand Up @@ -1265,8 +1266,8 @@ golang.org/x/sys v0.0.0-20210415045647-66c3f260301c/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 h1:JWgyZ1qgdTaF3N3oxC+MdTV7qvEEgHo3otj+HB5CM7Q=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069 h1:siQdpVirKtzPhKl3lZWozZraCFObP8S1v6PRp0bLrtU=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
Expand Down Expand Up @@ -1323,8 +1324,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.4 h1:cVngSRcfgyZCzys3KYOpCFa+4dqX/Oub9tAq00ttGVs=
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
Expand Down
136 changes: 56 additions & 80 deletions lib/genesis/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,20 @@ import (

type accountAddr [32]byte

const (
societyConst = "Society"
stakingConst = "Staking"
contractsConst = "Contracts"
sessionConst = "Session"
instance1CollectiveConst = "Instance1Collective"
instance2CollectiveConst = "Instance2Collective"
instance1MembershipConst = "Instance1Membership"
phragmenElectionConst = "PhragmenElection"
notForcing = "NotForcing"
currentSchedule = "CurrentSchedule"
phantom = "Phantom"
)

// NewGenesisFromJSONRaw parses a JSON formatted genesis file
func NewGenesisFromJSONRaw(file string) (*Genesis, error) {
fp, err := filepath.Abs(file)
Expand Down Expand Up @@ -165,28 +179,13 @@ func generatePalletKeyValue(k string, v map[string]interface{}, res map[string]s
return false, err
}

var s interface{}
switch k {
case "Society":
s := &society{}
if err = json.Unmarshal(jsonBody, s); err != nil {
return false, err
}

err = generateKeyValue(s, k, res)
if err != nil {
return false, err
}
case "Staking":
st := &staking{}
if err = json.Unmarshal(jsonBody, st); err != nil {
return false, err
}

err = generateKeyValue(st, k, res)
if err != nil {
return false, err
}
case "Contracts":
case societyConst:
s = &society{}
case stakingConst:
s = &staking{}
case contractsConst:
c := &contracts{}
if err = json.Unmarshal(jsonBody, c); err != nil {
return false, err
Expand All @@ -196,59 +195,37 @@ func generatePalletKeyValue(k string, v map[string]interface{}, res map[string]s
if err != nil {
return false, err
}
case "Session":
s := &session{}
if err = json.Unmarshal(jsonBody, s); err != nil {
return true, nil
case sessionConst:
sc := &session{}
if err = json.Unmarshal(jsonBody, sc); err != nil {
return false, err
}

err = generateSessionKeyValue(s, k, res)
if err != nil {
return false, err
}
case "Instance1Collective":
ic := &instance1Collective{}
if err = json.Unmarshal(jsonBody, ic); err != nil {
return false, err
}

err = generateKeyValue(ic, k, res)
if err != nil {
return false, err
}
case "Instance2Collective":
ic := &instance2Collective{}
if err = json.Unmarshal(jsonBody, ic); err != nil {
return false, err
}

err = generateKeyValue(ic, k, res)
if err != nil {
return false, err
}
case "Instance1Membership":
im := &instance1Membership{}
if err = json.Unmarshal(jsonBody, im); err != nil {
return false, err
}

err = generateKeyValue(im, k, res)
if err != nil {
return false, err
}
case "PhragmenElection":
pe := &phragmenElection{}
if err = json.Unmarshal(jsonBody, pe); err != nil {
return false, err
}

err = generateKeyValue(pe, k, res)
err = generateSessionKeyValue(sc, k, res)
if err != nil {
return false, err
}
return true, nil
case instance1CollectiveConst:
s = &instance1Collective{}
case instance2CollectiveConst:
s = &instance2Collective{}
case instance1MembershipConst:
s = &instance1Membership{}
case phragmenElectionConst:
s = &phragmenElection{}
default:
return false, nil
}
if err = json.Unmarshal(jsonBody, s); err != nil {
return false, err
}
err = generateKeyValue(s, k, res)

if err != nil {
return false, err
}
return true, nil
}

Expand Down Expand Up @@ -393,7 +370,7 @@ func generateStorageValue(i interface{}, idx int) ([]byte, error) {
return nil, err
}
case string:
if t == "NotForcing" { //TODO: check if this is ok
if t == notForcing { // TODO: This is a enum field. Check how to encode enum in Golang.
encode, err = scale.Marshal(uint8(0))
if err != nil {
return nil, err
Expand Down Expand Up @@ -435,7 +412,7 @@ func generateContractKeyValue(c *contracts, prefixKey string, res map[string]str
)
// First field of contract is the storage key
val := reflect.ValueOf(c)
if k := reflect.Indirect(val).Type().Field(0).Name; k == "CurrentSchedule" {
if k := reflect.Indirect(val).Type().Field(0).Name; k == currentSchedule {
key, err = generateStorageKey(prefixKey, k)
if err != nil {
return err
Expand All @@ -456,7 +433,7 @@ func generateKeyValue(s interface{}, prefixKey string, res map[string]string) er
for i := 0; i < n; i++ {
val := reflect.ValueOf(s)
storageKey := reflect.Indirect(val).Type().Field(i).Name
if storageKey == "Phantom" { //TODO: figure out what to do with Phantom as its value is null
if storageKey == phantom { //TODO: figure out what to do with Phantom as its value is null
continue
}
key, err := generateStorageKey(prefixKey, storageKey)
Expand All @@ -477,7 +454,7 @@ func formatKey(kv *keyValue) (string, error) {
case reflect.DeepEqual([]string{"Grandpa", "authorities"}, kv.key):
kb := []byte(`:grandpa_authorities`)
return common.BytesToHex(kb), nil
case reflect.DeepEqual([]string{"System", "changesTrieConfig", "code"}, kv.key):
case reflect.DeepEqual([]string{"System", "code"}, kv.key):
kb := []byte(`:code`)
return common.BytesToHex(kb), nil
default:
Expand All @@ -503,6 +480,7 @@ func generateSessionKeyValue(s *session, prefixKey string, res map[string]string

for _, strV := range storageVal {
for _, v := range strV {
var validatorAccID []byte
switch t := v.(type) {
case string:
var nextKeyHash []byte
Expand All @@ -511,14 +489,14 @@ func generateSessionKeyValue(s *session, prefixKey string, res map[string]string
return err
}

acc := crypto.PublicAddressToByteArray(common.Address(t))
validatorAccID = crypto.PublicAddressToByteArray(common.Address(t))
var accIDHash []byte
accIDHash, err = common.Twox64(acc)
accIDHash, err = common.Twox64(validatorAccID)
if err != nil {
return err
}

res[common.BytesToHex(append(append(moduleName, nextKeyHash...), append(accIDHash, acc...)...))] = common.BytesToHex(acc)
res[common.BytesToHex(append(append(moduleName, nextKeyHash...), append(accIDHash, validatorAccID...)...))] = common.BytesToHex(validatorAccID)
case map[string]interface{}:
var storagePrefixKey []byte
storagePrefixKey, err = common.Twox128Hash([]byte("KeyOwner"))
Expand All @@ -527,27 +505,26 @@ func generateSessionKeyValue(s *session, prefixKey string, res map[string]string
}

storagePrefixKey = append(moduleName, storagePrefixKey...)
validatorAccID := crypto.PublicAddressToByteArray(common.Address("5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY"))
for key, v1 := range t {
var addressKey []byte
switch key {
case "grandpa":
addressKey, err = generateAddHash(v1.(string), "gran")
addressKey, err = generateAddressHash(v1.(string), "gran")
if err != nil {
return err
}
case "babe":
addressKey, err = generateAddHash(v1.(string), "babe")
addressKey, err = generateAddressHash(v1.(string), "babe")
if err != nil {
return err
}
case "im_online":
addressKey, err = generateAddHash(v1.(string), "imon")
addressKey, err = generateAddressHash(v1.(string), "imon")
if err != nil {
return err
}
case "authority_discovery":
addressKey, err = generateAddHash(v1.(string), "audi")
addressKey, err = generateAddressHash(v1.(string), "audi")
if err != nil {
return err
}
Expand All @@ -564,7 +541,7 @@ func generateSessionKeyValue(s *session, prefixKey string, res map[string]string
return nil
}

func generateAddHash(accAddr, key string) ([]byte, error) {
func generateAddressHash(accAddr, key string) ([]byte, error) {
acc := crypto.PublicAddressToByteArray(common.Address(accAddr))
encodeAcc, _ := scale.Marshal(acc)
storageKey := append([]byte(key), encodeAcc...)
Expand All @@ -575,7 +552,6 @@ func generateAddHash(accAddr, key string) ([]byte, error) {

return append(addersHash, storageKey...), err
}

func formatValue(kv *keyValue) (string, error) {
switch {
case reflect.DeepEqual([]string{"Grandpa", "authorities"}, kv.key):
Expand All @@ -588,7 +564,7 @@ func formatValue(kv *keyValue) (string, error) {
return fmt.Sprintf("0x01%x%v", lenEnc, kv.value), nil
}
return "", fmt.Errorf("error formatting value for grandpa authorities")
case reflect.DeepEqual([]string{"System", "changesTrieConfig", "code"}, kv.key):
case reflect.DeepEqual([]string{"System", "code"}, kv.key):
return kv.value, nil
case reflect.DeepEqual([]string{"Sudo", "Key"}, kv.key):
return common.BytesToHex(crypto.PublicAddressToByteArray(common.Address(kv.value))), nil
Expand Down
18 changes: 9 additions & 9 deletions lib/genesis/helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func TestNewGenesisFromJSON(t *testing.T) {
expRaw["top"] = make(map[string]string)
expRaw["top"]["0x3a636f6465"] = "0xfoo"
expRaw["top"]["0x3a6772616e6470615f617574686f726974696573"] = "0x010834602b88f60513f1c805d87ef52896934baf6a662bc37414dbdbf69356b1a6910000000000000000" // raw grandpa authorities
expRaw["top"]["0x014f204c006a2837deb5551ba5211d6ce887d1f35708af762efe7b709b5eff15"] = "0x08d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0100000000000000" // raw babe authorities
expRaw["top"]["0x1cb6f36e027abb2091cfb5110ab5087f5e0621c4869aa60c02be9adcc98a0d1d"] = "0x08d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0100000000000000" // raw babe authorities
expRaw["top"]["0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"] = "0x0000000000000000000000007aeb9049000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // raw system account
expRaw["top"][common.BytesToHex(common.UpgradedToDualRefKey)] = "0x01"

Expand All @@ -86,13 +86,13 @@ func TestNewGenesisFromJSON(t *testing.T) {
// create human readable test genesis
testGenesis := &Genesis{}
hrData := make(map[string]map[string]interface{})
hrData["system"] = map[string]interface{}{"code": "0xfoo"} // system code entry
hrData["babe"] = make(map[string]interface{})
hrData["babe"]["authorities"] = []interface{}{"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", 1} // babe authority data
hrData["grandpa"] = make(map[string]interface{})
hrData["grandpa"]["authorities"] = []interface{}{"5DFNv4Txc4b88qHqQ6GG4D646QcT4fN3jjS2G3r1PyZkfDut", 0} // grandpa authority data
hrData["palletBalances"] = make(map[string]interface{})
hrData["palletBalances"]["balances"] = []interface{}{"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", 1234234234} // balances
hrData["System"] = map[string]interface{}{"code": "0xfoo"} // system code entry
hrData["Babe"] = make(map[string]interface{})
hrData["Babe"]["Authorities"] = []interface{}{"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", 1} // babe authority data
hrData["Grandpa"] = make(map[string]interface{})
hrData["Grandpa"]["authorities"] = []interface{}{"5DFNv4Txc4b88qHqQ6GG4D646QcT4fN3jjS2G3r1PyZkfDut", 0} // grandpa authority data
hrData["Balances"] = make(map[string]interface{})
hrData["Balances"]["balances"] = []interface{}{"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", 1234234234} // balances
testGenesis.Genesis = Fields{
Runtime: hrData,
}
Expand All @@ -118,7 +118,7 @@ func TestFormatKey(t *testing.T) {

out, err := formatKey(kv)
require.NoError(t, err)
require.Equal(t, out, fmt.Sprintf("0x%x", runtime.BABEAuthoritiesKey()))
require.Equal(t, fmt.Sprintf("0x%x", runtime.BABEAuthoritiesKey()), out)
}

func TestNewTrieFromGenesis(t *testing.T) {
Expand Down
Loading

0 comments on commit 57c9d37

Please sign in to comment.