Interaction with the Ethereum mainnet and several testnets
Full LLM thinking from the 4-phase benchmark pipeline.
```json
{
"service_type": "crypto_app",
"base_url": "https://mainnet.infura.io/v3",
"auth_method": "api_key_header",
"auth_config": {
"key_location": "url_path",
"header_name": "Authorization"
},
"endpoints": [
{"path": "/v3/{project_id}", "method": "POST", "purpose": "JSON-RPC Ethereum calls"},
{"path": "/v3/{project_id}/eth_blockNumber", "method": "POST", "purpose": "get latest block number"},
{"path": "/v3/{project_id}/eth_getBalance", "method": "POST", "purpose": "get account balance"},
{"path": "/v3/{project_id}/eth_sendRawTransaction", "method": "POST", "purpose": "broadcast transaction"},
{"path": "/v3/{project_id}/eth_call", "method": "POST", "purpose": "call smart contract"},
{"path": "/v3/{project_id}/eth_getLogs", "method": "POST", "purpose": "get event logs"}
],
"pricing_model": {
"type": "tiered",
"details": {
"free_tier": "100k requests/day",
"paid_tiers": "usage-based beyond free tier",
"enterprise": "custom pricing"
}
},
"rate_limits": {"rpm": 600, "daily": 100000},
"capabilities": ["blockchain_access", "smart_contracts", "transaction_broadcast", "event_monitoring", "wallet_integration"],
"crypto_specifics": {
"supported_chains": ["ethereum", "ethereum_sepolia", "ethereum_goerli", "polygon", "arbitrum", "optimism"],
"token_count": "all_erc20",
"has_websocket": true,
"has_orderbook": false,
"fee_structure": "infrastructure_usage",
"security_features": ["api_key_auth", "rate_limiting", "request_logging", "ddos_protection"],
"node_type": "full_archive",
"json_rpc": true,
"ipfs_gateway": true
}
}
```
```json
{
"tests": [
{
"name": "test_latest_block_number",
"endpoint": "/v3/{project_id}",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"payload": {
"jsonrpc": "2.0",
"method": "eth_blockNumber",
"params": [],
"id": 1
},
"expected_status": 200,
"expected_behavior": "Returns current Ethereum block number in hex format",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "result",
"type": "string",
"pattern": "^0x[0-9a-fA-F]+$"
}
},
{
"name": "test_get_balance",
"endpoint": "/v3/{project_id}",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"payload": {
"jsonrpc": "2.0",
"method": "eth_getBalance",
"params": ["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "latest"],
"id": 2
},
"expected_status": 200,
"expected_behavior": "Returns ETH balance for given address in hex wei",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "result",
"type": "string",
"pattern": "^0x[0-9a-fA-F]*$"
}
},
{
"name": "test_get_transaction_count",
"endpoint": "/v3/{project_id}",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"payload": {
"jsonrpc": "2.0",
"method": "eth_getTransactionCount",
"params": ["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "latest"],
"id": 3
},
"expected_status": 200,
"expected_behavior": "Returns nonce count for given address",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "result",
"type": "string",
"pattern": "^0x[0-9a-fA-F]+$"
}
},
{
"name": "test_get_gas_price",
"endpoint": "/v3/{project_id}",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"payload": {
"jsonrpc": "2.0",
"method": "eth_gasPrice",
"params": [],
"id": 4
},
"expected_status": 200,
"expected_behavior": "Returns current gas price in hex wei",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "result",
"type": "string",
"pattern": "^0x[0-9a-fA-F]+$"
}
},
{
"name": "test_smart_contract_call",
"endpoint": "/v3/{project_id}",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"payload": {
"jsonrpc": "2.0",
"method": "eth_call",
"params": [
{
"to": "0xA0b86a33E6441c8e8F7c3e4D4a1c5A8f13E4dC8e",
"data": "0x18160ddd"
},
"latest"
],
"id": 5
},
"expected_status": 200,
"expected_behavior": "Executes smart contract call and returns result",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "result",
"type": "string",
"pattern": "^0x[0-9a-fA-F]*$"
}
},
{
"name": "test_invalid_method_error",
"endpoint": "/v3/{project_id}",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"payload": {
"jsonrpc": "2.0",
"method": "invalid_method",
"params": [],
"id": 6
},
"expected_status": 200,
"expected_behavior": "Returns JSON-RPC error for invalid method",
"metrics": ["error_handling", "status_code"],
"validation": {
"field": "error.code",
"type": "number",
"value": -32601
}
},
{
"name": "test_malformed_json_error",
"endpoint": "/v3/{project_id}",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"payload": "invalid json",
"expected_status": 400,
"expected_behavior": "Returns HTTP 400 for malformed JSON",
"metrics": ["error_handling", "status_code"],
"validation": {
"field": "status_code",
"type": "number",
"value": 400
}
}
],
"pricing_probes": [
{
"name": "verify_request_counting",
"description": "Make multiple requests and check if rate limit headers reflect usage",
"endpoint": "/v3/{project_id}",
"method": "POST",
"payload": {
"jsonrpc": "2.0",
"method": "eth_blockNumber",
"params": [],
"id": 1
},
"check": "response headers should include rate limit information or usage tracking"
},
{
"name": "verify_free_tier_limits",
"description": "Confirm rate limits match advertised 600 RPM / 100k daily",
"endpoint": "/v3/{project_id}",
"method": "POST",
"payload": {
"j0/7 tests passed
| Test | Endpoint | Status | Latency |
|---|---|---|---|
| test_latest_block_number | POST /v3/{project_id} | 401 | 117ms |
| test_get_balance | POST /v3/{project_id} | 401 | 31ms |
| test_get_transaction_count | POST /v3/{project_id} | 401 | 33ms |
| test_get_gas_price | POST /v3/{project_id} | 401 | 31ms |
| test_smart_contract_call | POST /v3/{project_id} | 401 | 30ms |
| test_invalid_method_error | POST /v3/{project_id} | 401 | 31ms |
| test_malformed_json_error | POST /v3/{project_id} | 401 | 30ms |
```json
{
"overall": 65,
"dimensions": {
"token_efficiency": 8.0,
"first_try_success": 3.0,
"response_parseability": 4.0,
"error_clarity": 6.0,
"doc_quality": 8.0,
"auth_simplicity": 6.0,
"latency": 9.0,
"consistency": 8.0
},
"pricing_normalized": {
"maker_fee_bps": null,
"taker_fee_bps": null,
"withdrawal_fee_usd": null,
"free_tier_requests": 100000
},
"issues": [
"All endpoints return 401 'invalid project id' - requires authentication setup",
"Error responses are plain text instead of JSON-RPC format",
"Cannot verify actual blockchain data functionality without valid credentials",
"Non-standard error format makes agent parsing difficult"
],
"recommendations": [
"Provide sample project ID or sandbox environment for testing",
"Return JSON-RPC formatted error responses with proper error codes",
"Include authentication examples in API documentation",
"Consider offering limited public endpoints for basic blockchain queries"
]
}
```
Show your live agent-readiness score on your own site. Free, no auth — it updates as your score changes.
<a href="https://prowl.world/service/infura-ethereum">
<img src="https://prowl.world/badge/infura-ethereum.svg" height="56" alt="Agent-readiness on Prowl">
</a>
See operational metrics, LLM evaluations, agent readiness, and more.
Open in Dashboard