<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های حمید رضا مرادی</title><link>https://virgool.ir/feed/@hamidrezamoradi</link><description>Blockchain based protocols, DeFi, mail:  Hamid@europe.com</description><language>fa</language><pubDate>2026-11-11 16:00:11</pubDate><image><url>https://files.virgool.ir/upload/users/736929/avatar/Xg9z3J.jpeg</url><title>حمید رضا مرادی</title><link>https://virgool.ir/@hamidrezamoradi</link></image><item><title>چرا در بیت‌کوین به جای استفاده از public key از آدرس ها استفاده میکنیم؟</title><link>https://virgool.ir/@hamidrezamoradi/bitcoin-stack-machine-paw7fskgbehh</link><description>(سلام، این پست دراصل رشته توییتی هستش که تو توییتر نوشتم ولی اینجا به صورت یک پارچه جمعشون کردم)داستان از این توییت «جیب» شروع شدو اما جواب من:در اصل به خود public key هم میشه پرداخت کرد (قفل کرد) (p2pk) و فکر کنم تراکنش های کوین بِیس p2pk باشن1- آدرس ها طول کمتری از پابلیک کی ها دارن و کار باهاشون راحت تره و اکثر استاندارد ها برای اون ها تعریف شده و...  address=base58(version prefix +(sha256(rapid160(public key)))«البته آدرس های لگاسی base58 هستن، آدرس های سگویتی base32 هستن»2-یک لایه امنیتی بیشتر به ما میدن اگه یه روزی با یه الگوریتمی (شاید کوانتومی) مسئله خم بیضوی قابل حل بشه ما میتونیم به این امیدوار باشیم که hash همچنان یک طرفه مونده و غیر بازگشتی هستش و....3 - یادمه یه ربطی هم به حجم و محل نگهداری utxo ها پیدا میکرد که الان جزئیاتش یادم نیستچند روز پیش موقع مطالعه کردن یک موضوع دوباره به این مفاهیم برخوردم و نیاز داشتم عمیق تر بررسی ایش کنم و این کار رو هم کردم :)))و بعد از مطالعه تو همون شب تو رشته توییتی همین مباحث رو عمیق تر بررسی کردم که این جا هم میزارمش الان:چرا تو #بیتکوین برای پرداخت مستقیما از public key استفاده نمیکنیم و چرا جای اون از آدرس ها استفاده میکنیم ؟ #رشتو[جواب کوتاه  تو اون توییتی که تو بالا کوتش کردم هست ، اینجا کار طولانیه حوصله کن :)) ] تو بیت‌کوین تراکنش های مختلفی وجود داره  p2pk(pay to public key) p2pkh(pay to public key hash) p2sh(pay to script hash) p2wpkh(pay to witness public key hash) p2wsh(pay to witness script hash)(دوتای آخری مربوط به segwit هستش) تو گذشته حتی  p2ip(pay to ip) هم داشتیم که تو نسخه v0.8.0 حذف شده (سال 2013) https://bitcointalk.org/index.php?topic=9334.0خب این ها چی هستن ؟هر کدومشون یک نوع اسکریپتی هستن که stack ماشین بیت‌کوین اون ها رو میتونه بفهمه و براساس اون ها تصمیم بگیره که آیا تراکنش، تراکنش درستی هست یا نهاستک ماشین بیت‌کوین چیه دیگه؟  هممون تقریبا اسم EVM رو شنیدیم، EVM یه ماشینی(البته که نرم افزاری) هستش که حالت(state) دنیای اتریوم رو عوض میکنه با توجه به تراکنش هایی که بهش وارد میشهنتیجه کار استک ماشین بیت‌کوین هم  باعث میشه یک سری utxo از حالت خرج نشده به حالت خرج شده برن و یک سری utxo جدید تو حالت(state) خرج نشده به وجود بیان (یا به زبون دیگه نتیجه کارش باعث میشه state دنیای بیت‌کوین تغییر بکنه)این استک ماشین بیت کوین مثل اتریوم یک سری Opcodes کد ها رو میفهمه  لیست Opcodes اسکریپت بیت‌کوین(البته تو سافت فورک بعدی یعنی taproot به این آپ کد ها اضافه میشه) : https://en.bitcoin.it/wiki/Script#Opcodes…لیست Opcodes کد های EVM اتریوم:https://github.com/crytic/evm-opcodes&lt;br/&gt;حالا که فکرش رو میکنم قراره خیلی طولانی بشه :|خب بیایید الان انجام شدن یک تراکنش رو با این دید که یه stack based ماشینی وجود داره تو بیت‌کوین بررسی کنیمهر تراکنش بیت‌کوینی این دوبخش رو داره (به جزء تراکنش های کوین بیس) input, output  توی بخش input من هش تراکنش قبلی رو که میخوام خرجش کنم به علاوه چند تا دیتا دیگه هستش رو برمیدارم و سعی میکنم بازشون کنممگه قفل شدن که میخوای بازشون کنی؟ بله قفل شدن(وقتی یکی به آدرس شما بیت‌کوین میفرسته دراصل یه مقداری رو برای آدرس شما قفل کرده که شما میتونید با کلید هاتون رو اون باز کنید و خرج کنید)  توی بخش output هم اون utxo یا utxo هایی که تو بخش input باز کردم رو برای مقصد قفل میکنمبرگردیم به اول داستان، انواع تراکنش هایی که داریم: p2pk,p2pkh,p2sh,p2wpk,p2wsh وقتی میگیم p2pk یعنی اون utxo رو با پابلیک کی دریافت کننده قفل کردیم  وقتی میگیم p2pkh یعنی اون utxo رو با هش پابلیک کی (آدرس هایی که با 1 شروع میشن) دریافت کننده قفل کردیموقتی میگیم p2sh یعنی اون utxo رو با هش یه اسکریپت قفل کردیم (ولت های مولتی سیگ)(آدرس هایی که با 3 شروع میشن) ...تو دنیای بیت‌کوین به قفل کردن ScriptPubKey و به باز کردن ScriptSig هم گفته میشهScriptPubKeyتوی بلاکچین(utxo) ذخیره میشه اما ScriptSig وقتی که دریافت کننده قصد خرج کردن کوین هاش رو داشته باشه تازه وارد دنیای بیت‌کوین و نود های بیت‌کوین میشه نه قبلشلایه امنیتی بیشتر در موقعی که ec بشکنه ؟ اگه کنجکاو باشید الان برید سرچ کنید میبینید که موقع خرج چه تراکنش های p2pk و چه تراکنش های p2pkh تو اسکریپتش پابلیک کی هستش و ادامه داستانپوینت داستان اینجاست که توی p2kh یا همون موقع استفاده کردن از آدرس ها ما public key مون رو تا موقعی که نخوایم تراکنش رو خرج کنیم به شبکه افشا نمیکنیمو یا به قولی  توی p2pk پابلیک کی توی ScriptPubKey بود و توی p2pkh توی ScriptSig هستشو اون داستان که گفتم استفاده از آدرس ها باعث میشه حجم utxo ها کمتر بشه هم به همین مربوطه توی  p2pk  ما خود پابلیک کی که حجمش33 بایت هستش رو ذخیره میکنیم ولی توی  p2pkh هشِ هشِ پابلیک کی که حجمش 25 بایت هستش رو ذخیره میکنیماگه زده به سرتون و میخوایید کد های بیت‌کوین رو بخونید پیشنهاد میکنم تست های ریپتو اصلی رو نگاه کنید بسی دید خوبی از معماری بیت کوین کور به آدم میده با پایتون هم هست مناسب ما جوونای روغن نباتی :)))))اها آقا یه چیزی هم داخل پرانتز بگم دونستن این ها خوبه ولی اصلا لازم نیست برای یوزری که صرفا از این فضا داره استفاده میکنه، ترید میکنه و ...نظر ايلور هم درباره جمله آخر جالب بود و جای فکر کردن داره:</description><category>حمید رضا مرادی</category><author>حمید رضا مرادی</author><pubDate>Sun, 21 Mar 2021 17:59:04 +0330</pubDate></item></channel></rss>