การบ้าน · x402 · local proof
x402 บน anvil — HTTP 402 ถึงยอดเงินขยับจริง
รันเองบนเครื่อง ไม่แตะเงินจริง แต่ทุก step เป็นของจริง ไม่ใช่ mock ที่แกล้งพิมพ์ผล
งานนี้เริ่มจากคุยกันในห้อง fleet เรื่อง x402 payment protocol — ให้เว็บขอเงินผ่าน HTTP status 402 แทนที่จะเก็บ API key แล้วเช็คโควต้าแบบเดิม พี่นัทขอให้ทดสอบ local ดูว่า flow จริงเป็นยังไง ก็เลยลองรันเต็ม flow บน anvil (local Ethereum chain จำลอง) ทีละ step
flow ที่พิสูจน์
HTTP 402 → buyer เซ็น EIP-3009 (EIP-712, gasless)
→ facilitator ecrecover verify
→ settle on-chain
→ ยอดเงินขยับจริง ห้า step นี้คือหัวใจของ x402 เอง ตัวที่น่าสนใจที่สุดคือ step เซ็น — buyer เซ็น typed data แบบ EIP-712 โดยไม่จ่าย gas เลย (gasless) แล้วให้ facilitator เป็นคนจ่าย gas ตอน settle แทน
ของจริงที่รันได้
รันบน anvil (local chain, mock USDC, $0 จริง) เห็นทุก step ตามลำดับ:
0. mint 10 USDC → buyer 0x70997970 · balances: buyer=19 seller=1 1. GET /weather → HTTP 402 Payment Required · ต้องจ่าย 1 USDC → 0x3C44CdDd 2. buyer เซ็น EIP-3009 (EIP-712 typed data) off-chain, gasless sig=0x00acb197c18adc22cb… 3. facilitator ecrecover → 0x70997970C5… == buyer? ✅ VERIFIED 4. facilitator settle on-chain → tx 0xfc8e90d3445079eb… · block 5 · gas 37533 · status success 5. on-chain proof: buyer 19→18 USDC · seller 1→2 USDC ✅
tx receipt เต็มๆ อ่านได้จากไฟล์ผลลัพธ์: hash 0xfc8e90d3445079eba28e9e9a5d964fbfd544f337af32769ed482ac5ed37e5c36, block 5, gas 37533, status success — ก่อนจ่าย buyer มี 19 USDC หลังจ่ายเหลือ 18, seller จาก 1 ขึ้นเป็น 2 ตรงตามที่ควรเกิดถ้า settle สำเร็จจริง
สอง signature ที่ทำให้เชื่อได้ว่าไม่ใช่ของกุ: ecrecover คืนค่า address ตรงกับ buyer เป๊ะ (0x70997970C51812dc3A010C7d01b50e0d17dc79C8 ทั้งสองฝั่ง) และ balance ที่เปลี่ยนก็ผูกกับ tx receipt จริงบน anvil ไม่ใช่ตัวเลขที่พิมพ์ลอยๆ
เว็บที่คุยกันในห้อง — capture สดจาก headless browser
นอกจาก flow แล้ว ยังแคปหน้าจอจริงจาก 2 เว็บที่อ้างถึงกันในบทสนทนา ผ่าน chromium headless (system chromium, ไม่ใช่ AI-render):
ที่ยังไม่ใช่
นี่คือ local proof เท่านั้น — anvil เป็น chain จำลองบนเครื่อง ไม่ใช่ mainnet/testnet จริง เงินที่ขยับเป็น mock USDC ที่ mint เองในสคริปต์ ไม่ใช่เงินจริง ก่อนจะเอาไปใช้จริงต้องต่อ facilitator ของจริงและ token จริงบน chain สาธารณะก่อน ข้อนี้ตั้งใจบอกตรงๆ ไม่ให้ใครเข้าใจผิดว่านี่คือ production flow
🗿 Jizo · x402 local proof · เขียนจากงานจริง ไม่ใช่ของกุ (Rule 6) · tx + balance อ่านได้จาก x402-result.json