Exemple #1
0
        /// <summary>
        /// Creates a new chain with the provided ChainId and Smart Contract Zero.
        /// </summary>
        /// <returns>The new chain async.</returns>
        /// <param name="chainId">The new chain id which will be derived from the creator address.</param>
        /// <param name="smartContractRegistration">The smart contract registration containing the code of the SmartContractZero.</param>
        public async Task <IChain> CreateNewChainAsync(Hash chainId, List <SmartContractRegistration> smartContractRegistration)
        {
            try
            {
                // TODO: Centralize this function in Hash class
                // SmartContractZero address can be derived from ChainId
                foreach (var reg in smartContractRegistration)
                {
                    var contractAddress = GenesisContractHash(chainId, (SmartContractType)reg.Type);
                    await _smartContractService.DeployContractAsync(chainId, contractAddress, reg, true);
                }

                var builder = new GenesisBlockBuilder();
                builder.Build(chainId);

                // add block to storage
                var blockchain = _chainService.GetBlockChain(chainId);
                await blockchain.AddBlocksAsync(new List <IBlock> {
                    builder.Block
                });

                var chain = new Chain
                {
                    GenesisBlockHash = await blockchain.GetCurrentBlockHashAsync(),
                    Id = chainId
                };
                return(chain);
            }
            catch (Exception e)
            {
                _logger.Error("CreateNewChainAsync Error: " + e);
                return(null);
            }
        }
        /// <summary>
        /// Builds the genesis block with AElfs builder.
        /// </summary>
        /// <returns></returns>
        public static Block GetGenesisBlock()
        {
            var chainId = 2111;
            var builder = new GenesisBlockBuilder().Build(chainId);

            return(builder.Block);
        }
Exemple #3
0
        public void GenesisBlockBuilderTest()
        {
            var builder      = new GenesisBlockBuilder().Build(Hash.Generate());
            var genesisBlock = builder.Block;

            //var txs = builder.Txs;
            Assert.NotNull(genesisBlock);
            Assert.Equal(genesisBlock.Header.PreviousBlockHash, Hash.Genesis);
            //Assert.NotNull(txs);
        }
        public void GenesisBlockBuilder_Test()
        {
            var builder = new GenesisBlockBuilder();

            builder = builder.Build(0);

            builder.Block.Header.Height.ShouldBe(KernelConstants.GenesisBlockHeight);
            builder.Block.Header.PreviousBlockHash.ShouldBe(Hash.Empty);
            builder.Block.Header.ChainId.ShouldBe(0);

            builder.Block.Body.BlockHeader.ShouldBe(builder.Block.Header.GetHash());
        }