इनपुट फ़ील्ड
नीति निर्णयों में उपलब्ध सभी डेटा का पूर्ण संदर्भ
प्रत्येक नीति निर्णय को input ऑब्जेक्ट के माध्यम से अनुरोध डेटा तक पहुंच प्राप्त है। यह पृष्ठ उन सभी उपलब्ध फ़ील्ड का दस्तावेज़ीकरण करता है जिन्हें आप अपनी नीतियों में उपयोग कर सकते हैं।
नेटवर्क
ये फ़ील्ड ब्लॉकचेन नेटवर्क और कॉल की जा रही RPC विधि की पहचान करते हैं, जिससे आप चेन-विशिष्ट नीतियां बना सकते हैं या कुछ ऑपरेशन को प्रतिबंधित कर सकते हैं।
input.chain
| Type | Example Values |
|---|---|
| string | "ethereum", "polygon", "arbitrum", "optimism", "base" |
अनुरोध के लिए ब्लॉकचेन नेटवर्क पहचानकर्ता। विशिष्ट चेन तक पहुंच को प्रतिबंधित करने, प्रति नेटवर्क विभिन्न नीतियां लागू करने या कुछ चेन को पूरी तरह से ब्लॉक करने के लिए इस फ़ील्ड का उपयोग करें।
उदाहरण
# 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" |
अनुरोध से JSON-RPC विधि का नाम। विशिष्ट ऑपरेशन को अनुमति देने या ब्लॉक करने के लिए इसका उपयोग करें। उदाहरण के लिए, आप पढ़ने के ऑपरेशन (eth_call, eth_getBalance) की अनुमति दे सकते हैं जबकि लिखने के ऑपरेशन (eth_sendTransaction) को प्रतिबंधित कर सकते हैं।
ध्यान दें कि कुछ विधियां प्लेटफ़ॉर्म स्तर पर प्रतिबंधित हैं और नीति के माध्यम से सक्षम नहीं की जा सकतीं।
उदाहरण
# 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"}
}अनुरोध मूल
ये फ़ील्ड अनुरोध मूल के बारे में स्थान जानकारी प्रदान करते हैं, जो भू-आधारित पहुंच नियंत्रण और क्षेत्रीय नियमों के अनुपालन को सक्षम करते हैं।
input.source_ip
| Type | Example Values |
|---|---|
| string | "192.168.1.1", "2001:db8::1" |
अनुरोध करने वाले क्लाइंट का IP पता। IP-आधारित अनुमति सूचियों/ब्लॉक सूचियों के लिए या स्रोत के आधार पर दर सीमित करने के लिए इसका उपयोग करें।
IP समाधान
डिफ़ॉल्ट रूप से, 256 Blocks कनेक्टिंग क्लाइंट के IP पते का उपयोग करता है। यदि आपके अनुरोध आपके अपने इन्फ्रास्ट्रक्चर के माध्यम से प्रॉक्सी किए जाते हैं, तो आप X-Forwarded-For हेडर के माध्यम से मूल क्लाइंट IP पास कर सकते हैं - 256 Blocks उस हेडर से पहले IP पते का उपयोग करेगा।
यह उपयोगी है जब:
- अनुरोध आपके बैकएंड सर्वर के माध्यम से प्रॉक्सी किए जाते हैं
- आपको अंतिम उपयोगकर्ता के वास्तविक IP पते को पास करने की आवश्यकता है
- विकास में विभिन्न IP पतों के साथ नीतियों का परीक्षण करना
उदाहरण
# 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" |
source_ip से प्राप्त दो-अक्षर ISO 3166-1 alpha-2 देश कोड। भौगोलिक प्रतिबंधों, नियामक अनुपालन या क्षेत्र-विशिष्ट नीतियों के लिए इसका उपयोग करें।
देश मैपिंग प्रतिदिन ताज़ा की जाती हैं। सार्वजनिक IP पतों के लिए सटीकता आमतौर पर 95%+ होती है।
विशेष मान
गैर-सार्वजनिक IP पतों के लिए, देश कोड के बजाय निम्नलिखित मान लौटाए जाते हैं:
| Value | Description |
|---|---|
"PRIVATE" | निजी IP रेंज (10.x.x.x, 172.16-31.x.x, 192.168.x.x) |
"LOCALHOST" | लूपबैक पते (127.x.x.x) |
"LINK_LOCAL" | लिंक-स्थानीय पते (169.254.x.x) |
"MULTICAST" | मल्टीकास्ट पते (224.x.x.x - 239.x.x.x) |
"RESERVED" | आरक्षित पते (240.x.x.x+) |
"UNKNOWN" | लुकअप विफलता या असमर्थित पता प्रकार |
उदाहरण
# 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
}लेन-देन पैरामीटर
ये फ़ील्ड JSON-RPC अनुरोध पैरामीटर से निकाले जाते हैं। सभी पते सुसंगत तुलना के लिए 0x उपसर्ग के साथ लोअरकेस में सामान्यीकृत हैं।
input.from_address
| Type | Example Value |
|---|---|
| string (nullable) | "0x742d35cc6634c0532925a3b844bc9e7595f..." |
प्रेषक का वॉलेट पता। यह पहचानता है कि कौन लेन-देन या हस्ताक्षर अनुरोध शुरू कर रहा है। विशिष्ट वॉलेट के लिए अनुमति सूचियों/ब्लॉक सूचियों को लागू करने के लिए इस फ़ील्ड का उपयोग करें, या प्रेषक के आधार पर विभिन्न नीति नियम लागू करें।
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] |
उदाहरण
# 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..." |
लेन-देन का प्राप्तकर्ता या लक्ष्य पता। साधारण ट्रांसफर के लिए यह एक वॉलेट पता हो सकता है, या अनुबंध इंटरैक्शन के लिए एक अनुबंध पता हो सकता है। नए अनुबंध को तैनात करते समय मान null होता है (अनुबंध निर्माण लेन-देन का कोई प्राप्तकर्ता नहीं होता)।
RPC विधि द्वारा स्रोत
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].to |
eth_call | params[0].to |
eth_getBalance | params[0] |
eth_getTransactionCount | params[0] |
उदाहरण
# 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..."] |
अनुरोध में शामिल स्मार्ट अनुबंध पतों का एक सरणी। यह नियंत्रित करने के लिए विशेष रूप से उपयोगी है कि आपके उपयोगकर्ता किन अनुबंधों के साथ इंटरैक्ट कर सकते हैं। eth_getLogs जैसी विधियों के लिए सरणी में कई पते हो सकते हैं जो कई अनुबंधों को क्वेरी कर सकते हैं।
RPC विधि द्वारा स्रोत
| Method | Parameter Location | Notes |
|---|---|---|
eth_sendTransaction | params[0].to | केवल तभी जब data या input फ़ील्ड मौजूद हो |
eth_call | params[0].to | अनुबंध को कॉल करते समय |
eth_getCode | params[0] | लक्ष्य अनुबंध पता |
eth_getStorageAt | params[0] | लक्ष्य अनुबंध पता |
eth_getLogs | params[0].address | एकल पता या सरणी हो सकता है |
उदाहरण
# 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) |
स्थानांतरित किया जा रहा मूल टोकन मूल्य, हेक्साडेसिमल स्ट्रिंग के रूप में wei में व्यक्त किया गया। Wei, ETH की सबसे छोटी इकाई है (1 ETH = 10^18 wei)। यह कच्चा ऑन-चेन मूल्य है - USD-आधारित नीतियों के लिए, इसके बजाय input.usd_value का उपयोग करें।
RPC विधि द्वारा स्रोत
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].value |
eth_call | params[0].value |
उदाहरण
# 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) |
लेन-देन को उपभोग करने की अनुमति वाली गैस इकाइयों की अधिकतम मात्रा, हेक्साडेसिमल स्ट्रिंग के रूप में। एक साधारण ETH ट्रांसफर 21,000 गैस का उपयोग करता है, जबकि अनुबंध इंटरैक्शन में आमतौर पर अधिक की आवश्यकता होती है।
RPC विधि द्वारा स्रोत
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].gas |
eth_call | params[0].gas |
उदाहरण
# 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) |
लीगेसी (EIP-1559 से पहले) लेन-देन के लिए गैस मूल्य, हेक्साडेसिमल स्ट्रिंग के रूप में wei में व्यक्त किया गया। EIP-1559 लेन-देन के लिए यह फ़ील्ड null है जो इसके बजाय max_fee_per_gas का उपयोग करते हैं।
RPC विधि द्वारा स्रोत
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].gasPrice |
eth_call | params[0].gasPrice |
उदाहरण
# 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) |
EIP-1559 लेन-देन के लिए प्रति गैस इकाई अधिकतम कुल शुल्क, हेक्साडेसिमल स्ट्रिंग के रूप में। यह वह पूर्ण अधिकतम है जो प्रेषक भुगतान करने को तैयार है (आधार शुल्क + प्राथमिकता शुल्क)। केवल EIP-1559 लेन-देन प्रकारों के लिए मौजूद।
RPC विधि द्वारा स्रोत
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].maxFeePerGas |
उदाहरण
# 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) |
EIP-1559 लेन-देन के लिए प्रति गैस इकाई अधिकतम प्राथमिकता शुल्क (टिप), हेक्साडेसिमल स्ट्रिंग के रूप में। यह वह हिस्सा है जो प्रोत्साहन के रूप में ब्लॉक उत्पादक को जाता है। केवल EIP-1559 लेन-देन प्रकारों के लिए मौजूद।
RPC विधि द्वारा स्रोत
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].maxPriorityFeePerGas |
उदाहरण
# 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
}समृद्ध डेटा
ये फ़ील्ड 256 Blocks द्वारा कच्चे अनुरोध में मौजूद से परे अतिरिक्त संदर्भ प्रदान करने के लिए गणना की जाती हैं।
input.usd_value
| Type | Example Value |
|---|---|
| number (nullable) | 1500.50 |
लेन-देन के मूल टोकन मूल्य (value_wei) का USD समकक्ष, वर्तमान बाजार मूल्यों का उपयोग करके गणना की गई। यह खर्च सीमा और प्रायोजन नियंत्रण को लागू करने के लिए सबसे आम फ़ील्ड है।
मूल्य हर मिनट विश्वसनीय मूल्य फ़ीड (जैसे Chainlink) से प्राप्त किए जाते हैं। यदि लेन-देन का कोई मूल्य नहीं है (उदाहरण के लिए, एक शुद्ध अनुबंध कॉल) तो मान null हो सकता है।
उदाहरण
# 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
}कच्चा डेटा
उन्नत उपयोग के मामलों के लिए जहां ऊपर की संरचित फ़ील्ड आपकी आवश्यकता प्रदान नहीं करती हैं।
input.raw_params
| Type | Example Value |
|---|---|
| array | [{"from": "0x...", "to": "0x...", "value": "0x...", "data": "0x..."}] |
मूल अनुरोध से पूर्ण, अपरिवर्तित JSON-RPC params सरणी। जब आपको उन फ़ील्ड तक पहुंचने की आवश्यकता हो जो संरचित इनपुट गुणों के माध्यम से उजागर नहीं की गई हैं, तो इसका उपयोग करें, जैसे:
- फ़ंक्शन हस्ताक्षर का पता लगाने के लिए अनुबंध कॉल डेटा (
dataफ़ील्ड) - EIP-2930 लेन-देन के लिए एक्सेस सूचियां
- कस्टम या गैर-मानक फ़ील्ड
उदाहरण
# 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")
}