হ্যালমোসের সাথে প্রতীকী পরীক্ষা: আনুষ্ঠানিক যাচাইয়ের জন্য বিদ্যমান পরীক্ষাগুলিকে কাজে লাগানো

হ্যালমোসের সাথে প্রতীকী পরীক্ষা: আনুষ্ঠানিক যাচাইয়ের জন্য বিদ্যমান পরীক্ষাগুলিকে কাজে লাগানো

ফেব্রুয়ারী 2, 2023 ডেজুন পার্ক

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

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

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

এই পোস্টে, আমরা আনুষ্ঠানিক যাচাইকরণের চ্যালেঞ্জগুলি এবং প্রতীকী পরীক্ষার মাধ্যমে ইউনিট পরীক্ষা এবং আনুষ্ঠানিক যাচাইয়ের মধ্যে ব্যবধান পূরণ করার সম্ভাবনাগুলি কভার করি৷ তারপরে আমরা বিদ্যমান স্মার্ট কন্ট্রাক্ট কোড ব্যবহার করে হালমোসের একটি ডেমোর মাধ্যমে হেঁটে যাই এবং ডেভেলপারদের কাছে উপলব্ধ অন্যান্য আনুষ্ঠানিক যাচাইকরণ সরঞ্জামগুলি (অনেকগুলি ওপেন সোর্স) দ্রুত দেখে নিই৷

আনুষ্ঠানিক যাচাই বনাম পরীক্ষা

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

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

স্পেসিফিকেশন ওভারহেড

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

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

সিম্বলিক টেস্টিং এবং হ্যালমোসের মাধ্যমে পরীক্ষা এবং আনুষ্ঠানিক যাচাইয়ের মধ্যে ব্যবধান পূরণ করা

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

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

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

উদাহরণ: পরীক্ষা করা isPowerOfTwo() ক্রিয়া

একটি উদাহরণ হিসাবে, নিম্নলিখিত বিবেচনা করুন isPowerOfTwo() ফাংশন, যা নির্ধারণ করে যে একটি প্রদত্ত সংখ্যা দুটির শক্তি কিনা। এই ফাংশন a ব্যবহার করে বিট ম্যানিপুলেশন অ্যালগরিদম দক্ষতার জন্য, তবে এটির সঠিকতা প্রমাণ করা চ্যালেঞ্জিং হতে পারে, বিশেষ করে যেখানে ইনপুট দুটির শক্তি নয়।

হ্যালমোসের সাথে প্রতীকী পরীক্ষা: আনুষ্ঠানিক যাচাইকরণের জন্য বিদ্যমান পরীক্ষাগুলিকে কাজে লাগানো PlatoBlockchain ডেটা ইন্টেলিজেন্স। উল্লম্ব অনুসন্ধান. আ.

হ্যালমোসের সাথে প্রতীকী পরীক্ষা: আনুষ্ঠানিক যাচাইকরণের জন্য বিদ্যমান পরীক্ষাগুলিকে কাজে লাগানো PlatoBlockchain ডেটা ইন্টেলিজেন্স। উল্লম্ব অনুসন্ধান. আ.

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

হ্যালমোসের সাথে প্রতীকী পরীক্ষা: আনুষ্ঠানিক যাচাইকরণের জন্য বিদ্যমান পরীক্ষাগুলিকে কাজে লাগানো PlatoBlockchain ডেটা ইন্টেলিজেন্স। উল্লম্ব অনুসন্ধান. আ.

হ্যালমোসের সাথে প্রতীকী পরীক্ষা: আনুষ্ঠানিক যাচাইকরণের জন্য বিদ্যমান পরীক্ষাগুলিকে কাজে লাগানো PlatoBlockchain ডেটা ইন্টেলিজেন্স। উল্লম্ব অনুসন্ধান. আ.

আপনি পরীক্ষা করতে এই পরীক্ষা ব্যবহার করতে পারেন isPowerOfTwo() ইউনিট টেস্টিং বা ফাজ টেস্টিংয়ের মাধ্যমে ফাংশন, ইনপুটগুলির একটি নির্বাচনের সাথে এটি চালানো। এই জাতীয় পরীক্ষাগুলি আনুষ্ঠানিকভাবে ফাংশনের সঠিকতা প্রমাণ করতে পারে না, কারণ প্রতিটি সম্ভাব্য ইনপুটের জন্য পরীক্ষা চালানো গণনাগতভাবে অসম্ভব।

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

সীমাবদ্ধতা: আবদ্ধ প্রতীকী মৃত্যুদন্ড

এটি সাধারণত সম্পূর্ণ স্বয়ংক্রিয়, সম্পূর্ণ প্রতীকী পরীক্ষা সম্পাদন করা সম্ভব নয়, কারণ এটি সমাধানের প্রয়োজন হবে থামার সমস্যা, যা হতে জানা যায় সিদ্ধান্তহীন. এর একটি কারণ হল যে একটি লুপ কতবার প্রতীকীভাবে পুনরাবৃত্তি করা উচিত তা স্বয়ংক্রিয়ভাবে নির্ধারণ করা প্রায়শই অসম্ভব। ফলস্বরূপ, সম্পূর্ণ স্বয়ংক্রিয় আনুষ্ঠানিক যাচাইকরণ সাধারণত অনিশ্চিত।

এই মৌলিক সীমাবদ্ধতাগুলির প্রেক্ষিতে, হালমোস সম্পূর্ণতার চেয়ে অটোমেশনকে অগ্রাধিকার দেয়। এই লক্ষ্যে, হ্যালমোসকে আনবাউন্ডেড লুপ (যেখানে পুনরাবৃত্তির সংখ্যা প্রোগ্রাম ইনপুটগুলির উপর নির্ভর করে) বা পরিবর্তনশীল-দৈর্ঘ্যের অ্যারে (স্ট্রিং সহ) জন্য আবদ্ধ প্রতীকী যুক্তি সঞ্চালনের জন্য ডিজাইন করা হয়েছে। এটি কিছুটা সম্পূর্ণতাকে উৎসর্গ করে, কিন্তু হ্যালমোসকে ব্যবহারকারীকে লুপ ইনভেরিয়েন্টের মতো অতিরিক্ত টীকা প্রদানের প্রয়োজন এড়াতে দেয়।

উদাহরণস্বরূপ, নিম্নলিখিত পুনরাবৃত্তিমূলক সংস্করণ বিবেচনা করুন isPowerOfTwo() ফাংশন, যা একটি আনবাউন্ডেড যখন লুপ বৈশিষ্ট্যযুক্ত, যেখানে লুপ পুনরাবৃত্তির সংখ্যা ইনপুট সংখ্যা উপস্থাপনের জন্য প্রয়োজনীয় বিটগুলির ন্যূনতম সংখ্যা দ্বারা নির্ধারিত হয়।

হ্যালমোসের সাথে প্রতীকী পরীক্ষা: আনুষ্ঠানিক যাচাইকরণের জন্য বিদ্যমান পরীক্ষাগুলিকে কাজে লাগানো PlatoBlockchain ডেটা ইন্টেলিজেন্স। উল্লম্ব অনুসন্ধান. আ.

হ্যালমোসের সাথে প্রতীকী পরীক্ষা: আনুষ্ঠানিক যাচাইকরণের জন্য বিদ্যমান পরীক্ষাগুলিকে কাজে লাগানো PlatoBlockchain ডেটা ইন্টেলিজেন্স। উল্লম্ব অনুসন্ধান. আ.

হ্যালমোস প্রতীকীভাবে এই সীমাহীন লুপটিকে শুধুমাত্র একটি নির্দিষ্ট সীমা পর্যন্ত পুনরাবৃত্তি করে। উদাহরণস্বরূপ, যদি বাউন্ডটি 3 তে সেট করা হয়, হ্যালমোস লুপটিকে সর্বাধিক 3 বার পুনরাবৃত্তি করবে এবং ইনপুট মানগুলি বিবেচনা করবে না যা লুপটিকে 3 বারের বেশি পুনরাবৃত্তি করবে (অর্থাৎ, 2^3 এর চেয়ে বড় বা সমান যে কোনও মান ) এই বিশেষ ক্ষেত্রে, 256 বা উচ্চতর সীমা নির্ধারণ করা হলমোস সম্পূর্ণ হতে অনুমতি দেবে।

ডেমো: হ্যালমোসের সাথে ERC721A এর আনুষ্ঠানিক যাচাইকরণ

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

প্রতীকী পরীক্ষার বৈশিষ্ট্য

যেহেতু ERC721A-এর জন্য বিদ্যমান পরীক্ষাগুলি জাভাস্ক্রিপ্টে Hardhat দিয়ে লেখা হয়েছিল (যা বর্তমানে Halmos দ্বারা সমর্থিত নয়), আমরা মূল এন্ট্রি পয়েন্ট ফাংশনের জন্য সলিডিটিতে নতুন পরীক্ষা লিখেছি: mint(), burn(), এবং transfer(). এই পরীক্ষাগুলি পরীক্ষা করেছে যে প্রতিটি ফাংশন সঠিকভাবে টোকেনের মালিকানা এবং ভারসাম্য আপডেট করে, এবং অন্যান্য ব্যবহারকারীদের ব্যালেন্স বা মালিকানা পরিবর্তন না করে শুধুমাত্র প্রাসঙ্গিক ব্যবহারকারীদের প্রভাবিত করে। ERC721A-এ অলস ডেটা স্ট্রাকচার অ্যালগরিদম ব্যবহারের কারণে প্রমাণ করা শেষেরটি অ-তুচ্ছ। উদাহরণস্বরূপ, নিম্নলিখিত পরীক্ষা চেক করে যে transfer() ফাংশন সঠিকভাবে নির্দিষ্ট টোকেনের মালিকানা আপডেট করে:

হ্যালমোসের সাথে প্রতীকী পরীক্ষা: আনুষ্ঠানিক যাচাইকরণের জন্য বিদ্যমান পরীক্ষাগুলিকে কাজে লাগানো PlatoBlockchain ডেটা ইন্টেলিজেন্স। উল্লম্ব অনুসন্ধান. আ.

হ্যালমোসের সাথে প্রতীকী পরীক্ষা: আনুষ্ঠানিক যাচাইকরণের জন্য বিদ্যমান পরীক্ষাগুলিকে কাজে লাগানো PlatoBlockchain ডেটা ইন্টেলিজেন্স। উল্লম্ব অনুসন্ধান. আ.

আরেকটি পরীক্ষা চেক করে যে transfer() ফাংশন অন্যান্য ঠিকানাগুলির জন্য ভারসাম্য পরিবর্তন করে না, যা আগে উল্লেখ করা হিসাবে প্রমাণ করা চ্যালেঞ্জিং:

হ্যালমোসের সাথে প্রতীকী পরীক্ষা: আনুষ্ঠানিক যাচাইকরণের জন্য বিদ্যমান পরীক্ষাগুলিকে কাজে লাগানো PlatoBlockchain ডেটা ইন্টেলিজেন্স। উল্লম্ব অনুসন্ধান. আ.

হ্যালমোসের সাথে প্রতীকী পরীক্ষা: আনুষ্ঠানিক যাচাইকরণের জন্য বিদ্যমান পরীক্ষাগুলিকে কাজে লাগানো PlatoBlockchain ডেটা ইন্টেলিজেন্স। উল্লম্ব অনুসন্ধান. আ.

যাচাইকরণের ফলাফল

আমরা ERC721A স্মার্ট চুক্তিতে Halmos ব্যবহার করে একটি যাচাইকরণ পরীক্ষা পরিচালনা করেছি মোট 19 পরীক্ষা. 3 এর লুপ আনরোলিং বাউন্ড সহ হালমোসের মাধ্যমে পরীক্ষাগুলি চালানো হয়েছিল, যা সম্পূর্ণ হতে 16 মিনিট সময় নেয়। যাচাইকরণের সময়ের ভাঙ্গন নীচের টেবিলে দেখা যাবে। পরীক্ষাটি একটি M1 প্রো চিপ এবং 16 জিবি মেমরি সহ একটি ম্যাকবুক প্রোতে পরিচালিত হয়েছিল।

পরীক্ষা সময় (গুলি)
testBurnBalanceUpdate 6.67
testBurnNextTokenIdUnchanged 1.40
testBurnOtherBalancePreservation 5.69
testBurnঅন্যান্য মালিকানা সংরক্ষণ 189.70
testBurnOwnership Update 3.81
testBurn প্রয়োজনীয়তা 71.95
testMintBalanceUpdate 0.20
testMintNextTokenIdUpdate 0.18
testMintOtherBalance Preservation 0.26
testMintOtherOwnership Preservation 5.74
testMintOwnership Update 1.38
testMint প্রয়োজনীয়তা 0.09
টেস্ট ট্রান্সফার ব্যালেন্স অপরিবর্তিত 9.03
টেস্ট ট্রান্সফার ব্যালেন্স আপডেট 53.53
testTransferNextTokenId অপরিবর্তিত 4.47
পরীক্ষা ট্রান্সফারঅন্যান্য ভারসাম্য সংরক্ষণ 19.57
testTransferOther Ownership Preservation 430.61
testTransferOwnership Update 18.71
টেস্ট ট্রান্সফারের প্রয়োজনীয়তা 149.18

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

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

ইনজেকশন বাগ সঙ্গে পরীক্ষা

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

সম্পর্কিত কাজ

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

যদিও হ্যালমোস স্মার্ট চুক্তি যাচাইয়ের জন্য উপলব্ধ টুলসেটের একটি মূল্যবান সংযোজন, এটি বিদ্যমান সরঞ্জামগুলির পরিপূরক (প্রতিস্থাপন নয়) বোঝানো হয়৷ বিকাশকারীরা তাদের চুক্তিতে উচ্চ স্তরের নিশ্চয়তা অর্জনের জন্য অন্যান্য সরঞ্জামগুলির সাথে হালমোসকে একত্রিত করতে পারে। নীচে, আমরা ইভিএম বাইটকোড সমর্থন করে এমন কয়েকটি নির্বাচিত আনুষ্ঠানিক সরঞ্জামের সাথে হালমোসের তুলনা করি।

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

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

    এটা লক্ষণীয় যে, তাদের মিল থাকা সত্ত্বেও, HEVM এবং Halmos স্বাধীনভাবে তৈরি করা হয়েছে এবং তাদের বাস্তবায়নের বিবরণে ভিন্নতা রয়েছে; বিশেষ করে অপ্টিমাইজেশান এবং প্রতীকী যুক্তি কৌশলের ক্ষেত্রে। উপরন্তু, HEVM হাসকেলে লেখা হয়, যখন হ্যালমোস পাইথনে লেখা হয়, যা সমৃদ্ধ পাইথন ইকোসিস্টেমের এক্সপোজার প্রদান করে। উভয় সরঞ্জাম ব্যবহার করার ক্ষমতা থাকা ব্যবহারকারীদের স্মার্ট চুক্তির নিরাপত্তা এবং সঠিকতা নিশ্চিত করতে আরও নমনীয়তা এবং বিকল্প দেয়।

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

**

এখানে যে মতামত প্রকাশ করা হয়েছে তা হল স্বতন্ত্র AH Capital Management, LLC (“a16z”) কর্মীদের উদ্ধৃত এবং a16z বা এর সহযোগীদের মতামত নয়। এখানে থাকা কিছু তথ্য তৃতীয় পক্ষের উত্স থেকে প্রাপ্ত হয়েছে, যার মধ্যে a16z দ্বারা পরিচালিত তহবিলের পোর্টফোলিও কোম্পানিগুলি থেকে। নির্ভরযোগ্য বলে বিশ্বাস করা উৎস থেকে নেওয়া হলেও, a16z এই ধরনের তথ্য স্বাধীনভাবে যাচাই করেনি এবং তথ্যের বর্তমান বা স্থায়ী নির্ভুলতা বা প্রদত্ত পরিস্থিতির জন্য এর উপযুক্ততা সম্পর্কে কোনো উপস্থাপনা করেনি। উপরন্তু, এই বিষয়বস্তু তৃতীয় পক্ষের বিজ্ঞাপন অন্তর্ভুক্ত করতে পারে; a16z এই ধরনের বিজ্ঞাপন পর্যালোচনা করেনি এবং এতে থাকা কোনো বিজ্ঞাপন সামগ্রীকে সমর্থন করে না।

এই বিষয়বস্তু শুধুমাত্র তথ্যগত উদ্দেশ্যে প্রদান করা হয়, এবং আইনি, ব্যবসা, বিনিয়োগ, বা ট্যাক্স পরামর্শ হিসাবে নির্ভর করা উচিত নয়। এই বিষয়গুলি সম্পর্কে আপনার নিজের উপদেষ্টাদের সাথে পরামর্শ করা উচিত। যেকোন সিকিউরিটিজ বা ডিজিটাল সম্পদের রেফারেন্স শুধুমাত্র দৃষ্টান্তমূলক উদ্দেশ্যে, এবং বিনিয়োগের পরামর্শ বা বিনিয়োগ উপদেষ্টা পরিষেবা প্রদানের প্রস্তাব গঠন করে না। তদ্ব্যতীত, এই বিষয়বস্তু কোন বিনিয়োগকারী বা সম্ভাব্য বিনিয়োগকারীদের দ্বারা নির্দেশিত বা ব্যবহারের উদ্দেশ্যে নয় এবং a16z দ্বারা পরিচালিত যেকোন তহবিলে বিনিয়োগ করার সিদ্ধান্ত নেওয়ার সময় কোনও পরিস্থিতিতে নির্ভর করা যাবে না৷ (একটি a16z তহবিলে বিনিয়োগের প্রস্তাব শুধুমাত্র প্রাইভেট প্লেসমেন্ট মেমোরেন্ডাম, সাবস্ক্রিপশন চুক্তি, এবং এই ধরনের যেকোন তহবিলের অন্যান্য প্রাসঙ্গিক ডকুমেন্টেশন দ্বারা তৈরি করা হবে এবং তাদের সম্পূর্ণরূপে পড়া উচিত।) উল্লেখ করা যেকোন বিনিয়োগ বা পোর্টফোলিও কোম্পানিগুলি, বা বর্ণিতগুলি a16z দ্বারা পরিচালিত যানবাহনে সমস্ত বিনিয়োগের প্রতিনিধি নয়, এবং বিনিয়োগগুলি লাভজনক হবে বা ভবিষ্যতে করা অন্যান্য বিনিয়োগের একই বৈশিষ্ট্য বা ফলাফল থাকবে এমন কোনও নিশ্চয়তা থাকতে পারে না। Andreessen Horowitz দ্বারা পরিচালিত তহবিল দ্বারা করা বিনিয়োগের একটি তালিকা (যেসব বিনিয়োগের জন্য ইস্যুকারী a16z-এর জন্য সর্বজনীনভাবে প্রকাশ করার অনুমতি দেয়নি এবং সেইসাথে সর্বজনীনভাবে ব্যবসা করা ডিজিটাল সম্পদগুলিতে অঘোষিত বিনিয়োগগুলি ব্যতীত) https://a16z.com/investments-এ উপলব্ধ /।

এর মধ্যে প্রদত্ত চার্ট এবং গ্রাফগুলি শুধুমাত্র তথ্যের উদ্দেশ্যে এবং কোন বিনিয়োগ সিদ্ধান্ত নেওয়ার সময় তার উপর নির্ভর করা উচিত নয়। বিগত কর্মক্ষমতা ভবিষ্যতের ফলাফল পরিচায়ক হয় না। বিষয়বস্তু শুধুমাত্র নির্দেশিত তারিখ হিসাবে কথা বলে. এই উপকরণগুলিতে প্রকাশিত যেকোন অনুমান, অনুমান, পূর্বাভাস, লক্ষ্য, সম্ভাবনা এবং/অথবা মতামত বিজ্ঞপ্তি ছাড়াই পরিবর্তন সাপেক্ষে এবং অন্যদের দ্বারা প্রকাশিত মতামতের সাথে ভিন্ন বা বিপরীত হতে পারে। অতিরিক্ত গুরুত্বপূর্ণ তথ্যের জন্য দয়া করে https://a16z.com/disclosures দেখুন।

সময় স্ট্যাম্প:

থেকে আরো আন্দ্রেসেন হরোয়েজ্জ