Skip to content

Commit 952f21c

Browse files
committed
Improve API usage
1 parent 4a44218 commit 952f21c

File tree

3 files changed

+43
-38
lines changed

3 files changed

+43
-38
lines changed

plugin/evm/message/handshake/codec.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func init() {
3232

3333
errs := wrappers.Errs{}
3434
errs.Add(
35-
c.RegisterType(upgradeConfigMessage{}),
35+
c.RegisterType(networkUpgradeConfigMessage{}),
3636

3737
Codec.RegisterCodec(Version, c),
3838
)

plugin/evm/message/handshake/upgrade_config.go

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,30 @@ type rawPrecompileUpgrade struct {
1414
Bytes []byte `serialize:"true"`
1515
}
1616

17-
type upgradeConfigMessage struct {
17+
type networkUpgradeConfigMessage struct {
1818
OptionalNetworkUpgrades []params.Fork `serialize:"true"`
1919

2020
// Config for modifying state as a network upgrade.
2121
StateUpgrades []params.StateUpgrade `serialize:"true"`
2222

2323
// Config for enabling and disabling precompiles as network upgrades.
2424
PrecompileUpgrades []rawPrecompileUpgrade `serialize:"true"`
25-
config params.UpgradeConfig
26-
bytes []byte
2725
}
2826

29-
func ParseUpgradeConfig(bytes []byte) (*upgradeConfigMessage, error) {
30-
var config upgradeConfigMessage
27+
type UpgradeConfigMessage struct {
28+
Bytes []byte
29+
Hash []byte
30+
}
31+
32+
// Attempts to parse a networkUpgradeConfigMessage from a []byte
33+
//
34+
// This function attempts to parse a stream of bytes as a
35+
// networkUpgradeConfigMessage (as serialized from
36+
// UpgradeConfigToNetworkMessage).
37+
//
38+
// The function returns a reference of *params.UpgradeConfig
39+
func ParseUpgradeConfigMessage(bytes []byte) (*params.UpgradeConfig, error) {
40+
var config networkUpgradeConfigMessage
3141
version, err := Codec.Unmarshal(bytes, &config)
3242
if err != nil {
3343
return nil, err
@@ -37,14 +47,12 @@ func ParseUpgradeConfig(bytes []byte) (*upgradeConfigMessage, error) {
3747
}
3848

3949
var PrecompileUpgrades []params.PrecompileUpgrade
40-
4150
for _, precompileUpgrade := range config.PrecompileUpgrades {
4251
module, ok := modules.GetPrecompileModule(precompileUpgrade.Key)
4352
if !ok {
4453
return nil, ErrUnknowPrecompile
4554
}
4655
preCompile := module.MakeConfig()
47-
4856
version, err := Codec.Unmarshal(precompileUpgrade.Bytes, preCompile)
4957
if version != Version {
5058
return nil, ErrInvalidVersion
@@ -55,17 +63,23 @@ func ParseUpgradeConfig(bytes []byte) (*upgradeConfigMessage, error) {
5563
PrecompileUpgrades = append(PrecompileUpgrades, params.PrecompileUpgrade{Config: preCompile})
5664
}
5765

58-
config.config = params.UpgradeConfig{
66+
return &params.UpgradeConfig{
5967
OptionalNetworkUpgrades: &params.OptionalNetworkUpgrades{Updates: config.OptionalNetworkUpgrades},
6068
StateUpgrades: config.StateUpgrades,
6169
PrecompileUpgrades: PrecompileUpgrades,
62-
}
63-
config.bytes = bytes
64-
65-
return &config, nil
70+
}, nil
6671
}
6772

68-
func NewUpgradeConfig(config params.UpgradeConfig) (*upgradeConfigMessage, error) {
73+
// Wraps an instance of *params.UpgradeConfig
74+
//
75+
// This function returns the serialized UpgradeConfig, ready to be send over to
76+
// other peers. The struct also includes a hash of the content, ready to be used
77+
// as part of the handshake protocol.
78+
//
79+
// Since params.UpgradeConfig should never change without a node reloading, it
80+
// is safe to call this function once and store its output globally to re-use
81+
// multiple times
82+
func UpgradeConfigToNetworkMessage(config *params.UpgradeConfig) (*UpgradeConfigMessage, error) {
6983
PrecompileUpgrades := make([]rawPrecompileUpgrade, 0)
7084
for _, precompileConfig := range config.PrecompileUpgrades {
7185
bytes, err := Codec.Marshal(Version, precompileConfig.Config)
@@ -83,33 +97,22 @@ func NewUpgradeConfig(config params.UpgradeConfig) (*upgradeConfigMessage, error
8397
optionalNetworkUpgrades = config.OptionalNetworkUpgrades.Updates
8498
}
8599

86-
wrappedConfig := upgradeConfigMessage{
100+
wrappedConfig := networkUpgradeConfigMessage{
87101
OptionalNetworkUpgrades: optionalNetworkUpgrades,
88102
StateUpgrades: config.StateUpgrades,
89103
PrecompileUpgrades: PrecompileUpgrades,
90-
config: config,
91-
bytes: make([]byte, 0),
92104
}
93105
bytes, err := Codec.Marshal(Version, wrappedConfig)
94106
if err != nil {
95107
return nil, err
96108
}
97-
wrappedConfig.bytes = bytes
98109

99-
return &wrappedConfig, nil
100-
}
101-
102-
func (r *upgradeConfigMessage) Config() params.UpgradeConfig {
103-
return r.config
104-
}
105-
106-
func (r *upgradeConfigMessage) Bytes() []byte {
107-
return r.bytes
108-
}
109-
110-
func (r *upgradeConfigMessage) Hash() [8]byte {
111-
hash := crypto.Keccak256(r.bytes)
110+
hash := crypto.Keccak256(bytes)
112111
var firstBytes [8]byte
113112
copy(firstBytes[:], hash[:8])
114-
return firstBytes
113+
114+
return &UpgradeConfigMessage{
115+
Bytes: bytes,
116+
Hash: hash,
117+
}, nil
115118
}

plugin/evm/message/handshake/upgrade_config_test.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
func TestSerialize(t *testing.T) {
1515
var t0 uint64 = 0
1616
var t1 uint64 = 1
17-
config, err := NewUpgradeConfig(params.UpgradeConfig{
17+
message, err := UpgradeConfigToNetworkMessage(&params.UpgradeConfig{
1818
PrecompileUpgrades: []params.PrecompileUpgrade{
1919
{
2020
Config: nativeminter.NewConfig(&t0, nil, nil, nil, nil), // enable at genesis
@@ -26,13 +26,15 @@ func TestSerialize(t *testing.T) {
2626
})
2727
require.NoError(t, err)
2828

29-
config2, err := ParseUpgradeConfig(config.Bytes())
29+
config, err := ParseUpgradeConfigMessage(message.Bytes)
3030
require.NoError(t, err)
3131

32-
config3, err := NewUpgradeConfig(config2.Config())
32+
message2, err := UpgradeConfigToNetworkMessage(config)
3333
require.NoError(t, err)
3434

35-
require.Equal(t, config2, config3)
36-
require.Equal(t, config.Hash(), config2.Hash())
37-
require.Equal(t, config.Hash(), config3.Hash())
35+
config3, err := ParseUpgradeConfigMessage(message2.Bytes)
36+
require.NoError(t, err)
37+
38+
require.Equal(t, config, config3)
39+
require.Equal(t, message.Hash, message2.Hash)
3840
}

0 commit comments

Comments
 (0)