قرارداد¶

ساخت وبلاگ

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

قرارداد هوشمند TRON از زبان Solidity در (اتریوم) پشتیبانی می کند. در حال حاضر نسخه زبان Solidity 0. 4. 24 توصیه می شود~0. 4. 25. یک قرارداد هوشمند بنویسید، سپس قرارداد هوشمند بسازید و آن را در شبکه TRON مستقر کنید. هنگامی که قرارداد هوشمند راه اندازی می شود، عملکرد مربوطه به طور خودکار اجرا می شود.

ویژگی های قرارداد هوشمند¶

ماشین مجازی TRON بر اساس زبان جامد اتریوم است، همچنین دارای ویژگی های خاص ترون است.

1. قرارداد هوشمند

TRON VM با قرارداد هوشمند اتریوم سازگار است و از protobuf برای تعریف محتوای قرارداد استفاده می کند:

Original_address: آدرس سازنده قرارداد هوشمند contract_address: آدرس قرارداد هوشمند abi: اطلاعات api تمام عملکرد بایت کد قرارداد هوشمند: کد بایت قرارداد هوشمند call_value: TRX به قرارداد هوشمند منتقل می شود در حالی که با قرارداد تماس می گیریم consume_user_resource_percent: درصد مصرف منابع تنظیم شده توسطنام توسعه دهنده: نام قرارداد هوشمند origin_energy_limit: مصرف انرژی حد توسعه دهنده در یک تماس، باید بیشتر از 0 باشد. برای قراردادهای قدیمی، اگر این پارامتر تنظیم نشود، 0 تنظیم می شود، توسعه دهنده می تواند از updateEnergyLimit api برای به روز رسانی این پارامتر استفاده کند.(باید بزرگتر از 0 باشد)

از طریق دو نوع پیام grpc دیگر CreateSmartContract و TriggerSmartContract برای ایجاد و استفاده از قرارداد هوشمند.

2. استفاده از عملکرد قرارداد هوشمند¶

  • تابع ثابت و تابع ناپایدار

دو نوع تابع با توجه به اینکه آیا تغییری در خصوصیات روی زنجیره ایجاد می شود وجود دارد: تابع ثابت و تابع ناپایدار تابع ثابت از view/pure/constant برای تزئین استفاده می کند، نتیجه را بر روی گره ای که نامیده می شود برمی گرداند و نمی شود. پخش شده در قالب یک تراکنش، تابع Inconstant به صورت یک تراکنش پخش می شود در حالی که فراخوانی می شود، تابع داده های موجود در زنجیره را تغییر می دهد، مانند انتقال، تغییر مقدار متغیرهای داخلی قراردادها و غیره.

توجه: اگر از دستور create در داخل یک قرارداد (دستورالعمل CREATE) استفاده می کنید، حتی از view/pure/constant برای تزئین تابع قرارداد ایجاد شده به صورت پویا استفاده می کنید، این تابع همچنان به عنوان تابع ناپایدار در نظر گرفته می شود و در قالب تراکنش پرداخته می شود.

تماس های پیام می توانند توابع سایر قراردادها را فراخوانی کنند ، همچنین می تواند TRX را به حساب های قرارداد و بدون قرارداد منتقل کند. مانند Tron TronContract مشترک ، تماس های پیام دارای آغازگر ، گیرنده ، داده ، مبلغ انتقال ، هزینه ها و ویژگی های بازگشت هستند. هر تماس پیامی می تواند یک فرد جدید را به صورت بازگشتی ایجاد کند. قرارداد می تواند توزیع انرژی باقیمانده را در تماس پیام داخلی تعریف کند. اگر در تماس پیام داخلی با OutOfEnergyException همراه باشد ، نادرست باز می گردد ، اما خطایی نیست. در همین حال ، فقط گاز ارسال شده با تماس پیام داخلی مصرف می شود ، اگر انرژی در تماس مشخص نشده باشد. Value (انرژی) ، از تمام انرژی باقیمانده استفاده می شود.

نوع خاصی از تماس پیام ، تماس نماینده وجود دارد. تفاوت با تماس پیام مشترک ، کد آدرس هدف در چارچوب قراردادی است که شروع تماس ، msg. sender و msg. value را بدون تغییر باقی می مانند. این بدان معناست که یک قرارداد می تواند هنگام اجرا به صورت پویا کد را از آدرس دیگری بارگیری کند. ذخیره سازی ، آدرس فعلی و تعادل همه به قراردادی که تماس را آغاز می کند اشاره می کند ، فقط کد از آدرس خوانده می شود. این امر به استحکام امکان دستیابی به عملکرد "lib" را می دهد: کد قابل استفاده مجدد را می توان در ذخیره یک قرارداد برای اجرای کتابخانه ساختار داده پیچیده قرار داد.

این دستور با یک آدرس جدید یک قرارداد جدید ایجاد می کند. تنها تفاوت با اتریوم ، آدرس TRON تازه تولید شده است که از شناسه معامله ایجاد قرارداد هوشمند و هش از Nonce نامیده می شود. متفاوت از Ethereum ، دفاع از Nonce تعداد توالی طنزآمیز ایجاد تماس ریشه است. حتی بسیاری از تماس های دستورات ایجاد می کنند ، شماره قرارداد به ترتیب از 1. برای جزئیات بیشتر به کد منبع مراجعه کنید. توجه: متفاوت از ایجاد قرارداد توسط GRPC DeployContract ، قرارداد ایجاد شده توسط Creation Command قرارداد ABI را ذخیره نمی کند.

  • عملکرد داخلی و ویژگی عملکرد داخلی (از آنجا

توجه: عملکرد RIPEMD160 Ethereum توصیه نمی شود ، زیرا بازگشت Tron یک نتیجه هش است که بر اساس SHA256 TRON است ، نه یک Ethereum Ripemd160 دقیق.

3. آدرس قرارداد با استفاده از زبان استحکام

آدرس Ethereum VM 20 بایت است ، اما آدرس VM Tron 21 بایت است.

نیاز به تبدیل آدرس TRON در هنگام استفاده از استحکام (توصیه شده):

این با دستور زبان تبدیل از انواع دیگر تبدیل شده برای پرداختن به نوع در اتریوم مشابه است.

استحکام در صورت استفاده از آدرس 21 بایت ، کامپایلر خطایی را به وجود می آورد ، بنابراین باید از 20 آدرس بایت استفاده کنید ، مانند:

اما اگر از Wallet-Cli استفاده می کنید ، می توانید از 21 آدرس بایت مانند 0000000000000000000000000000000000000000000000000015458EF540ADE68DFE2F44E8FA733C استفاده کنید.

استحکام در صورت استفاده از آدرس 21 بایت ، کامپایلر خطایی را به وجود می آورد ، بنابراین باید از 20 آدرس بایت استفاده کنید ، مانند:

اگر می خواهید از آدرس TRON از نوع رشته استفاده کنید (TLLM21WTESPS4HKJBXGMH1L6POYMJETBHM) لطفاً به (2-4-7،2-4-8) مراجعه کنید.

4- ثابتهای ویژه با اتریوم متفاوت است

واحد پول

همانطور که استحکام از ETH پشتیبانی می کند ، Tron VM از TRX و SUN ، 1 TRX = 1000000 خورشید ، حساس به مورد ، پشتیبانی می کند ، فقط از مورد کمتری پشتیبانی می کند. Tron-Studio از TRX و Sun پشتیبانی می کند ، ریمیکس از TRX و Sun پشتیبانی نمی کند. توصیه می کنیم از Tron Studio به جای ریمیکس برای ایجاد قرارداد Smart Tron استفاده کنید.

مسدود کردن

  • block. blockhash (uint blocknumber) بازده (بایت 32): هش بلوک مشخص شده ، فقط می تواند برای آخرین 256 بلوک و بلوک فعلی حذف شود
  • block. coinbase (آدرس): آدرس supeode که بلوک فعلی را تولید می کند
  • Block. Difficulty (UINT): مشکل فعلی بلوک ، توصیه نمی شود ، 0 را تنظیم کنید
  • block. gaslimit (UINT): محدودیت گاز بلوک فعلی ، پشتیبانی نشده ، تنظیم 0
  • block. number (uint): شماره بلوک فعلی
  • Block. Timestamp (UINT): Timestamp بلوک فعلی
  • Gasleft () بازده (UINT256): گاز باقی مانده
  • msg. data (بایت): داده های تماس کامل
  • msg. gas (UINT): گاز باقی مانده - از 0. 4. 21 ، توصیه نمی شود ، جایگزین Gesleft ()
  • msg. sender (آدرس): ارسال کننده پیام (تماس فعلی)
  • msg. sig (Bytes4): 4 بایت اول داده های تماس (شناسه عملکرد)
  • msg. value (uint): مقدار خورشید با پیام ارسال می شود
  • اکنون (UINT): Timestamp بلوک فعلی (Block. Timestamp)
  • tx. gasprice (UINT): قیمت گاز معامله ، توصیه نمی شود ، 0 را تنظیم کنید
  • tx. origin (آدرس): آغازگر معامله

هر دستور از قرارداد هوشمند در حین کار ، منبع سیستم را مصرف می کند ، ما از "انرژی" به عنوان واحد مصرف منبع استفاده می کنیم.

بازار فارکس...
ما را در سایت بازار فارکس دنبال می کنید

برچسب : نویسنده : زکریا هاشمی بازدید : <-PostHit-> تاريخ : دوشنبه 14 فروردين 1402 ساعت: 18:16