Ejemplo n.º 1
0
        public void Initialize()
        {
            var logger        = LimboLogs.Instance;
            var specProvider  = MainNetSpecProvider.Instance;
            var ethereumEcdsa = new EthereumEcdsa(specProvider, logger);
            var txStorage     = new InMemoryTxStorage();
            var txPool        = new TxPool(txStorage, Timestamper.Default, ethereumEcdsa, specProvider, new TxPoolConfig(),
                                           new StateProvider(new StateDb(), new MemDb(), LimboLogs.Instance), LimboLogs.Instance);

            _parityModule = new ParityModule(new EthereumEcdsa(specProvider, logger), txPool, logger);
            var blockNumber = 1;
            var transaction = Build.A.Transaction.Signed(ethereumEcdsa, TestItem.PrivateKeyD, blockNumber)
                              .WithSenderAddress(Address.FromNumber((UInt256)blockNumber)).TestObject;

            transaction.Signature.V = 37;
            txPool.AddTransaction(transaction, blockNumber);
        }
Ejemplo n.º 2
0
        public void Initialize()
        {
            var logger        = LimboLogs.Instance;
            var specProvider  = MainnetSpecProvider.Instance;
            var ethereumEcdsa = new EthereumEcdsa(specProvider.ChainId, logger);
            var txStorage     = new InMemoryTxStorage();

            Peer         peerA       = SetUpPeerA(); //standard case
            Peer         peerB       = SetUpPeerB(); //Session is null
            Peer         peerC       = SetUpPeerC(); //Node is null, Caps are empty
            IPeerManager peerManager = Substitute.For <IPeerManager>();

            peerManager.ActivePeers.Returns(new List <Peer> {
                peerA, peerB, peerC
            });
            peerManager.ConnectedPeers.Returns(new List <Peer> {
                peerA, peerB, peerA, peerC, peerB
            });
            peerManager.MaxActivePeers.Returns(15);

            StateProvider stateProvider = new StateProvider(new TrieStore(new MemDb(), LimboLogs.Instance), new MemDb(), LimboLogs.Instance);

            var txPool = new TxPool.TxPool(txStorage, ethereumEcdsa, new FixedBlockChainHeadSpecProvider(specProvider), new TxPoolConfig(),
                                           stateProvider, new TxValidator(specProvider.ChainId), LimboLogs.Instance);

            IDb        blockDb     = new MemDb();
            IDb        headerDb    = new MemDb();
            IDb        blockInfoDb = new MemDb();
            IBlockTree blockTree   = new BlockTree(blockDb, headerDb, blockInfoDb, new ChainLevelInfoRepository(blockInfoDb), specProvider, NullBloomStorage.Instance, LimboLogs.Instance);

            new OnChainTxWatcher(blockTree, txPool, specProvider, LimboLogs.Instance);

            IReceiptStorage receiptStorage = new InMemoryReceiptStorage();

            _signerStore  = new Signer(specProvider.ChainId, TestItem.PrivateKeyB, logger);
            _parityModule = new ParityModule(ethereumEcdsa, txPool, blockTree, receiptStorage, new Enode(TestItem.PublicKeyA, IPAddress.Loopback, 8545),
                                             _signerStore, new MemKeyStore(new[] { TestItem.PrivateKeyA }), logger, peerManager);

            var blockNumber        = 2;
            var pendingTransaction = Build.A.Transaction.Signed(ethereumEcdsa, TestItem.PrivateKeyD, false)
                                     .WithSenderAddress(Address.FromNumber((UInt256)blockNumber)).TestObject;

            pendingTransaction.Signature.V = 37;
            stateProvider.CreateAccount(pendingTransaction.SenderAddress, UInt256.UInt128MaxValue);
            txPool.AddTransaction(pendingTransaction, TxHandlingOptions.None);

            blockNumber = 1;
            var transaction = Build.A.Transaction.Signed(ethereumEcdsa, TestItem.PrivateKeyD, false)
                              .WithSenderAddress(Address.FromNumber((UInt256)blockNumber))
                              .WithNonce(100).TestObject;

            transaction.Signature.V = 37;
            stateProvider.CreateAccount(transaction.SenderAddress, UInt256.UInt128MaxValue);
            txPool.AddTransaction(transaction, TxHandlingOptions.None);


            Block genesis = Build.A.Block.Genesis
                            .WithStateRoot(new Keccak("0x1ef7300d8961797263939a3d29bbba4ccf1702fabf02d8ad7a20b454edb6fd2f"))
                            .TestObject;

            blockTree.SuggestBlock(genesis);
            blockTree.UpdateMainChain(new[] { genesis }, true);

            Block previousBlock = genesis;
            Block block         = Build.A.Block.WithNumber(blockNumber).WithParent(previousBlock)
                                  .WithStateRoot(new Keccak("0x1ef7300d8961797263939a3d29bbba4ccf1702fabf02d8ad7a20b454edb6fd2f"))
                                  .WithTransactions(MuirGlacier.Instance, transaction)
                                  .TestObject;

            blockTree.SuggestBlock(block);
            blockTree.UpdateMainChain(new[] { block }, true);

            var logEntries = new[] { Build.A.LogEntry.TestObject };

            receiptStorage.Insert(block, new TxReceipt()
            {
                Bloom           = new Bloom(logEntries),
                Index           = 1,
                Recipient       = TestItem.AddressA,
                Sender          = TestItem.AddressB,
                BlockHash       = TestItem.KeccakA,
                BlockNumber     = 1,
                ContractAddress = TestItem.AddressC,
                GasUsed         = 1000,
                TxHash          = transaction.Hash,
                StatusCode      = 0,
                GasUsedTotal    = 2000,
                Logs            = logEntries
            });
        }
Ejemplo n.º 3
0
        public void Initialize()
        {
            var logger        = LimboLogs.Instance;
            var specProvider  = MainnetSpecProvider.Instance;
            var ethereumEcdsa = new EthereumEcdsa(specProvider.ChainId, logger);
            var txStorage     = new InMemoryTxStorage();
            var txPool        = new TxPool.TxPool(txStorage, Timestamper.Default, ethereumEcdsa, specProvider, new TxPoolConfig(),
                                                  new StateProvider(new StateDb(), new MemDb(), LimboLogs.Instance), LimboLogs.Instance);

            IDb        blockDb     = new MemDb();
            IDb        headerDb    = new MemDb();
            IDb        blockInfoDb = new MemDb();
            IBlockTree blockTree   = new BlockTree(blockDb, headerDb, blockInfoDb, new ChainLevelInfoRepository(blockInfoDb), specProvider, txPool, NullBloomStorage.Instance, LimboLogs.Instance);

            IReceiptStorage receiptStorage = new InMemoryReceiptStorage();

            _parityModule = new ParityModule(ethereumEcdsa, txPool, blockTree, receiptStorage, logger);
            var blockNumber        = 2;
            var pendingTransaction = Build.A.Transaction.Signed(ethereumEcdsa, TestItem.PrivateKeyD, false)
                                     .WithSenderAddress(Address.FromNumber((UInt256)blockNumber)).TestObject;

            pendingTransaction.Signature.V = 37;
            txPool.AddTransaction(pendingTransaction, TxHandlingOptions.None);

            blockNumber = 1;
            var transaction = Build.A.Transaction.Signed(ethereumEcdsa, TestItem.PrivateKeyD, false)
                              .WithSenderAddress(Address.FromNumber((UInt256)blockNumber))
                              .WithNonce(100).TestObject;

            transaction.Signature.V = 37;
            txPool.AddTransaction(transaction, TxHandlingOptions.None);


            Block genesis = Build.A.Block.Genesis
                            .WithStateRoot(new Keccak("0x1ef7300d8961797263939a3d29bbba4ccf1702fabf02d8ad7a20b454edb6fd2f"))
                            .TestObject;

            blockTree.SuggestBlock(genesis);
            blockTree.UpdateMainChain(new[] { genesis }, true);

            Block previousBlock = genesis;
            Block block         = Build.A.Block.WithNumber(blockNumber).WithParent(previousBlock)
                                  .WithStateRoot(new Keccak("0x1ef7300d8961797263939a3d29bbba4ccf1702fabf02d8ad7a20b454edb6fd2f"))
                                  .WithTransactions(transaction)
                                  .TestObject;

            blockTree.SuggestBlock(block);
            blockTree.UpdateMainChain(new[] { block }, true);

            var logEntries = new[] { Build.A.LogEntry.TestObject };

            receiptStorage.Insert(block, false, new TxReceipt()
            {
                Bloom           = new Bloom(logEntries),
                Index           = 1,
                Recipient       = TestItem.AddressA,
                Sender          = TestItem.AddressB,
                BlockHash       = TestItem.KeccakA,
                BlockNumber     = 1,
                ContractAddress = TestItem.AddressC,
                GasUsed         = 1000,
                TxHash          = transaction.Hash,
                StatusCode      = 0,
                GasUsedTotal    = 2000,
                Logs            = logEntries
            });
        }