<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های Saman Shahmohamadi</title><link>https://virgool.ir/feed/@saman.shahmohamadi</link><description>برنامه‌نویس بلاکچین</description><language>fa</language><pubDate>2026-11-12 16:38:27</pubDate><image><url>https://files.virgool.ir/upload/users/49557/avatar/avatar.png</url><title>Saman Shahmohamadi</title><link>https://virgool.ir/@saman.shahmohamadi</link></image><item><title>بالاخره اتریوم چطور کار می‌کند؟ (بخش ۳ - تراکنش‌ها، پیام‌ها و بلوک‌ها)</title><link>https://virgool.ir/@saman.shahmohamadi/how-ethereum-works-anyway-part-3-rm71fm1qwrmo</link><description>این یک ترجمه آزاد از مقاله‌ای به زبان انگلیسی است. لینک مقاله اصلی در انتهای پست ذکر شده است.بخش اولبخش دومقبلاً گفتیم که اتریوم یک ماشین حالت تراکنش-پایه است. به بیان دیگر آن‌چه حالت کلی (global state) اتریوم را از یک حالت به حالت بعدی حرکت می‌دهد تراکنش‌هایی است که بین حساب‌های مختلف انجام می‌گیرد.به ساده‌ترین بیان، یک تراکنش مجموعه‌ای از دستورالعمل‌هاست که توسط یک حساب با مالک بیرونی به وسیله‌ی رمزنگاری امضاء (sign) شده، serialized شده و سپس به شبکه بلاکچین ارسال می‌شود.در اتریوم دو نوع تراکنش وجود دارد: message call و contract creation (تراکنش‌هایی که یک قرارداد هوشمند جدید ایجاد می‌کنند).تمام تراکنش‌ها (از هر نوع که باشند) شامل اجزاء زیر هستند:ـ nonce: تعداد تراکنش‌هایی که تاکنون توسط فرستنده ارسال شده است.ـ gasPrice: نرخ تبدیل gas به اتر (بر حسب Wei) که مبلغ کارمزد تراکنش با آن محاسبه می‌شود. به یاد داشته باشید که این نرخ توسط خود فرستنده تراکنش تعیین می‌شود.ـ gasLimit: حداکثر مقدار gas که فرستنده می‌خواهد به عنوان کارمزد اجرای تراکنش بپردازد. این مبلغ پیشاپیش تعیین و پرداخت می‌شود، قبل از آن که هیچ‌گونه پردازشی انجام شده باشد.ـ to: آدرس دریافت‌کننده. در تراکنشی که یک قرارداد هوشمند جدید ایجاد می‌کند، آدرس حساب قرارداد هنوز وجود ندارد، بنابراین مقدار to خالی است.ـ value: مبلغ Wei که از فرستنده به گیرنده منتقل می‌شود. در تراکنشی که یک قرارداد هوشمند جدید ایجاد می‌کند، مقدار value معادل موجودی اولیه حساب قرارداد جدید است.ـ v, r, s: سه پارامتر برای خلق امضایی (signature) که شناسه فرستنده تراکنش است.ـ init: (فقط در تراکنش‌هایی وجود دارد که قرارداد هوشمند جدید ایجاد می‌کنند) یک قطعه کد EVM است که برای مقدار‌دهی اولیه (initialize) حساب قرارداد جدید به کار می‌رود. init فقط یک‌بار اجرا می‌شود و پس از آن کاربردی ندارد. در اجرای اول init بدنه کد حساب را برمی‌گرداند. قطعه کدی که برای همیشه در حساب قرارداد هوشمند کار گذاشته می‌شود.ـ data (فیلد دلبخواهی که فقط برای message call ها قابل تعریف است): داده ورودی (یا همان پارامترهای) message call. برای مثال، اگر یک قرارداد هوشمند کار ثبت دامنه‌های جدید را انجام دهد، فراخوانی (call) کردن قرارداد احتمالاً نیاز به ورود داده‌هایی مانند نام دامنه و آدرس IP آن دارد.در بخش «حساب‌ها» یاد گرفتیم که تراکنش‌ها - هم message call ها و هم contract creation ها - همواره توسط حساب‌های با مالک بیرونی ایجاد و به شبکه بلاکچین ارسال می‌شوند. به بیان دیگر تراکنش‌ها پل‌هایی هستند که جهان خارج را به حالت داخلی اتریوم متصل می‌کنند.اما آنچه گفتیم به این معنی نیست که قراردادها نمی‌توانند با یکدیگر صحبت کنند (ارتباط برقرار کنند). قراردادها از طریق پیام‌ها (messages) یا تراکنش‌های داخلی (internal transactions) با یکدیگر صحبت می‌کنند. می‌توانیم بگوییم که پیام‌ها یا تراکنش‌های داخلی شبیه تراکنش‌های عادی شبکه هستند، با این تفاوت عمده که برخلاف تراکنش‌های عادی، این تراکنش‌های داخلی توسط حساب‌های دارای مالک بیرونی ایجاد نمی‌شوند. آن‌ها توسط قراردادهای هوشمند ایجاد می‌شوند. آن‌ها شیء های مجازی (virtual object) هایی هستند که برخلاف تراکنش‌ها، serialize نمی‌شوند و فقط در محیط اجرای اتریوم وجود دارند.وقتی یک قرارداد یک تراکنش داخلی به قرارداد دیگری می‌فرستد، کد مرتبطی که در حساب قرارداد گیرنده وجود دارد اجرا می‌شود.یک نکته قابل توجه: تراکنش‌های داخلی یا همان پیام‌ها gasLimit ندارند. به این خاطر که gas limit توسط ایجادکننده تراکنش اصلی (که یک حساب دارای مالک بیرونی است) معین می‌شود. مقدار gas limit که حساب با مالک بیرونی معین می‌کند باید برای انجام تراکنش (و از جمله برای اجرای همه زیرعملیات‌هایی که در اجرای تراکنش ضروری هستند، مانند ارسال پیام به دیگر قراردادها) کافی باشد. اگر در زنجیره تراکنش‌ها و پیام‌ها، اجرای یک پیام مشخص با کمبود gas مواجه شود، اجرای آن پیام و نیز اجرای همه پیام‌هایی که در نتیجه اجرای آن پیام ارسال شده‌اند، بازگردانی (revert) می‌شود. با این وجود اجرای تراکنش اصلی بازگردانی نمی‌شود.بلوک‌هاهمه تراکنش‌ها در بلوک‌ها گروه‌بندی می‌شوند. یک بلاکچین حاوی مجموعه‌ای از این بلوک‌هاست که به یکدیگر زنجیر شده‌اند.در اتریوم یک بلاک از اجزای زیر تشکیل می‌شود: block headerاطلاعاتی درباره مجموعه تراکنش‌هایی که در بلوک موجود استمجموعه‌ای از دیگر block header های بلوک‌های ommer بلوک فعلیتوضیحی درباره Ommer هایک ommer بلوکی است که والد آن برابر است با والدِ والدِ بلوک فعلی. بگذارید یک نگاه سریع به چیستی و کارکرد ommer ها بیندازیم و ببینیم چرا یک بلوک حاوی هدرِ بلوک‌های ommer خود است.به خاطر نحوه ساخت اتریوم، فاصله زمانی بین بلوک‌ها (حدود ۱۵ ثانیه) بسیار کمتر از دیگر بلاکچین‌ها مانند بیت‌کوین (حدود ۱۰ دقیقه) است. این ویژگی موجب پردازش سریع‌تر تراکنش‌ها می‌شود. با این وجود یکی از معایب این فاصله زمانی کوتاه این است که راه‌حل‌های رقیب بیشتری برای هر بلوک توسط ماینرها یافت می‌شود. این بلوک‌های رقیب با نام &#34;Orphaned Blocks&#34; نیز شناخته می‌شوند (بلوک‌هایی که ماین شده‌اند اما وارد زنجیره اصلی یا main chain نمی‌شوند).فایده ommer ها این است که دادن پاداش به ماینرها برای افزودن این بلوک‌های orphaned را ممکن می‌کنند. ommer هایی که ماینرها اضافه می‌کنند باید معتبر باشد، یعنی به تعداد ۶ بلوک یا کمتر از آخرین بلوک فاصله داشته باشند. پس از ۶ بلوک بلوک‌های orphaned دیگر قابل ارجاع نیستند. پاداشی که به ماینرها بابت بلوک‌های ommer داده می‌شود نسبت به بلوک‌های کامل (full block) کمتر است.Block Headerبگذارید برای یک لحظه به بلوک‌ها برگردیم. قبلاً اشاره کردیم که هر بلوک یک block header دارد، اما این block header دقیقاً چیست؟در واقع block header بخشی از بلوک است که شامل این اجزاست:ـ parentHash: مقدار هش header بلوکِ والد (این همان چیزی است که بلوک را به زنجیره متصل می‌کند و blockchain را می‌سازد)ـ ommersHash: مقدار هش لیست تمام ommer های بلاک فعلیـ beneficiary: آدرس حسابی که کارمزد ماینینگ این بلوک را دریافت می‌کند (آدرس حساب ماینر)ـ stateRoot: مقدار هش گره ریشه درخت حالت (به یاد دارید که یاد گرفتیم درخت حالت چطور در header ذخیره می‌شود و به light node ها در اعتبارسنجی تغییرات حالت کمک می‌کند)ـ transactionsRoot: مقدار هش گره ریشه درختی که حاوی تمام تراکنش‌های درون بلوک است ـ receiptsRoot: مقدار هش گره ریشه درختی که حاوی رسید تراکنش‌های درون بلوک استـ logsBloom: یک Bloom filter که حاوی اطلاعات log استـ difficulty: سطح سختی (difficulty) بلوک فعلیـ number:  شماره بلوک فعلی (مقدار آن برای genesis block صفر است؛ شماره بلوک به ازای هر بلوک یک عدد افزایش می‌یابد)ـ gasLimit: مقدار کنونی gasLimit برای هر بلوکـ gasUsed: مجموع مقدار gas تمام تراکنش‌های درون بلوکـ timestamp: زمان ایجاد بلوکـ extraData: داده‌های اضافی مرتبط با بلوکـ mixHash: هشی که وقتی با nonce ترکیب شود اثبات می‌کند که برای ایجاد این بلوک پردازش (کار) کافی انجام شده استـ nonce: به mixHash نگاه کنیدتوجه کنید که هر block header حاوی سه ساختار درختی است:state (stateRoot)transactions (transactionsRoot)receipts (receiptsRoot)این ساختارهای درختی همان درخت‌های مرکلی هستند که قبلاً در مورد آن‌ها توضیح دادیم.در ادامه چند اصطلاح که در توضیحات بالا به کار رفته را شفافتر توضیح می‌دهیم. Logs اتریوم برای ردیابی تراکنش‌ها و پیام‌های مختلف امکان ایجاد لاگ‌ها را فراهم کرده است. یک قرارداد هوشمند می‌تواند با تعریف رخدادهای (event) مختلف در شرایط مشخص لاگ‌های مرتبط با آن رخدادها را تولید کند. یک لاگ شامل اطلاعات زیر است:آدرس حساب ایجادکننده لاگمجموعه‌ای از تاپیک‌ها (topics) که نشان‌دهنده‌ رخدادهای مختلفی است که توسط آن تراکنش انجام شده استداده‌های مرتبط با این رخدادهالاگ‌ها در یک Bloom filter ذخیره می‌شوند که می‌تواند حجم نامحدودی از اطلاعات لاگ را به شکلی کارامد نگهداری کند.رسید تراکنش (Transaction receipt)لاگ‌های هر تراکنش در header بلوک آن تراکنش ذخیره می‌شود و لاگ‌های ایجاد شده در هر تراکنش از طریق رسید تراکنش قابل دسترسی است. اتریوم برای هر تراکنش یک رسید ایجاد می‌کند که حاوی اطلاعات مشخصی درباره آن تراکنش است:شماره بلوکهش بلوکهش تراکنشمقدار gas مصرف شده توسط تراکنشمجموع gas مصرف شده در بلوک فعلی بعد از اجرای این تراکنشلاگ‌های ایجاد شده در تراکنشو ... سختی بلوک (Block difficulty) سختی یک بلوک پارامتری است که برای حفظ زمان تعیین شده برای اعتبارسنجی بلوک‌ها (۱۵ ثانیه) به کار می‌رود. بلوک اولیه (genesis block) سختی‌ای معادل ۱۳۱۰۷۲ دارد، و برای محاسبه سختی بلوک‌های بعدی یک فرمول مشخص به کار می‌رود. در جریان تایید بلوک‌ها اگر یک بلوک سریعتر از بلوک قبلی (یعنی در زمانی کمتر از ۱۵ ثانیه) تایید شود، پروتکل اتریوم سختی آن بلوک را افزایش می‌دهد (تا زمان تایید بلوک به حدود ۱۵ ثانیه افزایش یابد).سختی بلوک بر nonce تاثیر می‌گذارد، nonce هشی است که در جریان ماینینگ طبق الگوریتم اثبات کار باید توسط ماینر محاسبه شود.رابطه بین سختی بلوک و nonce با فرمول ریاضی زیر بیان می‌شود: سختی شبکه با Hd نمایش داده شده.تنها راه پیدا کردن مقدار nonce ای که با حد در نظر گرفته شده برای سختی بلوک مطابقت کند، محاسبه تک تک مقادیر ممکن با استفاده از الگوریتم اثبات کار است. زمان مورد انتظار برای پیدا کردن یک راه‌حل با سختی بلوک متناسب است - هر چه مقدار سختی بالاتر باشد، پیدا کردن یک nonce معتبر دشوارتر است، و در نتیجه تایید بلوک سخت‌تر خواهد بود و این باعث افزایش زمان لازم برای تایید بلوک جدید می‌شود. بنابراین با تنظیم سختی یک بلوک، پروتکل اتریوم می‌تواند زمان تایید بلوک را تنظیم کند.در مقابل اگر زمان اعتبارسنجی بلوک افزایش یابد، پروتکل سختی را کاهش می‌دهد تا بر خلاف فرایند قبلی زمان تایید بلوک بعدی را کاهش دهد.هر دوی این تغییرات (کاهش سختی - کاهش زمان و افزایش سختی - افزایش زمان) برای آن انجام می‌شوند که میانگین زمان تایید بلوک‌ها در حدود ۱۵ ثانیه باقی بماند. (ادامه دارد...)منبع: https://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369</description><category>Saman Shahmohamadi</category><author>Saman Shahmohamadi</author><pubDate>Wed, 03 Jul 2019 13:51:01 +0430</pubDate></item><item><title>بالاخره اتریوم چطور کار می‌کند؟ (بخش ۲ - حساب، پرداخت و کارمزد)</title><link>https://virgool.ir/@saman.shahmohamadi/بالاخره-اتریوم-چطور-کار-میکند-بخش-۲-حساب-پرداخت-و-کارمزد-xta0keimfmc9</link><description>این یک ترجمه آزاد از مقاله‌ای به زبان انگلیسی است. لینک مقاله اصلی در انتهای پست ذکر شده است.ترجمه بخش اول این مقاله را می‌توانید اینجا ببینید.حالت حساب (Account State)حالت حساب، صرفنظر از نوع حساب،  از چهار جزء (component) تشکیل شده است.نانس nonce: اگر حساب دارای مالک بیرونی باشد، این عدد نشان‌دهنده تعداد تراکنش‌هایی است که تا آن لحظه از آدرس این حساب ارسال شده است. اگر حساب یک حساب قرارداد هوشمند باشد،‌ nonce برابر با تعداد قراردادهایی است که تاکنون توسط این حساب ایجاد شده است.موجودی balance: مجموع موجودی حساب بر حسب Wei (هر Ethere معادل ۱۰ به توان ۱۸ Wei است)استوریج روت storageRoot: حاوی مقدار هش ریشه درخت مرکل (Merkle Patricia Tree) است. این درخت مقدارهای هش شده‌ی محتوای حافظه (storage) حساب را نگه می‌دارد و به صورت پیش‌فرض خالی است.کد هش codeHash: در حساب‌های قرارداد هوشمند برابر با مقدار هش شده‌ی کد (برنامه) EVM یا همان Ethereum Virtual Machine (این یکی را هم جلوتر توضیح می‌دهیم) است. برای حساب‌های دارای مالک بیرونی این فیلد مساوی مقدار هش یک رشته خالی است.World Stateمی‌دانیم که global state اتریوم (یا همان حالت کل شبکه) از یک نگاشت (mapping) بین آدرس حساب‌ها و حالت حساب‌ها تشکیل شده است. این نگاشت در ساختار داده‌ای نگهداری می‌شود که Merkle Patricia tree نام دارد.یک درخت Merkle نوعی درخت دو-دویی (binary tree) متشکل از مجموعه‌ای از گره‌هاست با:تعداد زیادی گره برگ (leaf node) در پایین درخت که حاوی اطلاعات درخت هستندمجموعه‌ای از گره‌های میانی، هر گره میانی حاوی مقدار هش دو گره فرزند خود استیک گره ریشه که آن هم حاوی مقدار هش دو فرزند خود است و بالاترین گره درخت استداده‌های بخش پایینی درخت اینطور تولید می‌شوند: داده‌ای که قرار است ذخیره شود به chunk ها و سپس chunk ها به bucket ها تقسیم می‌شوند، پس از آن هر bucket هش می‌شود و این پروسه آنقدر تکرار می‌شود که در نهایت یک هش باقی بماند: هش ریشه (Root hash).درخت باید به ازای هر مقداری که در آن ذخیره می‌شود یک کلید (key) داشته باشد. با شروع [مسیر] از گره ریشه درخت،‌ کلید باید به شما نشان دهد که کدام گره فرزند را باید دنبال کنید تا مقدار مورد نظر خود را که در گره‌های برگ ذخیره شده پیدا کنید. در اتریوم، نگاشت کلید/مقداری درخت حالت، نگاشتی از آدرس‌ها به حساب‌های مرتبط به آن‌هاست و حساب‌ها همانطور که گفتیم حاوی موجودی، nonce، codeHash و storageRoot هستند (storageRoot خود یک درخت است). Source: Ethereum whitepaper برای ذخیره تراکنش‌ها و رسید‌ تراکنش‌ها (transaction receipts) از ساختار درختی مشابهی استفاده می‌شود. مشخصاً هر بلوک یک header دارد که هش گره ریشه سه درخت مرکل در آن ذخیره می‌شود:درخت حالت (State trie)درخت تراکنش‌هادرخت رسیدهادر اتریوم قابلیت ذخیره همه این اطلاعات در درخت‌های مرکل برای داشتن آنچه light node یا light client خوانده می‌شود بسیار مفید است. به خاطر دارید که یک زنجیره‌بلوک توسط تعدادی node نگهداری می‌شود. به طور کلی دو نوع node وجود دارد: full node و light node.یک full node برای sync شدن با شبکه زنجیره‌بلوک تمام زنجیره را از genesis block تا آخرین بلوک دانلود می‌کند، و ضمناً تمام تراکنش‌های موجود در بلاک‌ها را یک به یک اجرا می‌کند. البته داشتن full node ای که همه‌ تراکنش‌ها را اجرا نکند امکان‌پذیر است، اما در هر صورت یک full node تمام [اطلاعات] زنجیره را ذخیره می‌کند. معمولاً ماینرها از full node استفاده می‌کنند زیرا برای انجام فرایند ماینینگ، داشتن full node ضروری است.اما اگر node نیاز به اجرای تمام تراکنش‌ها یا جستجو در داده‌های قبلی نداشته باشد، نیازی به ذخیره همه زنجیره روی node نیست. light node ها به جای دانلود و ذخیره کردن تمام زنجیره و اجرای همه تراکنش‌ها، تنها زنجیره‌ای از header بلوک‌ها از genesis block تا آخرین بلوک را دانلود می‌کنند (درباره ساختار بلوک در ادامه توضیح می‌دهیم)، بدون آن که همه تراکنش‌ها را اجرا کنند یا حالت مرتبط با آن‌ها را بازیابی کنند. light node ها به header بلوک‌ها دسترسی دارند و header حاوی هش سه درخت حالت، تراکنش‌ها و رسید‌ها است، به همین دلیل آن‌ها هم (مانند full node ها) می‌توانند تراکنش ایجاد کنند و پاسخ‌های معتبر درباره تراکنش‌ها، event های شبکه،‌ موجودی حساب‌ها و غیره دریافت کنند.این امکان با استفاده از درخت مرکل فراهم شده است. هش‌ها در درخت مرکل از پایین به بالا منتشر (propagate) می‌شوند - اگر یک کاربر خرابکار تلاش کند تا یک تراکنش جعلی را در یک گره برگ در پایین درخت مرکل جا بزند، این تغییر موجب تغییر مقدار هش گره بالای آن خواهد شد، و تغییر همین‌طور تا بالا (تا ریشه درخت) ادامه پیدا می‌کند.هر node ای که بخواهد یک بخش از داده‌های ذخیره شده در state را اعتبارسنجی کند، می‌تواند از مکانیسمی به نام Merkle Proof استفاده کند. یک Merkle Proof تشکیل شده از:یک تکه (chunk) از داده که قرار است اعتبارسنجی شود و هش آنهش ریشه درختشاخه (همه هش‌های والد در مسیر گره حاوی chunk تا ریشه)هر کسی با استفاده از Merkle Proof می‌تواند مطمئن شود که عمل هش کردن در تمام مسیر از پایین تا بالای درخت به درستی انجام شده، و در نتیجه می‌تواند مطمئن شود که تکه داده مورد بررسی دقیقاً در همان موقعیت در درخت قرار دارد. به طور خلاصه مزیت استفاده از یک Merkle Patricia tree این است که گره ریشه این ساختار با استفاده از رمزنگاری به تمام اطلاعات ذخیره شده در درخت وابسته شده، و به همین دلیل هش ریشه می‌تواند به عنوان یک شناسه امن برای تمام اطلاعات ذخیره شده روی درخت به کار رود. چون header بلوک حاوی هش ریشه سه درخت حالت، تراکنش‌ها و رسید‌هاست، هر node می‌تواند بخش کوچک و دلخواهی از حالت شبکه اتریوم را بدون نیاز به ذخیره کردن کل حالت اعتبارسنجی کند. پرداخت و Gasیکی از مفاهیم بسیار مهم در اتریوم مفهوم کارمزد است. برای هر پردازشی که در نتیجه یک تراکنش در شبکه اتریوم انجام می‌گیرد باید کارمزد پرداخت شود- از ناهار مجانی خبری نیست! این کارمزد با واحد پولی به نام Gas پرداخت می‌شود. ـ Gas واحدی است که برای اندازه‌گیری کارمزدهایی که برای یک پردازش مشخص مورد نیاز است به کار می‌رود. قیمت Gas یا Gas Price مقدار اتری است که شما می‌خواهید به ازای هر واحد از Gas به عنوان کارمزد پرداخت کنید و بر حسب gwei اندازه‌گیری می‌شود. Wei کوچکترین واحد اتر است و هر ۱۰ به توان ۱۸ Wei معادل یک اتر است. هر gwei معادل ۱۰۰۰۰۰۰۰۰۰ (یک میلیارد) Wei است.در هنگام ارسال هر تراکنش، فرستنده تراکنش دو مقدار gas limit و gas price را تعیین می‌کند. حاصل‌ضرب gas price و gas limit معادل بیشترین مقدار Wei ای است که فرستنده می‌خواهد برای اجرای تراکنش بپردازد.برای مثال فرض کنیم که فرستنده gas limit را معادل ۵۰۰۰۰ و gas price را معادل ۲۰ gwei تعیین می‌کند. این دو عدد به این معنی است که بیشترین کارمزدی که فرستنده حاضر است برای اجرای این تراکنش بپردازد معادل ۵۰۰۰۰ ضربدر ۲۰ gwei برابر با ۱,۰۰۰,۰۰۰,۰۰۰,۰۰۰,۰۰۰ Wei  یا ۰.۰۰۱ اتر است.به خاطر بیاورید که gas limit نشان‌دهنده بیشترین مقدار gas ای است که فرستنده حاضر است به عنوان کارمزد بپردازد. اگر فرستنده مقدار کافی اتر برای پرداخت این مقدار را در حساب خود داشته باشد، تراکنش ارسال می‌شود. در انتهای اجرای تراکنش، هر مقدار از gas که استفاده نشده باقی بماند با نرخ تبدیل یا همان gas price ای که فرستنده تعیین کرده است به اتر تبدیل می‌شود و به حساب فرستنده بازمی‌گردد.در صورتی که فرستنده در حساب خود مقدار کافی gas برای اجرای تراکنش را نداشته باشد، تراکنش به اصطلاح run out of gas می‌شود (gas تمام می‌کند) و نامعتبر محسوب می‌شود. در حین اجرای تراکنش در هر مرحله‌ای که gas تمام شود، پردازش تراکنش متوقف شده و هر تغییر حالتی (state change) که تا آن مرحله رخ داده باشد بازگردانی (revert) می‌شود. به علاوه، یک رکوردِ ناموفق شدن تراکنش ثبت می‌شود که نشان می‌دهد چه تراکنشی ارسال شده و در کدام مرحله fail شده است. از آنجا که دستگاه اجرای کننده تراکنش (میزبان node) تا قبل از تمام شدن gas منابع خود را صرف محاسبات و پردازش برای اجرای تراکنش کرده است، تمام gas به این node تعلق می‌گیرد و هیچ مقداری به فرستنده برگردانده نمی‌شود (برخلاف حالت قبل). پول gas دقیقاً به چه کسی می‌رسد؟ تمام پولی که توسط فرستنده تراکنش صرف gas شده به «آدرس ذینفع» ارسال می‌شود، که معمولاً همان آدرس ماینر است. از آنجا که ماینرها توان پردازشی خود را صرف محاسبات و اعتبارسنجی تراکنش‌ها می‌کنند، کارمزدها به عنوان جایزه به آنها پرداخت می‌شود.معمولاً هر چه فرستنده gas price را بالاتر ببرد، ارزشی که ماینر از پردازش تراکنش دریافت می‌کند بیشتر است. به همین دلیل ماینرها به پردازش تراکنش‌هایی که gas price بالاتر دارند تمایل بیشتری دارند. به این ترتیب، ماینرها در انتخاب این که چه تراکنشی را اعتبارسنجی کنند و چه تراکنشی را نادیده بگیرند آزاد هستند. به منظور راهنمایی فرستنده‌ها در تعیین gas price، ماینرها امکان این را دارند که کمترین مقدار gas price ای را که برای اجرای تراکنش می‌پذیرند در شبکه اعلان کنند.استفاده از حافظه هم کارمزد دارد ـ gas فقط برای اجرای مراحل محاسباتی خرج نمی‌شود، بلکه برای استفاده از حافظه شبکه نیز باید کارمزد پرداخت شود. مجموع کارمزدی که برای حافظه پرداخت می‌شود متناسب است با کوچکترین مضربی از ۳۲ بایت در مقدار حافظه‌ای که در عملیات مورد استفاده قرار می‌گیرد.کارمزد حافظه جنبه‌های ظریفی دارد. برای مثال، از آنجا که افزایش اندازه حافظه موجب افزایش اندازه دیتابیس حالت اتریوم روی همه نودها می‌شود، توصیه می‌شود که مقدار داده‌ای که ذخیره می‌شود کوچک باشد. به همین دلیل اگر یک تراکنش در یک مرحله از اجرا یک رکورد ثبت شده در حافظه را پاک کند، کارمزد اجرای آن عملیات دریافت نمی‌شود و حساب فرستنده به خاطر آزاد کردن مقداری از حافظه مبلغی را به عنوان جایزه دریافت می‌کند.فایده کارمزد چیست؟یک جنبه مهم نحوه کار اتریوم این است که هر تک عملیاتی که توسط شبکه اجرا می‌شود به طور همزمان توسط تمام full node ها اجرا می‌شود. با این حال، مراحل محاسباتی در EVM بسیار پرهزینه هستند. بنابراین قراردادهای هوشمند اتریوم بهتر است که برای وظایف ساده مانند اجرای منطق ساده کسب‌و‌کار (business logic) یا تایید signature ها و دیگر اشیاء رمزنگاری‌شده استفاده شود. استفاده از قرارداد هوشمند برای عملیاتی مانند ذخیره فایل یا پیاده‌سازی الگوریتم‌های یادگیری ماشین به شبکه آسیب وارد می‌کند. اعمال کارمزد، مانع از از تحمیل عملیات سنگین و آسیب‌زا به شبکه توسط کاربران می‌شود.اتریوم یک ماشین تورینگ کامل است (به طور خلاصه ماشین تورینگ کامل ماشینی است که می‌تواند هر نوع الگوریتم کامپیوتری را شبیه‌سازی کند، برای اطلاعات بیشتر در مورد ماشین‌های تورینگ اینجا و اینجا را ببینید). این یعنی نوشتن حلقه (loop) در قراردادهای هوشمند امکان‌پذیر است و همین شبکه اتریوم را در برابر مسئله توقف (Halting Problem) آسیب‌پذیر می‌کند. در مسئله توقف شما نمی‌توانید تعیین کنید که آیا یک برنامه بدون توقف و تا ابد اجرا می‌شود یا بالاخره در نقطه‌ای اجرای برنامه پایان می‌یابد (یک حلقه بی‌نهایت را در نظر بگیرید). اگر کارمزد وجود نداشت یک عامل خرابکار به راحتی می‌توانست با اجرا کردن یک حلقه بی‌نهایت در یک تراکنش، بدون هیچ مانعی شبکه را مختل کند. بنابراین کارمزدها از شبکه در مقابل حملات عمدی محافظت می‌کنند.ممکن است فکر کنید &#34;چرا باید برای استفاده از حافظه هم کارمزد پرداخت کرد&#34;؟ حافظه هم مانند عملیات محاسباتی هزینه‌ای است که تمام شبکه باید آن را پرداخت کند (نوشتن روی حافظه، حجم دیتابیس node ها را افزایش می‌دهد).</description><category>Saman Shahmohamadi</category><author>Saman Shahmohamadi</author><pubDate>Wed, 26 Jun 2019 15:07:05 +0430</pubDate></item><item><title>بالاخره اتریوم چطور کار می‌کند؟ (بخش ۱)</title><link>https://virgool.ir/@saman.shahmohamadi/how-ethereum-works-anyway-part-1-qwnailq6i0cx</link><description>این یک ترجمه آزاد از مقاله‌ای به زبان انگلیسی است. لینک مقاله اصلی در انتهای پست ذکر شده است.معرفیبه احتمال قوی درباره زنجیره‌بلوک اتریوم چیزهایی شنیده‌اید، حتی اگر ندانید که اتریوم چیست. اتریوم اخیرا زیاد در اخبار بوده، از جمله روی جلد بعضی از مجله‌های بزرگ، اما اگر شما پیش‌زمینه‌ای از این که اتریوم دقیقاً چیست نداشته باشید، مطالعه و درک این مطالب سخت خواهد بود. حالا اتریوم چیست؟ در اصل، یک پایگاه داده عمومی که رکوردهای تراکنش‌های دیجیتال را به طور دائمی نگهداری می‌کند. این پایگاه داده به هیچ متصدی مرکزی برای نگهداری و تأمین امنیت نیاز ندارد. در عوض اتریوم به عنوان یک سیستم تراکنشی «بدون اعتماد» عمل می‌کند - یک فریم‌ورک که در آن افراد می‌توانند تراکنش‌های نظیر-به-نظیر (peer-to-peer) ایجاد کنند بدون آن که به اعتماد به شخص ثالث یا حتی یکدیگر نیاز داشته باشند.هنوز سردرگم هستید؟ این پست از همین‌جا وارد می‌شود. هدف من این است که در سطح فنی توضیح دهم که اتریوم چطور عمل می‌کند، بدون ریاضیات پیچیده یا فرمول‌های ترسناک. حتی اگر یک برنامه‌نویس نیستید، امیدوارم که پس از خواندن این پست چیز بیشتری از این تکنولوژی نصیب شما شود. اگر بخش‌هایی از پست زیادی فنی یا سخت فهم است، مشکلی نیست!‌ واقعاً نیازی نیست که همه جزئیات کوچک را درک کنید. من توصیه می‌کنم که روی درک مطالب در سطح کلی تمرکز کنید.بسیاری از مطالبی که در این پست پوشش داده شده یک دسته‌بندی از مفاهیمی است که در Yellow Paper اتریوم طرح شده‌اند. من برای آسان‌تر کردن درک اتریوم، توضیحات و دیاگرام‌های خودم را اضافه کردم. خوانندگانی که شجاعت کافی برای چالش فنی را دارند می‌توانند Yellow Paper اتریوم را هم بخوانند.شروع کنیم!تعریف بلاکچینیک بلاکچین یک &#34;ماشین سینگلتون تراکنشی امن شده با رمزنگاری با حالت مشترک&#34;(۱) است. خیلی پرطمطراق است، نه؟ بگذارید خردش کنیم:امن شده با رمزنگاری به این معنی است که تولید ارز دیجیتال با الگوریتم‌های پیچیده ریاضی امن شده است که شکستن آنها بسیار دشوار است. این الگوریتم‌ها را نوعی فایروال در نظر بگیرید. این الگوریتم‌ها تقلب کردن در سیستم را تقریباً غیرممکن می‌کنند (مثل ایجاد تراکنش‌های جعلی، پاک کردن تراکنش‌ها و ...).ماشین سینگلتون تراکنشی به این معنی است که فقط یک instance استاندارد از ماشین وجود دارد که کار ایجاد همه تراکنش‌ها در سیستم را انجام می‌دهد. به بیان دیگر، فقط یک حقیقت سراسری در سیستم وجود دارد که همه به آن اعتقاد دارند.با حالت مشترک به این معنی است که حالت ذخیره شده روی این ماشین به اشتراک گذاشته شده و به روی همه باز است (همه به آن دسترسی دارند).اتریوم این پارادایم بلاکچین را پیاده‌سازی کرده است.توضیح پارادایم بلاکچین اتریومبلاکچین اتریوم در اصل یک ماشین حالت بر پایه تراکنش است. در علوم کامپیوتر، یک ماشین حالت به چیزی اشاره دارد که یک سری از ورودی‌ها را می‌خواند و بر اساس آن‌ها به یک حالت جدید گذار می‌کند.با ماشین حالت اتریوم، ما با یک حالت آغازین (Genesis State) شروع می‌کنیم. مثل یک لوح سفید، پیش از این که تراکنشی در شبکه رخ داده باشد. وقتی تراکنش‌ها اجرا می‌شوند، حالت آغازین به حالتی نهایی (Final State) گذار می‌کند. در هر لحظه از زمان این حالت نهایی، حالت فعلی (Current State) اتریوم است.حالت اتریوم حاوی میلیون‌ها تراکنش (Transaction) است. این تراکنش‌ها در بلوک‌ها (Block) گروه‌بندی می‌شوند. یک بلوک حاوی دنباله‌ای از تراکنش‌هاست و هر بلاک به بلاک قبل از خود زنجیر (Chained) شده است.برای انجام یک گذار از یک حالت به حالت بعدی، تراکنش می‌بایست معتبر (Valid) باشد. برای آن که یک تراکنش معتبر محسوب شود، باید یک فرایند اعتبارسنجی که ماینینگ خوانده می‌شود را بگذراند. در ماینینگ یک گروه از گره‌ها (Node) (همان کامپیوترها) منابع پردازشی خود را برای ایجاد یک بلوک از تراکنش‌های معتبر صرف می‌کنند.هر گرهی روی شبکه که خود را یک ماینر (Miner) معرفی می‌کند می‌تواند برای ایجاد و اعتبارسنجی یک بلاک تلاش کند. ماینرهای بسیاری در سراسر جهان همزمان برای ایجاد و اعتبارسنجی بلوک‌ها تلاش می‌کنند. هر ماینر وقتی یک بلوک را به زنجیره‌بلوک پیشنهاد می‌کند یک اثبات‌‌ (Proof) ریاضی [همراه آن] ارائه می‌کند، و این اثبات به عنوان یک تضمین عمل می‌کند: اگر اثبات وجود داشته باشد (صحیح باشد)، بلوک معتبر است.برای این که یک بلوک به زنجیره‌بلوک اضافه شود، ماینر می‌بایست آن را سریع‌تر از سایر ماینرهای رقیب اثبات کند. فرایند اعتبارسنجی هر بلوک با استفاده از اثبات ریاضی که ماینر ارائه می‌کند با نام الگوریتم «اثبات کار» (Proof of Work) شناخته می‌شود.ماینری که یک بلوک جدید را اعتبارسنجی می‌کند مقدار مشخصی ارزش به عنوان پاداش (Reward) دریافت می‌کند. این ارزش چیست؟ بلاکچین اتریوم برای این کار از یک توکن دیجیتال داخلی با نام اتر (Ether) استفاده می‌کند. هر زمان که یک ماینر یک بلاک را ثبت می‌کند، مقداری توکن اتر جدید خلق و به آن ماینر اعطا می‌شود.ممکن است این سوال برایتان پیش بیاید که چه چیز تضمین می‌کند که همه فقط یک زنجیره از بلوک‌ها معتبر بدانند؟ چطور می‌توان مطمئن شد که یک گروه از ماینرها تصمیم نگیرند که زنجیره بلوک‌های خود را (درون شبکه بلاکچین مفروض ما) بسازند؟قبل‌تر ما بلاکچین را یک ماشین سینگلتون تراکنشی با حالت مشترک تعریف کردیم. با استفاده از این تعریف، می‌توانیم بفهمیم که حالت کنونی صحیح (Correct Current State) همان حقیقت سراسری واحدی است که هر کسی در شبکه باید آن را بپذیرد. داشتن چند حالت (یا زنجیره) کل سیستم را نابود می‌کند، چون در آن صورت نمی‌توان روی حالت صحیح توافق کرد. اگر زنجیره‌ها منشعب (واگرا) می‌شدند، این امکان وجود داشت که شما روی یک زنجیره ۱۰ واحد ارز، روی زنجیره دیگر ۲۰ واحد ارز و روی زنجیره دیگری ۴۰ واحد ارز داشته باشید. در این حالت هیچ راهی برای تعیین این که کدام زنجیره معتبر است وجود ندارد.هر وقت چند مسیر (برای زنجیره) خلق می‌شود، یک فورک (Fork) رخ می‌دهد. معمولاً ما از رخ دادن فورک‌ها اجتناب می‌کنیم، به این دلیل که فورک‌ها سیستم را مختل می‌کنند و افراد را مجبور می‌کنند که زنجیره‌ای را که به درستی آن باور دارند انتخاب کنند.برای تعیین مسیر معتبرتر و پیشگیری از ایجاد چند زنجیره، اتریوم از مکانیسمی به نام GHOST Protocol  استفاده می‌کند (۲).به بیان ساده این پروتکل می‌گوید که ما باید مسیری را انتخاب کنیم که بیشترین پردازش روی آن انجام گرفته است. یک راه برای تعیین این مسیر استفاده از شماره بلوک آخرین بلوک (بلوک برگ یا Leaf Block) هر زنجیره است، که مجموع تعداد بلوک‌ها در آن مسیر را نشان می‌دهد (بدون محاسبه Genesis Block). هر چه شماره بلوک بیشتر باشد، مسیر طولانی‌تر و تلاش برای ماینینگ روی آن مسیر بیشتر بوده است. استفاده از این منطق به ما امکان توافق همگانی روی نسخه استاندارد حالت کنونی (canonical version of the current state) را می‌دهد.حالا که یک دورنمای کلی از این که بلاکچین چیست دریافت کردید، بیایید در اجزاء اصلی سیستم اتریوم دقیق شویم:Accounts (حساب‌ها)State (حالت)gas and fees (گس و کارمزد تراکنش)Transactions (تراکنش‌ها)Blocks (بلوک‌ها)transaction execution‌ (اجرای تراکنش)Mining (ماینینگ)proof of work (اثبات کار)حساب‌هاحالت مشترک (shared-state) اتریوم از تعداد زیادی از شیء‌های (Object) کوچک (حساب‌ها) تشکیل شده که قابلیت برهم‌کنش با یکدیگر را از طریق یک فریم‌ورک message-passing دارند. هر حساب یک حالت مرتبط با خود و یک آدرس ۲۰ بایتی دارد. یک آدرس در اتریوم یک شناسه ۱۶۰ بیتی است که برای شناسایی هر حساب به کار می‌رود.دو نوع حساب وجود دارد:حساب دارای مالک بیرون از شبکه (Externally Owned Account): توسط کلیدهای خصوصی (Private Key) کنترل می‌شوند و کدی به آن‌ها مرتبط نیست.حساب قرارداد هوشمند (Contract Account): که توسط کد قرارداد هوشمند خود کنترل می‌شوند و کدی مرتبط با خود دارند.حساب‌های دارای مالک بیرونی در مقابل حساب‌های قرارداد هوشمنددرک یک تفاوت اساسی بین حساب‌های دارای مالک بیرونی و حساب‌های قرارداد هوشمند مهم است. یک حساب دارای مالک بیرونی می‌تواند با ایجاد و امضای یک تراکنش با استفاده از کلید خصوصی خود، به دیگر حساب‌های مشابه خود یا حساب‌های قرارداد هوشمند پیام بفرستد. یک پیام بین دو حساب دارای مالک بیرونی یک انتقال ارزش ساده است. اما پیامی که از حساب دارای مالک بیرونی به یک حساب قرارداد هوشمند ارسال می‌شود، کد حساب قرارداد هوشمند را فعال می‌کند، و به آن اجازه انجام اعمال مختلف را می‌دهد (برای مثال انتقال توکن‌ها، نوشتن روی حافظه داخلی، ضرب توکن‌های جدید، انجام محاسبات، ایجاد قراردادهای هوشمند جدید و …).برخلاف حساب‌های دارای مالک بیرونی، حساب‌های قرارداد نمی‌توانند خودشان تراکنش‌های جدید ایجاد کنند. به جای آن، حساب‌های قرارداد تنها می‌توانند در پاسخ به تراکنش‌هایی که دریافت می‌کنند (از هر نوع حسابی) تراکنش‌های دیگری ارسال کنند. درباره فراخوانی‌های قرارداد-به-قرارداد در بخش «تراکنش‌ها و پیام‌ها» بیشتر می‌آموزیم.بنابر این، هر عملی در زنجیره‌بلوک اتریوم همواره از طریق یک تراکنش که از سمت یک حساب با مالک بیرونی ایجاد شده آغاز می‌شود.(ادامه دارد...)منبع: https://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369پانویس‌ها:(1) Cryptographically Secure Transactional Singleton Machine with Shared-State(2) Greedy Heaviest Observed Subtree</description><category>Saman Shahmohamadi</category><author>Saman Shahmohamadi</author><pubDate>Sat, 22 Jun 2019 18:35:56 +0430</pubDate></item><item><title>اتریوم برای توسعه‌دهندگان وب</title><link>https://virgool.ir/@saman.shahmohamadi/اتریوم-برای-توسعهدهندههای-وب-nxjdrq7hlyzi</link><description>این یک ترجمه آزاد از مقاله‌ای کوتاه به زبان انگلیسی است. لینک مقاله اصلی در انتهای پست ذکر شده است.من برای مدتی مشغول یادگیری پلتفرم بلاکچین اتریوم بودم و هر چی بیشتر یاد می‌گرفتم، به نظر هیجان‌انگیز‌تر می‌اومد. درباره اتریوم منابع زیادی هست (مقاله‌ها، ویدئوها و مستندهای پلتفرم)، به خاطر همین به راحتی ممکنه توی منابع غرق بشین. ولی بسیاری از این منابع تاریخ گذشته هستن به این خاطر که پلتفرم اتریوم با سرعت بالایی در حال تکامله. این مقاله حاصل تلاش من برای توضیح اتریوم از منظر یک توسعه‌دهنده وب هست.اگه شما یه توسعه‌دهنده وب هستین می‌دونید که یک وب‌اپ با معماری کلاینت-سرور به طور کلی چطور کار می‌کنه.یک اپلیکیشن متمرکزوب اپلیکیشن شما روی یک سرویس هاستینگ مثل AWS یا یک VPS قرار می‌‎گیره. همه کلاینت‌ها با این اپلیکیشن متمرکز تعامل می‌کنن. کلاینت‌ می‌تونه یک مرورگر یا یک API باشه که از سرویس شما استفاده می‌کنه. وقتی یک کلاینت یک درخواست به سرور می‌فرسته، سرور کار خودش رو انجام می‌ده، با دیتابیس و/یا کش صحبت می‌کنه، (دیتابیس رو) می‌خونه، می‌نویسه، آپدیت می‌کنه و در آخر پاسخ درخواست رو به کلاینت برمی‌گردونه.این معماری بیشتر وقت‌ها خوب کار می‌کنه. با این حال، برای بعضی اپلیکیشن‌های خاص خیلی بهتره اگر دیتابیس به صورت عمومی (public) و امن برای همه در دسترس باشه و برای دسترسی به داده‌ها نیازی به وب‌اپلیکیشن سمت سرور نباشه.برای مثال، بیایید به eBay نگاه کنیم. فرض کنید شما یه PowerSeller (فروشنده بزرگ با خدمات مشتری استاندارد و قابل قبول) در eBay هستید که صدها نظر خوب از مشتری‌ها دریافت کرده و به دلیلی eBay حساب کاربری شما رو مسدود می‌کنه. این خیلی بده و می‌تونه به شدت به کسب‌و‌کار شما آسیب بزنه. خیلی خوب می‌شد اگر می‌تونستید همه نظرات و امتیازهایی که گرفتید رو به یک پلتفرم دیگه (غیر از eBay) منتقل کنید. eBay به عنوان شخص ثالث معتمد بین فروشنده و خریدار رابطه برقرار می‌کنه. اما در مقابل از هر فروش مقداری کمیسیون برمی‌داره. چی می‌شد اگه راهی وجود داشت که eBay رو کلاً از تراکنش بین خریدار و فروشنده حذف کنیم؟ اون وقت شما می‌تونستید مبلغ کمیسیون رو صرفه‌جویی کنید و ضمناً به همه داده‌های خودتون دسترسی داشته باشید. اینجا همون جاییه که اپلیکیشن‌های غیرمتمرکز وارد صحنه می‌شن. اتریوم ساختن Dapp ها (decentralized applications) رو خیلی آسون کرده. این تصویر کلی یک Ethereum Dapp هست:یک اپلیکیشن غیرمتمرکزاگه دقت کرده باشین، هر کلاینت (مرورگر) با instance اپلیکیشن خودش مرتبط می‌شه. سرور متمرکزی وجود نداره که همه کلاینت‌ها به اون وصل بشن. این به این معنیه که هر کسی که می‌خواد با یک dapp تراکنش داشته باشه باید یک کپی کامل از بلاکچین روی سیستم خودش (کامپیوتر یا موبایل یا ...) داشته باشه. یعنی شما قبل از این که بتونید از اپلیکیشن استفاده کنید باید بلاکچین رو دانلود کنید و بعد از اون شروع به استفاده از اپلیکیشن کنید. این کار اولش ممکنه مسخره به نظر بیاد اما این مزیت رو داره که دیگه به یک سرور متمرکز وابسته نیستید که ممکنه فردا ناپدید بشه یا دسترسی شما رو مسدود کنه.در واقعیت هم برای دانلود کل بلاکچین شما نیاز به مقدار زیاد هارد دیسک یا رم ندارید.حالا ببینیم این بلاکچین دقیقاً چی هست؟1. دیتابیس: وقتی چند تا تراکنش توی شبکه اتریوم ثبت می‌شه، این تراکنش‌ها توی یک بلاک بسته‌بندی می‌شن و هر بلاک به بلاک بعد از خودش لینک می‌شه. این رشته‌ی لینک‌‎‌شده‌ی بلاک‌ها که اطلاعات همه‌ تراکنش‌ها رو نگه می‌دارن همون بلاکچین هست. اگه به مثال eBay برگردیم، هر تراکنش بین خریدار و فروشنده، چه فروش باشه، چه استرداد وجه، چه شکایت و یا هر چیز دیگه، روی بلاکچین ثبت می‌شه و همه می‌تونن اون رو ببینن. برای اطمینان از این که همه گره‌ها (node) روی شبکه نسخه یکسانی از داده‌های تراکنش‌ها دارن و برای اطمینان از این که هیچ داده نامعتبری روی این دیتابیس ثبت نمی‌شه، اتریوم از الگوریتمی به اسم Proof of Work استفاده می‌کنه.2. کد: دیتابیس فقط داده‌ها رو ذخیره می‌کنه. اما منطق (logic) خرید، فروش، لغو، استرداد و غیره کجاست؟ در دنیای اتریوم شما کد اپلیکیشن (قرارداد/قرارداد هوشمند) رو با زبانی به اسم Solidity می‌نویسید. بعد از اون شما از کامپایلر سالیدیتی استفاده می‌‎کنید تا کد رو به Ethereum Byte Code تبدیل کنید و بعد این byte code رو روی بلاکچین قرار بدید. جایگزین‌هایی برای Solidity وجود داره اما Solidity با اختلاف محبوب‌ترین زبان برای توسعه قرارداد هوشمنده.پس بلاکچین داده شما رو نگه می‌داره، کد شما رو نگه می‌داره و ضمناً کد روی توی EVM یا  Ethereum Virtual Machine اجرا می‌کنه.برای ساختن dapp ها بر بستر وب، اتریوم یک کتابخونه به درد بخور جاواسکریپت به اسم web3.js داره که اتصال کلاینت به node بلاکچین رو برقرار می‌کنه. پس شما می‌تونید این کتابخونه رو توی framework جاواسکریپت خودتون (reactjs, angularjs) اضافه کنید و کار رو شروع کنید.یک ویژگی بزرگ و خیلی مهم دیگه پلتفرم اتریوم قابلیت‌های مالی اونه. نظرتون چیه اگه بهتون بگم که به محض این که شما شروع به استفاده از یک dapp می‌کنید، یک حساب بانکی هم اون جا براتون درست می‌شه؟ در واقع نه یک حساب، شما می‌‎تونید هر تعداد که بخواهید حساب بانکی داشته باشید. اسم این حساب‌های بانکی کیف‌پول (Wallet) هست. جایی که شما پول‌تون رو ذخیره می‌کنید (در قالب Ether/اتر، واحد پول اکوسیستم اتریوم) و تراکنش انجام می‌دین.جزئیات زیادی درباره کارکرد داخلی بلاکچین هست که من عمداً کنار گذاشتم، چون می‌خواستم روی مقایسه اپلیکیشن‌های غیرمتمرکز و متمرکز تمرکز کنم. امیدوارم که این پست به این هدف رسیده باشه و ایده کلی خوبی از این که اتریوم چیه و چطور می‌شه برای ساختن dapp ها از اون استفاده کرد به شما داده باشه.منبع:  https://medium.com/@mvmurthy/ethereum-for-web-developers-890be23d1d0c </description><category>Saman Shahmohamadi</category><author>Saman Shahmohamadi</author><pubDate>Tue, 28 May 2019 16:35:54 +0430</pubDate></item></channel></rss>