示例#1
0
 def setUpTestData(cls):
     super().setUpTestData()
     GasStationProvider.del_singleton()
     SafeCreationServiceProvider.del_singleton()
     TransactionServiceProvider.del_singleton()
     FundingServiceProvider.del_singleton()
     cls.gas_station = GasStationProvider()
     cls.funding_service = FundingServiceProvider()
     cls.safe_creation_service = SafeCreationServiceProvider()
     cls.transaction_service = TransactionServiceProvider()
 def __new__(cls):
     if not hasattr(cls, 'instance'):
         cls.instance = FundingService(EthereumClientProvider(),
                                       GasStationProvider(),
                                       RedisRepository().redis,
                                       settings.SAFE_FUNDER_PRIVATE_KEY,
                                       settings.SAFE_FUNDER_MAX_ETH)
     return cls.instance
 def __new__(cls):
     if not hasattr(cls, 'instance'):
         from django.conf import settings
         cls.instance = TransactionService(GasStationProvider(),
                                           EthereumClientProvider(),
                                           RedisRepository().redis,
                                           settings.SAFE_VALID_CONTRACT_ADDRESSES,
                                           settings.SAFE_PROXY_FACTORY_ADDRESS,
                                           settings.SAFE_TX_SENDER_PRIVATE_KEY)
     return cls.instance
示例#4
0
 def __new__(cls):
     if not hasattr(cls, 'instance'):
         cls.instance = SafeCreationService(
             GasStationProvider(), EthereumClientProvider(),
             RedisRepository().redis, settings.SAFE_V1_0_0_CONTRACT_ADDRESS,
             settings.SAFE_PROXY_FACTORY_V1_0_0_ADDRESS,
             settings.SAFE_DEFAULT_CALLBACK_HANDLER,
             settings.SAFE_FUNDER_PRIVATE_KEY,
             settings.SAFE_FIXED_CREATION_COST)
     return cls.instance
    def handle(self, *args, **options):
        gas_price = options['gas_price'] or GasStationProvider(
        ).get_gas_prices().fast
        safe_tx_hash = options['safe_tx_hash']

        if safe_tx_hash:
            multisig_tx = SafeMultisigTx.objects.get(safe_tx_hash=safe_tx_hash)
            self.resend(gas_price, multisig_tx)
        else:
            for multisig_tx in SafeMultisigTx.objects.pending(older_than=60):
                self.resend(gas_price, multisig_tx)
 def __new__(cls):
     if not hasattr(cls, 'instance'):
         cls.instance = SafeCreationService(
             GasStationProvider(), EthereumClientProvider(),
             RedisRepository().redis, settings.SAFE_CONTRACT_ADDRESS,
             settings.SAFE_OLD_CONTRACT_ADDRESS,
             settings.SAFE_PROXY_FACTORY_ADDRESS,
             settings.SAFE_FUNDER_PRIVATE_KEY,
             settings.SAFE_FIXED_CREATION_COST, settings.SAFE_AUTO_FUND,
             settings.SAFE_AUTO_APPROVE_TOKEN)
     return cls.instance
    def handle(self, *args, **options):
        gas_price = options['gas_price'] or GasStationProvider(
        ).get_gas_prices().fast
        safe_tx_hash = options['safe_tx_hash']

        for multisig_tx in self.tx_service.get_pending_multisig_transactions(
                older_than=60):
            if safe_tx_hash:
                if multisig_tx.safe_tx_hash == safe_tx_hash:
                    self.resend(gas_price, multisig_tx)
            else:
                self.resend(gas_price, multisig_tx)
示例#8
0
    def handle(self, *args, **options):
        gas_price = options["gas_price"] or GasStationProvider().get_gas_prices().fast
        safe_tx_hash = options["safe_tx_hash"]
        older = options["older"]

        if safe_tx_hash:
            multisig_tx = SafeMultisigTx.objects.get(safe_tx_hash=safe_tx_hash)
            self.tx_service.resend(gas_price, multisig_tx)
        else:
            for multisig_tx in SafeMultisigTx.objects.pending(
                older_than=older
            ).select_related("ethereum_tx"):
                self.tx_service.resend(gas_price, multisig_tx)
示例#9
0
def check_pending_transactions() -> int:
    """
    Find txs that have not been mined after a while and resend again
    :return: Number of pending transactions
    """
    number_txs = 0
    try:
        redis = RedisRepository().redis
        with redis.lock("tasks:check_pending_transactions",
                        blocking_timeout=1,
                        timeout=60):
            tx_not_mined_alert = settings.SAFE_TX_NOT_MINED_ALERT_MINUTES
            multisig_txs = SafeMultisigTx.objects.pending(
                older_than=tx_not_mined_alert *
                60).select_related("ethereum_tx")
            for multisig_tx in multisig_txs:
                gas_price = GasStationProvider().get_gas_prices().fast
                old_fee = multisig_tx.ethereum_tx.fee
                ethereum_tx = TransactionServiceProvider().resend(
                    gas_price, multisig_tx)
                if ethereum_tx:
                    logger.error(
                        "Safe=%s - Tx with tx-hash=%s and safe-tx-hash=%s has not been mined after "
                        "a while, created=%s. Sent again with tx-hash=%s. Old fee=%d and new fee=%d",
                        multisig_tx.safe_id,
                        multisig_tx.ethereum_tx_id,
                        multisig_tx.safe_tx_hash,
                        multisig_tx.created,
                        ethereum_tx.tx_hash,
                        old_fee,
                        ethereum_tx.fee,
                    )
                else:
                    logger.error(
                        "Safe=%s - Tx with tx-hash=%s and safe-tx-hash=%s has not been mined after "
                        "a while, created=%s",
                        multisig_tx.safe_id,
                        multisig_tx.ethereum_tx_id,
                        multisig_tx.safe_tx_hash,
                        multisig_tx.created,
                    )
                number_txs += 1
    except LockError:
        pass
    return number_txs
示例#10
0
 def __new__(cls):
     if not hasattr(cls, "instance"):
         cls.instance = StatsService(EthereumClientProvider(),
                                     GasStationProvider())
     return cls.instance