সেমান্টিক কার্নেল পেমেন্ট ইন্টিগ্রেশন।
কোনও Semantic Kernel প্যাকেজের প্রয়োজন নেই। বাস্তব blockchain0x ক্লায়েন্টকে একটি KernelFunction (Python বা Java) এ মোড়ান, অথবা একটি C# KernelFunction থেকে REST API কল করুন। যেভাবেই হোক এজেন্ট USDC কে Base-এ সরায়।
কোনো সেমান্টিক কার্নেল প্যাকেজ নেই। পাইথনে আপনি প্রকৃত blockchain0x ক্লায়েন্টকে @kernel_function দিয়ে সাজানো একটি পদ্ধতিতে মোড়ান; C#-এ, যেখানে কোনো .NET SDK চালু হয়নি, একটি [KernelFunction] সরাসরি REST API কল করে। এটি আপনার কার্নেলে নিবন্ধন করুন, FunctionChoiceBehavior কে অটো সেট করুন, এবং এজেন্ট Base-এ USDC স্থানান্তর করতে পারে। চালানো মূল SDK গুলি হল Node, Python, Ruby, Go, এবং JVM।
এটি একমাত্র এন্টারপ্রাইজ-গ্রেড .NET এজেন্ট ফ্রেমওয়ার্ক।
যদি আপনার স্ট্যাক মাইক্রোসফট-আকৃতির (Azure, .NET, SQL Server, Teams, Copilot Studio) হয়, তবে Semantic Kernel প্রায় নিশ্চিতভাবেই সঠিক এজেন্ট ফ্রেমওয়ার্ক। এটি মাইক্রোসফট দ্বারা তৈরি, এটি Azure OpenAI, AKS, এবং Entra এর সাথে সংহত করে, এবং এটি .NET, Python, এবং Java তে প্রথম শ্রেণীর সমর্থন রয়েছে এমনভাবে যা অন্য কোন ফ্রেমওয়ার্ক মেলে না। এবং এটি ইতিমধ্যেই আপনাকে যা প্রয়োজন তা দেয়: একটি KernelFunction হল একটি পদ্ধতি, তাই পেমেন্ট সংযুক্ত করা হল একটি পদ্ধতি যা আপনি লেখেন, একটি প্যাকেজ নয় যা আপনি অপেক্ষা করেন।
এটাই কারণ এখানে ইনস্টল করার জন্য কোনো সেমান্টিক কার্নেল অ্যাডাপ্টার নেই। পাইথন এবং জাভাতে আপনি প্রকৃত blockchain0x SDK-কে একটি KernelFunction-এ মোড়ান; C#-এ, যেখানে কোনো .NET SDK এখনও চালু হয়নি, KernelFunction সরাসরি HttpClient-এর সাথে REST API-কে কল করে। আপনি অভিব্যক্তিমূলক আরগোনমিক্স বজায় রাখেন - সাজানো পদ্ধতি, অ্যাসিঙ্ক, অ্যাট্রিবিউট-ভিত্তিক প্যারামিটার যাচাইকরণ - এবং ট্র্যাক করার জন্য কোনো অ্যাডাপ্টার সংস্করণ নেই। আজকের বিদ্যমান মূল SDK গুলি হল Node, Python, Ruby, Go, এবং JVM।
Semantic Kernel ইনস্টল করুন এবং, পাইথনে, মূল SDK।
কোনও blockchain0x Semantic Kernel প্যাকেজ যোগ করার জন্য নেই। পাইথন Semantic Kernel এবং প্রকৃত blockchain0x SDK ইনস্টল করে; C# Microsoft.SemanticKernel ইনস্টল করে এবং বিল্ট-ইন HttpClient দিয়ে REST API কল করে। জাভা Semantic Kernel for Java এবং com.blockchain0x:sdk-jvm SDK ব্যবহার করে।
pip install semantic-kernel blockchain0xdotnet add package Microsoft.SemanticKernelBLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet BLOCKCHAIN0X_API_KEY=sk_test_... # same key, the name the .NET REST example reads OPENAI_API_KEY=sk-...
BLOCKCHAIN0X_API_KEY (Python ক্লায়েন্ট এটি পড়ে) আপনার ড্যাশবোর্ড থেকে একটি sk_test_ testnet বা sk_live_ mainnet কী; C# REST উদাহরণ একই মান BLOCKCHAIN0X_API_KEY থেকে পড়ে। OPENAI_API_KEY (অথবা Azure-হোস্টেড মডেলের জন্য AZURE_OPENAI_*) আপনার LLM কী। ওয়েবহুক হ্যান্ডলার অতিরিক্তভাবে BLOCKCHAIN0X_WEBHOOK_SECRET প্রয়োজন।
একটি ওয়ালেট KernelFunction, Python এবং C# এ।
Python বাস্তব blockchain0x ক্লায়েন্টকে @kernel_function দিয়ে সাজানো একটি পদ্ধতিতে মোড়ায়। C#, যেখানে কোন .NET SDK বিতরণ হয় না, একটি [KernelFunction] প্রকাশ করে যা সরাসরি HttpClient এর সাথে POST /v1/payments কল করে। উভয়ই কের্নেলে Wallet.send_usdc হিসাবে নিবন্ধিত হয়; শুধুমাত্র চারপাশের অনুষ্ঠান ভিন্ন।
from semantic_kernel import Kernel from semantic_kernel.functions import kernel_function from blockchain0x import Client blockchain0x = Client() # reads BLOCKCHAIN0X_API_KEY from the environment class WalletPlugin: @kernel_function(description="Send a USDC payment from an agent wallet.") def send_usdc(self, agent_id: str, to: str, amount_wei: str) -> str: # amount_wei is USDC base units (6 decimals): "10000" = 0.01 USDC return str( blockchain0x.payments.create(body={"agentId": agent_id, "to": to, "amountWei": amount_wei}) ) kernel = Kernel() kernel.add_plugin(WalletPlugin(), plugin_name="Wallet") # Add your chat service, then let the model call Wallet.send_usdc.
using System.ComponentModel;
using System.Net.Http.Json;
using Microsoft.SemanticKernel;
// There is no .NET SDK, so a C# KernelFunction calls the REST API directly.
public class WalletPlugin
{
private static readonly HttpClient Http = new()
{
BaseAddress = new Uri("https://api.blockchain0x.com"),
};
[KernelFunction, Description("Send a USDC payment from an agent wallet. amountWei is USDC base units (6 decimals).")]
public async Task<string> SendUsdc(string agentId, string to, string amountWei)
{
Http.DefaultRequestHeaders.Authorization =
new("Bearer", Environment.GetEnvironmentVariable("BLOCKCHAIN0X_API_KEY"));
var res = await Http.PostAsJsonAsync("/v1/payments", new { agentId, to, amountWei });
return await res.Content.ReadAsStringAsync();
}
}
// builder.Plugins.AddFromType<WalletPlugin>("Wallet");Register the function on the kernel, set FunctionChoiceBehavior to Auto, and when the user's message implies a payment the model calls Wallet.send_usdc with the agent id, recipient, and amount. amountWei is base units, so 0.01 USDC is "10000". The Python path returns the SDK result; the C# path returns the REST response body.
পেমেন্ট ইভেন্ট গ্রহণের জন্য ASP.NET Core মিনিমাল API।
যখন একটি পেমেন্ট সেটেল হয়, Blockchain0x আপনার ওয়েবহুক URL-এ একটি স্বাক্ষরিত ইভেন্ট POST করে। কোন শিপ করা .NET যাচাইকরণকারী নেই, তাই হ্যান্ডলারটি নথিভুক্ত HMAC-এর বিরুদ্ধে হাতে যাচাই করে - যা একটি সহায়ক করবে। নিচে .NET উদাহরণ; পাইথন এবং জাভা তাদের নিজস্ব HMAC লাইব্রেরির সাথে একইভাবে যাচাই করে।
using System.Security.Cryptography;
using System.Text;
using Microsoft.AspNetCore.Builder;
var app = WebApplication.CreateBuilder(args).Build();
var secret = Environment.GetEnvironmentVariable("BLOCKCHAIN0X_WEBHOOK_SECRET")!;
app.MapPost("/webhooks/payment", async (HttpRequest req) =>
{
using var reader = new StreamReader(req.Body);
var raw = await reader.ReadToEndAsync(); // RAW body - verify before parsing
var sig = req.Headers["X-Blockchain0x-Signature"].ToString();
var ts = req.Headers["X-Blockchain0x-Timestamp"].ToString();
var parts = sig.Split(',').Select(p => p.Split('=', 2))
.Where(p => p.Length == 2).ToDictionary(p => p[0], p => p[1]);
var t = parts.GetValueOrDefault("t", ts);
var v1 = parts.GetValueOrDefault("v1", sig);
var want = Convert.ToHexString(new HMACSHA256(Encoding.UTF8.GetBytes(secret))
.ComputeHash(Encoding.UTF8.GetBytes($"{t}.{raw}"))).ToLowerInvariant();
var fresh = Math.Abs(DateTimeOffset.UtcNow.ToUnixTimeSeconds() - long.Parse(t)) <= 300;
if (!fresh || !CryptographicOperations.FixedTimeEquals(
Encoding.UTF8.GetBytes(want), Encoding.UTF8.GetBytes(v1)))
return Results.Unauthorized();
if (req.Headers["X-Blockchain0x-Event-Type"] == "payment.received")
await RunFollowupAsync(); // USDC landed - do the next step
return Results.Ok();
});
app.Run();অ্যালগরিদমটি t.rawBody স্ট্রিংয়ের উপর HMAC-SHA256, একটি 300-সেকেন্ডের পুনরায় প্লে উইন্ডো, এবং একটি ধ্রুবক-সময়ের তুলনা। সিগনেচার অক্ষুণ্ণ রাখতে StreamReader-এর মাধ্যমে কাঁচা শরীরটি পড়ুন; ডেসিরিয়ালাইজ করবেন না তারপর পুনরায় সিরিয়ালাইজ করুন। চালানো ইভেন্টগুলি হল payment.received, payment.sent, wallet.deployed, এবং webhook.test। উৎপাদনে ওয়েবহুক প্রায়শই একটি পৃথক ASP.NET Core পরিষেবার মতো চলে যা এজেন্টের সাথে একটি ডেটাবেস শেয়ার করে যাতে উভয়ই সমন্বয় করতে পারে।
SDK এবং REST পৃষ্ঠ খোলা। এগুলি পড়ুন।
এখন ক্লোন করার জন্য কোন Semantic Kernel স্টার্টার প্যাকেজ নেই - উপরের রেসিপিগুলি ইন্টিগ্রেশন। blockchain0x মূল SDK (Node, Python, Ruby, Go) GitHub এ ওপেন সোর্স, এবং তাদের পদ্ধতি পৃষ্ঠ এবং REST রুটগুলি C# উদাহরণ কলগুলি ডকসে নথিভুক্ত।
docs.blockchain0x.com/docs/overviewSDK পদ্ধতি পৃষ্ঠ এবং REST রুটগুলি ডকস এ নথিভুক্ত। Base Sepolia এর বিরুদ্ধে একটি sk_test_ কী দিয়ে শুরু করুন, তারপর যখন KernelFunction আপনার প্রত্যাশা অনুযায়ী কাজ করে তখন sk_live_ এ স্যুইচ করুন।
পাঁচটি Semantic Kernel-নির্দিষ্ট ফাঁদ এড়ানো উচিত।
সেমান্টিক কার্নেলের প্লাগইন মডেল পরিষ্কার কিন্তু এতে ক্রস-ভাষা এবং আচরণ-ডিফল্ট সমস্যা রয়েছে। এগুলি আগে থেকেই জানা থাকলে সময় বাঁচায়।
কোনো ভাষায় সেমান্টিক কার্নেল প্যাকেজ নেই
কোনো NuGet, PyPI, বা Maven অ্যাডাপ্টার নেই। চালানো মূল SDK গুলি হল Node, Python, Ruby, Go, এবং JVM - .NET নয়। তাই একটি পাইথন কার্নেল blockchain0x পাইথন ক্লায়েন্টকে @kernel_function-এ মোড়ায়, একটি জাভা কার্নেল com.blockchain0x:sdk-jvm SDK ব্যবহার করে, এবং একটি C# কার্নেল সরাসরি একটি KernelFunction (উপরের মতো) থেকে REST API কল করে। তিনটি সবই কয়েকটি লাইন।
FunctionChoiceBehavior স্বয়ংক্রিয় হতে হবে
সেমান্টিক কার্নেল শুধুমাত্র তখন প্লাগইন ফাংশনগুলি আহ্বান করে যখন FunctionChoiceBehavior প্রম্পট-নির্বাহী সেটিংসে অটোতে সেট করা হয়। ডিফল্ট হল কিছুই নয়, তাই মডেলটি কখনও আপনার ওয়ালেট ফাংশনকে কল করে না যতই স্পষ্টভাবে ব্যবহারকারী জিজ্ঞাসা করে। যদি এজেন্টটি সম্পূর্ণরূপে ফাংশনটি উপেক্ষা করে, তাহলে প্রথমে এটি পরীক্ষা করুন।
পরিমাণগুলি USDC বেস ইউনিট, স্ট্রিং হিসাবে
The payments call takes amountWei: a string of USDC base units (6 decimals), so 0.01 USDC is "10000" and 5 USDC is "5000000". Type the function argument as a string in any language. payments.create also does not retry by default and can answer 503 until the chain adapter is wired for your network - return a clear message rather than letting the agent loop.
এজেন্টগুলির মধ্যে প্লাগইনের পরিধি
শুধুমাত্র সেই এজেন্টের কর্ণেলে ওয়ালেট ফাংশন নিবন্ধন করুন যা খরচের কর্তৃত্ব ধারণ করা উচিত। প্লাগইনটি গ্লোবাল নয় - একটি এজেন্ট যার কর্ণেলে এটি নেই তা এটি কল করতে পারে না। একটি পর্যালোচক এজেন্টকে একটি কর্ণেল দিন যার মধ্যে ওয়ালেট ফাংশন নেই, অথবা প্রতি এজেন্টের জন্য অনুমোদিত ফাংশনগুলি সীমাবদ্ধ করুন, যাতে অর্থ একটি ভূমিকার সাথে থাকে।
কাঁচা শরীরের বিরুদ্ধে ওয়েবহুক যাচাই করুন
কাঁচা অনুরোধের শরীর পড়ুন এবং ডেসিরিয়ালাইজ করার আগে যাচাই করুন - HMAC সঠিক বাইটগুলি কভার করে, তাই একটি পার্স-তারপর-রিসিরিয়ালাইজ রাউন্ড ট্রিপ এটি ভেঙে দেয়। নিচের .NET হ্যান্ডলারটি নথিভুক্ত অ্যালগরিদমটি বাস্তবায়ন করে: HMAC-SHA256 t.rawBody এর উপর, 300 সেকেন্ডের উইন্ডো, এবং একটি ধ্রুবক-সময় তুলনা। পাইথন এবং জাভা তাদের নিজস্ব HMAC লাইব্রেরি দিয়ে একইভাবে যাচাই করে।