آشنایی با ساختار HD Wallet ها: HD wallets به ولت هایی اطلاق میشه که تمامی کلید ها و بالطبع آدرس های مشتق شده از آن ها را از روی یک منبع یا sources واحد میسازند.
منبع یا سورس واحد یعنی چی؟ به شکل زیر نگاه کنید:
“همه کلید ها از یک سرمنشأ ساخته شدن” که بعد تر مفصلا توضیح خواهیم داد، فقط با تصویر بالا درک بهتری از سرمنشأ واحد پیدا میکنید.
به دلیل شکل درختی که این نوع کیف پول ها در ساخت کلید ها و آدرس ها از آن ها استفاده میکنند به آنها ولت های hierarchical یا سلسله مراتبی نیز گفته میشود (Bip32).
استفاده از این ولت ها به دلایل زیر محبوب شده:
دلیل اول: در حالت عادی میتوانید برای هر بار دریافت بیتکوین یک کلید خصوصی و یک کلید عمومی (زوج کلید) ایجاد نمایید، اما اشکال آن این است که میبایست چندین بک آپ از کلید های خود داشته باشید و این مدیریت آن ها را سخت میکند،اما HD wallet ها فقط با یک seed میتوانند ۴۲۹۴۹۶۷۲۹۶ زوج کلید را به تنهایی تولید کنند.
دلیل دوم: سیستم سلسله مراتبی این نوع ولت ها، این امکان را فراهم میآورد تا هر زیر کلید یا کلید فرزند قادر باشد مجددا کلید مجزایی (چه زوج کلید، چه کلید فرد) را برای خود تولید نماید:
مفاهیم بالا رو در مورد HD wallet به ذهن بسپارید تا بعد از آشنایی با مفهومی به نام seed و mnemonic sentence؛ دوباره بهشون برگردیم.
Mnemonic sentence یا mnemonic code یا seed phrase یا seed words به رشته کلماتی اطلاق میشه که حفظ و نگهداری و به خاطر سپاری یک رشته کد طولانی بدون مفهوم از نظر انسان رو ساده تر کرده.
بیاید کمی ساده ترش کنیم:
شما کلمه entire رو ساده تر به خاطر میسپارید و یادداشت میکنید یا یک عبارت باینری مثل: ۰۱۰۰۱۰۱۱۰۰ ؟
حالا اگر این عبارت خیلی طولانی تر بشه چی؟ پس همون mnemonic sentence بهتره🙂
برای ایجاد mnemonic sentence در ابتدا یک رشته باینری (صفر و یک) با طول ۱۲۸ تا ۲۵۶ بیت، تولید میکنیم.
(نرم افزار ولت خودش این کار رو برامون میکنه).
اسم این رشته باینری رو میزاریم entropy.
حالا میخایم این entropy رو به کلمات تبدیل کنیم، اگر این entropy رو به وسیله SHA256 هش کنیم، یک finger print یکتا از entropy بهمون برمیگردونه که میتونیم یک بیت از اون رو به عنوان checksum هر قطعه ۳۲ بیتی از entropy قرار بدیم:
حالا رشته باینری حاصل رو به گروه های ۱۱ بیتی تقسیم میکنیم. این یازده عدد باینری میتونن اعداد ۰تا ۲۰۴۷ رو نمایش بدن،که متناظر هر کدومشون یک لغت وجود داره (Bip39), به تصویر زیر توجه کنید:
حالا که mnemonic sentence رو ساختیم میخایم اون رو تبدیل به seed کنیم،
رشته کلمات رو به همراه کلمه عبور( کلمه عبور در اکثر ولت ها برای تولید و آمیخته شدن با seed اجباری نیست) به یک تابع DBKF2 میدیم، تا اونقدر اون رو هش کنه تا به یه خروجی ۵۱۲ بیتی یا ۶۴ بایتی بهمون بده:
تبریک میگم seed خودمون رو ساختیم، خلاصه این قسمت هم به این شکل شد👇
حالا که seed ساخته شد میتونیم به وسیله همون HD wallet که در قسمت اول توضیح دادیم، یک extended private key ۶۴ بیتی بسازیم، که ۳۲ بیت اول private key و ۳۲ بیت دوم chain code هستند:
حالا همینطور میشه به این تابع hash-based message authentication code یا HMAC ، خروجی قبلی رو به عنوان ورودی داد، تا سلسله مراتبی برامون کلید تولید کنه:
از چپ به راست میخونیمش:
M: همون مستر هستش که از روی سید ساخته میشه.
44′: استراکچر ولت مثلا بیپ ۴۴ یا۴۹ یا ۸۴.
0′: اینجا نوع کوینی که میخایم ذخیره کنیم، مثلا عدد صفر نمایانگر بیتکوین یا ۲ برای دوج کوین یا ۱۲۸ برای مونرو.
همینجا استپ میکنم!
یه ولت داشتیم که با یه سید، اومد کلید های سلسله مراتبی ساخت و روی هر کدوم برای دریافت یا ارسال هر نوع کوینی روی شبکه خودش، فقط با یک سید که ارتباطش هم با mnemonic sentence گفتیم، کار ما رو انجام داد.
چه کسی انجام داد؟ نرم افزار ولت.
ما چیکار کردیم؟ هیچی.
پس کافیه ولتی رو انتخاب کنیم که مولتی کوین یا به عبارتی multichain باشه، خودش بقیه کار ها رو برای ما طبق توضیحات بالا انجام میده، مگر برنامه نویس باشید و بخاید خودتون، کد ها رو دستکاری کنید.