ویرگول
ورودثبت نام
حمید رضا مرادی
حمید رضا مرادیBlockchain based protocols, DeFi, mail: [email protected]
حمید رضا مرادی
حمید رضا مرادی
خواندن ۴ دقیقه·۶ سال پیش

چرا در بیت‌کوین به جای استفاده از public key از آدرس ها استفاده میکنیم؟

(سلام، این پست دراصل رشته توییتی هستش که تو توییتر نوشتم ولی اینجا به صورت یک پارچه جمعشون کردم)

داستان از این توییت «جیب» شروع شد

و اما جواب من:


در اصل به خود 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<br/>
حالا که فکرش رو میکنم قراره خیلی طولانی بشه :|

خب بیایید الان انجام شدن یک تراکنش رو با این دید که یه 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 بایت هستش رو ذخیره میکنیم

اگه زده به سرتون و میخوایید کد های بیت‌کوین رو بخونید پیشنهاد میکنم تست های ریپتو اصلی رو نگاه کنید بسی دید خوبی از معماری بیت کوین کور به آدم میده با پایتون هم هست مناسب ما جوونای روغن نباتی :)))))


اها آقا یه چیزی هم داخل پرانتز بگم دونستن این ها خوبه ولی اصلا لازم نیست برای یوزری که صرفا از این فضا داره استفاده میکنه، ترید میکنه و ...


نظر ايلور هم درباره جمله آخر جالب بود و جای فکر کردن داره:


bitcoinبیت‌کوینبلاک‌چینblockchain
۵
۰
حمید رضا مرادی
حمید رضا مرادی
Blockchain based protocols, DeFi, mail: [email protected]
شاید از این پست‌ها خوشتان بیاید