שילוב תשלומי XMR: הגדרת צומת ושער RPC

מורכבויות טכניות של תשלומי Monero: פרטיות ברמת הפרוטוקול ארגון קבלת תשלומי Monero נתקל בארכיטקטורת פרטיות: כל עסקה משתמשת בכתובות חשאיות (stealth addresses), חתימות טבעת (Ring Signatures), וסכומים מוסתרים (RingCT). ללא ארנק RPC, לא תראה עסקה נכנסת

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

שאלות נפוצות

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

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    פיתוח אפליקציית ווב עבור FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    פיתוח אתר עבור BELFINGROUP
    1003
  • image_ecommerce_furnoro_435_0.webp
    פיתוח חנות מקוונת לחברת FURNORO
    1269
  • image_logo-advance_0.webp
    עיצוב לוגו לחברת B2B Advance
    717
  • image_crm_enviok_479_0.webp
    פיתוח אפליקציית ווב עבור Enviok
    1008

המורכבויות הטכניות של תשלומי Monero: פרטיות ברמת הפרוטוקול

ארגון קבלת תשלומי Monero נתקל בארכיטקטורת פרטיות: כל עסקה משתמשת בכתובות חמקניות (stealth addresses), חתימות טבעת (Ring Signatures), וסכומים מוסתרים (RingCT). ללא ארנק RPC, לא תראה עסקאות נכנסות — גישות סטנדרטיות כמו ניטור כתובת בבלוקצ'יין לא עובדות כאן. אנחנו, צוות מהנדסי בלוקצ'יין עם ניסיון בשילוב Monero, מפרקים את הפתרון ההנדסי מסנכרון צומת ועד ניטור תת-כתובות. קבלו ייעוץ על יישום — דונו בארכיטקטורה שלכם.

הקושי בשילוב Monero נובע מטבעו. כתובת מורכבת משני זוגות מפתחות: (מפתח ציבורי להוצאה, מפתח פרטי להוצאה) ו-(מפתח ציבורי לצפייה, מפתח פרטי לצפייה). השולח יוצר כתובת חמקנית חד-פעמית באמצעות המפתח הציבורי שלך לצפייה וסקלר אקראי. רק בעל המפתח הפרטי לצפייה יכול לחשב שהעסקה שייכת לו. RingCT מסתיר סכומים באמצעות התחייבויות פדרסן (Pedersen commitments) — רק השולח והמקבל יודעים את סכום ה-XMR בפועל. עמלת העסקה הממוצעת היא כ-0.0001 XMR, נמוכה משמעותית מהעברות בנקאיות.

מה זה אומר לגבי קבלת תשלומים נכנסים

לא ניתן פשוט לסרוק את הבלוקצ'יין — ניטור דורש את המפתח הפרטי לצפייה. בפועל, זה אומר הרצת צומת מלא עם monero-wallet-rpc או שימוש במפתח הצפייה על השרת (מאפשר לראות נכנסים אך לא להוציא). מבחינה סובייקטיבית, Monero מספק 15 הטעיות (decoys) לכל קלט (מאז HF v15), וזמן הבלוק הממוצע הוא 2 דקות. לייצור, קריטי להגדיר monero-wallet-rpc עם TLS ואימות.

תכונה תת-כתובת מזהה תשלום (מיושן)
פרטיות מלאה — לא חושפת קישור לארנק חושף קישור לנמען יחיד
רמת בלוקצ'יין כתובות שונות מצורף לעסקה
תקן דה פקטו מאז 2018 מיושן, לא מומלץ

מפתחי Monero מדגישים שתת-כתובות הן התקן דה פקטו לשערי תשלום. הארנק יכול לייצר עד 2^64 תת-כתובות, מספיק לכל עומס.

ארכיטקטורה: monero-wallet-rpc

כלי השילוב הסטנדרטי הוא monero-wallet-rpc מהחבילה הרשמית. הוא מספק ממשק JSON-RPC לכל הפעולות: יצירת תת-כתובות, בדיקת יתרה, יצירת עסקאות.

פריסת צומת

ראשית, סנכרן monerod. גודל הבלוקצ'יין הוא ~180 GB (גזום ~60 GB), סנכרון ראשוני לוקח 12–48 שעות. השתמש ב-SSD ולפחות 4 GB RAM.

# Запуск monerod с pruning monerod --data-dir /var/lib/monero \ --prune-blockchain \ --db-sync-mode fast \ --rpc-bind-ip 127.0.0.1 \ --rpc-bind-port 18081 \ --no-igd \ --detach # Запуск monero-wallet-rpc monero-wallet-rpc \ --daemon-address 127.0.0.1:18081 \ --rpc-bind-port 18083 \ --wallet-file /etc/monero/payment-wallet \ --password-file /etc/monero/wallet.pass \ --rpc-login payment_server:$(cat /etc/monero/rpc.pass) \ --disable-rpc-login false \ --trusted-daemon \ --non-interactive 

לייצור — ארנק נפרד לכל סביבה, nginx עם TLS, HTTP Basic. צרו קשר לתצורה מוכנה — נעזור להקים.

איך להקצות תת-כתובת לכל הזמנה בצורה נכונה?

Monero תומך בתת-כתובות — כתובות נגזרות עצמאיות לחלוטין ברמת הבלוקצ'יין. זו תכונה מרכזית לעיבוד תשלומים.

תהליך בן ארבעה שלבים:

  1. ארנק דרך # Запуск monerod с pruning monerod --data-dir /var/lib/monero \ --prune-blockchain \ --db-sync-mode fast \ --rpc-bind-ip 127.0.0.1 \ --rpc-bind-port 18081 \ --no-igd \ --detach # Запуск monero-wallet-rpc monero-wallet-rpc \ --daemon-address 127.0.0.1:18081 \ --rpc-bind-port 18083 \ --wallet-file /etc/monero/payment-wallet \ --password-file /etc/monero/wallet.pass \ --rpc-login payment_server:$(cat /etc/monero/rpc.pass) \ --disable-rpc-login false \ --trusted-daemon \ --non-interactive .
  2. צור תת-כתובת לכל הזמנה (monero-wallet-rpc).
  3. קשר את התת-כתובת להזמנה במסד הנתונים.
  4. נטר עסקאות נכנסות על אותה תת-כתובת.

דוגמה:

import requests RPC_URL = "http://127.0.0.1:18083/json_rpc" AUTH = ("payment_server", "rpc_password") def create_payment_address(order_id: str) -> dict: response = requests.post(RPC_URL, auth=AUTH, json={ "jsonrpc": "2.0", "id": "0", "method": "create_address", "params": { "account_index": 0, "label": f"order_{order_id}" } }) result = response.json()["result"] return { "address": result["address"], "address_index": result["address_index"] } def check_incoming_transfers(min_amount_xmr: float) -> list: response = requests.post(RPC_URL, auth=AUTH, json={ "jsonrpc": "2.0", "id": "0", "method": "get_transfers", "params": { "in": True, "pending": False, "min_height": 0 } }) transfers = response.json()["result"].get("in", []) return [t for t in transfers if t["amount"] / 1e12 >= min_amount_xmr] 

תת-כתובות הן התקן דה פקטו כבר כמה שנים ומומלצות כיום לכל השילובים החדשים. הן מופיעות ככתובות עצמאיות, טובות יותר לפרטיות ממזהי תשלום. תיעוד ה-RPC של ארנק Monero מאשר את היעילות של גישה זו.

איך לארגן ניטור תשלומי Monero נכנסים?

Monero משתמש במושג יתרה לא נעולה — כספים זמינים לאחר 10 אישורים (~20 דקות בזמן בלוק של 2 דקות). למערכת תשלומים:

def poll_payments(expected_payments: dict) -> None: """ expected_payments: {address_index: {"order_id": str, "amount_xmr": float}} """ response = requests.post(RPC_URL, auth=AUTH, json={ "jsonrpc": "2.0", "id": "0", "method": "get_transfers", "params": {"in": True, "pending": True} }) for transfer in response.json()["result"].get("in", []): addr_idx = transfer["subaddr_index"]["minor"] confirmations = transfer["confirmations"] amount_xmr = transfer["amount"] / 1e12 # 1 piconero = 1e-12 XMR if addr_idx in expected_payments: expected = expected_payments[addr_idx] if amount_xmr >= expected["amount_xmr"] * 0.99: # допуск 1% на округление if confirmations >= 10: mark_order_paid(expected["order_id"], amount_xmr) else: update_order_status(expected["order_id"], "pending_confirmations", confirmations) 

ודא שלאחר 10 אישורים הכספים מועברים לארנק קר. ארנק צפייה-בלבד לניטור מבטל סיכון גניבה.

איך להבטיח אבטחה עם תשלומים אוטומטיים?

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

ארנק צפייה-בלבד (מפתח ציבורי להוצאה + מפתח פרטי לצפייה) בטוח להרצה על שרת הניטור:

monero-wallet-cli --generate-from-view-key view-only-wallet \ --address <main_address> \ --viewkey <private_view_key> 

גם אם השרת נפרץ, תוקף לא יכול למשוך כספים. גישה זו מפחיתה עלויות תפעול בכ-40% בהשוואה למערכות תשלום מסורתיות.

מה כלול בעבודה

  • פריסה וסנכרון של create_address (צומת מלא או גזום)
  • הגדרת import requests RPC_URL = "http://127.0.0.1:18083/json_rpc" AUTH = ("payment_server", "rpc_password") def create_payment_address(order_id: str) -> dict: response = requests.post(RPC_URL, auth=AUTH, json={ "jsonrpc": "2.0", "id": "0", "method": "create_address", "params": { "account_index": 0, "label": f"order_{order_id}" } }) result = response.json()["result"] return { "address": result["address"], "address_index": result["address_index"] } def check_incoming_transfers(min_amount_xmr: float) -> list: response = requests.post(RPC_URL, auth=AUTH, json={ "jsonrpc": "2.0", "id": "0", "method": "get_transfers", "params": { "in": True, "pending": False, "min_height": 0 } }) transfers = response.json()["result"].get("in", []) return [t for t in transfers if t["amount"] / 1e12 >= min_amount_xmr] עם אימות ו-TLS
  • יישום זרימת תשלום מבוססת תת-כתובות
  • שירות סקירה לניטור עסקאות נכנסות עם לוגיקת אישורים
  • אוטומציית סוויפ והפרדת אחסון חם/קר
  • שילוב עם מערכת תשלומים קיימת דרך webhook או callback
שלב תיאור זמן משוער
ניתוח דרישות הסכמה על ארכיטקטורה, תוכנית שילוב 1–2 ימים
פריסת צומת התקנה וסנכרון monerod + wallet-rpc 2–3 ימים
יישום מודול תשלום ניהול תת-כתובות, סקירה, webhooks 3–5 ימים
בדיקות אימות זרימת תשלום, גלגולים לאחור 1–2 ימים
פריסה ותיעוד השקה לייצור, הוראות יום אחד

בעיות נפוצות בשילוב Monero

אנשים שוכחים להתחשב בסף העמלה: Monero משתמש בעמלות דינמיות, ואם לקוח משלם סכום נמוך מהצפוי עקב עמלות רשת, התשלום לא יעבור. פתרון — ציין סכום קבלה נטו, לא ברוטו. כמו כן, בלבול בין תת-כתובת למזהה תשלום, אף שהאחרון לא בשימוש מאז 2018 וחושף קישוריות לארנק. תקופת אישורים לא מספקת — לפחות 10 בלוקים, השתמש ב-30+ לסכומים גדולים. חוסר ניטור לעסקאות ממתינות: בעומס רשת גבוה, חלק מהעסקאות נתקעות; יש צורך במנגנון סריקה חוזרת.

החיסכון הממוצע בעמלות במעבר ל-Monero הוא כ-30%, ועלות פיתוח השער בדרך כלל מחזירה את עצמה תוך 2–3 חודשים. קבלו ייעוץ על יישום — דונו בארכיטקטורה שלכם.

דוגמת תצורת nginx ל-wallet-rpc
server { listen 443 ssl; server_name payment.example.com; ssl_certificate /etc/nginx/certs/fullchain.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; location /json_rpc { proxy_pass http://127.0.0.1:18083; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } 

המהנדסים שלנו עם ניסיון בלמעלה מ-50 שילובים מבטיחים פעולה יציבה של שער התשלום. הזמינו הקמה במפתח — צרו קשר כדי לדון בפרויקט שלכם.