public async Task StopAsync(OsBlockchainNodeContext blockchainNodeContext)
        {
            await _networkServer.StopAsync(false);

            await _blockchainNodeContextService.StopAsync(blockchainNodeContext.BlockchainNodeContext);

            foreach (var nodePlugin in _nodePlugins)
            {
                var _ = nodePlugin.ShutdownAsync();
            }
        }
Esempio n. 2
0
        private async Task StartNodeAsync()
        {
            var dto = new OsBlockchainNodeContextStartDto
            {
                ZeroSmartContract = typeof(BasicContractZero),
                ChainId           = _chainOptions.ChainId
            };

            dto.SmartContractRunnerCategory = KernelConstants.CodeCoverageRunnerCategory;
            dto.InitializationSmartContracts.AddGenesisSmartContract(
                ConsensusContractCode,
                ConsensusSmartContractAddressNameProvider.Name);

            var ownAddress = await _accountService.GetAccountAsync();

            var callList = new SystemContractDeploymentInput.Types.SystemTransactionMethodCallList();

            callList.Add(nameof(TokenContractContainer.TokenContractStub.Create), new CreateInput
            {
                Symbol      = "ELF",
                TokenName   = "ELF_Token",
                TotalSupply = TokenTotalSupply,
                Decimals    = 2,
                Issuer      = ownAddress,
                IsBurnable  = true
            });
            callList.Add(nameof(TokenContractContainer.TokenContractStub.SetPrimaryTokenSymbol),
                         new SetPrimaryTokenSymbolInput {
                Symbol = "ELF"
            });
            callList.Add(nameof(TokenContractContainer.TokenContractStub.Issue), new IssueInput
            {
                Symbol = "ELF",
                Amount = TokenTotalSupply,
                To     = ownAddress,
                Memo   = "Issue"
            });
            callList.Add(nameof(TokenContractContainer.TokenContractStub.InitialCoefficients), new Empty());

            dto.InitializationSmartContracts.AddGenesisSmartContract(
                ElectionContractCode,
                ElectionSmartContractAddressNameProvider.Name);
            dto.InitializationSmartContracts.AddGenesisSmartContract(
                TokenContractCode,
                TokenSmartContractAddressNameProvider.Name, callList);

            _blockchainNodeCtxt = await _osBlockchainNodeContextService.StartAsync(dto);
        }
        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);
        }
        private async Task StartNodeAsync()
        {
            var dto = new OsBlockchainNodeContextStartDto
            {
                ZeroSmartContract = typeof(BasicContractZero),
                ChainId           = _chainOptions.ChainId
            };

            dto.SmartContractRunnerCategory = KernelConstants.CodeCoverageRunnerCategory;
            var consensusContractDto = new GenesisSmartContractDto
            {
                Code = ConsensusContractCode,
                SystemSmartContractName = ConsensusSmartContractAddressNameProvider.Name,
                ContractInitializationMethodCallList = new List <ContractInitializationMethodCall>()
            };

            dto.InitializationSmartContracts.Add(consensusContractDto);

            var tokenContractDto = new GenesisSmartContractDto
            {
                Code = TokenContractCode,
                SystemSmartContractName = TokenSmartContractAddressNameProvider.Name,
                ContractInitializationMethodCallList = new List <ContractInitializationMethodCall>()
            };
            var ownAddress = await _accountService.GetAccountAsync();

            tokenContractDto
            .AddGenesisTransactionMethodCall(new ContractInitializationMethodCall
            {
                MethodName = nameof(TokenContractContainer.TokenContractStub.Create), Params = new CreateInput
                {
                    Symbol      = "ELF",
                    TokenName   = "ELF_Token",
                    TotalSupply = TokenTotalSupply,
                    Decimals    = 2,
                    Issuer      = ownAddress,
                    IsBurnable  = true
                }.ToByteString()
            });

            tokenContractDto.AddGenesisTransactionMethodCall(new ContractInitializationMethodCall
            {
                MethodName = nameof(TokenContractContainer.TokenContractStub.SetPrimaryTokenSymbol),
                Params     =
                    new SetPrimaryTokenSymbolInput {
                    Symbol = "ELF"
                }.ToByteString()
            });
            tokenContractDto.AddGenesisTransactionMethodCall(new ContractInitializationMethodCall
            {
                MethodName = nameof(TokenContractContainer.TokenContractStub.Issue), Params = new IssueInput
                {
                    Symbol = "ELF",
                    Amount = TokenTotalSupply,
                    To     = ownAddress,
                    Memo   = "Issue"
                }.ToByteString()
            });

            tokenContractDto.AddGenesisTransactionMethodCall(new ContractInitializationMethodCall
            {
                MethodName = nameof(TokenContractContainer.TokenContractStub.InitialCoefficients),
                Params     = new Empty().ToByteString()
            });
            dto.InitializationSmartContracts.Add(tokenContractDto);


            var electionContractDto = new GenesisSmartContractDto
            {
                Code = ElectionContractCode,
                SystemSmartContractName = ElectionSmartContractAddressNameProvider.Name,
                ContractInitializationMethodCallList = new List <ContractInitializationMethodCall>()
            };

            dto.InitializationSmartContracts.Add(electionContractDto);

            _blockchainNodeCtxt = await _osBlockchainNodeContextService.StartAsync(dto);
        }