Skip to content

Commit

Permalink
feat: accounts: CA
Browse files Browse the repository at this point in the history
  • Loading branch information
kehiy committed Jan 5, 2024
1 parent b46a9a0 commit ce010ad
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 12 deletions.
Binary file added assets/img/content/chapter-12/address.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 5 additions & 6 deletions content/chapter 12/ethereum/12.3.1-ethereum.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,20 +78,19 @@ weight: 25501

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

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

![world state](../../../assets/img/content/chapter-12/world-state.png)
تغییرت و تراکنش های اعمال شده در اطلاعات یک نود با دیگر نود ها در یک شبکه همتا به همتا صورت میگیرد (در ادامه به جزییات این شبکه بیشتر خواهیم پرداخت).

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

![P2P](../../../assets/img/content/chapter-12/p2p-net.png)
{{<img url="#" image="../../../assets/img/content/chapter-12/p2p-net.png" alt="P2P">}}

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

راه ارتباطی کابر با نود های شبکه برای خواندن و نوشتن اطلاعات بر ورلد استیت یک API وب ۳ است.
![web3 API](../../../assets/img/content/chapter-12/web3-API.png)

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

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

> ایجاد تراکنش هم با اراعه تراکنش خام امضا شده به همین RPC صورت میگیرد.
53 changes: 47 additions & 6 deletions content/chapter 12/ethereum/12.3.4-accounts.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ weight: 25504

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

![EOA](../../../assets/img/content/chapter-12/EOA.png)
{{<img url="#" image="../../../assets/img/content/chapter-12/EOA.png" alt="EOA">}}


## 12.3.4.1.1 nonce

Expand All @@ -30,17 +31,57 @@ weight: 25504

## 12.3.4.1.2 balance

مقدار دوم یک بالانس یا موجودی است که بطور خلاصه این بالانس مقدار موجودی اتر یک حساب را نمایش میدهد و نگهداری میکند.
مقدار دوم یک بالانس یا موجودی است که بطور خلاصه این بالانس مقدار موجودی یک حساب را به وی (wei) نمایش میدهد و نگهداری میکند.


# 12.3.4.2 contract accounts (CA)

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

![CA](../../../assets/img/content/chapter-12/CA.png)
{{<img url="#" image="../../../assets/img/content/chapter-12/CA.png" alt="CA">}}

## 12.3.4.2.1 nonce

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

> کانترکت ها میتوانند کانترکت های جدیدی بر روی شبکه مستقر کنند.
> هیچ کانترکتی نمیتواند مالک کانترکت دیگری باشد. اما زمانی که کاربری با یک تراکنش تابعی از یک کانترکت ایجاد میکند که کانترکتی دیگر ایجاد شود. نانس کانترکت افزایش پیدا میکند. و مالک کانترکت حساب ایجاد کننده تراکنش خواهد بود.
همچنین خوب است نگاهی به این رشته در وبسایت استک اکسچنج اتریوم بیندازید:
https://ethereum.stackexchange.com/questions/764/do-contracts-also-have-a-nonce

## 12.3.4.2.2 balance
## 12.3.4.2.3 storage hash
## 12.3.4.2.4 code hash

حساب های کانترکت هم مثل حساب های شخصی یا EOA دارای موجودی هستند. که موجودی انها به واحد wei نگهداری میشود.

## 12.3.4.2.3 code hash

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

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

## 12.3.4.2.4 storage root

همانطور که اشاره کردیم هر کانترکت به یک دیتابیس با مدل مقدار و کلید (key/value) دسترسی دارد.
این مقادیر در دیتابیس نود ها نگهداری میشوند. ریشه درخت مرکل این دیتا ها (مربوط به همان کانترکت خاص فقط) در این بخش نگهداری میشود. علت نگهداری این هش مشابه نگهداری هش کد کانترکت است.

با این روت هش میتوان فضای ذخیره سازی کانترکت را اعتبار سنجی کرد. تغییر ان را تشخیص داد و همچنین از جایی که یک روت هش از ان داریم محسابه روت هش خود حساب را ارزان نگه میدارد.


# 12.3.4.3 address

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

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

## 12.3.4.3.1 EOA

ادرس در اکانت های شخصی از هش شدن کلید عمومی بدست می آید. که طول ان ۶۴ کاراکتر بر مبنای ۱۶ است.

## 12.3.4.3.2 CA

ادرس حساب های کانترکت از هش ادرس حساب مالک (حساب شخصی که تراکنش استقرار کانترکت را ایجاد میکند.) و عدد نانس همان حساب بدست می اید که طول ان ۴۲ کاراکتر بر مبنای ۱۶ است.

0 comments on commit ce010ad

Please sign in to comment.