Skip to content

Commit 00eff2b

Browse files
committed
fix: sign genesis header
1 parent be81eba commit 00eff2b

1 file changed

Lines changed: 36 additions & 13 deletions

File tree

block/manager.go

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -140,25 +140,43 @@ type Manager struct {
140140
}
141141

142142
// getInitialState tries to load lastState from Store, and if it's not available it reads genesis.
143-
func getInitialState(ctx context.Context, genesis genesis.Genesis, store store.Store, exec coreexecutor.Executor, logger log.Logger) (types.State, error) {
143+
func getInitialState(ctx context.Context, genesis genesis.Genesis, store store.Store, exec coreexecutor.Executor, logger log.Logger, signer signer.Signer) (types.State, error) {
144144
// Load the state from store.
145145
s, err := store.GetState(ctx)
146146

147147
if errors.Is(err, ds.ErrNotFound) {
148148
logger.Info("No state found in store, initializing new state")
149149

150+
pubKey, err := signer.GetPublic()
151+
if err != nil {
152+
return types.State{}, fmt.Errorf("failed to get public key: %w", err)
153+
}
154+
150155
// Initialize genesis block explicitly
156+
header := types.Header{
157+
DataHash: new(types.Data).Hash(),
158+
ProposerAddress: genesis.ProposerAddress,
159+
BaseHeader: types.BaseHeader{
160+
ChainID: genesis.ChainID,
161+
Height: genesis.InitialHeight,
162+
Time: uint64(genesis.GenesisDAStartHeight.UnixNano()),
163+
}}
164+
signature, err := getSignature(header, signer)
165+
if err != nil {
166+
return types.State{}, fmt.Errorf("failed to get header signature: %w", err)
167+
}
168+
151169
err = store.SaveBlockData(ctx,
152-
&types.SignedHeader{Header: types.Header{
153-
DataHash: new(types.Data).Hash(),
154-
ProposerAddress: genesis.ProposerAddress,
155-
BaseHeader: types.BaseHeader{
156-
ChainID: genesis.ChainID,
157-
Height: genesis.InitialHeight,
158-
Time: uint64(genesis.GenesisDAStartHeight.UnixNano()),
159-
}}},
170+
&types.SignedHeader{
171+
Header: header,
172+
Signer: types.Signer{
173+
PubKey: pubKey,
174+
Address: genesis.ProposerAddress,
175+
},
176+
Signature: signature,
177+
},
160178
&types.Data{},
161-
&types.Signature{},
179+
&signature,
162180
)
163181
if err != nil {
164182
return types.State{}, fmt.Errorf("failed to save genesis block: %w", err)
@@ -214,7 +232,7 @@ func NewManager(
214232
gasPrice float64,
215233
gasMultiplier float64,
216234
) (*Manager, error) {
217-
s, err := getInitialState(ctx, genesis, store, exec, logger)
235+
s, err := getInitialState(ctx, genesis, store, exec, logger, proposerKey)
218236
if err != nil {
219237
logger.Error("error while getting initial state", "error", err)
220238
return nil, err
@@ -1068,15 +1086,20 @@ func (m *Manager) fetchHeaders(ctx context.Context, daHeight uint64) (coreda.Res
10681086
}
10691087

10701088
func (m *Manager) getSignature(header types.Header) (types.Signature, error) {
1089+
return getSignature(header, m.proposerKey)
1090+
}
1091+
1092+
func getSignature(header types.Header, proposerKey signer.Signer) (types.Signature, error) {
1093+
10711094
b, err := header.Vote()
10721095
if err != nil {
10731096
return nil, err
10741097
}
1075-
sign, err := m.proposerKey.Sign(b)
1098+
sign, err := proposerKey.Sign(b)
10761099
if err != nil {
10771100
return nil, err
10781101
}
1079-
pub, err := m.proposerKey.GetPublic()
1102+
pub, err := proposerKey.GetPublic()
10801103
if err != nil {
10811104
return nil, err
10821105
}

0 commit comments

Comments
 (0)