Example #1
0
        public async Task TwoJobsTest()
        {
            var balances = new List <int>()
            {
                100,
                0
            };
            var addresses = Enumerable.Range(0, balances.Count).Select(x => Address.FromRawBytes(Hash.Generate().ToByteArray())).ToList();

            foreach (var addbal in addresses.Zip(balances, Tuple.Create))
            {
                _mock.Initialize1(addbal.Item1, (ulong)addbal.Item2);
            }

            var txs = new List <Transaction>()
            {
                _mock.GetTransferTxn1(addresses[0], addresses[1], 10),
            };
            var txsHashes = txs.Select(y => y.GetHash()).ToList();

            var finalBalances = new List <int>
            {
                90,
                10
            };

            var service = new ParallelTransactionExecutingService(_mock.ActorEnvironment,
                                                                  new Grouper(_mock.ServicePack.ResourceDetectionService), _mock.ServicePack);

            var traces = await service.ExecuteAsync(txs, _mock.ChainId1, CancellationToken.None);

            foreach (var txTrace in txs.Zip(traces, Tuple.Create))
            {
                Assert.Equal(txTrace.Item1.GetHash(), txTrace.Item2.TransactionId);
                if (!string.IsNullOrEmpty(txTrace.Item2.StdErr))
                {
                    Assert.Null(txTrace.Item2.StdErr);
                }
            }

            foreach (var addFinbal in addresses.Zip(finalBalances, Tuple.Create))
            {
                Assert.Equal((ulong)addFinbal.Item2, _mock.GetBalance1(addFinbal.Item1));
            }
        }
Example #2
0
        public async Task Mine()
        {
            var chain = await _mock.CreateChain();

            // create miner
            var keypair     = new KeyPairGenerator().Generate();
            var minerconfig = _mock.GetMinerConfig(chain.Id, 10, keypair.GetAddress().DumpByteArray());

            ChainConfig.Instance.ChainId    = chain.Id.DumpHex();
            NodeConfig.Instance.NodeAccount = keypair.GetAddressHex();
            var txPool = _mock.CreateTxPool();

            txPool.Start();

            var txs = CreateTx(chain.Id);

            foreach (var tx in txs)
            {
                await txPool.AddTransactionAsync(tx);
            }

            var manager = _mock.MinerClientManager();
            var miner   = _mock.GetMiner(minerconfig, txPool, manager);

            GrpcLocalConfig.Instance.ClientToSideChain            = false;
            GrpcLocalConfig.Instance.WaitingIntervalInMillisecond = 10;
            NodeConfig.Instance.ECKeyPair = keypair;
            miner.Init();

            var block = await miner.Mine();

            Assert.NotNull(block);
            Assert.Equal(GlobalConfig.GenesisBlockHeight + 1, block.Header.Index);

            byte[]  uncompressedPrivKey = block.Header.P.ToByteArray();
            Address addr = Address.FromRawBytes(uncompressedPrivKey);

            Assert.Equal(minerconfig.CoinBase, addr);

            ECKeyPair  recipientKeyPair = ECKeyPair.FromPublicKey(uncompressedPrivKey);
            ECVerifier verifier         = new ECVerifier(recipientKeyPair);

            Assert.True(verifier.Verify(block.Header.GetSignature(), block.Header.GetHash().DumpByteArray()));
        }
Example #3
0
        public void MultipleTransactionExecutionTest()
        {
            var address1 = Address.FromRawBytes(Hash.Generate().ToByteArray());
            var address2 = Address.FromRawBytes(Hash.Generate().ToByteArray());
            var address3 = Address.FromRawBytes(Hash.Generate().ToByteArray());
            var address4 = Address.FromRawBytes(Hash.Generate().ToByteArray());
            var address5 = Address.FromRawBytes(Hash.Generate().ToByteArray());
            var address6 = Address.FromRawBytes(Hash.Generate().ToByteArray());

            _mock.Initialize1(address1, 100);
            _mock.Initialize1(address2, 0);
            _mock.Initialize1(address3, 200);
            _mock.Initialize1(address4, 0);
            _mock.Initialize1(address5, 300);
            _mock.Initialize1(address6, 0);

            var tx1 = _mock.GetTransferTxn1(address1, address2, 10);
            var tx2 = _mock.GetTransferTxn1(address3, address4, 10);
            var tx3 = _mock.GetTransferTxn1(address5, address6, 10);

            // Normal transfer
            var job1 = new List <Transaction>
            {
                tx1,
                tx2,
                tx3
            };

            _mock.Worker1.Tell(new JobExecutionRequest(0, _mock.ChainId1, job1, TestActor, TestActor));

            // Start processing

/*
 * Temporarily disabled.
 * TODO: https://github.com/AElfProject/AElf/issues/338
 *          var js1 = ExpectMsg<JobExecutionStatus>();
 *          Assert.Equal(JobExecutionStatus.RequestStatus.Running, js1.Status);
 */
            // Return result
            var trace  = ExpectMsg <TransactionTraceMessage>().TransactionTraces;
            var trace1 = trace[0];
            var trace2 = trace[1];
            var trace3 = trace[2];

//            Assert.Null(trace1);
//            _mock.CommitTrace(trace1).Wait();
//            _mock.CommitTrace(trace2).Wait();
//            _mock.CommitTrace(trace3).Wait();
            // Completed

/*
 * Temporarily disabled.
 * TODO: https://github.com/AElfProject/AElf/issues/338
 *          var js2 = ExpectMsg<JobExecutionStatus>();
 *          Assert.Equal(JobExecutionStatus.RequestStatus.Completed, js2.Status);
 */
            Assert.Equal(tx1.GetHash(), trace1.TransactionId);
            Assert.Equal(tx2.GetHash(), trace2.TransactionId);
            Assert.Equal(tx3.GetHash(), trace3.TransactionId);

            if (!string.IsNullOrEmpty(trace1.StdErr))
            {
                Assert.Null(trace1.StdErr);
            }
            Assert.Equal((ulong)90, _mock.GetBalance1(address1));
            Assert.Equal((ulong)10, _mock.GetBalance1(address2));

            if (!string.IsNullOrEmpty(trace2.StdErr))
            {
                Assert.Null(trace2.StdErr);
            }
            Assert.Equal((ulong)190, _mock.GetBalance1(address3));
            Assert.Equal((ulong)10, _mock.GetBalance1(address4));

            if (!string.IsNullOrEmpty(trace3.StdErr))
            {
                Assert.Null(trace3.StdErr);
            }
            Assert.Equal((ulong)290, _mock.GetBalance1(address5));
            Assert.Equal((ulong)10, _mock.GetBalance1(address6));

            // Check sequence
            var end1   = _mock.GetTransactionEndTime1(tx1);
            var start2 = _mock.GetTransactionStartTime1(tx2);

            Assert.True(end1 < start2);
        }
Example #4
0
 public static Address GetSystemContractAddress(Hash chainId, string contractName)
 {
     return(Address.FromRawBytes(Hash.FromTwoHashes(chainId, Hash.FromString(contractName)).ToByteArray()));
 }
Example #5
0
        public async Task ManyJobsTest()
        {
            /*
             *  Job 1: (0-1, 10), (1-2, 9)
             *  Job 2: (3-4, 8)
             *  Job 3: (5-6, 10)
             */

            var balances = new List <ulong>()
            {
                100,
                0,
                0,
                200,
                0,
                300,
                0
            };
            var addresses = Enumerable.Range(0, balances.Count).Select(x => Address.FromRawBytes(Hash.Generate().ToByteArray())).ToList();

            foreach (var addbal in addresses.Zip(balances, Tuple.Create))
            {
                _mock.Initialize1(addbal.Item1, addbal.Item2);
            }

            var txs = new List <Transaction>()
            {
                _mock.GetTransferTxn1(addresses[0], addresses[1], 10),
                _mock.GetTransferTxn1(addresses[1], addresses[2], 9),
                _mock.GetTransferTxn1(addresses[3], addresses[4], 8),
                _mock.GetTransferTxn1(addresses[5], addresses[6], 10),
            };

            var finalBalances = new List <ulong>
            {
                90,
                1,
                9,
                192,
                8,
                290,
                10
            };

            var service = new ParallelTransactionExecutingService(_mock.ActorEnvironment,
                                                                  new Grouper(_mock.ServicePack.ResourceDetectionService), _mock.ServicePack);

            var traces = await service.ExecuteAsync(txs, _mock.ChainId1, CancellationToken.None);

            foreach (var txTrace in txs.Zip(traces, Tuple.Create))
            {
                Assert.Equal(txTrace.Item1.GetHash(), txTrace.Item2.TransactionId);
                if (!string.IsNullOrEmpty(txTrace.Item2.StdErr))
                {
                    Assert.Null(txTrace.Item2.StdErr);
                }
            }

            Assert.Equal(
                string.Join(" ", finalBalances),
                string.Join(" ", addresses.Select(a => _mock.GetBalance1(a)))
                );
        }