BSO Resolver
BSO Resolver نام دامنه .bso را با خواندن رکوردهای Bitsocial TXT ذخیره شده در ENS به کلیدهای عمومی مربوطه ترجمه می کند. این یک سرویس گیرنده viem مشترک، حافظه پنهان دائمی را ارائه می دهد و در هر دو محیط Node.js و مرورگر کار می کند.
- GitHub: bitsocialnet/bso-resolver
- مجوز: فقط GPL-2.0
نصب و راه اندازی
npm install @bitsocial/bso-resolver
ایجاد یک Resolver
حلکننده را با ارسال یک شیء پیکربندی به سازنده، نمونهسازی کنید:
const resolver = new BsoResolver({ key, provider, dataPath });
| پارامتر | مورد نیاز | توضیحات |
|---|---|---|
key | بله | شناسه برای نمونه حل کننده. |
provider | بله | پیکربندی حمل و نقل (به زیر مراجعه کنید). |
dataPath | نه | دایرکتوری برای فایل کش SQLite (فقط Node.js). |
گزینه های ارائه دهنده
پارامتر provider سه فرمت را می پذیرد:
"viem"-- از حمل و نقل عمومی پیش فرض ارائه شده توسط viem استفاده می کند.- ** URL HTTP(S) ** -- از طریق یک نقطه پایانی JSON-RPC (به عنوان مثال،
https://mainnet.infura.io/v3/YOUR_KEY) متصل می شود. - ** URL WebSocket ** -- از طریق یک نقطه پایانی WebSocket RPC (به عنوان مثال،
wss://mainnet.infura.io/ws/v3/YOUR_KEY) متصل می شود.
روش ها
resolve({ name, abortSignal? })
یک نام .bso را جستجو می کند و کلید عمومی مرتبط را برمی گرداند. یک AbortSignal اختیاری می تواند برای لغو درخواست های طولانی مدت ارسال شود.
canResolve({ name })
یک بولی را برمیگرداند که نشان میدهد آیا حلکننده قادر به مدیریت نام داده شده است یا خیر. از این برای بررسی پشتیبانی قبل از تلاش برای وضوح کامل استفاده کنید.
destroy()
حلکننده را خراب میکند، اتصالات پایگاه داده را میبندد و منابع را آزاد میکند. زمانی که دیگر نیازی به حل کننده نیست، این را صدا بزنید.
ذخیره سازی
نام های حل شده به صورت خودکار ذخیره می شوند تا جستجوهای اضافی شبکه کاهش یابد. پشتیبان کش بر اساس محیط زمان اجرا انتخاب می شود:
| محیط زیست | Backend | یادداشت ها |
|---|---|---|
| Node.js | SQLite | ذخیره شده در dataPath. از حالت WAL برای دسترسی همزمان استفاده می کند. |
| مرورگر | IndexedDB | از تراکنش های IndexedDB بومی استفاده می کند. |
| بازگشتی | حافظه داخلی Map | زمانی استفاده می شود که نه SQLite و نه IndexedDB در دسترس نباشد. |
همه ورودی های کش دارای TTL یک ساعته هستند و پس از انقضا به طور خودکار خارج می شوند.
ادغام با pkc-js
حلکننده را میتوان مستقیماً از طریق گزینه nameResolvers به pkc-js متصل کرد و وضوح نام .bso را در طول جستجوی کلید فعال میکند:
const pkc = new Pkc({
nameResolvers: [resolver],
// ...other options
});
همزمانی
حل کننده به گونه ای طراحی شده است که در استفاده همزمان ایمن باشد:
- یک کلاینت مشترک viem از اتصالات اضافی اجتناب می کند.
- SQLite در حالت WAL (Write-Ahead Logging) کار می کند و امکان خواندن همزمان بدون مسدود کردن را فراهم می کند.
- کش مرورگر برای جداسازی به تراکنش های IndexedDB بومی متکی است.
نقاط ورود پلت فرم
این بسته نقاط ورودی جداگانه ای را برای Node.js و ساخت های مرورگر ارسال می کند. باندلرهایی که از فیلد exports در package.json پشتیبانی می کنند، به طور خودکار مورد صحیح را انتخاب می کنند.