تعریف خطای قرارداد با استفاده از 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 حرکت کنید. سوروبانینگ مبارک!