public virtual async Task ProcessTransactionAsync(
            Transaction transaction,
            TransactionReceipt transactionReceipt,
            HexBigInteger blockTimestamp)
        {
            if (!transaction.IsForContractCreation(transactionReceipt))
            {
                return;
            }

            var contractAddress = transactionReceipt.ContractAddress;
            var code            = await _getCodeProxy.GetCode(contractAddress).ConfigureAwait(false);

            var failedCreatingContract = HasFailedToCreateContract(code);

            if (!failedCreatingContract)
            {
                await _contractHandler.HandleAsync(new ContractTransaction(contractAddress, code, transaction))
                .ConfigureAwait(false);
            }

            await _transactionHandler
            .HandleContractCreationTransactionAsync(
                new ContractCreationTransaction(
                    contractAddress,
                    code,
                    transaction,
                    transactionReceipt,
                    failedCreatingContract,
                    blockTimestamp))
            .ConfigureAwait(false);
        }