public async Task SmartContractAddress_Set_And_Get_Test()
        {
            var chain = await _smartContractHelper.CreateChainAsync();

            var contractName = Hash.Empty.ToStorageKey();

            var chainContext = new ChainContext
            {
                BlockHash   = chain.BestChainHash,
                BlockHeight = chain.BestChainHeight
            };

            var smartContractAddress =
                await _smartContractAddressProvider.GetSmartContractAddressAsync(chainContext, contractName);

            smartContractAddress.ShouldBeNull();

            await _smartContractAddressProvider.SetSmartContractAddressAsync(chainContext, contractName,
                                                                             SampleAddress.AddressList[0]);

            var blockExecutedDataKey = $"BlockExecutedData/SmartContractAddress/{contractName}";
            var blockStateSet        = await _blockStateSetManger.GetBlockStateSetAsync(chain.BestChainHash);

            blockStateSet.BlockExecutedData.ShouldContainKey(blockExecutedDataKey);

            smartContractAddress =
                await _smartContractAddressProvider.GetSmartContractAddressAsync(chainContext, contractName);

            smartContractAddress.Address.ShouldBe(SampleAddress.AddressList[0]);
            smartContractAddress.BlockHeight = chainContext.BlockHeight;
            smartContractAddress.BlockHash   = chainContext.BlockHash;
        }
Example #2
0
        public async Task <Address> GetAddressByContractNameAsync(IChainContext chainContext, string name)
        {
            var smartContractAddress = await _smartContractAddressProvider.GetSmartContractAddressAsync(chainContext, name);

            var address = smartContractAddress?.Address;

            if (address == null)
            {
                address = await GetSmartContractAddressFromStateAsync(chainContext, name);
            }
            return(address);
        }
        private async Task ProcessTransactionResultsAsync(TransactionResult[] transactionResultList, Block block)
        {
            var chainContext = new ChainContext
            {
                BlockHash   = block.GetHash(),
                BlockHeight = block.Height
            };
            var interestedEvent = await _contractDeployedLogEventProcessor.GetInterestedEventAsync(chainContext);

            foreach (var transactionResult in transactionResultList)
            {
                var logEvent = transactionResult.Logs.First(l =>
                                                            l.Address == interestedEvent.LogEvent.Address && l.Name == interestedEvent.LogEvent.Name);
                var contractDeployed = new ContractDeployed();
                contractDeployed.MergeFrom(logEvent);
                if (contractDeployed.Name != null)
                {
                    var smartContractAddress = await _smartContractAddressProvider.GetSmartContractAddressAsync(chainContext,
                                                                                                                contractDeployed.Name.ToStorageKey());

                    smartContractAddress.ShouldBeNull();
                }
                var smartContractRegistration = await _smartContractRegistrationProvider.GetSmartContractRegistrationAsync(chainContext,
                                                                                                                           contractDeployed.Address);

                smartContractRegistration.ShouldBeNull();

                await _contractDeployedLogEventProcessor.ProcessAsync(block,
                                                                      new Dictionary <TransactionResult, List <LogEvent> >
                {
                    { transactionResult, new List <LogEvent> {
                          logEvent
                      } }
                });

                smartContractRegistration = await _smartContractRegistrationProvider.GetSmartContractRegistrationAsync(chainContext,
                                                                                                                       contractDeployed.Address);

                smartContractRegistration.ShouldNotBeNull();
                if (contractDeployed.Name == null)
                {
                    continue;
                }
                {
                    var smartContractAddress = await _smartContractAddressProvider.GetSmartContractAddressAsync(chainContext,
                                                                                                                contractDeployed.Name.ToStorageKey());

                    smartContractAddress.ShouldNotBeNull();
                }
            }
        }