نقطه ورود

ساخت وبلاگ

کد قرارداد به عنوان مجموعه ای از ورودی ها ساختار یافته است. اجرای یک ورودی ممکن است ذخیره سازی قرارداد را تغییر دهد و یا عملیات blockchain را ایجاد کند (انتقال TEZ به یک قرارداد یا حساب یا تماس با ورودی قرارداد دیگر).

ورود

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

ورود ٪انتقال(٪از جانب : نشانی, ٪به: یکرداز, میزان : خلوت)  /*. بدن*/ > 

بدنه ورودی از بخش های ارائه شده در زیر تشکیل شده است.

انتقال

انتقال یک ورودی است که وضعیت قرارداد را که به عنوان یک دستگاه دولتی مشخص شده است ، تغییر می دهد.

کلمه کلیدی Transition یک انتقال را اعلام می کند ، به دنبال آن شناسه ورودی و لیست پارامترها.

بدنه معامله از بخش های زیر ساخته شده است:

از

بخش از آن ، به دنبال یک مقدار دولتی ، وضعیت مورد نیاز قرارداد را برای انتقال از آن مشخص می کند. در صورت فراخوانی در حالی که قرارداد در حالت دیگری است ، با "invalid_state" شکست می خورد.

انتقال تایید کنید()  از جانب حمل شده /* . */ > 

به

بخش TO ، به دنبال یک مقدار دولتی ، دولت را به انتقال به آن مشخص می کند. به صورت اختیاری دنبال می شود:

  • چه موقع و یک عبارت بولی برای مشخص کردن شرایط نگهبان
  • با اثر برای مشخص کردن اثر (در ذخیره سازی و/یا عملیات)

به عنوان مثال ، ورود ورودی زیر از ارسال به پذیرفته شده به پذیرش:

انتقال تایید کنید()  از جانب حمل شده to پذیرفته شده > 

یک انتقال ممکن است تأثیر داشته باشد ، مانند مثال انتقال مانده قرارداد به آدرس فروشنده:

انتقال تایید کنید()  از جانب حمل شده to پذیرفته شده با تاثیر  انتقال تعادل to فروشنده > > 

انتقال به حالتهای مختلف با توجه به شرایط نگهبان امکان پذیر است. این انتقال به اولین وضعیتی که وضعیت نگهبان آن تأیید شده است ، انتقال می یابد.

به عنوان مثال ، انتقال زیر از حالت حمل و نقل به پذیرفته شده در هنگام موفقیت موفقیت ، و در غیر این صورت لغو می شود:

انتقال تایید کنید(موفقیت : بول)  از جانب حمل شده to پذیرفته شده چه زمانی  موفقیت > با تاثیر  انتقال تعادل to فروشنده > to لغو شد / * وقتی موفقیت نادرست است */ > 

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

به عنوان مثال انتقال زیر فقط توسط آدرس حمل و نقل فراخوانی می شود و مقدار پیام متغیر ذخیره سازی را تنظیم می کند:

انتقال تایید کنید(موفقیت : بول, مگس : رشته)  فراخواند حمل کننده از جانب حمل شده to پذیرفته شده چه زمانی  موفقیت > با تاثیر  انتقال تعادل to فروشنده > to لغو شد / * وقتی موفقیت نادرست است */ اثر   پیام := مگس > > 

گیرنده

گیرنده نوع ورودی است که به الگوی نمایش TZIP-4 اختصاص داده شده است: یک آرگومان می گیرد و یک مقدار را "باز می گرداند". مکانیسم بازگشت به صورت پاسخ به تماس با استدلال که استدلال آن مقدار برگشتی است ، اجرا می شود و توسط گیرنده خوانده می شود.

Syntax Getter آرگومان پاسخ به تماس را پنهان می کند و از کلمه کلیدی Retu برای مشخص کردن مقدار برای انتقال به پاسخ به تماس استفاده می کند.

به عنوان مثال ، موارد زیر یک نوار متغیر ذخیره سازی و GetBar Getter را که این مقدار را برمی گرداند ، اعلام می کند:

متغیر بار : خلوت = 0 متغیر مگس : رشته = ""  گیرنده نوار(s : رشته) : خلوت   مگس := s; برگشت (نوار + طول(s)) > 

توجه داشته باشید که نوع مقدار برگشتی (در اینجا NAT) پس از لیست آرگومان ها (بعد از یک نیمه) مشخص شده است.

این قند نحوی برای کد معادل زیر است:

متغیر بار : خلوت = 0 متغیر مگس : رشته = ""  ورود نوار(s : رشته, بازپرداخت : قراردادخلوت>)   مگس := s; انتقال منتقل شده برای ورود بازپرداخت(نوار + طول(s)) > 

(برای اطلاعات بیشتر به دستورالعمل انتقال مراجعه کنید)

موارد زیر نشان می دهد که چگونه GetBar Getter نامیده می شود:

متغیر فحش : خلوت = 0  ورود سد(v : خلوت)   فحش := v >  ورود گله(atter_addr : نشانی)  انتقال 0tz to atter_addr زنگ زدن نوارقراردادخلوت>>(خود.سد) > 

ورودی GetFoo با ورود به قرارداد GetBar در آدرس CA تماس می گیرد.

استاندارد TZIP-4 به طور رسمی از بین می رود زیرا با ویژگی View جایگزین می شود (موجود از پروتکل ITHACA).

فواید ویژگی View این است که نیازی به تقسیم جریان اجرای در دو ورودی ندارد (مانند مثال GetFoo و SetFoo در بالا). از این رو ، هر زمان که ذخیره سازی قرارداد گیرنده اصلاح نشود ، یک دیدگاه ترجیح داده می شود.

بخش

بدنه ورودی ("ورود" ، "انتقال" ، "گیرنده") از بخش های زیر ساخته شده است. هر بخش اختیاری است و به ترتیب ارائه زیر ظاهر می شود.

بدون انتقال

اگر مقدار منتقل شده با 0Tz متفاوت باشد با "no_transfer" شکست می خورد

یک پیام خطای خاص را می توان با کلمه کلیدی در غیر این صورت مشخص کرد:

ورود اعطا کردن()   no انتقال در غیر این صورت "no_fund_expected" /* . */ > 

توسط

اگر مقدار منبع با آدرس استدلال متفاوت باشد ، با "invalid_source" شکست می خورد.

به عنوان مثال ، نقطه ورود SET_OWNER_CANDIDATE در صورت عدم تماس توسط آدرس مالک ، شکست می خورد:

ورود set_owner_candidate(oc : نشانی)  توسط صاحب /*. بخش های دیگر*/ > 

برای اطلاعات بیشتر به بخش زیر مراجعه کنید.

یک پیام خطای خاص را می توان با کلمه کلیدی در غیر این صورت مشخص کرد.

فراخواند

اگر مقدار تماس گیرنده با آدرس آرگومان متفاوت باشد ، با "invalid_caller" شکست می خورد.

به عنوان مثال ، نقطه ورود SET_OWNER_CANDIDATE در صورت عدم تماس توسط آدرس مالک ، شکست می خورد:

ورود set_owner_candidate(oc : نشانی)  فراخواند صاحب /*. بخش های دیگر*/ > 

استدلال بخش همچنین ممکن است دارایی باشد که توسط یک قسمت تایپ شده آدرس مشخص شده است.

(این همچنین در مورد منبع براساس بخش بالا صدق می کند)

ورود set_owner_candidate(oc : نشانی)  فراخواند صاحب or مدیر در غیر این صورت "انتظار می رود_هه_ور_ادمین" /*. بخش های دیگر*/ > 

اگر تماس گیرنده رأی دهنده نباشد ، ورود به رأی زیر انجام نمی شود (یعنی اگر رای دهنده باشد. تماس گیرنده (تماس گیرنده) به دروغ ارزیابی می کند):

دارایی رأی دهنده   id : نشانی;  NB_VOTES : خلوت = 0; >  ورود رای(پیشنهاد : خلوت)  فراخواند رأی دهنده /*. بخش های دیگر*/ > 

حالت است

اگر ارزش دولت با حالت استدلال متفاوت باشد ، با "invalid_state" شکست می خورد.

به عنوان مثال ، در صورت عدم لغو وضعیت قرارداد ، نقطه ورود رستگاری در زیر انجام نمی شود:

ورود از گرو در اوردن()  حالت است لغو شد /*. بخش های دیگر*/ > 

یک پیام خطای خاص را می توان با کلمه کلیدی در غیر این صورت مشخص کرد.

ثابت

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

ثابت توسط یک شناسه و به دنبال آن کلمه کلیدی و ارزش است. اعلامیه ها توسط جدا می شوند. بشر

ورود مصرف کردن(داده ها: بایت)  فراخواند مصرف كننده ثابت   hashed_data is بلیک 2(داده ها);  ارزش is get_value(hashed_data); > /* . */ > 

hashed_data و ارزش اکنون در بخش های زیر اعلام و در دسترس هستند (نیاز ، اثر ،.). به عنوان ثابت ، ارزش آنها قابل تغییر نیست.

می توان مقداری مقدار یک گزینه را استخراج کرد و در صورت عدم موفقیت شکست خورد.

به عنوان مثال ، بگویید عملکرد get_value گزینه ای از int را برمی گرداند. موارد زیر یک مقدار نامگذاری شده ثابت و Typed Int را اعلام می کند ، و اگر get_value هیچ یک را برگرداند ، با "not_found" شکست می خورد:

ورود مصرف کردن(داده ها: بایت)  فراخواند مصرف كننده ثابت   hashed_data is بلیک 2(داده ها);  ارزش ?is get_value(hashed_data) : "پیدا نشد"; > /* . */ > 

لازم بودن

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

به عنوان مثال ، نقطه ورود پرداخت با:

  • (جفت "r1" "invalid_condition") هنگام انتقال به اندازه کافی زیاد نیست
  • "Payment_period_is_over" وقتی اکنون فراتر از تاریخ مهلت است
ورود پرداخت()  نیاز   r1: منتقل شده >میزان;  r2: اکنون  در غیر این صورت "پرداخت_پریود_یز_ور" > /*. بخش های دیگر*/ > 

اگر

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

به عنوان مثال ، کد زیر معادل کد در بخش فوق است:

ورود پرداخت()  اگر   f1: منتقل شده ;  f2: اکنون >= مهلت با "پرداخت_پریود_یز_ور" > /*. بخش های دیگر*/ > 

اثر

این بخش شامل کد (لیستی از دستورالعمل ها) برای اصلاح ذخیره قرارداد و تولید عملیات است.

به عنوان مثال ، نقطه ورود به زیر متغیر ذخیره سازی LECEND_CANDIDATE را تنظیم می کند:

متغیر مالک_ : گزینهنشانی> = هیچ یک  ورود set_owner_candidate(oc : نشانی)  فراخواند صاحب اثر   مالک_ := مقداری(oc) > > 

اگر بخش اثر تنها بخش در بدنه نقطه ورودی باشد ، ممکن است کلمه کلیدی اثر حذف شود و کد به طور مستقیم در براکت های بالا قرار گیرد. به عنوان مثال ورودی فوق ممکن است به صورت:

ورود set_owner_candidate(oc : نشانی)  if تماس گیرنده <>صاحب سپس شکست("Invalid_caller");  مالک_ := مقداری(oc) > 
پلتفرم معاملاتی فارکس...
ما را در سایت پلتفرم معاملاتی فارکس دنبال می کنید

برچسب : نویسنده : مرجان محتشم بازدید : <-PostHit-> تاريخ : جمعه 6 مرداد 1402 ساعت: 20:11