Oddbean new post about | logout
 Lightning Zaps

การ zap บน nostr ก็เป็นอีเว้นประเภทหนึ่ง ๆ โดยการใน zap แต่ละครั้งจะประกอบไปด้วย 2 อีเว้นก็คือ zap request (9734) และ zap receipt (9735) โดย flow ในการทำงานของการ zap มีดังนี้

1. client จะทำการอ่าน LNurl หรือ LNaddress จาก profile ของคนที่เราจะ zap และทำการส่ง request ไปยัง LNaddr server นั้น ๆ เมื่อ server ตอบกลับมาก็จะเช็คพารามิเตอร์สองตัวนั้นคือ allowsNostr(True or False) และ nostrPubkey(ตรงกับ npub ของโปรไฟล์ที่เราจะ zap มั้ย) ตามลำดับ ถ้าถูกต้องจะทำการการอ่านพารามิเตอร์ callback(ส่งเงินไป address ไหน), minSendable(ยอดขั้นต่ำ), และ maxSendable(ยอดสูงสุด) กระบวนการทั้งหมดของข้อนี้คือ zap request

2. เมื่อเราทำการจ่าย invoice เรียบร้อย จะมีการสร้าง zap receipt และส่งไปยัง relay ต่าง ๆ

โดย event ของทั้สองประดภทมีลักษณะดังนี้
zap request (9734)

{
  "kind": 9734,
  "content": "Zap!",
  "tags": [
    ["relays", "รีเลย์หนึ่ง", "รีเลย์สอง"],
    ["amount", "จำนวนที่เราอยาก zap"],
    ["lnurl", "lnurl ของคนรับ"],
    ["p", "pubkey คนรับในรูป hex"],
    ["e", "event id ที่เราจะ zap"]
  ],
  "pubkey": "pubkeyคนส่ง",
  "created_at": เวลา,
  "id": " ID ของอีเว้นนี้",
  "sig": " Digital sigature ของธุรกรรมนี้"
}

zap receipt (9735)
{
    "id": "ID ของอีเว้นนี้",
    "pubkey": "pubkey ของคนส่ง",
    "created_at": เวลาที่สร้าง,
    "kind": 9735,
    "tags": [
      ["p", "pubkeyคนส่งในรูป hex"],
      ["e", "event id ที่มีคนมา zap"],
      ["bolt11", "Ln invoice"],
      ["description", " zap request ทั้งอีเว้น"],
      ["preimage", "preimage ของ invoice"]
    ],
    "content": "",
    "sig": "Digital signatureของคนส่ง"
  }
#siamstr