Description
ردیس دانشکده های فنی
دانشکده مهندسی برق و کام وتر
تمر ن کام وتری اول
درس ارزهای رمزگذاری شدهمهلت تحو ل: 1 خرداد 1402
مقدمه
در ا ن تمر ن قصد داریم ا با شبک هی بیت کو ن به صورت عملی تعامل کنید و در آن تراکنش انجامدهید و سا ر مکان ز مهای بیت کو ن مانند استخراج بلوک را آزمایش کنید. با توجه به اینکه در شبکه یاصلی بیت کو ن (Mainnet)، برای انجام تراکنش نیاز به صرف هزینه ی واقعی و رداخت بیت کو ن (بهعنوان کارمزد تراکن ش) ی باشد، موارد خواس ه شده را در شبکه ی آزمایشی (Testnet) انجام ی دهید.
شبک هی آزمایشی از نظر فنی کاملا مشابه شبکه ی اصلی بیت کو ن است و در صورتی که بتوانید عملیاتمد نظر را در ا ن شبکه به طور صح ح به انجام رسانید، ا ن عملیات در شبک هی اصلی ن ز قابل اجراست.
تفاوت جدی شبک هی آزمایشی و شبکه ی اصلی در ا ن است که شبک هی آزمایشی به گون های طراحی شدهاست که بی تکو نهای استخراج شده در آن ه چ ارزشی ندارند و ارزش آنها قریبا برابر صفر است. ازا ن رو توسع هدهندگان بی تکو ن برای طراحی، ساخت و توسعه ی امکانات جدید، از شبکه ی آزمایشیبرای تست کردن ا ن امکانات بدون نیاز به صرف هزینه استفاده ی کنند. شبک هی آزمایشی، زنج ره یبلوکی منحصر به خود را دارد و مس قل از شبکه ی اصلی به کار خود ادامه ی دهد و ه چ ارتباطی ب نا ن دو زنج ره وجود ندارد و نها از نظر فنی مشابه یکدیگر ی باشند.
برای دریافت ول در شبک هی آزمایشی، برخی از وبسایت ها کهFaucet نامیده یشوند، با ارائ هی آدرسخود در شبکه ی آزمایشی به آن ها، به شما بی تکو ن ی دهند و ی توانید با آن ها موارد خواس ه شده درا ن تمر ن را انجام دهید. برخی ازFaucet های شناخ ه شده در بیت کو ن عبار ند از:
)1 https://coinfaucet.eu/en/btc-testnet
)2 https://bitcoinfaucet.uo1.net/
)3 https://testnet-faucet.mempool.co/
)4 https://kuttler.eu/en/bitcoin/btc/faucet/
برای مشاهده ی زنج ره ی بلوکی شبکه ی آزمایشی بیت کو ن، ی توانید از مرورگ رهای زنج ره ی بلوکی ز راستفاده کنید:
)1 https://www.blockchain.com/explorer?view=btc-testnet
)2 https://blockchair.com/bitcoin/testnet
)3 https://live.blockcypher.com/btc-testnet/
)4 https://blockstream.info/testnet/
قسمت اول: تولید آدرس
اول ن قدم در شروع کار با شبکه ی آزمایشی بیت کو ن، تولید یک آدرس معتبر است. ز را برای دریافتول ابتدا ی بایست یک آدرس معتبر تولید کنید و سپس از آن استفاده کرده و تراکنش های لازم راانجام دهید. در بیت کو ن آدرس با فرمت مشخصی تولید ی گردد که در آن از توابع رمزنگاری دره مسازSHA-256 وRIPEMD-160 استفاده ی گردد.
سوال ۱) کدی به زبان پایتون بنویسید ا برای شبکه ی آزمایشی، آدرس تولید کند. خروجی ا ن کدی بایست یک آدرس به صورتBase58 و کلید خصوصی م ناظر با آن به فرمWIF باشد. چهتفاوتی میان آدرس های شبکه ی اصلی و آزمایشی وجود دارد؟
سوال ۲) کدی بنویسید که یک آدرس و ژه (Vanity Address) تولید کند. ا ن کد با دریافت ۳کاراکتر، باید آدرسی تولید کرده که با ا ن ۳ کاراکتر شروع شود (با توجه به اینکه کاراکتر اولآدرس مطا ق با فرمت بیت کو ن دارای مقاد ر مشخصی است، ۳ کاراکتر دریافت شده باید درجایگاه های دوم ا چهارم در آدرس ظاهر شوند). خروجی ا ن کد ی بایست یک آدرس به صورتBase58 و کلید خصوصی م ناظر با آن به فرمWIF باشد.
توجه کنید که فرآیند تولید آدرس یبایست به صورت کامل توسط شما یاده سازی گردد استفاده ازکد های موجود در اینترنت مجاز نیست و نها برای توابع رمزنگاری، تولید اعداد تصادفی، تبد ل مبناها وسا ر نیا زهای جان یی توانید از ک ابخان ههای موجود استفاده کنید. برای هر سوال یک فا ل پایتون ارائهدهید و توضیحات لازم را ارائه دهید.
قسمت دوم: انجام تراکنش
برای انجام تراکنش در شبکه ی آزمایشی بیت کو ن، از ک ابخانه یpython-bitcoinlib استفاده ی کنیم.
ا ن ک ابخانه دارای توابع مخ لف برای ایجاد انواع تراکنش است. برای انجام ا ن قسمت از تمر ن، ابتدابا نحوه ی کار کردن ماش ن پش ه ای بیت کو ن وScript ها و دستورات آن از روی منابعی که در انتهامعرفی شده است و یا سا ر منابع معتبر، آشنا ی لازم را یدا کنید. با توجه به اینکه برای انجام تراکنشدر بیت کو ن، نیاز به اتصال به شبکه ی توز ع شده ی آن است، برای راحتی کار در ا ن تمر ن، تراکنش هابهAPI ها ی که توسط برخی از وب سایت های مرورگر زنج ره ی بلوکی ارائه شده است، ارسال ی شود وآن ها به نیابت از شما، تراکنش را در شبکهBroadcast ی کنند. برای شروع یک کد اس ارتر با عنوانtransaction.py قرار داده شده است که با استفاده از آن ی توانید یک تراکنش با یک ورودی و یکخروجی از نوعP2PKH ایجاد کنید. همچن ن در کدutil.py برخی توابع کاربردی ایجاد شده است کهآدرسAPI مربوط بهPush TX یکی از وب سایت های معروف ن ز در آن قرار داده شده است که درصورت لزوم یتوانید آن را تغ ر داده و تراکنش ها را به سا رAPI های موجود ارسال کنید. در توابعمشخص شده در فا لtransaction.py ، قسمتهای مربوط بهscriptSig وscriptPubKey را با دادههاو دستورات مناسب در قسمتreturn کامل کنید ا بتوانید یک تراکنش ساده با آن انجام دهید. بااستفاده از کد های قسمت اول تمر ن و یا استفاده از تولی دکننده های آنلا ن آدرس، برای شبک هیآزمایشی بی تکو ن آدرس ایجاد کرده (آدرس مورد استفاده را به همراه کلید خصوصی آن در گزارش خودذکر کنید) و پس از دریافت ول ازFaucet ها، تراکنش های ز ر را انجام دهید (لازم است برای هر سوال،علاوه بر توضیحات لازم، ۲ فا ل پایتون که در واقع نسخ هها ی از فا لtransaction.py هس ند ارائهدهید که یکی برای تراکنش ایجادUTXO های مورد نظر و دیگری برای تراکنش خرج کردن آن ها باشد):
سوال ۱) تراکنشی با یک ورودی و دو خروجی ایجاد کنید که خروجی اول آن توسط هیچکس قابلخرج شدن نباشد و خروجی دوم آن توسط هر شخصی قابل خرج شدن باشد. در تراکنشی دیگرخروجی قابل خرج ا ن تراکنش را خرج کرده و به آدرس اصلی خود به صورت خروجیP2PKH
باز گردانید.
سوال 2) سه آدرس جدید تولید کنید و مشخصات آن را در گزارش ذکر کنید. تراکنشی ایجاد کنیدکه یک ورودی و یک خروجی داش ه باشد که خروجی آن از نوعP2MS یاMultisig بوده وتوسط ۲ نفر از ا ن ۳ آدرس آن قابل خرج شدن باشد. در تراکنشی دیگر ا ن خروجی را خرج کردهو ول آن را به آدرس اصلی خود بازگردانید.
سوال 3) دو عدد اول م ال بزنید و آن دو را در گزارش خود درج کنید. حاصل جمع و حاصلتفر ق آن ها را حساب کنید. یک تراکنش با یک ورودی و یک خروجی تولید کنید به گون های که درخروجی آن، حاصل جمع و حاصل تفر ق ا ن دو عدد به همراه دستورهای لازم درscriptPubKey قرار گرف ه باشد به گون های که نها فردی بتواند ا نUTXO را خرج کند که هردوی ا ن اعداد را داش ه باشد. سپس یک تراکنش دیگر ایجاد کنید که در ورودی آن درقسمتscriptSig ، با ارائ هی ا ن دو عدد اول، بتواندUTXO را خرج کند و ول دوباره به حساباصلی شما برگردد.
سوال 4) یک تراکنش ایجاد کنید که یک ورودی و دو خروجی داش ه باشد که یکی از آنخروج یها توسط ه چ فردی به ه چ عنوان قابل خرج کردن نباشد و یکی از ا ن خروجی هاتوسط تما ی اشخاص قابل خرج کردن باشد.
لازم است که در تما ی سوالات مشخصات کامل آدرس های استفاده شده شامل کلید خصوصی آن هابه فرمWIF و شناسه ی تراکنش ها را به طور کامل در گزارش خود ذکر کنید.
قسمت سوم: استخراج بلوک
در ا ن بخش با فرآیند استخراج بلوک و ساخ ار بلوک به صورت عملی آشنا ی شوید. با توجه به اینکهفرآیند استخراج احتیاج به تجه زات محاسباتی بسیار قوی دارد، ا ن کار را به صورت متفاوتی انجامخواهید داد. ا ن بخش ی بایست بر روی یکی از بلوک های قدی ی در بیت کو ن، یک انشعاب (Fork)ایجاد کنید.
ابتدا بلوکn را در نظر بگ رید. ا ن بلوک یکی از بلوک های قدی ی روی زنج ره ی بلوکی شبکه ی اصلیبی تکو ن است. شماره ی بلوک انتخا ی میبایست، ۴ رقم سمت راست شماره ی دانشجو ی شمای باشد.به طور م ال اگر شماره ی دانشجو ی شما 810198765 است، بلوک 8765 را انتخاب کنید.
حال باید بلوکn+1 (بلوک 8766) را طوری بر روی ا ن بلوک بنا کنید که دارای شرایط ز ر باشد:
● دارای نها یک تراکنش باید که آن تراکنش همان تراکنشcoinbase است که پاداش بلوک را بهشما تخصیص یدهد.
● در متنdata coinbase که در تراکنشcoinbase قرار دارد، باید شماره ی دانشجو ی خود را بههمراه نام و نام خانوادگی خود به صورتASCII درج کنید. به طور م ال شمار هی دانشجو ی810198765 با نام ام ر ام ری به صورتASCII وHex به ا ن صورت یباشد:
0x383130313938373635416d6972416d697269 :که معادل متن ز ر است
810198765AmirAmiri
● تراکنشcoinbase که حاوی پاداش استخراج است، نها شامل یک خروجی باشد که به یکآدرس معتبر در شبک هی اصلی بیت کو ن اختصاص داده شود. برای تولید آدرس یتوانید ازک دهای قسمت اول تمر ن و یا سای تهای آنلا ن تولید آدرس بیت کو ن استفاده کنید. (مقدارپاداش باید مطا ق رو کل بیت کو ن تع ن گردد)
● سا ر بخش های بلوک مانند هش بلوک قبلی و هش درخت مرکل باید به درستی نظیم گردد.
در واقع بلوک باید به صورت صح ح ایجاد شده و توسط سا رminer ها قابلیتvalidate شدنداش ه باشد.
● با نظیمnonce به گونه ای بلوک را استخراج کنید که هش بلوک در فرمتhex با ۴ صفر (۱۶صفر به صورت بیتی) شروع شود.
کدی بنویسید که با دریافت بلوکn ، مطا ق شرایط گف ه شده در بالا، بلوکn+1 را استخراج کرده واطلاعات بلوک استخراج شده شامل:
● تما ی اطلاعات و فیلد های ذخ ره شده در بلوک به صورتhuman readable (مشابهسایت های مرورگر زنج ره ی بلوکی)
● هش بلوک به صورتhex
● کل بلوک به صورتraw و به فرمتhex
را نمایش دهد. برای دریافت بلوکn (مطا ق شماره دانشجو ی که در بالا توض ح داده شد)، ی توانید ازسایت های مرورگر زنج ره ی بلوکی استفاده کرده و بلوک را به صورتhex و به طور دستی دریافت کنید وhex آن را صورت دستی به عنوان ورودی به برنامه ی خود بدهید. برای آشنا ی با ساخ ار بلوک به لینکمراجع کنید.
به طور م ال بلوک 8765 از طر ق آدرس ز ر به صورتraw hex قابل دریافت است:
https://blockchain.info/block/8765?format=hex
در ا ن بخش یتوانید از تما ی ک ابخانه های موجود استفاده کنید. اما فرآیند ساخت درخت مرکل واستخراج بلوک ی بایست به صورت کامل توسط شما یا دهسازی شود. همچن ن ساخت بلوک بهصورتlocal کفایت کرده و نیازی به ثبت آن در شبکه نیست.
برای اطلاعات بیشتر در مورد فرمWIF به لینک ز ر مراجعه کنید:https://learnmeabitcoin.com/technical/wif
برای اطلاعات بیشتر در مورد آدرسهای بیت کو ن به لینک ز ر مراجعه کنید:https://en.bitcoin.it/wiki/Address
برای اطلاعات بیشتر در مورد یشوند آدرس در بی تکو ن به لینک ز ر مراجعه کنید:https://en.bitcoin.it/wiki/List_of_address_prefixes
برای آشنا ی بیشتر با دستورات بی تکو ن و نحوه ی کار کردن ماش ن پش ه ای آن به لینک ز ر مراجعهکنید:https://en.bitcoin.it/wiki/Scriptبرای اطلاعات بیشتر در مورد ساخ ار بلوک به لینک ز ر مراجعه کنید:https://en.bitcoin.it/wiki/Block
نکات تمر ن
1. مهلت انجام ا ن تمر ن ا روز دوشنبه اول خرداد است.
2. در ا ن تمر ن، گزارش کت ی شما ملاک اصلی نمره دهی یباشد. از ا ن رو تما ی موارد شاملتوضیحات لازم و موارد خواس ه شده، روند انجام، ن ا ج حاصل، آدرس های به کار رف ه به همراهکلید خصوصی آن ها و شناسه ی تراکنش ها را در گزارش ارائه دهید. در کنار گزارش کت ی، ارسالکد ها ن ز الزا ی ی باشد.
3. برای ثبت تراکنش در زنج ره ی بلوکی، باید مبلغی مناس ی را به عنوان کارمزد تراکنش ب ردازید.
لذا در نظیم مقاد ر ورودی و خروجی تراکنش، ا ن مساله را لحاظ کنید ا تراکنش شما باموفقیت در زنج ره ی بلوکی شبکه ی آزمایشی بیت کو ن درج گردد. اخ لاف مجموع مقاد رورودی و خروجی تراکنش به عنوان کارمزد تراکنش برای استخراج کننده ی آن در نظر گرف هی شود.
4. نمره ی سوالاتی که مربوط به انجام تراکنش است، نها در صورت ثبت تراکنش های خواس ه شدهدر زنج ره ی بلوکی شبکه ی آزمایشی بی تکو ن تعلق ی گ رد و در صورت عدم ثبت شدن تراکنشدر زنج ره ی بلوکی و یا عدم استخراج آن، نمره ای دریافت ن ی کنید. از ا ن رو از ثبت شدن کاملتراکنش ها در زنج ره ی بلوکی و استخراج آن توسط ماین رها و پایدار شدن آن (س ری شدن ۶بلوک) اطمینان حاصل نما ید و شناسه ی تراکنش ها را در گزارش خود ارائه دهید.
5. در سوالاتی که مربوط به انجام تراکنش است، ارائه کلید خصوصی به صورتWIF برایآدرس ها ی که در انجام تراکنش ها از آن استفاده کردید الزا ی ی باشد، ز را نشان دهنده ی آناست که ا ن آدرس ها متعلق به شماست. در غ ر ا ن صورت تراکنش متعلق به فرد دیگریلقی گردیده و نمر های بابت آن دریافت نخواهید کرد.
6. فا ل نها ی خود را شامل گزارش کامل به صورتPDF و همچن ن کد های خود به صورتجداگانه برای هر سوال را در قالب یک فا ل فشرده یzip با درج شماره ی دانشجو ی به صورتStudentID.zip ارسال کنید.
7. در صورت داشتن هر گونه سوال، رسش و یا ابهام، از طر ق ایم ل
. رسش های خود را مطرح کنیدshayanhamidi2000@gmail.com
Reviews
There are no reviews yet.