BSO Resolver
BSO সমাধানকারী .bso ডোমেন নামগুলিকে ENS-এ সঞ্চিত Bitsocial TXT রেকর্ডগুলি পড়ে তাদের সংশ্লিষ্ট পাবলিক কীগুলিতে অনুবাদ করে। এটি একটি ভাগ করা 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"-- ভিয়েমের দেওয়া ডিফল্ট পাবলিক ট্রান্সপোর্ট ব্যবহার করে।- HTTP(S) URL -- একটি JSON-RPC এন্ডপয়েন্টের মাধ্যমে সংযোগ করে (যেমন,
https://mainnet.infura.io/v3/YOUR_KEY)। - ওয়েবসকেট URL -- একটি WebSocket RPC এন্ডপয়েন্টের মাধ্যমে সংযোগ করে (যেমন,
wss://mainnet.infura.io/ws/v3/YOUR_KEY)।
পদ্ধতি
resolve({ name, abortSignal? })
একটি .bso নাম খোঁজে এবং সংশ্লিষ্ট সর্বজনীন কী ফেরত দেয়। একটি ঐচ্ছিক AbortSignal দীর্ঘ-চলমান অনুরোধগুলি বাতিল করতে পাস করা যেতে পারে৷
canResolve({ name })
সমাধানকারী প্রদত্ত নামটি পরিচালনা করতে সক্ষম কিনা তা নির্দেশ করে একটি বুলিয়ান প্রদান করে। একটি সম্পূর্ণ রেজোলিউশন চেষ্টা করার আগে সমর্থন চেক করতে এটি ব্যবহার করুন.
destroy()
সমাধানকারীকে টিয়ার ডাউন করে, ডাটাবেস সংযোগ বন্ধ করে এবং রিলিজ রিসোর্স। যখন সমাধানকারীর আর প্রয়োজন হয় না তখন এটি কল করুন।
ক্যাশিং
অপ্রয়োজনীয় নেটওয়ার্ক লুকআপগুলি কমাতে সমাধান করা নামগুলি স্বয়ংক্রিয়ভাবে ক্যাশে করা হয়৷ রানটাইম পরিবেশের উপর ভিত্তি করে ক্যাশিং ব্যাকএন্ড বেছে নেওয়া হয়:
| পরিবেশ | ব্যাকএন্ড | নোট |
|---|---|---|
| Node.js | SQLite | dataPath এ সংরক্ষিত। সমবর্তী অ্যাক্সেসের জন্য WAL মোড ব্যবহার করে। |
| ব্রাউজার | IndexedDB | নেটিভ ইনডেক্সডডিবি লেনদেন ব্যবহার করে। |
| ফলব্যাক | ইন-মেমরি Map | SQLite বা IndexedDB উপলব্ধ না হলে ব্যবহৃত হয়। |
সমস্ত ক্যাশে এন্ট্রিতে এক ঘণ্টার TTL থাকে এবং মেয়াদ শেষ হওয়ার পরে স্বয়ংক্রিয়ভাবে উচ্ছেদ করা হয়।
pkc-js এর সাথে ইন্টিগ্রেশন
সমাধানকারীকে nameResolvers বিকল্পের মাধ্যমে সরাসরি pkc-js-এ প্লাগ করা যেতে পারে, কী লুকআপের সময় স্বচ্ছ .bso নাম রেজোলিউশন সক্ষম করে:
const pkc = new Pkc({
nameResolvers: [resolver],
// ...other options
});
সঙ্গতি
সমাধানকারীকে সমসাময়িক ব্যবহারের অধীনে নিরাপদ করার জন্য ডিজাইন করা হয়েছে:
- একটি একক ভাগ করা viem ক্লায়েন্ট অপ্রয়োজনীয় সংযোগ এড়িয়ে চলে।
- SQLite WAL (রাইট-আহেড লগিং) মোডে কাজ করে, যা ব্লক না করেই সমসাময়িক পাঠের অনুমতি দেয়।
- ব্রাউজার ক্যাশিং বিচ্ছিন্নতার জন্য নেটিভ ইনডেক্সডডিবি লেনদেনের উপর নির্ভর করে।
প্ল্যাটফর্ম এন্ট্রি পয়েন্ট
প্যাকেজটি Node.js এবং ব্রাউজার বিল্ডের জন্য আলাদা এন্ট্রি পয়েন্ট পাঠায়। যে বান্ডলারগুলি package.json-এ exports ক্ষেত্র সমর্থন করে তারা স্বয়ংক্রিয়ভাবে সঠিকটি নির্বাচন করবে৷