Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 14 additions & 8 deletions src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,6 @@
return;
}

// Timeout extension: prepare request has been received with success
// around 2*15/M=30.0/5 ~ 40% block time (for M=5)
ExtendTimerByFactor(2);

context.Block.Header.Timestamp = message.Timestamp;
context.Block.Header.Nonce = message.Nonce;
context.TransactionHashes = message.TransactionHashes;
Expand All @@ -109,8 +105,20 @@
if (!context.GetMessage<PrepareResponse>(context.PreparationPayloads[i]).PreparationHash.Equals(payload.Hash))
context.PreparationPayloads[i] = null;
context.PreparationPayloads[message.ValidatorIndex] = payload;
byte[] hashData = context.EnsureHeader().GetSignData(neoSystem.Settings.Network);
for (int i = 0; i < context.CommitPayloads.Length; i++)
var block = context.EnsureHeader();

if (!StorageItem.IsSerializable(TrimmedBlock.Create(block.Header, message.TransactionHashes)))

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest)

'TrimmedBlock' does not contain a definition for 'Create'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest)

'StorageItem' does not contain a definition for 'IsSerializable'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest)

'TrimmedBlock' does not contain a definition for 'Create'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test (ubuntu-latest)

'StorageItem' does not contain a definition for 'IsSerializable'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test-Everything

'TrimmedBlock' does not contain a definition for 'Create'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test-Everything

'StorageItem' does not contain a definition for 'IsSerializable'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test-Everything

'TrimmedBlock' does not contain a definition for 'Create'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test-Everything

'StorageItem' does not contain a definition for 'IsSerializable'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test (windows-latest)

'TrimmedBlock' does not contain a definition for 'Create'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test (windows-latest)

'StorageItem' does not contain a definition for 'IsSerializable'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test (windows-latest)

'TrimmedBlock' does not contain a definition for 'Create'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test (windows-latest)

'StorageItem' does not contain a definition for 'IsSerializable'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test (macos-latest)

'TrimmedBlock' does not contain a definition for 'Create'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test (macos-latest)

'StorageItem' does not contain a definition for 'IsSerializable'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test (macos-latest)

'TrimmedBlock' does not contain a definition for 'Create'

Check failure on line 110 in src/Plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs

View workflow job for this annotation

GitHub Actions / Test (macos-latest)

'StorageItem' does not contain a definition for 'IsSerializable'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Trimmed blocks is just a header + transaction hashes, how can be unserializable (if not OOM)?

Full block is a header + transactions, but transactions are verified and if we need an serializability checks for them it should be done during verification.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is serialized by p2p, it's a different method with different limits, but here we ensure that is also serializable for the vm

{
Log($"Proposed block can't be serialized", LogLevel.Warning);
return;
}

// Timeout extension: prepare request has been received with success
// around 2*15/M=30.0/5 ~ 40% block time (for M=5)
ExtendTimerByFactor(2);

var hashData = block.GetSignData(neoSystem.Settings.Network);
for (var i = 0; i < context.CommitPayloads.Length; i++)
if (context.GetMessage(context.CommitPayloads[i])?.ViewNumber == context.ViewNumber)
if (!Crypto.VerifySignature(hashData, context.GetMessage<Commit>(context.CommitPayloads[i]).Signature.Span, context.Validators[i]))
context.CommitPayloads[i] = null;
Expand Down Expand Up @@ -185,7 +193,6 @@
{
if (message.NewViewNumber <= context.ViewNumber)
OnRecoveryRequestReceived(payload, message);

if (context.CommitSent) return;

var expectedView = context.GetMessage<ChangeView>(context.ChangeViewPayloads[message.ValidatorIndex])?.NewViewNumber ?? 0;
Expand All @@ -212,7 +219,6 @@
// Timeout extension: commit has been received with success
// around 4*15s/M=60.0s/5=12.0s ~ 80% block time (for M=5)
ExtendTimerByFactor(4);

Log($"{nameof(OnCommitReceived)}: height={commit.BlockIndex} view={commit.ViewNumber} index={commit.ValidatorIndex} nc={context.CountCommitted} nf={context.CountFailed}");

byte[] hashData = context.EnsureHeader()?.GetSignData(neoSystem.Settings.Network);
Expand Down
Loading