protected async Task InitializeCrossChainContractOnSideChainAsync(long parentChainHeightOfCreation = 0,
                                                                          int parentChainId = 0)
        {
            var crossChainInitializationTransaction = await SideChainTester.GenerateTransactionAsync(SideCrossChainContractAddress,
                                                                                                     nameof(CrossChainContractContainer.CrossChainContractStub.Initialize), new InitializeInput
            {
                ParentChainId = parentChainId == 0 ? ChainHelper.ConvertBase58ToChainId("AELF") : parentChainId,
                CreationHeightOnParentChain = parentChainHeightOfCreation
            });

            await SideChainTester.MineAsync(new List <Transaction> {
                crossChainInitializationTransaction
            });
        }
        protected async Task <Transaction> GenerateTransactionAsync(Address contractAddress, string methodName,
                                                                    ECKeyPair ecKeyPair, IMessage input, bool isMainChain)
        {
            if (!isMainChain)
            {
                return(ecKeyPair == null
                    ? await SideChainTester.GenerateTransactionAsync(contractAddress, methodName, input)
                    : await SideChainTester.GenerateTransactionAsync(contractAddress, methodName, ecKeyPair, input));
            }

            return(ecKeyPair == null
                ? await MainChainTester.GenerateTransactionAsync(contractAddress, methodName, input)
                : await MainChainTester.GenerateTransactionAsync(contractAddress, methodName, ecKeyPair, input));
        }
示例#3
0
        public async Task MultipleNodes_Test()
        {
            var tester1 = new ContractTester <ContractTestAElfModule>();
            await tester1.InitialChainAsync();

            var tester2 = new ContractTester <ContractTestAElfModule>();
            await tester2.InitialChainAsync();

            var zeroContractAddress = tester1.GetContractAddress(Hash.Empty);

            var tx = await tester1.GenerateTransactionAsync(zeroContractAddress,
                                                            "DeploySmartContract",
                                                            new ContractDeploymentInput()
            {
                Category = SmartContractTestConstants.TestRunnerCategory,
                Code     = ByteString.CopyFrom(TokenContractCode)
            });

            await tester1.MineAsync(new List <Transaction> {
                tx
            });

            var chain1 = await tester1.GetChainAsync();

            var chain2 = await tester2.GetChainAsync();

            // For different nodes, the chain information are different.
            Assert.Equal(2, chain1.BestChainHeight);
            Assert.Equal(1, chain2.BestChainHeight);
        }
示例#4
0
        public async Task Mine_Test()
        {
            var tester = new ContractTester <ContractTestAElfModule>();
            await tester.InitialChainAsync();

            var zeroContractAddress = tester.GetContractAddress(Hash.Empty);
            // Create a transaction to deploy token contract.
            var tx = await tester.GenerateTransactionAsync(zeroContractAddress,
                                                           "DeploySmartContract",
                                                           new ContractDeploymentInput()
            {
                Category = SmartContractTestConstants.TestRunnerCategory,
                Code     = ByteString.CopyFrom(TokenContractCode)
            });

            var chain = await tester.GetChainAsync();

            var longestChainHeight = chain.LongestChainHeight;

            Assert.Equal(1, longestChainHeight);

            await tester.MineAsync(new List <Transaction> {
                tx
            });

            chain = await tester.GetChainAsync();

            longestChainHeight = chain.LongestChainHeight;

            // The longest chain height increased from 1 to 2.
            Assert.Equal(2, longestChainHeight);
        }
        public static async Task <List <ContractTester <DPoSContractTestAElfModule> > > GenerateCandidatesAsync(
            this ContractTester <DPoSContractTestAElfModule> starter, int number)
        {
            var candidatesKeyPairs  = new List <ECKeyPair>();
            var candidates          = new List <ContractTester <DPoSContractTestAElfModule> >();
            var transferTxs         = new List <Transaction>();
            var announceElectionTxs = new List <Transaction>();

            for (var i = 0; i < number; i++)
            {
                var candidateKeyPair = CryptoHelpers.GenerateKeyPair();
                transferTxs.Add(await starter.GenerateTransactionAsync(starter.GetTokenContractAddress(),
                                                                       nameof(TokenContract.Transfer), starter.KeyPair, new TransferInput
                {
                    To     = Address.FromPublicKey(candidateKeyPair.PublicKey),
                    Amount = DPoSContractConsts.LockTokenForElection,
                    Symbol = "ELF"
                }));
                announceElectionTxs.Add(await starter.GenerateTransactionAsync(starter.GetConsensusContractAddress(),
                                                                               nameof(ConsensusContract.AnnounceElection), candidateKeyPair,
                                                                               new Alias
                {
                    Value = $"{candidateKeyPair.PublicKey.ToHex().Substring(0, DPoSContractConsts.AliasLimit)}"
                }));
                candidatesKeyPairs.Add(candidateKeyPair);
            }

            // Package Transfer txs.
            await starter.MineAsync(transferTxs);

            // Package AnnounceElection txs.
            await starter.MineAsync(announceElectionTxs);

            foreach (var candidatesKeyPair in candidatesKeyPairs)
            {
                candidates.Add(starter.CreateNewContractTester(candidatesKeyPair));
            }

            return(candidates);
        }
示例#6
0
        public async Task GetTransactionResult_Test()
        {
            var tester = new ContractTester <ContractTestAElfModule>();
            await tester.InitialChainAsync();

            var zeroContractAddress = tester.GetContractAddress(Hash.Empty);
            var tx = await tester.GenerateTransactionAsync(zeroContractAddress, "DeploySmartContract",
                                                           new ContractDeploymentInput
            {
                Category = DefaultCategory,
                Code     = ByteString.CopyFrom(TokenContractCode)
            }
                                                           );

            await tester.MineAsync(new List <Transaction> {
                tx
            });

            var txResult = await tester.GetTransactionResultAsync(tx.GetHash());

            Assert.Equal(TransactionResultStatus.Mined, txResult.Status);
        }
示例#7
0
        public async Task CreateContractTester_Test()
        {
            var tester = new ContractTester <ContractTestAElfModule>();
            await tester.InitialChainAsync();

            var zeroContractAddress = tester.GetContractAddress(Hash.Empty);
            var tx = await tester.GenerateTransactionAsync(zeroContractAddress,
                                                           "DeploySmartContract",
                                                           new ContractDeploymentInput()
            {
                Category = SmartContractTestConstants.TestRunnerCategory,
                Code     = ByteString.CopyFrom(TokenContractCode)
            });

            await tester.MineAsync(new List <Transaction> {
                tx
            });

            var newTester = tester.CreateNewContractTester(CryptoHelper.GenerateKeyPair());
            var chain     = await newTester.GetChainAsync();

            Assert.Equal(2L, chain.BestChainHeight);
        }