paint-brush
সলিডিটিতে মার্কেল ট্রি কীভাবে প্রয়োগ করবেনদ্বারা@iamshvetsov
174,755 পড়া
174,755 পড়া

সলিডিটিতে মার্কেল ট্রি কীভাবে প্রয়োগ করবেন

দ্বারা Daniel Shvetsov5m2023/10/23
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

Merkle গাছ ছাড়া, ব্লকচেইন খুব কষ্টকর হবে, এবং Merkle প্রমাণ তথ্য সত্যতা সাশ্রয়ী মূল্যের যাচাই করার অনুমতি দেয়। লেনদেনগুলিকে দক্ষতার সাথে সঞ্চয় করার জন্য ব্লকচেইনে (যেমন, বিটকয়েন, ইথেরিয়াম) সক্রিয়ভাবে মার্কেল গাছ ব্যবহার করা হয়, তবে এটিই একমাত্র অ্যাপ্লিকেশন নয়। উদাহরণস্বরূপ, FTX এক্সচেঞ্জের পতনের পরে, অনেক এক্সচেঞ্জ একটি প্রুফ-অফ-রিজার্ভ পদ্ধতি প্রয়োগ করে, যা একটি মার্কেল গাছ ব্যবহার করে।
featured image - সলিডিটিতে মার্কেল ট্রি কীভাবে প্রয়োগ করবেন
Daniel Shvetsov HackerNoon profile picture


একটি Merkle গাছ হল একটি বাইনারি গাছ যা বৃহৎ ডেটা স্ট্রাকচারের বিষয়বস্তু দক্ষতার সাথে এবং নিরাপদে যাচাই করা সম্ভব করে। এই গাছের ধারণাটি 1982 সালে আমেরিকান ক্রিপ্টোগ্রাফার রাল্ফ মার্কেল দ্বারা প্রস্তাবিত এবং পেটেন্ট করা হয়েছিল।


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

তত্ত্ব

লেনদেনের উপর ভিত্তি করে মার্কেল ট্রি


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


H(1-2) = keccak256(H(1) + H(2))

H(3-4) = keccak256(H(3) + H(4))

H(5-6) = keccak256(H(5) + H(6))

H(7-8) = keccak256(H(7) + H(8))

H(1-2-3-4) = keccak256(H(1-2) + H(3-4))

H(5-6-7-8) = keccak256(H(5-6) + H(7-8))

H(1-2-3-4-5-6-7-8) = keccak256(H(1-2-3-4) + H(5-6-7-8))


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


TX2 এর জন্য প্রমাণ


ধরা যাক আমরা পরীক্ষা করতে চাই যে H2 হ্যাশ গাছে উপস্থিত রয়েছে। প্রমাণটি ডেটার একটি অ্যারে হবে: H1 , H3-4 , H5-6-7-8 । এই হ্যাশগুলির জন্য ধন্যবাদ, আমরা রুট হ্যাশ পুনর্গঠন করতে পারি:


H(1-2-3-4-5-6-7-8) = keccak256(keccak256(keccak256(H(1) + H(2)) + H(3-4)) + H(5-6-7-8))


তারপরে আমরা আসল হ্যাশের সাথে ফলাফলের হ্যাশের তুলনা করি। যদি তারা মিলে যায়, এর মানে হল যে হ্যাশ H2 গাছটিতে উপস্থিত রয়েছে।

অনুশীলন করা

আসুন এখন দেখি কিভাবে সলিডিটিতে মার্কেল ট্রি এবং ডেটা ভ্যালিডেশন বাস্তবায়ন করা যায়।


সরলতার জন্য, আমরা সরাসরি ব্লকচেইনে লেনদেনের অ্যারে লিখব, সেইসাথে হ্যাশের অ্যারেও। যেহেতু আমরা বিল্ট-ইন keccak256 ফাংশন ব্যবহার করব, যা 32 বাইটের হ্যাশ প্রদান করে, তাই হ্যাশ অ্যারের ডেটাটাইপ হবে bytes32 । অ্যারের একটি গতিশীল দৈর্ঘ্যও থাকবে। সাধারণভাবে, হ্যাশ অ্যারের দৈর্ঘ্য লেনদেন অ্যারের দৈর্ঘ্যের সমান হবে না, কারণ এটি উত্পাদিত হ্যাশ ধরে রাখবে। আমরা আগে থেকে দৈর্ঘ্য গণনা করতে পারি, কিন্তু কোড সরলীকরণের জন্য আমরা তা করব না। আপনি যদি চান, আপনি এই অ্যারেগুলির প্রতিটিকে public করতে পারেন এবং লেনদেনের হ্যাশগুলি পড়তে পারেন৷


আমরা কনস্ট্রাক্টরে hashes তৈরি করব। প্রথম ধাপ হল লুপে transactions সহ ব্লকের জন্য হ্যাশ গণনা করা। তারপর, গাছের প্রতিটি স্তরে, হ্যাশের সংখ্যা 2 এর একটি ফ্যাক্টর দ্বারা হ্রাস করা হয়। যেহেতু আমরা হ্যাশগুলিকে হ্যাশ অ্যারেতে সংরক্ষণ করব, তাই ইনডেক্স অফসেটগুলি আলাদাভাবে সংরক্ষণ করতে হবে। অভ্যন্তরীণ লুপের পুনরাবৃত্তিকারী 2 দ্বারা বৃদ্ধি পেয়েছে কারণ আমরা গণনা করার সময় এবং হ্যাশ যোগ করার সময় কয়েকটি উপাদান গ্রহণ করব। এইবার abi.encodePacked এ আমরা 2টি হ্যাশ যুক্ত করব যার প্রতিটিতে আমরা সঠিকভাবে সূচকগুলি সেট করব: বাম উপাদানের জন্য – বর্তমান শিফট অফসেটের মান + বর্তমান ট্রি স্তরে সূচক এবং ডান উপাদানের জন্য – একই + 1।



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


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


আবেদন

ব্লকচেইনে একটি মার্কেল গাছের বেশ কয়েকটি অ্যাপ্লিকেশন রয়েছে।


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

সারসংক্ষেপ

Merkle গাছ ছাড়া, ব্লকচেইন খুব কষ্টকর হবে, এবং Merkle প্রমাণ তথ্য সত্যতা সাশ্রয়ী মূল্যের যাচাই করার অনুমতি দেয়।


লেনদেনগুলিকে দক্ষতার সাথে সঞ্চয় করতে মার্কেল গাছ সক্রিয়ভাবে ব্লকচেইনে (যেমন, বিটকয়েন, ইথেরিয়াম) ব্যবহার করা হয়, তবে এটিই একমাত্র অ্যাপ্লিকেশন নয়। উদাহরণস্বরূপ, FTX এক্সচেঞ্জের পতনের পরে, অনেক এক্সচেঞ্জ একটি প্রুফ-অফ-রিজার্ভ পদ্ধতি প্রয়োগ করে, যা একটি মার্কেল গাছ ব্যবহার করে।