Skip to content

Commit

Permalink
Merge pull request #330 from kehiy/main
Browse files Browse the repository at this point in the history
fix: image paths, ETH logo, refrences
  • Loading branch information
Ja7ad authored Jan 7, 2024
2 parents 6c43d85 + 9fe452f commit c4ebf3e
Show file tree
Hide file tree
Showing 9 changed files with 20 additions and 17 deletions.
25 changes: 14 additions & 11 deletions content/chapter 12/ethereum/12.3.1-ethereum.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,26 @@ weight: 25501
---

# 12.3.1.1 اتریوم

{{<img url="#" image="../../../static/assets/img/content/chapter-12/ethereum/ethereum-logo.png" alt="Ethereum logo">}}

بعد از حل مشکلاتی که برای ایجاد یک ارز یا سکه دیجیتالی یا مجازی وجود داشت توسط بیتکوین، با استفاده از ایجاد یک دفتر کل غیر متمرکز، دیتا مدل بلاکچین و سیستم غیرمتمرکز آن موقعیتی برای ایجاد و حل مشکلات دیگه فراهم کرد.

ویتالیک بوترین ایده اتریوم و وایت پیپر ان را اولین بار در سال ۲۰۱۳ منتشر کرد. او یک فعال در مجله بیتکوین بود و اعتقاد داشت بیتکوین دارای مشکلاتی است که باید برطرف شود. او در سال ۲۰۱۴ با چند توسعه دهنده دیگر در ماه اوت همان سال برای اجرای ایده خود شروع به جذب سرمایه کرذ.
ویتالیک بوترین ایده اتریوم و وایت پیپر ان را اولین بار در سال ۲۰۱۳ منتشر کرد. او یک فعال در مجله بیتکوین بود و اعتقاد داشت بیتکوین دارای مشکلاتی است که باید برطرف شود. او در سال ۲۰۱۴ با چند توسعه دهنده دیگر در ماه اوت همان سال برای اجرای ایده خود شروع به جذب سرمایه کرد.

همانطور که ایده ها حول و محور یک سکه دیجیتالی پیش از بیتکوین زیاد بود، قبل از اتریوم و حتی بیتکوین هم افرادی فکر استفاده از ماشین ها برای اجرا و مدیریت قرارداد ها داشتند. اما مساله تغییر پذیر بودن کد های ماشینی و همیشه در دسترس بودن آنها کار را دشوار تر میکرد.

همانطور که در بخش قبل (معرفی بلاکچین)توضیح دادیم، یک بلاکچین کاملا غیر قابل تغییر است. و همینطور همیه چیز در آن شفاش و اعتبار سنجی شده است. در کنار تمام این موارد نسبت به تعداد node ها شبکه همیشه دسترسی پذیر است و میتوان به دسترسی پذیر بودن اطلاعات بر بستر آن هم اعتماد کرد.
همانطور که در بخش قبل (معرفی بلاکچین)توضیح دادیم، یک بلاکچین یک دیتابیس توزیع شده کاملا غیر قابل تغییر است. و همینطور همیه چیز در آن شفاش و اعتبار سنجی شده است. در کنار تمام این موارد نسبت به تعداد node ها شبکه همیشه دسترسی پذیر است و میتوان به دسترسی پذیر بودن اطلاعات بر بستر آن هم اعتماد کرد.

از طرفی مدل های اجماعی قبلی هم مشکلاتی مثل هزینه بر بودن و ایجاد مشکلات در طبعیت را داشتند. در ادامه به حل این مشکلات در اتریوم میپردازیم.

## 12.3.1.1.1 ماشین مجازی اتریوم و قرار داد های هوشنمد

این خصوصیات برای ما این فرصت را ایجاد کرد تا قرارداد های هوشمند را اختراع کنیم و پیشتاز این صنعت ویتالیک بوترین با ایده ماشین مجازی اتریوم بود!
این خصوصیات برای ما این فرصت را ایجاد کرد تا [قرارداد های هوشمند](https://en.wikipedia.org/wiki/Smart_contract) را اختراع کنیم و پیشتاز این صنعت ویتالیک بوترین با ایده ماشین مجازی اتریوم بود!

اتریوم، یک بلاکچین نسل دوم است که اولین بار با مدل اجماع اثبات کار PoW و قابلیت پشتیبانی از قرارداد های هوشمند اراعه شد.
طبق بژ پیپر اتریوم (بژ پیپر نسخه ای ساده نویسی شده و خلاصه شده از یلو پیپر است.) هدف اصلی اتریوم ارز اتر نیست. (ارز شبکه اتریوم اتر و مرسوم ترین خرده واحد آن وی می باشد)
هدف اصلی اتریوم ماشین مجازی آن است. شبکه اتریوم، مجموعه ای از نود ها هستند که نرم افزار اتریوم (یک پیاده سازی از اتریوم) را اجرا میکنند و با دیتا مدل بلاکچین استیت کلی را نگهداری میکنند. زمانی که یک قرارداد هوشمند روی اتریوم مستقر میشود، تمامی نود های شبکه یک بایت کد از ان را نگهداری میککند.
هدف اصلی اتریوم ماشین مجازی آن است. شبکه اتریوم، مجموعه ای از نود ها هستند که نرم افزار اتریوم (یک پیاده سازی از اتریوم) را اجرا میکنند و با دیتا مدل بلاکچین استیت کلی را نگهداری میکنند. زمانی که یک قرارداد هوشمند روی اتریوم مستقر میشود، تمامی نود های شبکه یک [بایت کد](https://en.wikipedia.org/wiki/Bytecode) از ان را نگهداری میککند.

پس شما میتوانید به راحتی، با استاندارد های اتریوم قرارداد برای مثال مالی خود را بنویسید، و روی شبکه اتریوم مستقر کنید. این امر باعث میشود که شما بدون واسطه، به دسترسی پذیر بودن، شفاف بودن (تمام بایت کد ها روی شبکه اتریوم قابل استعلام و خواندن است. به نحوی هر قرارداد هوشنمند مجبور است متن باز باشد. قابل ذکر است که سورس کدی که کامپایل نشده در شبکه نگهداری نمیشود اما معمولا اکسپلورر ها یک نسخه اعتبارسنجی شده از سورس کد را اراعه میدهند) ان مطمن باشید.

Expand All @@ -32,7 +35,7 @@ weight: 25501

تمام کانترکت های اتریوم دسترسی به برخی از اطلاعات شبکه، نوشتن و خواندن از ان را دارند و میتوانند مجوز برداشت اتر از صاحب یک حساب بگیرند یا به حساب های مختلف اتر وایز کنند.

هر کانترکت در شبکه اتریوم (و عمد بلاکچین های موجود) حکم یک شی در پارادایم برنامه نویسی شی گرا را دارد. برای مثال انها استکی مخصوص خود دارند و یا برای صدا زدن یکدگیر باید یک نسخه (instance) از دیگری بسازند.
هر کانترکت در شبکه اتریوم (و عمد بلاکچین های موجود) حکم یک شی در [پارادایم برنامه نویسی](https://en.wikipedia.org/wiki/Programming_paradigm) شی گرا را دارد. برای مثال انها استکی مخصوص خود دارند و یا برای صدا زدن یکدگیر باید یک نسخه (instance) از دیگری بسازند.
که در این باره در بخش کانترکت و ماشین مجازی اتریوم بصورت مفصل میپردازیم.
از طرفی دیگر تمام کانترکت های اتریوم یک فضای ذخیره سازی کلید و مقداری (key/value)هم دارند.

Expand All @@ -50,11 +53,11 @@ weight: 25501

پس نودی که کانترکت شما را اجرا میکند دلیلی منطقی برای اجرا و نگهداری از ان دارد. و علت ایجاد ارز اتر همین پاداش و هزینه اجرا کانترکت ها است.

## 12.3.1.1.2 مدل اجماع اثبات سهام
## 12.3.1.1.2 مدل اجماع اثبات سهام (Proof of Stake or PoS)

مدل اجماع اولیه شبکه اتریوم، مدل اثبات کار بود. اما بعد ازمدتی اتریوم از مدل جدیدی به اسم اثبات سهام امنیت و یکپارچی خود را تظمین کرد.
مدل اجماع اولیه شبکه اتریوم، مدل [اثبات کار](https://en.wikipedia.org/wiki/Proof_of_work) بود. اما بعد ازمدتی اتریوم از مدل جدیدی به اسم اثبات سهام امنیت و یکپارچی خود را تظمین کرد.

در مدل اثبات سهام، مسابقه ای وجود ندارد. بجای ماینر ها هر نود نقش یک شخص که وضیفه اعتبار سنجی بلاک هارا دارد را بازی میکند. اما چطور اعتماد به نود ها صورت میگیرد؟
در مدل [اثبات سهام](https://en.wikipedia.org/wiki/Proof_of_stake)، مسابقه ای وجود ندارد. بجای ماینر ها هر نود نقش یک شخص که وضیفه اعتبار سنجی بلاک هارا دارد را بازی میکند. اما چطور اعتماد به نود ها صورت میگیرد؟

هر نود برای اینکه در فرایند اجماع شرکت داده بشود، مبلغی از ارز شبکه را استیک میکند. بعد از استیک شدن قابلیت جابه جایی ان وجود ندارد و به نحوی تحت کنترل شبکه است. این استیک حکم اعتبار ان نود را دارد. زمانی که شما دست به تقلب بزنید، استیک های شما در خطر خواهد بود. پس هرچه شما ارزش بیشتری را استیک کنید، مبلغ بیشتری برای از دست دادن دارید. پس احتمالا کمتر به فکر صادق نبودن هستید و در نتیجه معتبر تر هستید.

Expand All @@ -78,17 +81,17 @@ weight: 25501

در شبکه اتریم یک استیت جهانی (شبیه به دفتر کل بیتکوین) وجود دارد. اطلاعاتی که تمامی نود ها بصورت یکپارچه از وضعیت ماشین مجازی اتریوم و حساب ها نگهداری میکنند همان ورلد استیت اتریوم است.

{{<img url="#" image="../../../assets/img/content/chapter-12/world-state.png" alt="world state">}}
{{<img url="#" image="../../../static/assets/img/content/chapter-12/ethereum/world-state.png" alt="world state">}}

تغییرت و تراکنش های اعمال شده در اطلاعات یک نود با دیگر نود ها در یک شبکه همتا به همتا صورت میگیرد (در ادامه به جزییات این شبکه بیشتر خواهیم پرداخت).

{{<img url="#" image="../../../assets/img/content/chapter-12/p2p-net.png" alt="P2P">}}
{{<img url="#" image="../../../static/assets/img/content/chapter-12/ethereum/p2p-net.png" alt="P2P">}}

گفتنی است که این تغییرات نیاز دارند تا در مرحله اجماع به تایید اکثریت نود ها برسند تا در استیت جهانی اعمال شوند. و پیام های رد و بدل شد در فرایند اجماع در همین شبکه همتا به همتا منتقل میشوند.

راه ارتباطی کابر با نود های شبکه برای خواندن و نوشتن اطلاعات بر ورلد استیت یک API وب ۳ است.

{{<img url="#" image="../../../assets/img/content/chapter-12/web3-API.png" alt="web3 API">}}
{{<img url="#" image="../../../static/assets/img/content/chapter-12/ethereum/web3-API.png" alt="web3 API">}}

شما برای هر مدل از عملیات نوشتن نیاز به ایجاد یک تراکنش دارید که بسته به تراکنش و بار شبکه کارمزدی متفاوت دارد.
اما برای خواندن اطلاعات از شبکه مثل اطلاعات یک بلاک یا حافظه یک قرارداد هوشمند کارمزدی در نظر گرفته نمیشود و نیازی به ایجاد تراکنش نیست و RPC هایی جهت اینکار اراعه میشود.
Expand Down
12 changes: 6 additions & 6 deletions content/chapter 12/ethereum/12.3.4-accounts.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ slug: ethereum-accounts
weight: 25504
---

همانطور که میدانید اتریوم از مدل account based بجای UTXO استفاده میکند.
همانطور که میدانید اتریوم از مدل account based بجای [UTXO](https://en.wikipedia.org/wiki/Unspent_transaction_output) استفاده میکند.
اکانت ها در اتریوم، با شبکه بیتکوین تفاوت هایی اساسی دارند. اکانت های اتریوم بصورت کلی به دو دسته EOA و CA تقسیم میشوند.
(external owned account) (contract account)

Expand All @@ -18,7 +18,7 @@ weight: 25504

این اکانت های دارای دو بخش هستند (هر ادرس یا کلید عمومی به یک فیلد دو بخشی از این اطلاعات در ورلد استیت اتریوم اشاره دارد.)

{{<img url="#" image="../../../assets/img/content/chapter-12/EOA.png" alt="EOA">}}
{{<img url="#" image="../../../static/assets/img/content/chapter-12/ethereum/EOA.png" alt="EOA">}}


## 12.3.4.1.1 nonce
Expand All @@ -27,7 +27,7 @@ weight: 25504

اما بحث اصلی خاصیت عدد نانس است. زمانی که حساب شما تراکنشی ایجاد میکند تراکنش مورد نظر شامل عدد نانس حساب مبدا هم میشود. در همین حین نود های اتریوم میتوانند بر اساس نانس تراکنش شما را از روی ترتیب این شمارنده اجرا کنند. (در شبکه اتریوم انتخاب تراکنش توسط نود ها پردازش انها بصورت کلی به ترتیب نیست و بستگی به نود ها و بار شبکه و تراکنش دارد. در بخش تراکنش به جزییات این مساله میپردازیم.) یعنی اگر سه تراکنش متوالی از طرف شما ثبت شود. به انها بر اساس نانس ترتیب بندی میشوند و با اینکه اجرای کل تراکنش ها به ترتیب نیست اما تراکنش های هر شخص باید دقیقا زمانی اجرا شوند که یک واحد به نانس فعلی اضافه کنند. و در این حالت ترتیب تراکنش های شما حفظ خواهد شد.

اما یکی از کاربرد های اصلی نانس جلوگیری از حمله تکرار است. (reply attack) برای مثال اگر الیس به باب ۱ اتر انتقال دهد. و این تراکنش شامل نانس نشود. باب با پیدا کردن تراکنش امضا شده الیس بر بستر شبکه میتواند انرا تکرار کند و از موجودی حساب الیس کم کند. اما زمانی که در تراکنش امضا شده نانس هم قرار بگیرد هر تراکنش حتی با مقصد و مبدا و مبلغ ثابت هم از هم متمایز هستند. و زمانی که تراکنشی تکراری ثبت شود نانس مورد نظر با نانس حساب مبدا همخوانی ندارد. پس نود ها انرا رد میکنند. و باب نیاز دارد تا یک تراکنش جدید با نانس جدید داشته باشد.
اما یکی از کاربرد های اصلی نانس جلوگیری از [حمله تکرار](https://en.wikipedia.org/wiki/Replay_attack) است. (reply attack) برای مثال اگر الیس به باب ۱ اتر انتقال دهد. و این تراکنش شامل نانس نشود. باب با پیدا کردن تراکنش امضا شده الیس بر بستر شبکه میتواند انرا تکرار کند و از موجودی حساب الیس کم کند. اما زمانی که در تراکنش امضا شده نانس هم قرار بگیرد هر تراکنش حتی با مقصد و مبدا و مبلغ ثابت هم از هم متمایز هستند. و زمانی که تراکنشی تکراری ثبت شود نانس مورد نظر با نانس حساب مبدا همخوانی ندارد. پس نود ها انرا رد میکنند. و باب نیاز دارد تا یک تراکنش جدید با نانس جدید داشته باشد.

## 12.3.4.1.2 balance

Expand All @@ -39,11 +39,11 @@ weight: 25504
نوع دوم اکانت های اتریوم اکانت های قرار داد هوشمند است. این حساب ها قابلیت پردازش تراکنش و ایجاد تغییر در ورلد استیت را دارا هستند.
این حساب ها بجای یک کلید خصوصی توسط یک کد EVM کنترل میشوند.

{{<img url="#" image="../../../assets/img/content/chapter-12/CA.png" alt="CA">}}
{{<img url="#" image="../../../static/assets/img/content/chapter-12/ethereum/CA.png" alt="CA">}}

## 12.3.4.2.1 nonce

نانس در کانترکت ها با عدد صفر شروع میشد که طی EIP-161 این عدد به یک تغییر کرد.
نانس در کانترکت ها با عدد صفر شروع میشد که طی [EIP-161](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-161.md) این عدد به یک تغییر کرد.
بر خلاف حساب های عادی در حساب های کانترکت تنها زمانی نانس افزایش پیدا میکند که کانترکت یک کانترکت جدید بسازد.

> کانترکت ها میتوانند کانترکت های جدیدی بر روی شبکه مستقر کنند.
Expand Down Expand Up @@ -76,7 +76,7 @@ https://ethereum.stackexchange.com/questions/764/do-contracts-also-have-a-nonce

آدرس های حساب های شخصی و کانترکت تفاوت هایی دارند. در بخش کلید ها و ادرس بصورت جزیی انهارا بررسی کرده ایم. اما در این بخش هم توضیحی خلاصه جهت تکمیل مطلب خواهیم داشت.

{{<img url="#" image="../../../assets/img/content/chapter-12/address.png" alt="address">}}
{{<img url="#" image="../../../static/assets/img/content/chapter-12/ethereum/address.png" alt="address">}}

## 12.3.4.3.1 EOA

Expand Down
File renamed without changes
File renamed without changes
File renamed without changes
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
File renamed without changes

0 comments on commit c4ebf3e

Please sign in to comment.