প্রতিটি HeroMiners পুল একই সেট রিড-অনলি HTTP এন্ডপয়েন্টের উত্তর দেয়। কোনো API কী নেই, কোনো অ্যাকাউন্ট নেই এবং কোনো সাইন-আপ নেই: একটি URL-এ রিকোয়েস্ট পাঠান আর JSON ফেরত পান, যেখানে Access-Control-Allow-Origin: * সেট করা আছে যাতে ব্রাউজারের কোনো পৃষ্ঠা সরাসরি এটি কল করতে পারে। এটি দিয়ে একটি রিগ মনিটর, একটি পেমেন্ট নোটিফায়ার, আপনার নিজের ড্যাশবোর্ড তৈরি করুন, অথবা পুলের ডেটা একটি স্প্রেডশিটে আনুন।
আপনার ঠিকানা লিখুন, আর নিচের প্রতিটি উদাহরণ এই পুলে চালানোর জন্য প্রস্তুত হয়ে যাবে। আপনি এখানে যা লেখেন তা পুল ছাড়া আর কোথাও পাঠানো হয় না, এবং তাও কেবল যখন আপনি চালান চাপেন।
বেস URL
https://quantus.herominers.com
এন্ডপয়েন্ট
GET/api/stats
এই মুহূর্তে পুল নিজের সম্পর্কে যা জানে তার সবকিছু: পুল ও নেটওয়ার্ক হ্যাশরেট, সংযুক্ত মাইনার ও ওয়ার্কার, শেষ ব্লক, ফি, পোর্ট এবং পেমেন্ট সেটিংস।
কোয়েরি
address
একটি পেমেন্ট ঠিকানা। সেই মাইনারকে miner-এর অধীনে যোগ করে, এবং তিনি সোলো মাইনিংও করলে solo_miner-এর অধীনেও। এটি বাদ দিলে কোনো কী-ই পাঠানো হয় না।
শুরু করার জন্য এটিই এন্ডপয়েন্ট। পুলের পৃষ্ঠা, মাইনারদের পৃষ্ঠা এবং এই সাইটের প্রতিটি চার্ট এটি থেকেই তৈরি।
রিকোয়েস্ট
curl "https://quantus.herominers.com/api/stats"
উত্তর
একটি অবজেক্ট যাতে আছে pool, network, config, charts, lastblock, payments এবং visitors, অর্থাৎ এই মুহূর্তে সাইটে কতজন আছেন, { windowMinutes, activeVisitors, activeLookups } হিসেবে। প্রতি স্ট্যাটস সাইকেলে একবার নতুন করে হিসাব করা হয়, তাই এর চেয়ে দ্রুত পোল করলে একই সংখ্যা ফেরত আসে।
GET/api/live_stats
/api/stats-এর মতোই একই পেলোড, তবে পরবর্তী স্ট্যাটস সাইকেল শেষ হওয়া পর্যন্ত খোলা রাখা হয় এবং তারপর উত্তর দেওয়া হয়। টাইমারে পোল করার বদলে প্রতি আপডেটে একটি রিকোয়েস্ট।
কোয়েরি
address
/api/stats-এর মতোই পেলোডে একজন মাইনারকে অন্তর্ভুক্ত করুন।
একটি সংযোগ খুলুন এবং উত্তর এলে আবার খুলুন। একই IP থেকে একসঙ্গে একাধিক খোলা থাকলে 503 দিয়ে প্রত্যাখ্যান করা হয়, তাই একসঙ্গে অনেকগুলো খুলবেন না।
/api/stats-এর মতোই গঠন, শুধু miner ও solo_miner সবসময় পাঠানো হয়, কোনো ঠিকানা না দিলে খালি অবস্থায়। রিকোয়েস্ট সর্বোচ্চ একটি স্ট্যাটস সাইকেল পর্যন্ত খোলা থাকে।
GET/api/stats_address
একজন মাইনার: বর্তমান ও গড় হ্যাশরেট, বৈধ ও স্টেল শেয়ার, ব্যালেন্স, পরিশোধিত পরিমাণ, এবং প্রতিটি ওয়ার্কারের একই হিসাব।
এটি চালাতে ওপরে address লিখুন। কমান্ডে এটি দেখানো হয় কারণ এটি ছাড়া পুল একটি এরর দিয়ে উত্তর দেয়।
উত্তর
একটি অবজেক্ট যাতে আছে stats (মাইনারের মোট হিসাব), payments, charts, unlocked এবং workers, যা প্রতিটি ওয়ার্কারের জন্য একটি এন্ট্রিসহ একটি অ্যারে, প্রতিটির নাম তার name। যে ঠিকানা এখানে কখনো মাইন করেনি সেটি খালি মাইনারের বদলে একটি এরর দিয়ে উত্তর পায়।
GET/api/get_blocks
পুলের পাওয়া যেসব ব্লক আর পেন্ডিং নেই: পরিশোধিত, অথবা অরফান। status বলে দেয় কোনটি।
কোয়েরি
heightআবশ্যক
এই উচ্চতার নিচের ব্লক ফেরত দেয়। সবচেয়ে নতুন পৃষ্ঠার জন্য টিপের অনেক ওপরের একটি সংখ্যা দিন, তারপর পেছনের পৃষ্ঠায় যেতে আপনার পাওয়া সবচেয়ে কম উচ্চতাটি দিন।
যিনি খুঁজে পেয়েছেন তার ঠিকানা পুল থেকে বের হওয়ার আগেই মাস্ক করা হয়, তাই এই এন্ডপয়েন্ট দিয়ে ঠিকানা সংগ্রহ করা যায় না। time হলো Unix সেকেন্ডে, reward কয়েনের সবচেয়ে ছোট এককে, এবং একটি সোলো ব্লক পরিশোধিত হলে তার score হয় s0 এবং অরফান হলে s1।
পুলের পাঠানো পেমেন্ট, পুরো পুলের অথবা একটি ঠিকানার।
কোয়েরি
timeআবশ্যক
সেকেন্ডে এই Unix টাইমস্ট্যাম্পের আগের পেমেন্ট ফেরত দেয়। সবচেয়ে নতুন পৃষ্ঠার জন্য বর্তমান সময় দিন, তারপর পেছনের পৃষ্ঠায় যেতে আপনার পাওয়া সবচেয়ে পুরোনো টাইমস্ট্যাম্পটি দিন।
address
একটি পেমেন্ট ঠিকানায় সীমাবদ্ধ রাখে। পুলের করা প্রতিটি পেমেন্টের জন্য এটি বাদ দিন।
limit
কতগুলো ফেরত দেবে। পুলের নিজস্ব পৃষ্ঠার আকারে সীমিত, তাই বড় সংখ্যা দিলে কেবল ততগুলোই ফেরত আসে।
format
কাঁচা অ্যারের বদলে { tx, amount, time } অবজেক্ট পেতে parsed দিন।
conversions
address-এর সঙ্গে 1 দিলে পৃষ্ঠার যেসব পেমেন্ট অন্য কয়েনে কনভার্ট করা হয়েছে সেগুলোর প্রতিটির কনভার্শন রেকর্ডও পাবেন। তখন উত্তরটি হয় { payments, conversions }। format=parsed-এর সঙ্গে উপেক্ষা করা হয়।
format ছাড়া, একটি ফ্ল্যাট অ্যারে যেখানে ভ্যালু ও টাইমস্ট্যাম্প পালাক্রমে আসে, প্রতিটি ভ্যালু txid:amount। পরিমাণগুলো কয়েনের সবচেয়ে ছোট এককে স্ট্রিং এবং স্ট্রিং হিসেবেই রাখতে হবে: 18 দশমিকের চেইনে একটিকে সংখ্যা হিসেবে পার্স করলে নির্ভুলতা হারায়।
GET/api/get_miners_stats
পুলের সবচেয়ে বড় দশজন মাইনার, সঙ্গে মাইনারদের পৃষ্ঠার পেছনের মাইনিং সফটওয়্যার ও অঞ্চলভিত্তিক বিভাজন।
একটি অবজেক্ট যাতে আছে miners, agents, regions, regionHistory এবং statsDisplay। ঠিকানাগুলো মাস্ক করা। কোনো প্যানেল চালু না থাকলে তার অ্যারে খালি আসে এবং statsDisplay তা জানিয়ে দেয়।
GET/api/get_blocks_search
উচ্চতা, ব্লক হ্যাশ বা যিনি খুঁজে পেয়েছেন তার ঠিকানা দিয়ে পুলের ব্লক খুঁজুন, পেন্ডিং ও পরিশোধিত দুই ধরনের ব্লকে একসঙ্গে।
কোয়েরি
qআবশ্যক
একটি উচ্চতা, একটি ব্লক হ্যাশ বা একটি ঠিকানা।
offset
এতগুলো ফলাফল বাদ দেয়। উত্তরে hasMore থাকে, যাতে আপনি জানেন আবার চাইতে হবে কিনা।
সার্চ প্রতি IP-তে রেট লিমিটেড, এবং সীমা পেরোলে শুধু একটি এরর নয়, বরং retryMs-এ সঠিক অপেক্ষার সময়সহ rateLimited ফেরত আসে। দৈর্ঘ্যের সীমা এবং সার্চ আদৌ চালু আছে কিনা জানতে আগে /api/get_blocks_search_config কল করুন।
এটি চালাতে ওপরে q লিখুন। কমান্ডে এটি দেখানো হয় কারণ এটি ছাড়া পুল একটি এরর দিয়ে উত্তর দেয়।
উত্তর
একটি অবজেক্ট যাতে আছে pending ও matured, দুটিই /api/get_blocks-এর মতো ভ্যালু ও উচ্চতা পালাক্রমে, সঙ্গে totalMatched, offset, limit এবং hasMore। একটি matured ব্লক /api/get_blocks ফরম্যাটে থাকে; একটি pending ব্লক এখনো ম্যাচিউর হওয়ার অপেক্ষায় এবং লম্বা পেন্ডিং ফরম্যাট ব্যবহার করে, তাই তার ফিল্ডগুলো ভিন্ন ক্রমে থাকে।
GET/api/get_blocks_search_config
ব্লক সার্চ চালু আছে কিনা, এবং একটি কোয়েরিকে কোন সীমার মধ্যে থাকতে হবে, যাতে প্রথম সার্চের আগেই একটি সার্চ বক্স সেট আপ করা যায়।
{ enabled, minQueryLength, maxQueryLength, frontendCooldownMs }। দৈর্ঘ্যগুলো অক্ষরে, এবং frontendCooldownMs হলো দুটি সার্চের মধ্যে কতক্ষণ অপেক্ষা করতে হবে।
GET/api/get_miner_payout_level
একটি ঠিকানার জন্য বর্তমানে সেট করা পেমেন্ট সীমা, পূর্ণ কয়েনে।
কোয়েরি
addressআবশ্যক
পেমেন্ট ঠিকানা।
এর সঙ্গী /api/set_miner_payout_level এটি লেখে, এবং তা সবার জন্য খোলা নয়: রিকোয়েস্টটি ঠিকানাটির নিজস্ব মাইনিং IP থেকে আসতে হবে। সেই যাচাই এবং তার সামনের রেট লিমিট এখানে নয়, ড্যাশবোর্ডের "সেটিংস" ট্যাবে বর্ণনা করা আছে।
এটি চালাতে ওপরে address লিখুন। কমান্ডে এটি দেখানো হয় কারণ এটি ছাড়া পুল একটি এরর দিয়ে উত্তর দেয়।
উত্তর
{ banned, minerMessage }, এবং ব্যান হলে সঙ্গে blockMining, blockPayments ও reason। এটি সেই নোটিশ যা মাইনার পেজ এই ঠিকানার জন্য দেখায়: মাইনিং থেকে ব্লক করা, পেমেন্ট পাওয়া থেকে ব্লক করা, অথবা কোনোটিই নয়। minerMessage হলো এই ঠিকানার জন্য অপারেটরের বার্তা, { message, type, createdAt, expiresAt } হিসেবে, অথবা কোনো বার্তা না থাকলে null।
ভালোভাবে ব্যবহার
পুলের নিজস্ব ঘড়ি অনুযায়ী পোল করুন। সংখ্যাগুলো প্রতি স্ট্যাটস সাইকেলে একবার নতুন করে হিসাব করা হয়, এবং /api/stats-এর উত্তরে config.updateInterval বলে দেয় তা কত সেকেন্ড। এর চেয়ে বেশি বার চাইলে একই উত্তর আসে এবং আমাদের দুপক্ষেরই ব্যান্ডউইথ খরচ হয়।
দ্রুত টাইমারের বদলে /api/live_stats ব্যবহার করুন। নতুন কিছু এলেই এটি সঙ্গে সঙ্গে উত্তর দেয়, যা পোল করার চেয়ে আপনার জন্য দ্রুত এবং পুলের জন্যও হালকা।
পরিমাণগুলো স্ট্রিং হিসেবে রাখুন। রিওয়ার্ড ও ব্যালেন্স কয়েনের সবচেয়ে ছোট এককে ফেরত আসে। 18 দশমিকের চেইনে এই পূর্ণসংখ্যাগুলো একটি JavaScript সংখ্যা যতটা নির্ভুলভাবে ধরতে পারে তার চেয়ে বড় হয়, তাই একটিকে পার্স করলে নীরবে একটি পেমেন্ট রাউন্ড হয়ে যায়।
ঠিকানা মাস্ক করা থাকবে বলে ধরে নিন। পাবলিক তালিকায় প্রতিটি ঠিকানার মাঝের অংশ লুকানো থাকে। আপনার নিজের পুরো ঠিকানা কেবল আপনারই প্রয়োজন, এবং কেবল যেখানে আপনি নিজে তা দেন।
রেট লিমিটকে ব্যর্থতা নয়, অপেক্ষা হিসেবে নিন। যেখানে সীমা প্রযোজ্য সেখানে উত্তরে retryMs থাকে। ততক্ষণ অপেক্ষা করে আবার চেষ্টা করুন, বারবার রিকোয়েস্ট পাঠাবেন না।
আপনি কে তা জানান। আপনার টুলের নামসহ একটি User-Agent বাধ্যতামূলক নয়, তবে এতে কিছু বদলালে কী ভেঙেছে তা অনুমান না করে আমরা আপনাকে জানাতে পারি।