Campos de Entrada
Referência completa de todos os dados disponíveis nas decisões de políticas
Cada decisão de política tem acesso aos dados da solicitação através do objeto input. Esta página documenta todos os campos disponíveis que você pode usar em suas políticas.
Rede
Esses campos identificam a rede blockchain e o método RPC que está sendo chamado, permitindo que você crie políticas específicas de cadeia ou restrinja certas operações.
input.chain
| Type | Example Values |
|---|---|
| string | "ethereum", "polygon", "arbitrum", "optimism", "base" |
O identificador de rede blockchain para a solicitação. Use este campo para restringir o acesso a cadeias específicas, aplicar diferentes políticas por rede ou bloquear certas cadeias completamente.
Exemplo
# 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" |
O nome do método JSON-RPC da solicitação. Use isso para permitir ou bloquear operações específicas. Por exemplo, você pode permitir operações de leitura (eth_call, eth_getBalance) enquanto restringe operações de escrita (eth_sendTransaction).
Note que alguns métodos são restritos no nível da plataforma e não podem ser habilitados via política.
Exemplo
# 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"}
}Origens da Solicitação
Esses campos fornecem informações de localização sobre a origem da solicitação, permitindo controles de acesso baseados em geografia e conformidade com regulamentações regionais.
input.source_ip
| Type | Example Values |
|---|---|
| string | "192.168.1.1", "2001:db8::1" |
O endereço IP do cliente fazendo a solicitação. Use isso para listas de permissões/bloqueios baseadas em IP ou para implementar limitação de taxa baseada na origem.
Resolução de IP
Por padrão, o 256 Blocks usa o endereço IP do cliente conectado. Se suas solicitações forem enviadas através de sua própria infraestrutura, você pode passar o IP do cliente original através do cabeçalho X-Forwarded-For - o 256 Blocks usará o primeiro endereço IP desse cabeçalho.
Isso é útil quando:
- Solicitações são enviadas através de seus servidores backend
- Você precisa passar o endereço IP real do usuário final
- Testando políticas com diferentes endereços IP em desenvolvimento
Exemplo
# 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" |
O código de país de duas letras ISO 3166-1 alpha-2 derivado de source_ip. Use isso para restrições geográficas, conformidade regulatória ou políticas específicas de região.
Os mapeamentos de países são atualizados diariamente. A precisão é tipicamente de 95%+ para endereços IP públicos.
Valores Especiais
Para endereços IP não públicos, os seguintes valores são retornados em vez de códigos de país:
| Value | Description |
|---|---|
"PRIVATE" | Faixas de IP privadas (10.x.x.x, 172.16-31.x.x, 192.168.x.x) |
"LOCALHOST" | Endereços de loopback (127.x.x.x) |
"LINK_LOCAL" | Endereços link-local (169.254.x.x) |
"MULTICAST" | Endereços multicast (224.x.x.x - 239.x.x.x) |
"RESERVED" | Endereços reservados (240.x.x.x+) |
"UNKNOWN" | Falha na busca ou tipo de endereço não suportado |
Exemplo
# 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 Transação
Esses campos são extraídos dos parâmetros da solicitação JSON-RPC. Todos os endereços são normalizados para minúsculas com o prefixo 0x para comparação consistente.
input.from_address
| Type | Example Value |
|---|---|
| string (nullable) | "0x742d35cc6634c0532925a3b844bc9e7595f..." |
O endereço da carteira do remetente. Isso identifica quem está iniciando a transação ou solicitação de assinatura. Use este campo para implementar listas de permissões/bloqueios para carteiras específicas, ou para aplicar diferentes regras de política com base no remetente.
Origem 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] |
Exemplo
# 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..." |
O endereço do destinatário ou alvo da transação. Isso pode ser um endereço de carteira para transferências simples, ou um endereço de contrato para interações com contratos. O valor é null ao implantar um novo contrato (transações de criação de contrato não têm destinatário).
Origem 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] |
Exemplo
# 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..."] |
Um array de endereços de contratos inteligentes envolvidos na solicitação. Isso é particularmente útil para controlar com quais contratos seus usuários podem interagir. O array pode conter múltiplos endereços para métodos como eth_getLogs que podem consultar múltiplos contratos.
Origem por Método RPC
| Method | Parameter Location | Notes |
|---|---|---|
eth_sendTransaction | params[0].to | Somente se o campo data ou input estiver presente |
eth_call | params[0].to | Ao chamar um contrato |
eth_getCode | params[0] | Endereço do contrato alvo |
eth_getStorageAt | params[0] | Endereço do contrato alvo |
eth_getLogs | params[0].address | Pode ser um endereço único ou array |
Exemplo
# 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) |
O valor do token nativo sendo transferido, expresso em wei como uma string hexadecimal. Wei é a menor unidade de ETH (1 ETH = 10^18 wei). Este é o valor bruto on-chain - para políticas baseadas em USD, use input.usd_value em vez disso.
Origem por Método RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].value |
eth_call | params[0].value |
Exemplo
# 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) |
A quantidade máxima de unidades de gas que a transação pode consumir, como uma string hexadecimal. Uma transferência simples de ETH usa 21.000 gas, enquanto interações com contratos tipicamente requerem mais.
Origem por Método RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].gas |
eth_call | params[0].gas |
Exemplo
# 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) |
O preço do gas para transações legado (pré-EIP-1559), expresso em wei como uma string hexadecimal. Este campo é null para transações EIP-1559 que usam max_fee_per_gas em vez disso.
Origem por Método RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].gasPrice |
eth_call | params[0].gasPrice |
Exemplo
# 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) |
A taxa total máxima por unidade de gas para transações EIP-1559, como uma string hexadecimal. Este é o máximo absoluto que o remetente está disposto a pagar (taxa base + taxa de prioridade). Presente apenas para tipos de transação EIP-1559.
Origem por Método RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].maxFeePerGas |
Exemplo
# 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) |
A taxa de prioridade máxima (gorjeta) por unidade de gas para transações EIP-1559, como uma string hexadecimal. Esta é a porção que vai para o produtor do bloco como um incentivo. Presente apenas para tipos de transação EIP-1559.
Origem por Método RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].maxPriorityFeePerGas |
Exemplo
# 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
}Dados Enriquecidos
Esses campos são calculados pelo 256 Blocks para fornecer contexto adicional além do que está na solicitação bruta.
input.usd_value
| Type | Example Value |
|---|---|
| number (nullable) | 1500.50 |
O equivalente em USD do valor do token nativo da transação (value_wei), calculado usando preços de mercado atuais. Este é o campo mais comum para implementar limites de gastos e controles de patrocínio.
Os preços são obtidos a cada minuto de fontes de preços confiáveis (como Chainlink). O valor pode ser null se a transação não tiver valor (por exemplo, uma chamada de contrato pura).
Exemplo
# 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
}Dados Brutos
Para casos de uso avançados onde os campos estruturados acima não fornecem o que você precisa.
input.raw_params
| Type | Example Value |
|---|---|
| array | [{"from": "0x...", "to": "0x...", "value": "0x...", "data": "0x..."}] |
O array completo e não modificado de params JSON-RPC da solicitação original. Use isso quando você precisar acessar campos que não são expostos através das propriedades de entrada estruturadas, tais como:
- Dados de chamada de contrato (campo
data) para detecção de assinatura de função - Listas de acesso para transações EIP-2930
- Campos personalizados ou não padrão
Exemplo
# 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")
}