Champs d'Entrée
Référence complète de toutes les données disponibles dans les décisions de politiques
Chaque décision de politique a accès aux données de requête via l'objet input. Cette page documente tous les champs disponibles que vous pouvez utiliser dans vos politiques.
Réseau
Ces champs identifient le réseau blockchain et la méthode RPC appelée, vous permettant de créer des politiques spécifiques à une chaîne ou de restreindre certaines opérations.
input.chain
| Type | Example Values |
|---|---|
| string | "ethereum", "polygon", "arbitrum", "optimism", "base" |
L'identifiant de réseau blockchain pour la requête. Utilisez ce champ pour restreindre l'accès à des chaînes spécifiques, appliquer différentes politiques par réseau ou bloquer complètement certaines chaînes.
Exemple
# 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" |
Le nom de la méthode JSON-RPC de la requête. Utilisez ceci pour autoriser ou bloquer des opérations spécifiques. Par exemple, vous pourriez autoriser les opérations de lecture (eth_call, eth_getBalance) tout en restreignant les opérations d'écriture (eth_sendTransaction).
Notez que certaines méthodes sont restreintes au niveau de la plateforme et ne peuvent pas être activées via une politique.
Exemple
# 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"}
}Origines de Requête
Ces champs fournissent des informations de localisation sur l'origine de la requête, permettant des contrôles d'accès basés sur la géographie et la conformité aux réglementations régionales.
input.source_ip
| Type | Example Values |
|---|---|
| string | "192.168.1.1", "2001:db8::1" |
L'adresse IP du client effectuant la requête. Utilisez ceci pour des listes d'autorisation/blocage basées sur IP ou pour implémenter une limitation de débit basée sur la source.
Résolution IP
Par défaut, 256 Blocks utilise l'adresse IP du client connecté. Si vos requêtes sont proxy via votre propre infrastructure, vous pouvez transmettre l'IP du client original via l'en-tête X-Forwarded-For - 256 Blocks utilisera la première adresse IP de cet en-tête.
Ceci est utile lorsque :
- Les requêtes sont proxy via vos serveurs backend
- Vous devez transmettre l'adresse IP réelle de l'utilisateur final
- Tester des politiques avec différentes adresses IP en développement
Exemple
# 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" |
Le code pays à deux lettres ISO 3166-1 alpha-2 dérivé de source_ip. Utilisez ceci pour des restrictions géographiques, la conformité réglementaire ou des politiques spécifiques à une région.
Les mappages de pays sont actualisés quotidiennement. La précision est généralement de 95%+ pour les adresses IP publiques.
Valeurs Spéciales
Pour les adresses IP non publiques, les valeurs suivantes sont retournées au lieu de codes pays :
| Value | Description |
|---|---|
"PRIVATE" | Plages IP privées (10.x.x.x, 172.16-31.x.x, 192.168.x.x) |
"LOCALHOST" | Adresses de bouclage (127.x.x.x) |
"LINK_LOCAL" | Adresses locales de lien (169.254.x.x) |
"MULTICAST" | Adresses multidiffusion (224.x.x.x - 239.x.x.x) |
"RESERVED" | Adresses réservées (240.x.x.x+) |
"UNKNOWN" | Échec de recherche ou type d'adresse non supporté |
Exemple
# 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
}Paramètres de Transaction
Ces champs sont extraits des paramètres de la requête JSON-RPC. Toutes les adresses sont normalisées en minuscules avec le préfixe 0x pour une comparaison cohérente.
input.from_address
| Type | Example Value |
|---|---|
| string (nullable) | "0x742d35cc6634c0532925a3b844bc9e7595f..." |
L'adresse du portefeuille de l'expéditeur. Cela identifie qui initie la transaction ou la demande de signature. Utilisez ce champ pour implémenter des listes d'autorisation/blocage pour des portefeuilles spécifiques, ou pour appliquer différentes règles de politique selon l'expéditeur.
Source par Méthode 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] |
Exemple
# 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..." |
L'adresse du destinataire ou de la cible de la transaction. Cela peut être une adresse de portefeuille pour des transferts simples, ou une adresse de contrat pour des interactions avec des contrats. La valeur est null lors du déploiement d'un nouveau contrat (les transactions de création de contrat n'ont pas de destinataire).
Source par Méthode RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].to |
eth_call | params[0].to |
eth_getBalance | params[0] |
eth_getTransactionCount | params[0] |
Exemple
# 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 tableau d'adresses de contrats intelligents impliquées dans la requête. Ceci est particulièrement utile pour contrôler avec quels contrats vos utilisateurs peuvent interagir. Le tableau peut contenir plusieurs adresses pour des méthodes comme eth_getLogs qui peuvent interroger plusieurs contrats.
Source par Méthode RPC
| Method | Parameter Location | Notes |
|---|---|---|
eth_sendTransaction | params[0].to | Uniquement si le champ data ou input est présent |
eth_call | params[0].to | Lors de l'appel d'un contrat |
eth_getCode | params[0] | Adresse du contrat cible |
eth_getStorageAt | params[0] | Adresse du contrat cible |
eth_getLogs | params[0].address | Peut être une adresse unique ou un tableau |
Exemple
# 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) |
La valeur du jeton natif transféré, exprimée en wei sous forme de chaîne hexadécimale. Wei est la plus petite unité d'ETH (1 ETH = 10^18 wei). Ceci est la valeur brute on-chain - pour les politiques basées sur USD, utilisez input.usd_value à la place.
Source par Méthode RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].value |
eth_call | params[0].value |
Exemple
# 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 quantité maximale d'unités de gas que la transaction peut consommer, sous forme de chaîne hexadécimale. Un simple transfert ETH utilise 21 000 gas, tandis que les interactions avec des contrats nécessitent généralement plus.
Source par Méthode RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].gas |
eth_call | params[0].gas |
Exemple
# 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) |
Le prix du gas pour les transactions legacy (pré-EIP-1559), exprimé en wei sous forme de chaîne hexadécimale. Ce champ est null pour les transactions EIP-1559 qui utilisent max_fee_per_gas à la place.
Source par Méthode RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].gasPrice |
eth_call | params[0].gasPrice |
Exemple
# 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) |
Les frais totaux maximums par unité de gas pour les transactions EIP-1559, sous forme de chaîne hexadécimale. C'est le maximum absolu que l'expéditeur est prêt à payer (frais de base + frais de priorité). Présent uniquement pour les types de transaction EIP-1559.
Source par Méthode RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].maxFeePerGas |
Exemple
# 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) |
Les frais de priorité maximums (pourboire) par unité de gas pour les transactions EIP-1559, sous forme de chaîne hexadécimale. C'est la portion qui va au producteur de bloc comme incitation. Présent uniquement pour les types de transaction EIP-1559.
Source par Méthode RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].maxPriorityFeePerGas |
Exemple
# 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
}Données Enrichies
Ces champs sont calculés par 256 Blocks pour fournir un contexte supplémentaire au-delà de ce qui se trouve dans la requête brute.
input.usd_value
| Type | Example Value |
|---|---|
| number (nullable) | 1500.50 |
L'équivalent USD de la valeur du jeton natif de la transaction (value_wei), calculé en utilisant les prix du marché actuels. C'est le champ le plus courant pour implémenter des limites de dépenses et des contrôles de parrainage.
Les prix sont récupérés chaque minute à partir de sources de prix fiables (comme Chainlink). La valeur peut être null si la transaction n'a pas de valeur (par exemple, un appel de contrat pur).
Exemple
# 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
}Données Brutes
Pour les cas d'usage avancés où les champs structurés ci-dessus ne fournissent pas ce dont vous avez besoin.
input.raw_params
| Type | Example Value |
|---|---|
| array | [{"from": "0x...", "to": "0x...", "value": "0x...", "data": "0x..."}] |
Le tableau params JSON-RPC complet et non modifié de la requête originale. Utilisez ceci lorsque vous devez accéder à des champs qui ne sont pas exposés via les propriétés d'entrée structurées, tels que :
- Données d'appel de contrat (champ
data) pour la détection de signature de fonction - Listes d'accès pour les transactions EIP-2930
- Champs personnalisés ou non standard
Exemple
# 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")
}