protected override async Task AddBlocksOnStart() { await AddBlock(); GeneratedTransaction tx = Nethermind.Core.Test.Builders.Build.A.GeneratedTransaction.WithData(new byte[] { 0, 1 }) .SignedAndResolved(GetPrivateKey(1)).WithChainId(105).WithGasPrice(0).WithValue(0).TestObject; await AddBlock(tx); await AddBlock(BuildSimpleTransaction.WithNonce(1).TestObject, BuildSimpleTransaction.WithNonce(2).TestObject); }
public void Reseal_generated_transactions() { ITxSource innerSource = Substitute.For <ITxSource>(); ITxSealer txSealer = Substitute.For <ITxSealer>(); IStateReader stateReader = Substitute.For <IStateReader>(); BlockHeader parent = Build.A.BlockHeader.TestObject; long gasLimit = long.MaxValue; Transaction poolTx = Build.A.Transaction.WithSenderAddress(TestItem.AddressA).TestObject; GeneratedTransaction generatedTx = Build.A.GeneratedTransaction.WithSenderAddress(TestItem.AddressB).TestObject; innerSource.GetTransactions(parent, gasLimit).Returns(new[] { poolTx, generatedTx }); var txSource = new GeneratedTxSource(innerSource, txSealer, stateReader, LimboLogs.Instance); txSource.GetTransactions(parent, gasLimit).ToArray(); txSealer.Received().Seal(generatedTx, TxHandlingOptions.ManagedNonce | TxHandlingOptions.AllowReplacingSignature); txSealer.DidNotReceive().Seal(poolTx, Arg.Any <TxHandlingOptions>()); }
public void transactions_are_addable_to_block_after_sealing() { int chainId = 5; BlockHeader blockHeader = Build.A.BlockHeader.TestObject; GeneratedTransaction tx1 = Build.A.GeneratedTransaction.WithSenderAddress(TestItem.AddressA).TestObject; GeneratedTransaction tx2 = Build.A.GeneratedTransaction.WithSenderAddress(TestItem.AddressA).TestObject; ITimestamper timestamper = Substitute.For <ITimestamper>(); IStateReader stateReader = Substitute.For <IStateReader>(); Address nodeAddress = TestItem.AddressA; UInt256 expectedNonce = 10; stateReader.GetAccount(blockHeader.StateRoot, nodeAddress).Returns(Account.TotallyEmpty.WithChangedNonce(expectedNonce)); ulong expectedTimeStamp = 100; timestamper.UnixTime.Returns(UnixTime.FromSeconds(expectedTimeStamp)); int gasLimit = 200; ITxSource innerTxSource = Substitute.For <ITxSource>(); innerTxSource.GetTransactions(blockHeader, gasLimit).Returns(new[] { tx1, tx2 }); TxSealer txSealer = new(new Signer((ulong)chainId, Build.A.PrivateKey.TestObject, LimboLogs.Instance), timestamper); GeneratedTxSource transactionFiller = new(innerTxSource, txSealer, stateReader, LimboLogs.Instance); Transaction[] sealedTxs = transactionFiller.GetTransactions(blockHeader, gasLimit).ToArray(); Transaction sealedTx1 = sealedTxs.First(); Transaction sealedTx2 = sealedTxs.Skip(1).First(); sealedTx1.IsSigned.Should().BeTrue(); sealedTx1.Nonce.Should().Be(expectedNonce); sealedTx1.Hash.Should().Be(tx1.CalculateHash()); sealedTx1.Timestamp.Should().Be(expectedTimeStamp); sealedTx2.IsSigned.Should().BeTrue(); sealedTx2.Nonce.Should().Be(expectedNonce + 1); sealedTx2.Hash.Should().NotBe(tx1.CalculateHash()); sealedTx2.Timestamp.Should().Be(expectedTimeStamp); }
int IRlpDecoder <GeneratedTransaction> .GetLength(GeneratedTransaction item, RlpBehaviors rlpBehaviors) => GetLength(item, rlpBehaviors);
Rlp IRlpDecoder <GeneratedTransaction> .Encode(GeneratedTransaction item, RlpBehaviors rlpBehaviors) => Encode(item, rlpBehaviors);