You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: public/content/translations/fa/whitepaper/index.md
+4-4Lines changed: 4 additions & 4 deletions
Original file line number
Diff line number
Diff line change
@@ -86,8 +86,8 @@ APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR
86
86
2. بررسی کنید که مُهر زمانی بلوک بزرگتر از بلوک قبلی باشد<sup>[fn2](#notes)</sup> و کمتر از 2 ساعت در آینده باشد
87
87
3. بررسی کنید که اثبات کار روی بلوک معتبر باشد.
88
88
4. حالت `S[0]` را حالت پایانی بلوک قبل بگذار.
89
-
5. فرض کن `TX` لیست تراکنشهای بلوک با تعداد `n` تراکنش است. برای همه `i` در `0...n-1`، `S[i+1] = APPLY(S[i], TX[i]) را تنظیم کنید /code> اگر هر برنامه ای خطا را برمیگرداند، از آن خارج شوید و false را برگردانید.</li>
90
-
<li>True را برگردانید و <code>S[n]` را به عنوان وضعیت در انتهای این بلوک ثبت کنید.
89
+
5. فرض کن `TX` لیست تراکنشهای بلوک با تعداد `n` تراکنش است. فرض کن `TX` لیست تراکنشهای بلوک با تعداد `n` تراکنش است. برای همه `i` در `0...n-1`، `S[i+1] = APPLY(S[i], TX[i])` را تنظیم کنید اگر هر برنامه ای خطا را برمیگرداند، از آن خارج شوید و false را برگردانید.
90
+
6.True را برگردانید و `S[n]` را به عنوان وضعیت در انتهای این بلوک ثبت کنید.
91
91
92
92
در واقع هر تراکنش در بلوک باید یک انتقال حالت معتبر را از حالت قبل از انجام تراکنش به حالت جدید انجام دهد. باید توجه کرد که حالت به هیچ صورتی در بلوک ثبت نمیشود؛ این یک موضوع تماما انتزاعی است برای این که توسط گرههای اعتبارسنج به خاطر سپرده شود و تنها میتوان (به صورت ایمن) با شروع از حالت بلوک پیدایش و حرکت بر روی تراکنشهای هر بلوک، حالت بلوک فعلی را به دست آورد. علاوه بر این، توجه کنید که ترتیبی که استخراجگر تراکنشها را در بلوک ثبت میکند مهم است؛ اگر دو تراکنش آ و ب وجود داشته باشند به طوری که ب یک UTXOی ساختهشده از آ را خرج کند، در این صورت بلوک معتبر است اگر آ قبل از ب ثبت شود و نه برعکس.
93
93
@@ -222,15 +222,15 @@ if !self.storage[calldataload(0)]:
222
222
223
223
### اجرای کد {#code-execution}
224
224
225
-
کد در قراردادهای اتریوم به زبان بایت کد مبتنی بر پشته، سطح پایین نوشته می شود که به آن «کد ماشین مجازی اتریوم» یا «کد EVM» گفته می شود. کد شامل یک سری بایت است که هر بایت نشان دهنده یک عملیات است. به طور کلی، اجرای کد یک حلقه بی نهایت است که شامل انجام مکرر عملیات در شمارنده برنامه فعلی (که از صفر شروع می شود) و سپس افزایش شمارنده برنامه به یک اندازه، تا رسیدن به انتهای کد یا یک خطا یا < دستورالعمل 0>STOP</code> یا `RETURN` شناسایی شد. عملیات به سه نوع فضای ذخیرهسازی دادهها دسترسی دارند:
225
+
کد در قراردادهای اتریوم به زبان بایت کد مبتنی بر پشته، سطح پایین نوشته می شود که به آن «کد ماشین مجازی اتریوم» یا «کد EVM» گفته می شود. کد شامل یک سری بایت است که هر بایت نشان دهنده یک عملیات است. به طور کلی، اجرای کد یک حلقه بی نهایت است که شامل انجام مکرر عملیات در شمارنده برنامه فعلی (که از صفر شروع می شود) و سپس افزایش شمارنده برنامه به یک اندازه، تا رسیدن به انتهای کد یا یک خطا یا `STOP` یا `RETURN` شناسایی شد. عملیات به سه نوع فضای ذخیرهسازی دادهها دسترسی دارند:
226
226
227
227
- این **پشته**، محفظهای که میتوان آنها را به بیرون فرستاد و مقادیر را به آن منتقل کرد
228
228
-**Memory**، یک آرایه بایت بی نهایت قابل گسترش است
229
229
-**ذخیره** طولانی مدت قرارداد، یک ذخیره از کلید/ارزش. برخلاف پشته و حافظه که پس از پایان محاسبات بازنشانی میشوند، ذخیرهسازی برای طولانی مدت باقی میماند.
230
230
231
231
این کد همچنین میتواند به مقدار، فرستنده و دادههای پیام دریافتی و همچنین دادههای هدر بلوک دسترسی داشته باشد و کد همچنین میتواند یک آرایه بایتی از دادهها را به عنوان خروجی برگرداند.
232
232
233
-
مدل اجرای رسمی کد EVM به طرز شگفت آوری ساده است. در حالی که ماشین مجازی اتریوم در حال اجرا است، حالت محاسباتی کامل آن را میتوان با چند `(block_state، تراکنش، پیام، کد، حافظه، پشته، کامپیوتر، گس)` تعریف کرد، جایی که `block_state</ 0> حالت جهانی است که شامل تمام حساب ها و شامل موجودی ها و ذخیرهسازی است. در شروع هر دور اجرا، دستورالعمل فعلی با گرفتن <code>pc`امین بایت `کد` (یا 0 اگر `pc >= len(code)`)، و هر دستورالعمل از نظر نحوه تأثیرگذاری بر تاپل، تعریف خاص خود را دارد. برای مثال، `ADD` دو مورد را از پشته بیرون میآورد و مجموع آنها را فشار میدهد، `گس` را به 1 کاهش میدهد و `pc` را به 1 افزایش میدهد و ` SSTORE` دو مورد بالا را از پشته بیرون میآورد و مورد دوم را در فهرستی که مورد اول مشخص کرده است در محل ذخیره قرارداد قرار میدهد. اگرچه راههای زیادی برای بهینهسازی اجرای ماشین مجازی اتریوم از طریق کامپایلسازی بهموقع وجود دارد، پیادهسازی اولیه اتریوم را میتوان در چند صد خط کد انجام داد.
233
+
مدل اجرای رسمی کد EVM به طرز شگفت آوری ساده است. در حالی که ماشین مجازی اتریوم در حال اجرا است، حالت محاسباتی کامل آن را میتوان با چند `(block_state، تراکنش، پیام، کد، حافظه، پشته، کامپیوتر، گس)` تعریف کرد، جایی که `block_state` حالت جهانی است که شامل تمام حساب ها و شامل موجودی ها و ذخیرهسازی است. در شروع هر دور اجرا، دستورالعمل فعلی با گرفتن `pc`امین بایت `کد` (یا 0 اگر `pc >= len(code)`)، و هر دستورالعمل از نظر نحوه تأثیرگذاری بر تاپل، تعریف خاص خود را دارد. برای مثال، `ADD` دو مورد را از پشته بیرون میآورد و مجموع آنها را فشار میدهد، `گس` را به 1 کاهش میدهد و `pc` را به 1 افزایش میدهد و ` SSTORE` دو مورد بالا را از پشته بیرون میآورد و مورد دوم را در فهرستی که مورد اول مشخص کرده است در محل ذخیره قرارداد قرار میدهد. اگرچه راههای زیادی برای بهینهسازی اجرای ماشین مجازی اتریوم از طریق کامپایلسازی بهموقع وجود دارد، پیادهسازی اولیه اتریوم را میتوان در چند صد خط کد انجام داد.
0 commit comments