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)); }
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); }
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); }
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); }
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); }