public static async Task <ContractParameterParser> GetContractParameterParserAsync(this IExpressNode expressNode, ExpressChain?chain = null) { ContractParameterParser.TryGetUInt160 tryGetAccount = (string name, out UInt160 scriptHash) => { var account = chain?.GetAccount(name); if (account != null) { scriptHash = account.AsUInt160(); return(true); } scriptHash = null !; return(false); }; var contracts = await expressNode.ListContractsAsync().ConfigureAwait(false); var lookup = contracts.ToDictionary(c => c.manifest.Name, c => c.hash); ContractParameterParser.TryGetUInt160 tryGetContract = (string name, out UInt160 scriptHash) => { if (lookup.TryGetValue(name, out var value)) { scriptHash = value; return(true); } foreach (var kvp in lookup) { if (string.Equals(name, kvp.Key, StringComparison.OrdinalIgnoreCase)) { scriptHash = kvp.Value; return(true); } } scriptHash = default !;