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; }
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(); } } }