```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": {
"j