ডিসেম্বর 6, 2021
ভূমিকা
সার্জারির মিল টিম আমাদেরকে চুক্তির একটি সেট পর্যালোচনা এবং নিরীক্ষা করতে বলেছে যাতে সাধারণ শাসন চুক্তিগুলিকে উন্নত করা যায় এবং তাদের আরও নমনীয়তা দেওয়া যায়। আমরা কোডটি দেখেছি এবং এখন আমাদের ফলাফল প্রকাশ করছি।
সিস্টেমের সংক্ষিপ্ত বিবরণ
সিস্টেম তিনটি প্রধান চুক্তির উপর নির্ভর করে:
- A
SafeGuard
চুক্তি টেমপ্লেট। এই চুক্তি হলadmin
একটিTimelock
চুক্তি, এবং উপর মডুলার ভূমিকা একটি স্তর যোগ করেTimelock
এর কর্ম। এই চুক্তিটি বেশ কয়েকটি ভূমিকাকে সংজ্ঞায়িত করে যেগুলির আলাদা দায়িত্ব এবং একটি প্রস্তাবের অবস্থার উপর অ্যাক্সেস রয়েছে (সারিবদ্ধকরণ, বাতিলকরণ এবং কার্যকর করা)। - A
SafeGuardFactory
চুক্তি একটি নতুন স্থাপনSafeGuard
এবং একটি সংশ্লিষ্ট নতুনTimelock
চুক্তি তারপর এটি ভিতরে টাইমলক ঠিকানা সেট করেSafeGuard
চুক্তি এবং নতুন নিবন্ধনSafeGuard
মধ্যেRegistry
. - A
Registry
যা নিয়োজিতদের একটি তালিকা রাখেSafeGuards
তাদের অনুরূপ সঙ্গে সংস্করণ সংখ্যা.
সার্জারির SafeGuardFactory
মূলত একটি জন্ম দেবে নতুন SafeGuard
যখনই ডাকা হয়। ক SafeGuard
চারপাশে একটি মোড়ানো হয় Timelock
অপারেশন যা প্রতিটি ক্রিয়াকলাপের জন্য আলাদা এবং পৃথক ভূমিকা যোগ করে। ভূমিকা ওপেনজেপেলিন ব্যবহারের মাধ্যমে গঠন করা হয় AccessControlEnumerable
চুক্তি মাল্টিসিগ ওয়ালেট এবং ব্যবসায়িক ব্যবহারের ক্ষেত্রে আরও নমনীয়তা এবং সামঞ্জস্য দেয় যেখানে বেশ কয়েকটি ঠিকানা একই ভাগ করা ভূমিকা থাকতে পারে।
আপডেট: মধ্যে পিআর #10, Tally টিম সরানোর সিদ্ধান্ত নিয়েছে Registry
চুক্তি নিয়োজিত সুরক্ষার তালিকা এখন এর মধ্যে সংরক্ষণ করা হয়েছে SafeGuardFactory
চুক্তি, মধ্যে safeGuards
গণনাযোগ্য সেট, তাদের সংস্করণ সহ তে সংরক্ষিত safeGuardVersion
ম্যাপিং.
ভূমিকা
সার্জারির SafeGuard
চুক্তি নিম্নলিখিত ভূমিকা সংজ্ঞায়িত করে:
আপডেট: সার্জারির CREATOR_ROLE
L02 সমস্যার সমাধান হিসাবে ভূমিকা সরানো হয়েছে।
ব্যাপ্তি
আমরা প্রতিশ্রুতি নিরীক্ষিত b2c63a9dfc4090be13320d999e7c6c1d842625d3
এর safeguard
ভান্ডার সুযোগ মধ্যে স্মার্ট চুক্তি হয় contracts
ডিরেক্টরি তবে mocks
ডিরেক্টরিকে সুযোগের বাইরে বলে গণ্য করা হয়েছিল।
অনুমিতি
সিস্টেম আপগ্রেডযোগ্য হতে বোঝানো হয় না. দ্য Registry
ঠিকানা সেট করা আছে কনস্ট্রাক্টরের মধ্যে এর SafeGuardFactory
এবং প্রতিটি SafeGuard
থাকতে পারে Timelock
শুধুমাত্র একবার সেট করুন. এর মানে হল যদি একটি নতুন Registry
একটি নতুন স্থাপন করা হয় SafeGuardFactory
মোতায়েন করতে হবে। যদি Timelock
বাস্তবায়ন পরিবর্তন, পুরানো SafeGuard
s অপ্রচলিত হয়ে যাবে, এবং নতুনদের মোতায়েন করতে হবে।
অধিকন্তু, সিস্টেমটি ব্যাপকভাবে একটি বাস্তবায়নের উপর নির্ভর করে Timelock
চুক্তি যেটিকে এই নিরীক্ষার সুযোগের বাইরে গণ্য করা হয়েছিল। টিম এখনো বাস্তবায়ন চূড়ান্ত করেনি Timelock
চুক্তি এই রিপোর্ট লেখার সময়, টাইমলকের যৌগিক বাস্তবায়ন প্রকল্পে ব্যবহার করা হচ্ছে।
কোডবেসটি এক সপ্তাহের মধ্যে দুই নিরীক্ষক দ্বারা নিরীক্ষিত হয়েছে এবং এখানে আমরা আমাদের ফলাফলগুলি উপস্থাপন করছি।
সমালোচনামূলক তীব্রতা
কোনটিই নয়।
উচ্চ তীব্রতা
[H01] ETH ভিতরে লক করা যেতে পারে Timelock
চুক্তি
সার্জারির Tally
দল মূলত তাদের বাস্তবায়নের ভিত্তিতে ভিত্তি করে GovernorBravoDelegate
যৌগিক চুক্তি।
এই নিরীক্ষা চলাকালীন, দ Tally
দল আবিষ্কার করেছে একটি সীমাবদ্ধতা কম্পাউন্ডের গভর্নরে যেখানে ইটিএইচ সরাসরি পাঠানো হয়েছে Timelock
গভর্নেন্স প্রস্তাব দ্বারা ব্যবহারের জন্য উপলব্ধ নয়, এবং যদিও এটি স্থায়ীভাবে আটকে নেই, পুনরুদ্ধার করার জন্য একটি বিস্তৃত সমাধান প্রয়োজন।
এর কারণ হল গভর্নর বাস্তবায়নের জন্য একটি প্রস্তাবের সমস্ত মান হিসাবে সংযুক্ত করা প্রয়োজন msg.value
যে অ্যাকাউন্ট দ্বারা মৃত্যুদন্ড ট্রিগার করে, কোনোভাবেই ব্যবহার না করে Timelock
ETH তহবিল।
সার্জারির একই সমস্যা পরে চিহ্নিত করা হয় SafeGuard
বাস্তবায়ন এবং দলটি সমস্যাটি সম্পর্কে অবগত এবং এটি ঠিক করার প্রক্রিয়ার মধ্যে রয়েছে৷
সমস্যাটি সমাধান করার সময়, পদ্ধতি ব্যবহার করার কথা বিবেচনা করুন একই সমস্যার জন্য OpenZeppelin লাইব্রেরি দ্বারা গৃহীত.
আপডেট: কমিট মধ্যে স্থির 7337db227edda83533be586135d96ddac4f5bf29
.
[H02] সেফগার্ড ফ্যাক্টরি হিমায়িত করা যেতে পারে
সার্জারির Registry
চুক্তি সব ট্র্যাক রাখা উদ্দেশ্যে করা হয় SafeGuards
যে SafeGuardFactory
উত্পাদন করে. এর বাহ্যিকতা রয়েছে register
ক্রিয়া যা এই উদ্দেশ্যে ব্যবহার করা হয়।
একই সাথে, SafeGuardFactory
আছে, এর কন্সট্রাক্টরে, স্থানীয়ের বরাদ্দ registry
ইনপুট মান থেকে মান. এর মান পরিবর্তন করার কোন সম্ভাবনা নেই registry
পরিবর্তনশীল এবং এই কারণে, যদি একটি নতুন Registry
স্থাপন করা হবে, একটি নতুন কারখানাও স্থাপন করতে হবে।
সার্জারির SafeGuardFactory
আছে createSafeGuard
ক্রিয়া, প্রথম দায়িত্বে একটি নতুন স্থাপন করা হচ্ছে SafeGuard
, তারপর একটি নতুন Timelock
ঠিকানা সহ SafeGuard
as admin
, তারপর সেট করা timelock
এর পরিবর্তনশীল SafeGuard
চুক্তি এবং অবশেষে নিবন্ধন SafeGuard
রেজিস্ট্রিতে.
সমস্যা হল যে কোন কল createSafeGuard
একজন আক্রমণকারীকে ব্যর্থ হতে বাধ্য করা যেতে পারে যিনি সরাসরি নতুনের নির্ধারক ঠিকানা নিবন্ধন করতে পারেন SafeGuard
এর সৃষ্টির আগে। যখনই কোন চুক্তি একটি তৈরি করে new
উদাহরণ, এর অযোগ্যতা বৃদ্ধি করা হয়েছে, এবং চুক্তির নতুন উদাহরণটি কোথায় স্থাপন করা হবে তার ঠিকানা মূল চুক্তির ঠিকানা এবং এর অনুপস্থিতি দ্বারা নির্ধারিত হতে পারে। অতএব, একজন আক্রমণকারী অনেক ঠিকানার পূর্বনির্ধারণ করতে পারে যেখানে নতুন SafeGuards
স্থাপন করা হবে এবং যারা ঠিকানা নিবন্ধন Registry
কল করে register
ফাংশন এর ফলে কল হবে createSafeGuard
থেকে প্রত্যাবর্তন করা যেহেতু Registry
ইতিমধ্যে ঠিকানা রয়েছে।
বহিরাগত অভিনেতাদের প্রকাশ্যে কল করা এড়াতে Register
চুক্তি, অ্যাক্সেস সীমাবদ্ধ বিবেচনা register
দ্বারা একচেটিয়াভাবে কল গ্রহণ করার ফাংশন SafeGuardFactory
.
আপডেট: মধ্যে স্থির পিআর #10. ট্যালি দল সরিয়ে দিয়েছে Registry
চুক্তি।
মাঝারি তীব্রতা
কোনটিই নয়।
কম তীব্রতা
[L01] কোড আউট মন্তব্য
সার্জারির Registry
চুক্তি অন্তর্ভুক্ত কোডের একটি কমেন্ট করা লাইন. পঠনযোগ্যতা উন্নত করতে, কোডবেস থেকে এটি অপসারণ বিবেচনা করুন।
আপডেট: মধ্যে স্থির পিআর #10 এবং প্রতিশ্রুতিবদ্ধ 7fd27df16fc879d990d36a167a0b6e719e578558
.
[L02] SafeGuard-এর প্রশাসক যেকোনো ঠিকানায় নির্মাতার ভূমিকা নির্ধারণ করতে পারেন
সার্জারির SafeGuard
চুক্তি একটি ভূমিকা সংজ্ঞায়িত করে CREATOR_ROLE
যা, নাম অনুসারে, সুরক্ষার স্রষ্টাকে বরাদ্দ করা হয়েছে।
যাইহোক, আহ্বান করে দ্য grantRole
এর ফাংশন AccessControlEnumerable
চুক্তি OpenZeppelin চুক্তি গ্রন্থাগারে, একজন প্রশাসক যেকোন ঠিকানায় এই ভূমিকাটি প্রদান করতে পারেন। এটি বিভ্রান্তির কারণ হতে পারে এর স্রষ্টা SafeGuard
শুধুমাত্র হতে পারে SafeGuardFactory
.
কোডবেস জুড়ে, এই ভূমিকাটি শুধুমাত্র ব্যবহারকারীদের সাথে ইন্টারঅ্যাক্ট করা থেকে সীমাবদ্ধ করতে ব্যবহার করা হয়েছে৷ setTimelock
ক্রিয়া এর SafeGuard
চুক্তি নকশা দ্বারা, সিস্টেম নিশ্চিত করে যে setTimelock
ক্রিয়া শুধুমাত্র একবার কল করা যেতে পারে, থেকে মধ্যে SafeGuardFactory
চুক্তি.
অপসারণ বিবেচনা করুন CREATOR_ROLE
থেকে ভূমিকা SafeGuard
চুক্তি এবং ব্যবহার করে onlyOwner
পরিবর্তন মধ্যে setTimelock
ফাংশন.
আপডেট: মধ্যে স্থির পিআর #10.
[L03] ভুল ইন্টারফেসের সংজ্ঞা এবং বাস্তবায়ন
সার্জারির ISafeGuard
ইন্টারফেস সংজ্ঞায়িত করে না queueTransactionWithDescription
ক্রিয়া তে বাস্তবায়িত হয় SafeGuard
চুক্তি, এবং একই সময়ে, এটি সংজ্ঞায়িত করে __অবডিকেট, __queueSetTimelockPendingAdmin এবং __executeSetTimelockPendingAdmin ফাংশন কিন্তু তারা বাস্তবায়িত হয় না.
কোডবেসের সঠিকতা এবং ধারাবাহিকতা উন্নত করতে, রিফ্যাক্টরিং বিবেচনা করুন ISafeGuard
ঠিক মেলে ইন্টারফেস SafeGuard
বাস্তবায়ন.
আপডেট: কমিট মধ্যে স্থির 7fd27df16fc879d990d36a167a0b6e719e578558
.
[L04] অনুপস্থিত ডকস্ট্রিং
কোড বেসের কিছু চুক্তি এবং ফাংশনে ডকুমেন্টেশন নেই। উদাহরণ স্বরূপ, কিছু ফাংশন মধ্যে SafeGuard
চুক্তি।
উপরন্তু, কিছু ডকস্ট্রিং অনানুষ্ঠানিক ভাষা ব্যবহার করে, যেমন একটি উপরে setTimelock
মধ্যে ফাংশন SafeGuard
চুক্তি.
এটি কোডের উদ্দেশ্য সম্পর্কে পর্যালোচকদের বোঝার ক্ষেত্রে বাধা দেয়, যা শুধুমাত্র নিরাপত্তা নয়, সঠিকতাও সঠিকভাবে মূল্যায়ন করার জন্য মৌলিক। উপরন্তু, ডকস্ট্রিং পঠনযোগ্যতা উন্নত করে এবং রক্ষণাবেক্ষণ সহজ করে। তারা স্পষ্টভাবে ফাংশন উদ্দেশ্য বা অভিপ্রায় ব্যাখ্যা করা উচিত, পরিস্থিতি যার অধীনে তারা ব্যর্থ হতে পারে, তাদের কল করার জন্য অনুমোদিত ভূমিকা, মান ফিরে এবং নির্গত ঘটনা.
চুক্তির পাবলিক API-এর অংশ এমন সমস্ত ফাংশন (এবং তাদের পরামিতি) পুঙ্খানুপুঙ্খভাবে নথিভুক্ত করার কথা বিবেচনা করুন। সংবেদনশীল কার্যকারিতা বাস্তবায়নকারী ফাংশনগুলি, এমনকি সর্বজনীন না হলেও, স্পষ্টভাবে নথিভুক্ত করা উচিত। ডকস্ট্রিং লেখার সময়, অনুসরণ করার কথা বিবেচনা করুন Ethereum প্রাকৃতিক স্পেসিফিকেশন বিন্যাস (NatSpec)।
আপডেট: আংশিকভাবে সংশোধন করা হয়েছে পিআর #10. কোড বেস জুড়ে বিভিন্ন ফাংশনে যথাযথ ডকস্ট্রিং যুক্ত করা হয়েছে। যাইহোক, বর্তমান পরিবর্তনগুলি ছাড়াও, নিম্নলিখিত পরিবর্তনগুলি করার কথা বিবেচনা করুন:
- বিজ্ঞাপন
description
যেমন@param
উপরের ডকস্ট্রিং-এqueueTransactionWithDescription
ক্রিয়া - বিজ্ঞাপন
@param
মধ্যে ডকস্ট্রিং উপরেcreateSafeGuard
মধ্যে ফাংশনSafeGuardFactory
চুক্তি - বিজ্ঞাপন
@return
ফাংশন উপরে docstrings ইনSafeGuardFactory
চুক্তি।
[L05] অকেজো বা পুনরাবৃত্তি কোড
কোডবেসে এমন জায়গা রয়েছে যেখানে কোডটি পুনরাবৃত্তি হয় বা প্রয়োজন হয় না। কিছু উদাহরণ হল:
- লাইন 29-32 এর
Registry
চুক্তি অকেজো, কারণ_add
এর ফাংশনEnumerableSet
চুক্তি ইতিমধ্যে এই চেক সঞ্চালন ইতিমধ্যে সেট করা মানগুলির বিরুদ্ধে। - লাইন 62, 67, 73 এবং 78 এর
SafeGuard
চুক্তি সব একই সঠিক অপারেশন পুনরাবৃত্তি হয়. সদৃশ কোড এড়াতে এটিকে একটি অভ্যন্তরীণ ফাংশনে এনক্যাপসুলেট করার কথা বিবেচনা করুন। - লাইন 62-63 এবং 67-68 of
SafeGuard
পুনরাবৃত্তি হয় একটি একক অভ্যন্তরীণ ফাংশন মধ্যে তাদের encapsulating বিবেচনা করুন. - এর ব্যবহার
gasleft
ফাংশনের কলে কতটা গ্যাস ফরোয়ার্ড করা উচিত তা নির্দিষ্ট করতেexecuteTransaction
অপ্রয়োজনীয় এর কারণ হল, মৃত্যুদন্ড কার্যকর করার সেই সময়ে, সম্পূর্ণ গ্যাস অবশিষ্ট থাকাটাই কার্য সম্পাদন চালিয়ে যাওয়ার জন্য ব্যবহার করা হবে। যদি এটি স্পষ্টতার জন্য না হয়, তাহলে অপসারণ বিবেচনা করুনgas
কল থেকে পরামিতি।
একটি ক্লিনার কোড তৈরি করতে এবং কোডবেসের উপর ধারাবাহিকতা এবং মডুলারিটি উন্নত করতে প্রস্তাবিত ফিক্সড প্রয়োগ করার কথা বিবেচনা করুন।
আপডেট: মধ্যে স্থির পিআর #10 এবং প্রতিশ্রুতিবদ্ধ 7fd27df16fc879d990d36a167a0b6e719e578558
.
নোট এবং অতিরিক্ত তথ্য
[N01] অসামঞ্জস্যপূর্ণ শৈলী
কোড বেসে কিছু জায়গা আছে, যেখানে শৈলীর পার্থক্য পঠনযোগ্যতাকে প্রভাবিত করে, কোড বোঝা আরও কঠিন করে তোলে। কিছু উদাহরণ হল:
- সার্জারির
Registry
চুক্তি সম্পূর্ণ চুক্তিতে ডকস্ট্রিংয়ের জন্য বিভিন্ন শৈলী ব্যবহার করে। - সার্জারির
SafeGuard
চুক্তি একটি ইভেন্ট নির্গত হয় যখনqueueTransactionWithDescription
বলা হয় কিন্তু লেনদেন সংক্রান্ত অন্যান্য ফাংশনে কোনো ইভেন্ট নির্গত হয় না। - মধ্যে
SafeGuard
চুক্তি, কখনও কখনও মূল্য নাম পরামিতি হিসাবে ব্যবহৃত হয় এবং কখনও কখনও _মূল্য ব্যবহৃত হয়.
একটি সামঞ্জস্যপূর্ণ কোডিং শৈলী প্রকল্পের পঠনযোগ্যতার সাথে যে মান যোগ করে তা বিবেচনায় নিয়ে, সোলহিন্টের মতো লিন্টার সরঞ্জামগুলির সাহায্যে একটি আদর্শ কোডিং শৈলী প্রয়োগ করার কথা বিবেচনা করুন।
আপডেট: মধ্যে স্থির পিআর #10 এবং প্রতিশ্রুতিবদ্ধ 7fd27df16fc879d990d36a167a0b6e719e578558
.
[N02] অনুপস্থিত লাইসেন্স
কোড বেসের মধ্যে নিম্নলিখিত চুক্তিগুলি একটি SPDX লাইসেন্স শনাক্তকারী অনুপস্থিত৷
কম্পাইলার সতর্কতা নীরব করতে এবং কোডবেস জুড়ে ধারাবাহিকতা বাড়ানোর জন্য একটি লাইসেন্স শনাক্তকারী যোগ করার কথা বিবেচনা করুন। এটি করার সময় উল্লেখ করা বিবেচনা করুন spdx.dev নির্দেশিকা দ্বারা অনুমোদিত।
আপডেট: মধ্যে স্থির পিআর #10 এবং প্রতিশ্রুতিবদ্ধ 7fd27df16fc879d990d36a167a0b6e719e578558
.
[N03] OpenZeppelin চুক্তির নির্ভরতা পিন করা নেই
অপ্রত্যাশিত আচরণ প্রতিরোধ করার জন্য ভবিষ্যতের আপডেটে ব্রেকিং পরিবর্তনগুলি প্রকাশ করা হয় ওপেনজেপেলিন চুক্তির লাইব্রেরি, তে এই নির্ভরতার সংস্করণটি পিন করার কথা বিবেচনা করুন৷ package.json ফাইল.
আপডেট: মধ্যে স্থির পিআর #10.
[N04] সলিডিটি কম্পাইলার সংস্করণ পিন করা নেই
কোড বেস জুড়ে, এর সংস্করণটি পিন করার কথা বিবেচনা করুন সলিডিটি কম্পাইলার এর সর্বশেষ স্থিতিশীল সংস্করণে। এটি অসামঞ্জস্যপূর্ণ ভবিষ্যত প্রকাশের কারণে অপ্রত্যাশিত বাগগুলি প্রবর্তন প্রতিরোধে সহায়তা করবে। একটি নির্দিষ্ট সংস্করণ চয়ন করতে, বিকাশকারীদের প্রকল্পের জন্য প্রয়োজনীয় কম্পাইলারের বৈশিষ্ট্য উভয়ই বিবেচনা করা উচিত এবং পরিচিত বাগ তালিকা প্রতিটি সলিডিটি কম্পাইলার সংস্করণের সাথে যুক্ত।
আপডেট: মধ্যে স্থির পিআর #10.
[N05] টাইপো
কোড বেস জুড়ে বিভিন্ন দৃষ্টান্তে, শব্দ role
হিসাবে ভুল বানান করা হয় rol
. এরকম একটি উদাহরণ রয়েছে মধ্যে ডকস্ট্রিং constructor
এর SafeGuard
চুক্তি.
কোড পঠনযোগ্যতা উন্নত করতে এই টাইপগুলি সংশোধন করার কথা বিবেচনা করুন।
আপডেট: আংশিকভাবে সংশোধন করা হয়েছে পিআর #10. যখন এর বানান role
সংশোধন করা হয়েছে, "একটি সংজ্ঞায়িত প্রশাসকের ঠিকানায় প্রশাসকের ভূমিকা সেট করুন" মন্তব্যটি "একটি সংজ্ঞায়িত প্রশাসকের ঠিকানায় প্রশাসকের ভূমিকা সেট করুন" হওয়া উচিত। উপরন্তু, "চালনা" তে ভুল বানান লেখা হয়েছে SafeGuard
চুক্তি লাইন 69, লাইন 82, লাইন 96 এবং লাইন 110 এবং "উপলব্ধ" বানান ভুল আছে লাইন 70, লাইন 83, লাইন 97, লাইন 111. এছাড়াও, যেমন অনানুষ্ঠানিক শব্দ প্রতিস্থাপন বিবেচনা করুন "যাব" in SafeGuard
আনুষ্ঠানিক বিকল্পগুলির সাথে চুক্তি যেমন "যাচ্ছে"।
[N06] uintকে uint256 হিসাবে ঘোষণা করুন
কোডবেসে বেশ কিছু ঘটনা আছে যেখানে ভেরিয়েবল ঘোষণা করা হয় uint
পরিবর্তে ডেটা টাইপ uint256
। উদাহরণস্বরূপ, দী eta
মধ্যে পরিবর্তনশীল QueueTransactionWithDescription
ঘটনা এর SafeGuard
চুক্তি।
স্পষ্টতার পক্ষে, সব দৃষ্টান্ত uint
হিসাবে ঘোষণা করা উচিত uint256
.
আপডেট: মধ্যে স্থির পিআর #10 এবং প্রতিশ্রুতিবদ্ধ 7fd27df16fc879d990d36a167a0b6e719e578558
.
[N07] অব্যবহৃত আমদানি
সার্জারির SafeGuard
চুক্তি আমদানি করে console
চুক্তি কিন্তু কখনই ব্যবহার করে না।
কোডের পঠনযোগ্যতা উন্নত করতে, কোনো অব্যবহৃত আমদানি অপসারণ বিবেচনা করুন।
আপডেট: মধ্যে স্থির পিআর #10.
উপসংহার
একটি উচ্চ এবং আরও কয়েকটি ছোটখাটো দুর্বলতা পাওয়া গেছে এবং সুপারিশ এবং সংশোধনের পরামর্শ দেওয়া হয়েছে।
- &
- প্রবেশ
- হিসাব
- দিয়ে
- কর্ম
- স্টক
- অতিরিক্ত
- ঠিকানা
- অ্যাডমিন
- সব
- ইতিমধ্যে
- যদিও
- API
- অভিগমন
- কাছাকাছি
- নিরীক্ষা
- মূলত
- হচ্ছে
- বাগ
- ব্যবসায়
- কল
- মামলা
- কারণ
- পরিবর্তন
- অভিযোগ
- কোড
- কোডিং
- সাধারণ
- যৌগিক
- বিশৃঙ্খলা
- বিবেচনা
- ধারণ
- অবিরত
- চুক্তি
- চুক্তি
- পারা
- স্রষ্টা
- বর্তমান
- উপাত্ত
- ডিলিং
- নকশা
- ডেভেলপারদের
- বিভিন্ন
- আবিষ্কৃত
- সম্প্রসারিত
- ETH
- ঘটনা
- ঘটনাবলী
- উদাহরণ
- কারখানা
- বৈশিষ্ট্য
- পরিশেষে
- প্রথম
- ঠিক করা
- নমনীয়তা
- পাওয়া
- ক্রিয়া
- তহবিল
- ভবিষ্যৎ
- গ্যাস
- দান
- লক্ষ্য
- শাসন
- রাজ্যপাল
- নির্দেশিকা
- জমিদারি
- সাহায্য
- এখানে
- উচ্চ
- কিভাবে
- HTTPS দ্বারা
- বাস্তবায়িত
- বৃদ্ধি
- বর্ধিত
- ইন্টারফেস
- IT
- পরিচিত
- ভাষা
- সর্বশেষ
- লাইব্রেরি
- লাইসেন্স
- লাইন
- তালিকা
- স্থানীয়
- লক
- তাকিয়ে
- মেকিং
- ম্যাচ
- মডুলার
- মাল্টিসিগ
- অন্যান্য
- বর্তমান
- প্রক্রিয়া
- প্রকল্প
- প্রস্তাব
- প্রকাশ্য
- প্রকাশ করা
- খাতা
- রিলিজ
- রিপোর্ট
- সংগ্রহস্থলের
- ফলাফল
- এখানে ক্লিক করুন
- নিরাপত্তা
- সেট
- বিন্যাস
- ভাগ
- স্মার্ট
- স্মার্ট চুক্তি
- ঘনত্ব
- রাষ্ট্র
- শৈলী
- পদ্ধতি
- দ্বারা
- সর্বত্র
- সময়
- সরঞ্জাম
- পথ
- লেনদেন
- আপডেট
- us
- ব্যবহারকারী
- মূল্য
- দুর্বলতা
- ওয়ালেট
- সপ্তাহান্তিক কাল
- হু
- মধ্যে
- শব্দ
- লেখা