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

TypeExample 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

TypeExample 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

TypeExample 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

TypeExample 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:

ValueDescription
"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

TypeExample 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

MethodParameter Location
eth_sendTransactionparams[0].from
eth_callparams[0].from
eth_signparams[0]
personal_signparams[1]
eth_signTypedDataparams[0]

Exemplo

# Only allow transactions from approved wallets
allowed_senders := {
    "0x742d35cc6634c0532925a3b844bc9e7595f...",
    "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606..."
}
 
deny if {
    not input.from_address in allowed_senders
}

input.to_address

TypeExample 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

MethodParameter Location
eth_sendTransactionparams[0].to
eth_callparams[0].to
eth_getBalanceparams[0]
eth_getTransactionCountparams[0]

Exemplo

# Block transactions to known malicious addresses
blocked_addresses := {
    "0x000000000000000000000000000000000000dead",
    "0x1234567890abcdef..."
}
 
deny if {
    input.to_address in blocked_addresses
}

input.contract_addresses

TypeExample 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

MethodParameter LocationNotes
eth_sendTransactionparams[0].toSomente se o campo data ou input estiver presente
eth_callparams[0].toAo chamar um contrato
eth_getCodeparams[0]Endereço do contrato alvo
eth_getStorageAtparams[0]Endereço do contrato alvo
eth_getLogsparams[0].addressPode 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

TypeExample 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

MethodParameter Location
eth_sendTransactionparams[0].value
eth_callparams[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

TypeExample 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

MethodParameter Location
eth_sendTransactionparams[0].gas
eth_callparams[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

TypeExample 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

MethodParameter Location
eth_sendTransactionparams[0].gasPrice
eth_callparams[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

TypeExample 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

MethodParameter Location
eth_sendTransactionparams[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

TypeExample 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

MethodParameter Location
eth_sendTransactionparams[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

TypeExample 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

TypeExample 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")
}
Campos de Entrada | 256 Blocks