একটি ওয়ালেট অ্যাড্রেস কোনো পেমেন্ট সিস্টেম নয়। এটি কেবল একটি গন্তব্য মাত্র, এর বেশি কিছু নয়। যার কাছে এই স্ট্রিংটি আছে, সে যেকোনো সময় এতে যেকোনো কিছু পাঠাতে পারে। দুজন মানুষের মধ্যে একটি লেনদেন যারা একে অপরকে বিশ্বাস করে, তাদের জন্য এটি যথেষ্ট হতে পারে। কিন্তু আপনি যদি একটি SaaS প্রোডাক্ট, একটি মার্কেটপ্লেস বা একটি অনলাইন স্টোর পরিচালনা করেন, তবে চেকআউট পেজে একটি স্ট্যাটিক অ্যাড্রেস বসিয়ে রাখা হলো অপারেশনাল বিশৃঙ্খলার একটি রেসিপি। আপনাকে রহস্যময় লেনদেনগুলো প্রকৃত গ্রাহকদের সাথে মেলানোর জন্য, কে কী পেমেন্ট করেছে তা অনুমান করার জন্য এবং কেউ ভুল নেটওয়ার্কে ভুল টোকেন পাঠালে সেই বিশৃঙ্খলা পরিষ্কার করার জন্য দিন পার করতে হবে।

স্কেলেবল কিছু তৈরি করতে হলে, আপনাকে একটি ডোনেশন জারের মতো চিন্তা করা বন্ধ করতে হবে এবং একটি সুসংগঠিত পেমেন্ট সিস্টেমের মতো চিন্তা করতে হবে।

কেন একটি ওয়ালেট অ্যাড্রেস স্কেলেবিলিটির ক্ষেত্রে ব্যর্থ হয়

সমস্যাটি হলো প্রেক্ষাপট বা কনটেক্সট, অথবা এর অভাব। যখন একজন গ্রাহক আপনার ওয়ালেট অ্যাড্রেস কপি করেন এবং কোনো এক্সচেঞ্জ বা সেলফ-কাস্টডি ওয়ালেট থেকে ক্রিপ্টো পাঠান, তখন ব্লকচেইন কেবল যা ঘটেছে তা রেকর্ড করে: একটি পরিমাণ, একটি টাইমস্ট্যাম্প এবং দুটি পাবলিক অ্যাড্রেস। এটি আপনার ইনভয়েস নম্বর রেকর্ড করে না। এটি কাস্টমার আইডি অন্তর্ভুক্ত করে না। এটি বলে না যে এই ট্রান্সফারটি একটি সাবস্ক্রিপশন রিনিউয়াল, একটি প্রোরেটেড আপগ্রেড, নাকি সম্পূর্ণ নতুন কোনো কেনাকাটা।

ধরুন একটি SaaS কোম্পানি প্রতি মাসে পাঁচশ গ্রাহককে স্ট্যাবলকয়েনে বিলিং করছে। যদি প্রতিটি গ্রাহক একই স্ট্যাটিক অ্যাড্রেসে USDT পাঠায়, তবে আপনার অ্যাকাউন্টিং টিমের জন্য এটি একটি স্প্রেডশীট দুঃস্বপ্ন হয়ে দাঁড়াবে। একটি ট্রান্সফার দেখতে অন্যটির মতোই মনে হবে। রাত ২টায় আসা বিশ ডলারটি কাস্টমার A-এর প্ল্যান রিনিউয়াল ছিল নাকি কাস্টমার B-এর মিড-সাইকেল আপগ্রেড ছিল, তা আপনি বলতে পারবেন না। ব্লকচেইন কেবল একটি সংখ্যা দেখে। কিন্তু আপনার ব্যবসার একটি গল্প বা প্রেক্ষাপট প্রয়োজন।

মার্কেটপ্লেসগুলো লেনদেনের উভয় পাশেই এই সমস্যার সম্মুখীন হয়। আপনাকে জানতে হবে যে ক্রেতা ফান্ড জমা দিয়েছেন কি না, বিক্রেতা পণ্য শিপমেন্ট করা পর্যন্ত তা হোল্ড করে রাখতে হবে এবং ডেলিভারি নিশ্চিত হওয়ার পরেই তা রিলিজ করতে হবে। একটি র (raw) অ্যাড্রেস আপনাকে ক্রেতার ডিপোজিটকে কোনো এলোমেলো ইনবাউন্ড ট্রান্সফার বা ভেন্ডরের নিজস্ব ফান্ড থেকে আলাদা করার কোনো প্রোগ্রাম্যাটিক উপায় দেয় না। ই-কমার্সও একইভাবে অগোছালো। একটি নির্দিষ্ট অর্ডারের সাথে লেনদেনটি লিঙ্ক না করলে, আপনি ফুলফিলমেন্ট ট্রিগার করতে পারবেন না। কাউকে ম্যানুয়ালি চেইন স্ক্যান করতে হবে, ট্রান্সফারটি খুঁজে বের করতে হবে এবং আপনার ডাটাবেস আপডেট করতে হবে। দিনে দশবার এটি করলে আপনি ম্যাচগুলো মিস করবেন। হাজার বার করলে আপনি টাকা হারাবেন।

এই পরিবর্তনটি সহজ কিন্তু অত্যন্ত গুরুত্বপূর্ণ। ফান্ড কোনো অ্যাড্রেসে পৌঁছেছে কি না তা জিজ্ঞাসা করা বন্ধ করুন। বরং একটি নির্দিষ্ট পেমেন্ট রিকোয়েস্ট সঠিক অবস্থায় (state) পৌঁছেছে কি না তা জিজ্ঞাসা করা শুরু করুন।

পেমেন্ট রিকোয়েস্টের ওপর ভিত্তি করে সিস্টেম তৈরি করুন

একটি নির্ভরযোগ্য ক্রিপ্টো পেমেন্ট ফ্লো পেমেন্ট রিকোয়েস্টকে কেন্দ্রীয় অবজেক্ট হিসেবে বিবেচনা করে। ওয়ালেট অ্যাড্রেস তখন একটি সাময়িক কন্টেইনার হিসেবে কাজ করে যা রিকোয়েস্টের সেবায় বিদ্যমান থাকে। রিকোয়েস্টটি সেই মেটাডেটা বহন করে যা একটি ব্লকচেইন ট্রান্সফারকে একটি শনাক্তযোগ্য ব্যবসায়িক ইভেন্টে পরিণত করে।

একটি চেকআউট অপশন দেখানোর আগে, পেমেন্টটিকে শনাক্তযোগ্য করার জন্য প্রয়োজনীয় ডেটা পয়েন্টগুলো সংজ্ঞায়িত করুন:

  • একটি পারচেজ বা সাবস্ক্রিপশন আইডি, যাতে আপনি ঠিক কেন টাকা পাঠানো হচ্ছে তা জানতে পারেন।
  • প্রত্যাশিত পরিমাণ, যা দশমিকের পর পর্যন্ত নির্দিষ্ট করা থাকবে।
  • সঠিক অ্যাসেট এবং নেটওয়ার্ক টাইপ, কারণ Ethereum-এ USDT পাঠানো Tron বা Polygon-এ পাঠানোর মতো এক নয়।
  • কাস্টমার বা ইন্টারনাল অ্যাকাউন্টের একটি রেফারেন্স।
  • একটি এক্সপায়ারেশন টাইম, যাতে মার্চের অর্ধেক পেমেন্ট করা কোনো কোটেশন ভুলে জুন মাসে কোনো অর্ডার বন্ধ না করে দেয়।

যখন একজন গ্রাহক 'Pay' বাটনে ক্লিক করেন, আপনার সিস্টেম এই ফিল্ডগুলো সম্বলিত একটি রিকোয়েস্ট তৈরি করে। গ্রাহক তখন কেবল একটি অ্যাড্রেসে নয়, বরং সেই নির্দিষ্ট রিকোয়েস্টের বিপরীতে পেমেন্ট করেন। চেইনের লেনদেনটির এখন একটি অফ-চেইন পরিচয় থাকে। ব্লক এক্সপ্লোরার কুয়েরি করার আগেই আপনার সিস্টেম জানে পেমেন্টটি কিসের জন্য।

স্ট্যাটাস বা অবস্থাকে সততার সাথে মডেল করুন

ব্লকচেইনে টাকা বিভিন্ন ধাপে বা স্টেজে মুভ করে। আপনার অভ্যন্তরীণ সিস্টেমের এমন একটি শব্দভাণ্ডার বা ভোকাবুলারি প্রয়োজন যা সেই ধাপগুলোর সাথে মিলে যায়, অন্যথায় আপনার ইঞ্জিনিয়ারিং, সাপোর্ট এবং অপারেশন টিম একে অপরের কথা বুঝতে পারবে না।

মডেলটিকে সহজ এবং বর্ণনামূলক রাখুন। একজন নন-টেকনিক্যাল সাপোর্ট এজেন্ট যেন স্ট্যাটাস দেখে বুঝতে পারেন গ্রাহককে কী বলতে হবে।

  • Created: রিকোয়েস্টটি বিদ্যমান, কিন্তু ব্লকচেইনে এখনও কিছু দেখা যাচ্ছে না। গ্রাহক এখনও কোনো ট্রানজ্যাকশন ব্রডকাস্ট করেননি।
  • Detected: আপনার মনিটরিং মেমপুল (mempool) বা সাম্প্রতিক কোনো ব্লকে একটি প্রাসঙ্গিক ট্রানজ্যাকশন শনাক্ত করেছে, কিন্তু এটি এখনও ফাইনালিটি (finality) পায়নি। পণ্য শিপমেন্ট করবেন না।
  • Confirming: ট্রানজ্যাকশনটি চেইনে রয়েছে এবং কনফার্মেশন জমা হচ্ছে। চেইনগুলো ভিন্ন ভিন্ন গতিতে কাজ করে। বিটকয়েনের ক্ষেত্রে ছয়টি ব্লক প্রয়োজন হতে পারে। আপনার ঝুঁকির ক্ষমতার ওপর ভিত্তি করে ইথেরিয়ামের ক্ষেত্রে বারোটি বা তার বেশি ব্লকের প্রয়োজন হতে পারে। আপনার সিস্টেমের উচিত নেটওয়ার্কের নিজস্ব আচরণকে মেনে চলা।
  • Completed: পেমেন্টটি প্রত্যাশিত পরিমাণ, অ্যাসেট, নেটওয়ার্ক এবং প্রেক্ষাপটের সাথে মিলে গেছে। আপনার নির্ধারিত প্রতিটি নিয়ম পূরণ হয়েছে। এখন আপনি অর্ডারটি সম্পন্ন করতে পারেন, সাবস্ক্রিপশন চালু করতে পারেন অথবা এসক্রো (escrow) রিলিজ করতে পারেন।
  • Expired: গ্রাহক পেমেন্টের সময়সীমা মিস করেছেন। আপনি যদি স্পষ্টভাবে এটি পুনরায় সক্রিয় না করেন, তবে রিকোয়েস্টটি ভবিষ্যতে কোনো পেমেন্ট গ্রহণ করা উচিত নয়।
  • Mismatch: গ্রাহক ফান্ড পাঠিয়েছেন, কিন্তু কিছু একটা ভুল হচ্ছে। পরিমাণ কম, নেটওয়ার্ক ভিন্ন, অথবা অ্যাসেট মিলছে না। এটি সাপোর্ট টিমের কাছে পাঠান। আপনার ফুলফিলমেন্ট সিস্টেমকে আন্দাজ করতে দেবেন না।

এই পাইপলাইনটি চেইন ডেটার একটি বিশৃঙ্খল প্রবাহকে এমন একটি প্রক্রিয়ায় রূপান্তরিত করে যা আপনার পুরো কোম্পানি সহজেই বুঝতে পারে।

পোলিং বন্ধ করুন। লিসেনিং শুরু করুন।

ইনফ্রাস্ট্রাকচার বাজেট দ্রুত শেষ করার অন্যতম উপায় হলো আপনার ব্যাকএন্ড থেকে প্রতি কয়েক সেকেন্ড অন্তর প্রোভাইডারকে জিজ্ঞাসা করা যে টাকা পৌঁছেছে কি না। এটি উভয় পক্ষেই রিসোর্স অপচয় করে এবং অপ্রয়োজনীয় ল্যাটেন্সি (latency) তৈরি করে।

একটি উন্নত আর্কিটেকচার স্ট্যাটাস-নোটিফিকেশন মডেল ব্যবহার করে। স্ট্যাটাস পরিবর্তন হওয়ার সাথে সাথে আপনার পেমেন্ট প্রোভাইডার বা নোড ইনফ্রাস্ট্রাকচারের উচিত আপনার সিস্টেমে একটি ইভেন্ট পুশ করা। ট্রানজ্যাকশন শনাক্ত হলে আপনি একটি ওয়েবহুক (webhook) পাবেন, কনফার্মিং অবস্থায় আরেকটি, এবং সম্পন্ন বা ব্যর্থ হলে একটি চূড়ান্ত ওয়েবহুক পাবেন।

এটি অপ্রয়োজনীয় CPU সাইকেল খরচ না করেই আপনার সিস্টেমকে রেসপন্সিভ রাখে।