Field Input
Referensi lengkap untuk semua data yang tersedia dalam keputusan kebijakan
Setiap keputusan kebijakan memiliki akses ke data permintaan melalui objek input. Halaman ini mendokumentasikan semua field yang tersedia yang dapat Anda gunakan dalam kebijakan Anda.
Jaringan
Field-field ini mengidentifikasi jaringan blockchain dan metode RPC yang dipanggil, memungkinkan Anda membuat kebijakan khusus chain atau membatasi operasi tertentu.
input.chain
| Type | Example Values |
|---|---|
| string | "ethereum", "polygon", "arbitrum", "optimism", "base" |
Pengidentifikasi jaringan blockchain untuk permintaan. Gunakan field ini untuk membatasi akses ke chain tertentu, menerapkan kebijakan berbeda per jaringan, atau memblokir chain tertentu sepenuhnya.
Contoh
# 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" |
Nama metode JSON-RPC dari permintaan. Gunakan ini untuk mengizinkan atau memblokir operasi tertentu. Misalnya, Anda dapat mengizinkan operasi baca (eth_call, eth_getBalance) sambil membatasi operasi tulis (eth_sendTransaction).
Perhatikan bahwa beberapa metode dibatasi di tingkat platform dan tidak dapat diaktifkan melalui kebijakan.
Contoh
# 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"}
}Asal Permintaan
Field-field ini menyediakan informasi lokasi tentang asal permintaan, memungkinkan kontrol akses berbasis geografis dan kepatuhan terhadap regulasi regional.
input.source_ip
| Type | Example Values |
|---|---|
| string | "192.168.1.1", "2001:db8::1" |
Alamat IP klien yang melakukan permintaan. Gunakan ini untuk daftar izin/blokir berbasis IP atau untuk menerapkan pembatasan laju berdasarkan sumber.
Resolusi IP
Secara default, 256 Blocks menggunakan alamat IP klien yang terhubung. Jika permintaan Anda diproxy melalui infrastruktur Anda sendiri, Anda dapat meneruskan IP klien asli melalui header X-Forwarded-For - 256 Blocks akan menggunakan alamat IP pertama dari header tersebut.
Ini berguna ketika:
- Permintaan diproxy melalui server backend Anda
- Anda perlu meneruskan alamat IP pengguna akhir yang sebenarnya
- Menguji kebijakan dengan alamat IP yang berbeda dalam pengembangan
Contoh
# 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" |
Kode negara dua huruf ISO 3166-1 alpha-2 yang diturunkan dari source_ip. Gunakan ini untuk pembatasan geografis, kepatuhan regulasi, atau kebijakan khusus wilayah.
Pemetaan negara disegarkan setiap hari. Akurasi biasanya 95%+ untuk alamat IP publik.
Nilai Khusus
Untuk alamat IP non-publik, nilai berikut dikembalikan sebagai pengganti kode negara:
| Value | Description |
|---|---|
"PRIVATE" | Rentang IP pribadi (10.x.x.x, 172.16-31.x.x, 192.168.x.x) |
"LOCALHOST" | Alamat loopback (127.x.x.x) |
"LINK_LOCAL" | Alamat link-local (169.254.x.x) |
"MULTICAST" | Alamat multicast (224.x.x.x - 239.x.x.x) |
"RESERVED" | Alamat yang dicadangkan (240.x.x.x+) |
"UNKNOWN" | Kegagalan pencarian atau jenis alamat yang tidak didukung |
Contoh
# 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
}Parameter Transaksi
Field-field ini diekstrak dari parameter permintaan JSON-RPC. Semua alamat dinormalisasi menjadi huruf kecil dengan awalan 0x untuk perbandingan yang konsisten.
input.from_address
| Type | Example Value |
|---|---|
| string (nullable) | "0x742d35cc6634c0532925a3b844bc9e7595f..." |
Alamat dompet pengirim. Ini mengidentifikasi siapa yang memulai transaksi atau permintaan tanda tangan. Gunakan field ini untuk menerapkan daftar izin/blokir untuk dompet tertentu, atau untuk menerapkan aturan kebijakan yang berbeda berdasarkan pengirim.
Sumber berdasarkan Metode 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] |
Contoh
# 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..." |
Alamat penerima atau target transaksi. Ini bisa berupa alamat dompet untuk transfer sederhana, atau alamat kontrak untuk interaksi kontrak. Nilainya adalah null saat men-deploy kontrak baru (transaksi pembuatan kontrak tidak memiliki penerima).
Sumber berdasarkan Metode RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].to |
eth_call | params[0].to |
eth_getBalance | params[0] |
eth_getTransactionCount | params[0] |
Contoh
# 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..."] |
Array alamat kontrak pintar yang terlibat dalam permintaan. Ini sangat berguna untuk mengontrol kontrak mana yang dapat berinteraksi dengan pengguna Anda. Array dapat berisi beberapa alamat untuk metode seperti eth_getLogs yang dapat melakukan query terhadap beberapa kontrak.
Sumber berdasarkan Metode RPC
| Method | Parameter Location | Notes |
|---|---|---|
eth_sendTransaction | params[0].to | Hanya jika field data atau input ada |
eth_call | params[0].to | Saat memanggil kontrak |
eth_getCode | params[0] | Alamat kontrak target |
eth_getStorageAt | params[0] | Alamat kontrak target |
eth_getLogs | params[0].address | Dapat berupa alamat tunggal atau array |
Contoh
# 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) |
Nilai token asli yang ditransfer, dinyatakan dalam wei sebagai string heksadesimal. Wei adalah unit terkecil ETH (1 ETH = 10^18 wei). Ini adalah nilai mentah on-chain - untuk kebijakan berbasis USD, gunakan input.usd_value sebagai gantinya.
Sumber berdasarkan Metode RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].value |
eth_call | params[0].value |
Contoh
# 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) |
Jumlah maksimum unit gas yang diizinkan dikonsumsi transaksi, sebagai string heksadesimal. Transfer ETH sederhana menggunakan 21.000 gas, sementara interaksi kontrak biasanya memerlukan lebih banyak.
Sumber berdasarkan Metode RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].gas |
eth_call | params[0].gas |
Contoh
# 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) |
Harga gas untuk transaksi legacy (pra-EIP-1559), dinyatakan dalam wei sebagai string heksadesimal. Field ini adalah null untuk transaksi EIP-1559 yang menggunakan max_fee_per_gas sebagai gantinya.
Sumber berdasarkan Metode RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].gasPrice |
eth_call | params[0].gasPrice |
Contoh
# 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) |
Biaya total maksimum per unit gas untuk transaksi EIP-1559, sebagai string heksadesimal. Ini adalah maksimum absolut yang bersedia dibayar pengirim (biaya dasar + biaya prioritas). Hanya ada untuk jenis transaksi EIP-1559.
Sumber berdasarkan Metode RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].maxFeePerGas |
Contoh
# 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) |
Biaya prioritas maksimum (tip) per unit gas untuk transaksi EIP-1559, sebagai string heksadesimal. Ini adalah bagian yang diberikan kepada produsen blok sebagai insentif. Hanya ada untuk jenis transaksi EIP-1559.
Sumber berdasarkan Metode RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].maxPriorityFeePerGas |
Contoh
# 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
}Data yang Diperkaya
Field-field ini dihitung oleh 256 Blocks untuk memberikan konteks tambahan di luar yang ada dalam permintaan mentah.
input.usd_value
| Type | Example Value |
|---|---|
| number (nullable) | 1500.50 |
Ekuivalen USD dari nilai token asli transaksi (value_wei), dihitung menggunakan harga pasar saat ini. Ini adalah field yang paling umum untuk menerapkan batas pengeluaran dan kontrol sponsor.
Harga diambil setiap menit dari umpan harga yang andal (seperti Chainlink). Nilainya mungkin null jika transaksi tidak memiliki nilai (misalnya, panggilan kontrak murni).
Contoh
# 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
}Data Mentah
Untuk kasus penggunaan lanjutan di mana field terstruktur di atas tidak menyediakan apa yang Anda butuhkan.
input.raw_params
| Type | Example Value |
|---|---|
| array | [{"from": "0x...", "to": "0x...", "value": "0x...", "data": "0x..."}] |
Array params JSON-RPC yang lengkap dan tidak dimodifikasi dari permintaan asli. Gunakan ini ketika Anda perlu mengakses field yang tidak diekspos melalui properti input terstruktur, seperti:
- Data panggilan kontrak (field
data) untuk deteksi tanda tangan fungsi - Daftar akses untuk transaksi EIP-2930
- Field kustom atau non-standar
Contoh
# 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")
}