public static IEnumerable <string> GetEntryPointAddresses(this IAccountAbstractionConfig accountAbstractionConfig) =>
 accountAbstractionConfig.EntryPointContractAddresses
 .Split(",")
 .Where(s => !string.IsNullOrWhiteSpace(s))
 .Select(s => s.Trim())
 .Distinct();
        public Task Init(INethermindApi nethermindApi)
        {
            _nethermindApi            = nethermindApi ?? throw new ArgumentNullException(nameof(nethermindApi));
            _accountAbstractionConfig = _nethermindApi.Config <IAccountAbstractionConfig>();
            _logger = _nethermindApi.LogManager.GetClassLogger();

            if (_accountAbstractionConfig.Enabled)
            {
                bool parsed = Address.TryParse(
                    _accountAbstractionConfig.EntryPointContractAddress,
                    out Address? entryPointContractAddress);
                if (!parsed)
                {
                    if (_logger.IsError)
                    {
                        _logger.Error("Account Abstraction Plugin: EntryPoint contract address could not be parsed");
                    }
                }
                else
                {
                    if (_logger.IsInfo)
                    {
                        _logger.Info($"Parsed EntryPoint Address: {entryPointContractAddress}");
                    }
                    _entryPointContractAddress = entryPointContractAddress !;
                }

                bool parsedCreate2Factory = Address.TryParse(
                    _accountAbstractionConfig.Create2FactoryAddress,
                    out Address? create2FactoryAddress);
                if (!parsedCreate2Factory)
                {
                    if (_logger.IsError)
                    {
                        _logger.Error("Account Abstraction Plugin: Create2Factory contract address could not be parsed");
                    }
                }
                else
                {
                    if (_logger.IsInfo)
                    {
                        _logger.Info($"Parsed Create2Factory Address: {create2FactoryAddress}");
                    }
                    _create2FactoryAddress = create2FactoryAddress !;
                }

                _entryPointContractAbi = LoadEntryPointContract();
            }

            if (Enabled)
            {
                if (_logger.IsInfo)
                {
                    _logger.Info("  Account Abstraction Plugin: User Operation Mining Enabled");
                }
            }
            else
            {
                if (_logger.IsInfo)
                {
                    _logger.Info("  Account Abstraction Plugin: User Operation Mining Disabled");
                }
            }

            return(Task.CompletedTask);
        }
        public Task Init(INethermindApi nethermindApi)
        {
            _nethermindApi            = nethermindApi ?? throw new ArgumentNullException(nameof(nethermindApi));
            _accountAbstractionConfig = _nethermindApi.Config <IAccountAbstractionConfig>();
            _logger = _nethermindApi.LogManager.GetClassLogger();

            if (_accountAbstractionConfig.Enabled)
            {
                // Increasing number of priority peers in network config by AaPriorityPeersMaxCount.
                // Be careful if there is another plugin with priority peers - they won't be distinguished in SyncPeerPool.
                _nethermindApi.Config <INetworkConfig>().PriorityPeersMaxCount += _accountAbstractionConfig.AaPriorityPeersMaxCount;
                IList <string> entryPointContractAddressesString = _accountAbstractionConfig.GetEntryPointAddresses().ToList();
                foreach (string addressString in entryPointContractAddressesString)
                {
                    bool parsed = Address.TryParse(
                        addressString,
                        out Address? entryPointContractAddress);
                    if (!parsed)
                    {
                        if (_logger.IsError)
                        {
                            _logger.Error("Account Abstraction Plugin: EntryPoint contract address could not be parsed");
                        }
                    }
                    else
                    {
                        if (_logger.IsInfo)
                        {
                            _logger.Info($"Parsed EntryPoint address: {entryPointContractAddress}");
                        }
                        _entryPointContractAddresses.Add(entryPointContractAddress !);
                    }
                }

                IList <string> whitelistedPaymastersString = _accountAbstractionConfig.GetWhitelistedPaymasters().ToList();
                foreach (string addressString in whitelistedPaymastersString)
                {
                    bool parsed = Address.TryParse(
                        addressString,
                        out Address? whitelistedPaymaster);
                    if (!parsed)
                    {
                        if (_logger.IsError)
                        {
                            _logger.Error("Account Abstraction Plugin: Whitelisted Paymaster address could not be parsed");
                        }
                    }
                    else
                    {
                        if (_logger.IsInfo)
                        {
                            _logger.Info($"Parsed Whitelisted Paymaster address: {whitelistedPaymaster}");
                        }
                        _whitelistedPaymasters.Add(whitelistedPaymaster !);
                    }
                }

                _entryPointContractAbi = LoadEntryPointContract();
            }

            if (Enabled)
            {
                if (_logger.IsInfo)
                {
                    _logger.Info("  Account Abstraction Plugin: User Operation Mining Enabled");
                }
            }
            else
            {
                if (_logger.IsInfo)
                {
                    _logger.Info("  Account Abstraction Plugin: User Operation Mining Disabled");
                }
            }

            return(Task.CompletedTask);
        }
Ejemplo n.º 4
0
 public static IEnumerable <string> GetWhitelistedPaymasters(this IAccountAbstractionConfig accountAbstractionConfig) =>
 accountAbstractionConfig.WhitelistedPaymasters
 .Split(",")
 .Where(s => !string.IsNullOrWhiteSpace(s))
 .Select(s => s.Trim())
 .Distinct();