Example #1
0
        public async Task GenerateTransactions_Test()
        {
            var sideChainId             = 123;
            var sideChainBlockInfoCache = new List <IBlockCacheEntity>();
            var previousBlockHash       = Hash.FromString("PreviousBlockHash");
            var previousBlockHeight     = 1;
            var crossChainBlockData     = new CrossChainBlockData
            {
                PreviousBlockHeight = previousBlockHeight
            };

            var cachingCount = 5;

            for (int i = 1; i < cachingCount + CrossChainConstants.DefaultBlockCacheEntityCount; i++)
            {
                var sideChainBlockData = new SideChainBlockData()
                {
                    ChainId = sideChainId,
                    Height  = (i + 1),
                    TransactionStatusMerkleTreeRoot = Hash.FromString((sideChainId + 1).ToString())
                };
                sideChainBlockInfoCache.Add(sideChainBlockData);
                if (i <= CrossChainConstants.DefaultBlockCacheEntityCount)
                {
                    crossChainBlockData.SideChainBlockDataList.Add(sideChainBlockData);
                }
            }

            _crossChainTestHelper.AddFakeSideChainIdHeight(sideChainId, 1);
            AddFakeCacheData(new Dictionary <int, List <IBlockCacheEntity> > {
                { sideChainId, sideChainBlockInfoCache }
            });

            var res = await _crossChainIndexingDataService.PrepareExtraDataForNextMiningAsync(previousBlockHash,
                                                                                              previousBlockHeight);

            Assert.Empty(res);

            var smartContractAddress = SampleAddress.AddressList[0];

            _smartContractAddressService.SetAddress(CrossChainSmartContractAddressNameProvider.Name,
                                                    smartContractAddress);

            var transactions =
                await _crossChainIndexingTransactionGenerator.GenerateTransactionsAsync(SampleAddress.AddressList[0],
                                                                                        previousBlockHeight, previousBlockHash);

            transactions.Count.ShouldBe(1);
            transactions[0].From.ShouldBe(SampleAddress.AddressList[0]);
            transactions[0].To.ShouldBe(smartContractAddress);
            transactions[0].RefBlockNumber.ShouldBe(previousBlockHeight);
            transactions[0].RefBlockPrefix.ShouldBe(ByteString.CopyFrom(previousBlockHash.Value.Take(4).ToArray()));
            transactions[0].MethodName
            .ShouldBe(nameof(CrossChainContractContainer.CrossChainContractStub.ProposeCrossChainIndexing));

            var crossChainBlockDataInParam = CrossChainBlockData.Parser.ParseFrom(transactions[0].Params);

            Assert.Equal(crossChainBlockData, crossChainBlockDataInParam);
        }
Example #2
0
        private async Task UpdateSmartContractAddressesAsync(BlockHeader blockHeader,
                                                             ISmartContractAddressNameProvider smartContractAddressNameProvider)
        {
            var t = new Transaction()
            {
                From       = _smartContractAddressService.GetZeroSmartContractAddress(),
                To         = _smartContractAddressService.GetZeroSmartContractAddress(),
                MethodName = nameof(Acs0.ACS0Container.ACS0Stub.GetContractAddressByName),
                Params     = smartContractAddressNameProvider.ContractName.ToByteString()
            };

            var transactionResult =
                (await _transactionExecutingService.ExecuteAsync(
                     new ChainContext()
            {
                BlockHash = blockHeader.GetHash(), BlockHeight = blockHeader.Height
            }, t,
                     TimestampHelper.GetUtcNow()));

            if (!transactionResult.IsSuccessful())
            {
                throw new InvalidOperationException();
            }

            var address = Address.Parser.ParseFrom(transactionResult.ReturnValue);

            if (!address.Value.IsEmpty)
            {
                _smartContractAddressService.SetAddress(smartContractAddressNameProvider.ContractName, address);
            }
        }
Example #3
0
 /// <inheritdoc/>
 public Task DeployContractAsync(ContractDto contractDto)
 {
     CheckRunner(contractDto.SmartContractRegistration.Category);
     if (contractDto.ContractName != null)
     {
         _smartContractAddressService.SetAddress(contractDto.ContractName, contractDto.ContractAddress);
     }
     return(Task.CompletedTask);
 }
Example #4
0
 public GrpcServerTests()
 {
     ParentChainGrpcServerBase    = GetRequiredService <GrpcParentChainServerBase>();
     SideChainGrpcServerBase      = GetRequiredService <GrpcSideChainServerBase>();
     BasicCrossChainRpcBase       = GetRequiredService <GrpcBasicServerBase>();
     _smartContractAddressService = GetRequiredService <SmartContractAddressService>();
     _smartContractAddressService.SetAddress(CrossChainSmartContractAddressNameProvider.Name,
                                             SampleAddress.AddressList[0]);
 }
        public async Task GenerateTransactions_Test()
        {
            var transactions = new List <Transaction>();

            _crossChainIndexingTransactionGenerator.GenerateTransactions(SampleAddress.AddressList[0], 0, Hash.Empty, ref transactions);
            transactions.Count.ShouldBe(0);

            var chainId             = _kernelTestHelper.BestBranchBlockList[0].Header.ChainId;
            var previousBlockHash   = _kernelTestHelper.BestBranchBlockList[3].GetHash();
            var previousBlockHeight = _kernelTestHelper.BestBranchBlockList[3].Height;

            _crossChainTestHelper.AddFakeSideChainIdHeight(chainId, previousBlockHeight);

            var blockInfoCache = new List <IBlockCacheEntity>();
            var cachingCount   = CrossChainConstants.MinimalBlockCacheEntityCount + 1;

            for (var i = 1; i <= cachingCount; i++)
            {
                var sideChainBlockData = new SideChainBlockData
                {
                    ChainId = chainId,
                    Height  = previousBlockHeight + i,
                };
                blockInfoCache.Add(sideChainBlockData);
            }

            var fakeCache = new Dictionary <int, List <IBlockCacheEntity> > {
                { chainId, blockInfoCache }
            };

            AddFakeCacheData(fakeCache);

            var smartContractAddress = SampleAddress.AddressList[0];

            _smartContractAddressService.SetAddress(CrossChainSmartContractAddressNameProvider.Name,
                                                    smartContractAddress);

            await _crossChainIndexingDataService.GetCrossChainBlockDataForNextMiningAsync(previousBlockHash, previousBlockHeight);

            _crossChainIndexingTransactionGenerator.GenerateTransactions(SampleAddress.AddressList[0], previousBlockHeight, previousBlockHash, ref transactions);

            transactions.Count.ShouldBe(1);
            transactions[0].From.ShouldBe(SampleAddress.AddressList[0]);
            transactions[0].To.ShouldBe(smartContractAddress);
            transactions[0].RefBlockNumber.ShouldBe(previousBlockHeight);
            transactions[0].RefBlockPrefix.ShouldBe(ByteString.CopyFrom(previousBlockHash.Value.Take(4).ToArray()));
            transactions[0].MethodName.ShouldBe(CrossChainConstants.CrossChainIndexingMethodName);

            var crossChainBlockData = CrossChainBlockData.Parser.ParseFrom(transactions[0].Params);

            crossChainBlockData.PreviousBlockHeight.ShouldBe(previousBlockHeight);
            crossChainBlockData.ParentChainBlockData.Count.ShouldBe(0);
            crossChainBlockData.SideChainBlockData.Count.ShouldBe(
                cachingCount - CrossChainConstants.MinimalBlockCacheEntityCount);
            crossChainBlockData.SideChainBlockData[0].ChainId.ShouldBe(chainId);
            crossChainBlockData.SideChainBlockData[0].Height.ShouldBe(previousBlockHeight + 1);
        }
        public IrreversibleBlockDiscoveryServiceTests()
        {
            _smartContractAddressService       = GetRequiredService <ISmartContractAddressService>();
            _blockchainService                 = GetRequiredService <IBlockchainService>();
            _irreversibleBlockDiscoveryService = GetRequiredService <IIrreversibleBlockDiscoveryService>();
            _kernelTestHelper = GetRequiredService <KernelTestHelper>();

            _smartContractAddressService.SetAddress(ConsensusSmartContractAddressNameProvider.Name, _consensusAddress);
        }
Example #7
0
        /// <inheritdoc/>
        public Task DeployContractAsync(ContractDto contractDto)
        {
            // get runner
            var runner = _smartContractRunnerContainer.GetRunner(contractDto.SmartContractRegistration.Category);

            if (contractDto.ContractName != null)
            {
                _smartContractAddressService.SetAddress(contractDto.ContractName, contractDto.ContractAddress);
            }
            //Todo New version metadata handle it
//            var contractType = runner.GetContractType(registration);
//            var contractTemplate = runner.ExtractMetadata(contractType);
//            await _functionMetadataService.DeployContract(contractAddress, contractTemplate);
            return(Task.CompletedTask);
        }
Example #8
0
        public async Task ValidateTransaction_Test()
        {
            var tx     = _kernelTestHelper.GenerateTransaction();
            var result = await _validationProvider.ValidateTransactionAsync(tx);

            result.ShouldBe(true);

            _smartContractAddressService.SetAddress(TokenSmartContractAddressNameProvider.Name,
                                                    SampleAddress.AddressList.Last());
            tx.To         = SampleAddress.AddressList.Last();
            tx.MethodName = "ClaimTransactionFees";
            result        = await _validationProvider.ValidateTransactionAsync(tx);

            result.ShouldBe(false);
        }
Example #9
0
        /// <inheritdoc/>
        public async Task DeployContractAsync(Address contractAddress,
                                              SmartContractRegistration registration, bool isPrivileged, Hash name)
        {
            // get runner
            var runner = _smartContractRunnerContainer.GetRunner(registration.Category);
            await Task.Run(() => runner.CodeCheck(registration.Code.ToByteArray(), isPrivileged));

            if (name != null)
            {
                _smartContractAddressService.SetAddress(name, contractAddress);
            }

            //Todo New version metadata handle it
//            var contractType = runner.GetContractType(registration);
//            var contractTemplate = runner.ExtractMetadata(contractType);
//            await _functionMetadataService.DeployContract(contractAddress, contractTemplate);
        }
        /// <inheritdoc/>
        public async Task DeployContractAsync(ContractDto contractDto)
        {
            // get runner
            var runner = _smartContractRunnerContainer.GetRunner(contractDto.SmartContractRegistration.Category);
            await Task.Run(() => runner.CodeCheck(contractDto.SmartContractRegistration.Code.ToByteArray(), contractDto.IsPrivileged));

            if (contractDto.ContractName != null)
            {
                _smartContractAddressService.SetAddress(contractDto.ContractName, contractDto.ContractAddress);
            }
            await _smartContractExecutiveService.SetContractInfoAsync(contractDto.ContractAddress,
                                                                      contractDto.BlockHeight);

            //Todo New version metadata handle it
//            var contractType = runner.GetContractType(registration);
//            var contractTemplate = runner.ExtractMetadata(contractType);
//            await _functionMetadataService.DeployContract(contractAddress, contractTemplate);
        }
Example #11
0
        private async Task UpdateSmartContractAddressesAsync(BlockHeader blockHeader,
                                                             ISmartContractAddressNameProvider smartContractAddressNameProvider)
        {
            var transaction = new Transaction()
            {
                From       = _smartContractAddressService.GetZeroSmartContractAddress(),
                To         = _smartContractAddressService.GetZeroSmartContractAddress(),
                MethodName = nameof(Acs0.ACS0Container.ACS0Stub.GetContractAddressByName),
                Params     = smartContractAddressNameProvider.ContractName.ToByteString()
            };
            var address = await _transactionExecutingService.ExecuteAsync <Address>(
                new ChainContext { BlockHash = blockHeader.GetHash(), BlockHeight = blockHeader.Height }, transaction,
                TimestampHelper.GetUtcNow(), true);

            if (!address.Value.IsEmpty)
            {
                _smartContractAddressService.SetAddress(smartContractAddressNameProvider.ContractName, address);
            }
        }
Example #12
0
 public GrpcServerTests()
 {
     CrossChainGrpcServer         = GetRequiredService <CrossChainRpc.CrossChainRpcBase>();
     _smartContractAddressService = GetRequiredService <SmartContractAddressService>();
     _smartContractAddressService.SetAddress(CrossChainSmartContractAddressNameProvider.Name, Address.Generate());
 }