שילוב LND: הגדרת gRPC/API, ניהול נזילות, LNURL

רשת Lightning פותרת את הבעיה הבסיסית של ביטקוין: עסקאות on-chain יקרות (עד $100 להעברה) ואיטיות (10-60 דקות). דמיינו שירות מיקרופיימנט — כל תשלום של $0.01 דורש עמלה גדולה פי 1000. עם [Lightning Network Daemon](https://github.com/lightningnetwork/ln

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1451
  • image_web-applications_feedme_466_0.webp
    פיתוח אפליקציית ווב עבור FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    פיתוח אתר עבור BELFINGROUP
    1005
  • image_ecommerce_furnoro_435_0.webp
    פיתוח חנות מקוונת לחברת FURNORO
    1270
  • image_logo-advance_0.webp
    עיצוב לוגו לחברת B2B Advance
    719
  • image_crm_enviok_479_0.webp
    פיתוח אפליקציית ווב עבור Enviok
    1011

Lightning Network פותר את הבעיה הבסיסית של ביטקוין: עסקאות on-chain יקרות (עד $100 להעברה) ואיטיות (10–60 דקות). דמיינו שירות מיקרופיימנט — כל תשלום של $0.01 דורש עמלה גדולה פי 1000. עם Lightning Network Daemon מ-Lightning Labs, העמלות יורדות ל-1–10 סאטושי ($0.0001–0.001), והאישור לוקח שניות. אבל אינטגרציה של Bitcoin Lightning דרך LND אינה טריוויאלית: צריך להגדיר לקוח gRPC עם אימות macaroon, לנהל נזילות ערוצים, וליישם עיבוד תשלומים ללא הפסדים. לצוות שלנו יש ניסיון של למעלה מ-5 שנים: חיברנו LND לשערי תשלום, בורסות ויישומי DeFi. בשעות שיא, עמלות on-chain יכולות לעלות על $100 להעברה — Lightning מפחית אותן לשברי סנט, ומשיג חיסכון של עד 99.98% בעלויות. לפי Lightning Labs, יישום LND יכול לחסוך עד 99% בעלויות עסקאות. לעסק שמעבד 10,000 עסקאות בחודש, מעבר מ-on-chain ($50 לעסקה) ל-Lightning ($0.01 לעסקה) מביא לחיסכון חודשי של $499,990. בואו נצלול לפרטים הטכניים.

מה זה LND ואיך זה עובד

LND הוא צומת תוכנה לרשת Lightning. הוא דורש:

  • צומת ביטקוין מסונכרן (Bitcoind או מצב אור neutrino)
  • ערוצי תשלום פתוחים עם עמיתים ברשת
  • ניהול נזילות: כספים בצד שלך של הערוץ לתשלומים יוצאים, ובצד הנגדי לתשלומים נכנסים

ערוצי תשלום הם חוזי multisig מסוג 2-מתוך-2 על ביטקוין L1. LND מנהל את מצב הערוץ off-chain, ומפרסם רק פתיחה וסגירה של ערוצים לבלוקצ'יין. תשלומים מבוססי חשבוניות: המקבל יוצר חשבונית (בקשת תשלום BOLT-11), והמשלם משלם אותה. החשבונית מכילה hash תשלום — מנגנון HTLC מבטיח אטומיות.

אילו APIs מספק LND לאינטגרציה?

LND מציע שני APIs: gRPC (ראשי, עם כל הפונקציונליות) ו-REST (עטיפה). לייצור — gRPC, שמבצע פי 10 טוב יותר מ-REST בתרחישים של תפוקה גבוהה. השוואה:

תכונה gRPC REST
ביצועים גבוהים (HTTP/2, פרוטוקול בינארי) בינוניים (JSON, HTTP/1.1)
פונקציונליות סט מלא של שיטות RPC (כולל סטרימינג) כיסוי חלקי
אימות TLS + macaroon TLS + macaroon (Hex/Base64)
המלצה בחירה ראשית לאינטגרציות פשוטות

אימות באמצעות תעודת TLS + macaroon (טוקן מבוסס הרשאות):

import * as grpc from '@grpc/grpc-js'; import * as protoLoader from '@grpc/proto-loader'; import fs from 'fs'; const TLS_CERT = fs.readFileSync('/home/bitcoin/.lnd/tls.cert'); const MACAROON = fs.readFileSync('/home/bitcoin/.lnd/data/chain/bitcoin/mainnet/admin.macaroon'); const sslCreds = grpc.credentials.createSsl(TLS_CERT); const macaroonCreds = grpc.credentials.createFromMetadataGenerator((_, callback) => { const metadata = new grpc.Metadata(); metadata.add('macaroon', MACAROON.toString('hex')); callback(null, metadata); }); const credentials = grpc.credentials.combineChannelCredentials(sslCreds, macaroonCreds); const packageDef = protoLoader.loadSync('rpc.proto', { keepCase: true }); const lnrpc = grpc.loadPackageDefinition(packageDef) as any; const lightning = new lnrpc.lnrpc.Lightning('localhost:10009', credentials); 

Macaroon הוא לא רק טוקן — זה אימות מבוסס הרשאות. אפשר ליצור invoice.macaroon (יצירת חשבוניות בלבד), readonly.macaroon (קריאה בלבד), או כאלה מותאמות עם הגבלות IP וזמן. לעולם אל תחשוף admin.macaroon ליישומים — רק הרשאות מינימליות נדרשות.

פעולות ליבה

יצירת חשבונית (קבלת תשלום)

function addInvoice(amountSats: number, memo: string): Promise<Invoice> { return new Promise((resolve, reject) => { lightning.AddInvoice({ value: amountSats, memo, expiry: 3600, }, (err: any, response: any) => { if (err) reject(err); else resolve({ paymentRequest: response.payment_request, rHash: response.r_hash.toString('hex'), addIndex: response.add_index.toString(), }); }); }); } 

המחרוזת BOLT-11 מתחילה ב-lnbc (mainnet) או lntb (testnet). זה מה שהמשתמש סורק עם הארנק שלו.

מעקב אחר תשלומים נכנסים שתי גישות: Polling — LookupInvoice לפי r_hash. פשוט אבל לא אופטימלי. מנויי סטרימינג — SubscribeInvoices מזרים את כל העדכונים בזמן אמת:

function subscribeInvoices(onSettled: (invoice: SettledInvoice) => void) { const stream = lightning.SubscribeInvoices({ settle_index: 0, }); stream.on('data', (invoice: any) => { if (invoice.state === 1) { onSettled({ rHash: invoice.r_hash.toString('hex'), amountPaidSats: Number(invoice.amt_paid_sat), settledAt: Number(invoice.settle_date), memo: invoice.memo, }); } }); stream.on('error', (err: Error) => { setTimeout(() => subscribeInvoices(onSettled), 5000); }); } 

חשוב: יש לשמור settle_index. בעת הפעלה מחדש של היישום, הירשם מ-settle_index האחרון שעובד, אחרת תפספס תשלומים שהתקבלו בזמן השבתה.

תשלומים יוצאים

async function sendPayment(paymentRequest: string): Promise<string> { return new Promise((resolve, reject) => { const routerStub = new lnrpc.routerrpc.Router('localhost:10009', credentials); const stream = routerStub.SendPaymentV2({ payment_request: paymentRequest, timeout_seconds: 60, fee_limit_sat: 100, max_parts: 4, }); stream.on('data', (payment: any) => { if (payment.status === 2) { resolve(payment.payment_preimage.toString('hex')); } else if (payment.status === 3) { reject(new Error(`Payment failed: ${payment.failure_reason}`)); } }); }); } 

SendPaymentV2 (router RPC) עדיף על SendPayment הישן — הוא תומך ב-MPP (תשלומים מרובי נתיבים) ומטפל טוב יותר בשגיאות ניתוב.

תוכנית אינטגרציה של LND שלב אחר שלב

  1. הגדרת צומת ואימות. פרוס צומת LND (mainnet/testnet) או התחבר לקיים. צור תעודת TLS ו-macaroon עם הרשאות מינימליות (למשל, invoice.macaroon לקבלת תשלומים). ודא שהצומת מסונכרן והערוצים פתוחים.

  2. יישום לקוח gRPC. השתמש בהגדרות protobuf ממאגר LND. הגדר אישורים משולבים (TLS + macaroon). הוסף לוגיקת התחברות מחדש עם backoff אקספוננציאלי.

  3. טיפול בתשלומים. יישם יצירת חשבוניות (AddInvoice) ומנוי לאירועי settle (SubscribeInvoices) עם settle_index מתמשך. לתשלומים יוצאים, השתמש ב-SendPaymentV2 עם תמיכת MPP.

  4. ניהול נזילות וניטור. הגדר איזון ערוצים אוטומטי באמצעות charge-lnd או bos. חבר ניטור (Prometheus + Grafana) למעקב אחר יתרות וזמינות.

קבל ייעוץ לפרויקט שלך — נעזור להעריך את היקף העבודה.

למה ניהול נזילות הוא קריטי

זו משימה תפעולית מתמשכת. הבעיות העיקריות:

  • נזילות נכנסת: כדי לקבל תשלומים, אתה צריך נזילות בצד העמית של הערוץ. צומת חדש לעיתים קרובות לא יכול לקבל תשלומים. פתרונות: ספקי שירותי Lightning (Bitrefill Thor, Loop In, Amboss Magma) — השכרת נזילות נכנסת בתשלום; פתח ערוץ בכיוון ההפוך.
  • איזון ערוצים: עם הזמן, ערוצים הופכים לא מאוזנים — כל הכספים בצד אחד. LND loop out — החלפת submarine לאיזון: מזיז כספי Lightning ל-on-chain, ומחלק מחדש. משמש אוטומטית על ידי כלים כמו charge-lnd או bos (Balance of Satoshis).
  • מדיניות עמלות: לניתוב תשלומים של אחרים דרך הצומת שלך, אתה גובה base_fee + fee_rate. הגדרות עמלות נכונות משפיעות על יעילות הניתוב.

איך לעקוב אחר תשלומים ב-LND

כבר כיסינו שתי שיטות: polling וסטרימינג. לייצור, השתמש בסטרימינג עם settle_index מתמשך. זה מבטיח שאף תשלום לא הולך לאיבוד. בזמן השבתה, היישום מחדש את המנוי מהאינדקס האחרון.

LNURL ואינטגרציית ארנקים

LNURL הוא הרחבת פרוטוקול על גבי LN. סוגים מרכזיים:

סוג LNURL תיאור דוגמת שימוש
LNURL-pay המשתמש סורק QR, הארנק מבקש אוטומטית חשבונית בסכום הנדרש תרומות, תשלומים בחנות
LNURL-withdraw מאפשר למשתמש לקבל כספים דרך LN תשלומים, קאשבק
Lightning Address כתובת קריאה כמו [email protected] מפשט שליחת תשלומים

דוגמת backend ל-LNURL-pay:

app.get('/.well-known/lnurlp/:username', async (req, res) => { res.json({ callback: `https://yourdomain.com/lnurlp/${req.params.username}/pay`, maxSendable: 100_000_000, minSendable: 1_000, metadata: JSON.stringify([['text/plain', `Pay ${req.params.username}`]]), tag: 'payRequest', }); }); app.get('/lnurlp/:username/pay', async (req, res) => { const { amount } = req.query; const invoice = await createInvoice(Number(amount) / 1000); res.json({ pr: invoice.paymentRequest, routes: [] }); }); 

מה כלול באינטגרציה

אינטגרציית LND סטנדרטית כוללת:

  • הגדרה או חיבור לצומת LND קיים
  • לקוח gRPC עם אימות TLS + macaroon
  • יצירת חשבוניות ומנוי לתשלומים נכנסים עם settle_index מתמשך
  • עיבוד תשלומים יוצאים עם תמיכת MPP
  • נקודת קצה LNURL-pay (אם נדרש)
  • טיפול בסיסי בשגיאות ולוגיקת התחברות מחדש

החלק התפעולי (ניהול ערוצים, נזילות) הוא נושא נפרד, תלוי בהיקף זרימת התשלומים. אנחנו תומכים בפרויקטים, ומבטיחים יציבות תשתית.

רשימת בדיקה לאינטגרציית LND
  • פרוס צומת LND (mainnet/testnet) או התחבר לקיים
  • הגדר תעודת TLS ו-macaroon עם הרשאות מינימליות
  • יישם לקוח gRPC עם טיפול בהתחברות מחדש
  • צור חשבוניות והירשם לאירועי settle עם אינדקס מתמשך
  • יישם תשלומים יוצאים עם MPP וטיפול בשגיאות
  • הוסף נקודת קצה LNURL-pay (אם נדרש)
  • בדוק על testnet עם סימולציית עומס (למשל, 1000 חשבוניות לדקה)
  • פרוס לייצור עם ניטור זמינות ויתרות ערוצים

הערך את הפרויקט שלך — צור קשר לייעוץ. ציר זמן אינטגרציה בסיסי: 1–2 שבועות. קבל הצעת מחיר למשימות שלך.

דוגמת חיסכון: החלפת תשלום on-chain ב-Lightning מפחיתה את העמלה מ-$50 לפחות מ-$0.01, הפחתה של 99.98%. ב-10,000 עסקאות בחודש, החיסכון מסתכם ב-$499,990. זו לא תיאוריה — יישמנו פתרונות כאלה עבור לקוחות. צור קשר כדי לדון באינטגרציית LND שלך.