public async Task <BlockchainNodeContext> StartAsync(BlockchainNodeContextStartDto dto) { _defaultContractZeroCodeProvider.SetDefaultContractZeroRegistrationByType(dto.ZeroSmartContractType); var context = new BlockchainNodeContext { ChainId = dto.ChainId, TxHub = _txHub, }; var chain = await _blockchainService.GetChainAsync(); chain = chain == null ? await _chainCreationService.CreateNewChainAsync(dto.Transactions) : await _blockchainService.ResetChainToLibAsync(chain); await _smartContractAddressUpdateService.UpdateSmartContractAddressesAsync( await _blockchainService.GetBlockHeaderByHashAsync(chain.BestChainHash)); await _consensusService.TriggerConsensusAsync(new ChainContext { BlockHash = chain.BestChainHash, BlockHeight = chain.BestChainHeight }); return(context); }
public async Task <Chain> CreateChainAsync() { _defaultContractZeroCodeProvider.SetDefaultContractZeroRegistrationByType(null); var blockHeader = new BlockHeader { Height = AElfConstants.GenesisBlockHeight, PreviousBlockHash = Hash.Empty, Time = new Timestamp { Seconds = 0 } }; var transactions = new List <Transaction> { new Transaction { From = _defaultContractZeroCodeProvider.ContractZeroAddress, To = _defaultContractZeroCodeProvider.ContractZeroAddress, MethodName = nameof(ACS0Container.ACS0Stub.DeploySystemSmartContract), Params = new SystemContractDeploymentInput { Name = ZeroSmartContractAddressNameProvider.Name, Category = KernelConstants.DefaultRunnerCategory, Code = ByteString.CopyFrom(ContractCodes["AElf.Contracts.Genesis"]), }.ToByteString() }, new Transaction { From = _defaultContractZeroCodeProvider.ContractZeroAddress, To = _defaultContractZeroCodeProvider.ContractZeroAddress, MethodName = nameof(ACS0Container.ACS0Stub.DeploySystemSmartContract), Params = new SystemContractDeploymentInput { Name = ConfigurationSmartContractAddressNameProvider.Name, Category = KernelConstants.DefaultRunnerCategory, Code = ByteString.CopyFrom(ContractCodes["AElf.Contracts.Configuration"]) }.ToByteString() } }; var block = await _blockExecutingService.ExecuteBlockAsync(blockHeader, transactions); var chain = await _blockchainService.CreateChainAsync(block.Block, transactions); var blockExecutionResult = await _blockchainExecutingService.ExecuteBlocksAsync(new[] { block.Block }); await _blockExecutionResultProcessingService.ProcessBlockExecutionResultAsync(chain, blockExecutionResult); return(await _blockchainService.GetChainAsync()); }
internal async Task <Chain> CreateChainWithGenesisContractAsync() { _defaultContractZeroCodeProvider.SetDefaultContractZeroRegistrationByType(null); var chain = await _kernelTestHelper.CreateChain(); var transaction = BuildDeploySystemSmartContractTransaction(ZeroSmartContractAddressNameProvider.Name, Codes["AElf.Contracts.Genesis"]); var block = await _blockchainService.GetBlockByHashAsync(chain.BestChainHash); block.Body.TransactionIds.Add(transaction.GetHash()); await _blockchainService.AddTransactionsAsync(new[] { transaction }); await MineBlockAsync(block); return(chain); }