بلاکچین اتریوم به عنوان لایه بنیادی برای اکوسیستم گستردهای از اپلیکیشنهای غیرمتمرکز (dApps)، قراردادهای هوشمند و داراییهای دیجیتال عمل میکند. در قلب اتصال این دفتر کل توزیعشده و پیچیده با دنیای خارج، API اتریوم (رابط برنامهنویسی اپلیکیشن) قرار دارد. API اتریوم فراتر از یک مشخصه فنی، به عنوان یک مفسر حیاتی عمل میکند که دستورالعملهای قابل خواندن برای انسان را از اپلیکیشنها به فرمانهایی تبدیل میکند که شبکه اتریوم قادر به درک و اجرای آنهاست و بالعکس. بدون این رابط استاندارد، تعامل با بلاکچین وظیفهای به مراتب دشوارتر میبود که پذیرش گسترده و توسعه فناوریهای غیرمتمرکز را محدود میکرد.
پیش از پرداختن اختصاصی به API اتریوم، درک مفهوم کلی API مفید است. یک API در اصل مجموعهای از تعاریف و پروتکلهاست که به نرمافزارهای مختلف اجازه میدهد با یکدیگر ارتباط برقرار کنند. آن را مانند منوی یک رستوران در نظر بگیرید:
در دنیای دیجیتال، APIها روشی را استاندارد میکنند که یک برنامه میتواند از برنامهای دیگر خدماتی را درخواست کند، خواه این خدمات بازیابی داده، اجرای فرمانها یا راهاندازی اقدامات خاص باشد. آنها پیچیدگیهای زیربنایی را انتزاع میکنند و به توسعهدهندگان اجازه میدهند اپلیکیشنهای پیشرفتهای بسازند بدون اینکه نیاز باشد جزئیات داخلی هر سیستمی که با آن ادغام میشوند را درک کنند.
API اتریوم عمدتاً از استاندارد JSON-RPC استفاده میکند. JSON-RPC (JavaScript Object Notation - Remote Procedure Call) یک پروتکل فراخوانی رویه از راه دور (RPC) سبک و بدون وضعیت (stateless) است. این بدان معناست که به یک کلاینت (یک اپلیکیشن یا ابزار توسعهدهنده) اجازه میدهد رویهای (یک تابع یا متد) را روی یک سرور از راه دور (یک نود اتریوم) اجرا کند.
در اینجا دلایلی که JSON-RPC را برای API اتریوم مناسب میکند آورده شده است:
وقتی یک اپلیکیشن میخواهد با اتریوم تعامل داشته باشد، یک درخواست JSON-RPC میسازد. این درخواست معمولاً شامل موارد زیر است:
jsonrpc: نسخه پروتکل JSON-RPC (مثلاً "2.0").method: تابع خاص API اتریوم که باید فراخوانی شود (مثلاً eth_getBalance یا eth_sendRawTransaction).params: آرایهای از پارامترهای مورد نیاز متد (مثلاً یک آدرس اتریوم یا هش تراکنش).id: یک شناسه درخواست که سرور در پاسخ خود میگنجاند و برای تطبیق درخواستها با پاسخها، به ویژه زمانی که چندین درخواست به طور همزمان ارسال میشوند، مفید است.نود اتریوم سپس این درخواست را پردازش کرده و یک پاسخ JSON-RPC برمیگرداند که شامل result عملیات یا یک شیء error در صورت بروز مشکل است.
API اتریوم مجموعه جامعی از متدها را ارائه میدهد که تقریباً تمام تعاملات متصور با بلاکچین را پوشش میدهد. این متدها را میتوان به طور کلی به دستههای خواندن داده، ارسال تراکنش و تعامل با قراردادهای هوشمند تقسیم کرد.
شاید رایجترین کاربرد API اتریوم، بازیابی اطلاعات از بلاکچین باشد. این کار به دیاپها، کیف پولها و اکسپلوررها اجازه میدهد تا دادههای بهروز را بدون تغییر در وضعیت شبکه نمایش دهند. این عملیاتهای فقط-خواندنی (read-only) اغلب به عنوان "فراخوانی" (calls) یا "پرسوجو" (queries) شناخته میشوند و نیازی به پرداخت کارمزد گاز ندارند، زیرا شامل پردازش تراکنش توسط ماینرها نمیشوند.
متدهای رایج برای خواندن دادهها عبارتند از:
eth_getBalance(address, blockParameter): موجودی حساب را در یک آدرس خاص برمیگرداند. blockParameter میتواند شماره بلاک (مثلاً "0x5b3") یا یک برچسب رشتهای مانند "latest" (آخرین بلاک استخراج شده)، "earliest" (بلاک جنسیس) یا "pending" (وضعیت فعلی تراکنشهای در انتظار استخراج) باشد.
eth_getTransactionCount(address, blockParameter): تعداد تراکنشهای ارسال شده از یک آدرس را برمیگرداند که برای مدیریت نانس (nonce) هنگام ارسال تراکنشهای جدید حیاتی است.eth_getBlockByNumber(blockNumber, fullTransactionObjects) / eth_getBlockByHash(blockHash, fullTransactionObjects): اطلاعات کامل یک بلاک شامل هش، هش والد، ماینر، برچسب زمانی و لیستی از تراکنشهای موجود در آن را بازیابی میکند.eth_getTransactionByHash(transactionHash): جزئیات یک تراکنش خاص را با داشتن هش آن برمیگرداند.eth_call(transactionObject, blockParameter): یک فراخوانی پیام جدید را بلافاصله بدون ایجاد تراکنش در بلاکچین اجرا میکند. این برای فراخوانی توابع view/pure در قراردادهای هوشمند یا شبیهسازی نتیجه یک تراکنش استفاده میشود. این کار هزینهای ندارد و وضعیت بلاکچین را تغییر نمیدهد.eth_getCode(address, blockParameter): کد کامپایل شده یک قرارداد هوشمند را در یک آدرس معین برمیگرداند.eth_getLogs(filterObject): لاگهای رویداد (event logs) منتشر شده توسط قراردادهای هوشمند را بازیابی میکند. این برای واکنش دیاپها به رویدادهای روی زنجیره، مانند انتقال توکن، حیاتی است.ارسال تراکنش روشی است که کاربران و دیاپها از طریق آن با بلاکچین اتریوم تعامل میکنند تا وضعیت آن را تغییر دهند. این شامل انتقال ETH، استقرار قراردادهای هوشمند یا فراخوانی توابعی از قراردادهای موجود است که وضعیت آنها را تغییر میدهد. این عملیاتها هزینه گاز دارند و باید توسط کلید خصوصی فرستنده امضا شوند.
eth_sendRawTransaction(signedTransactionData): این متد اصلی برای ارسال یک تراکنش امضا شده به شبکه اتریوم است.
eth_sendRawTransaction پاس داده میشود.eth_sendTransaction(transactionObject): اگرچه در برخی زمینهها (مانند API متامسک) موجود است، اما استفاده مستقیم از آن روی نودهای عمومی به دلیل مسائل امنیتی نادر است (زیرا نیاز به افشای کلید خصوصی در نود دارد).قراردادهای هوشمند توافقنامههایی هستند که به طور خودکار اجرا میشوند و شرایط آنها مستقیماً در کد نوشته شده است. API اتریوم برای استقرار و تعامل با این قراردادها ضروری است.
to خالی بوده و فیلد data حاوی بایتکد کامپایل شده قرارداد است.data آن حاوی نمایش کدگذاری شده فراخوانی تابع (ID متد و پارامترها) است.رابط باینری اپلیکیشن (ABI) به عنوان واسطی بین نامها و انواع توابع قابل خواندن برای انسان و بایتکد قابل درک برای ماشین عمل میکند. ABI مشخص میکند که چگونه فراخوانیهای تابع را برای بلاکچین کدگذاری و دادههای بازگشتی را رمزگشایی کنید.
فراتر از دادههای خاص بلاکچین، API اتریوم متدهایی برای بازیابی اطلاعات عمومی درباره خود شبکه نیز ارائه میدهد.
net_version(): ID شبکه را برمیگرداند (مثلاً برای شبکه اصلی اتریوم عدد 1 است).eth_chainId(): ID زنجیره شبکه فعلی را برمیگرداند که برای محافظت در برابر حملات بازپخش (replay protection) مهم است.eth_gasPrice(): میانگین قیمت فعلی گاز را بر حسب Wei برمیگرداند.eth_syncing(): اگر نود در حال همگامسازی باشد، وضعتی آن را برمیگرداند و در غیر این صورت مقدار false را برمیگرداند.توسعهدهندگان چندین راه برای تعامل با API اتریوم دارند که هر کدام مزایا و معایب خود را در زمینه راحتی، هزینه و کنترل دارند.
برای بسیاری از توسعهدهندگان، اتصال مستقیم به یک نود عمومی اتریوم به دلیل منابع مورد نیاز برای اجرای یک نود کامل (حافظه، پهنای باند، CPU) غیرعملی است. اینجاست که ارائهدهندگان نود وارد میشوند. این سرویسها شبکهای از نودهای اتریوم را نگهداری کرده و دسترسی API به آنها را معمولاً از طریق یک اندپوینت HTTP یا URL وبسوکت فراهم میکنند.
برای کسانی که اولویتشان تمرکززدایی، کنترل کامل یا نیازهای خاص (مانند ایندکس کردن کل زنجیره) است، اجرای نود شخصی ترجیح داده میشود.
کلاینتهای محبوب اتریوم شامل Geth (Go-Ethereum)، Nethermind و Erigon هستند.
اگرچه API اتریوم از JSON-RPC استفاده میکند، اما ساخت درخواستهای خام JSON میتواند خستهکننده باشد. کتابخانههای کلاینت این متدها را در قالب توابع برنامهنویسی کاربرپسند بستهبندی میکنند.
API اتریوم ستون فقرات تقریباً تمام اپلیکیشنهایی است که با بلاکچین اتریوم تعامل دارند.
دیاپها از API برای نمایش دادههای کاربر (مانند موجودی توکن)، اجرای توابع قرارداد هوشمند (مانند سواپ توکن یا وامدهی) و گوش دادن به رویدادهای بلاکچین برای بهروزرسانی رابط کاربری استفاده میکنند.
کیف پولهایی مانند MetaMask و صرافیهای غیرمتمرکز (DEX) مانند Uniswap برای واکشی موجودی، نمایش تاریخچه تراکنشها، تخمین هزینه گاز و ارسال تراکنشهای امضا شده به شدت به این API وابسته هستند.
سایتهایی مانند Etherscan از API برای نمایش جزئیات بلاکها، تراکنشها و اطلاعات آدرسها به شکلی قابل فهم برای کاربران استفاده میکنند.
درک ساختار درخواستها و پاسخهای JSON-RPC کلید تعامل موثر با API اتریوم است.
{
"jsonrpc": "2.0",
"method": "eth_getBalance",
"params": ["0xYourEthereumAddress", "latest"],
"id": 1
}
در اینجا method نام تابع، params آرایهای از ورودیها و id شناسه منحصربهفرد برای تطبیق پاسخ است.
اتریوم مقادیر عددی را به صورت اعداد صحیح بزرگ مدیریت میکند، اما در API آنها را به صورت رشتههای هگزادسیمال با پیشوند 0x منتقل میکند. برای تعامل با قراردادها، ABI نقش تعیینکنندهای دارد؛ این رابط مشخص میکند که چگونه آرگومانهای تابع را در یک رشته هگزادسیمال بستهبندی کرده و نتایج را دوباره به مقادیر معنادار (رشته، عدد، بولین) تبدیل کنید.
تعامل با API اتریوم، به ویژه در تراکنشهای مالی، مستلزم تمرکز شدید بر امنیت است.
اکوسیستم اتریوم مدام در حال پیشرفت است و قابلیتهای API آن نیز برای پاسخگویی به نیازهای جدید گسترش مییابد.
API اتریوم یک جزء ایستا نیست؛ این یک رابط پویا است که با نیازهای یک اکوسیستم در حال رشد سازگار میشود و به عنوان مجرای جداییناپذیر، سازندگان و کاربران را به قدرت بلاکچین متصل میکند.



