Campos de Entrada
Referencia completa de todos los datos disponibles en las decisiones de políticas
Cada decisión de política tiene acceso a los datos de solicitud a través del objeto input. Esta página documenta todos los campos disponibles que puede usar en sus políticas.
Red
Estos campos identifican la red blockchain y el método RPC que se está llamando, permitiéndole crear políticas específicas de cadena o restringir ciertas operaciones.
input.chain
| Type | Example Values |
|---|---|
| string | "ethereum", "polygon", "arbitrum", "optimism", "base" |
El identificador de red blockchain para la solicitud. Use este campo para restringir el acceso a cadenas específicas, aplicar diferentes políticas por red o bloquear ciertas cadenas por completo.
Ejemplo
# Only allow transactions on Polygon and Base
allowed_chains := {"polygon", "base"}
deny if {
not input.chain in allowed_chains
}
# Apply stricter limits on Ethereum mainnet
deny if {
input.chain == "ethereum"
input.usd_value > 1000
}input.rpc_method
| Type | Example Values |
|---|---|
| string | "eth_sendTransaction", "eth_call", "eth_getBalance" |
El nombre del método JSON-RPC de la solicitud. Use esto para permitir o bloquear operaciones específicas. Por ejemplo, podría permitir operaciones de lectura (eth_call, eth_getBalance) mientras restringe operaciones de escritura (eth_sendTransaction).
Tenga en cuenta que algunos métodos están restringidos a nivel de plataforma y no se pueden habilitar mediante políticas.
Ejemplo
# Only allow read-only methods
allowed_methods := {
"eth_call",
"eth_getBalance",
"eth_getTransactionCount",
"eth_getCode",
"eth_getLogs"
}
deny if {
not input.rpc_method in allowed_methods
}
# Block signing methods
deny if {
input.rpc_method in {"eth_sign", "personal_sign", "eth_signTypedData"}
}Orígenes de Solicitud
Estos campos proporcionan información de ubicación sobre el origen de la solicitud, permitiendo controles de acceso basados en geografía y cumplimiento con regulaciones regionales.
input.source_ip
| Type | Example Values |
|---|---|
| string | "192.168.1.1", "2001:db8::1" |
La dirección IP del cliente que realiza la solicitud. Use esto para listas de permitidos/bloqueados basadas en IP o para implementar limitación de velocidad basada en origen.
Resolución de IP
Por defecto, 256 Blocks usa la dirección IP del cliente que se conecta. Si sus solicitudes se envían a través de su propia infraestructura, puede pasar la IP del cliente original mediante el encabezado X-Forwarded-For - 256 Blocks usará la primera dirección IP de ese encabezado.
Esto es útil cuando:
- Las solicitudes se envían a través de sus servidores backend
- Necesita pasar la dirección IP real del usuario final
- Prueba políticas con diferentes direcciones IP en desarrollo
Ejemplo
# Block specific IP addresses
blocked_ips := {"192.168.1.100", "10.0.0.50"}
deny if {
input.source_ip in blocked_ips
}
# Only allow requests from known infrastructure
allowed_ips := {"203.0.113.10", "203.0.113.11"}
deny if {
not input.source_ip in allowed_ips
}input.source_country
| Type | Example Values |
|---|---|
| string | "US", "GB", "DE", "UNKNOWN", "PRIVATE", "LOCALHOST" |
El código de país de dos letras ISO 3166-1 alpha-2 derivado de source_ip. Use esto para restricciones geográficas, cumplimiento regulatorio o políticas específicas de región.
Los mapeos de países se actualizan diariamente. La precisión es típicamente del 95%+ para direcciones IP públicas.
Valores Especiales
Para direcciones IP no públicas, se devuelven los siguientes valores en lugar de códigos de país:
| Value | Description |
|---|---|
"PRIVATE" | Rangos de IP privadas (10.x.x.x, 172.16-31.x.x, 192.168.x.x) |
"LOCALHOST" | Direcciones de bucle local (127.x.x.x) |
"LINK_LOCAL" | Direcciones locales de enlace (169.254.x.x) |
"MULTICAST" | Direcciones de multidifusión (224.x.x.x - 239.x.x.x) |
"RESERVED" | Direcciones reservadas (240.x.x.x+) |
"UNKNOWN" | Fallo de búsqueda o tipo de dirección no compatible |
Ejemplo
# Block sanctioned countries
blocked_countries := {"KP", "IR", "CU", "SY", "RU"}
deny if {
input.source_country in blocked_countries
}
# Only allow requests from specific regions
allowed_countries := {"US", "CA", "GB", "DE", "FR"}
deny if {
not input.source_country in allowed_countries
input.source_country != "PRIVATE" # Allow internal/development traffic
}Parámetros de Transacción
Estos campos se extraen de los parámetros de la solicitud JSON-RPC. Todas las direcciones se normalizan a minúsculas con el prefijo 0x para una comparación consistente.
input.from_address
| Type | Example Value |
|---|---|
| string (nullable) | "0x742d35cc6634c0532925a3b844bc9e7595f..." |
La dirección de billetera del remitente. Esto identifica quién está iniciando la transacción o solicitud de firma. Use este campo para implementar listas de permitidos/bloqueados para billeteras específicas, o para aplicar diferentes reglas de política según el remitente.
Origen por Método RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].from |
eth_call | params[0].from |
eth_sign | params[0] |
personal_sign | params[1] |
eth_signTypedData | params[0] |
Ejemplo
# Only allow transactions from approved wallets
allowed_senders := {
"0x742d35cc6634c0532925a3b844bc9e7595f...",
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606..."
}
deny if {
not input.from_address in allowed_senders
}input.to_address
| Type | Example Value |
|---|---|
| string (nullable) | "0x742d35cc6634c0532925a3b844bc9e7595f..." |
La dirección de destino o destinatario de la transacción. Esto podría ser una dirección de billetera para transferencias simples, o una dirección de contrato para interacciones con contratos. El valor es null al implementar un nuevo contrato (las transacciones de creación de contratos no tienen destinatario).
Origen por Método RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].to |
eth_call | params[0].to |
eth_getBalance | params[0] |
eth_getTransactionCount | params[0] |
Ejemplo
# Block transactions to known malicious addresses
blocked_addresses := {
"0x000000000000000000000000000000000000dead",
"0x1234567890abcdef..."
}
deny if {
input.to_address in blocked_addresses
}input.contract_addresses
| Type | Example Value |
|---|---|
| array of strings | ["0x742d35cc...", "0xa0b86991..."] |
Un array de direcciones de contratos inteligentes involucradas en la solicitud. Esto es particularmente útil para controlar con qué contratos pueden interactuar sus usuarios. El array puede contener múltiples direcciones para métodos como eth_getLogs que pueden consultar múltiples contratos.
Origen por Método RPC
| Method | Parameter Location | Notes |
|---|---|---|
eth_sendTransaction | params[0].to | Solo si el campo data o input está presente |
eth_call | params[0].to | Al llamar a un contrato |
eth_getCode | params[0] | Dirección del contrato de destino |
eth_getStorageAt | params[0] | Dirección del contrato de destino |
eth_getLogs | params[0].address | Puede ser una dirección única o un array |
Ejemplo
# Only allow interactions with approved contracts (e.g., USDT and USDC)
approved_contracts := {
"0xdac17f958d2ee523a2206206994597c13d831ec7",
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
}
deny if {
some addr in input.contract_addresses
not addr in approved_contracts
}input.value_wei
| Type | Example Value |
|---|---|
| string (nullable) | "0xde0b6b3a7640000" (1 ETH in hex) |
El valor del token nativo que se está transfiriendo, expresado en wei como una cadena hexadecimal. Wei es la unidad más pequeña de ETH (1 ETH = 10^18 wei). Este es el valor bruto en cadena - para políticas basadas en USD, use input.usd_value en su lugar.
Origen por Método RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].value |
eth_call | params[0].value |
Ejemplo
# Block transactions transferring more than 10 ETH (in wei)
# 10 ETH = 10 * 10^18 wei = 0x8ac7230489e80000
deny if {
input.value_wei != null
to_number(input.value_wei) > 10000000000000000000
}
# Block zero-value transactions to specific contracts
deny if {
input.value_wei == "0x0"
some addr in input.contract_addresses
addr == "0x..."
}input.gas_limit
| Type | Example Value |
|---|---|
| string (nullable) | "0x5208" (21000 in hex) |
La cantidad máxima de unidades de gas que la transacción puede consumir, como una cadena hexadecimal. Una transferencia simple de ETH usa 21,000 gas, mientras que las interacciones con contratos típicamente requieren más.
Origen por Método RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].gas |
eth_call | params[0].gas |
Ejemplo
# Block transactions with excessive gas limits (potential spam/abuse)
# 1,000,000 gas = 0xf4240
deny if {
input.gas_limit != null
to_number(input.gas_limit) > 1000000
}
# Don't sponsor high-gas transactions
denyGasSponsor if {
input.gas_limit != null
to_number(input.gas_limit) > 500000
}input.gas_price
| Type | Example Value |
|---|---|
| string (nullable) | "0x3b9aca00" (1 gwei in hex) |
El precio del gas para transacciones legacy (pre-EIP-1559), expresado en wei como una cadena hexadecimal. Este campo es null para transacciones EIP-1559 que usan max_fee_per_gas en su lugar.
Origen por Método RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].gasPrice |
eth_call | params[0].gasPrice |
Ejemplo
# Block legacy transactions with extremely high gas prices
# 500 gwei = 500 * 10^9 = 0x746a528800
deny if {
input.gas_price != null
to_number(input.gas_price) > 500000000000
}
# Don't sponsor legacy transactions (prefer EIP-1559)
denyGasSponsor if {
input.gas_price != null
input.max_fee_per_gas == null
}input.max_fee_per_gas
| Type | Example Value |
|---|---|
| string (nullable) | "0x77359400" (2 gwei in hex) |
La tarifa total máxima por unidad de gas para transacciones EIP-1559, como una cadena hexadecimal. Este es el máximo absoluto que el remitente está dispuesto a pagar (tarifa base + tarifa de prioridad). Solo presente para tipos de transacción EIP-1559.
Origen por Método RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].maxFeePerGas |
Ejemplo
# Block transactions willing to pay excessive gas fees
# 1000 gwei = 1000 * 10^9 = 0xe8d4a51000
deny if {
input.max_fee_per_gas != null
to_number(input.max_fee_per_gas) > 1000000000000
}
# Only sponsor transactions with reasonable max fees
# 50 gwei = 50 * 10^9 = 0xba43b7400
denyGasSponsor if {
input.max_fee_per_gas != null
to_number(input.max_fee_per_gas) > 50000000000
}input.max_priority_fee_per_gas
| Type | Example Value |
|---|---|
| string (nullable) | "0x3b9aca00" (1 gwei in hex) |
La tarifa de prioridad máxima (propina) por unidad de gas para transacciones EIP-1559, como una cadena hexadecimal. Esta es la porción que va al productor del bloque como incentivo. Solo presente para tipos de transacción EIP-1559.
Origen por Método RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].maxPriorityFeePerGas |
Ejemplo
# Block transactions with excessive priority fees (potential MEV manipulation)
# 10 gwei = 10 * 10^9 = 0x2540be400
deny if {
input.max_priority_fee_per_gas != null
to_number(input.max_priority_fee_per_gas) > 10000000000
}
# Require reasonable priority fees for sponsored transactions
# 2 gwei = 2 * 10^9 = 0x77359400
denyGasSponsor if {
input.max_priority_fee_per_gas != null
to_number(input.max_priority_fee_per_gas) > 2000000000
}Datos Enriquecidos
Estos campos son calculados por 256 Blocks para proporcionar contexto adicional más allá de lo que hay en la solicitud sin procesar.
input.usd_value
| Type | Example Value |
|---|---|
| number (nullable) | 1500.50 |
El equivalente en USD del valor del token nativo de la transacción (value_wei), calculado usando precios de mercado actuales. Este es el campo más común para implementar límites de gasto y controles de patrocinio.
Los precios se obtienen cada minuto de fuentes de precios confiables (como Chainlink). El valor puede ser null si la transacción no tiene valor (por ejemplo, una llamada de contrato pura).
Ejemplo
# Block transactions over $10,000
deny if {
input.usd_value > 10000
}
# Don't sponsor transactions over $100
denyGasSponsor if {
input.usd_value > 100
}
# Handle null values safely
deny if {
input.usd_value != null
input.usd_value > 50000
}Datos Sin Procesar
Para casos de uso avanzados donde los campos estructurados anteriores no proporcionan lo que necesita.
input.raw_params
| Type | Example Value |
|---|---|
| array | [{"from": "0x...", "to": "0x...", "value": "0x...", "data": "0x..."}] |
El array completo y sin modificar de params JSON-RPC de la solicitud original. Use esto cuando necesite acceder a campos que no están expuestos a través de las propiedades de entrada estructuradas, tales como:
- Datos de llamada de contrato (campo
data) para detección de firma de función - Listas de acceso para transacciones EIP-2930
- Campos personalizados o no estándar
Ejemplo
# Block ERC-20 transfer function calls
# Function signature: transfer(address,uint256) = 0xa9059cbb
deny if {
params := input.raw_params[0]
params.data != null
startswith(params.data, "0xa9059cbb")
}
# Block ERC-20 approve function (0x095ea7b3)
deny if {
params := input.raw_params[0]
params.data != null
startswith(params.data, "0x095ea7b3")
}