Beispiel #1
0
        public async Task SmartContractAddress_Set_And_Get_Test()
        {
            var chain = await _smartContractHelper.CreateChainWithGenesisContractAsync();

            var chainContext = new ChainContext
            {
                BlockHash   = chain.BestChainHash,
                BlockHeight = chain.BestChainHeight
            };
            var address = await _smartContractAddressService.GetAddressByContractNameAsync(chainContext,
                                                                                           TestSmartContractAddressNameProvider.StringName);

            address.ShouldBeNull();
            var dto = await _smartContractAddressService.GetSmartContractAddressAsync(chainContext,
                                                                                      TestSmartContractAddressNameProvider.StringName);

            dto.ShouldBeNull();

            dto = await _smartContractAddressService.GetSmartContractAddressAsync(chainContext,
                                                                                  ZeroSmartContractAddressNameProvider.StringName);

            dto.SmartContractAddress.Address.ShouldBe(_smartContractAddressService.GetZeroSmartContractAddress());
            dto.Irreversible.ShouldBeFalse();
            address = await _smartContractAddressService.GetAddressByContractNameAsync(chainContext,
                                                                                       ZeroSmartContractAddressNameProvider.StringName);

            address.ShouldBe(_smartContractAddressService.GetZeroSmartContractAddress());


            await _smartContractAddressService.SetSmartContractAddressAsync(chainContext, TestSmartContractAddressNameProvider.StringName,
                                                                            SampleAddress.AddressList[0]);

            address = await _smartContractAddressService.GetAddressByContractNameAsync(chainContext, TestSmartContractAddressNameProvider.StringName);

            address.ShouldBe(SampleAddress.AddressList[0]);

            var smartContractAddressDto =
                await _smartContractAddressService.GetSmartContractAddressAsync(chainContext, TestSmartContractAddressNameProvider.StringName);

            smartContractAddressDto.SmartContractAddress.ShouldBe(new SmartContractAddress
            {
                Address     = SampleAddress.AddressList[0],
                BlockHash   = chain.BestChainHash,
                BlockHeight = chain.BestChainHeight
            });
            smartContractAddressDto.Irreversible.ShouldBeTrue();

            var map = await _smartContractAddressService.GetSystemContractNameToAddressMappingAsync(chainContext);

            map.Count.ShouldBe(2);
            map[ZeroSmartContractAddressNameProvider.Name].ShouldBe(_smartContractAddressService.GetZeroSmartContractAddress());
            map[TestSmartContractAddressNameProvider.Name].ShouldBe(SampleAddress.AddressList[0]);
        }
        protected override async Task ProcessLogEventAsync(Block block, LogEvent logEvent)
        {
            var eventData = new ContractDeployed();

            eventData.MergeFrom(logEvent);

            var chainContext = new ChainContext
            {
                BlockHash   = block.GetHash(),
                BlockHeight = block.Height
            };

            var smartContractRegistration =
                await _smartContractRegistrationInStateProvider.GetSmartContractRegistrationAsync(chainContext
                                                                                                  , eventData.Address);

            await _smartContractRegistrationProvider.SetSmartContractRegistrationAsync(chainContext, eventData.Address,
                                                                                       smartContractRegistration);

            if (block.Height > AElfConstants.GenesisBlockHeight)
            {
                _smartContractExecutiveService.CleanExecutive(eventData.Address);
            }

            if (eventData.Name != null)
            {
                await _smartContractAddressService.SetSmartContractAddressAsync(chainContext, eventData.Name.ToStorageKey(),
                                                                                eventData.Address);
            }

            Logger.LogDebug($"Deployed contract {eventData}");
        }
Beispiel #3
0
        public async Task GenerateTransaction_NoTransaction_Test()
        {
            var previousBlockHash    = HashHelper.ComputeFrom("PreviousBlockHash");
            var previousBlockHeight  = 1;
            var smartContractAddress = SampleAddress.AddressList[0];
            await _smartContractAddressService.SetSmartContractAddressAsync(new BlockIndex
            {
                BlockHash   = previousBlockHash,
                BlockHeight = previousBlockHeight
            }, CrossChainSmartContractAddressNameProvider.StringName, smartContractAddress);

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

            Assert.Empty(transactions);
        }