Exemplo n.º 1
0
            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);
            }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 4
0
 int IRlpDecoder <GeneratedTransaction> .GetLength(GeneratedTransaction item, RlpBehaviors rlpBehaviors) => GetLength(item, rlpBehaviors);
Exemplo n.º 5
0
 Rlp IRlpDecoder <GeneratedTransaction> .Encode(GeneratedTransaction item, RlpBehaviors rlpBehaviors) => Encode(item, rlpBehaviors);