قراردادها معاملات هستند که از سیستم بیت کوین غیرمتمرکز برای اجرای توافق های مالی استفاده می کنند. قراردادهای بیت کوین اغلب می توانند برای به حداقل رساندن وابستگی به نمایندگان خارج از کشور مانند سیستم دادگاه انجام شوند که به طور قابل توجهی خطر برخورد با اشخاص ناشناخته در معاملات مالی را کاهش می دهد.
مقدمه¶
زیر بخش های زیر انواع قراردادهای بیت کوین را که قبلاً در حال استفاده است ، توصیف می کند. از آنجا که قراردادها با افراد واقعی سروکار دارند ، نه فقط معاملات ، آنها در قالب داستان زیر تنظیم می شوند.
علاوه بر انواع قرارداد که در زیر شرح داده شده است ، بسیاری از انواع قراردادهای دیگر پیشنهاد شده است. چندین مورد از آنها در صفحه قراردادهای ویکی بیت کوین جمع آوری شده است.
سپردن و داوری
چارلی-این مشتری می خواهد محصولی را از Bob-the-Businessman خریداری کند ، اما هیچ یک از آنها به شخص دیگری اعتماد ندارند ، بنابراین آنها از یک قرارداد استفاده می کنند تا اطمینان حاصل کنند که چارلی کالاهای خود را دریافت می کند و باب پرداخت خود را دریافت می کند.
یک قرارداد ساده می تواند بگوید که چارلی Satoshis را برای خروجی خرج می کند که تنها در صورتی که می توان هزینه کرد ، در صورتی که چارلی و باب هر دو ورودی را امضا می کنند. این بدان معناست که باب حقوق دریافت نمی کند مگر اینکه چارلی کالاهای خود را بدست آورد ، اما چارلی نمی تواند کالا را دریافت کند و پرداخت خود را حفظ کند.
این قرارداد ساده در صورت بروز مشاجره کمک زیادی نمی کند ، بنابراین باب و چارلی برای ایجاد یک قرارداد سپاه ، کمک آلیس-آربیتور را برای ایجاد یک قرارداد سپاه ثبت می کنند. چارلی Satoshis خود را برای خروجی می گذراند که تنها در صورتی که دو نفر از این سه نفر ورودی را امضا کنند ، می تواند هزینه کند. اکنون چارلی می تواند باب را بپردازد اگر همه چیز خوب باشد ، باب می تواند در صورت بروز مشکلی ، پول چارلی را بازپرداخت کند ، یا آلیس می تواند داوری کند و تصمیم بگیرد که در صورت بروز اختلاف ، چه کسی باید Satoshis را دریافت کند.
برای ایجاد یک خروجی چند نماد (Multisig) ، هرکدام به دیگران کلید عمومی می دهند. سپس باب اسکریپت بازپرداخت P2SH Multisig را ایجاد می کند:
(Opcodes برای فشار دادن کلیدهای عمومی بر روی پشته نشان داده نشده است.)
OP_2 و OP_3 اعداد واقعی 2 و 3 را روی پشته فشار دهید. OP_2 مشخص می کند که 2 امضا برای امضای لازم است. OP_3 مشخص می کند که 3 کلید عمومی (UNHASHED) ارائه می شود. این یک اسکریپت 2 از 3 Multisig Pubkey است ، که به طور کلی تر یک اسکریپت Pubkey M-N-N نامیده می شود (جایی که M حداقل امضاهای تطبیق مورد نیاز و N در تعداد کلیدهای عمومی ارائه شده است).
باب اسکریپت بازخرید را به چارلی می دهد تا مطمئن شود کلید عمومی او و کلید عمومی آلیس گنجانده شده است. سپس او اسکریپت redeem را هش می کند تا یک اسکریپت بازخرید P2SH ایجاد کند و ساتوشی را به آن پرداخت می کند. باب می بیند که پرداخت به زنجیره بلوک اضافه می شود و کالا را ارسال می کند.
متاسفانه کالا در حمل و نقل کمی آسیب می بیند. چارلی خواهان بازپرداخت کامل است، اما باب فکر می کند بازپرداخت 10٪ کافی است. آنها برای حل مسئله به آلیس مراجعه می کنند. آلیس از چارلی مدرک عکس می خواهد به همراه یک کپی از فیلمنامه بازخریدی که باب ساخته و چارلی آن را بررسی کرده است.
پس از بررسی شواهد، آلیس فکر می کند که بازپرداخت 40٪ کافی است، بنابراین یک تراکنش با دو خروجی ایجاد و امضا می کند، یکی که 60٪ از ساتوشی ها را صرف کلید عمومی باب می کند و دیگری که 40٪ باقی مانده را برای کلید عمومی چارلی خرج می کند..
در اسکریپت امضا، آلیس امضای خود و یک کپی از اسکریپت بازخرید سریالی هش نشده ای را که باب ایجاد کرده بود قرار می دهد. او یک کپی از تراکنش ناقص را به باب و چارلی می دهد. هر یک از آنها می تواند آن را با اضافه کردن امضای خود برای ایجاد اسکریپت امضای زیر تکمیل کند:
(کدهای عملیاتی برای فشار دادن امضاها و بازخرید اسکریپت در پشته نشان داده نمی شوند. OP_0 راه حلی برای خطای یک به یک در اجرای اصلی است که باید برای سازگاری حفظ شود. توجه داشته باشید که اسکریپت امضا باید امضاهایی را در همان حالت ارائه کند. سفارش دهید همانطور که کلیدهای عمومی مربوطه در اسکریپت بازخرید ظاهر می شوند. برای جزئیات به توضیحات در "OP_CHECKMULTISIG" مراجعه کنید.)
هنگامی که تراکنش در شبکه پخش می شود، هر همتا اسکریپت امضا را در برابر خروجی P2SH که چارلی قبلا پرداخت کرده بود بررسی می کند و اطمینان حاصل می کند که اسکریپت بازخرید با هش اسکریپت بازخرید مطابقت دارد. سپس اسکریپت بازخرید با استفاده از دو امضا به عنوان داده ورودی ارزیابی می شود. با فرض اعتبارسنجی اسکریپت بازخرید، دو خروجی تراکنش در کیف پول های باب و چارلی به عنوان موجودی قابل مصرف نشان داده می شوند.
با این حال، اگر آلیس تراکنشی را ایجاد کرده و امضا کند که هیچ کدام از آنها با آن موافقت نمی کنند، مثلاً تمام ساتوشی ها را برای خودش خرج می کند، باب و چارلی می توانند یک داور جدید پیدا کنند و معامله ای را امضا کنند که ساتوشی ها را برای بازخرید اسکریپت 2 از 3 multisig دیگر خرج می کند. هش، این یکی شامل کلید عمومی از آن داور دوم است. این بدان معناست که باب و چارلی هرگز نباید نگران دزدیدن پول داورشان باشند.
منبع: BitRated یک رابط خدمات داوری چند علامتی با استفاده از HTML/JavaScript در یک وب سایت دارای مجوز GNU AGPL ارائه می کند.
کانال ریزگرد
آلیس همچنین پست های تالار تفریحی پاره وقت برای باب کار می کند. هر وقت شخصی به انجمن شلوغ باب ارسال می کند ، آلیس پست را کم می کند تا مطمئن شود که این توهین آمیز یا هرزنامه نیست. افسوس ، باب غالباً فراموش می کند که او را بپردازد ، بنابراین آلیس خواستار پرداخت بلافاصله پس از هر پستی است که وی تصویب یا رد می کند. باب می گوید که او نمی تواند این کار را انجام دهد زیرا صدها پرداخت کوچک برای هزاران ساتوشی در هزینه های معامله برای او هزینه خواهد کرد ، بنابراین آلیس پیشنهاد می کند که از یک کانال ریزگردها استفاده می کنند.
باب کلید عمومی خود را از آلیس می خواهد و سپس دو معاملات ایجاد می کند. اولین معامله 100 میلی لیتر کوئین را به خروجی P2SH پرداخت می کند که اسکریپت بازخرید Multisig 2 از 2 آن نیاز به امضایی از آلیس و باب دارد. این معامله اوراق قرضه است. پخش این معامله باعث می شود آلیس Millibitcoins را گروگان بگیرد ، بنابراین باب این معامله را هم اکنون خصوصی نگه می دارد و یک معامله دوم ایجاد می کند.
معامله دوم پس از تأخیر 24 ساعته که توسط LockTime اجرا می شود ، تمام Millibitcoins اولین معامله (منهای یک معامله) را به BOB می رساند. این معامله بازپرداخت است. باب نمی تواند معامله بازپرداخت را به خودی خود امضا کند ، بنابراین او آن را به آلیس می دهد تا همانطور که در تصویر زیر نشان داده شده است ، امضا کند.
کانال میکروپاری مثال ¶
آلیس بررسی می کند که قفل معاملات بازپرداخت در آینده 24 ساعت است ، آن را امضا می کند و یک نسخه از آن را به باب باز می گرداند. وی سپس از باب برای معامله اوراق قرضه می خواهد و بررسی می کند که معامله بازپرداخت خروجی معامله اوراق را خرج می کند. او هم اکنون می تواند معامله اوراق قرضه را به شبکه پخش کند تا اطمینان حاصل کند که باب باید قبل از هزینه بیشتر Millibitcoins خود منتظر بماند تا قفل زمان منقضی شود. باب در واقع تاکنون چیزی صرف نکرده است ، به جز احتمالاً هزینه معامله اندک ، و او قادر خواهد بود برای بازپرداخت کامل ، معاملات بازپرداخت را در 24 ساعت پخش کند.
اکنون ، هنگامی که آلیس کارهایی را به ارزش 1 Millibitcoin انجام می دهد ، از باب می خواهد که نسخه جدیدی از معامله بازپرداخت را ایجاد و امضا کند. نسخه دو معامله 1 Millibitcoin را به آلیس و 99 دیگر به BOB می اندازد. این یک قفل ندارد ، بنابراین آلیس می تواند آن را امضا کند و هر زمان که بخواهد آن را خرج کند.(اما او بلافاصله این کار را نمی کند.)
آلیس و باب این مراحل کار و پرداخت را تکرار می کنند تا اینکه آلیس برای روز به پایان برسد ، یا تا زمانی که قفل زمان منقضی شود. آلیس نسخه نهایی معامله بازپرداخت را امضا می کند و آن را پخش می کند ، به خودش پرداخت می کند و هرگونه تعادل باقی مانده را به باب بازپرداخت می کند. روز بعد ، هنگامی که آلیس کار خود را شروع می کند ، آنها یک کانال ریزپردازی جدید ایجاد می کنند.
اگر آلیس نتواند نسخه ای از تراکنش بازپرداخت را قبل از پایان قفل زمانی آن پخش کند، باب می تواند اولین نسخه را پخش کند و بازپرداخت کامل را دریافت کند. این یکی از دلایلی است که کانال های پرداخت خرد برای پرداخت های کوچک مناسب تر هستند - اگر سرویس اینترنت آلیس برای چند ساعت نزدیک به پایان قفل زمانی خاموش شود، ممکن است او از پرداخت خود فریب بخورد.
چکش خواری تراکنش، که در بالا در بخش تراکنش ها مورد بحث قرار گرفت، دلیل دیگری برای محدود کردن ارزش کانال های پرداخت خرد است. اگر کسی از انعطاف پذیری تراکنش برای شکستن پیوند بین دو تراکنش استفاده کند، آلیس می تواند 100 میلی بیت کوین باب را گروگان نگه دارد، حتی اگر هیچ کاری انجام نداده باشد.
برای پرداخت های بزرگ تر، کارمزد تراکنش های بیت کوین به عنوان درصدی از ارزش کل تراکنش بسیار پایین است، بنابراین حفاظت از پرداخت ها با تراکنش های مجزا که بلافاصله پخش می شوند، منطقی تر است.
منبع: کتابخانه bitcoinj جاوا مجموعه کاملی از توابع پرداخت خرد، اجرای نمونه و یک آموزش را تحت مجوز آپاچی ارائه می دهد.
Coin Join¶
آلیس نگران حریم خصوصی خود است. او می داند که هر تراکنش به زنجیره بلوک عمومی اضافه می شود، بنابراین وقتی باب و چارلی به او پول پرداخت می کنند، هر کدام به راحتی می توانند آن ساتوشی ها را ردیابی کنند تا بدانند چه آدرس های بیت کوین پرداخت می کند، چقدر به آنها پرداخت می کند و احتمالاً چند ساتوشی باقی مانده است.
آلیس یک جنایتکار نیست، او فقط می خواهد انکار قابل قبولی در مورد اینکه ساتوشی هایش را کجا خرج کرده و چه تعداد از او باقی مانده است، بنابراین او سرویس ناشناس ماندن Tor را در رایانه خود راه اندازی می کند و به عنوان "AnonGirl" وارد یک چت روم IRC می شود.
همچنین در چت روم «نمو» و «نمینم» هستند. آنها به طور جمعی توافق می کنند که ساتوشی ها را بین یکدیگر منتقل کنند، بنابراین هیچ کس به جز آنها نمی تواند به طور قابل اعتماد تعیین کند که چه کسی کدام ساتوشی را کنترل می کند. اما آنها با یک دوراهی روبرو هستند: چه کسی ساتوشی های خود را ابتدا به یکی از دو شخص مستعار دیگر منتقل می کند؟قرارداد به سبک CoinJoin که در تصویر زیر نشان داده شده است، این تصمیم را آسان می کند: آنها یک تراکنش واحد ایجاد می کنند که همه هزینه ها را به طور همزمان انجام می دهد و اطمینان می دهد که هیچ یک از آنها نمی توانند ساتوشی دیگران را بدزدند.
نمونه تراکنش CoinJoin ¶
هر یک از مشارکت کنندگان از طریق مجموعه ای از خروجی های معاملات ناآگاه (UTXOS) برای 100 میلی لیتر که می توانند هزینه کنند ، به دنبال جمع آوری خود هستند. آنها سپس هرکدام یک کلید عمومی جدید را تولید می کنند و جزئیات UTXO و PubKey Hash را به تسهیل کننده می دهند. در این حالت ، تسهیلگر Anongirl است. او معامله ای را ایجاد می کند که هر یک از UTXOS را به سه خروجی به اندازه یکسان اختصاص می دهد. یک خروجی به هش های PubKey هر یک از مشارکت کنندگان می رود.
سپس Anongirl ورودی های خود را با استفاده از Shighash_all امضا می کند تا اطمینان حاصل شود که هیچ کس نمی تواند جزئیات ورودی یا خروجی را تغییر دهد. او معامله جزئی امضا شده را به نمو می دهد که ورودی های خود را به همان روش امضا می کند و آن را به Neminem منتقل می کند ، که او نیز به همین روش امضا می کند. Neminem سپس معامله را به شبکه Bitcoin Peer-to-Peer پخش می کند و تمام Millibitcoins را در یک معامله واحد مخلوط می کند.
همانطور که در تصویر مشاهده می کنید ، هیچ راهی برای کسی به غیر از Anongirl ، Nemo و Neminem وجود ندارد که با اطمینان مشخص کنند چه کسی چه کسی را دریافت کرده است ، بنابراین آنها می توانند خروجی خود را با قابلیت اطمینان قابل قبول بگذرانند.
اکنون وقتی باب یا چارلی سعی می کنند معاملات آلیس را از طریق زنجیره بلوک ردیابی کنند ، آنها معاملات انجام شده توسط Nemo و Neminem را نیز مشاهده می کنند. اگر آلیس چند مورد دیگر را انجام دهد ، باب و چارلی ممکن است حدس بزنند که معاملات انجام شده توسط ده ها یا صدها نفر در واقع توسط آلیس انجام شده است.
تاریخچه کامل Satoshis آلیس هنوز در زنجیره بلوک است ، بنابراین یک بازپرس مصمم می تواند با افرادی که Anongirl با آن همکاری می کنند صحبت کند تا منشأ نهایی Satoshis خود را پیدا کند و احتمالاً Anongirl را به عنوان آلیس آشکار کند. اما در برابر هرکسی که به طور اتفاقی تاریخ زنجیره بلوک را مرور می کند ، آلیس قابلیت اطمینان قابل قبول را به دست می آورد.
تکنیک Coinjoin که در بالا توضیح داده شد ، برای شرکت کنندگان مبلغ کمی از Satoshis برای پرداخت هزینه معامله هزینه دارد. یک تکنیک جایگزین ، خریدار CoinJoin ، در واقع می تواند آنها را Satoshis نجات دهد و همزمان حریم خصوصی خود را بهبود بخشد.
Anongirl در اتاق چت IRC منتظر می ماند تا اینکه بخواهد خرید کند. او قصد خود را برای گذراندن ساتوشیس اعلام می کند و منتظر می ماند تا شخص دیگری بخواهد خرید کند ، احتمالاً از یک بازرگان متفاوت. سپس آنها ورودی های خود را به همان روشی که قبل از آن ترکیب می کنند ، اما خروجی ها را به آدرس های تجاری جداگانه تنظیم می کنند ، بنابراین هیچ کس قادر نخواهد بود فقط از تاریخ زنجیره ای بلوک که یکی از آنها آنچه را از بازرگانان خریداری کرده است ، بفهمد.
از آنجایی که در هر صورت مجبور به پرداخت هزینه تراکنش برای انجام خریدهای خود می شدند، AnonGirl و همکارانش هیچ چیز اضافی نمی پردازند - اما از آنجایی که آنها با ترکیب چندین تراکنش و صرفه جویی در بایت ها، سربار را کاهش دادند، ممکن است بتوانند مبلغی را بپردازند. کارمزد کل تراکنش کوچکتر، که هر یک از آنها مقدار کمی ساتوشی صرفه جویی می کند.
پیاده سازی های فعلی: از امروز، در سال 2018، JoinMarket و Wasabi Wallet پیاده سازی های عملیاتی CoinJoin برای بیت کوین هستند.
کوین جوین ها به سبک JoinMarket با طرحی که در بالا توضیح داده شد با تقسیم شرکت کنندگان به دو بخش متفاوت است: بازارسازان و خریداران بازار. سازندگان بازار در حال انتشار اهداف CoinJoin خود در یک اتاق IRC هستند و منتظر هستند تا متصدیان بازار پیشنهادات آنها را بپذیرند. هنگامی که یک گیرنده از راه می رسد، مجموعه ای از سازندگان را انتخاب می کند و یک تراکنش مشترک با آنها ایجاد می کند، در حالی که هزینه کمی نیز می پردازد. برخلاف طرح توصیف شده در بالا، این به طور خودکار اتفاق می افتد.
CoinJoins به سبک کیف پول Wasabi CoinJoins Chaumian نامیده می شود. از یک هماهنگ کننده CoinJoin استفاده می کند، جایی که همتایان مختلف می توانند ثبت نام کنند. هنگامی که تعداد از پیش تعریف شده شرکت کنندگان ثبت نام کردند، یک دور CoinJoin شروع می شود. در این طرح از امضاهای کور Chaumian برای جلوگیری از یادگیری هماهنگ کننده و همتایان استفاده می شود. یک مثال برای Chaumian CoinJoin تراکنش زیر است: 8fee07b90f26e85e22e87da13e1618cd9eeaf98f3f3774273c9307cd40ff98e8
کتاب آموزش بورس...
ما را در سایت کتاب آموزش بورس دنبال می کنید
برچسب : نویسنده : محمود استادمحمد بازدید : 40 تاريخ : دوشنبه 28 فروردين 1402 ساعت: 19:08