<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های علیرضا زجاجی</title>
        <link>https://virgool.io/feed/@AlirezaZojaji</link>
        <description>برنامه‌نویس و تحلیلگر سیستم، علاقمند به فناوری بلاکچین و قراردادهای هوشمند</description>
        <language>fa</language>
        <pubDate>2026-04-15 09:21:14</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/304531/avatar/2Ybl49.png?height=120&amp;width=120</url>
            <title>علیرضا زجاجی</title>
            <link>https://virgool.io/@AlirezaZojaji</link>
        </image>

                    <item>
                <title>قرارداد هوشمند: فراخوان تابع از قرارداد دیگر</title>
                <link>https://virgool.io/Solidity/%D9%82%D8%B1%D8%A7%D8%B1%D8%AF%D8%A7%D8%AF-%D9%87%D9%88%D8%B4%D9%85%D9%86%D8%AF-%D9%81%D8%B1%D8%A7%D8%AE%D9%88%D8%A7%D9%86-%D8%AA%D8%A7%D8%A8%D8%B9-%D8%A7%D8%B2-%D9%82%D8%B1%D8%A7%D8%B1%D8%AF%D8%A7%D8%AF-%D8%AF%DB%8C%DA%AF%D8%B1-odzww8qxqn2a</link>
                <description>اگر به عنوان یک برنامه‌نویس قرارداد هوشمند، نیاز داشتید که تابعی از یک قرارداد هوشمند دیگر را فراخوانی کنید، حتماً با این مشکل دست به گریبان بوده‌اید.مثلا ممکن است بخواهید یک توکن از نوع ERC20 (مانند تتر) را که اکنون متعلق به قرارداد هوشمندتان است، به آدرس دیگری منتقل کنید. در این مثال لازم است که تابع transfer از قرارداد هوشمند توکن مربوطه فراخوانی شود. در این گونه موارد راه‌های مختلفی پیش روی کاربر است که در این مقاله به بررسی آنها می‌پردازیم:استفاده از اینترفیس قرارداد دیگردر مثال فوق لازم است که ابتدا اینترفیسی از قرارداد هوشمند دوم بسازیم. منظور از interface قرارداد هوشمندی است که تابع‌های آن دارای محتوا یا بدنه نیستند و فقط قالب ورودی‌ها و خروجی‌های آن مشخص است.اگر با استاندارد ERC20 آشنا باشید، اینترفیس توکن‌های مبتنی بر این استاندارد به ترتیب زیر خواهد بود:interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint256) ;
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns(bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}در مثال فوق حرف I در ابتدای نام IERC20 مخفف Interface است.تذکر: اگر ما در قرارداد هوشمند خودمان، فقط با تابع خاصی مانند transfer سروکار داشته باشیم، می‌توانیم بقیه‌ی کد را حذف کنیم:interface IERC20 {
    function transfer(address recipient, uint256 amount) external returns (bool);
}حال فرض کنید مقداری از این توکن متعلق به قرارداد هوشمندی به نام Distribute است و می‌خواهیم در این قرارداد هوشمند مقداری از آن را به آدرس دیگری (مثلا آدرس فراخواننده‌ی تابع) منتقل کنیم.interface IERC20 {
    function transfer(address recipient, uint256 amount) external returns (bool);
}
contract Distribute {
    ...
    address tokenAddress = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4; // only example
    function transferToken(uint value) public {
        IERC20 token = IERC20(tokenAddress);
        token.transfer(msg.sender, value);
    }
    ...
}در مثال فوق آدرس قرارداد هوشمند توکن فوق در متغیر tokenAddress قرار می‌گیرد. در تابع انتقال توکن متغیری به نام token از نوع اینترفیس IERC20 تعریف می‌شود. مقدار این متغیر، تبدیل نوع یافته‌ی آدرس توکن به اینترفیس IERC20 است. بعد ار این تعریف هر یک از تابع‌های ذکر شده در اینترفیس IERC20 را می‌توان توسط token فراخوانی کرد. همان کاری که در سطر 9 انجام شده است.فراخوان مستقیم تابع‌های قرارداد دیگربرای فراخوان مستقیم دو راه حل مختلف وجود دارد که به بیان آنها و تفاوت آنها می‌پردازیم:استفاده از متد callتوسط متد call می‌توان یک تابع از یک قرارداد را در قرارداد دیگر فراخوانی کرد. روش استفاده از این متد به ترتیب زیر است:Contract2.call(&#039;function_name()&#039;);در مثال بالا Contract2 آدرس قرارداد هوشمند دوم (از نوع address payable) و function_name نام یکی از توابع آن است.مقدار خروجی متد call یک جفت داده است. خروجی اول آن از نوع bool و معرف اجرا یا عدم اجرای متد call است. خروجی دوم آن نیز از نوع bytes است و با استفاده از آن می‌توان خروجی تابع function_name را استخراج کرد. پس می‌توانیم بنویسیم:(bool success, bytes memory output) = Contract2.call(&#039;function_name()&#039;);حال ببینیم چگونه می‌توان خروجی تابع مورد نظر را از متغیر output از نوع bytes استخراج کرد.فرض کنید تابع function_name فقط یک خروجی از نوع uint داشته باشد. در این صورت می‌توانیم این خروجی را به کمک کد زیر از متغیر خروجی output استخراج کنیم:uint a = abi.decode(output, (uint));اگر تابع function_name دو خروجی به ترتیب از نوع uint و string داشته باشد، می‌توان این دو خروجی را با کد زیر از متغیر output استخراج کرد:(uint a, string memory s) = abi.decode(output, (uint, string));به این ترتیب هر تعداد خروجی را می‌توان با استفاده از روش فوق استخراج کرد.گفتیم که روش صدا زدن متد call به ترتیب زیر است:(bool success, bytes memory output) = Contract2.call(&#039;function_name()&#039;);این روش تنها زمانی کارآیی دارد که که تابع function_name هیچ آرگومان ورودی نداشته باشد.برای آوردن آرگومان ورودی برای این متد چه باید کرد؟ فرض کنید که تابع function_name دو آرگومان ورودی به ترتیب از نوع uint8 و string قبول کند. در این صورت سطر فوق به ترتیب زیر نوشته می‌شود:(bool success, bytes memory output) = Contract2.call(abi.encodeWithSignature(&#039;function_name(uint8, string)&#039;, 1, &#039;2nd arguement&#039;));توجه کنید که در مثال فوق در داخل پرانتز جلوی نام تابع فقط نوع داده‌های ورودی به ترتیب مشخص می‌شود. در ادامه به عنوان پارامترهای بعدی مقدار آرگومان‌های ورودی تابع نیز داده می‌شود که در این جا به ترتیب 1 و &quot;2nd arguement&quot; است.فقط یک نکته در این مورد ناگفته مانده و آن این که چطور می‌توانیم هنگام فراخوان یک تابع از قرارداد دوم، مقداری توکن پایه‌ی شبکه (مثلا اتر در شبکه اتریوم یا BNB در شبکه BSC) را نیز به قرارداد دوم پرداخت کنیم.در مثال زیر تابع function_name (که فرض می‌کنیم آرگومان ورودی ندارد) و payable هم هست، فراخوانده می‌شود و مقدار 1 اتر به آن پرداخت می‌شود:Contract2.call{value: 1000000000000000000}(&#039;function_name()&#039;);در مثال فوق از ۱۸ صفر استفاده کردیم، زیرا مقدار ارزش‌ها بر حسب واحد wei است. در زبان سالیدیتی می‌توان از کلمه‌ی ether برای تبدیل واحد به اتر نیز استفاده کرد:Contract2.call{value: 1 ether}(&#039;function_name()&#039;);در این جا یک نمونه‌ی کامل از استفاده از متد call را مشاهده می‌کنید:pragma solidity ^0.6.10;
contract A {
    uint p = 10;
    address payable BAddress = payable(0x1aE0EA34a72D944a8C7603FfB3eC30a6669E454C); // Address of contract B
    function getP() public returns(uint) {
        (bool success, bytes memory output) = BAddress.call(&#039;getPB()&#039;);
        require(success);
        return(abi.decode(output, (uint)));
    }
    function incP() public returns(uint) {
        (bool success, bytes memory output) = BAddress.call(&#039;incPB()&#039;);
        require(success);
        return(abi.decode(output, (uint)));
    }
}
contract B {
    uint p = 501;
    function getPB() public view returns(uint) {
        return(p);
    }
    function incPB() public {
        p++;
    }
}واضح است که در این جا لازم است ابتدا قرارداد هوشمند B دپلوی شود و آدرس آن در متغیر BAddress در قرارداد هوشمند A ذکر شود و سپس قرارداد A دپلوی شود.تابع getP از قرارداد هوشمند A مقدار متغیر p از قرارداد هوشمند B را به شما برمی‌گرداند و  تابع incP مقدار متغیر p از قرارداد هوشمند B را یک واحد زیاد می‌کند.تابع getP از قرارداد هوشمند A با این که ظاهرا تغییری در متغیرهای بلاکچین نمی‌دهد، با این حال نمی‌تواند از نوع view تعریف شود. دلیل این موضوع آن است که متد call بالقوه امکان تغییر متغیرهای بلاکچین را دارد و از این رو نمی‌تواند در توابع  view به کار برده شود.استفاده از متد delegatecallمتد delegatecall دقیقا مانند متد call استفاده می‌شود. و تقریبا همان کاربرد را دارد. با این تفاوت که در این متد بعضی رفتارهای درونی متفاوت است.در متد call وقتی قرارداد هوشمند A تابعی از قرارداد هوشمند B را صدا می‌زند، آن تابع می‌تواند با داده‌های ذخیره شده در قرارداد هوشمند B کار کند و در صورت لزوم آنها را تغییر دهد. اما در متد delegatecall آن تابع می‌تواند با داده‌های ذخیره شده در قرارداد هوشمند A کار کند یا آنها را تغییر دهد. به این ترتیب از متد delegatecall  برای آپگرید کردن قراردادهای هوشمند به کار می‌رود.در متد delegatecall امکان ارسال توکن پایه‌ی شبکه برای قرارداد دوم امکان‌پذیر نیست، چرا که قرارداد دوم با داده‌های قرارداد اول کار می‌کند و مقدار توکن ارسالی نیز یکی از همین نوع داده‌ها است.در متد call متغیر msg.sender حاوی آدرس قرارداد اول است، در حالی که در متد delegatecall متغیر msg.sender حاوی آدرس حساب فراخوان کننده‌ی تابع قرارداد اول است. اما در هر دو حالت متغیر tx.origin حاوی آدرس حساب اولیه‌ی فراخوان کننده است.برای بررسی دقیق‌تر در مورد متد delegatecall کدهای زیر را اجرا کنید و نتایج آن را بررسی کنید:pragma solidity ^0.6.10;
contract A {
    uint p = 10;
    address payable BAddress = payable(0x1aE0EA34a72D944a8C7603FfB3eC30a6669E454C); // Address of contract B
    function getP() public returns(uint) {
        (bool success, bytes memory output) = BAddress.delegatecall(&#039;getPB()&#039;);
        require(success);
        return(abi.decode(output, (uint)));
    }
    function incP() public returns(uint) {
        (bool success, bytes memory output) = BAddress.delegatecall(&#039;incPB()&#039;);
        require(success);
        return(abi.decode(output, (uint)));
    }
}
contract B {
    uint p = 501;
    function getPB() public view returns(uint) {
        return(p);
    }
    function incPB() public {
        p++;
    }
}</description>
                <category>علیرضا زجاجی</category>
                <author>علیرضا زجاجی</author>
                <pubDate>Tue, 15 Feb 2022 02:13:59 +0330</pubDate>
            </item>
                    <item>
                <title>فرار از زندان، فصل صفرم</title>
                <link>https://virgool.io/@AlirezaZojaji/%D9%81%D8%B1%D8%A7%D8%B1-%D8%A7%D8%B2-%D8%B2%D9%86%D8%AF%D8%A7%D9%86-%D9%81%D8%B5%D9%84-%D8%B5%D9%81%D8%B1%D9%85-exhlzyrzjjxj</link>
                <description>این داستان واقعی و زیبا رو دوستمون جردن زحمتش رو کشیده و در یک رشتوی ۵۳ قسمتی توئیت کرده. من فقط این جا نقلش می‌کنم که کارش موندگارتر بشه.امروز میخوام خفن ترین ماجرای فرار از زندان که شنیدم رو براتون بازگو کنم، کمربنداتونو سفت ببندید چون این ماجرا بالا و پایین زیاد داره:یُشیه شیراتوری (Yoshie Shiratori)در شهر آئوموری ژاپن هستیم و سال ۱۹۳۶ است. فردی به اسم یُشیه شیراتوری (Yoshie Shiratori) رو تحت شکنجه مجبور به اعتراف به جرمی کرده بودن که می‌گفت مرتکب نشده بود. قرار بود بعد چند روز اونو به مرگ محکوم کنن، و یُشیه به این فکر کرد که باید از زندان فرار کنه، ولی فرار از این زندان به این آسونی ها نبود.ولی یُشیه ماه ها رفت و آمد نگهبان ها رو مطالعه کرده بود و می‌دونست که وقتی شیفت‌ها عوض می‌شن یه زمان  15 دقیقه‌ای داره، وقتی که اون پونزده دقیقه رسید، یه سیم از تو لباسش در آورد و شروع به باز کردن قفل کرد. ممکنه بگید سیم رو از کجا آورده بود؟ خب معلومه از دور سطلی که برای شستشو و حمام بهشون داده بودن! و بعد چند دقیقه بوم!!! درو باز کرد و چند تا در بعدی که جلوش بودن رو هم همین طور!وقتی نگهبانا رسیدن به جلوی سلولش با این صحنه مواجه شدن، یُشیه طبق معمول خوابیده بود! ولی اشتباه فکر می‌کردن اون از قبل فکر اینجا رو کرده بود تا برای خودش زمان بخره و چند تا تکه تخته از زیر تختش کنده بود به مرور و گذاشته بود جای خودش. چندین ساعت بعد بود که تازه فهمیدن یُشیه فرار کرده. ولی این پایان داستان نبود! سه روز بعد یُشیه رو بخاطر سرقت از یه بیمارستان گرفتن! (بیمارستان آخه لامصب؟! بعدشم سه روز؟ یه ماه صبر میکردی لااقل!). حالا اونو دوباره به زندان برگردوندن و بخاطر اقدام به فرار از زندان یه حبس ابد هم زدن بیخ ریشش! شش سال گذشت، سال ۱۹۴۲ بود وسطای جنگ جهانی دوم، یُشیه رو به زندان آکیتا (Akita) منتقل کردن که در شهر آکیتا بود. اون جا چون به نگهبان‌ها گفته بودن که سابقه‌ی فرار داره، نگهبان‌ها خیلی بد باهاش برخورد می‌کردن! علاوه بر کتک‌های معمول مجبورش می‌کردن کارهای سخت (اعمال شاقّه!) بکنه و روی زمین سیمانی بخوابه با این که زمستون بود، و مدتها اونو توی سلول انفرادی نگه داشتن. این سلول انفرادی خیلی خاص بود، بسیار تنگ و با دیوارهایی بسیار بلند و پوشیده از ورقه‌های مس که طبیعتاً خیلی صاف بود و کسی نمی‌تونست ازش بره بالا! و تنها راهی که به بیرون داشت، پنجره‌ی روی سقفش بود که باعث می‌شد یه نوری به اتاق بتابه، نگهبان‌ها که از سابقه ی یُشیه باخبر بودن و همیشه حتی داخل سلولش بهش دستبند میزدن. بعد از مدت‌ها بالاخره یکی از نگهبان‌ها (کابایاشی،کابایاشی رو یادتون باشه!) دلش به حال یُشیه سوخت و کتکش نمی‌زد و گاهی حتی چک می‌کرد ببینه سالمه یا نه. یه شب بارونی بود که نگهبانا اومدن چک کنن ببینن یُشیه سر جاشه یا نه، و با این صحنه روبرو شدن: یُشیه نبود! چطور؟ یُشیه استاد باز کردن دستبند بود، دستبندشو با سیم باز کرده بود و هر شب مثل تصویر زیر رفته بود بالا از دیوار و دیده بود که بله پنجره محکمه ولی چوب اطرافش پوسیده س!خلاصه هر شب می‌رفته بالا و با پنجره ور می‌رفته تا از جا کنده بشه و بعد میومده پایین و دستبندشو می‌بسته و این کارو انقد تکرار کرده تا پنجره باز بشه. بعد باز شدن فقط منتظر یه زمان مناسب واسه در رفتن بود، این کار رو تو یه شب بارونی و طوفانی می‌کنه که کسی صدای پاشو رو پشت بوم نشنوه.سه ماه از فرارش گذشت و کسی پیداش نکرد! ولی کابایاشی رو یادتونه؟ همونی نگهبانی که دلش به حال یُشیه می‌سوخت. یه روز کابایاشی تو خونه‌ش بود که صدای در زدن شنید، و جلوی در کسی نبود جز یُشیه!  کابایاشی پشماش ریخته بود و یُشیه رو راه داد تو خونه ش و بهش غذا و ... داد. یُشیه به کابایاشی گفت که آقا ببین من با اینکه اصلا جرمی مرتکب نشدم و تو زندانم ولی اصن قبول می‌کنم که تو زندان بمونم! حتی حاضرم خودمو تحویل قانون بدم! اما از اینکه این همه توسط نگهبان‌ها آزار دیدم شاکی ام! اون می‌خواست که به همه بفهمونه که سیستم زندان‌ها و سیستم قضایی ژاپن چقد فاسده و بعدش که سیستم رو اصلاح کردن اینم میتونه به صورت قانونی اعتراض کنه و حقش رو و آزادیش رو پس بگیره! (آخ قربون دل صافت برم مرد!) خلاصه یُشیه سفره ی دلشو برای کابایاشی باز کرد چون فکر می‌کرد اون تنها آدمی بوده که با اون مثل انسان رفتار می‌کرده و حس می‌کرد که کابایاشی به حرفاش گوش می‌ده و باهاش همکاری می‌کنه و به بدرفتاری هایی که باهاش شده بود شهادت می‌ده و همه چی گل و بلبل تموم می‌شه!خلاصه یُشیه اینارو گفت و تا رفت دست به آب (همون دستشویی، موال، توالت، WC، حالا هرچی) کابایاشی نامرد (و دیوث!) زنگ زد به پلیس و داداشیاش اومدن و یُشیه رو گرفتن بردن! و به همین راحتی یُشیه باز به فناک رفت ولی پشت دستش رو داغ کرد که دیگه به هیچ مامور دولتی اعتماد نکنه! قاضی هم سه سال به حبس ابدش اضافه کرد! (چه معنی داره؟ نمیدونم والا!) بعد یه مدت یُشیه گفت که بابا ما که تا آخر عمر اینجا قراره آب خنک بخوریم حداقل ما رو بفرستید توکیو که گرم تره. این جا کونمون یخ میزنه زمستونا سالار! توکیو جنوب‌تر بود و گرم‌تر بود زمستوناش! و از اون جایی که قاضی دوسش داشت چیکار کرد؟ فرستادش شمالی‌ترین زندان ژاپن تا علاوه بر کونش تخماشم یخ بزنه! زندان آباشیری! تو آباشیری هوا به شدت سرد بود! طوری که وقتی زندانیا سوپ می‌گرفتن به عنوان غذا (بله سوپ غذاس وقتی تو زندان باشی!) غذاشون معمولا یخ می‌زد، نه اینکه سرد باشه ها قشنگ یخ می‌بست روش! حالا یُشیه خیلی عصبانی شده بود و شمشیرو از رو بسته بود، گفت دیوسا هر کاری بکنید از زندان فرار می‌کنم، این دستبند تخمیتونم نبندید بهتره چون به هر حال بازش می‌کنم!ولی حالا نگهبان‌ها می‌دونستن که یُشیه چه مارمولکیه. چون مثل مارمولک از دیوار راست بالا می‌رفت، قفل ها رو باز می‌کرد، دستبندشو باز می‌کرد یا می‌شکست و... واسه همین یه سلول مخصوص براش در نظر گرفتن! این سلول ستون‌های آهنی داشت، پنجره‌ش فلزی بود و حتی اگه میله‌های پنجره رو هم برمی‌داشت دریچه‌ی پنجره انقد تنگ بود که نمی‌تونست ازش بیرون بره! علاوه بر اون براش یه دستبند و پابند آهنی مخصوص درست کرده بودن (هرکدوم 12 کیلو بودن!) و سوراخ قفل نداشتن و تنها راه باز کردنشون این بود که دوتا فلزکار (شخصی که سر و کارش با فلز است؟!) هر چند هفته یه بار میومدن تا با ابزار خودشون تو دوساعت بازش کنن! و فقط این مواقع بود که یُشیه می‌تونست بره حمام. وقتی اولین بار رفت حموم متوجه شد که زخم جای دستبندش کِرم زده! اگه زمستون سرد و سلول غیر قابل نفوذ و دستبندهای آهنی برای از پا انداختن یُشیه کافی نبود، جیره‌ی غذاییش رو هم نصف کردن تا بیشتر به فاک بره. هر روز غذا رو از زیر در رد میکردن و مجبور بود مثل یه حیوون بخزه و بره هر چیزی که می‌تونه و نمی‌تونه رو بخوره. با اون دستای بسته حتی خوابیدن هم سخت شده بود!خلاصه با تمام این سختی ها یُشیه زمستون رو پشت سر گذاشت، بهار شد و هوا گرم تر شد و یُشیه کمی قوی‌تر شد! یه شب یه نگهبان رفت به یُشیه سر بزنه که صحنه‌ی زیر رو دید! بله و این انگشت فاک یُشیه بود به نگهبان‌ها و کل سیستم قضایی ژاپن! یُشیه باز هم فرار کرده بود!خیلی زود آلارم ها رو به صدا در آوردن ولی خبری از یُشیه نبود! ولی خب چطور از اون زندان مجهز و سلول مخصوص با پنجره فلزی و دستبند و پابند فلزی سنگین فرار کرده بود؟ نقشه ی یُشیه از شش ماه پیش شروع شده بود! ذره به ذره! هر روز که نگهبانا غذاشو از زیر در هل می‌دادن تو. با همون دستای بسته، بخشی از سوپش رو نگه می‌داشت و می‌پاشید روی فریم فلزی در و همچنین روی دستبند و پابند آهنیش. چرا این کارو می‌کرد؟ می‌خواست محلول نمکی‌ای که تو سوپ هست به مرور باعث زنگ‌زدگی و پوسیدگی فریم فلزی و دستبند و پابندش بشه! بعد چند ماه پیچ و مهره ی اول فریم فلزی در اومدن و از اون پیچ به عنوان آچار برای باز کردن سایر پیچ و مهره‌ها استفاده کرد و بالاخره تونست پنجره ی در و دستبند و پابندش رو باز کنه، ولی هنوز یه جای کار ایراد داشت: پنجره‌ی در انقد باریک بود که یُشیه نمی‌تونست ازش رد بشه. ولی یُشیه یه فکری به سرش زد! اون میتونست هر وقت که خواست مهره ی شونه شو در بیاره (اصطلاح پزشکیش نمیدونم چیه!) خلاصه با این کار موفق میشه خودش رو انقدر کوچیک بکنه که از پنجره رد بشه. بعدشم از یه پنجره‌ی شکسته تو راهرو به سقف راه پیدا کرد!حالا یُشیه از سه زندان فرار کرده بود و تنها کسی در تاریخ بود که از زندان آباشیری فرار کرده بود.با اینکه فرار کرده بود ولی بیرون هم همچین بهشتی نبود، کوه‌های یخ بندان شمال ژاپن روبه روش بود. نگهبانا کیف می‌کردن چون می‌گفتن اگه از سرما هم نمیره (که عملا غیر ممکنه) این کوه‌ها پره خرسه که ترتیبشو میدن!همه امیدشون رو از دست داده بودن که یُشیه بتونه زنده بمونه! به جز زنش! اون فکر میکرد که حتی اگه زنده مونده باشه هم بعیده بیاد خونه، چون خونه‌شون تحت نظر بود! (یادتونه که گفته بودم این ماجرا همه وسط جنگ جهانی دوم اتفاق افتاد دیگه؟) زنش با خودش فکر می‌کرد که کاش آمریکا جنگ رو ببره و بیاد ژاپنو بگیره! اینجوری دیگه کسی به تخمش هم نخواهد بود که یُشیه زندان بوده قبلا یا فرار کرده و...و حتما می‌دونید بعدش چی شد دیگه؟ هیروشیما و ناکازاکی! بوم! و بوووم! حالا آمریکا تسلط نسبی روی زندان‌ها داشت و داشت اصلاحاتی صورت می‌گرفت. ولی آیا یُشیه زنده بود؟! ازونجایی که این داستان قصد تموم شدن نداره، بله! یُشیه زنده بود! چطور؟یه غار مخروبه پیدا کرده بود و تونسته بود آتیش روشن کنه و برای غذا از حبوبات درختا و گه گداری خرگوش و سنجاب و راکون و اینا شکار می‌کرد، چه مدت؟ دو سال!!!بعد یه مدت کل جراتشو جمع کرد و رفت نزدیکترین روستا سرک کشید! شوکه شده بود! خیابونا پر از پوسترها و نوشته‌های انگلیسی بود! و دخترای ژاپنی دست در دست با پسرای آمریکایی می‌چرخیدن! مغز یُشیه اینجوری بود که وات دا فاااااک! یه روزنامه برداشت و خوند و فهمید سر هیروشیما و ناکازاکی چه بلایی اومده! بعد اینکه فهمید شروع کرد آروم و بی‌سروصدا سفر کردن به سمت جنوب! تو مسیر که داشت میرفت گشنه‌ش شد و رفت از تو یه باغی چند تا گوجه بچینه بخوره! از شانس یُشیه مدتها بود که یه دزد دیوسی میومد و باغ این باغبون بیچاره رو غارت می‌کرد.این باغبونه هم تا یُشیه رو دید فک کرد اون دزد دیوس رو پیدا کرده! خلاصه درگیر شدن و طی درگیری و در دفاع از خودش یُشیه با ابزار باغبونی زد و پیرمرد باغبون کشته شد! به همین راحتی سر یه دونه گوجه و یه سوء تفاهم! شانستو یُشیه!!!خلاصه پلیس دستگیرش کرد و تازه فهمیدن که ای دل غافل اون یُشیه شیراتوری معروف رو گرفتن. حالا که دیگه یه نفر دیگه رو کشته بود به مرگ محکوم شد! و فرستادنش زندان ساپورو! این بار برای اینکه فرار نکنه شش نفر مأمور مسلح رو آورده بودن که بصورت ۲۴ ساعته مراقب یُشیه باشن! سلولش رو هم مجهز تر کرده بودن! به خاطر سابقه‌ش تو زندان قبلی حالا اندازه پنجره‌ها حتی از سرش هم کوچک‌تر بود!حالا یُشیه داشت پیرتر می‌شد و نگهبان‌ها هم می‌دیدن که هر روز داره افسرده‌تر میشه! همش سقفو نگاه می‌کرد! و همش پتو رو می‌کشید سرش و می‌خوابید و حتی به صدا کردن نگهبان‌ها هم خیلی وقتا توجهی نمی‌کرد! نا امید نا امید شده بود! زمستون هم داشت میومد که ضعیف‌ترش می‌کرد.خلاصه یه روز وقتی نگهبانا کلی صداش کردن که بیدار شه و نشد دیگه صبر نگهبان‌ها به سر اومد و در رو باز کردن که یه کتک مفصل بهش بزنن! در رو باز کردن و یُشیه ای در کار نبود! یُشیه باز هم فرار کرده بود!!! ولی چطور؟؟؟ فاکینگ چطور؟؟؟؟ مگه تحت نظارت ۲۴ ساعته ۶ نفر نگهبان مسلح نبود؟ چرا بود! یه نفس عمیق بکشید تا بقیه‌شو بگم.یادتونه گفتم یُشیه افسرده شده بود و همش سقفو نگاه می‌کرد و می‌خوابید و هر چی صداش می‌کردن بیدار نمی‌شد؟ همش بازی بود! و جزوی از نقشه‌ی آقامون یُشیه!!! ( هنوز عاشق هوش و ذکاوت این بشر نشدین؟ من که شدم!)داستان اینجوریه که یُشیه می‌دونست که اینا همه‌ی فرار های قبلیش رو بررسی کرده بودن و همه‌ش هم از سقف و اینا بوده پس خیره شدن به سقف باعث می‌شد نگهبانا فکر کنن که داره باز نقشه ی فرار از سقف رو می‌چینه! در صورتی که یُشیه فقط می‌خواست با نگاه کردن به سقف حواس اون‌ها رو به سقف نگه داره و حواسشون رو از زمین پرت کنه! بله زمین! جایی که یُشیه داشت نقشه‌شو عملی می‌کرد!ازونجایی که مدیرای زندان هم فرار های یُشیه رو بررسی کرده بودن همه‌ی حواسشون رو داده بودن به قوی‌تر کردن سقف و بدنه و پنجره‌های زندان و به کف و زمین زندان توجه چندانی نداشتن! مدتی طول کشید تا وقتی نگهبانا حواسشون بهش نیست چوب‌های کف زمین رو بکنه و آروم آروم شروع به کندن زمین کنه! و معمولا هم می‌خوابید و دستور و صدا کردن نگهبان‌ها هم به تخمش بود،کسی به این کاراش شک نمی‌کرد. بیشتر از یه ماه طول کشید تا بالاخره موفق شد سوراخ رو بکنه و باز هم فرار کنه! شت!فقط یه جاش برام سؤاله که خاک سوراخی که کنده بود رو کجا می‌ریخت؟ نمیدونم! بگذریم! حالا اون چهار بار از چهار زندان مختلف فرار کرده بود!ولی دیگه یُشیه ۴۰ سالش شده بود و زندگی داشت براش سخت میشد، چون همیشه در حال فرار و ترس بود! یه روز یه گوشه نشسته بود که یه پلیس جوون اومد کنارش نشست و یه سیگاری روشن کرد و چون نمیشناختش شروع کرد باهاش گپ زدن! ولی یه اتفاق عجیب افتاد! پلیس دست کرد تو جیبش و بهش سیگار تعریف کرد! تو اون زمان سیگار مثل الان نبود یه آیتم نسبتا لاکچری بود! و اینکه وقتی غریبه باشی و کسی بهت سیگار تعریف کنه یعنی قلب بسیار مهربونی داره یا ازت خیلی خوشش اومده و خواسته بهت حال بده. خلاصه اینکه آدم حسابت کرده! آدم! چیزی که شخصیت یُشیه فراموشش کرده بود! اونقدر اذیتش کرده بودن و شکنجه‌ش کرده بودن و باهاش مثل حیوون برخورد کرده بودن که یادش رفته بود آدمه، سال‌ها بود که کسی با چنین مهربانی باهاش برخورد نکرده بود! یُشیه اشکش در اومد!توی همون حالت بازم سفره ی دلش رو برای یه پلیس باز کرد و بهش گفت که اسم و فامیلیش چیه و از چهار تا زندون فرار کرده! ولی دیگه براش مهم نبود که دستگیر بشه! یه سیگار دلشو شکسته بود! می‌دونید چی شد؟ بله دوباره دستگیر شد! بنظرتون کار پلیسه درست بوده؟ سنگدله یا مهربونه؟!باز هم رفت تو دادگاه ولی دادگاه این بار آدم تر برخورد کرد باهاش، قبول کرد که کشتن اون کشاورزه بخاطر دفاع از خود بوده، با اینکه ۴ بار از زندان فرار کرده بود حتی یه نگهبان رو هم زخمی نکرده بود یا نکشته بود با اینکه بارها توسط همین نگهبان‌ها شکنجه شده بود!خلاصه در نهایت رای به اعدامش رو برداشتن و به ۲۰ سال زندان محکومش کردن و قبول کردن که ببرنش تو زندان توکیو که هوا گرم تر بود!  بردنش زندان فوچو! و این بار دیگه نگهبان‌ها باهاش مهربون بودن و محترمانه برخورد می‌کردن!یُشیه دیگه براش مهم نبود که فرار بکنه! چون سیستم یکم بهتر شده بود و باهاش خوب برخورد می‌شد. و بعد از اون دیگه خیلی خوب با همه برخورد کرد و هیچ وقت سعی نکرد فرار کنه. و ۱۴ سال بعد عفو خورد (عفو رهبری ) و آزاد شد، حالا یُشیه برای یه بار دیگه بعد از سال‌ها یه مرد آزاد بود! برگشت به خونه ش ولی همسرش فوت کرده بود ولی دخترش بود! ۱۸ سال با دخترش زندگی کرد و به عنوان یه مرد آزاد فوت کرد! داستان و عکس‌ها از ویدئویی بود که در انتها لینکش رو میذارم ولی برای نوشتن این متن خیلی زحمت کشیدم! شاید خفن ترین کارم تو توییتر بود، اگه دوست داشتید ریتوییت کنید!https://www.youtube.com/watch?v=oI8trlbCbU8</description>
                <category>علیرضا زجاجی</category>
                <author>علیرضا زجاجی</author>
                <pubDate>Sun, 07 Nov 2021 12:02:27 +0330</pubDate>
            </item>
                    <item>
                <title>چند کلمه در مورد سرویس اینترنت ماهواره‌ای استارلینک</title>
                <link>https://virgool.io/@AlirezaZojaji/%DA%86%D9%86%D8%AF-%DA%A9%D9%84%D9%85%D9%87-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D8%A7%D8%B3%D8%AA%D8%A7%D8%B1%D9%84%DB%8C%D9%86%DA%A9-xpyvso52jkr4</link>
                <description>دوست خوبمون سید میثم بهشتیان، رشته توئیتی در مورد سرویس اینترنت ماهواره‌ای استارلینک، که توسط شرکت اسپیس‌ایکس توسعه داده شده، منتشر کرد. اما در پی حمله‌های ناجوانمردانه اکانتش بسته شد. برای این که نوشته‌ش از بین نره، این رشته توئیت با بعضی از پرسش‌ها و پاسخ‌هاش رو با اندکی ویرایش این جا جمع کردم، تا موندگار بشه.مدتی است بحث‌های مفصلی درباره ماهواره‌های اسپیس‌ایکس و سرویس استارلینک درجریان است! بسیاری هم بحث‌های زیادی راجع به پارازیت و ردیابی مطرح می‌کنند که بیشتر نشان از ناآشنایی با مباحث ماهواره‌ای دارد.صرفا جهت اطلاع کسانی که بنده را نمی‌شناسند عرض می‌کنم من بیش از ۱۰ سال در یکی از اپراتورهای دارای مجوز ارتباطات ماهواره ای مشغول بوده‌ام که از این ۱۰ سال بیش از ۷ سال مدیر عامل آن مجموعه بوده‌ام. در این رشته توئیت چند نکته‌ی مهم را در مورد شبکه‌ی استارلینک عرض می‌کنم:شبکه‌ی استارلینک بر خلاف ماهواره‌های فعلی (جئو) از ماهواره‌های لئو تشکیل شده است! در مدار لئو که از ارتفاع ۱۵۰ کیلومتری شروع میشود ماهواره‌ها بسته به ارتفاع با سرعتی معادل ۲۰ تا ۲۵ هزار کیلومتر در ساعت در حال چرخش به دور زمین هستند. این در حالی است که ماهواره‌هایی که عموم مردم می‌شناسند در لایه‌ی جئو و در ارتفاع ۳۶ تا ۴۰ هزار کیلومتری از سطح زمین قراردارند با سرعتی معادل سرعت چرخش وضعی زمین حرکت میکنند و به این ترتیب از دید ناظر زمینی ثابت هستند.در شبکه‌ی استارلینک به دلیل سرعت عبور ماهواره‌ها از افق دید ناظر زمینی با ایجاد شبکه‌ای متعدد مشکل سیگنال‌رسانی را حل کرده‌اند. تا این جای کار که ۴۰ درصد ماهواره‌های این شبکه پرتاب شده‌اند هر ناظر زمینی به طور متوسط در هر زمان از سه ماهواره سیگنال دریافت می‌کند! این عدد در زمان تکمیل شبکه به ده ماهواره خواهد رسید! یعنی شما سیگنال را همزمان از ۱۰ ماهواره‌ی متفاوت دریافت می‌کنید به این ترتیب دو اتفاق مهم خواهد افتاد:اول این که پهنای باند دریافتی به شکل حیرت‌انگیزی افزایش خواهد یافت.دوم این که امکان پارازیت به شکل باورنکردنی از بین خواهد رفت.در شبکه‌های ماهواره‌ای روشی برای یافتن ایستگاه زمینی ارسال کننده وجود دارد که به جئولوکیت (Geo Locate) کردن فرستنده معروف است! برای این کار لازم است سه ایستگاه مجزای زمینی سیگنال فرستنده را روی ماهواره‌ی مشخصی دریافت کنند و سپس توسط ابزارهایی که مالک ماهواره در اختیار می‌گذارد، مثلثی با اضلاع خاصی را به دست بیاورند. نقطه‌ی فرستنده درون این مثلث قرار دارد! هرچه ایزار ها دقیق‌تر و ماهواره‌ی مورد اشاره به‌روزتر باشد طول اضلاع مثلث کوتاه‌تر یا به عبارتی رزولوشن بالاتر خواهد بود.حالا برگردیم به استارلینک. در این شبکه ظرف کمتر از یک ساعت هر سه ماهواره‌ی ارسال کننده سیگنال برای ایستگاه زمینی تغییر کرده‌اند. تصور کنید وقتی تعداد ماهواره‌هایی که در یک زمان واحد به ایستگاه زمینی سیگنال می‌دهند به ۱۰ تا برسد چه اوضاعی می‌شود! پس عملا بحث ردیابی از پایه و  در کل منتفی است.در مورد پارازیت هم قابل ذکر است که سایز آنتن‌های استارلینک ۷۰ سانتی متر و‌ کمتر است! این به این معنی است که زاویه‌ی Beam Width آنتن بسیار بزرگ است و برای Jam کردن سیگنال‌های دریافتی آن، به توان بسیار بالایی نیاز است که در فرکانس مورد استفاده‌ی استارلینک، ارسال چنین توانی در آن فرکانس به این معنی است که هم خود فرستندگان در مبدأ احتمالاً کباب می‌شوند، و هم برد آن کاهش و میزان نویز پذیری فرکانس پارازیت ارسالی به شدت افزایش می‌یابد و در عمل بی‌اثر خواهد بود!بنا بر آنچه گذشت مقابله با استارلینک بر اساس روش‌های فعلی عملا غیر ممکن است. تنها نکته‌ی منفی هزینه‌ی بالای این سرویس برای کاربران ایرانی است! یک پک تجهیزات حدود ۵۰۰ دلار و هزینه‌ی خدمات ۱۰۰ دلار در ماه است. با احتساب نرخ ارز فعلی هر ست حدود ۱۲،۵ میلیون و هزینه سرویس ماهانه حدود ۲،۵ میلیون تومان تمام می‌شود! اما با توجه به میانگین پهنای باند سرویس‌های داخلی اگر یک پک را یک مجتمع ۲۰ واحدی نصب کنند با فرض تقسیم مساوی پهنای باند هزینه ماهانه سرویس برای هر واحد ۱۲۵ هزار تومان برای یک سرویس ۵ مگابیت بر ثانیه نا محدود خواهد بود، که به مراتب از سرویس‌های دست و پا شکسته‌ی داخلی بهتر است!  پس نظر شخصی من اینست که طرح صیانت فضای مجازی بیشتر یک طرح برای گسترش بازار استارلینک در ایران است تا طرحی برای سوق دادن فضای سایبری به سمت و سوی مد نظر آقایان.فرکانس‌هابه صورت کلی فرکانس‌های ماهواره‌ای ۹ دسته‌بندی کلی دارند: (واحد اعداد گیگاهرتز) باند L (بین 1 تا 2) باند S (2 تا 4) باند C (4 تا 8) باند X (8 تا 12 – آمریکای شمالی 8 تا 12.5) باند Ku (12 تا 18 – آمریکای شمالی 12.5 تا 18) باند K (18 تا 27 – آمریکای شمالی تا 25.5)باند Ka (27 تا 40 – آمریکای شمالی 26.5 تا 40) باند O (40 تا 50) باند V (50 تا 75)  ماهواره‌های مخابراتی یا همان جئو ها عمدتا در باند C، K، Ku و Ka کار می‌کنند. ماهواره‌های نظامی و هواشناسی بیشتر باند X هستند.هرچه فرکانس بالاتر باشد پهنای باند بیشتری از کدینگ‌های مختلف به دست می‌آید، اما در عین حال نویزپذیری هم افزایش می‌یابد. همچنین تاثیر مخرب نزولات جوی نیز بر روی سیگنال بیشتر می‌شود. برای همین در مناطق بارانی استوایی عمدتا از باند C استفاده می‌شود.افزایش فرکانس بر روی فوت پرینت یا محدوده‌ی جغرافیایی هم موثر است. هر چه فرکانس بالاتر رود این محدوده کوچک‌تر میشود.اما در عین حال توان تشعشعی یا EIRP افزایش می‌یابد.ضمنا هرچه فرکانس بالاتر باشد ترمینال زمینی می‌تواند با آنتن کوچک‌تری سرویس مشابه در مقایسه بافرکانس پایین‌تر را دریافت کند.برای اینکه درک بهتری نسبت به آنچه از لایه‌های ماهواره‌ها داشته باشید این لینک را ببینید:  https://upload.wikimedia.org/wikipedia/commons/b/b4/Comparison_satellite_navigation_orbits.svg از طریق لینک زیر می‌توانید وضعیت ماهواره‌های شبکه‌ی استارلینک رو به صورت زنده ببنید! روی هر ماهواره کلیک کنید وضعیت و مسیر حرکتش را می‌توانید ببینید:https://satellitemap.spaceدر رشتو بعدی به شرط حیات، قدری در مورد تجهیزات زمینی و مسایل مربوط به آنها مطالبی را ارائه می‌کنم.ایام به کامپرسش و پاسخ- سرعتش چقدره؟+ پهنای باند ۱۰۰ مگابیت بر ثانیه و تاخیر زیر ۳۰ میلی ثانیه.- آی‌پی که میده آیپی ایران خواهد بود یا امریکا؟+ آی پی احتمالا مربوط به لندینگ پوینت سرویس دهنده خواهد بود و کشوری که توش قرار داره.- بحث ردیابی فرستنده که ما باشیم چی؟ در هر صورت داری موج رادیویی می‌فرستی از یک نقطه.+ ردیابی از طریق فرکانس است و فرکانس مدام در حال تغییر. حداقل زمان برای ردیابی فرکانس ماهواره‌ای که از زمین ارسال شود ۱۸ دقیقه است. در بدترین شرایط فرستنده باید هر ۱۰ د.یقه ماهواره عوض کند.- لطفاً با اطلاعات اشتباه حساسیت روی طرح رو کاهش ندید. در مورد ردیابی ایستگاه زمینی ارسال کننده سیگنال با تکنیک های DF و مثلث گیری خروجی چند DF راحت میشه موقعیت یوزر رو پیدا کرد. برای جمینگ هم نیازی به ارسال نویز همزمان تو کل پهنای باند نیست و با تکنیکی مثل sweep میشه مختل کرد.+ اولا حساسیت روی طرح سر جای خودشه. ثانیا سوییپ مال وقتیه که کریر شما با فرکانس ثابت کار می‌کنه. ثالثا نویز افقی برای فرکانس عمودی که EIRP بالای ۸۰ dB داره و مدام فرکانسش عوض می‌شه بی‌فایده است و توان خیلی زیادی می‌طلبه اونم تو رنج ka.- تکنیک سوییپ حتی برای سیگنال های با کریر متغیر هم بسته به پهنای باند جمر و پریود سوییپ موثره. ضمنا یکی از روش‌ها سوییپه، روش‌های با بازدهی بالاتر هم هست. در مورد رابطه‌ی پلاریته و توان فرمایشتون صحیحه ولی حساسیت بسیار بالای این تیپ گیرنده‌ها باعث می‌شه با توان کم هم جم شن.+ تست کردیم، نمی‌شه! فقط پهنای باند کاهش پیدا می‌کنه و کمی تأخیر زیاد می‌شه.- الان بیشتر سایت‌ها به علت تحریم آمریکا ایرانی‌ها رو بن کردن به نظرتون آمریکا اجازه می‌ده به این شرکت که به ایرانی‌ها خدمات بده؟ بالاخره تراکنش مالی خواهند داشت با این شرکت.+ این سکتور بر اساس دستور اجرای می ۲۰۱۳ از همه تحریم‌ها خارج است.</description>
                <category>علیرضا زجاجی</category>
                <author>علیرضا زجاجی</author>
                <pubDate>Fri, 30 Jul 2021 23:50:04 +0430</pubDate>
            </item>
                    <item>
                <title>مقایسه دو غول قرارداد هوشمند: اتریوم و کاردانو</title>
                <link>https://virgool.io/Solidity/%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-%D8%AF%D9%88-%D8%BA%D9%88%D9%84-%D9%82%D8%B1%D8%A7%D8%B1%D8%AF%D8%A7%D8%AF-%D9%87%D9%88%D8%B4%D9%85%D9%86%D8%AF-%D8%A7%D8%AA%D8%B1%DB%8C%D9%88%D9%85-%D9%88-%DA%A9%D8%A7%D8%B1%D8%AF%D8%A7%D9%86%D9%88-pvp0jdioqsp1</link>
                <description>دوست عزیز ادریس رشته توئیتی را در مورد مقایسه‌ی اتریوم و کاردانو از جهات مختلف منتشر کرد. برای این که این مطالب ارزشمند زیر دست و پای اصحاب توئیتر از بین نرود آن را با تصحیح مختصری در این جا بازنشر می‌کنم.اتریوم و کاردانو به جز حوزه‌ی کاری، اشتراک بزرگ دیگری دارند، آن هم بنیان گذاران و مدیران این دو پروژه هستند، یعنی ویتالیک بوترین و چارلز هاسکینسون بوترین و هاسکینسون جزو پنج نفر بنیان‌گذار اتریوم بودند، ویتالیک بوترین یک دانشمند حوزه‌ی کامپیوتر و چارلز هاسکینسون یک ریاضیدان است.ویتالیک بوترین سمت چپ و چارلز هاسکینسون نفر وسطهاسکینسون در سال ۲۰۱۴، به علت یک اختلاف نظر در مورد روش تأمین مالی اتریوم، از این پروژه جدا شد و چند ماه بعد، یک کمپانی نرم افزاری به نام IOHK را تأسیس کرد. این کمپانی، سازنده‌ی بلاکچین کاردانو است.بزرگ‌ترین تفاوت اتریوم و کاردانو، رویکرد آنها در توسعه‌ی اکوسیستمشان است. تمرکز اصلی اتریوم تا به امروز، بخش خصوصی کشورهای توسعه‌یافته در اروپا و آمریکای شمالی بوده، در حالیکه تمرکز کاردانو بیشتر روی کشورهای در حال توسعه و بهخصوص دولت‌ها و نهادهای عمومی در این کشورها است.روش توسعه‌ی کاردانو و اتریوم نیز تقریبا مخالف هم است. قسمت‌های مختلف شبکه‌ی کاردانو، پیش از استفاده، مدت زیادی به صورت تئوری مورد تحقیق و بررسی قرار می‌گیرند، در حالیکه اتریوم عموما بررسی‌های خود را به صورت عملی آغاز می‌کند.  این رویکرد اتریوم باعث جلو افتادن آن از سایر شبکه‌ها شده است.اتریوم که از سال ۲۰۱۵ بلاکچین خود را لانچ کرده است، دارای بزرگ‌ترین اکوسیستم دنیای کریپتو است. این اکوسیستم، شامل بسیاری از آلت‌کوین‌ها، استیبل‌کوین‌ها، اپلیکیشن‌های غیرمتمرکز یا DAppها، NFTها و پروژه‌های فراوان دیگری است که همگی بر روی بلاکچین اتریوم (Ethereum) فعالند.شبکه‌ی کاردانو که در سال ۲۰۱۷ راه‌اندازی شده، بر خلاف اتریوم، اکوسیستم بسیار کوچکی دارد و در حال حاضر پروژه‌های بسیار کمی روی شبکه‌ی کاردانو فعالیت دارند، چرا که کاردانو در نیمه‌ی نقشه‌ی راه توسعه‌ی خود قرار دارد و هنوز  پلتفورم قرارداد هوشمند خود را به طور کامل راه اندازی نکرده است.شبکه‌ی اتریوم هم اخیراً، به علت رشد شدید تعداد کاربران و تراکنش‌های روی این بلاکچین، دچار افزایش قابل توجه میزان کارمزدها شده است. این موضوع موجب شده عده‌ی زیادی از فعالان بازار، تا حد امکان، از شبکه‌های دیگری مثل ترون (Tron) یا بایننس (BSC) برای انجام تراکنش‌های خود استفاده کنند.این مشکلات مقیاس‌پذیری، در آپگرید شبکه‌ی اتریوم، یعنی Ethereum 2.0 حل خواهد شد. بنابراین برای عادلانه بودن این مقایسه، فرم نهایی کاردانو را با Ethereum 2.0 مقایسه خواهیم کرد.بلاکچین کاردانو از دو لایه اصلی تشکیل شده است:لایه‌ی اول، Settlement Layer است که تاریخچه‌ی تمام تراکنش های ADA و سایر توکن‌های فعال روی این بلاکچین را نگهداری می‌کند.لایه‌ی دوم، Computation Layer، که قراردادهای هوشمند کاردانو را اجرا خواهد کرد.کاردانو از یک پروتکل PoS به نام اوروبوروس (Ouroboros) استفاده می‌کند که در حال حاضر امکان انجام چند صد تراکنش در ثانیه را دارد. پس از اجرای HYDRA که مانند یک لایه‌ی دوم روی بلاکچین اصلی اجرا می‌شود، با بهبود مقیاس پذیری، کاردانو توانایی پردازش ۲.۵ میلیون تراکنش در ثانیه را خواهد داشت.توکن‌های شبکه‌ی کاردانو، شرایطی مثل ADA خواهند داشت، یعنی برای انتقال نیازی به تولید شدن (mint) نخواهند داشت و کارمزد این تراکنش‌ها و قراردادهای هوشمند را می‌توان با خود توکن‌ها و بدون نیاز به ADA در کیف پول، پرداخت کرد.اتریوم ۲، از مکانیزم شاردینگ (Sharding) که بلاکچین را به بخش‌های کوچک‌تر تقسیم می‌کند، استفاده خواهد کرد. هر شارد، فقط تراکنش‌های مربوط به خود را پردازش و ذخیره می‌کند. این مکانیزم اجازه‌ی پردازش تراکنش‌ها به صورت موازی را به شاردها می‌دهد که موجب افزایش تعداد تراکنش بر ثانیه خواهد شد.در اتریوم ۲، ۶۴ شارد اولیه وجود خواهند داشت که هر کدام به زنجیره‌ی پایه وصل می‌شوند. این زنجیره، تمام فرآیندهای Staking و اجماع را بین شاردها هماهنگ‌سازی می‌کند. استفاده از این مکانیزم در اتریوم ۲، امکان پردازش حدود ۱۰۰ هزار تراکنش در ثانیه را فراهم خواهد کرد.حالا نوبت مقایسه‌ی فرایند Staking در این دو شبکه است. برای Stake کردن ADA، می توان  از ۲۵۰۰ Staking Pool موجود استقاده کرد. Staking Reward کوین ADA در حال حاضر، حدود ۴.۵%در سال است و برداشت ADAهایی که Stake شده در هر لحظه امکان پذیر است و به اصطلاح Lockup Period ندارد.نکته‌ی بسیار جالب در مورد کاردانو، این است که Staking Reward استخرها در صورتی که بیش از حدی مشخص، ADA استیک کنند، کاهش می‌یابد و حتی ممکن است صفر شود. این فرآیند Validatorها را به ایجاد استخرهای جدید، و افراد را به استفاده از استخرهای جدید و کوچک‌تر تشویق می‌کند.با وجود اینکه اتریوم ۲ هنوز فعال نشده، Staking کوین ETH در حال حاضر امکان‌پذیر است و مثل کاردانو، با افزایش مقدار ETH که استیک شده، Staking Reward رفته رفته کاهش می‌یابد. در حال حاضر، این نرخ سود حدود ۷٪ در سال بوده و بیش از ۱۵۰ هزار validator روی اتریوم ۲ فعال هستند.کوین بلاکچین کاردانو یعنی ADA، دارای Supply Cap برابر ۴۵ میلیارد ADA است و بیش از این تولید نخواهد شد.  در حال حاضر حدود ۳۲ میلیارد ADA در گردش است و ۱۳ میلیارد باقی مانده، با نرخ تورم سالانه حدود ۷٪ وارد گردش خواهد شد.بر خلاف ADA، کوین ETH دارای Supply Cap مشخصی نبوده و نرخ تورم سالانه آن حدود ۴٪ در سال است. اما لازم به ذکر است که به زودی با اجرای مکانیزم EIP1559، بخشی از کارمزد هر تراکنش روی شبکه‌ی اتریوم به اصطلاح سوزانده و از گردش خارج خواهد شد.در ادامه به بررسی وضعیت توسعه و مقبولیت این دو پروژه می پردازیم شرکت Grayscale در ژانویه ۲۰۲۱ درخواست ایجاد یک ADA Trust (صندوقی شبیه ETF) را به سازمان بورس آمریکا ارائه کرد. کاردانو در مارچ ۲۰۲۱ توسط Coinbase که یک صرافی  کاملا تأیید شده در آمریکا است، لیست شد.حجم معاملات ADA/USD در Coinbase، بعد از Binance، رتبه دوم را دارد، که نشان‌دهنده‌ی علاقه‌ی زیاد آمریکایی‌ها و نهادهای این کشور به کاردانو است.بنا بر اعلام رسمی IOHK، کاردانو در حال همکاری با دولت اتیوپی با هدف ساخت یک دیتابیس ملی برای هویت معلمان و دانش آموزان این کشور است. همچنین،امکان اجرای قرار دادهای هوشمند روی بلاکچین کاردانو، از آگوست امسال در دسترس خواهد بود.اتریوم ۲، طبق گفته‌ی توسعه‌دهنده‌ها، می‌تواند در پاییز امسال در دسترس قرار بگیرد. همچنین در حال حاضر چهار ETF بیتکوین در بازار سهام کانادا در حال معامله هستند. در ماه آپریل، بانک سرمایه گذاری اروپا یا EIB، اوراق قرضه‌ی دیجیتالی دو ساله را روی بلاکچین اتریوم منتشر کرد.خب در آخر، نظر شخصی من: با توجه به این که اتریوم به طور چشمگیری از هر پروژه‌ی دیگری در این حوزه جلوتر است، در کوتاه مدت رقیبی نخواهد داشت اما با توجه به آپگریدهای عجولانه‌ای که اتریوم برای ماندن در این جایگاه انجام می‌دهد، شاید در بلند مدت دچار مشکلاتی شود و کاردانو جایش را بگیرد.</description>
                <category>علیرضا زجاجی</category>
                <author>علیرضا زجاجی</author>
                <pubDate>Sun, 06 Jun 2021 02:09:32 +0430</pubDate>
            </item>
                    <item>
                <title>نهنگ‌های بیت‌کوین: از افسانه تا واقعیت!</title>
                <link>https://virgool.io/Solidity/%D9%86%D9%87%D9%86%DA%AF-%D9%87%D8%A7%DB%8C-%D8%A8%DB%8C%D8%AA-%DA%A9%D9%88%DB%8C%D9%86-%D8%A7%D8%B2-%D8%A7%D9%81%D8%B3%D8%A7%D9%86%D9%87-%D8%AA%D8%A7-%D9%88%D8%A7%D9%82%D8%B9%DB%8C%D8%AA-yvc4t7ammkag</link>
                <description>با دیدن نوشته‌ای، این توئیت را منتشر کردم:نهنگ بیت‌کوین چیست؟ یک موجود فرضی که زمانی که تحلیلگرهای تکنیکال نتوانند آینده‌ی قیمت را به خوبی پیش‌بینی کنند، از آن استفاده می‌کنند.مارکت میکر نیز نامیده می‌شود.تقریباً همان نقش «دشمن» در حوزه‌ی سیاست.در این باره بعدتر فصلی خواهم نبشت، شاید...این هم فصلی که بعدتر نبشتم:آیا واقعا نهنگ بیت‌کوین وجود ندارد؟اگر کسانی را که دارای تعداد زیادی بیت‌کوین (مثلا بیش از هزار) هستند، نهنگ بنامیم، قطعاٌ نهنگ‌های زیادی در دنیا وجود دارند. یکیش رو که همه می‌شناسیم حاج آقا ناکاموتو هستند که بیش از یک میلیون بیت‌کوین دارند.آیا نهنگ‌ها در تعیین قیمت بیت‌کوین نقش ندارند؟مانند همه‌ی بازارها هر چقدر فردی بیت‌کوین بیشتری دارا باشد، توانایی بیشتری برای تأثیرگذاری در بازار دارد. پس نهنگ‌ها هم به نسبت داراییشان نقششان در تعیین قیمت می‌تواند پررنگ‌تر از افراد دیگر باشد.آیا چون بیت‌کوین بر بستر بلاکچین است و شفافیت دارد، همه‌ی مبادلات خرد و کلان آن قابل رؤیت است؟قسمت اعظم مبادلات بیت‌کوین در صرافی‌های متمرکز اتفاق می‌افتد، مبادلات این صرافی‌ها نیز روی بستر بلاکچین انجام نمی‌شود و قابل رؤیت نیست. از آن مهم‌تر نقش خود صرافی‌ها نیز در این مبادلات روشن نیست. پس قسمت عمده‌ی مبادلات بیت‌کوین فاقد شفافیت است.آیا در مجموع نقش نهنگ‌ها پررنگ‌تر از نقش افراد عادی است؟با این که قطعا فردی که هزار بیت‌کوین دارد، می‌تواند تأثیر مهم‌تری در بازار نسبت به فردی که یک بیت‌کوین دارد، داشته باشد، اما مشخص نیست که مجموع نهنگ‌ها در مجموع حجم بیشتری از مجموع دارندگان خرد را دارا باشند. پس نقش مجموع نقش نهنگ‌ها نیز لزوماً بیش از نقش دارندگان خرد نیست.مثال می‌زنم:فردی که ده‌هزار بیت‌کوین دارد، می‌تواند معادل نقش ده‌هزار نفر که هرکدام یک بیت‌کوین داشته باشند، اثر داشته باشد. ممکن است گفته شود آن یک نفر دارای تصمیم مشخص است ولی آن ده‌هزار نفر دارای تصمیم مشخص نیستند. پاسخ این است که مجموع نهنگ‌ها هم دارای تصمیم مشخص نیستند.همان طور که دارندگان خرد دارای تعارض منافع هستند، نهنگ‌ها هم دارای تعارض منافع هستند و لزوما با هم هم‌جهت نیستند. اصولا نوسانی که در منحنی‌های قیمت دیده می‌شود، نتیجه‌ی همین تعارض منافع است. پس انداختن مسئولیت تأثیر در قیمت بر گردن نهنگ‌ها تفاوت چندانی با انداختنش بر گردن دیگران نداره.حالا بیایم یه سری بزنیم به تحلیل تکنیکال ببینیم چی هست و کاربردش چیه.برای پیش‌بینی قیمت در هر بازاری باید اون بازار و رویدادهاش رو شناخت. برای پیش‌بینی قیمت سیب‌زمینی لازمه بدونیم فصل کاشت کیه و فصل برداشت در هر منطقه چه زمانیه و سطح زیر کشت سیب‌زمینی در هر منطقه چقدره و هزینه‌ی حمل تا مقصد چقدره تا بتونیم قیمت سیب‌زمینی رو در مقصد با دقت خوبی پیش‌بینی کنیم.اون وقت کسی که تخصصش پیش‌بینی قیمت سیب‌زمینی باشه دیگه نمی‌شه ازش برای پیش‌بینی قیمت آلومینیوم استفاده کرد. تحلیل فاندامنتال هر کالا تخصص خودش رو داره. ولی اومدن دیدن قواعدی در رفتار مشتری‌ها هست که در همه‌ی بازارها مشترکه و با اون قواعد می‌شه با دانستن سابقه‌ی قیمت و حجم معاملات با تقریب خوبی در خیلی از بازارها قیمت‌ها رو پیش‌بینی کرد.این جوری تحلیل تکنیکال متولد شد. ولی در تحلیل تکنیکال با عوامل انسانی سر و کار داریم. مثلا اگر اومدیم پیش بینی کردیم که قیمت طلا در یک ماه آینده دو برابر می‌شه، و این تحلیل مورد قبول همه بود، اون وقت آیا می‌شه از این سیگنال، عملا برای کسب سود استفاده کرد؟ در بسیاری از مواقع خیر.چرا؟چون الآن همه می‌خوان بریزن تو بازار طلا بخرن، دارندگان طلا هم نمی‌خوان الآن بفروشن، چون می‌خوان نگه دارن یک ماه دیگه بفروشن. پس خود این تحلیل بدون هیچ عامل دیگری باعث افزایش قیمت خیلی زودتر از یک ماه آینده می‌شه و کسی نمی‌تونه به قیمت الآن طلا رو بخره. وقتی هم قیمت طلا دو برابر شد، همه می‌خوان بفروشن و خریداری نیست و این باعث کاهش قیمتش می‌شه! عملا سود چندانی نصیب کسی نمی‌شه!پس تحلیل‌های خیلی کار درست که مورد قبول همه باشن، خودشون باعث می‌شن که درست کار نکنن. اینه که آدم‌هایی که زمانی در بازار بیت‌کوین پیش‌بینی‍هاشون رد خور نداشت به جایی می‌رسن که عملا پیش‌بینی‌هاشون اتفاق نمیفته! لاوروف رو که یادتون هست احیانا؟حرف حسابم چیه؟می‌خوام بگم تحلیل تکنیکال به شدت وابسته به پارامترهای انسانیه و چه بسا خود تحلیل هم روی قیمت اثر داشته باشه. پس:اولا: تحلیل کاملا صادق بی‌معنیه.ثانیا: هر روش تحلیلی حتی اگر در زمان خودش تا حدودی جواب بده، بعد از مدتی از کار می‌افته. پس روش‌های تحلیل تکنیکال خیلی بیش از علوم دیگه نیاز به نوسازی دارند و گرنه اصلا جواب نمیدن.نتیجه:اگر می‌بینین تحلیل‌ها درست جواب نمی‌دن، علتش دقیقا همین عوامل بالا است. انداختن موضوع گردن نهنگ‌ها و بازارسازها معناش اینه که بیاین وسط تحلیل تکنیکال، اخبار فاندامنتال رو دلیل این بیارین که چرا تکنیکال کار نمی‌کنه.مگه قرار نبود تحلیل تکنیکال شما، کمک فاندامنتال باشه؟ انداختن تقصیر گردن رویدادها دقیقا معناش اینه که تحلیل شما با فاندامنتال هم‌جهت نیست.حالا سؤال:آیا نمی‌شه یه نهنگ بیاد قسمتی از داراییشو به قیمت نازل بفروشه تا جو درست کنه و قیمت رو بیاره پایین؟پاسخ: حتما ممکنه. اما قرارمون این بود که تحلیل تکنیکال، واکنش قیمت رو به رفتار افرادی رو که در بازار به قصد کسب سود معامله می‌کنند، پیش‌بینی کنه. اگر نمی‌تونه پیش‌بینی کنه معنای دقیقش اینه که روش تحلیلش مشکل داره. اون رو بازنگری کنین. نه این که بگین چون یه نهنگ این کار رو کرده نمی‌شه پیش‌بینی کرد.ضمنا:تأثیر نهایی نهنگ‌ها در نهایت با سایر دارندگان فرق چندانی نداره. حساب اونها رو جدا کردن کار اونهاییه که تحلیلشون کار نمی‌کنه.</description>
                <category>علیرضا زجاجی</category>
                <author>علیرضا زجاجی</author>
                <pubDate>Wed, 02 Jun 2021 19:11:00 +0430</pubDate>
            </item>
                    <item>
                <title>سیستم‌های وام دهی مبتنی بر رمزارزها</title>
                <link>https://virgool.io/Solidity/%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D9%87%D8%A7%DB%8C-%D9%88%D8%A7%D9%85-%D8%AF%D9%87%DB%8C-%D9%85%D8%A8%D8%AA%D9%86%DB%8C-%D8%A8%D8%B1-%D8%B1%D9%85%D8%B2%D8%A7%D8%B1%D8%B2%D9%87%D8%A7-h54tp3gi0irw</link>
                <description>چندی پیش در گفتمانی بین دو نفر از دوستان توئیتری جناب فی اولر و آقای مهدی صالحی نکاتی در مورد سیستم‌های وام‌دهی مبتنی بر رمزارزها مورد بحث قرار گرفت. اون نکات رو این جا جمع کردم تا زیر دست و پای اصحاب توئیتر له نشه.فی اولر:چند وقت پیش یک تبلیغ دیدم از یک سرویس ایرانی که بیت‌کوین بعنوان گرو قبول می‌کرد و بهت وام می‌داد. چندتا نکته به نظر من رسید. نظر شخصیم رو می‌گم و از صمیم قلب رای رفقایی که دارن توش فعالیت می‌کنن آرزوی موفقیت می‌کنم. این رو هم بگم ممکنه این دوستان این موارد رو روی سایتشون نوشته باشن. من صادقانه باید بگم نرفتم بخونم. این مواردی که به نظر من می‌رسه در واقع ویژگی‌های یک پلتفرم «قرض‌دهی» ایده‌آله.  قبل از هرچیز بیاین باهم فرض کنیم ما کلا دیفای رو ندیده می‌گیریم. یعنی می‌خوایم از یک نهاد متمرکز پول قرض کنیم. به این صورت که مثلا ۲ برابر مقداری که می‌خوایم ریالی قرض بگیریم رو اونجا گرو بگذاریم و قسط‌ها رو ریالی پرداخت کنیم و بعد هم اصل بیت‌کوین‌ها رو پس بگیریم. این روش چه مشکلاتی داره و چطور می‌شه اون مشکلات رو رفع کرد؟  مشکل اول: اعتماد این موضوع پاشنه آشیل این بیزنس مدله. شما در هرصورت به اسم و اعتبار اون افرادی  که این سیستم رو می‌چرخونن اعتماد کردید. اون بیت‌کوین پس‌فردا اگر ۵ برابر ریالی شد که شما قرض گرفته بودید. اون دیگه شانس شماست که این افراد پول شما رو کامل برگردونن یا نه.  مشکل دوم: حریم خصوصی. این مشکل رو می‌شه با روش‌هایی برطرف کرد. مشکل اصلی اینه که شما مثلا یک UTXO نیم بیت‌کوینی داری و می‌خوای مثلا ۵۰ میلی اونجا گرو بذاری. خب اگر حواست نباشه و کار رو اونطور که باید درست انجام ندی حداقلش اینه که اون بابایی که پشت سیستم داشبورد سیستم اون شرکت نشسته از اسم و آدرس و شماره ملی و عکس با شورت ورزشی شما و حداقل نیم بیت‌کوین دارایی شما خبر داره اینکه این مساله درسته یا غلطه به خود شخص بستگی داره ولی من فکر می‌کنم درست نیست. مشکل سوم و از همه مهم‌تر: اون بیت‌کوین که گرو گذاشتم باهاش چیکار قراره بکنن ببینید این سیستم‌های قرض دادن در ازای گرو گذاشتن بیت‌کوین از پارسال توی دنیا خیلی زیاد شدن و روش کارشون هم متنوعه درست‌ترین مورد به نظر من مدلیه که می‌گه ببین تو گرو می‌ذاری. من در ازاش به تو قرض می‌دم. یک نهاد سومی هم باید باشه که نه به من ارتباط بیزنسی داره نه به تو. پس بیایم یک قرارداد ۲ از ۳ امضایی بیت‌کوین درست کنیم. بیت‌کوین می‌ره به اون حساب و یک کلید می‌رسه به هر کدوم از ما. اگر بین من که به تو پول قرض دادم و تو که بیت‌کوین گرو گذاشتی مشکلی پیش اومد اون نهاد سوم به عنوان به قول معروف حَکَم میاد وسط و تصمیم می‌گیره. اگر همه چیز خوب پیش رفت که هیچ ما ۲ کلید از ۳ کلید رو داریم و اصلا کاری هم به اون نهاد نداریم. شما این رو در نظر بگیرید یک مسئله دیگه هم که به نظر من مهمه توی قرارداد مطرح می‌شه. اینکه اون بیت‌کوین که گرو گذاشتین توی اون آدرس می‌مونه و تکون نمی‌خوره. شما هروقت خواستی می‌ری توی یه اکسپلورر بیت‌کوین و مطمئن می‌شی اون بیت‌کوین رو برنداشتن باهاش مثلا ترید کنن. این ۳ مشکل باعث می‌شه که مردم بیشتر تمایل داشته باشن به دیفای که اتفاقا توی بیت‌کوین ۲-۳ هفته‌اس بخش قرض دادنش راه افتاده. حتما به زودی درباره اون هم می‌نویسم.قرار بود درباره روش غیرمتمرکز قرض دادن برپایه بیت‌کوینی صحبت کنیم که واقعا ساده و موثره. ببینیم دیفای بیت‌کوین چطور کار می‌کنه؟  فرض کنیم شما بیت‌کوین دارید و می‌خواید در قبال گرو گذاشتن اون از یک نفر بدون اینکه نیاز به اعتماد کردن به کسی باشه وام بگیرید.اینجا یک نهادی بعنوان واسط بین شما که وام‌گیرنده و گرو گذار هستید و اون فردی که وام دهنده هست عمل می‌کنه و به این ترتیب فرآیند وام دهی انجام می‌شه:  ۱- وام‌گیرنده و وام دهنده هرکدوم یک حساب کاربری در نهاد واسط باز می‌کنند و شرایط قرارداد رو قبول می‌کنند شرایط قرارداد یعنی:وام گیرنده چه مقدار بیت‌کوین گرو می‌گذاره وام دهنده چه مقدار وام و با چه درصد سودی به وام‌گیرنده پرداخت می‌کنه مدت قرارداد چقدره نسبت وام به سپرده چه مقداره  وقتی این موارد تایید شد، وام دهنده و وام گیرنده یک آدرس استیبل کوین شخصی توی قرارداد وارد می‌کنند.۲- نهاد واسط یک حساب مولتی‌سیگ ۲ از ۳ امضایی می‌سازه و هرکدوم از اونها یک کلید از اون ۳ کلید رو در اختیار خواهند داشت.  ۳- وام‌گیرنده برابر مقداری که توی قرارداد مشخص شده رو به اون آدرس واریز می‌کنه. پس بعد از ۳ کانفرم شبکه فرد وام دهنده مطمئن می‌شه که بیت‌کوین گرو گذاشته شده.۴- وام دهنده استیبل‌کوین مورد قبول وام گیرنده که در قرارداد مشخص شده رو به آدرسی که توی قراردادشون ثبت شده واریز می‌کنه و آیدی اون تراکنش رو در صفحه آنلاین قرارداد ثبت می‌کنه و این دو نفر دیگه تا روز اتمام قرارداد با هم کاری ندارند.۵- روزی که قرارداد به پایان رسید. وام گیرنده مقدار اصل پول بعلاوه سود رو به آدرسی که توی قرارداد ذکر شده واریز می‌کنه و آیدی اون تراکنش رو توی صفحه آنلاین قرارداد ثبت می‌کنه. نهاد واسط همه مسائل رو چک می‌کنه و اگر همه‌چی همونطور که باید باشه کارمزد خودش رو کم می‌کنه و گرو که بیت‌کوین باشه و استیبل‌کوین که وام بوده رو به حساب اون افراد برمیگردونه.  تا اینجا سناریویی رو بررسی کردیم که همه چی خوب پیش می‌ره ولی تا همینجا هم نسبت به مدل برپایه اعتماد خیلی بهبود دادیم روش کار رو و در واقع تونستیم «اعتماد کردن» رو به کلی از روال کار حذف کنیم. ممکنه شما سوال بپرسین که «آیا ما نباید به اون نهاد واسط اعتماد کنیم؟» و جواب خیر هستش.  اگر به هر دلیل اون نهاد واسط از بین بره وام دهنده و وام گیرنده می‌تونن با توجه به اینکه کلیدهای لازم برای بازیابی اون بیت‌کوین گرو گذاشته شده رو در اختیار دارند، با هم تسویه کنند و بیت‌کوین گرو گذاشته شده رو هم بیرون بکشن. این سیستم با توجه به اینکه از استیبل کوین ها استفاده می‌کنه می‌تونه توی حفظ حریم خصوصی کاربران هم موثر باشه. چرا که افراد می‌تونن در این پلتفرم بصورت ناشناس با هم معامله کنند و نیازی به احراز هویت نیست چون پول فیات در میان نیست.نسخه اولیه این روش غیرمتمرکز حدود ۲ هفته است که بر روی سایت مجموعه هودل هودل راه‌اندازی شده و شما می‌تونید با رفتن به سایت اونها وام بدید یا بیت‌کوین گرو بگذارید و وام بگیرید.  http://lend.hodlhodl.comمهدی صالحی:دوست خوبم فی اولر یه توضیحی در مورد سیستم وام گیری جدیدhodl hodl داده. خواستم یه چیزایی بهش اضافه کنم.خب به نظرم اگر به این روش بگیم روش توزیع شده یا Distributed فکر کنم بهتر باشه چون خب یه نهاد متمرکز داره و یه نقطه ی Trust جا گذاشتیم. اگر این نهاد بخواد خیلی راحت می تونه با وام دهنده دست به یکی کنه و همه ی وثیقه های وام گیرنده ها رو بکشن بالا و برن. یا اصلا بگن ببخشید هک شدیم.مثل خیلی از این حرکاتی که صرافی های متمرکز زدن و اسمشو گذاشتن هک. مشکل اصلی در وام دهی به شکل غیر متمرکز واقعی همینطور که به افشین گفتی اینه که اگر ارزش وثیقه ای که وام گیرنده گذاشته بیاد پایین‌. وام گیرنده وام رو بیخیال میشه و پیش خودش میگه چرا وام رو برگردونم؟!این مشکل به طور کلی همه جا وجود داره و خب مربوط به کریپتو نیست فقط. فرق اینجا با Traditional finance اینه که اونجا شما هویتت مشخصه و اگر خطایی کنی و پول رو برنگردونی مشکلاتی پیش میاد واست. مثلا Bad Credit میشی و یا اگر میزان پولی که بردی زیاد باشه که میبرنت دادگاه و ...ولی اینجا که کسی هویتش مشخص نیست. پس طراح سیستم وام دهی باید مطمئن باشه که هیچ وقت ارزش وثیقه ی کسی پایین تر از میزان وامی که گرفته نیاد. خب چه کار می کنن؟ در اولین حرکت که بهت می گن باید وثیقه ای که میذاری بیشتر از وامت باشه که بهش میگن Over-Collateration.ولی این کافی نیست چرا؟ چون وثیقه از جنس بیت کوین هست و خود بیت به شدت قیمتش Volatile هست و تغییر می کنه. پس ممکنه قیمت بیت اینقدر بیاد پایین که وثیقه ها وام های گرفته شده رو پوشش ندن و خب در این صورت وام گیرنده ها میرن واسه خودشون و وام دهنده ها ضرر می کننپس به یه مکانیزم دیگه نیاز داریم که قبل از اینکه قیمت بیت کوین برسه به حدی که وثیقه وام رو پوشش نده یه کاری کنه. یعنی سریع بره وثیقه رو بفروشه و پولش رو بده به وام دهنده. که به این میگن Liquidation.خیلی از اینا رو گفته بودی ولی گفتم کامل توضیح بدم که اگر کسی تو این فضا وارد نبود بخونه کامل منظورتو بفهمه.حالا برگردیم باز سر  سیستمی که گفتی. این سیستم با یه سیستم کامل متمرکز فرقی نداره خب خیلی. چون همونطور که گفتم داریم یه نقطه به عنوان نفر سوم میذاریم که همه ی اعتمادمون به این نقطه هست و اگر اون fail کنه کل سیستم خرابه.راه حل چیه؟ اینه که سعی کنیم این اتفاق Liquidation رو غیرمتمرکز کنیم. مشکل بلاکچین بیت کوین برای طراحی این مکانیزم‌ها هم از جنس اینه که ما زبون تورینگ کامل می‌خوایم که بشه این کد رو روش پیاده کرد که بیت نداره و ...حالا چن تا راه حل هست واسه این. یکیش Layer 2 هست. الان که لایتنینگ از HTLC استفاده می کنه و تنها لایه ۲ هست که دیدم واسه بیت (یه سری چیزای مزخرف مثل RSK دیدم که چَرت و پَرته) و لایتنینگ هم نمی‌شه این کدی که می خوایم رو زد روش.دومین راه حل این پروژه هایی هستن که بهشون میگن Bridge و یا راه حل های Cross chain ای که مثل یه پل بیت بلاک چین ها ارتباط برقرار می کنن.  چنتاشون رو شنیدم مثل COSMOS یا Polkadot که چون اصلا در موردشون نخوندم هیچ نظری نمیدم در موردشون.در این cross chain ها مشکل اصلی ما atomicity هست. یعنی چون داریم با بلاکچین های متفاوت کار می کنیم و Transaction finality متفاوت دارن نمیشه با هم رو هر دو بلاکچین همزمان کار کرد و ....راه حل ساده‌تر استفاده از بلاکچین هایی هست که قرارداد هوشمند میشه روشون تعریف کرد که تورینگ کامل هستن مثل اتریوم. مشکل ولی اینه که ما بیت کوین روی اتریوم نداریم.راه حل خیلی زشتی که واسه این کار دارن انجام میدن اینه که یه نهادی بیت شما رو می گیره و رو اتریوم بهت ERC20 توکن معادلش رو میده. این آخری با اون پروژه که تو گفتی به لحاظ اعتماد مثل هم هستن. مثل WBTC اگه شنیده باشی.وقتی همه‌ی موارد رو با هم بررسی می‌کنم میبینم همه یه جاشون می‌لنگه. ولی تو اتریوم یه پروژه هست به اسم Compound که واسه وام دهی هست و خیلی جالب داره کار می کنه. لاقل واسه وثیقه و وام‌های ERC20 به نسبت غیرمتمرکزه. الیته اگر اتریوم رو غیر متمرکز بدونیم.</description>
                <category>علیرضا زجاجی</category>
                <author>علیرضا زجاجی</author>
                <pubDate>Fri, 15 Jan 2021 12:36:29 +0330</pubDate>
            </item>
                    <item>
                <title>رمزارز پایدار دای DAI: چرا و چگونه؟</title>
                <link>https://virgool.io/Solidity/%D8%B1%D9%85%D8%B2%D8%A7%D8%B1%D8%B2-%D9%BE%D8%A7%DB%8C%D8%AF%D8%A7%D8%B1-%D8%AF%D8%A7%DB%8C-dai-%DA%86%D8%B1%D8%A7-%D9%88-%DA%86%DA%AF%D9%88%D9%86%D9%87-j9qwwckai4iz</link>
                <description>این سری توئیت رو دوستمون مهدی صالحی اواخر سال ۲۰۲۰ توئیت کرده. خودش با این همه زحمت ندیدم جایی جمعش کرده باشه. گفتم همه رو یه جا جمع کنم، از بین نره. او در ۸ گام موضوع رو برای شما باز می‌کنه. براش آرزوی موفقیت می‌کنم.گام نخستاگر تو حوزه ی بلاکچین و رمزارزها فعالیت کرده باشید احتمالا اسم رمزارز DAI یا همون دای به گوشتون خورده. این جا می‌خوام در مورد پروژه ی Maker که رمز ارز پایدار DAI رو معرفی کرده، صحبت کنم. تو این رشته توییت یه پیش زمینه می‌گم بقیش بمونه برای بقیه روزای هفته.خب Maker یک اپلیکیشن غیر متمرکز یا به قولی Dapp هست بر بستر بلاکچین اتریوم که از تعدادی قرارداد هوشمند یا Smart Contract تشکیل شده. این که هر قرارداد چی هست و چه کار می کنه رو تک تک در طول هفته توضیح می‌دم.ولی کلا هدف این اپلیکیشن چیه؟ خیلی ساده هست. اینه که یه توکن تعریف کنه که ارزشش همیشه نزدیک به ۱ دلار آمریکا باشه.خب اینجا چنتا سوال ممکنه مطرح شه. اول اینکه چرا به استیبل کوین یا در واقع توکنی نیاز داریم که قیمتش ثابت باشه؟ جواب این سوال خودش در حد یه اپیزود پادکست وقت نیاز داره و اینجا در موردش صحبت کردم. البته خیلیا معتقدن ضرب کردن استیبل کوین‌ها اشتباهه!!اگر تو این فضا ترید کرده باشید یا فعال باشید حتما پیش خودتون گفتید که خب مگه ما تتر یا USDC رو نداریم که استیبل کوین هستند. پس چه نیازی داریم به یه استیبل کوین دیگه‌ای که اسمش دای هست؟اینو هم تو همین قسمت کامل گفتم ولی اگه بخوام خیلی سریع دوباره توضیح بدم باید بگم تتر چی هست: تتر یه استیبل کوین هست که قیمتش دلار آمریکا رو دنبال می‌کنه. در واقع قرار بر این هست که بنیاد تتر به ازای هر توکن یه دلار در بانک قفل کنه و معادلش یه تتر در بلاکچین مورد نظر ضرب بشه.حالا مشکلاتی که تتر داره چیه؟ ۱. اثبات این که بنیاد تتر مقداری که باید رو در بانک ذخیره کرده و دست بهش نزده خودش بزرگترین چالشه ۲. بنیاد تتر یه شرکت هست و هر چالش حقوقی یا شکایتی ازش بشه دارایی شما رو ممکنه در خطر قرار بده.۳.  تتر و استیبل کوین های مشابه اون معمولا توانایی فریز کردن آدرس‌هایی که بخوان رو دارن و چندین بار اتفاق افتاده که دارایی فرد خاصی بلوکه شده.خب پس اینطور که مشخص شد مشکل اصلی اینه که یه شرکت حقوقی داره تضمین می کنه که استیبل کوین منتشر می‌کنم پس باید دنبال راه حلی باشیم که اون شرکت واسط رو حذف کنیم. چجوری؟از طریق قرار داد های هوشمند بیایم یه پروژه بسازیم بر بستر یه بلاکچین که اسمش میشه پروژه ی Maker و از طریق اون استیبل کوین DAI رو منتشر کنیم.همین جا DAI و Maker رو کامل باز می‌کنم. اینم که میبینید نمودار تغییرات قیمت DAI هست که با تقریب خوبی همیشه ۱ دلار هست:گام دومدوستان من تو توضیحات سعی می‌کنم از دید یه طراح و پله پله ببرمتون جلو. خیلی جاها رو توضیح میدم و میریم جلو و یه دفعه به یه مشکلی می خوریم که مجبوریم کلی از قسمت های قبل رو تغییر بدیم.پس این سیستمی که پایین توضیح میدم خیلی جاهاش با سیستم فعلی پیاده شده در Maker و DAI فرق داره و لطفا تا آخر هفته و داستان دنبال کنید تا خطایی در فهم سیستم واقعی اتفاق نیفته واستون.در رشتوی قبلی به اینجا رسیدیم که می خواستیم بنیاد تتر رو به عنوان واسط حذف کنیم وخب بهترین راه واسه تمرکززدایی خود بلاکچین هست. در واقع دنبال راهی بودیم که کاری که بنیاد تتر میکنه رو با مجموعه ای از قرارداد های هوشمند جایگزین کنیم.کاری که بنیاد تتر می کنه چیه؟ گفتم به ازای هر توکن که منتشر می‌کنه یه دلار در بانک قفل می‌کنه. در واقع داره یه توکن با پشتوانه ۱ دلار آمریکا تولید می‌کنه.خب بیایم سعی کنیم این رو تو بلاکچین اتریوم انجام بدیم. یعنی به ازای هر توکن DAI که میخوایم منتشر کنیم یه پشتوانه ۱ دلاری در قرارداد هوشمند ذخیره کنیم. اما این ممکنه؟ما که دلار نداریم روی اتریوم که بخوایم ذخیرش کنیم. اصلا ما دنبال این هستیم که یه توکن معادل دلار تعریف کنیم. اینجا اولین جرقه واسه پروژه‌ی Maker برای انتشار توکن DAI مطرح شد.سازندگان پروژه گفتن بیایم از کوین شبکه اتریوم که Ether هست به عنوان پشتوانه برای انتشار DAI استفاده کنیم. یعنی بیایم یه مقداری Ether در قرارداد هوشمند ذخیره کنیم در ازای انتشار هر واحد توکن DAI. حالا سوال سخت مطرح شد: چقدر Ether رو پشتوانه ی یک دای کنیم؟بیاید ساده فکر کنیم و معادل ۱ دلار اتر رو ذخیره کنیم در قرارداد هوشمند و به ازای اون یه توکن دای رو منتشر کنیم که داره با معادل ۱ دلار اتر پشتوانه میشه. ولی یه جای کار میلنگه نه؟اگر یه ساعت دیگه قیمت اتر مثلا ۱۰ درصد ریخت باعث میشه اون مقداری که ذخیره کرده بودیم بشه ۰.۹ دلار و در واقع ارزش هر توکن دای دیگه ۱ دلار نباشه. فرقش با کاری که تتر می کرد چیه؟ اونجا دقیقا ۱ دلار ذخیره می شد و خب ۱ دلار همیشه ۱ دلاره کمتر که نمیشه.پس چه کار کنیم؟! جوابش اینه که مقدار بیشتری اتر رو به عنوان وثیقه در ازای هر توکن دای در قرارداد هوشمند ذخیره کنیم تا اگر قیمت اتر ریخت باز هم هر توکن دای پشتوانه ی حداقل یک دلار رو داشته باشه.به وثیقه تو انگلیسی میگن Collateral. حالا ما داریم وثیقه ی بیش از اندازه میذاریم دیگه درسته؟ به این میگن Over-Collateralization یا بیش وثیقه گذاری.سوال سخت بعدی: به ازای هر توکن دای که قراره ارزشش یه دلار باشه چقدر اتر ذخیره کنیم که اطمینان خاطر داشته باشیم که اگر اتر ریخت باز هم پشتوانه حداقل یه دلار می مونه؟جوابی که طراحان پروژه Maker به این سوال دادن واسه خودشون ۱.۵ بود در ابتدا. یعنی اینکه گفتن شما اگه توکن دای میخوای که ارزشش ۱ دلار قراره باشه باید معادل ۱.۵ دلار اتر رو در قرارداد هوشمند ما ذخیره کنی تا ما بهت یه توکنت رو بدیم.خب اینکه به نظر مسخره میاد. من چرا برم معادل ۱.۵ دلار اتر بدم که بهم یه توکن ۱ دلاری بدید؟ داستان فقط همین نیست. شما علاوه بر توکن دای که بهت داده میشه یک موقعیت معاملاتی یا Position هم بهت داده میشه که در اون لحظه ی اول ارزشش ۰.۵ دلاره.پس چی شد در کل؟ کاربر میره معادل ۱.۵ دلار اتر رو واریز می کنه به قرارداد هوشمند و در ازاش ۱ توکن ۱ دلاری دای و یه موقعیت معاملاتی با ارزش ۰.۵ دلار بهش داده میشه. اینطور فرمولی تو ذهنتون باشه:(Deposit = DAI + Position (CDPواسه این موقعیت یا همون position  طراح های Maker یه اسم سخت انتخاب کردن. اسمش رو گذاشتن Collateral Debt Position یا همون CDP. اگر بخوام به فارسی ترجمش کنم میشه موقعیت بدهی وثیقه.خب حالا اگر اتر قیمتش ۱۰ درصد بریزه چی میشه؟ ما معادل ۱.۵ دلار اتر ذخیره کرده بودیم دیگه درسته؟ الان ۱۰ درصد ارزشش کمتر شده. یعنی شده ۱.۳۵ دلار. خب قرار بر این بود دای ۱ دلار بمونه. این یعنی CDP ما ارزشش شده ۰.۳۵ به جای ۰.۵ که مجموعشون بشه همون ۱.۳۵!!یه نگاه کنید چی شد. اتر ۱۰ درصد ریخت ولی CDP از ۰.۵ شد ۰.۳۵و این یعنی ارزش CDP معادل ۳۰ درصد ریخته و نه ۱۰ درصد. جالب شد نه؟ اونایی که ترید کردن و یا با مالی آشنایی دارن می دونن به این میگن اهرم یا Leverage با ضریب ۳ !!باز ترش کنم: ریسک تغییرات قیمت اتر رو انداختیم روی دوش دارندگان CDP و از اونور قیمت دای رو ثابت کردیم. خب ممکنه واستون سوال شه چرا کسی باید CDP بخواد؟ من فقط سناریو ریختن قیمت اتر رو گفتم. حالا بریم سناریو بالا رفتنش رو هم بررسی کنیم.این دفعه فرض کنید قیمت اتر ۱۰ درصد بره بالا. چون معادل ۱.۵ دلار اتر گذاشته بودیم و ۱۰ درصد رفته روش یعنی شده 1.65 دلار. یعنی باز دای معادل ۱ دلاره و CDP معادل 0.65 دلار. این یعنی 0.5 دلارش شده 0.65 و معادل ۳۰ درصد سوده. یعنی اهرم ۳ .حالا سخت ترین سوال: اگر قیمت اتر خیلی ریخت ( بیشتر از ۳۳.۳۳ درصد) اون وقت چی میشه؟؟ اینطوری اون مقدار اتری که ذخیره کرده بودیم ارزشش میاد زیر ۱ دلار و دیگه دای ۱ دلار نمیرزه و هرچی ساختیم خراب میشه …این یعنی تمام سیستمی که ساختیم مشکل داره. باید یه جور اساسی عوضش کنیم. بقیش رو میذارم واسه فردا دیگه :دی همونطور که گفتم این سیستمی که بالا توضیح دادم خیلی جاهاش با پیاده سازی واقعی فاصله داره پس ادامه داستانو دنبال کنید که ببینیم چی میشه!گام سومتو قسمت قبل تا اینجا رسیدیم که با ضریب ۱.۵ به تنهایی به مشکل می خوریم. چون اگر اتر بیشتر از ۳۳.۳۳ درصد بریزه اونوقت ارزش پشتوانه ی هر دای میاد زیر ۱ دلار و خب دای دیگه ارزشش ۱ دلار نمی مونه.راهی که طراحا رفتن واسه درست کردنش این بود: گفتن این ۱.۵ که ما گفتیم حداقله مقدار اتری هست که شما می تونید به ازاش ۱ دای دریافت کنید. خب یعنی چی حداقل؟ چرا وقتی می تونی معادل ۱.۵ دلار اتر بذاری واسه هر دای بیای بیشتر بذاری؟دلیلش یه مکانیزم هست که طراحا پیاده کردن واسه تنبیه کسایی که ارزش دارایی ذخیره شدشون میاد زیر ۱.۵ دلار. اگر ارزش Deposit اومد زیر ۱.۵ دلار چی میشه؟ موقعیت CDP شما نقد یا به اصطلاح Liquid میشه.یعنی چی Liquid میشه؟ دوستانی ترید می کنن یا مالی خوندن اینو زیاد دیدن مخصوصا در حساب های مارجین. ولی بخوام واسه بقیه ساده توضیح بدم اینطوریه که اگر ارزش دارایی که ذخیره کردید اومد زیر ۱.۵ دلار اون وقت بقیه می تونن CDP شما رو با قیمت کمتر بخرن و موقعیت شما از دستتون میره.خب تا همینجاش رو یه جمع بندی ریز کنیم بعد بریم تو جزییات. اگر یه نفر بخواد یک دونه توکن دای تولید کنه و مثلا بره باهاش چیزی بخره باید حداقل معادل ۱.۵ دلار اتر رو توی قرارداد هوشمند Maker ذخیره کنه. اینکه چقدر بیشتر ذخیره می کنید به میزان ریسکی که می خواید داشته باشید بستگی داره.چون اگر مثلا ۱.۵۵ بذارید و قیمت اتر ۵ درصد حتی بریزه چون ارزش ذخیره اومده زیر ۱.۵ دلار موقعیت CDP شما نقد میشه و خب ضرر می کنید. این که ضررش چیه رو در ادامه توضیح میدم.خب بیاید اصلا فرض کنیم شما رفتی یه دونه توکن دای ضرب کردی و معادل ۱.۵ دلار هم گذاشتی تو خزانه ی خودت تو پروژه ی Maker. (خزانه ترجمه ی Vault هست که در پروژه ی Maker استفاده میشه). فرض کن اصلا اون توکن دای رو رفتی باهاش یه چیزی خریدی و دیگه نداریش.یه ساعت بعد قیمت اتر یه دفعه ۱۰ درصد میریزه. الان ارزش دارایی شما ۱.۳۵ هست. همونطور که گفتم چون ارزش خزانه شما شده ۱.۳۵ که کمتر از ۱.۵ هست CDP شما Liquid میشه. این Liquid شدن در یه حراجی اتفاق میفته. چه کسایی تو اون حراجی شرکت می کنن؟ یه سری گرگ که تو Maker بهشون میگن Keeper.بذارید باز هم جزیی تر بگم. اصلا این Keeper ها همش دارن همه ی Vault ها یا خزانه ها رو نگاه می کنن و دنبال یه خزانه هستن که یه لحظه بره زیره ضریب ۱.۵ . سریع میان یه تابع رو در قرارداد هوشمند صدا میزنن به اسم bite و آدرس اون خزانه ای که اومده زیر ۱.۵ رو بهش میدن.قرارداد چک میکنه و اگر ذخیره در اون خزانه اومده باشه زیر ۱.۵ میفرستتش واسه حراج که Liquid اش کنه. تو این حراج CDP فردی که Liquid شده به حراج میرسه و Keeper ها که در واقع می تونن هرکسی با آدرس اتریوم باشن بازیگر های این حراج هستن.خب قبل از اینکه حراج رو توضیح بدم در مورد تنبیهی که دارنده ی  CDP ای که حواسش نبوده و خزانش Liquid شده بگم. این فرد در جا ۱۳ درصد از ذخیره ای که داره رو از دست میده. به این میگن Liquidation penalty.** این قسمت و قسمت بعد توضیح اضافه هست اگر دیدی نمیفهمی برو بعدی. اولش تو سیستم اینو نذاشته بودن و تنها تنبیه برای فرد خاطی این بود که CDP ایش به حراج گذاشته می شد و زیر قیمت می خریدنش و خب ضرر می کرد.****ولی یه دفعه دیدن بعضیا میان از عمد همون ضریب ۱.۵ رو میذارن تا Liquid شن. بعد میرفتن تو حراج دارایی خودشون رو ارزون تر می خریدن. به این حمله میگن Grinding Attack. واسه همین این ۱۳ درصد رو گذاشتن کسی این کارو نکنه.** خب برگردیم سر اصل مطلبخب حراج شروع میشه و Keeper ها شروع می کنن به پیشنهاد دادن. یادمون بیاد حراج سر چی بود؟ سر ذخیره ی خزانه که تو مثالی که بالا زدیم و الان ارزش ۱.۳۵ دلاره. حواستون باشه اون کسی که خزانش نقد شده بود یه دای یک دلاری گرفته بود و رفته بود خرجش کرده بود.پس الان کلا چیزی که می مونه واسش ته تهش ۰.۳۵ دلاره که یه مقداریشو هم سر او ۱۳ درصد Liquidation penalty باخته و رفته. پس باید وایسه ببینه تو حراج چه اتفاقی میفته و اصلا ته حراج چیزی می مونه که بهش برسه یا باید با همون ۱ دلاری که خرید کرد خوش باشه.برگردیم سر حراج. Keeper اول یه مقدار DAI پیشنهاد میده. دومی یه مقدار دیگه و همین طور پیش میره حراج تا جایی که کسی نباشه پیشنهاد جدید بذاره. (این قسمت رو بازتر نمیکنم که گیج نشید. اگر کسی خواست جزییات بیشتر بدونه که سیستم تا چه زمانی صبر میده Reply کنه توضیح بدم)این همه ی ماجرا نیست و این حراج پیچیده تره متاسفانه. حراج در حالت عادی ادامه پیدا می کنه و نفر بعدی DAI بیشتر پیشنهاد میده تا جایی که یکی از پیشنهادا کل طلب فرد خاطی رو شامل شه.طلب صاحب خزانه نقد شده چی هست؟ اون یه دونه DAI بود که برداشت و برد به علاوه ی اون ۱۳ درصد جریمش به علاوه ی یک چیز دیگه(Staibility Fee) که الان نمی گم و بعدا بهش بر میگردیم.خب فرض کنید به این نقطه رسیدیم و یه نفر این مقدار DAI معادل طلب صاحل خزانه رو پیشنهاد داد ولی یه نفر دیگه بخواد پیشنهاد جذاب تر بذاره. آیا باید DAI بیشتر پرداخت کنه؟نه چون سیستم اون مقدار DAI که می خواست رو گرفته. حالا این حراج اصطلاحا Reverse میشه و Keeper ها میان روی همون مقدار DAI که گذاشته بودن مقدار کمتری از ذخیره خزانه رو پیشنهاد میدن. یعنی این دفعه جنگ بر سر میزان کمتر خزانه به ازای مقدار ثابت دای هست.همونطور که گفتم کلا حراج زمانی تموم میشه که دیگه کسی نباشه پیشنهاد جدید بده. ته داستان اینه که تو حراج اگر چیزی هم موند داده میشه به اون صاحب خزانه ی نقد شده.به علاوه ی این اون مقدار DAI که از این حراج به دست اومد اندازه ی ۱ دلارش که می سوزه تا DAI اضافی در سیستم نداشته باشیم و بقیش هم میره توی یه جایی به اسم Buffer Surplus که بعدا در موردش حرف میزنیم.نتیجه ی این قسمت: کسی که می خواد Vault باز کنه تو Maker کامل باید ریسک رو واسه خودش حساب کتاب کنه و بعد اگر خیلی نمی خواد ریسک کنه خیلی بیشتر از ۱.۵ دلار واسه هر دای ذخیره کنه. و اینکه محاسبه ی ریسک واسه CDP ها خیلی شبیه Options هست در مالیسعی می کنم هر روز یه آپدیت بزنم تا کامل این پروژه رو توضیح بدم و بعدش اگر به نظرتون بهتره ادامه بدیم میرم سراغ یه پروژه دیگه. حقیقتش نمیدونم این مطالب چقدر طرفدار داره به زبون فارسی چون اکثر فارسی زبون ها الان قفل روی بیت کوبن هستن.به اين حراجش ميگن Collateral auction و مدل حراج پيچيده اي رو پياده كردن. حقيقتش سعي كردم ساده بگم ولي خب نشدني بود :ديگام چهارمواسه اینکه خیلی خلاصه بگم تا اینجا چی شده یه مثال میزنم. فرض کنید من میخوام ۱۰۰ تا دای جدید ضرب کنه. باید یه خزانه باز کنم در Maker و در اون حداقل معادل ۱۵۰ دلار اتر ذخیره کنم. معمولا همه بیشتر از ذخیره می کنن که ریسکی نباشه.(مثلا با ضریب ۲)بعدش قرارداد هوشمند به من ۱۰۰ تا دای میده و یه موقعیت CDP.  من اون ۱۰۰ تا دای رو برمیدارم میرم خرجش می کنم. اگر قیمت اتر یه جوری ریخت که ارزش خزانه من اومد زیر ۱۵۰ دلار یک Keeper میاد و به قرارداد هوشمند میگه که خزانه ی مهدی باید نقد بشه.قرارداد هوشمند یه حراج راه میندازه و همه سر خزانه من یه تعدادی دای پیشنهاد میدن تا برنده مشخص شه. برنده دای ها رو به سیستم میده و اون مقدار اتری که تو حراج برده رو قرارداد ازتو خزانه من بهش میده.اگر چیزی هم موند قرارداد واسه من میفرسته. این خلاصش بود و یه سری جزییات رو هم نگفتمبریم سراغ اقتصاد این پروژه: تو اقتصاد Maker دو بازیگر اصلی وجود داره. یکی کسایی هستن که دنبال یه استیبل کوین یا ارز پایدار هستن و از تغییرات قیمتی فراری هستن. اینا دنبال دای هستن و نگه دارنده ی دای.یه عده دیگه دنبال تغییرات قیمتی هستن و تغییرات قیمت اتر به تنهایی واسشون کافی نیست و می خوان به شکل اهرمی سرمایه گذاری کنن روی اتر. اینا دنبال CDP هستن چون چند برابر اتر تغییرات داره و از دای بدشون میاد.خب کسی که CDP میخواد باید چه کار کنه؟ بیاد یه خزانه بسازه و بعد دای رو که گرفت ببره بفروشه به کسایی که دای می خوان و یه CDP واسش بمونه. کسی که دای می خواد چه کار کنه؟ باید تو مارکت بره دای بخره. یا از کسی که دای تازه منتشر کرده یا از یه نفر دست چندم بخره.این قسمتش که کسی که دای می خواد نمی تونه دای جدید منتشر کنه خیلی عجیبه نه؟ چرا نمی تونه؟ چون اگر یه دای جدید بسازه باهاش یه CDP هم ساخته. CDP هم قابل انتقال نیست متاسفانه. پس مجبوره نگهش داره. یعنی کسی که از تغییرات قیمتی فراری هست باید یه چیزی با چند برابر تغییرات رو نگه داره.این مشکل بزرگ رو بعدا در آخر که می خوام نواقص پروژه و راه حل هاشو بگم بهش برمیگردم. مشکل اینجا هست که CDP ها قابل خرید و فروش نیستن.برگردیم سر بازی اقتصادی Maker. خب الان ۲ تا بازیگر داریم نگهدارنده ی دای و نگهدارنده ی CDP. هدف سیستم کنترل قیمت دای هست روی ۱ دلار. تا الان تنها کاری که واسش کردیم اینه واسش پشتوانه حداقل یه دلارو تضمین کردیم.آیا این کافیه؟ نه. قیمت همیشه تابع عرضه و تقاضا هست. فرض کنید مثلا مردم گرایش به خرید دای پیدا کردن. یعنی تقاضا میره بالا. اگر عرضه به همون میزان بره بالا که قیمت دای همون ۱ دلار میمونه. اگر عرضه زیاد نشه قیمت میره بالا چون دست بالا رو فروشندگان پیدا می کنن.خب سیستم میخواد قیمت دای ثابت و ۱ دلار بمونه. پس باید عرضه ی دای رو ببره بالا یه جوری دیگه. یعنی باید تعداد دای های بیشتری ضرب بشه و به بازار عرضه کنه.کی بود که دای جدید میساخت و سریع میفروختش؟ کسی که CDP می خواست. حالا وقتی اقبال بر دای و پایداری قیمتی هست هیچ لزومی نیست که تعداد بیشتری خواهان CDP باشن.پس این سیستم این جاش داره میلنگه. این سیستم به شکل آزاد نمیتونه بین CDP و دای تناسب برقرار کنه. پس نیاز هست به یک مکانیزم دیگه. طراح ها اومدن از کاری که بانک مرکزی واسه کنترل توزیع پولی در جامعه انجام میده ایده گرفتن و واسه سیستم نرخ بهره گذاشتن.۲تا نرخ بهره هم گذاشتن. اول ساده تره رو بگم. یک قرارداد هوشمندی گذاشتن به اسم DSR که شما می تونی توکن دای که داری رو تو این قرارداد ذخیره کنی و یه مقداری بهره روش بگیری. به این نرخ بهره میگن Dai saving rate یا همون DSR. این مثل سودی هست که بانک ها روی حساب های ذخیره ای میدن. مثلا اگر قیمت دای بالا رفته باشه تو مارکت باید DSR یا سودی که این قرارداد میده کم بشه تا مردم دای هاشون رو خارج کنن و تو بازار عرضه کنن و قیمت دای بیاد پایین و برعکسش.حالا نرخ بهره ی دوم: بهش میگن Stability fee یا هزینه پایداری. چی هست؟ یه چیزی به فرآیند ایجاد خزانه جدید اضافه کردن. گفتن در حال حاضر وقتی خزانه میسازی یه CDP می گیری و یه مقداری دایحالا اگر کسی خواست موقعیت CDP خودش رو ببنده باید همون مقدار دای رو برگردونه به سیستم و به علاوه ی اون مقدار دای یه Stability fee هم پرداخت کنه تا بتونه موقعیت رو ببنده و اتر های تو خزانش رو خارج کنه.می دونم فهم این دومی سخته دوستان ولی راهی بهتر واسه توضیحش پیدا نکردم.خب حالا فرض کنید سیستم به تعداد بیشتری خزانه ی جدید و اتر نیاز داره. در واقع نیاز داره که CDP جدید ساخته شه. باید یه امتیازی بده به کسایی که میخوان CDP نگه دارن. چه کار می تونه کنه؟باید Stability fee رو بیاره پایین. اینطوری کسایی که CDP نگه میدارن موقع بستن موقعیتشون هزینه ی کمتری می خواد پرداخت کنن و تشویق میشن به ساخت CDP جدید. برعکسش هم صادقه دیگه.خلاصه داستان: اقتصاد Maker ۲ تا بازیگر اصلی داره متقاضیان CDP و دای. هر بازاری نیاز یه دینامیک واسه کنترلش در نقطه ی تعادلش نیاز داره. در این پروژه این کار با تغییر دادن ۲ نرخ بهره در سیستم انجام میشه:Stability fee و DSR rate.توضیح آخر بخش اینکه شاید بپرسید خب کیا این ۲ نا نرخ رو تغییر میدن؟ کسانی که توکن اصلی شبکه رو دارن که اسمش MKR توکن یا Maker توکن هست. در رای گیری تعیین می کنن که نرخ ها رو عوض کنن. رای گیری رو با DAO انجام میدن واسه همینه که احتمالا همه جا اسم Maker Dao رو میشنوید.نحوه ی رای گیری و ساختار MakerDao رو هم بعدا کامل میگم.گام پنجمتو اين پست می‌خوام در مورد حراجی كه دفعه قبل سريع گفتمش دوباره صحبت كنم. اسمش در واقع حراج وثيقه يا collateral auction هست.  اول ميخواستم همه ي حراج هايي كه در این سيستم داريم رو بگم بعد ديدم روي همين يكي متمركز شم بهتره و شايد گيج بشيد.دوباره با يه مثال توضيحش ميدم. فرض كنيم مهدي يه خزانه باز كرده در سيستم ولي بعد از يه مدت نسبت ارزش اتر هايي كه در خزانش هست به تعداد داي هايي كه برده بوده از ١.٥ اومده پايين تر.يعني مثلا روز اول معادل ١٦٠ دلار اتر گذاشته بود و ١٠٠ تا داي ١ دلاري برداشته بود. حالا قيمت اتر ريخته و ارزش اتر هاي داخل خزانش شده ١٤٠ دلار. چون ١٠٠ تا داي برده بوده نسبت وثيقه يا Collateral Ratio اومده زير ١.٥.علي يه دولوپر هست و  در سيستم Maker به اصطلاح Keeper.علی یه نرم افزار Bot نوشته كه هميشه بلاكچين رو چك ميكنه كه اگر نسبت وثيقه در خزانه اي اومد زير ١.٥ بوق هشدار بده.نرم افزار علي خزانه ي مهدي رو ميبينه و سريع هشدار ميده. در ادامه اون نرم افزار يه تابع از قرارداد هوشمند رو صدا ميزنه و آدرس خزانه مهدي رو ميده بهش. قرارداد هوشمند خزانه ي مهدي رو به حراج ميذاره. علي و يه تعداد Keeper ديگه ميان سر خزانه ي مهدي پيشنهاد هاشون رو ميدن.اينجا يه پرانتز باز مي كنم. سيستم يه تعداد اتر در خزانه ی مهدی داره که میخواد بفروشه. مهدي به ازاي اون ١٠٠ تا داي برده. تو پست قبل توضيح دادم كه مهدي علاوه بر اون ١٠٠ تا داي بايد يه درصدي هزينه پايداري يا Stability fee هم به سیستم برگردونه.حالا نرخ بهره ی دوم: بهش میگن Stability fee یا هزینه پایداری. چی هست؟ یه چیزی به فرآیند ایجاد خزانه جدید اضافه کردن. گفتن در حال حاضر وقتی خزانه میسازی یه CDP می گیری و یه مقداری دایمثلا اگر الان stability fee باشه ١ درصد مهدي در اصل ١٠١ تا داي بدهكاره به سيستم. اين تا اينجاش. يه چيز ديگه هم گفته بودم اگه یادتون باشه. كسي كه خزانش نقد يا liquid ميشه ي جريمه 13 درصدي بهش تعلق ميگيره. خب اينطوري يه چيزي حدود ١١٥ تا داي سيستم نياز داره.برگرديم سر حراج. حراج رو واستون كامل بگم. مثل اينه كه برگزاركننده حراج يه تعداد اتر داره و خودش گفته من اندازه ي حداكثر ١١٥ تا داي نياز دارم تا حراج رو ببندم و اتر ها رو به برنده بدم.حراج شروع ميشه يه نفر ممکنه 0 داي پيشنهاد بده. اگه هيچ كسي تا زمان مشخص شده در سيستم پيشنهاد جديد نداد حراج بسته ميشه و برنده با همون 0 داي اتر ها رو ميبره.ولي غير معمول هست اين اتفاق چون دست زياده تو حراج. يه نفر ديگه مياد يه پله بيشتر داي پيشنهاد ميده. اين اتفاق ادامه پيدا مي كنه تا اينكه يكي از اين ٢ مورد اتفاق بيفته:۱)آخرين پيشنهاد كمتر از ١١٥داي باشه و كسي پيشنهاد بالاتر نده ديگه. در اين صورت اون فرد برنده ميشه و اتر هاي خزانه گيرش مياد. ۲)پيشنهادها برسه به ١١٥ تا داي. در اينصورت سيستم ميگه ببينيد من نهايتش همين ١١٥ تا داي رو مي‌خواستم. ديگه داي پيشنهاد نديد. به جاش چيز ديگه پيشنهاد بديد.بگيد به ازاي ١١٥ تا داي چقدر از اتر هاي تو خزانه رو مي خوايد. يعني حراج برعكس. اينجا پيشنهادي برنده هست كه مقدار كمتر اتر رو پيشنهاد بده به ازاي اون ١١٥ تا داي.  یعنی مثلا اگر حراج سر ۰.۵ اتر بوده با ۱۱۵ تا دای. نفر بعدی بگه من ۱۱۵ تا دای میدم ولی واسه ۰.۴۵ اتر هاخب وقتي برنده مشخص شد ١١٥ تا داي رو ميده به سيستم. اون مقدار اتر كه پيشنهاد داده بود از خزانه گيرش مياد. بقيه اتر ها به خود مهدي بر مي گرده. البته اگر چیزی مونده باشه دیگهخب در حالت دوم كه سيستم اون ١١٥ تا داي كه گيرش مياد رو چيكار ميكنه؟ ١٠٠ تاش رو كه مهدي گرفته بود برده بود خرج كرده بود. پس سيستم ملزم هست ١٠٠ تا رو بسوزونه چون ميخواد خزانه ي مهدي رو ببنده و نميخواد داي بدون پشتوانه در سيستم داشته باشه.١٠٠ تا رو سوزوند ١٥ تاي ديگه چي ميشه؟ سيستم Maker يه قلّك داره واسه خودش كه اين پول اضافيا رو ميريزه توش. يادتون هست ١٥ تا مال چي بود؟ يه مقداريش واسه stability fee بود و يه مقداريش واسه تنبيه كه بهش ميگن liquidation penalty. پس اين قلك كه گفتم با اين ٢ تا پر ميشه.اسم قلكه چيه؟ اسمش surplus buffer هست. يكي از استفاده هاش رو امروز ميگم يكي رو تو پست بعدي.خب حالت دوم حراج ختم به خير شد. حالت اول چي؟ يعني اگر برنده كمتر از ١١٥ تا داي داده بود چه بايد كرد؟ خب سيستم اينجا ميگه من بايد حتما ١٠٠ تا داي بسوزونم و از اين كوتاه نميام. اون ١٥ تاي ديگه مهم نيست واسم. ولی ۱۰۰ تا رو حتما باید بسوزونمپس اگه برنده بيشتر از ١٠٠ تا دای داده باشه مشكلي نداره و فقط پول كمتري ميذاره تو قلكش. ولي اگه برنده حراج كمتر از ١٠٠ تا داي داده باشه به سيستم اونوقت قرارداد ميره و دست مي كنه تو قلكش و مابه تفاوتش رو تا ١٠٠ داي از اونجا ميده.اين اصلي ترين استفاده ي surplus buffer هست. حالت بد چيه؟ اينه كه حتي تو قلكش هم پول نباشه. اين اتفاق خيلي كم پيش مياد و دليلش اين ميتونه باشه كه قيمت اتر خيلي ريخته و تعداد زيادي خزانه رفتن واسه حراج و نقد شدن و قلك ديگه جوابگو نيست. مثل ۵ شنبه سیاه که بعدا توضیحش میدمدر اين حالت سيستم يه حراج ديگه برگزار مي كنه به اسم حراج بدهي و در اون توكن governance سيستم رو كه اسمش MKR هست میفروشه به عموم تا اون مقدار داي كه مي خواد رو بدست بياره.  اين حراج آخري رو دفعه بعد توضيح ميدم.  تمام!گام ششمتو پست قبل حراج وثيقه يا Collateral Auction رو توضيح دادم. در اين پست دو حراج ديگه تو سيستم يعنی حراج بدهی يا Debt Auction و حراج مازاد يا Surplus Auction رو می‌گم.در قسمت قبل به اينجا رسيديم كه اگر سيستم بعد از حراج اون مقدار دای كه می‌خواست رو گيرش ميومد كه همه چيز حل بود. اگرم بيشتر گيرش ميومد اضافی رو می‌ريخت تو قلک surplus buffer.رسيديم به اينجا كه اگر سيستم از حراج نتونست اون مقداری كه می‌خواست دای رو فراهم كنه دست می‌كرد تو قلك و اون مقدار رو برمی‌داشت. ولی اگه دست كرد تو قلك و اون مقدار پول نبود چی می‌شه؟سيستم در اين وضعيت مقصر وضع پيش اومده رو حكمرانان سيستم می‌دونه. چون معتقده كه اونا می‌تونستن يه جوری پارامترهای سيستم رو تغيير بدن كه پول تو قلك باشه و يا اصلا خزانه‌ای به حراج نره كه بخواد تو حراج پول كافی جمع نكنه.ولي حكمرانان سيستم كيا هستن؟ دارندگان توكن حكمراني سيستم يعني توكن MKRيا Maker. اينكه چرا حكمراناي سيستم هستن و چجوري حكم مي كنن رو بعدا كامل مي گم.خب گفتم در اين شرايط سيستم پولشو مي خواد ولي نتونسته از حراج اون پولو جمع كنه و تو قلك هم پول نبوده و نگهدارندگان MKR رو مقصر می‌دونه پس بايد اون پول رو از اونا بگيره. ولي چجوري می‌خواد از كسي كه توكن MKR داره دای بگيره؟سيستم مياد يه حراجی برگزار می‌كنه. توش اعلام می‌كنه كه آقا من اينقدر دای كم دارم و بايد جمع كنم. به ازاش توكن MKR ميدم بهتون. به اين حراج ميگن حراج بدهی يا Debt Auction.در اين حراج تعداد دای‌های مشخصی پيشنهاد می‌شه که تعدادش ثابته. شركت كنندگان حراج كه همون Keeperها هستن و بايد تعدادی توكن MKR پيشنهاد بدن در ازای اون مقدار داي. كسی برنده هست كه تعداد MKR كمتری پيشنهاد بده.وقتي برنده مشخص شد سيستم ازش اون مقدار دای كه می‌خواست رو می‌گيره. بعدش تعداد MKR كه در حراج مشخص شد رو ضرب می‌كنه (يعني MKR جديد می‌سازه) و می‌ده به برنده.خب اين كه به نظر مياد ضرری واسه نگهدارندگان MKR نداره؟ داره ديگه. تعداد كل توكن هاي MKR بيشتر می‌شه و به تبع اون قيمتش هم مياد پايين. اين از حراج بدهی. حالا بريم سراغ حراج مازاد يا Surplusطرفِ بد سكه رو گفتيم بريم سراغ طرف خوب سكه. خب ما يه قلك داشتيم به نام surplus buffer. هميشه stability feeهايی كه جمع ميشه به این قلک اضافه می‌شه. علاوه بر اون هر دفعه يه خزانه نقد می‌شه هم يه مقداری جريمه يا liquidation penalty بهش اضافه می‌شه.خب اين قلک رو مثل هر قلک ديگه‌ای محدودش كردن كه یه سقفي داشته باشه. که وقتي سقفش پر بشه يه مقداريش رو خالي كنيم و جايزه بديم و بذاريم دوباره پر شه. اينكه سقف اين قلك چه مقداريه و وقتی پر شد چقدر ازش می‌تونيم به عنوان جايزه برداريم رو حكمرانان يا همون MKR هولدر ها تعيين می‌كنن.حالا سوال اصلی: جايزه  گير كي بياد؟ خب معلومه گير حكمران‌ها. چون سيستم رو خوب اداره كردن و قلک پر شده. جايزه چطور تقسيم می‌شه؟ از طريق يه حراج به اسم حراج مازاد يا surplus auction.توضيح كاملش اينجوريه كه وقتي دای‌های توی buffer يا قلک به سقف رسيد يه مقدار مشخص شده(Lot) ازش گذاشته می‌شه واسه حراج. حراج اينطوری هست كه به ازای اون مقدار مشخص دای(Lot) كسی برنده هست كه تعداد بيشتری توكن MKR پيشنهاد بده.اين يعني فقط كسايی كه توكن MKR دارن مي تونن شركت كنن در اين حراج. وقتي توكن هاي MKR گرفته شد سوزونده ميشه و خب به طبع اون تعداد كل MKR ها كم می‌شه و ارزشش می‌ره بالاتر.اين هم از حراج ها. ٢ تا مورد اصلي ديگه از اين پروژه مونده. يكي Oracle يكي اينكه MKR هولدر ها چجوری حكمرانی ميكنن و DAO اين پروژه چطوري كار می‌كنه. بعد از اين ٢ تا يه پست می‌ذارم و ضعف‌های سيستم رو ميگم و بعدم يه سری پيشنهاد واسه دولوپرا كه شايد بتونن از اين پروژه پول در بيارن.تمام!گام هفتمدر قسمتهای قبل کلیت سیستم گفته شد مونده چنتا ریزه کاری. اولیش اینکه این همه در توضیحات سیستم از ارزش دلاری اتر صحبت کردیم ولی مگه در بلاکچین قیمت دلاری داریم؟ اصلا ما چجوری به اطلاعاتی که بیرون از بلاکچین هستن در قرارداد های هوشمند دسترسی داریم؟این سوال یه سوال کلی هست که در اکثر مواقع که میخوایم قرارداد هوشمند در بستر اتریوم بنویسیم واسمون پیش میاد. ما که قیمت رو در خود بلاکچین نداریم پس چه کار کنیم؟برای حل این مشکل سیستم هایی طراحی شدن که بهشون میگیم Oracle که ترجمش میشه جادوگر. این سیستم های Oracle معمولا یه سری پروژه ی مستقل هستن که کارشون آوردن اطلاعات از بیرون بلاکچین به داخل اون هست. یعنی یه جورایی واسط هستن بین دنیای بیرونی و بلاکچین.اون موقع که پروژه Maker شروع به کار کرد پروژه مستقلی که به تنهایی Oracle باشه نبود و بهتر بگم اونقدر قابل اعتماد نبودن.ولی خب Maker برای خیلی از محاسباتش مثل Liquidation به قیمت اتر نیاز داشت. واسه همین خودشون یه قرارداد هوشمند زدن واسه Oracle. پس اوراکل سیستم Maker داخلی هست.حالا چجوری کار می کنه؟ در قرارداد هوشمند اصلی Maker یک لیست هست از آدرس هایی که بهشون میگن تهیه کنندگان داده یا Data feeders. کار این data feeder ها خوندن اطلاعات از بیرون و فرستادن اونها از طریق تراکنش به قرارداد هوشمند اوراکل سیستم Maker هست.اوایل که پروژه تازه راه افتاده بود فقط 14 تا data feeder بودن که هویتشون هم ناشناس بود. ولی در ورژن جدید اوراکل تعدادی data feeder جدید بهشون اضافه شدن./. این Data feeder های جدید اکثرا پروژه های شناخته شده مثل dYdX هستن.وقتی تعداد data feeder ها رو بردن بالاتر یه سری تغییرات دیگه هم دادن. یکیش اینکه حالا که تعداد از ۱۴ تا بیشتر شد اولش با یه فیلتر و محاسبه ی آماری هر دفعه 14 تا رو از بین اونا انتخاب می شه و  اون ۱۴ تا داده می‌رن مرحله‌ی بعد.یه کار دیگه هم که کردن کنترل این لیست Data feeder رو در اختیار حکمرانان سیستم یعنی نگهدارندگان توکن MKR گذاشتن تا اگر هر کدوم خطایی کنن از لیست حذفشون کنن. یعنی الان اینکه کیا Data feeder هستن رو حکمرانان تعیین می‌کنن.حالا بریم سر پروسه ی بارگذاری قیمت در بلاکچین. اینData feeder ها موظف هستن که قیمت اتر رو نهایتا هر 6 ساعت یه بار آپدیت کنن و داده ی جدید رو به قرارداد هوشمند بفرستن. ولی در کل همیشه به محض تغییر چشمگیر قیمتشونو آپدیت می‌کنن.حالا اگر نکردن چی میشه؟ حکمرانان اونا رو از لیست کنار میذارن. در واقع حکمرانان خیلی حواسشون به قیمت هایی که داده میشه هست تا اگر کسی اشتباهی کرد خطش بزنن.  اگر همه چیز خوب پیش بره ما 14 تا قیمت داریم. چجوری اینا رو با هم ترکیب کنیم که یه قیمت واحد داشته باشیم؟شاید ساده ترین جوابش این باشه که میانگین بگیریم. ولی علم آمار بهمون میگه میانگین اشتباهه چون اگر یکی از این 14 تا یک قیمت خیلی پرت بده کل سیستم رو میریزه به هم.پس چه کار کنیم؟ میانه جوابه این سواله. اگر یادتون باشه واسه محاسبه میانه ی تعدادی عدد اونا رو اول به ترتیب می کردیم و عدد وسطی رو انتخاب می کردیم. اینطوری دیگه یه داده پرت هم نمیتونه نتیجه رو به هم بریزه. جزییات دیگه ای هم هست در مورد اوراکل که به نظرم نیاز نیست اینجا مطرح شه.از این سیستم Maker یه حکمرانیش مونده طلب شما که کاملش می کنم در پست بعدی.گام آخرخب در قسمت های قبل که سیستم رو معرفی کردم یه سری پارامتر در سیستم معرفی کردم که این پارامتر ها باید در زمان تغییر کنن تا سیستم متناسب با وضعیت به کار خودش ادامه بدهمثلا در گام ۴ در مورد دو پارامتر Stability fee و DSR صحبت کرده بودم و اینکه با بازی کردن با این 2 پارامتر عرضه و تقاضای DAI و CDP رو میشه کنترل کرد.یا مثلا در گام ۷ که داشتم در مورد اوراکل میکر می‌گفتم، گفته بودم که لیست کسایی که داده های قیمتی رو تو اوراکل تعیین میکنن میتونه عوض شه و این یه پارامتر سیستم هست.حالا سوالی که اینجا مطرح میشه و باید بهش پاسخ داده میشه اینه که خب این تغییرات چطوری انجام میشه؟ چه کسی واسه این تغییرات نظر میده؟ و ....اینجا هست که توکن MKR میاد وسط. در واقع دارندگان توکن MKR حکمرانان سیستم هستند. اونا هستند که نظر میدن چه پارامتر هایی نیاز به تغییر داره و چرا؟ در این مورد بحث کنن و در آخر هم رای گیری انجام بدن. ولی چطوری؟باید سیستم میکر رو مثل یه ماشین حالت در نظر بگیریم. یعنی الان مثلا در حالت 1 هست و اگر تغییر یا تغییراتی انجام بشه روش میره به حالت 2. حمنظور از حالت چیه؟ تمام پارامتر های سیستم. در واقع مجموعه‌ی همه ی پارامتر هایی که میشه عوضشون کرد.این حال مثلا شامل این میشه که الان چه توکن هایی رو میشه به عنوان وثیقه در میکر گذاشت و دای جدید ضرب کرد. واسه اون توکن ضریب وثیقه گذاری چنده؟ (مثلا واسه اتر 1.5 هست الان). =نرخ پایداری و نرخ DSR چنده؟ لیست فراهم آورندگان قیمت چی هست و از این دست پاراترا که قبلا همه رو گفتم.خب فرض کنید الان تو حالت 1 هستیم و یه مقادیر مشخص واسه پارامترا داریم. کی تغییر حالت داریم پس؟ بذارید با یه مثال کامل توضیح بدم.مثلا یه کوین جدید اومده و همه معتقدن اونقدر قوی هست که بشه به عنوان وثیقه واسه ضرب کردن دای جدید استفاده شه. خب باید این توکن به لیست وثیقه ها اضافه شه و یه سری پارامتر هم واسش تعیین شه. (مثلا ضریب وثیقه) چجوری این اتفاق میفته؟یک نفر باید اول بیاد یه پروپوزال ثبت کنه و در واقع قرارداد هوشمندش رو بذاره رو شبکه مبنی بر اینکه مثلا توکن الف اضافه شه به سیستم مثلا با ضریب 2.5 اونایی که توکن MKR دارن میتونن در مورد پروپزال ها نظر و سیگنال بدن. زمانی که واسه هر پروپزال گذاشته میشه متغیره و مثلا تا 7 روز هست.در این ۷ روز همه در مورد این پروپزال صحبت می‌کنن و سیگنال می‌دن تا اینکه معلوم شه در کل باهاش موافق هستن یا نه. اگر احساس شد که موافقت عمومی رو داره یه نفر قرارداد هوشمندش رو می‌نویسه و دیپلوی می‌کنه روی شبکه‌ی اتریوم. حالا وقت رای‌گیری اصلیه.یادتونه گفتم حالت 0 داریم و میخوایم بریم حالت 1؟ خب حالت 0 یه قرارداد هوشمند بوده شامل همه ی پارامتر های سیستم که قبلا توسط حکمرانان انتخاب شده بوده. انتخاب شده بوده یعنی چی؟ یعنی اینکه دارندگان توکن MKR, توکن خودشون رو تو این قرارداد(مثلا قرارداد حالت 0) ذخیره کردن.حالا قراره بریم به حالت 1. قرارداد هوشمند حالت 1 هم که زده شده و پارامتر هایی که قرار بوده عوض شن، عوض شدن و پارامترای دیگه بدون تغییر در این قرارداد هستن. حالا چجوری از حالت 0 میریم به حالت 1؟در صورتی این تغییر انجام میشه که تعداد بیشتری توکن MKR در این قرارداد جدید ذخیره بشه.  یعنی به محض اینکه این قرارداد جدید که به حالت 1 اشاره میکنه تعداد توکن های فریز شده بیشتری داشته باشه سیستم با اون پارامتر ها کار می‌کنه.حالا یا آدمای جدید توکن های MKR خودشونو گذاشتن در قرارداد جدید، یا همون افراد قبلی توکن رو از قرارداد قبلی در آوردن گذاشتن در قرارداد جدید.این کلیت رای گیری و حکمرانی در سیستم بود اگر سوالی داشتید مطرح کنید که در این مورد جواب بدم.  ولی توکن MKR در دو جای دیگه هم کاربرد داره.یکیش اینجاست که گفته بودم در حراج بدهی چوت سیستم مقصر رو حکمرانان سیستم میدونه توکن جدید ضرب میکنه و با دای معاوضه میکنه که این باعث میشه ارزش این توکن بیاد پایین.خب گفتم در اين شرايط سيستم پولشو مي خواد ولي نتونسته از حراج اون پولو جمع كنه و تو قلك هم پول نبوده و نگهدارندگان MKR رو مقصر ميدونه پس بايد اون پول رو از اونا بگيره. ولي چجوري مي خواد از كسي كه توكن MKR داره دای بگيره؟یکی دیگش هم حراج مازاد بود که اینجا گفتم. وقتی حکمرانان خوب عمل کردن با توکنشون میتونن برن تو حراجی و دای بگیرن و سیستم این توکنای MKR رو می‌سوزونه و ارزشش می‌ره بالاتر.طرفِ بد سكه رو گفتيم بريم سراغ طرف خوب سكه. خب ما يه قلک داشتيم به نام surplus buffer. هميشه stability fee هايي كه جمع ميشه به این قلک اضافه ميشه. علاوه بر اون هر دفعه يه خزانه نقد ميشه هم يه مقداري جريمه يا liquidation penalty بهش اضافه ميشه.با این ۸ گام تمام قسمت‌های این پروژه رو گفتم. امیدوارم مفید بوده باشه. در آخر هم از همه دوستانی که بازنشر کردن تا به دست همه برسه ممنونم.</description>
                <category>علیرضا زجاجی</category>
                <author>علیرضا زجاجی</author>
                <pubDate>Fri, 15 Jan 2021 03:58:26 +0330</pubDate>
            </item>
                    <item>
                <title>ماینینگ بیت‌کوین: از سیر تا پیاز</title>
                <link>https://virgool.io/Solidity/%D9%85%D8%A7%DB%8C%D9%86%DB%8C%D9%86%DA%AF-%D8%A8%DB%8C%D8%AA-%DA%A9%D9%88%DB%8C%D9%86-%D8%A7%D8%B2-%D8%B3%DB%8C%D8%B1-%D8%AA%D8%A7-%D9%BE%DB%8C%D8%A7%D8%B2-vlpqhslm0wxj</link>
                <description>ممکنه براتون سؤال پیش اومده باشه که در ماینینگ رمزارزهایی مثل بیت‌کوین چه اتفاق می‌افته و چرا مقدار زیادی برق برای این کار مصرف می‌شه.آیا حقیقتاً راهی برای صرفه جویی در مصرف برق ماینینگ وجود نداره؟این جا تلاش می‌کنیم به زبان ساده و غیر فنی به این سؤال پاسخ بدیم:ماینینگ یا استخراج بیت‌کوین یک مسابقه‌ی جهانی است که توش هر کی زودتر به پاسخ برسه برنده‌ی جایزه می‌شه. برای همین همه سعی می‌کنن قدرت پردازشیشون رو بالاتر ببرن تا برنده‌ی مسابقه باشن. قدرت پردازشی بیشتر هم یعنی مصرف برق بیشتر!یه نکته:تصور کنین که یه عده برای این که ریسک برنده شدن رو بین خودشون کم کنن، می‌یان می‌گن یه قرار بذاریم، هر کدوم از ما تو این مسابقه برنده شدیم، جایزه‌مون رو بین همه‌ی اعضای این قرار به نسبت قدرت پردازشی‌شون تقسیم می‌کنیم. این جوری یک استخر استخراج یا Mining Pool درست میشه که احتمال برنده شدن همه‌ی اعضا رو بیشتر می‌کنه ولی متقابلاً جایزه بین تعداد بیشتری آدم توزیع می‌شه.محتوای این مسابقه چه ربطی به تبادلات شبکه‌ی بیت‌کوین داره؟محتوای مسابقه ثبت نهایی تراکنش‌های ارسال شده به شبکه است. ولی این ثبت یک الگوریتم تصادفی داره که تضمین نمی‌کنه کسی با قدرت پردازش مشخص حتما در زمان مشخص به جواب برسه. یعنی این طور نیست که اگر توان پردازشتون رو دو برابر کنین، لزوما در نصف زمان به نتیجه برسین، بلکه با زیاد شدن قدرت پردازشی‌تون به احتمال زیاد در زمان کوتاه‌تری به پاسخ می‌رسین.همه‌ی زیبایی قضیه هم در همین نکته است.حجم این تراکنش ها چه قدره، یعنی اگه شبکه‌ای شامل بی‌نهایت ماینر داشته باشیم، ممکنه تراکنشی برای انجام وجود نداشته باشه؟این مسابقه به نوعی طراحی شده که هر چه توان پردازشی شبکه بیشتر بشه، به طور خودکار مسابقه به همون میزان مشکل‌تر می‌شه. پس اگر ماینرها بیشتر بشن، سختی مسابقه هم به طور خودکار بیشتر می‌شه، به طوری که با همه‌ی اون توان پردازشی بشه به طور متوسط ظرف ۱۰ دقیقه به جواب رسید.مقدار این جایزه چقدره؟ و این مقدار بیت‌کوین رو کی می‌ده؟از ابتدای راه‌اندازی شبکه تا ابد به طور متوسط هر ۱۰ دقیقه یک بلوک تولید می‌شه.هر بلوک مجموعه‌ای از تراکنش‌ها است (که اگر تراکنشی در کار نباشه می‌شه بلوک خالی) پاداش ثبت هر بلوک هم ۵۰ بیت کوین بوده که در همون لحظه از صفر تولید می‌شده و به طور متوسط هر ۴ سال یک بار این پاداش نصف می‌شه.یعنی از سال ۲۰۱۲ پاداش ثبت بلوک شده ۲۵ بیت‌کوین، از سال ۲۰۱۶ شده ۱۲.۵ بیت‌کوین و از سال ۲۰۲۰ شده ۶.۲۵ بیت‌کوین.واضحه که زمان اولین ۱۰ دقیقه‌ی بیت‌کوین بیت‌کوینی وجود نداشته که در تراکنشی شرکت کنه، پس بلوک خالی ماین شده و اولین ۵۰ بیت‌کوین در جهان به وجود آمده و به ماینرش که در اون زمان فرد ناشناسی به نام «ساتوشی ناکاموتو» خالق بیت‌کوین بود، جایزه داده شده.اگه بیت‌کوین‌های قابل استخراج تموم بشن، ماینرها با چه انگیزه ای به کار ادامه می‌دن و تکلیف ثبت تبادلات چی می‌شه؟ماینرها غیر از جایزه‌ی شبکه یه درآمد دیگه هم دارن و اون فی تراکنشیه که سازندگان تراکنش موقع ساخت تراکنش همراه تراکنششون پیشنهاد میدن و طبیعیه که ماینرها علاقه دارن که تراکنش‌هایی رو ماین کنن که فی تراکنش بیشتری براشون پیشنهاد داده شده. برای همین تراکنش‌های با فی کمتر ممکنه زمان بیشتری رو معطل بمونن.هر چهار سال یک بار که جایزه‌ی شبکه نصف میشه، این کاهش سهم رو بالاتر رفتن فی تراکنش می‌تونه جبران کنه.حالا می‌رسیم به سؤال اصلی: این چه کاریه که یه مسابقه‌ی سرکاری برای مردم راه بندازی تا سرشون رو به یه پردازش تصادفی گرم کنی و در نهایت برای این کار بهشون پاداش بدی؟ این کار چه فایده‌ای داره؟در شبکه‌های متمرکز مثل شبکه‌ی بانکی هیچ مشکلی برای دیر یا زود اتفاق افتادن یک تراکنش وجود نداره، چون هر تراکنشی زودتر به سرور برسه زودتر پردازش می‌شه. پس کسی نمی‌تونه مقدار مشخصی از پول رو دو بار خرج کنه.اما در یک شبکه‌ی غیر متمرکز ممکنه من یک مقدار مشخص پول رو دو بار خرج کنم، یعنی دو تا تراکنش از روش بسازم و یکی از تراکنش‌ها رو برای یه سری از ثبت‌کننده‌ها بفرستم و دیگری رو برای بقیه. این جوری بین اجزای یک شبکه اختلاف به وجود می‌یاد، پس باید روشی برای رفع این اختلاف وجود داشته باشه. پیشنهاد خالق بیت‌کوین اینه که باید روشی باشه که به صورت تصادفی به جواب برسه و هرکس در دنیا زودتر به جواب رسید با صدای بلند به همه اعلام کنه: سُک سُک، من به جواب رسیدم، مسابقه‌ی این ۱۰ دقیقه تموم شد. بریم برای راند بعدی.پس آیا طراح بیت کوین، دغدغه ای برای مصرف انرژی یا بحث کارآیی و بهره وری نداشته؟ یعنی حتی این قابلیت رو داره که تمام انرژی (تجدید پذیر و تجدیدناپذیر) روی زمین رو برای هیچ و پوچ مصرف کنه؟بزرگ‌ترین معجزه‌ی بیت‌کوین اینه: یه نفر در سال ۲۰۰۹ یه سازمان راه انداخته که نه مدیر داره، نه لیدر داره، نه ...، این سازمان تا الآن داره بدون مشکل کار می‌کنه و همه‌ی کارکنان هم در سازمان منفعت خودشون رو می‌برن و روابط سازمان با بیرون هم مشکلی نداره:یک سازمان خودمختار غیرمتمرکزظاهراً بزرگ‌ترین دغدغه‌ی راه انداز این سازمان هم دقیقا غیرمتمرکز بودنش بوده. این که با وجود عدم تمرکز سازمان دچار دوگانگی تصمیم و نهایتا فروپاشی نشه.</description>
                <category>علیرضا زجاجی</category>
                <author>علیرضا زجاجی</author>
                <pubDate>Fri, 15 Jan 2021 02:23:23 +0330</pubDate>
            </item>
                    <item>
                <title>جداسازی لایه‌ی داده از لایه‌ی منطق در قراردادهای هوشمند اتریوم</title>
                <link>https://virgool.io/Solidity/%D8%AC%D8%AF%D8%A7%D8%B3%D8%A7%D8%B2%DB%8C-%D9%84%D8%A7%DB%8C%D9%87%DB%8C-%D8%AF%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D9%84%D8%A7%DB%8C%D9%87%DB%8C-%D9%85%D9%86%D8%B7%D9%82-%D8%AF%D8%B1-%D9%82%D8%B1%D8%A7%D8%B1%D8%AF%D8%A7%D8%AF%D9%87%D8%A7%DB%8C-%D9%87%D9%88%D8%B4%D9%85%D9%86%D8%AF-%D8%A7%D8%AA%D8%B1%DB%8C%D9%88%D9%85-wtcu0yyobkbl</link>
                <description>اورکا!حدود سه هفته بود که به عنوان یک مسئله‌ی جانبی درگیر حل جدا کردن کامل لایه‌ی Data از لایه‌ی Logic در زبان سالیدیتی بودم. امروز راه حل آن را یافتم و می‌خواهم آن را با شما به اشتراک بگذارم:من قرارداد هوشمندی به نام Data می‌سازم. در این قرار داد هوشمند متغیرهای ذخیره‌ی داده‌ها را قرار می‌دهم، مثلا یک استراکت و یک مپینگ برای ذخیره‌ی داده از نوع آن استراکت:    contract Data {
        struct User {
            string name;
            uint code;
        }
        mapping(uint =&gt; User) users;
        uint usersCount = 0;
    }قرارداد هوشمند دیگری به نام Logic می‌سازم برای ذخیره سازی و بازیابی و گزارشگیری اطلاعات از قرارداد هوشمند Data. واضح است که اگر قرارداد هوشمند Logic بخواهد به داده‌های قرارداد هوشمند Data دسترسی داشته باشد، باید از آن ارث‌بری کند:    contract Logic is Data {
        function regUser(string memory name, uint code) public {
            usersCount++;
            users[usersCount].name = name;
            users[usersCount].code = code;
        }
        function getUser(uint userId) public view returns(string memory, uint) {        
            return(users[userId].name, users[userId].code);
        }
    }با توجه به این که کاربر به طور مستقیم باید با قرارداد Data در تماس باشد، حالا اگر بخواهیم قرارداد هوشمند Data بتواند توابع موجود در Logic را صدا کند باید آدرس آن را در خود ذخیره کند و بتوانیم آدرس آن را در صورت لزوم تغییر دهیم:    contract Storage {
        struct User {
            string name;
            uint code;
        }
        mapping(uint =&gt; User) users;
        uint usersCount = 0;
        address logicAddress;
        Logic logic;
        function setLogicAddress(address _logicAddress) public {
            logicAddress = _logicAddress;
            logic = Logic(logicAddress);
        }
        function regUser(string memory name, uint code) public {
            logic.regUser(name, code);
        }
        function getUser(uint userId) public view returns(string memory, uint) {
            return(logic.getUser(userId));
        }
    }در واقع وقتی در این جا مثلا تابع getUser از قرارداد Data را صدا می‌زنیم، در پشت صحنه همان تابع از قرارداد هوشمند Logic صدا زده می‌شود. اما مشکل اصلی این جا این است که اطلاعات نیز در همان قرارداد هوشمند Logic ذخیره می‌شود و با دپلوی کردن ورژن جدیدی از Logic داده‌های قبلی نیز از بین می‌روند. راهی که به نظر می‌رسد این است که داده‌های قرارداد Data از نوع public باشند، تا در قرارداد Logic در دسترس باشند و کار مستقیما روی آن انجام شود. اما این کار نیز با این که ظاهرا مشکل را حل می‌کند، همان سکیوریتی و امنیت ظاهری داده‌ها را نیز در معرض خطر قرار می‌دهد.تا این جا در جریان صورت مسئله‌ای قرار گرفتید که در تلاش برای حل آن بودم. اما راه حلی که در یک مقاله در سایت مدیوم دیدم به کمک زبان اسمبلی حل شده و در زبان سالیدیتی من برای آن راه حلی نیافتم:در قرارداد هوشمند Data لازم نیست همان توابع را مجدد تعریف کنیم، بلکه یک تابع fallback تعریف می‌کنیم که هر صدا زدن تابع غیر معمولی به آن ارجاع می‌شود و در آن تابع یک قطعه کد به زبان اسمبلی این ذخیره سازی را به کمک منطق موجود در قرارداد Logic ولی روی داده‌های قرارداد Data انجام دهد:    contract Data {
        struct User {
            string name;
            uint code;
        }
        mapping(uint =&gt; User) users;
        uint usersCount = 0;
        address logicAddress;
        function setLogicAddress(address _logicAddress) public {
            logicAddress = _logicAddress;
        }
        function () payable external {
            address target = logicAddress;
            assembly {
                let ptr := mload(0x40)
                calldatacopy(ptr, 0, calldatasize)
                let result := delegatecall(gas, target, ptr, calldatasize, 0, 0)
                let size := returndatasize
                returndatacopy(ptr, 0, size)
                switch result
                case 0 { revert(ptr, size) }
                case 1 { return(ptr, size) }
            }
        }
    }من با زبان اسمبلی اتریوم آشنا نیستم و اصلا نمی‌دانم که این برنامه چگونه کار می‌کند ولی این برنامه را با موفقیت تست کردم.برای تغییر برنامه Logic می‌توانید تغییری در برنامه Logic ایجاد کنید و آن را دوباره دپلوی کنید و آدرس آن را با تابع setLogicAddress صدا کنید تا در قرارداد Data ثبت شود. مثلا این تغییر:    contract Logic is Storage {
        function regUser(string memory name, uint code) public {
            usersCount++;
            users[usersCount].name = name;
            users[usersCount].code = code+2;
        }
        function getUser(uint userId) public view returns(string memory, uint) {
            return(users[userId].name, users[userId].code);
        }
    }برای صدا زدن این تابع کافی است که آدرس قرارداد Data را مستقیما برای Logic به کار ببرید تا بتوانید توابع آن را اجرا کنید یا با متد Calldata آشنا باشید تا بتوانید توابع لازم را با استفاده از این متد صدا بزنید.</description>
                <category>علیرضا زجاجی</category>
                <author>علیرضا زجاجی</author>
                <pubDate>Thu, 08 Oct 2020 20:44:22 +0330</pubDate>
            </item>
            </channel>
</rss>