মূল কন্টেন্টে যান

টোকেন ইন্টিগ্রেশন চেকলিস্ট

Solidity
স্মার্ট কন্ট্রাক্ট
নিরাপত্তা
টোকেন
মধ্যবর্তী
ট্রেইলঅফবিটস
13 আগস্ট, 2020
4 মিনিট পড়ার সময়

যেকোনো টোকেনের সাথে ইন্টারঅ্যাক্ট করার সময় এই চেকলিস্টটি অনুসরণ করুন। প্রতিটি বিষয়ের সাথে যুক্ত ঝুঁকিগুলো আপনি বুঝতে পেরেছেন তা নিশ্চিত করুন এবং এই নিয়মগুলোর যেকোনো ব্যতিক্রমের যৌক্তিকতা যাচাই করুন।

সুবিধার জন্য, সমস্ত স্লিদার ইউটিলিটি (opens in a new tab) সরাসরি একটি টোকেন ঠিকানায় চালানো যেতে পারে, যেমন:

স্লিদার ব্যবহারের টিউটোরিয়াল

slither-check-erc 0xdac17f958d2ee523a2206206994597c13d831ec7 TetherToken

এই চেকলিস্টটি অনুসরণ করতে, আপনি টোকেনটির জন্য স্লিদার থেকে এই আউটপুটটি পেতে চাইবেন:

- slither-check-erc [target] [contractName] [optional: --erc ERC_NUMBER]
- slither [target] --print human-summary
- slither [target] --print contract-summary
- slither-prop . --contract ContractName # কনফিগারেশন প্রয়োজন, এবং একিডনা ও ম্যান্টিকোর এর ব্যবহার

সাধারণ বিবেচ্য বিষয়

  • কন্ট্রাক্টটির একটি নিরাপত্তা পর্যালোচনা আছে। নিরাপত্তা পর্যালোচনা নেই এমন কন্ট্রাক্টগুলোর সাথে ইন্টারঅ্যাক্ট করা এড়িয়ে চলুন। মূল্যায়নের সময়কাল (যাকে “লেভেল অফ এফোর্ট” বলা হয়), নিরাপত্তা প্রদানকারী প্রতিষ্ঠানের সুনাম এবং প্রাপ্ত ত্রুটিগুলোর সংখ্যা ও তীব্রতা পরীক্ষা করুন।
  • আপনি ডেভেলপারদের সাথে যোগাযোগ করেছেন। কোনো ঘটনার বিষয়ে আপনার তাদের দলকে সতর্ক করার প্রয়োজন হতে পারে। blockchain-security-contacts (opens in a new tab)-এ উপযুক্ত যোগাযোগের মাধ্যম খুঁজুন।
  • গুরুত্বপূর্ণ ঘোষণার জন্য তাদের একটি সিকিউরিটি মেইলিং লিস্ট আছে। যখন কোনো গুরুতর সমস্যা পাওয়া যায় বা আপগ্রেড হয়, তখন তাদের দলের উচিত ব্যবহারকারীদের (আপনার মতো!) পরামর্শ দেওয়া।

ERC সামঞ্জস্যতা

স্লিদারে slither-check-erc (opens in a new tab) নামের একটি ইউটিলিটি রয়েছে, যা অনেকগুলো সম্পর্কিত ERC স্ট্যান্ডার্ডের সাথে একটি টোকেনের সামঞ্জস্যতা পর্যালোচনা করে। এটি পর্যালোচনা করতে slither-check-erc ব্যবহার করুন:

  • transfer এবং transferFrom একটি বুলিয়ান রিটার্ন করে। বেশ কয়েকটি টোকেন এই ফাংশনগুলোতে বুলিয়ান রিটার্ন করে না। ফলস্বরূপ, কন্ট্রাক্টে তাদের কলগুলো ব্যর্থ হতে পারে।
  • name, decimals এবং symbol ফাংশনগুলো ব্যবহার করা হলে সেগুলো উপস্থিত থাকে। ERC-20 স্ট্যান্ডার্ডে এই ফাংশনগুলো ঐচ্ছিক এবং উপস্থিত নাও থাকতে পারে।
  • decimals একটি uint8 রিটার্ন করে। বেশ কয়েকটি টোকেন ভুলভাবে একটি uint256 রিটার্ন করে। যদি এমন হয়, তবে নিশ্চিত করুন যে রিটার্ন করা মানটি 255 এর নিচে।
  • টোকেনটি পরিচিত ERC-20 রেস কন্ডিশন (race condition) (opens in a new tab) প্রশমিত করে। ERC-20 স্ট্যান্ডার্ডে একটি পরিচিত ERC-20 রেস কন্ডিশন রয়েছে যা আক্রমণকারীদের টোকেন চুরি করা থেকে বিরত রাখতে অবশ্যই প্রশমিত করতে হবে।
  • টোকেনটি কোনো ERC-777 টোকেন নয় এবং transfer ও transferFrom-এ কোনো এক্সটার্নাল ফাংশন কল নেই। হস্তান্তর (transfer) ফাংশনগুলোতে এক্সটার্নাল কল রিএন্ট্রান্সির (reentrancy) কারণ হতে পারে।

স্লিদারে slither-prop (opens in a new tab) নামের একটি ইউটিলিটি রয়েছে, যা ইউনিট টেস্ট এবং সিকিউরিটি প্রপার্টি তৈরি করে যা অনেক সাধারণ ERC ত্রুটি খুঁজে বের করতে পারে। এটি পর্যালোচনা করতে slither-prop ব্যবহার করুন:

  • কন্ট্রাক্টটি slither-prop থেকে সমস্ত ইউনিট টেস্ট এবং সিকিউরিটি প্রপার্টি পাস করে। তৈরি করা ইউনিট টেস্টগুলো রান করুন, তারপর একিডনা (opens in a new tab) এবং ম্যান্টিকোর (opens in a new tab) দিয়ে প্রপার্টিগুলো পরীক্ষা করুন।

পরিশেষে, এমন কিছু বৈশিষ্ট্য রয়েছে যা স্বয়ংক্রিয়ভাবে শনাক্ত করা কঠিন। এই শর্তগুলোর জন্য ম্যানুয়ালি পর্যালোচনা করুন:

  • transfer এবং transferFrom-এর কোনো ফি নেওয়া উচিত নয়। ডিফলেশনারি (Deflationary) টোকেনগুলো অপ্রত্যাশিত আচরণের কারণ হতে পারে।
  • টোকেন থেকে অর্জিত সম্ভাব্য সুদ বিবেচনায় নেওয়া হয়। কিছু টোকেন তাদের হোল্ডারদের সুদ প্রদান করে। এটি বিবেচনায় না নিলে এই সুদ কন্ট্রাক্টে আটকে যেতে পারে।

কন্ট্রাক্ট কম্পোজিশন

  • কন্ট্রাক্টটি অপ্রয়োজনীয় জটিলতা এড়িয়ে চলে। টোকেনটি একটি সাধারণ কন্ট্রাক্ট হওয়া উচিত; জটিল কোডযুক্ত টোকেনের জন্য উচ্চ মানের পর্যালোচনা প্রয়োজন। জটিল কোড শনাক্ত করতে স্লিদারের human-summary printer (opens in a new tab) ব্যবহার করুন।
  • কন্ট্রাক্টটি SafeMath ব্যবহার করে। যেসব কন্ট্রাক্ট SafeMath ব্যবহার করে না, সেগুলোর জন্য উচ্চ মানের পর্যালোচনা প্রয়োজন। SafeMath ব্যবহারের জন্য কন্ট্রাক্টটি ম্যানুয়ালি পরীক্ষা করুন।
  • কন্ট্রাক্টটিতে টোকেন সম্পর্কিত নয় এমন মাত্র কয়েকটি ফাংশন রয়েছে। টোকেন সম্পর্কিত নয় এমন ফাংশনগুলো কন্ট্রাক্টে সমস্যা হওয়ার আশঙ্কা বাড়িয়ে দেয়। কন্ট্রাক্টে ব্যবহৃত কোডটি ব্যাপকভাবে পর্যালোচনা করতে স্লিদারের contract-summary printer (opens in a new tab) ব্যবহার করুন।
  • টোকেনটির শুধুমাত্র একটি ঠিকানা রয়েছে। ব্যালেন্স আপডেটের জন্য একাধিক এন্ট্রি পয়েন্ট থাকা টোকেনগুলো ঠিকানার ওপর ভিত্তি করে অভ্যন্তরীণ হিসাবরক্ষণ ভেঙে দিতে পারে (যেমন, balances[token_address][msg.sender] প্রকৃত ব্যালেন্স প্রতিফলিত নাও করতে পারে)।

মালিকের বিশেষাধিকার

  • টোকেনটি আপগ্রেডযোগ্য নয়। আপগ্রেডযোগ্য কন্ট্রাক্টগুলো সময়ের সাথে সাথে তাদের নিয়ম পরিবর্তন করতে পারে। কন্ট্রাক্টটি আপগ্রেডযোগ্য কিনা তা নির্ধারণ করতে স্লিদারের human-summary printer (opens in a new tab) ব্যবহার করুন।
  • মালিকের সীমিত মিন্টিং ক্ষমতা রয়েছে। ক্ষতিকারক বা আপসকৃত মালিকরা মিন্টিং ক্ষমতার অপব্যবহার করতে পারে। মিন্টিং ক্ষমতা পর্যালোচনা করতে স্লিদারের human-summary printer (opens in a new tab) ব্যবহার করুন এবং কোডটি ম্যানুয়ালি পর্যালোচনা করার কথা বিবেচনা করুন।
  • টোকেনটি পজ (pause) করার যোগ্য নয়। ক্ষতিকারক বা আপসকৃত মালিকরা পজযোগ্য টোকেনের ওপর নির্ভরশীল কন্ট্রাক্টগুলোকে ফাঁদে ফেলতে পারে। পজযোগ্য কোড ম্যানুয়ালি শনাক্ত করুন।
  • মালিক কন্ট্রাক্টটিকে ব্ল্যাকলিস্ট করতে পারে না। ক্ষতিকারক বা আপসকৃত মালিকরা ব্ল্যাকলিস্ট থাকা টোকেনের ওপর নির্ভরশীল কন্ট্রাক্টগুলোকে ফাঁদে ফেলতে পারে। ব্ল্যাকলিস্টিং বৈশিষ্ট্যগুলো ম্যানুয়ালি শনাক্ত করুন।
  • টোকেনের পেছনের দলটি পরিচিত এবং অপব্যবহারের জন্য তাদের দায়ী করা যেতে পারে। বেনামী ডেভেলপমেন্ট দল বা আইনি আশ্রয়ে থাকা কন্ট্রাক্টগুলোর জন্য উচ্চ মানের পর্যালোচনা প্রয়োজন।

টোকেনের দুষ্প্রাপ্যতা

টোকেনের দুষ্প্রাপ্যতার সমস্যাগুলো পর্যালোচনার জন্য ম্যানুয়াল পর্যালোচনা প্রয়োজন। এই শর্তগুলো পরীক্ষা করুন:

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