برنامه نویسی

تعریف خطای قرارداد با استفاده از Soroban Assembly Script SDK

سلام! در پست قبلی خود، نحوه استفاده از Soroban AssemblyScript SDK را برای ذخیره و بازیابی داده ها در یک قرارداد هوشمند ساده نشان داده ام، و اکنون با استفاده از Soroban Assembly Script SDK، کنترل کننده خطا را در آن قرارداد اضافه می کنیم.

ما نحوه تعریف و تولید خطا برای قرارداد هوشمند Soroban را با استفاده از AssemblyScript SDK بررسی خواهیم کرد، که به تماس گیرنده قرارداد اجازه می دهد تا خطا را درک کرده و مدیریت کند. این مثال نشان خواهد داد failWithErrorCode() تابع از context ماژول ارائه شده توسط as-soroban-sdk کتابخانه

کد قرارداد

کد قرارداد مشابه پست قبلی من با کد اضافی برای رسیدگی به خطا خواهد بود. بیایید وارد کد شویم:

import { RawVal, toU32, fromU32 } from "as-soroban-sdk/lib/value";
import * as ledger from "as-soroban-sdk/lib/ledger";
import * as context from "as-soroban-sdk/lib/context";
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این بخش یک ماژول اضافه شده است context مدول. این ماژول ها به ما قابلیتی برای تعریف و رسیدگی به خطا می دهند.

enum ERR_CODES {
  MAX_REACHED = 1
};

export function increment(): RawVal {

  let data = "COUNTER";
  var counter = 0;
  var max = 5;

  if (ledger.hasDataFor(data)) {
    let dataObj = ledger.getDataFor(data);
    counter = toU32(dataObj);
  }

  counter ++;

  if(counter > max) {
    context.failWithErrorCode(ERR_CODES.MAX_REACHED);
  }
  ledger.putDataFor(data, fromU32(counter));
  return ledger.getDataFor(data);
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کد یک را تعریف می کند ERR_CODES enum برای نمایش کدهای خطای احتمالی. یک کد خطا دارد: MAX_REACHED، نشان می دهد که شمارنده به حداکثر مقدار مجاز خود رسیده است و max متغیر حداکثر مقدار مجاز است. increment عملکرد مشابه قرارداد قبلی کار می کند، داده های شمارنده را در فضای ذخیره بررسی می کند، آن را افزایش می دهد و بررسی می کند که آیا تعداد جدید بیشتر از حداکثر مجاز است (تنظیم به 5). در این صورت، تراکنش با شکست مواجه می شود و با استفاده از کد خطا، کد خطا را برمی گرداند context.failWithErrorCode تابع. در غیر این صورت، آن را به روز می کند COUNTER داده های موجود در دفتر با مقدار شمارش جدید به a تبدیل شده است RawVal با fromU32. مقدار نهایی شمارش را از دفتر کل برمی‌گرداند.

بعد، ایجاد کنید contract.json فایل در دایرکتوری پروژه شما، این فایل حاوی ابرداده برای قرارداد است.

{
    "name": "Store and Retrieve Data Contract (Error Handling)",
    "version": "0.1.0",
    "description": "example",
    "host_functions_version": 29,
    "functions": [
        {
            "name" : "increment",
            "arguments": [],
            "returns" : "u32"
        }
    ]
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

قبل از تدوین قرارداد، باید آن را ویرایش کنیم asconfig.json فایل پروژه شما محتوای آن را با موارد زیر جایگزین کنید:

{
  "extends": "as-soroban-sdk/sdkasconfig",
  "targets": {
    "release": {
      "outFile": "build/release.wasm",
      "textFile": "build/release.wat"
    },
    "debug": {
      "outFile": "build/debug.wasm",
      "textFile": "build/debug.wat"
    }
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این asconfig.json فایل توسط کامپایلر AssemblyScript (asc) برای تعریف پیکربندی پروژه شما استفاده می شود.

تدوین قرارداد

ابتدا باید آن را در WebAssembly کامپایل کنید. برای این کار از دستور زیر استفاده می کنید:

npx asc assembly/index.ts --target release
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون باید دو فایل جدید را در build/directory مشاهده کنید: release.wasm و release.wat.

اجرای قرارداد در Sandbox

بیایید قرارداد را اجرا کنیم تا ببینیم کار می کند یا خیر، ما قرار است قرارداد را با استفاده از آن اجرا کنیم soroban-cli در جعبه شنی با استفاده از دستور زیر:

soroban contract invoke --wasm build/release.wasm --id 1 --fn increment
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما باید خروجی بگیرید:

1
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آن را چند بار اجرا کنید و در اجرای ششم این خروجی را دریافت خواهید کرد:

error: HostError
Value: Status(ContractError(1))
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خطا

بسته شدن

این مثال نحوه تعریف و مدیریت خطا در قرارداد هوشمند soroban را با استفاده از Soroban AssemblyScript SDK نشان می‌دهد. با دانستن کد خطای دقیق، تماس گیرنده قرارداد متوجه می شود که چه مشکلی در قرارداد یا فراخوانی وجود دارد. با استفاده از این پایه، می توانید به سمت ساخت قراردادهای هوشمند پیشرفته تر و غنی تر روی پلت فرم Soroban حرکت کنید. سوروبانینگ مبارک!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا