BSO Resolver
BSO Resolver แปลชื่อโดเมน .bso เป็นคีย์สาธารณะที่เกี่ยวข้องโดยการอ่านบันทึก Bitsocial TXT ที่จัดเก็บไว้ใน ENS มีไคลเอ็นต์ viem ที่ใช้ร่วมกัน การแคชแบบถาวร และทำงานได้ทั้งใน Node.js และสภาพแวดล้อมของเบราว์เซอร์
- GitHub: bitsocialnet/bso-resolver
- ใบอนุญาต: GPL-2.0 เท่านั้น
การติดตั้ง
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()
รื้อตัวแก้ไข ปิดการเชื่อมต่อฐานข้อมูล และปล่อยทรัพยากร เรียกสิ่งนี้เมื่อไม่จำเป็นต้องใช้ตัวแก้ไขอีกต่อไป
การแคช
ชื่อที่แก้ไขแล้วจะถูกแคชโดยอัตโนมัติเพื่อลดการค้นหาเครือข่ายที่ซ้ำซ้อน แบ็กเอนด์แคชถูกเลือกตามสภาพแวดล้อมรันไทม์:
| สิ่งแวดล้อม | แบ็กเอนด์ | หมายเหตุ |
|---|---|---|
| โหนด js | SQLite | เก็บไว้ที่ 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 จะเลือกอันที่ถูกต้องโดยอัตโนมัติ