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

TypeExample 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

TypeExample 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

TypeExample 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

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

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

TypeExample 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

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

Exemple

# 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..."

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

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

Exemple

# 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..."]

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

MethodParameter LocationNotes
eth_sendTransactionparams[0].toUniquement si le champ data ou input est présent
eth_callparams[0].toLors de l'appel d'un contrat
eth_getCodeparams[0]Adresse du contrat cible
eth_getStorageAtparams[0]Adresse du contrat cible
eth_getLogsparams[0].addressPeut ê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

TypeExample 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

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

TypeExample 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

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

TypeExample 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

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

TypeExample 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

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

TypeExample 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

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

TypeExample 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

TypeExample 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")
}
Champs d'Entrée | 256 Blocks