private Transaction GetTransactionForGenesisOwnerInitialization(OsBlockchainNodeContextStartDto dto) { var zeroAddress = _smartContractAddressService.GetZeroSmartContractAddress(); return(new Transaction { From = zeroAddress, To = zeroAddress, MethodName = nameof(BasicContractZero.Initialize), Params = new InitializeInput { ContractDeploymentAuthorityRequired = dto.ContractDeploymentAuthorityRequired }.ToByteString() }); }
public async Task <OsBlockchainNodeContext> StartAsync(OsBlockchainNodeContextStartDto dto) { var transactions = new List <Transaction>(); transactions.Add(GetTransactionForDeployment(dto.ZeroSmartContract, ZeroSmartContractAddressNameProvider.Name, dto.SmartContractRunnerCategory)); transactions.AddRange(dto.InitializationSmartContracts .Select(p => GetTransactionForDeployment(p.Code, p.SystemSmartContractName, dto.SmartContractRunnerCategory, p.ContractInitializationMethodCallList))); if (dto.InitializationTransactions != null) { transactions.AddRange(dto.InitializationTransactions); } // Add transaction for initialization transactions.Add(GetTransactionForGenesisOwnerInitialization(dto)); var blockchainNodeContextStartDto = new BlockchainNodeContextStartDto() { ChainId = dto.ChainId, ZeroSmartContractType = dto.ZeroSmartContract, Transactions = transactions.ToArray() }; var context = new OsBlockchainNodeContext { BlockchainNodeContext = await _blockchainNodeContextService.StartAsync(blockchainNodeContextStartDto), AElfNetworkServer = _networkServer }; await _networkServer.StartAsync(); foreach (var nodePlugin in _nodePlugins) { await nodePlugin.StartAsync(dto.ChainId); } return(context); }