ข้ามไปที่เนื้อหาหลัก

BSO Resolver

BSO Resolver แปลชื่อโดเมน .bso เป็นคีย์สาธารณะที่เกี่ยวข้องโดยการอ่านบันทึก Bitsocial TXT ที่จัดเก็บไว้ใน ENS มีไคลเอ็นต์ viem ที่ใช้ร่วมกัน การแคชแบบถาวร และทำงานได้ทั้งใน Node.js และสภาพแวดล้อมของเบราว์เซอร์

การติดตั้ง

npm install @bitsocial/bso-resolver

การสร้างตัวแก้ไข

สร้างอินสแตนซ์ของตัวแก้ไขโดยส่งวัตถุการกำหนดค่าไปยังตัวสร้าง:

const resolver = new BsoResolver({ key, provider, dataPath });
พารามิเตอร์จำเป็นคำอธิบาย
keyใช่ตัวระบุสำหรับอินสแตนซ์ตัวแก้ไข
providerใช่การกำหนดค่าการขนส่ง (ดูด้านล่าง)
dataPathไม่ไดเรกทอรีสำหรับไฟล์แคช SQLite (Node.js เท่านั้น)

ตัวเลือกผู้ให้บริการ

พารามิเตอร์ provider ยอมรับสามรูปแบบ:

  • "viem" -- ใช้ระบบขนส่งสาธารณะเริ่มต้นที่ viem จัดให้
  • HTTP(S) URL -- เชื่อมต่อผ่านตำแหน่งข้อมูล JSON-RPC (เช่น https://mainnet.infura.io/v3/YOUR_KEY)
  • WebSocket URL -- เชื่อมต่อผ่านตำแหน่งข้อมูล WebSocket RPC (เช่น wss://mainnet.infura.io/ws/v3/YOUR_KEY)

วิธีการ

resolve({ name, abortSignal? })

ค้นหาชื่อ .bso และส่งคืนคีย์สาธารณะที่เกี่ยวข้อง AbortSignal ที่เป็นอุปกรณ์เสริมสามารถส่งผ่านเพื่อยกเลิกการร้องขอที่ใช้เวลานาน

canResolve({ name })

ส่งคืนค่าบูลีนที่ระบุว่าตัวแก้ไขสามารถจัดการชื่อที่กำหนดได้หรือไม่ ใช้สิ่งนี้เพื่อตรวจสอบการสนับสนุนก่อนลองใช้ความละเอียดเต็ม

destroy()

รื้อตัวแก้ไข ปิดการเชื่อมต่อฐานข้อมูล และปล่อยทรัพยากร เรียกสิ่งนี้เมื่อไม่จำเป็นต้องใช้ตัวแก้ไขอีกต่อไป

การแคช

ชื่อที่แก้ไขแล้วจะถูกแคชโดยอัตโนมัติเพื่อลดการค้นหาเครือข่ายที่ซ้ำซ้อน แบ็กเอนด์แคชถูกเลือกตามสภาพแวดล้อมรันไทม์:

สิ่งแวดล้อมแบ็กเอนด์หมายเหตุ
โหนด jsSQLiteเก็บไว้ที่ dataPath ใช้โหมด WAL สำหรับการเข้าถึงพร้อมกัน
เบราว์เซอร์IndexedDBใช้ธุรกรรม IndexedDB ดั้งเดิม
ทางเลือกสำรองในหน่วยความจำ Mapใช้เมื่อทั้ง SQLite และ IndexedDB ไม่พร้อมใช้งาน

รายการแคชทั้งหมดมี TTL หนึ่งชั่วโมง และจะถูกลบออกโดยอัตโนมัติหลังจากหมดอายุ

บูรณาการกับ pkc-js

ตัวแก้ไขสามารถเสียบเข้ากับ pkc-js ได้โดยตรงผ่านตัวเลือก nameResolvers ซึ่งช่วยให้สามารถจำแนกชื่อ .bso แบบโปร่งใสระหว่างการค้นหาคีย์:

const pkc = new Pkc({
nameResolvers: [resolver],
// ...other options
});

เห็นพ้องต้องกัน

รีโซลเวอร์ได้รับการออกแบบมาให้ปลอดภัยเมื่อใช้งานพร้อมกัน:

  • ไคลเอ็นต์ viem ที่ใช้ร่วมกันเพียงตัวเดียวจะหลีกเลี่ยงการเชื่อมต่อที่ซ้ำซ้อน
  • SQLite ทำงานในโหมด WAL (Write-Ahead Logging) ทำให้สามารถอ่านพร้อมกันได้โดยไม่มีการปิดกั้น
  • การแคชของเบราว์เซอร์อาศัยธุรกรรม IndexedDB ดั้งเดิมสำหรับการแยก

จุดเข้าแพลตฟอร์ม

แพ็คเกจจัดส่งจุดเริ่มต้นแยกต่างหากสำหรับ Node.js และรุ่นเบราว์เซอร์ Bundlers ที่รองรับฟิลด์ exports ใน package.json จะเลือกอันที่ถูกต้องโดยอัตโนมัติ