Lightning Faucet MCP Server

официальный

Дайте AI-агентам биткоин-кошелёк с платежами через Lightning Network

Документация

Lightning Wallet

npm version License: MIT Glama MCP Server

Дайте вашему ИИ-агенту биткоин-кошелек. MCP-сервер + CLI. Работает с Claude Code, OpenClaw, Cursor и любыми агентными фреймворками.

Что нового в v1.4

  • update_operator инструмент / lw set-email - установите email оператора из MCP-клиента или CLI; на него будет отправлена ссылка для подтверждения.
  • claim_promo инструмент / lw claim-promo - запросите промо-бонус в сатоши за установку напрямую от агента. Требования: подтвержденный email + аккаунт оператора возрастом не менее 3 часов.
  • get_info работает до регистрации - информация о сервисе больше не требует API-ключа.

Бесплатные 100 сатоши для новых операторов

  1. lw register --email [email protected] (или MCP-инструмент register_operator с email)
  2. Перейдите по ссылке для подтверждения, которую мы отправим на почту
  3. Через 3 часа после создания аккаунта: lw claim-promo (или MCP-инструмент claim_promo)

Один бонус на оператора, только для первых 100 установок, депозит не требуется.

Что нового в v1.3

v1.3.0 - Поддержка протокола L402 v0 в соответствии с последней спецификацией Lightning Labs.

  • Протокол L402 v0 - Обновленный формат заголовка: version="0", token=, обратная совместимость с macaroon=
  • Обнаружение конечных точек - .well-known/l402.json на lightningfaucet.com и certvera.com
  • Обратная совместимость - Обрабатывает как старый, так и новый форматы заголовков L402 от любого сервиса

Что нового в v1.1

v1.1.0 - Поддержка протокола X402 (USDC на Base) в качестве автоматического резервного варианта наряду с L402 (Lightning).

  • Поддержка X402 - Автоматические платежи в USDC на Base, когда L402 недоступен
  • Автоопределение протокола - pay_l402_api плавно обрабатывает как L402, так и X402
  • Вебхуки - Уведомления о платежах и событиях в реальном времени
  • Keysend - Отправка платежей без счетов с использованием публичных ключей узлов
  • Декодирование счетов - Декодирование счетов BOLT11 перед оплатой
  • Аналитика агента - Отслеживание моделей расходов и использования
  • Экспорт транзакций - Экспорт истории в формате JSON или CSV
  • Управление бюджетом - Получение подробного статуса бюджета и установка лимитов
  • Жизненный цикл агента - Деактивация, повторная активация и удаление агентов
  • Восстановление аккаунта - Восстановление аккаунтов и ротация API-ключей
  • Переводы между агентами - Перемещение средств между вашими агентами

Почему Lightning Wallet MCP?

  • Мгновенные платежи - Транзакции в сети Lightning выполняются за миллисекунды
  • Поддержка протоколов L402 + X402 - Автоматический доступ к любому платному API (Lightning или USDC)
  • Иерархия оператор/агент - Управление несколькими агентами с лимитами расходов
  • Отсутствие риска хранения - У каждого агента изолированные средства под надзором оператора
  • Готовность к продакшену - Проверенная в боях инфраструктура для реальных транзакций
  • Уведомления через вебхуки - Мгновенные оповещения о поступлении платежей
  • Полная наблюдаемость - Аналитика, экспорт и детальное отслеживание статуса

Два способа использования

CLI (Любой агентный фреймворк)

Для агентов, ориентированных на CLI (OpenClaw, Pi, KiloCode или любой агент с доступом к Bash):

npm install -g lightning-wallet-mcp

Это устанавливает команду lw:

# Register and save your API key
export LIGHTNING_WALLET_API_KEY=$(lw register --name "My Bot" | jq -r '.api_key')

# Check balance
lw balance | jq '.balance_sats'

# Pay an L402 API
lw pay-api "https://lightningfaucet.com/api/l402/fortune"

# Create and fund an agent
lw create-agent "Research Bot" --budget 5000
lw fund-agent 1 1000

# Check identity
lw whoami

Вывод по умолчанию в JSON (передайте в jq). Используйте --human для читаемого вывода.

Выполните lw help для просмотра всех команд.

MCP-сервер (Claude Code, Cursor, Windsurf)

Для клиентов с нативной поддержкой MCP настройте как MCP-сервер:

Вариант A: Самостоятельная регистрация

{
  "mcpServers": {
    "lightning-wallet": {
      "command": "npx",
      "args": ["lightning-wallet-mcp"]
    }
  }
}

Затем попросите Claude: "Зарегистрируйте новую учетную запись оператора Lightning Wallet"

Вариант B: Предварительно настроенный API-ключ

  1. Получите API-ключ на lightningfaucet.com/ai-agents
  2. Настройте Claude Code (~/.claude/settings.json):
{
  "mcpServers": {
    "lightning-wallet": {
      "command": "npx",
      "args": ["lightning-wallet-mcp"],
      "env": {
        "LIGHTNING_WALLET_API_KEY": "your-api-key-here"
      }
    }
  }
}

Справочник инструментов

Информация о сервисе

ИнструментОписание
get_infoПолучить статус сервиса, версию и поддерживаемые функции
decode_invoiceДекодировать счет BOLT11 для просмотра суммы, получателя и срока действия

Контекст и идентификация

ИнструментОписание
whoamiПолучить текущий контекст - показывает, работаете ли вы как оператор или агент
check_balanceПроверить текущий баланс Lightning в сатоши
get_rate_limitsПроверить текущий статус ограничения скорости и оставшиеся запросы

Платежи (Требуется ключ агента)

ИнструментОписание
pay_l402_apiДоступ к платным API (L402/X402) - автоопределение протокола и оплата
pay_invoiceОплатить любой счет Lightning BOLT11
keysendОтправить платеж напрямую на публичный ключ узла (без счета)
pay_lightning_addressОплатить на Lightning-адрес (формат [email protected])
create_invoiceСоздать счет для получения платежей
get_invoice_statusПроверить, был ли оплачен счет
get_transactionsПросмотреть историю транзакций

LNURL (Требуется ключ агента)

ИнструментОписание
lnurl_authАутентификация в сервисе с использованием протокола LNURL-auth
claim_lnurl_withdrawПолучить средства по ссылке LNURL-withdraw

Управление оператором

ИнструментОписание
register_operatorСоздать новую учетную запись оператора
recover_accountВосстановить аккаунт с помощью кода восстановления
rotate_api_keyСгенерировать новый API-ключ (60-минутная задержка на вывод средств)
get_deposit_invoiceСоздать счет для пополнения счета оператора
withdrawВывести средства на внешний Lightning-адрес
set_operator_keyПереключиться на учетные данные оператора
  • update_operator - установить email оператора (отправляет ссылку для подтверждения) и/или имя
  • claim_promo - запросить промо-бонус в сатоши за установку (подтвержденный email + аккаунт 3ч)

Управление агентами

ИнструментОписание
create_agentСоздать агента под управлением оператора
list_agentsСписок всех агентов оператора
fund_agentПеревести сатоши от оператора агенту
transfer_to_agentПеревести сатоши между агентами или от оператора агенту
sweep_agentСобрать средства с агента обратно оператору
deactivate_agentВременно отключить агента
reactivate_agentПовторно включить деактивированного агента
delete_agentНавсегда удалить агента (возвращает баланс оператору)
get_budget_statusПолучить лимит бюджета и расходы агента
set_budgetУстановить или обновить лимит расходов агента
set_agent_credentialsПереключиться на учетные данные агента

Вебхуки

ИнструментОписание
register_webhookЗарегистрировать URL для получения уведомлений о событиях
list_webhooksСписок всех зарегистрированных вебхуков
delete_webhookУдалить вебхук
test_webhookОтправить тестовое событие для проверки связи вебхука

События вебхуков:

  • invoice_paid - Платеж получен по счету
  • payment_completed - Исходящий платеж выполнен успешно
  • payment_failed - Исходящий платеж не удался
  • balance_low - Баланс упал ниже порога
  • budget_warning - Израсходовано 80% бюджета
  • test - Ручное тестовое событие

Справочник CLI

Все команды выводят JSON в stdout. Ошибки выводятся в stderr с кодом выхода 1.

КомандаОписание
lw register [--name "name"]Создать учетную запись оператора, выводит API-ключ
lw whoamiТекущая идентификация (оператор или агент)
lw balanceБаланс в сатоши
lw infoСтатус и возможности сервиса
lw deposit <amount>Создать счет для депозита
lw withdraw <invoice>Вывести на внешний кошелек
lw pay <invoice>Оплатить счет BOLT11 [--max-fee <sats>]
lw pay-api <url>Оплатить API L402/X402 [--method GET] [--body "{}"] [--max-sats 1000]
lw decode <invoice>Декодировать счет BOLT11
lw create-agent <name>Создать агента [--budget <sats>]
lw fund-agent <id> <amount>Перевести сатоши агенту
lw list-agentsСписок всех агентов
lw transactionsПоследние транзакции [--limit 10] [--offset 0]
lw helpПоказать все команды

Пример рабочего процесса агента (Bash)

# 1. Register (one-time)
export LIGHTNING_WALLET_API_KEY=$(lw register --name "My Agent" | jq -r '.api_key')

# 2. Fund the account (pay the invoice with any Lightning wallet)
lw deposit 10000 | jq -r '.bolt11'

# 3. Create an agent with a budget
AGENT=$(lw create-agent "Worker" --budget 5000)
AGENT_ID=$(echo $AGENT | jq -r '.agent_id')
AGENT_KEY=$(echo $AGENT | jq -r '.agent_api_key')

# 4. Fund the agent
lw fund-agent $AGENT_ID 2000

# 5. Switch to agent context and make payments
export LIGHTNING_WALLET_API_KEY=$AGENT_KEY
lw pay-api "https://api.example.com/data" --max-sats 100

# 6. Check what happened
lw transactions --limit 5

Протоколы платных API: L402 + X402

Lightning Wallet MCP поддерживает два протокола платежей HTTP 402:

  • L402 (основной) - Платежи в сети Lightning. Оригинальный протокол оплаты за запрос.
  • X402 (резервный) - USDC на Base (протокол Coinbase). Автоматически определяется, когда L402 недоступен.

Когда вы вызываете pay_l402_api, сервер автоматически определяет, какой протокол использует API. L402 всегда имеет приоритет, если присутствуют оба заголовка. Агенты всегда платят в сатоши независимо от протокола — суммы X402 конвертируются по рыночному курсу.

Протокол L402

Протокол L402 (ранее LSAT) позволяет API взимать плату за запрос с помощью Lightning. Когда вы вызываете конечную точку, защищенную L402:

  1. Сервер возвращает HTTP 402 со счетом Lightning
  2. Lightning Faucet автоматически оплачивает счет
  3. Запрос завершается с платным контентом

Протокол X402 (Coinbase)

X402 использует USDC на Base для платежей API. Процесс прозрачен для агентов:

  1. Сервер возвращает HTTP 402 с заголовком PAYMENT-REQUIRED
  2. Lightning Faucet конвертирует сумму USDC в сатоши, списывает с баланса агента
  3. Подписывает авторизацию EIP-712 и повторяет запрос с заголовком PAYMENT-SIGNATURE
  4. Запрос завершается — агент видит тот же формат ответа, что и для L402

Ответ включает payment_protocol: "x402" и usdc_amount, чтобы агенты знали, какой протокол был использован.

Реестр L402 API

Мы ведем каталог API с поддержкой L402 на lightningfaucet.com/l402-registry - идеально для тестирования ваших агентов.

Демонстрационные L402 API

Попробуйте эти конечные точки для тестирования платежей L402:

# Get a fortune (costs ~10-50 sats)
pay_l402_api({ url: "https://lightningfaucet.com/api/l402/fortune" })

# Get a joke (costs ~10-50 sats)
pay_l402_api({ url: "https://lightningfaucet.com/api/l402/joke" })

# Get an inspirational quote (costs ~10-50 sats)
pay_l402_api({ url: "https://lightningfaucet.com/api/l402/quote" })

Смотрите Реестр L402 API для дополнительных конечных точек и ресурсов.

Пример полного рабочего процесса

// 1. Register as operator (if no API key configured)
register_operator({ name: "My AI Company" })
// Returns: { api_key: "lf_abc...", recovery_code: "xyz...", operator_id: 123 }

// 2. Activate the operator key
set_operator_key({ api_key: "lf_abc..." })

// 3. Check who you are
whoami()
// Returns: { type: "operator", id: 123, name: "My AI Company", balance_sats: 0 }

// 4. Fund your operator account
get_deposit_invoice({ amount_sats: 10000 })
// Pay this invoice with any Lightning wallet

// 5. Create an agent with budget limit
create_agent({ name: "Research Assistant", budget_limit_sats: 5000 })
// Returns: { agent_id: 456, agent_api_key: "agent_def..." }

// 6. Fund the agent
fund_agent({ agent_id: 456, amount_sats: 1000 })

// 7. Set up a webhook for payment notifications
register_webhook({
  url: "https://your-server.com/webhooks/lightning",
  events: ["invoice_paid", "payment_completed"]
})
// Returns: { webhook_id: 1, secret: "..." }  <- Save this secret!

// 8. Switch to agent mode for payments
set_agent_credentials({ api_key: "agent_def..." })

// 9. Check budget status
get_budget_status()
// Returns: { budget_limit_sats: 5000, total_spent_sats: 0, remaining_sats: 5000 }

// 10. Make payments!
pay_l402_api({ url: "https://api.example.com/premium-data" })

Платежи Keysend

Отправляйте платежи напрямую на узел Lightning без необходимости в счете:

// Send 100 sats to a node with an optional message
keysend({
  destination: "03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f",
  amount_sats: 100,
  message: "Hello from my AI agent!"
})

Декодирование счетов

Проверяйте детали счета перед оплатой:

decode_invoice({ invoice: "lnbc1000n1..." })
// Returns: {
//   amount_sats: 1000,
//   description: "Test payment",
//   destination: "03abc...",
//   expires_at: "2026-01-16T12:00:00Z",
//   is_expired: false
// }

Детали инструментов

get_info

Получить статус и возможности сервиса.

{
  "success": true,
  "version": "1.0.1",
  "api_version": "1.0",
  "status": "operational",
  "max_payment_sats": 1000000,
  "min_payment_sats": 1,
  "supported_features": ["l402", "x402", "webhooks", "lightning_address", "keysend"]
}

whoami

Получить текущий операционный контекст.

Возвращает для оператора:

{
  "type": "operator",
  "id": 123,
  "name": "My Company",
  "balance_sats": 50000,
  "agent_count": 3
}

Возвращает для агента:

{
  "type": "agent",
  "id": 456,
  "name": "Research Bot",
  "balance_sats": 1000,
  "budget_limit_sats": 5000,
  "operator_id": 123
}

pay_l402_api

Доступ к платным API с автоматической оплатой. Поддерживает протоколы L402 (Lightning) и X402 (USDC на Base). Протокол определяется автоматически из заголовков ответа 402.

ПараметрТипОбязательныйОписание
urlstringДаURL для запроса
methodstringНетHTTP-метод (GET, POST, PUT, DELETE). По умолчанию: GET
bodystringНетТело запроса для POST/PUT
max_payment_satsnumberНетМаксимальная сумма платежа. По умолчанию: 1000

keysend

Отправить платеж на узел без счета.

ПараметрТипОбязательныйОписание
destinationstringДаПубличный ключ целевого узла (66 шестнадцатеричных символов)
amount_satsnumberДаСумма в сатоши
messagestringНетНеобязательное сообщение (макс. 1000 символов)

register_webhook

Зарегистрировать URL для получения уведомлений о платежах.

ПараметрТипОбязательныйОписание
urlstringДаHTTPS URL для получения вебхуков
eventsarrayНетТипы событий для подписки. По умолчанию: ["invoice_paid"]

Возвращает: ID вебхука и секрет HMAC для проверки подписи.

Архитектура

┌─────────────────────────────────────────────────────────┐
│                    OPERATOR                              │
│  • Holds main funds                                      │
│  • Creates and manages agents                            │
│  • Sets spending limits                                  │
│  • Receives webhook notifications                        │
│  • Can recover account with recovery code                │
├─────────────────────────────────────────────────────────┤
│     AGENT 1          AGENT 2          AGENT 3           │
│   ┌─────────┐      ┌─────────┐      ┌─────────┐        │
│   │ 1000 sat│      │ 5000 sat│      │ 2500 sat│        │
│   │ Budget: │      │ Budget: │      │ Budget: │        │
│   │ 5000    │      │ 10000   │      │ Unlimited│        │
│   └─────────┘      └─────────┘      └─────────┘        │
│       │                │                │               │
│   L402 APIs        Keysend          Receive             │
│   Pay Invoice      Payments         Payments            │
└─────────────────────────────────────────────────────────┘

Лучшие практики безопасности

  • Никогда не фиксируйте API-ключи - Используйте переменные окружения
  • Устанавливайте лимиты бюджета - Защита от неконтролируемых расходов
  • Используйте ключи агентов для платежей - Храните ключ оператора в безопасности
  • Проверяйте подписи вебхуков - Используйте секрет, возвращенный при регистрации
  • Отслеживайте транзакции - Используйте get_transactions для проверки активности
  • Коды восстановления - Храните надежно, необходимы при утере API-ключа
  • Ротация ключей - Периодически меняйте ключи с помощью rotate_api_key

Безопасность вебхуков

Вебхуки включают подписи HMAC-SHA256 для проверки:

import hmac
import hashlib

def verify_webhook(payload, signature, secret):
    expected = hmac.new(
        secret.encode(),
        payload.encode(),
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(signature, expected)

Проверяйте заголовок X-Webhook-Signature по полезной нагрузке.

Хук политики предоплаты

Опциональный, независимый от поставщика хук позволяет внешней конечной точке политики разрешить или запретить платёж до его выполнения. По умолчанию он выключен — если PRE_PAYMENT_HOOK_URL не задан, поведение точно такое же, как раньше. Если задан, каждый исходящий платёж (pay_l402_api, pay_invoice, keysend, pay_lightning_address) сначала проверяется вашей конечной точкой; отказ прерывает платёж до перемещения средств.

Это полезно для политик расходования, рабочих процессов утверждения, проверок соответствия или любого внешнего уровня авторизации. Протокол хука универсален, поэтому любой сервис, реализующий описанный ниже контракт запрос/ответ, может быть подключён только через конфигурацию.

Конфигурация

Переменная окруженияПо умолчаниюОписание
PRE_PAYMENT_HOOK_URL(не задана)Конечная точка политики, на которую отправляется POST с каждым предложением платежа. Если не задана, хук полностью отключён.
PRE_PAYMENT_HOOK_TIMEOUT_MS3000Тайм-аут на запрос в миллисекундах.
PRE_PAYMENT_HOOK_FAIL_MODEclosedclosed запрещает платёж, если хук завершился ошибкой или тайм-аутом; open разрешает его выполнение. По умолчанию — отказоустойчивое закрытие.
{
  "mcpServers": {
    "lightning-wallet": {
      "command": "npx",
      "args": ["lightning-wallet-mcp"],
      "env": {
        "LIGHTNING_WALLET_API_KEY": "your-api-key",
        "PRE_PAYMENT_HOOK_URL": "https://your-policy-endpoint.example/hook"
      }
    }
  }
}

Запрос хука (POST от клиента)

Предложение описывает только предполагаемый платёж — оно никогда не включает ваш API-ключ кошелька.

{
  "proposal_id": "f7e1…",
  "agent_id": 42,
  "protocol": "l402",
  "destination_or_url": "https://api.example/paid-endpoint",
  "amount_sats": null,
  "max_payment_sats": 1000,
  "method": "GET",
  "ts": "2026-06-06T18:00:00.000Z"
}

protocol — одно из l402, x402, bolt11, keysend, lnaddress. amount_sats — точная сумма, когда она известна на момент хука: для keysend и lnaddress это запрошенная сумма, а для bolt11 она декодируется локально из счёта (без дополнительного вызова API). Для l402/x402 это null, потому что сумма устанавливается платёжным запросом во время выполнения — здесь хук заранее проверяет max_payment_sats (санкционированный агентом лимит), а точная итоговая сумма доступна позже через вебхуки. max_payment_sats — это санкционированный агентом лимит, когда применимо.

Ровно то, что покидает кошелёк. На вашу конечную точку хука отправляются только восемь указанных выше полей: proposal_id, agent_id, protocol, destination_or_url, amount_sats, max_payment_sats, method, ts. API-ключ кошелька и любые другие учётные данные никогда не включаются.

Охват. Хук контролирует все инициированные агентом расходы: pay_l402_api, pay_invoice, keysend, pay_lightning_address и Nostr-запы. Управление средствами на уровне оператора (вывод средств, пополнение агентов, переводы между агентами) намеренно не контролируется — это действия оператора, а не расходы агента.

Ответ хука (возвращает ваша конечная точка)

{ "decision": "allow" }
{ "decision": "deny", "reason": { "code": "over_limit", "message": "Exceeds per-transaction limit" } }
  • allow → платёж выполняется.
  • deny → платёж прерывается, и инструмент возвращает ошибку PolicyDenied, отображая reason.message.
  • Необязательное поле attestation (любой JSON) рассматривается клиентом как непрозрачное — оно записывается в stderr и в остальном игнорируется, так что сервис политики может вернуть подписанное решение для последующего аудита.

При ошибке хука, тайм-ауте или нераспознанном ответе применяется PRE_PAYMENT_HOOK_FAIL_MODE (по умолчанию отказ).

Ценообразование

Lightning Faucet взимает комиссию платформы 2% (мин. 1 сат) с исходящих платежей:

  • Платежи L402: комиссия платформы 2% + комиссия маршрутизации Lightning
  • Платежи X402: комиссия платформы 2% + спред обменного курса 1% (конвертация USDC в саты)
  • Платежи по счёту: комиссия платформы 2% + комиссия маршрутизации Lightning
  • Платежи Keysend: комиссия платформы 2% + комиссия маршрутизации Lightning
  • Вывод средств оператора: комиссия платформы 2% + комиссия маршрутизации Lightning
  • Внутренние переводы между операторами: комиссия платформы 2% (без комиссии маршрутизации)
  • Переводы агентов одного оператора: Бесплатно
  • Депозиты: Бесплатно
  • Получение платежей: Бесплатно
  • Вебхуки: Бесплатно

Все ответы о платежах включают platform_fee_sats, routing_fee_sats и total_cost для полной прозрачности.

История изменений

v1.1.0 (2026-02-16)

  • Интерфейс CLI: Новая команда lw для агентов, ориентированных на CLI (OpenClaw, Pi, KiloCode, любой Bash-агент)
  • Один пакет, два интерфейса: npm install -g lightning-wallet-mcp предоставляет и MCP-сервер, и CLI
  • Вывод в формате JSON: Все команды CLI выводят JSON в stdout, ошибки — в stderr
  • Поддержка X402: Автоматическое переключение на X402 (USDC на Base), когда L402 недоступен
  • Автоопределение протокола: pay_l402_api определяет L402 или X402 по заголовкам ответа 402
  • Поля ответа: payment_protocol и usdc_amount включаются при использовании X402
  • Обменный курс: Конвертация BTC/USD в реальном времени через CoinGecko с кэшем на 5 минут

v1.0.3 (2026-02-05)

  • Комиссия платформы: Комиссия 2% (мин. 1 сат) на все исходящие платежи и переводы между операторами
  • Прозрачность комиссий: Все ответы о платежах теперь включают platform_fee_sats, routing_fee_sats и total_cost
  • Переводы агентов одного оператора остаются бесплатными

v1.0.0 (2026-02-04)

  • Переименован из lightning-faucet-mcp в lightning-wallet-mcp
  • Переименована переменная окружения: LIGHTNING_FAUCET_API_KEYLIGHTNING_WALLET_API_KEY
  • Все 37 инструментов полностью протестированы и готовы к продакшену
  • Без критических изменений API — только имя пакета

Предыдущие релизы (как lightning-faucet-mcp)

См. историю изменений lightning-faucet-mcp для версий с v1.6.0 по v2.0.7.

  • Базовые платежи и счета

Демонстрация: Эксперимент по теории игр с ИИ-агентами

Мы провели экономический эксперимент из 100 раундов с 16 ИИ-агентами (8 Claude, 8 GPT-4o), используя реальный Bitcoin в сети Lightning. Агенты могли торговать, создавать альянсы, инвестировать и конкурировать — всё на базе этого MCP-сервера.

Результаты: Агенты совершили 2 839 реальных транзакций Lightning. Агенты Claude доминировали за счёт агрессивной ранней торговли, тогда как агенты GPT-4o придерживались консервативных стратегий.

Поддержка

Лицензия

Лицензия MIT — подробности см. в LICENSE.


Создано на Bitcoin | Lightning Faucet