╔══════════════════════════════════════════════════════════╗ ║ ZeroClaw × Base USDC — End-to-End Plugin Test ║ ║ agent-6 (Liam Tremblay) — farm showcase evidence ║ ╚══════════════════════════════════════════════════════════╝ ▶ Loading WASM component: /opt/data/agent-farm/farm/work/agent-6/zeroclaw/e2e_test/../plugin_base/base_usdc_tool.wasm ▶ Manifest: name=base-usdc-tool, version=0.1.0, caps=[Tool], perms=[HttpClient, ConfigRead] ▶ Scope: id=PluginInstanceId { package: "base-usdc-tool", capability: Tool, binding: "e2e-test" }, http_enabled=true ▶ Plugin instantiated in wasmtime (cranelift JIT). ▶ Tool metadata: name: base_usdc description: Base L2 USDC payment terminal: create an EIP-681 payment-request URL (ethereum:@8453/transfer?address=&uint256=) that a customer wallet opens to sign a USDC transfer, then verify on-chain whether the payment has landed via eth_getTransactionReceipt or eth_getLogs scanning USDC Transfer events. T1 custody: no private keys held, no signing, no broadcasting. Operations: create_payment (needs recipient, amount) and check_payment (needs recipient, optional tx_hash). schema: {"properties":{"amount":{"description":"Amount in human-readable USDC (e.g. \"25.50\"). Required for create_payment.","type":"string"},"op":{"default":"create_payment","description":"Operation to perform. create_payment builds an EIP-681 Base USDC URL; check_payment verifies on-chain payment.","enum":["create_payment","check_payment"],"type":"string"},"recipient":{"description":"Recipient Ethereum address (0x...). Required for both operations.","type":"string"},"tx_hash":{"description":"Transaction hash to verify. Optional for check_payment; if omitted, scans recent blocks.","type":"string"},"usdc_address":{"description":"USDC contract address override (optional). Defaults to native Base USDC.","type":"string"}},"required":[],"type":"object"} ━━━ TEST 1: create_payment (EIP-681 USDC URL) ━━━ success: true output: 💳 Base USDC payment request created: URL: ethereum:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913@8453/transfer?address=0x3d6B517CF4710cB9501CbB69D44B054AC2021f27&uint256=25000000 Amount: 25 USDC (raw: 25000000) Recipient: 0x3d6B517CF4710cB9501CbB69D44B054AC2021f27 USDC contract: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 Chain: Base (8453). Share the URL / QR with the customer. Their wallet will prompt to sign a USDC transfer. To check if paid, call this tool again with check_payment and the recipient address (and optional tx hash). ✓ Valid EIP-681 Base USDC payment URL generated. ━━━ TEST 2: check_payment (Base mainnet, expecting unpaid) ━━━ success: true output: ⏳ NOT PAID — no USDC transfers to 0x000000000000000000000000000000000000dEaD found in the scanned block range. Ask the customer to sign the payment URL. Poll again in a few seconds. ✓ Base RPC queried live (eth_blockNumber + eth_getLogs), correctly unpaid. ━━━ TEST 3: error handling (invalid recipient address) ━━━ success: false error: Some("recipient 'not-an-address' is not a valid Ethereum address") ✓ Plugin correctly rejects a malformed address. ━━━ TEST 4: error handling (missing recipient) ━━━ success: false error: Some("recipient address is required") ✓ Plugin correctly rejects missing recipient. ╔══════════════════════════════════════════════════════════╗ ║ ALL E2E TESTS PASSED — base-usdc-tool runs in ZeroClaw ║ ║ Multi-chain showcase: Solana Pay + Base USDC verified. ║ ╚══════════════════════════════════════════════════════════╝