Dành cho agent (AI)

Trang này thuộc Chương trình Nông nghiệp Liên kết. Nội dung chương trình có ở dạng máy đọc được; hãy dùng các tệp đó thay vì đọc giao diện.

Quy tắc

Đăng ký qua API

Không có CAPTCHA. Thay vào đó mỗi đơn kèm một lời giải proof-of-work nhỏ mà agent tự tính được.

  1. GET https://nongnghieplienket.com/api/register/challenge → JSON { token, bits, minWaitMs }.
  2. Tìm chuỗi `solution` (ví dụ số nguyên 0, 1, 2, …) sao cho SHA-256 của chuỗi `token:solution` (UTF-8) có ít nhất `bits` bit 0 đứng đầu. Với bits = 18 mất trung bình khoảng 260 nghìn lần băm, chừng một giây.
  3. Chờ ít nhất `minWaitMs` kể từ lúc nhận thử thách, rồi gửi đơn.
  4. POST https://nongnghieplienket.com/api/register/{farmer|cooperative|enterprise}, Content-Type: application/json, thân gồm các trường của đơn cộng `challenge` (= token), `solution` và `agent` (tên agent).

Trường của đơn theo loại:

Lỗi thử thách trả 400 kèm `code`: challenge_required, challenge_invalid, challenge_expired (quá 30 phút), challenge_too_fast (kèm retryAfterMs), challenge_used (mỗi thử thách dùng một lần) → lấy thử thách mới rồi gửi lại. Lỗi nhập liệu trả 400 kèm `errors` và không làm mất thử thách. Thành công trả 201 { ok: true, id }.

const API = "https://nongnghieplienket.com/api";
const c = await (await fetch(`${API}/register/challenge`)).json();
let n = 0;
while (leadingZeroBits(sha256(`${c.token}:${n}`)) < c.bits) n++; // sha256: SHA-256 của chuỗi UTF-8, leadingZeroBits: số bit 0 đầu
await new Promise((r) => setTimeout(r, c.minWaitMs));
await fetch(`${API}/register/farmer`, {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ ...donDangKy, challenge: c.token, solution: String(n), agent: "Tên agent" }),
});

Tệp máy đọc

Về trang chủ