Skip to content

Commit 4dd31ad

Browse files
author
Timur Badretdinov
committed
Rewrite extra data initialization
1 parent e59588e commit 4dd31ad

File tree

1 file changed

+12
-22
lines changed

1 file changed

+12
-22
lines changed

src/Nethermind/Nethermind.Clique/CliqueBlockProducer.cs

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ private Block PrepareBlock()
102102
UInt256 number = header.Number;
103103
// Assemble the voting snapshot to check which votes make sense
104104
Snapshot snapshot = _sealEngine.GetOrCreateSnapshot(number - 1, header.ParentHash);
105-
if ((ulong)number % _config.Epoch != 0)
105+
bool isEpochBlock = (ulong)number % 30000 == 0;
106+
if (!isEpochBlock)
106107
{
107108
// Gather all the proposals that make sense voting on
108109
List<Address> addresses = new List<Address>();
@@ -137,36 +138,25 @@ private Block PrepareBlock()
137138
header.TotalDifficulty = parent.TotalDifficulty + header.Difficulty;
138139
if (_logger.IsDebug) _logger.Debug($"Setting total difficulty to {parent.TotalDifficulty} + {header.Difficulty}.");
139140

140-
// Ensure the extra data has all it's components
141-
if (header.ExtraData.Length < CliqueSealEngine.ExtraVanityLength)
142-
{
143-
for (int i = 0; i < CliqueSealEngine.ExtraVanityLength; i++)
144-
{
145-
header.ExtraData = header.ExtraData.Append((byte)0).ToArray();
146-
}
147-
}
148-
149-
header.ExtraData = header.ExtraData.Take(CliqueSealEngine.ExtraVanityLength).ToArray();
141+
// Set extra data
142+
int mainBytesLength = CliqueSealEngine.ExtraVanityLength + CliqueSealEngine.ExtraSealLength;
143+
int signerBytesLength = isEpochBlock ? 20 * snapshot.Signers.Count : 0;
144+
int extraDataLength = mainBytesLength + signerBytesLength;
145+
header.ExtraData = new byte[extraDataLength];
150146

151147
byte[] clientName = Encoding.UTF8.GetBytes("Nethermind");
152148
Array.Copy(clientName, header.ExtraData, clientName.Length);
153149

154-
if ((ulong)number % _config.Epoch == 0)
150+
if (isEpochBlock)
155151
{
156-
foreach (Address signer in snapshot.Signers.Keys)
152+
for (int i = 0; i < snapshot.Signers.Keys.Count; i++)
157153
{
158-
foreach (byte addressByte in signer.Bytes)
159-
{
160-
header.ExtraData = header.ExtraData.Append(addressByte).ToArray();
161-
}
154+
Address signer = snapshot.Signers.Keys[i];
155+
int index = CliqueSealEngine.ExtraVanityLength + 20 * i;
156+
Array.Copy(signer.Bytes, 0, header.ExtraData, index, signer.Bytes.Length);
162157
}
163158
}
164159

165-
for (int i = 0; i < CliqueSealEngine.ExtraSealLength; i++)
166-
{
167-
header.ExtraData = header.ExtraData.Append((byte)0).ToArray();
168-
}
169-
170160
// Mix digest is reserved for now, set to empty
171161
header.MixHash = Keccak.Zero;
172162
// Ensure the timestamp has the correct delay

0 commit comments

Comments
 (0)